summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_bus.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-10-02 09:34:29 +0000
committerphk <phk@FreeBSD.org>2002-10-02 09:34:29 +0000
commitfeb8c6a405493202efe2d6743b8bb785cf9ce590 (patch)
tree1ce483ce5f9b29d07f0a151ddcae52672751de4a /sys/kern/subr_bus.c
parentf98c8d3a060b006e04ae9474a17d395ab7df7180 (diff)
downloadFreeBSD-src-feb8c6a405493202efe2d6743b8bb785cf9ce590.zip
FreeBSD-src-feb8c6a405493202efe2d6743b8bb785cf9ce590.tar.gz
Absorb <sys/bus_private.h> into kern/subr_bus.c to prevent misunderstandings.
Suggested by: bde Approved by: dfr
Diffstat (limited to 'sys/kern/subr_bus.c')
-rw-r--r--sys/kern/subr_bus.c76
1 files changed, 75 insertions, 1 deletions
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 2008aa1..83a402f 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -38,12 +38,86 @@
#include <sys/rman.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
-#include <sys/bus_private.h>
+#include <sys/bus.h>
#include <machine/stdarg.h>
#include <vm/uma.h>
+/*
+ * Used to attach drivers to devclasses.
+ */
+typedef struct driverlink *driverlink_t;
+struct driverlink {
+ driver_t *driver;
+ TAILQ_ENTRY(driverlink) link; /* list of drivers in devclass */
+};
+
+/*
+ * Forward declarations
+ */
+typedef TAILQ_HEAD(devclass_list, devclass) devclass_list_t;
+typedef TAILQ_HEAD(driver_list, driverlink) driver_list_t;
+typedef TAILQ_HEAD(device_list, device) device_list_t;
+
+struct devclass {
+ TAILQ_ENTRY(devclass) link;
+ driver_list_t drivers; /* bus devclasses store drivers for bus */
+ char *name;
+ device_t *devices; /* array of devices indexed by unit */
+ int maxunit; /* size of devices array */
+};
+
+/*
+ * Implementation of device.
+ */
+struct device {
+ /*
+ * A device is a kernel object. The first field must be the
+ * current ops table for the object.
+ */
+ KOBJ_FIELDS;
+
+ /*
+ * Device hierarchy.
+ */
+ TAILQ_ENTRY(device) link; /* list of devices in parent */
+ TAILQ_ENTRY(device) devlink; /* global device list membership */
+ device_t parent;
+ device_list_t children; /* list of subordinate devices */
+
+ /*
+ * Details of this device.
+ */
+ driver_t *driver;
+ devclass_t devclass; /* device class which we are in */
+ int unit;
+ char* nameunit; /* name+unit e.g. foodev0 */
+ char* desc; /* driver specific description */
+ int busy; /* count of calls to device_busy() */
+ device_state_t state;
+ u_int32_t devflags; /* api level flags for device_get_flags() */
+ u_short flags;
+#define DF_ENABLED 1 /* device should be probed/attached */
+#define DF_FIXEDCLASS 2 /* devclass specified at create time */
+#define DF_WILDCARD 4 /* unit was originally wildcard */
+#define DF_DESCMALLOCED 8 /* description was malloced */
+#define DF_QUIET 16 /* don't print verbose attach message */
+#define DF_DONENOMATCH 32 /* don't execute DEVICE_NOMATCH again */
+#define DF_EXTERNALSOFTC 64 /* softc not allocated by us */
+ u_char order; /* order from device_add_child_ordered() */
+ u_char pad;
+ void *ivars;
+ void *softc;
+};
+
+struct device_op_desc {
+ unsigned int offset; /* offset in driver ops */
+ struct method* method; /* internal method implementation */
+ devop_t deflt; /* default implementation */
+ const char* name; /* unique name (for registration) */
+};
+
static MALLOC_DEFINE(M_BUS, "bus", "Bus data structures");
#ifdef BUS_DEBUG
OpenPOWER on IntegriCloud