The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/bus_private.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 1997,1998 Doug Rabson
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24  * SUCH DAMAGE.
   25  *
   26  * $FreeBSD$
   27  */
   28 
   29 #ifndef _SYS_BUS_PRIVATE_H_
   30 #define _SYS_BUS_PRIVATE_H_
   31 
   32 #include <sys/bus.h>
   33 
   34 /*
   35  * Used to attach drivers to devclasses.
   36  */
   37 typedef struct driverlink *driverlink_t;
   38 struct driverlink {
   39     driver_t            *driver;
   40     TAILQ_ENTRY(driverlink) link; /* list of drivers in devclass */
   41 };
   42 
   43 /*
   44  * Forward declarations
   45  */
   46 typedef TAILQ_HEAD(devclass_list, devclass) devclass_list_t;
   47 typedef TAILQ_HEAD(driver_list, driverlink) driver_list_t;
   48 typedef TAILQ_HEAD(device_list, device) device_list_t;
   49 
   50 struct devclass {
   51     TAILQ_ENTRY(devclass) link;
   52     driver_list_t       drivers; /* bus devclasses store drivers for bus */
   53     char                *name;
   54     device_t            *devices; /* array of devices indexed by unit */
   55     int                 maxunit; /* size of devices array */
   56 };
   57 
   58 /*
   59  * Resources from config(8).
   60  */
   61 typedef enum {
   62     RES_INT, RES_STRING, RES_LONG
   63 } resource_type;
   64 
   65 struct config_resource {
   66     char                *name;
   67     resource_type       type;
   68     union {
   69         long            longval;
   70         int             intval;
   71         char*           stringval;
   72     } u;
   73 };
   74 
   75 struct config_device {
   76     char                *name;  /* e.g. "lpt", "wdc" etc */
   77     int                 unit;
   78     int                 resource_count;
   79     struct config_resource      *resources;
   80 };
   81 
   82 /*
   83  * Compiled device methods.
   84  */
   85 struct device_ops {
   86     int maxoffset;
   87     devop_t methods[1];
   88 };
   89 
   90 /*
   91  * Helpers for device method wrappers.
   92  */
   93 #define DEVOPDESC(OP)   (&OP##_##desc)
   94 
   95 #define DEVOPS(DEV)        (DEV->ops)
   96 #define DEVOPMETH(DEV, OP)                                      \
   97         ((DEVOPDESC(OP)->offset >= DEVOPS(DEV)->maxoffset)      \
   98          ? DEVOPDESC(OP)->deflt                                 \
   99          : DEVOPS(DEV)->methods[DEVOPDESC(OP)->offset])
  100 
  101 #define DRVOPS(DRV)        ((struct device_ops *)DRV->ops)
  102 #define DRVOPMETH(DRV, OP)                                      \
  103         ((DEVOPDESC(OP)->offset >= DRVOPS(DRV)->maxoffset)      \
  104          ? DEVOPDESC(OP)->deflt                                 \
  105          : DRVOPS(DRV)->methods[DEVOPDESC(OP)->offset])
  106 
  107 /*
  108  * Implementation of device.
  109  */
  110 struct device {
  111     /*
  112      * Device hierarchy.
  113      */
  114     TAILQ_ENTRY(device) link;   /* list of devices in parent */
  115     device_t            parent;
  116     device_list_t       children; /* list of subordinate devices */
  117 
  118     /*
  119      * Details of this device.
  120      */
  121     device_ops_t        ops;
  122     driver_t            *driver;
  123     devclass_t          devclass; /* device class which we are in */
  124     int                 unit;
  125     char*               nameunit; /* name+unit e.g. foodev0 */
  126     char*               desc;   /* driver specific description */
  127     int                 busy;   /* count of calls to device_busy() */
  128     device_state_t      state;
  129     u_int32_t           devflags; /* api level flags for device_get_flags() */
  130     u_short             flags;
  131 #define DF_ENABLED      1       /* device should be probed/attached */
  132 #define DF_FIXEDCLASS   2       /* devclass specified at create time */
  133 #define DF_WILDCARD     4       /* unit was originally wildcard */
  134 #define DF_DESCMALLOCED 8       /* description was malloced */
  135 #define DF_QUIET        16      /* don't print verbose attach message */
  136 #define DF_DONENOMATCH  32      /* don't execute DEVICE_NOMATCH again */
  137 #define DF_EXTERNALSOFTC 64     /* softc not allocated by us */
  138     u_char              order;  /* order from device_add_child_ordered() */
  139     u_char              pad;
  140 #ifdef DEVICE_SYSCTLS
  141     struct sysctl_oid   oid[4];
  142     struct sysctl_oid_list oidlist[1];
  143 #endif
  144     void                *ivars;
  145     void                *softc;
  146 };
  147 
  148 struct device_op_desc {
  149     unsigned int        offset; /* offset in driver ops */
  150     struct method*      method; /* internal method implementation */
  151     devop_t             deflt;  /* default implementation */
  152     const char*         name;   /* unique name (for registration) */
  153 };
  154 
  155 #endif /* !_SYS_BUS_PRIVATE_H_ */

Cache object: 1eede2a0c79101fb4bacd91ed210a059


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.