]> CyberLeo.Net >> Repos - FreeBSD/releng/10.3.git/blob - sys/kern/subr_bus.c
- Copy stable/10@296371 to releng/10.3 in preparation for 10.3-RC1
[FreeBSD/releng/10.3.git] / sys / kern / subr_bus.c
1 /*-
2  * Copyright (c) 1997,1998,2003 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
27 #include <sys/cdefs.h>
28 __FBSDID("$FreeBSD$");
29
30 #include "opt_bus.h"
31 #include "opt_random.h"
32
33 #include <sys/param.h>
34 #include <sys/conf.h>
35 #include <sys/filio.h>
36 #include <sys/lock.h>
37 #include <sys/kernel.h>
38 #include <sys/kobj.h>
39 #include <sys/limits.h>
40 #include <sys/malloc.h>
41 #include <sys/module.h>
42 #include <sys/mutex.h>
43 #include <sys/poll.h>
44 #include <sys/priv.h>
45 #include <sys/proc.h>
46 #include <sys/condvar.h>
47 #include <sys/queue.h>
48 #include <machine/bus.h>
49 #include <sys/random.h>
50 #include <sys/rman.h>
51 #include <sys/selinfo.h>
52 #include <sys/signalvar.h>
53 #include <sys/sysctl.h>
54 #include <sys/systm.h>
55 #include <sys/uio.h>
56 #include <sys/bus.h>
57 #include <sys/interrupt.h>
58 #include <sys/cpuset.h>
59
60 #include <net/vnet.h>
61
62 #include <machine/cpu.h>
63 #include <machine/stdarg.h>
64
65 #include <vm/uma.h>
66
67 SYSCTL_NODE(_hw, OID_AUTO, bus, CTLFLAG_RW, NULL, NULL);
68 SYSCTL_NODE(, OID_AUTO, dev, CTLFLAG_RW, NULL, NULL);
69
70 /*
71  * Used to attach drivers to devclasses.
72  */
73 typedef struct driverlink *driverlink_t;
74 struct driverlink {
75         kobj_class_t    driver;
76         TAILQ_ENTRY(driverlink) link;   /* list of drivers in devclass */
77         int             pass;
78         TAILQ_ENTRY(driverlink) passlink;
79 };
80
81 /*
82  * Forward declarations
83  */
84 typedef TAILQ_HEAD(devclass_list, devclass) devclass_list_t;
85 typedef TAILQ_HEAD(driver_list, driverlink) driver_list_t;
86 typedef TAILQ_HEAD(device_list, device) device_list_t;
87
88 struct devclass {
89         TAILQ_ENTRY(devclass) link;
90         devclass_t      parent;         /* parent in devclass hierarchy */
91         driver_list_t   drivers;     /* bus devclasses store drivers for bus */
92         char            *name;
93         device_t        *devices;       /* array of devices indexed by unit */
94         int             maxunit;        /* size of devices array */
95         int             flags;
96 #define DC_HAS_CHILDREN         1
97
98         struct sysctl_ctx_list sysctl_ctx;
99         struct sysctl_oid *sysctl_tree;
100 };
101
102 /**
103  * @brief Implementation of device.
104  */
105 struct device {
106         /*
107          * A device is a kernel object. The first field must be the
108          * current ops table for the object.
109          */
110         KOBJ_FIELDS;
111
112         /*
113          * Device hierarchy.
114          */
115         TAILQ_ENTRY(device)     link;   /**< list of devices in parent */
116         TAILQ_ENTRY(device)     devlink; /**< global device list membership */
117         device_t        parent;         /**< parent of this device  */
118         device_list_t   children;       /**< list of child devices */
119
120         /*
121          * Details of this device.
122          */
123         driver_t        *driver;        /**< current driver */
124         devclass_t      devclass;       /**< current device class */
125         int             unit;           /**< current unit number */
126         char*           nameunit;       /**< name+unit e.g. foodev0 */
127         char*           desc;           /**< driver specific description */
128         int             busy;           /**< count of calls to device_busy() */
129         device_state_t  state;          /**< current device state  */
130         uint32_t        devflags;       /**< api level flags for device_get_flags() */
131         u_int           flags;          /**< internal device flags  */
132 #define DF_ENABLED      0x01            /* device should be probed/attached */
133 #define DF_FIXEDCLASS   0x02            /* devclass specified at create time */
134 #define DF_WILDCARD     0x04            /* unit was originally wildcard */
135 #define DF_DESCMALLOCED 0x08            /* description was malloced */
136 #define DF_QUIET        0x10            /* don't print verbose attach message */
137 #define DF_DONENOMATCH  0x20            /* don't execute DEVICE_NOMATCH again */
138 #define DF_EXTERNALSOFTC 0x40           /* softc not allocated by us */
139 #define DF_REBID        0x80            /* Can rebid after attach */
140         u_int   order;                  /**< order from device_add_child_ordered() */
141         void    *ivars;                 /**< instance variables  */
142         void    *softc;                 /**< current driver's variables  */
143
144         struct sysctl_ctx_list sysctl_ctx; /**< state for sysctl variables  */
145         struct sysctl_oid *sysctl_tree; /**< state for sysctl variables */
146 };
147
148 static MALLOC_DEFINE(M_BUS, "bus", "Bus data structures");
149 static MALLOC_DEFINE(M_BUS_SC, "bus-sc", "Bus data structures, softc");
150
151 static void devctl2_init(void);
152
153 #ifdef BUS_DEBUG
154
155 static int bus_debug = 1;
156 TUNABLE_INT("bus.debug", &bus_debug);
157 SYSCTL_INT(_debug, OID_AUTO, bus_debug, CTLFLAG_RW, &bus_debug, 0,
158     "Debug bus code");
159
160 #define PDEBUG(a)       if (bus_debug) {printf("%s:%d: ", __func__, __LINE__), printf a; printf("\n");}
161 #define DEVICENAME(d)   ((d)? device_get_name(d): "no device")
162 #define DRIVERNAME(d)   ((d)? d->name : "no driver")
163 #define DEVCLANAME(d)   ((d)? d->name : "no devclass")
164
165 /**
166  * Produce the indenting, indent*2 spaces plus a '.' ahead of that to
167  * prevent syslog from deleting initial spaces
168  */
169 #define indentprintf(p) do { int iJ; printf("."); for (iJ=0; iJ<indent; iJ++) printf("  "); printf p ; } while (0)
170
171 static void print_device_short(device_t dev, int indent);
172 static void print_device(device_t dev, int indent);
173 void print_device_tree_short(device_t dev, int indent);
174 void print_device_tree(device_t dev, int indent);
175 static void print_driver_short(driver_t *driver, int indent);
176 static void print_driver(driver_t *driver, int indent);
177 static void print_driver_list(driver_list_t drivers, int indent);
178 static void print_devclass_short(devclass_t dc, int indent);
179 static void print_devclass(devclass_t dc, int indent);
180 void print_devclass_list_short(void);
181 void print_devclass_list(void);
182
183 #else
184 /* Make the compiler ignore the function calls */
185 #define PDEBUG(a)                       /* nop */
186 #define DEVICENAME(d)                   /* nop */
187 #define DRIVERNAME(d)                   /* nop */
188 #define DEVCLANAME(d)                   /* nop */
189
190 #define print_device_short(d,i)         /* nop */
191 #define print_device(d,i)               /* nop */
192 #define print_device_tree_short(d,i)    /* nop */
193 #define print_device_tree(d,i)          /* nop */
194 #define print_driver_short(d,i)         /* nop */
195 #define print_driver(d,i)               /* nop */
196 #define print_driver_list(d,i)          /* nop */
197 #define print_devclass_short(d,i)       /* nop */
198 #define print_devclass(d,i)             /* nop */
199 #define print_devclass_list_short()     /* nop */
200 #define print_devclass_list()           /* nop */
201 #endif
202
203 /*
204  * dev sysctl tree
205  */
206
207 enum {
208         DEVCLASS_SYSCTL_PARENT,
209 };
210
211 static int
212 devclass_sysctl_handler(SYSCTL_HANDLER_ARGS)
213 {
214         devclass_t dc = (devclass_t)arg1;
215         const char *value;
216
217         switch (arg2) {
218         case DEVCLASS_SYSCTL_PARENT:
219                 value = dc->parent ? dc->parent->name : "";
220                 break;
221         default:
222                 return (EINVAL);
223         }
224         return (SYSCTL_OUT(req, value, strlen(value)));
225 }
226
227 static void
228 devclass_sysctl_init(devclass_t dc)
229 {
230
231         if (dc->sysctl_tree != NULL)
232                 return;
233         sysctl_ctx_init(&dc->sysctl_ctx);
234         dc->sysctl_tree = SYSCTL_ADD_NODE(&dc->sysctl_ctx,
235             SYSCTL_STATIC_CHILDREN(_dev), OID_AUTO, dc->name,
236             CTLFLAG_RD, NULL, "");
237         SYSCTL_ADD_PROC(&dc->sysctl_ctx, SYSCTL_CHILDREN(dc->sysctl_tree),
238             OID_AUTO, "%parent", CTLTYPE_STRING | CTLFLAG_RD,
239             dc, DEVCLASS_SYSCTL_PARENT, devclass_sysctl_handler, "A",
240             "parent class");
241 }
242
243 enum {
244         DEVICE_SYSCTL_DESC,
245         DEVICE_SYSCTL_DRIVER,
246         DEVICE_SYSCTL_LOCATION,
247         DEVICE_SYSCTL_PNPINFO,
248         DEVICE_SYSCTL_PARENT,
249 };
250
251 static int
252 device_sysctl_handler(SYSCTL_HANDLER_ARGS)
253 {
254         device_t dev = (device_t)arg1;
255         const char *value;
256         char *buf;
257         int error;
258
259         buf = NULL;
260         switch (arg2) {
261         case DEVICE_SYSCTL_DESC:
262                 value = dev->desc ? dev->desc : "";
263                 break;
264         case DEVICE_SYSCTL_DRIVER:
265                 value = dev->driver ? dev->driver->name : "";
266                 break;
267         case DEVICE_SYSCTL_LOCATION:
268                 value = buf = malloc(1024, M_BUS, M_WAITOK | M_ZERO);
269                 bus_child_location_str(dev, buf, 1024);
270                 break;
271         case DEVICE_SYSCTL_PNPINFO:
272                 value = buf = malloc(1024, M_BUS, M_WAITOK | M_ZERO);
273                 bus_child_pnpinfo_str(dev, buf, 1024);
274                 break;
275         case DEVICE_SYSCTL_PARENT:
276                 value = dev->parent ? dev->parent->nameunit : "";
277                 break;
278         default:
279                 return (EINVAL);
280         }
281         error = SYSCTL_OUT(req, value, strlen(value));
282         if (buf != NULL)
283                 free(buf, M_BUS);
284         return (error);
285 }
286
287 static void
288 device_sysctl_init(device_t dev)
289 {
290         devclass_t dc = dev->devclass;
291         int domain;
292
293         if (dev->sysctl_tree != NULL)
294                 return;
295         devclass_sysctl_init(dc);
296         sysctl_ctx_init(&dev->sysctl_ctx);
297         dev->sysctl_tree = SYSCTL_ADD_NODE(&dev->sysctl_ctx,
298             SYSCTL_CHILDREN(dc->sysctl_tree), OID_AUTO,
299             dev->nameunit + strlen(dc->name),
300             CTLFLAG_RD, NULL, "");
301         SYSCTL_ADD_PROC(&dev->sysctl_ctx, SYSCTL_CHILDREN(dev->sysctl_tree),
302             OID_AUTO, "%desc", CTLTYPE_STRING | CTLFLAG_RD,
303             dev, DEVICE_SYSCTL_DESC, device_sysctl_handler, "A",
304             "device description");
305         SYSCTL_ADD_PROC(&dev->sysctl_ctx, SYSCTL_CHILDREN(dev->sysctl_tree),
306             OID_AUTO, "%driver", CTLTYPE_STRING | CTLFLAG_RD,
307             dev, DEVICE_SYSCTL_DRIVER, device_sysctl_handler, "A",
308             "device driver name");
309         SYSCTL_ADD_PROC(&dev->sysctl_ctx, SYSCTL_CHILDREN(dev->sysctl_tree),
310             OID_AUTO, "%location", CTLTYPE_STRING | CTLFLAG_RD,
311             dev, DEVICE_SYSCTL_LOCATION, device_sysctl_handler, "A",
312             "device location relative to parent");
313         SYSCTL_ADD_PROC(&dev->sysctl_ctx, SYSCTL_CHILDREN(dev->sysctl_tree),
314             OID_AUTO, "%pnpinfo", CTLTYPE_STRING | CTLFLAG_RD,
315             dev, DEVICE_SYSCTL_PNPINFO, device_sysctl_handler, "A",
316             "device identification");
317         SYSCTL_ADD_PROC(&dev->sysctl_ctx, SYSCTL_CHILDREN(dev->sysctl_tree),
318             OID_AUTO, "%parent", CTLTYPE_STRING | CTLFLAG_RD,
319             dev, DEVICE_SYSCTL_PARENT, device_sysctl_handler, "A",
320             "parent device");
321         if (bus_get_domain(dev, &domain) == 0)
322                 SYSCTL_ADD_INT(&dev->sysctl_ctx,
323                     SYSCTL_CHILDREN(dev->sysctl_tree), OID_AUTO, "%domain",
324                     CTLFLAG_RD, NULL, domain, "NUMA domain");
325 }
326
327 static void
328 device_sysctl_update(device_t dev)
329 {
330         devclass_t dc = dev->devclass;
331
332         if (dev->sysctl_tree == NULL)
333                 return;
334         sysctl_rename_oid(dev->sysctl_tree, dev->nameunit + strlen(dc->name));
335 }
336
337 static void
338 device_sysctl_fini(device_t dev)
339 {
340         if (dev->sysctl_tree == NULL)
341                 return;
342         sysctl_ctx_free(&dev->sysctl_ctx);
343         dev->sysctl_tree = NULL;
344 }
345
346 /*
347  * /dev/devctl implementation
348  */
349
350 /*
351  * This design allows only one reader for /dev/devctl.  This is not desirable
352  * in the long run, but will get a lot of hair out of this implementation.
353  * Maybe we should make this device a clonable device.
354  *
355  * Also note: we specifically do not attach a device to the device_t tree
356  * to avoid potential chicken and egg problems.  One could argue that all
357  * of this belongs to the root node.  One could also further argue that the
358  * sysctl interface that we have not might more properly be an ioctl
359  * interface, but at this stage of the game, I'm not inclined to rock that
360  * boat.
361  *
362  * I'm also not sure that the SIGIO support is done correctly or not, as
363  * I copied it from a driver that had SIGIO support that likely hasn't been
364  * tested since 3.4 or 2.2.8!
365  */
366
367 /* Deprecated way to adjust queue length */
368 static int sysctl_devctl_disable(SYSCTL_HANDLER_ARGS);
369 /* XXX Need to support old-style tunable hw.bus.devctl_disable" */
370 SYSCTL_PROC(_hw_bus, OID_AUTO, devctl_disable, CTLTYPE_INT | CTLFLAG_RW |
371     CTLFLAG_MPSAFE, NULL, 0, sysctl_devctl_disable, "I",
372     "devctl disable -- deprecated");
373
374 #define DEVCTL_DEFAULT_QUEUE_LEN 1000
375 static int sysctl_devctl_queue(SYSCTL_HANDLER_ARGS);
376 static int devctl_queue_length = DEVCTL_DEFAULT_QUEUE_LEN;
377 TUNABLE_INT("hw.bus.devctl_queue", &devctl_queue_length);
378 SYSCTL_PROC(_hw_bus, OID_AUTO, devctl_queue, CTLTYPE_INT | CTLFLAG_RW |
379     CTLFLAG_MPSAFE, NULL, 0, sysctl_devctl_queue, "I", "devctl queue length");
380
381 static d_open_t         devopen;
382 static d_close_t        devclose;
383 static d_read_t         devread;
384 static d_ioctl_t        devioctl;
385 static d_poll_t         devpoll;
386 static d_kqfilter_t     devkqfilter;
387
388 static struct cdevsw dev_cdevsw = {
389         .d_version =    D_VERSION,
390         .d_open =       devopen,
391         .d_close =      devclose,
392         .d_read =       devread,
393         .d_ioctl =      devioctl,
394         .d_poll =       devpoll,
395         .d_kqfilter =   devkqfilter,
396         .d_name =       "devctl",
397 };
398
399 struct dev_event_info
400 {
401         char *dei_data;
402         TAILQ_ENTRY(dev_event_info) dei_link;
403 };
404
405 TAILQ_HEAD(devq, dev_event_info);
406
407 static struct dev_softc
408 {
409         int     inuse;
410         int     nonblock;
411         int     queued;
412         int     async;
413         struct mtx mtx;
414         struct cv cv;
415         struct selinfo sel;
416         struct devq devq;
417         struct sigio *sigio;
418 } devsoftc;
419
420 static void     filt_devctl_detach(struct knote *kn);
421 static int      filt_devctl_read(struct knote *kn, long hint);
422
423 struct filterops devctl_rfiltops = {
424         .f_isfd = 1,
425         .f_detach = filt_devctl_detach,
426         .f_event = filt_devctl_read,
427 };
428
429 static struct cdev *devctl_dev;
430
431 static void
432 devinit(void)
433 {
434         devctl_dev = make_dev_credf(MAKEDEV_ETERNAL, &dev_cdevsw, 0, NULL,
435             UID_ROOT, GID_WHEEL, 0600, "devctl");
436         mtx_init(&devsoftc.mtx, "dev mtx", "devd", MTX_DEF);
437         cv_init(&devsoftc.cv, "dev cv");
438         TAILQ_INIT(&devsoftc.devq);
439         knlist_init_mtx(&devsoftc.sel.si_note, &devsoftc.mtx);
440         devctl2_init();
441 }
442
443 static int
444 devopen(struct cdev *dev, int oflags, int devtype, struct thread *td)
445 {
446
447         mtx_lock(&devsoftc.mtx);
448         if (devsoftc.inuse) {
449                 mtx_unlock(&devsoftc.mtx);
450                 return (EBUSY);
451         }
452         /* move to init */
453         devsoftc.inuse = 1;
454         mtx_unlock(&devsoftc.mtx);
455         return (0);
456 }
457
458 static int
459 devclose(struct cdev *dev, int fflag, int devtype, struct thread *td)
460 {
461
462         mtx_lock(&devsoftc.mtx);
463         devsoftc.inuse = 0;
464         devsoftc.nonblock = 0;
465         devsoftc.async = 0;
466         cv_broadcast(&devsoftc.cv);
467         funsetown(&devsoftc.sigio);
468         mtx_unlock(&devsoftc.mtx);
469         return (0);
470 }
471
472 /*
473  * The read channel for this device is used to report changes to
474  * userland in realtime.  We are required to free the data as well as
475  * the n1 object because we allocate them separately.  Also note that
476  * we return one record at a time.  If you try to read this device a
477  * character at a time, you will lose the rest of the data.  Listening
478  * programs are expected to cope.
479  */
480 static int
481 devread(struct cdev *dev, struct uio *uio, int ioflag)
482 {
483         struct dev_event_info *n1;
484         int rv;
485
486         mtx_lock(&devsoftc.mtx);
487         while (TAILQ_EMPTY(&devsoftc.devq)) {
488                 if (devsoftc.nonblock) {
489                         mtx_unlock(&devsoftc.mtx);
490                         return (EAGAIN);
491                 }
492                 rv = cv_wait_sig(&devsoftc.cv, &devsoftc.mtx);
493                 if (rv) {
494                         /*
495                          * Need to translate ERESTART to EINTR here? -- jake
496                          */
497                         mtx_unlock(&devsoftc.mtx);
498                         return (rv);
499                 }
500         }
501         n1 = TAILQ_FIRST(&devsoftc.devq);
502         TAILQ_REMOVE(&devsoftc.devq, n1, dei_link);
503         devsoftc.queued--;
504         mtx_unlock(&devsoftc.mtx);
505         rv = uiomove(n1->dei_data, strlen(n1->dei_data), uio);
506         free(n1->dei_data, M_BUS);
507         free(n1, M_BUS);
508         return (rv);
509 }
510
511 static  int
512 devioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread *td)
513 {
514         switch (cmd) {
515
516         case FIONBIO:
517                 if (*(int*)data)
518                         devsoftc.nonblock = 1;
519                 else
520                         devsoftc.nonblock = 0;
521                 return (0);
522         case FIOASYNC:
523                 if (*(int*)data)
524                         devsoftc.async = 1;
525                 else
526                         devsoftc.async = 0;
527                 return (0);
528         case FIOSETOWN:
529                 return fsetown(*(int *)data, &devsoftc.sigio);
530         case FIOGETOWN:
531                 *(int *)data = fgetown(&devsoftc.sigio);
532                 return (0);
533
534                 /* (un)Support for other fcntl() calls. */
535         case FIOCLEX:
536         case FIONCLEX:
537         case FIONREAD:
538         default:
539                 break;
540         }
541         return (ENOTTY);
542 }
543
544 static  int
545 devpoll(struct cdev *dev, int events, struct thread *td)
546 {
547         int     revents = 0;
548
549         mtx_lock(&devsoftc.mtx);
550         if (events & (POLLIN | POLLRDNORM)) {
551                 if (!TAILQ_EMPTY(&devsoftc.devq))
552                         revents = events & (POLLIN | POLLRDNORM);
553                 else
554                         selrecord(td, &devsoftc.sel);
555         }
556         mtx_unlock(&devsoftc.mtx);
557
558         return (revents);
559 }
560
561 static int
562 devkqfilter(struct cdev *dev, struct knote *kn)
563 {
564         int error;
565
566         if (kn->kn_filter == EVFILT_READ) {
567                 kn->kn_fop = &devctl_rfiltops;
568                 knlist_add(&devsoftc.sel.si_note, kn, 0);
569                 error = 0;
570         } else
571                 error = EINVAL;
572         return (error);
573 }
574
575 static void
576 filt_devctl_detach(struct knote *kn)
577 {
578
579         knlist_remove(&devsoftc.sel.si_note, kn, 0);
580 }
581
582 static int
583 filt_devctl_read(struct knote *kn, long hint)
584 {
585         kn->kn_data = devsoftc.queued;
586         return (kn->kn_data != 0);
587 }
588
589 /**
590  * @brief Return whether the userland process is running
591  */
592 boolean_t
593 devctl_process_running(void)
594 {
595         return (devsoftc.inuse == 1);
596 }
597
598 /**
599  * @brief Queue data to be read from the devctl device
600  *
601  * Generic interface to queue data to the devctl device.  It is
602  * assumed that @p data is properly formatted.  It is further assumed
603  * that @p data is allocated using the M_BUS malloc type.
604  */
605 void
606 devctl_queue_data_f(char *data, int flags)
607 {
608         struct dev_event_info *n1 = NULL, *n2 = NULL;
609
610         if (strlen(data) == 0)
611                 goto out;
612         if (devctl_queue_length == 0)
613                 goto out;
614         n1 = malloc(sizeof(*n1), M_BUS, flags);
615         if (n1 == NULL)
616                 goto out;
617         n1->dei_data = data;
618         mtx_lock(&devsoftc.mtx);
619         if (devctl_queue_length == 0) {
620                 mtx_unlock(&devsoftc.mtx);
621                 free(n1->dei_data, M_BUS);
622                 free(n1, M_BUS);
623                 return;
624         }
625         /* Leave at least one spot in the queue... */
626         while (devsoftc.queued > devctl_queue_length - 1) {
627                 n2 = TAILQ_FIRST(&devsoftc.devq);
628                 TAILQ_REMOVE(&devsoftc.devq, n2, dei_link);
629                 free(n2->dei_data, M_BUS);
630                 free(n2, M_BUS);
631                 devsoftc.queued--;
632         }
633         TAILQ_INSERT_TAIL(&devsoftc.devq, n1, dei_link);
634         devsoftc.queued++;
635         cv_broadcast(&devsoftc.cv);
636         KNOTE_LOCKED(&devsoftc.sel.si_note, 0);
637         mtx_unlock(&devsoftc.mtx);
638         selwakeup(&devsoftc.sel);
639         if (devsoftc.async && devsoftc.sigio != NULL)
640                 pgsigio(&devsoftc.sigio, SIGIO, 0);
641         return;
642 out:
643         /*
644          * We have to free data on all error paths since the caller
645          * assumes it will be free'd when this item is dequeued.
646          */
647         free(data, M_BUS);
648         return;
649 }
650
651 void
652 devctl_queue_data(char *data)
653 {
654
655         devctl_queue_data_f(data, M_NOWAIT);
656 }
657
658 /**
659  * @brief Send a 'notification' to userland, using standard ways
660  */
661 void
662 devctl_notify_f(const char *system, const char *subsystem, const char *type,
663     const char *data, int flags)
664 {
665         int len = 0;
666         char *msg;
667
668         if (system == NULL)
669                 return;         /* BOGUS!  Must specify system. */
670         if (subsystem == NULL)
671                 return;         /* BOGUS!  Must specify subsystem. */
672         if (type == NULL)
673                 return;         /* BOGUS!  Must specify type. */
674         len += strlen(" system=") + strlen(system);
675         len += strlen(" subsystem=") + strlen(subsystem);
676         len += strlen(" type=") + strlen(type);
677         /* add in the data message plus newline. */
678         if (data != NULL)
679                 len += strlen(data);
680         len += 3;       /* '!', '\n', and NUL */
681         msg = malloc(len, M_BUS, flags);
682         if (msg == NULL)
683                 return;         /* Drop it on the floor */
684         if (data != NULL)
685                 snprintf(msg, len, "!system=%s subsystem=%s type=%s %s\n",
686                     system, subsystem, type, data);
687         else
688                 snprintf(msg, len, "!system=%s subsystem=%s type=%s\n",
689                     system, subsystem, type);
690         devctl_queue_data_f(msg, flags);
691 }
692
693 void
694 devctl_notify(const char *system, const char *subsystem, const char *type,
695     const char *data)
696 {
697
698         devctl_notify_f(system, subsystem, type, data, M_NOWAIT);
699 }
700
701 /*
702  * Common routine that tries to make sending messages as easy as possible.
703  * We allocate memory for the data, copy strings into that, but do not
704  * free it unless there's an error.  The dequeue part of the driver should
705  * free the data.  We don't send data when the device is disabled.  We do
706  * send data, even when we have no listeners, because we wish to avoid
707  * races relating to startup and restart of listening applications.
708  *
709  * devaddq is designed to string together the type of event, with the
710  * object of that event, plus the plug and play info and location info
711  * for that event.  This is likely most useful for devices, but less
712  * useful for other consumers of this interface.  Those should use
713  * the devctl_queue_data() interface instead.
714  */
715 static void
716 devaddq(const char *type, const char *what, device_t dev)
717 {
718         char *data = NULL;
719         char *loc = NULL;
720         char *pnp = NULL;
721         const char *parstr;
722
723         if (!devctl_queue_length)/* Rare race, but lost races safely discard */
724                 return;
725         data = malloc(1024, M_BUS, M_NOWAIT);
726         if (data == NULL)
727                 goto bad;
728
729         /* get the bus specific location of this device */
730         loc = malloc(1024, M_BUS, M_NOWAIT);
731         if (loc == NULL)
732                 goto bad;
733         *loc = '\0';
734         bus_child_location_str(dev, loc, 1024);
735
736         /* Get the bus specific pnp info of this device */
737         pnp = malloc(1024, M_BUS, M_NOWAIT);
738         if (pnp == NULL)
739                 goto bad;
740         *pnp = '\0';
741         bus_child_pnpinfo_str(dev, pnp, 1024);
742
743         /* Get the parent of this device, or / if high enough in the tree. */
744         if (device_get_parent(dev) == NULL)
745                 parstr = ".";   /* Or '/' ? */
746         else
747                 parstr = device_get_nameunit(device_get_parent(dev));
748         /* String it all together. */
749         snprintf(data, 1024, "%s%s at %s %s on %s\n", type, what, loc, pnp,
750           parstr);
751         free(loc, M_BUS);
752         free(pnp, M_BUS);
753         devctl_queue_data(data);
754         return;
755 bad:
756         free(pnp, M_BUS);
757         free(loc, M_BUS);
758         free(data, M_BUS);
759         return;
760 }
761
762 /*
763  * A device was added to the tree.  We are called just after it successfully
764  * attaches (that is, probe and attach success for this device).  No call
765  * is made if a device is merely parented into the tree.  See devnomatch
766  * if probe fails.  If attach fails, no notification is sent (but maybe
767  * we should have a different message for this).
768  */
769 static void
770 devadded(device_t dev)
771 {
772         devaddq("+", device_get_nameunit(dev), dev);
773 }
774
775 /*
776  * A device was removed from the tree.  We are called just before this
777  * happens.
778  */
779 static void
780 devremoved(device_t dev)
781 {
782         devaddq("-", device_get_nameunit(dev), dev);
783 }
784
785 /*
786  * Called when there's no match for this device.  This is only called
787  * the first time that no match happens, so we don't keep getting this
788  * message.  Should that prove to be undesirable, we can change it.
789  * This is called when all drivers that can attach to a given bus
790  * decline to accept this device.  Other errors may not be detected.
791  */
792 static void
793 devnomatch(device_t dev)
794 {
795         devaddq("?", "", dev);
796 }
797
798 static int
799 sysctl_devctl_disable(SYSCTL_HANDLER_ARGS)
800 {
801         struct dev_event_info *n1;
802         int dis, error;
803
804         dis = devctl_queue_length == 0;
805         error = sysctl_handle_int(oidp, &dis, 0, req);
806         if (error || !req->newptr)
807                 return (error);
808         mtx_lock(&devsoftc.mtx);
809         if (dis) {
810                 while (!TAILQ_EMPTY(&devsoftc.devq)) {
811                         n1 = TAILQ_FIRST(&devsoftc.devq);
812                         TAILQ_REMOVE(&devsoftc.devq, n1, dei_link);
813                         free(n1->dei_data, M_BUS);
814                         free(n1, M_BUS);
815                 }
816                 devsoftc.queued = 0;
817                 devctl_queue_length = 0;
818         } else {
819                 devctl_queue_length = DEVCTL_DEFAULT_QUEUE_LEN;
820         }
821         mtx_unlock(&devsoftc.mtx);
822         return (0);
823 }
824
825 static int
826 sysctl_devctl_queue(SYSCTL_HANDLER_ARGS)
827 {
828         struct dev_event_info *n1;
829         int q, error;
830
831         q = devctl_queue_length;
832         error = sysctl_handle_int(oidp, &q, 0, req);
833         if (error || !req->newptr)
834                 return (error);
835         if (q < 0)
836                 return (EINVAL);
837         mtx_lock(&devsoftc.mtx);
838         devctl_queue_length = q;
839         while (devsoftc.queued > devctl_queue_length) {
840                 n1 = TAILQ_FIRST(&devsoftc.devq);
841                 TAILQ_REMOVE(&devsoftc.devq, n1, dei_link);
842                 free(n1->dei_data, M_BUS);
843                 free(n1, M_BUS);
844                 devsoftc.queued--;
845         }
846         mtx_unlock(&devsoftc.mtx);
847         return (0);
848 }
849
850 /* End of /dev/devctl code */
851
852 static TAILQ_HEAD(,device)      bus_data_devices;
853 static int bus_data_generation = 1;
854
855 static kobj_method_t null_methods[] = {
856         KOBJMETHOD_END
857 };
858
859 DEFINE_CLASS(null, null_methods, 0);
860
861 /*
862  * Bus pass implementation
863  */
864
865 static driver_list_t passes = TAILQ_HEAD_INITIALIZER(passes);
866 int bus_current_pass = BUS_PASS_ROOT;
867
868 /**
869  * @internal
870  * @brief Register the pass level of a new driver attachment
871  *
872  * Register a new driver attachment's pass level.  If no driver
873  * attachment with the same pass level has been added, then @p new
874  * will be added to the global passes list.
875  *
876  * @param new           the new driver attachment
877  */
878 static void
879 driver_register_pass(struct driverlink *new)
880 {
881         struct driverlink *dl;
882
883         /* We only consider pass numbers during boot. */
884         if (bus_current_pass == BUS_PASS_DEFAULT)
885                 return;
886
887         /*
888          * Walk the passes list.  If we already know about this pass
889          * then there is nothing to do.  If we don't, then insert this
890          * driver link into the list.
891          */
892         TAILQ_FOREACH(dl, &passes, passlink) {
893                 if (dl->pass < new->pass)
894                         continue;
895                 if (dl->pass == new->pass)
896                         return;
897                 TAILQ_INSERT_BEFORE(dl, new, passlink);
898                 return;
899         }
900         TAILQ_INSERT_TAIL(&passes, new, passlink);
901 }
902
903 /**
904  * @brief Raise the current bus pass
905  *
906  * Raise the current bus pass level to @p pass.  Call the BUS_NEW_PASS()
907  * method on the root bus to kick off a new device tree scan for each
908  * new pass level that has at least one driver.
909  */
910 void
911 bus_set_pass(int pass)
912 {
913         struct driverlink *dl;
914
915         if (bus_current_pass > pass)
916                 panic("Attempt to lower bus pass level");
917
918         TAILQ_FOREACH(dl, &passes, passlink) {
919                 /* Skip pass values below the current pass level. */
920                 if (dl->pass <= bus_current_pass)
921                         continue;
922
923                 /*
924                  * Bail once we hit a driver with a pass level that is
925                  * too high.
926                  */
927                 if (dl->pass > pass)
928                         break;
929
930                 /*
931                  * Raise the pass level to the next level and rescan
932                  * the tree.
933                  */
934                 bus_current_pass = dl->pass;
935                 BUS_NEW_PASS(root_bus);
936         }
937
938         /*
939          * If there isn't a driver registered for the requested pass,
940          * then bus_current_pass might still be less than 'pass'.  Set
941          * it to 'pass' in that case.
942          */
943         if (bus_current_pass < pass)
944                 bus_current_pass = pass;
945         KASSERT(bus_current_pass == pass, ("Failed to update bus pass level"));
946 }
947
948 /*
949  * Devclass implementation
950  */
951
952 static devclass_list_t devclasses = TAILQ_HEAD_INITIALIZER(devclasses);
953
954 /**
955  * @internal
956  * @brief Find or create a device class
957  *
958  * If a device class with the name @p classname exists, return it,
959  * otherwise if @p create is non-zero create and return a new device
960  * class.
961  *
962  * If @p parentname is non-NULL, the parent of the devclass is set to
963  * the devclass of that name.
964  *
965  * @param classname     the devclass name to find or create
966  * @param parentname    the parent devclass name or @c NULL
967  * @param create        non-zero to create a devclass
968  */
969 static devclass_t
970 devclass_find_internal(const char *classname, const char *parentname,
971                        int create)
972 {
973         devclass_t dc;
974
975         PDEBUG(("looking for %s", classname));
976         if (!classname)
977                 return (NULL);
978
979         TAILQ_FOREACH(dc, &devclasses, link) {
980                 if (!strcmp(dc->name, classname))
981                         break;
982         }
983
984         if (create && !dc) {
985                 PDEBUG(("creating %s", classname));
986                 dc = malloc(sizeof(struct devclass) + strlen(classname) + 1,
987                     M_BUS, M_NOWAIT | M_ZERO);
988                 if (!dc)
989                         return (NULL);
990                 dc->parent = NULL;
991                 dc->name = (char*) (dc + 1);
992                 strcpy(dc->name, classname);
993                 TAILQ_INIT(&dc->drivers);
994                 TAILQ_INSERT_TAIL(&devclasses, dc, link);
995
996                 bus_data_generation_update();
997         }
998
999         /*
1000          * If a parent class is specified, then set that as our parent so
1001          * that this devclass will support drivers for the parent class as
1002          * well.  If the parent class has the same name don't do this though
1003          * as it creates a cycle that can trigger an infinite loop in
1004          * device_probe_child() if a device exists for which there is no
1005          * suitable driver.
1006          */
1007         if (parentname && dc && !dc->parent &&
1008             strcmp(classname, parentname) != 0) {
1009                 dc->parent = devclass_find_internal(parentname, NULL, TRUE);
1010                 dc->parent->flags |= DC_HAS_CHILDREN;
1011         }
1012
1013         return (dc);
1014 }
1015
1016 /**
1017  * @brief Create a device class
1018  *
1019  * If a device class with the name @p classname exists, return it,
1020  * otherwise create and return a new device class.
1021  *
1022  * @param classname     the devclass name to find or create
1023  */
1024 devclass_t
1025 devclass_create(const char *classname)
1026 {
1027         return (devclass_find_internal(classname, NULL, TRUE));
1028 }
1029
1030 /**
1031  * @brief Find a device class
1032  *
1033  * If a device class with the name @p classname exists, return it,
1034  * otherwise return @c NULL.
1035  *
1036  * @param classname     the devclass name to find
1037  */
1038 devclass_t
1039 devclass_find(const char *classname)
1040 {
1041         return (devclass_find_internal(classname, NULL, FALSE));
1042 }
1043
1044 /**
1045  * @brief Register that a device driver has been added to a devclass
1046  *
1047  * Register that a device driver has been added to a devclass.  This
1048  * is called by devclass_add_driver to accomplish the recursive
1049  * notification of all the children classes of dc, as well as dc.
1050  * Each layer will have BUS_DRIVER_ADDED() called for all instances of
1051  * the devclass.
1052  *
1053  * We do a full search here of the devclass list at each iteration
1054  * level to save storing children-lists in the devclass structure.  If
1055  * we ever move beyond a few dozen devices doing this, we may need to
1056  * reevaluate...
1057  *
1058  * @param dc            the devclass to edit
1059  * @param driver        the driver that was just added
1060  */
1061 static void
1062 devclass_driver_added(devclass_t dc, driver_t *driver)
1063 {
1064         devclass_t parent;
1065         int i;
1066
1067         /*
1068          * Call BUS_DRIVER_ADDED for any existing busses in this class.
1069          */
1070         for (i = 0; i < dc->maxunit; i++)
1071                 if (dc->devices[i] && device_is_attached(dc->devices[i]))
1072                         BUS_DRIVER_ADDED(dc->devices[i], driver);
1073
1074         /*
1075          * Walk through the children classes.  Since we only keep a
1076          * single parent pointer around, we walk the entire list of
1077          * devclasses looking for children.  We set the
1078          * DC_HAS_CHILDREN flag when a child devclass is created on
1079          * the parent, so we only walk the list for those devclasses
1080          * that have children.
1081          */
1082         if (!(dc->flags & DC_HAS_CHILDREN))
1083                 return;
1084         parent = dc;
1085         TAILQ_FOREACH(dc, &devclasses, link) {
1086                 if (dc->parent == parent)
1087                         devclass_driver_added(dc, driver);
1088         }
1089 }
1090
1091 /**
1092  * @brief Add a device driver to a device class
1093  *
1094  * Add a device driver to a devclass. This is normally called
1095  * automatically by DRIVER_MODULE(). The BUS_DRIVER_ADDED() method of
1096  * all devices in the devclass will be called to allow them to attempt
1097  * to re-probe any unmatched children.
1098  *
1099  * @param dc            the devclass to edit
1100  * @param driver        the driver to register
1101  */
1102 int
1103 devclass_add_driver(devclass_t dc, driver_t *driver, int pass, devclass_t *dcp)
1104 {
1105         driverlink_t dl;
1106         const char *parentname;
1107
1108         PDEBUG(("%s", DRIVERNAME(driver)));
1109
1110         /* Don't allow invalid pass values. */
1111         if (pass <= BUS_PASS_ROOT)
1112                 return (EINVAL);
1113
1114         dl = malloc(sizeof *dl, M_BUS, M_NOWAIT|M_ZERO);
1115         if (!dl)
1116                 return (ENOMEM);
1117
1118         /*
1119          * Compile the driver's methods. Also increase the reference count
1120          * so that the class doesn't get freed when the last instance
1121          * goes. This means we can safely use static methods and avoids a
1122          * double-free in devclass_delete_driver.
1123          */
1124         kobj_class_compile((kobj_class_t) driver);
1125
1126         /*
1127          * If the driver has any base classes, make the
1128          * devclass inherit from the devclass of the driver's
1129          * first base class. This will allow the system to
1130          * search for drivers in both devclasses for children
1131          * of a device using this driver.
1132          */
1133         if (driver->baseclasses)
1134                 parentname = driver->baseclasses[0]->name;
1135         else
1136                 parentname = NULL;
1137         *dcp = devclass_find_internal(driver->name, parentname, TRUE);
1138
1139         dl->driver = driver;
1140         TAILQ_INSERT_TAIL(&dc->drivers, dl, link);
1141         driver->refs++;         /* XXX: kobj_mtx */
1142         dl->pass = pass;
1143         driver_register_pass(dl);
1144
1145         devclass_driver_added(dc, driver);
1146         bus_data_generation_update();
1147         return (0);
1148 }
1149
1150 /**
1151  * @brief Register that a device driver has been deleted from a devclass
1152  *
1153  * Register that a device driver has been removed from a devclass.
1154  * This is called by devclass_delete_driver to accomplish the
1155  * recursive notification of all the children classes of busclass, as
1156  * well as busclass.  Each layer will attempt to detach the driver
1157  * from any devices that are children of the bus's devclass.  The function
1158  * will return an error if a device fails to detach.
1159  * 
1160  * We do a full search here of the devclass list at each iteration
1161  * level to save storing children-lists in the devclass structure.  If
1162  * we ever move beyond a few dozen devices doing this, we may need to
1163  * reevaluate...
1164  *
1165  * @param busclass      the devclass of the parent bus
1166  * @param dc            the devclass of the driver being deleted
1167  * @param driver        the driver being deleted
1168  */
1169 static int
1170 devclass_driver_deleted(devclass_t busclass, devclass_t dc, driver_t *driver)
1171 {
1172         devclass_t parent;
1173         device_t dev;
1174         int error, i;
1175
1176         /*
1177          * Disassociate from any devices.  We iterate through all the
1178          * devices in the devclass of the driver and detach any which are
1179          * using the driver and which have a parent in the devclass which
1180          * we are deleting from.
1181          *
1182          * Note that since a driver can be in multiple devclasses, we
1183          * should not detach devices which are not children of devices in
1184          * the affected devclass.
1185          */
1186         for (i = 0; i < dc->maxunit; i++) {
1187                 if (dc->devices[i]) {
1188                         dev = dc->devices[i];
1189                         if (dev->driver == driver && dev->parent &&
1190                             dev->parent->devclass == busclass) {
1191                                 if ((error = device_detach(dev)) != 0)
1192                                         return (error);
1193                                 BUS_PROBE_NOMATCH(dev->parent, dev);
1194                                 devnomatch(dev);
1195                                 dev->flags |= DF_DONENOMATCH;
1196                         }
1197                 }
1198         }
1199
1200         /*
1201          * Walk through the children classes.  Since we only keep a
1202          * single parent pointer around, we walk the entire list of
1203          * devclasses looking for children.  We set the
1204          * DC_HAS_CHILDREN flag when a child devclass is created on
1205          * the parent, so we only walk the list for those devclasses
1206          * that have children.
1207          */
1208         if (!(busclass->flags & DC_HAS_CHILDREN))
1209                 return (0);
1210         parent = busclass;
1211         TAILQ_FOREACH(busclass, &devclasses, link) {
1212                 if (busclass->parent == parent) {
1213                         error = devclass_driver_deleted(busclass, dc, driver);
1214                         if (error)
1215                                 return (error);
1216                 }
1217         }
1218         return (0);
1219 }
1220
1221 /**
1222  * @brief Delete a device driver from a device class
1223  *
1224  * Delete a device driver from a devclass. This is normally called
1225  * automatically by DRIVER_MODULE().
1226  *
1227  * If the driver is currently attached to any devices,
1228  * devclass_delete_driver() will first attempt to detach from each
1229  * device. If one of the detach calls fails, the driver will not be
1230  * deleted.
1231  *
1232  * @param dc            the devclass to edit
1233  * @param driver        the driver to unregister
1234  */
1235 int
1236 devclass_delete_driver(devclass_t busclass, driver_t *driver)
1237 {
1238         devclass_t dc = devclass_find(driver->name);
1239         driverlink_t dl;
1240         int error;
1241
1242         PDEBUG(("%s from devclass %s", driver->name, DEVCLANAME(busclass)));
1243
1244         if (!dc)
1245                 return (0);
1246
1247         /*
1248          * Find the link structure in the bus' list of drivers.
1249          */
1250         TAILQ_FOREACH(dl, &busclass->drivers, link) {
1251                 if (dl->driver == driver)
1252                         break;
1253         }
1254
1255         if (!dl) {
1256                 PDEBUG(("%s not found in %s list", driver->name,
1257                     busclass->name));
1258                 return (ENOENT);
1259         }
1260
1261         error = devclass_driver_deleted(busclass, dc, driver);
1262         if (error != 0)
1263                 return (error);
1264
1265         TAILQ_REMOVE(&busclass->drivers, dl, link);
1266         free(dl, M_BUS);
1267
1268         /* XXX: kobj_mtx */
1269         driver->refs--;
1270         if (driver->refs == 0)
1271                 kobj_class_free((kobj_class_t) driver);
1272
1273         bus_data_generation_update();
1274         return (0);
1275 }
1276
1277 /**
1278  * @brief Quiesces a set of device drivers from a device class
1279  *
1280  * Quiesce a device driver from a devclass. This is normally called
1281  * automatically by DRIVER_MODULE().
1282  *
1283  * If the driver is currently attached to any devices,
1284  * devclass_quiesece_driver() will first attempt to quiesce each
1285  * device.
1286  *
1287  * @param dc            the devclass to edit
1288  * @param driver        the driver to unregister
1289  */
1290 static int
1291 devclass_quiesce_driver(devclass_t busclass, driver_t *driver)
1292 {
1293         devclass_t dc = devclass_find(driver->name);
1294         driverlink_t dl;
1295         device_t dev;
1296         int i;
1297         int error;
1298
1299         PDEBUG(("%s from devclass %s", driver->name, DEVCLANAME(busclass)));
1300
1301         if (!dc)
1302                 return (0);
1303
1304         /*
1305          * Find the link structure in the bus' list of drivers.
1306          */
1307         TAILQ_FOREACH(dl, &busclass->drivers, link) {
1308                 if (dl->driver == driver)
1309                         break;
1310         }
1311
1312         if (!dl) {
1313                 PDEBUG(("%s not found in %s list", driver->name,
1314                     busclass->name));
1315                 return (ENOENT);
1316         }
1317
1318         /*
1319          * Quiesce all devices.  We iterate through all the devices in
1320          * the devclass of the driver and quiesce any which are using
1321          * the driver and which have a parent in the devclass which we
1322          * are quiescing.
1323          *
1324          * Note that since a driver can be in multiple devclasses, we
1325          * should not quiesce devices which are not children of
1326          * devices in the affected devclass.
1327          */
1328         for (i = 0; i < dc->maxunit; i++) {
1329                 if (dc->devices[i]) {
1330                         dev = dc->devices[i];
1331                         if (dev->driver == driver && dev->parent &&
1332                             dev->parent->devclass == busclass) {
1333                                 if ((error = device_quiesce(dev)) != 0)
1334                                         return (error);
1335                         }
1336                 }
1337         }
1338
1339         return (0);
1340 }
1341
1342 /**
1343  * @internal
1344  */
1345 static driverlink_t
1346 devclass_find_driver_internal(devclass_t dc, const char *classname)
1347 {
1348         driverlink_t dl;
1349
1350         PDEBUG(("%s in devclass %s", classname, DEVCLANAME(dc)));
1351
1352         TAILQ_FOREACH(dl, &dc->drivers, link) {
1353                 if (!strcmp(dl->driver->name, classname))
1354                         return (dl);
1355         }
1356
1357         PDEBUG(("not found"));
1358         return (NULL);
1359 }
1360
1361 /**
1362  * @brief Return the name of the devclass
1363  */
1364 const char *
1365 devclass_get_name(devclass_t dc)
1366 {
1367         return (dc->name);
1368 }
1369
1370 /**
1371  * @brief Find a device given a unit number
1372  *
1373  * @param dc            the devclass to search
1374  * @param unit          the unit number to search for
1375  * 
1376  * @returns             the device with the given unit number or @c
1377  *                      NULL if there is no such device
1378  */
1379 device_t
1380 devclass_get_device(devclass_t dc, int unit)
1381 {
1382         if (dc == NULL || unit < 0 || unit >= dc->maxunit)
1383                 return (NULL);
1384         return (dc->devices[unit]);
1385 }
1386
1387 /**
1388  * @brief Find the softc field of a device given a unit number
1389  *
1390  * @param dc            the devclass to search
1391  * @param unit          the unit number to search for
1392  * 
1393  * @returns             the softc field of the device with the given
1394  *                      unit number or @c NULL if there is no such
1395  *                      device
1396  */
1397 void *
1398 devclass_get_softc(devclass_t dc, int unit)
1399 {
1400         device_t dev;
1401
1402         dev = devclass_get_device(dc, unit);
1403         if (!dev)
1404                 return (NULL);
1405
1406         return (device_get_softc(dev));
1407 }
1408
1409 /**
1410  * @brief Get a list of devices in the devclass
1411  *
1412  * An array containing a list of all the devices in the given devclass
1413  * is allocated and returned in @p *devlistp. The number of devices
1414  * in the array is returned in @p *devcountp. The caller should free
1415  * the array using @c free(p, M_TEMP), even if @p *devcountp is 0.
1416  *
1417  * @param dc            the devclass to examine
1418  * @param devlistp      points at location for array pointer return
1419  *                      value
1420  * @param devcountp     points at location for array size return value
1421  *
1422  * @retval 0            success
1423  * @retval ENOMEM       the array allocation failed
1424  */
1425 int
1426 devclass_get_devices(devclass_t dc, device_t **devlistp, int *devcountp)
1427 {
1428         int count, i;
1429         device_t *list;
1430
1431         count = devclass_get_count(dc);
1432         list = malloc(count * sizeof(device_t), M_TEMP, M_NOWAIT|M_ZERO);
1433         if (!list)
1434                 return (ENOMEM);
1435
1436         count = 0;
1437         for (i = 0; i < dc->maxunit; i++) {
1438                 if (dc->devices[i]) {
1439                         list[count] = dc->devices[i];
1440                         count++;
1441                 }
1442         }
1443
1444         *devlistp = list;
1445         *devcountp = count;
1446
1447         return (0);
1448 }
1449
1450 /**
1451  * @brief Get a list of drivers in the devclass
1452  *
1453  * An array containing a list of pointers to all the drivers in the
1454  * given devclass is allocated and returned in @p *listp.  The number
1455  * of drivers in the array is returned in @p *countp. The caller should
1456  * free the array using @c free(p, M_TEMP).
1457  *
1458  * @param dc            the devclass to examine
1459  * @param listp         gives location for array pointer return value
1460  * @param countp        gives location for number of array elements
1461  *                      return value
1462  *
1463  * @retval 0            success
1464  * @retval ENOMEM       the array allocation failed
1465  */
1466 int
1467 devclass_get_drivers(devclass_t dc, driver_t ***listp, int *countp)
1468 {
1469         driverlink_t dl;
1470         driver_t **list;
1471         int count;
1472
1473         count = 0;
1474         TAILQ_FOREACH(dl, &dc->drivers, link)
1475                 count++;
1476         list = malloc(count * sizeof(driver_t *), M_TEMP, M_NOWAIT);
1477         if (list == NULL)
1478                 return (ENOMEM);
1479
1480         count = 0;
1481         TAILQ_FOREACH(dl, &dc->drivers, link) {
1482                 list[count] = dl->driver;
1483                 count++;
1484         }
1485         *listp = list;
1486         *countp = count;
1487
1488         return (0);
1489 }
1490
1491 /**
1492  * @brief Get the number of devices in a devclass
1493  *
1494  * @param dc            the devclass to examine
1495  */
1496 int
1497 devclass_get_count(devclass_t dc)
1498 {
1499         int count, i;
1500
1501         count = 0;
1502         for (i = 0; i < dc->maxunit; i++)
1503                 if (dc->devices[i])
1504                         count++;
1505         return (count);
1506 }
1507
1508 /**
1509  * @brief Get the maximum unit number used in a devclass
1510  *
1511  * Note that this is one greater than the highest currently-allocated
1512  * unit.  If a null devclass_t is passed in, -1 is returned to indicate
1513  * that not even the devclass has been allocated yet.
1514  *
1515  * @param dc            the devclass to examine
1516  */
1517 int
1518 devclass_get_maxunit(devclass_t dc)
1519 {
1520         if (dc == NULL)
1521                 return (-1);
1522         return (dc->maxunit);
1523 }
1524
1525 /**
1526  * @brief Find a free unit number in a devclass
1527  *
1528  * This function searches for the first unused unit number greater
1529  * that or equal to @p unit.
1530  *
1531  * @param dc            the devclass to examine
1532  * @param unit          the first unit number to check
1533  */
1534 int
1535 devclass_find_free_unit(devclass_t dc, int unit)
1536 {
1537         if (dc == NULL)
1538                 return (unit);
1539         while (unit < dc->maxunit && dc->devices[unit] != NULL)
1540                 unit++;
1541         return (unit);
1542 }
1543
1544 /**
1545  * @brief Set the parent of a devclass
1546  *
1547  * The parent class is normally initialised automatically by
1548  * DRIVER_MODULE().
1549  *
1550  * @param dc            the devclass to edit
1551  * @param pdc           the new parent devclass
1552  */
1553 void
1554 devclass_set_parent(devclass_t dc, devclass_t pdc)
1555 {
1556         dc->parent = pdc;
1557 }
1558
1559 /**
1560  * @brief Get the parent of a devclass
1561  *
1562  * @param dc            the devclass to examine
1563  */
1564 devclass_t
1565 devclass_get_parent(devclass_t dc)
1566 {
1567         return (dc->parent);
1568 }
1569
1570 struct sysctl_ctx_list *
1571 devclass_get_sysctl_ctx(devclass_t dc)
1572 {
1573         return (&dc->sysctl_ctx);
1574 }
1575
1576 struct sysctl_oid *
1577 devclass_get_sysctl_tree(devclass_t dc)
1578 {
1579         return (dc->sysctl_tree);
1580 }
1581
1582 /**
1583  * @internal
1584  * @brief Allocate a unit number
1585  *
1586  * On entry, @p *unitp is the desired unit number (or @c -1 if any
1587  * will do). The allocated unit number is returned in @p *unitp.
1588
1589  * @param dc            the devclass to allocate from
1590  * @param unitp         points at the location for the allocated unit
1591  *                      number
1592  *
1593  * @retval 0            success
1594  * @retval EEXIST       the requested unit number is already allocated
1595  * @retval ENOMEM       memory allocation failure
1596  */
1597 static int
1598 devclass_alloc_unit(devclass_t dc, device_t dev, int *unitp)
1599 {
1600         const char *s;
1601         int unit = *unitp;
1602
1603         PDEBUG(("unit %d in devclass %s", unit, DEVCLANAME(dc)));
1604
1605         /* Ask the parent bus if it wants to wire this device. */
1606         if (unit == -1)
1607                 BUS_HINT_DEVICE_UNIT(device_get_parent(dev), dev, dc->name,
1608                     &unit);
1609
1610         /* If we were given a wired unit number, check for existing device */
1611         /* XXX imp XXX */
1612         if (unit != -1) {
1613                 if (unit >= 0 && unit < dc->maxunit &&
1614                     dc->devices[unit] != NULL) {
1615                         if (bootverbose)
1616                                 printf("%s: %s%d already exists; skipping it\n",
1617                                     dc->name, dc->name, *unitp);
1618                         return (EEXIST);
1619                 }
1620         } else {
1621                 /* Unwired device, find the next available slot for it */
1622                 unit = 0;
1623                 for (unit = 0;; unit++) {
1624                         /* If there is an "at" hint for a unit then skip it. */
1625                         if (resource_string_value(dc->name, unit, "at", &s) ==
1626                             0)
1627                                 continue;
1628
1629                         /* If this device slot is already in use, skip it. */
1630                         if (unit < dc->maxunit && dc->devices[unit] != NULL)
1631                                 continue;
1632
1633                         break;
1634                 }
1635         }
1636
1637         /*
1638          * We've selected a unit beyond the length of the table, so let's
1639          * extend the table to make room for all units up to and including
1640          * this one.
1641          */
1642         if (unit >= dc->maxunit) {
1643                 device_t *newlist, *oldlist;
1644                 int newsize;
1645
1646                 oldlist = dc->devices;
1647                 newsize = roundup((unit + 1), MINALLOCSIZE / sizeof(device_t));
1648                 newlist = malloc(sizeof(device_t) * newsize, M_BUS, M_NOWAIT);
1649                 if (!newlist)
1650                         return (ENOMEM);
1651                 if (oldlist != NULL)
1652                         bcopy(oldlist, newlist, sizeof(device_t) * dc->maxunit);
1653                 bzero(newlist + dc->maxunit,
1654                     sizeof(device_t) * (newsize - dc->maxunit));
1655                 dc->devices = newlist;
1656                 dc->maxunit = newsize;
1657                 if (oldlist != NULL)
1658                         free(oldlist, M_BUS);
1659         }
1660         PDEBUG(("now: unit %d in devclass %s", unit, DEVCLANAME(dc)));
1661
1662         *unitp = unit;
1663         return (0);
1664 }
1665
1666 /**
1667  * @internal
1668  * @brief Add a device to a devclass
1669  *
1670  * A unit number is allocated for the device (using the device's
1671  * preferred unit number if any) and the device is registered in the
1672  * devclass. This allows the device to be looked up by its unit
1673  * number, e.g. by decoding a dev_t minor number.
1674  *
1675  * @param dc            the devclass to add to
1676  * @param dev           the device to add
1677  *
1678  * @retval 0            success
1679  * @retval EEXIST       the requested unit number is already allocated
1680  * @retval ENOMEM       memory allocation failure
1681  */
1682 static int
1683 devclass_add_device(devclass_t dc, device_t dev)
1684 {
1685         int buflen, error;
1686
1687         PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
1688
1689         buflen = snprintf(NULL, 0, "%s%d$", dc->name, INT_MAX);
1690         if (buflen < 0)
1691                 return (ENOMEM);
1692         dev->nameunit = malloc(buflen, M_BUS, M_NOWAIT|M_ZERO);
1693         if (!dev->nameunit)
1694                 return (ENOMEM);
1695
1696         if ((error = devclass_alloc_unit(dc, dev, &dev->unit)) != 0) {
1697                 free(dev->nameunit, M_BUS);
1698                 dev->nameunit = NULL;
1699                 return (error);
1700         }
1701         dc->devices[dev->unit] = dev;
1702         dev->devclass = dc;
1703         snprintf(dev->nameunit, buflen, "%s%d", dc->name, dev->unit);
1704
1705         return (0);
1706 }
1707
1708 /**
1709  * @internal
1710  * @brief Delete a device from a devclass
1711  *
1712  * The device is removed from the devclass's device list and its unit
1713  * number is freed.
1714
1715  * @param dc            the devclass to delete from
1716  * @param dev           the device to delete
1717  *
1718  * @retval 0            success
1719  */
1720 static int
1721 devclass_delete_device(devclass_t dc, device_t dev)
1722 {
1723         if (!dc || !dev)
1724                 return (0);
1725
1726         PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
1727
1728         if (dev->devclass != dc || dc->devices[dev->unit] != dev)
1729                 panic("devclass_delete_device: inconsistent device class");
1730         dc->devices[dev->unit] = NULL;
1731         if (dev->flags & DF_WILDCARD)
1732                 dev->unit = -1;
1733         dev->devclass = NULL;
1734         free(dev->nameunit, M_BUS);
1735         dev->nameunit = NULL;
1736
1737         return (0);
1738 }
1739
1740 /**
1741  * @internal
1742  * @brief Make a new device and add it as a child of @p parent
1743  *
1744  * @param parent        the parent of the new device
1745  * @param name          the devclass name of the new device or @c NULL
1746  *                      to leave the devclass unspecified
1747  * @parem unit          the unit number of the new device of @c -1 to
1748  *                      leave the unit number unspecified
1749  *
1750  * @returns the new device
1751  */
1752 static device_t
1753 make_device(device_t parent, const char *name, int unit)
1754 {
1755         device_t dev;
1756         devclass_t dc;
1757
1758         PDEBUG(("%s at %s as unit %d", name, DEVICENAME(parent), unit));
1759
1760         if (name) {
1761                 dc = devclass_find_internal(name, NULL, TRUE);
1762                 if (!dc) {
1763                         printf("make_device: can't find device class %s\n",
1764                             name);
1765                         return (NULL);
1766                 }
1767         } else {
1768                 dc = NULL;
1769         }
1770
1771         dev = malloc(sizeof(struct device), M_BUS, M_NOWAIT|M_ZERO);
1772         if (!dev)
1773                 return (NULL);
1774
1775         dev->parent = parent;
1776         TAILQ_INIT(&dev->children);
1777         kobj_init((kobj_t) dev, &null_class);
1778         dev->driver = NULL;
1779         dev->devclass = NULL;
1780         dev->unit = unit;
1781         dev->nameunit = NULL;
1782         dev->desc = NULL;
1783         dev->busy = 0;
1784         dev->devflags = 0;
1785         dev->flags = DF_ENABLED;
1786         dev->order = 0;
1787         if (unit == -1)
1788                 dev->flags |= DF_WILDCARD;
1789         if (name) {
1790                 dev->flags |= DF_FIXEDCLASS;
1791                 if (devclass_add_device(dc, dev)) {
1792                         kobj_delete((kobj_t) dev, M_BUS);
1793                         return (NULL);
1794                 }
1795         }
1796         dev->ivars = NULL;
1797         dev->softc = NULL;
1798
1799         dev->state = DS_NOTPRESENT;
1800
1801         TAILQ_INSERT_TAIL(&bus_data_devices, dev, devlink);
1802         bus_data_generation_update();
1803
1804         return (dev);
1805 }
1806
1807 /**
1808  * @internal
1809  * @brief Print a description of a device.
1810  */
1811 static int
1812 device_print_child(device_t dev, device_t child)
1813 {
1814         int retval = 0;
1815
1816         if (device_is_alive(child))
1817                 retval += BUS_PRINT_CHILD(dev, child);
1818         else
1819                 retval += device_printf(child, " not found\n");
1820
1821         return (retval);
1822 }
1823
1824 /**
1825  * @brief Create a new device
1826  *
1827  * This creates a new device and adds it as a child of an existing
1828  * parent device. The new device will be added after the last existing
1829  * child with order zero.
1830  * 
1831  * @param dev           the device which will be the parent of the
1832  *                      new child device
1833  * @param name          devclass name for new device or @c NULL if not
1834  *                      specified
1835  * @param unit          unit number for new device or @c -1 if not
1836  *                      specified
1837  * 
1838  * @returns             the new device
1839  */
1840 device_t
1841 device_add_child(device_t dev, const char *name, int unit)
1842 {
1843         return (device_add_child_ordered(dev, 0, name, unit));
1844 }
1845
1846 /**
1847  * @brief Create a new device
1848  *
1849  * This creates a new device and adds it as a child of an existing
1850  * parent device. The new device will be added after the last existing
1851  * child with the same order.
1852  * 
1853  * @param dev           the device which will be the parent of the
1854  *                      new child device
1855  * @param order         a value which is used to partially sort the
1856  *                      children of @p dev - devices created using
1857  *                      lower values of @p order appear first in @p
1858  *                      dev's list of children
1859  * @param name          devclass name for new device or @c NULL if not
1860  *                      specified
1861  * @param unit          unit number for new device or @c -1 if not
1862  *                      specified
1863  * 
1864  * @returns             the new device
1865  */
1866 device_t
1867 device_add_child_ordered(device_t dev, u_int order, const char *name, int unit)
1868 {
1869         device_t child;
1870         device_t place;
1871
1872         PDEBUG(("%s at %s with order %u as unit %d",
1873             name, DEVICENAME(dev), order, unit));
1874         KASSERT(name != NULL || unit == -1,
1875             ("child device with wildcard name and specific unit number"));
1876
1877         child = make_device(dev, name, unit);
1878         if (child == NULL)
1879                 return (child);
1880         child->order = order;
1881
1882         TAILQ_FOREACH(place, &dev->children, link) {
1883                 if (place->order > order)
1884                         break;
1885         }
1886
1887         if (place) {
1888                 /*
1889                  * The device 'place' is the first device whose order is
1890                  * greater than the new child.
1891                  */
1892                 TAILQ_INSERT_BEFORE(place, child, link);
1893         } else {
1894                 /*
1895                  * The new child's order is greater or equal to the order of
1896                  * any existing device. Add the child to the tail of the list.
1897                  */
1898                 TAILQ_INSERT_TAIL(&dev->children, child, link);
1899         }
1900
1901         bus_data_generation_update();
1902         return (child);
1903 }
1904
1905 /**
1906  * @brief Delete a device
1907  *
1908  * This function deletes a device along with all of its children. If
1909  * the device currently has a driver attached to it, the device is
1910  * detached first using device_detach().
1911  * 
1912  * @param dev           the parent device
1913  * @param child         the device to delete
1914  *
1915  * @retval 0            success
1916  * @retval non-zero     a unit error code describing the error
1917  */
1918 int
1919 device_delete_child(device_t dev, device_t child)
1920 {
1921         int error;
1922         device_t grandchild;
1923
1924         PDEBUG(("%s from %s", DEVICENAME(child), DEVICENAME(dev)));
1925
1926         /* remove children first */
1927         while ((grandchild = TAILQ_FIRST(&child->children)) != NULL) {
1928                 error = device_delete_child(child, grandchild);
1929                 if (error)
1930                         return (error);
1931         }
1932
1933         if ((error = device_detach(child)) != 0)
1934                 return (error);
1935         if (child->devclass)
1936                 devclass_delete_device(child->devclass, child);
1937         if (child->parent)
1938                 BUS_CHILD_DELETED(dev, child);
1939         TAILQ_REMOVE(&dev->children, child, link);
1940         TAILQ_REMOVE(&bus_data_devices, child, devlink);
1941         kobj_delete((kobj_t) child, M_BUS);
1942
1943         bus_data_generation_update();
1944         return (0);
1945 }
1946
1947 /**
1948  * @brief Delete all children devices of the given device, if any.
1949  *
1950  * This function deletes all children devices of the given device, if
1951  * any, using the device_delete_child() function for each device it
1952  * finds. If a child device cannot be deleted, this function will
1953  * return an error code.
1954  * 
1955  * @param dev           the parent device
1956  *
1957  * @retval 0            success
1958  * @retval non-zero     a device would not detach
1959  */
1960 int
1961 device_delete_children(device_t dev)
1962 {
1963         device_t child;
1964         int error;
1965
1966         PDEBUG(("Deleting all children of %s", DEVICENAME(dev)));
1967
1968         error = 0;
1969
1970         while ((child = TAILQ_FIRST(&dev->children)) != NULL) {
1971                 error = device_delete_child(dev, child);
1972                 if (error) {
1973                         PDEBUG(("Failed deleting %s", DEVICENAME(child)));
1974                         break;
1975                 }
1976         }
1977         return (error);
1978 }
1979
1980 /**
1981  * @brief Find a device given a unit number
1982  *
1983  * This is similar to devclass_get_devices() but only searches for
1984  * devices which have @p dev as a parent.
1985  *
1986  * @param dev           the parent device to search
1987  * @param unit          the unit number to search for.  If the unit is -1,
1988  *                      return the first child of @p dev which has name
1989  *                      @p classname (that is, the one with the lowest unit.)
1990  *
1991  * @returns             the device with the given unit number or @c
1992  *                      NULL if there is no such device
1993  */
1994 device_t
1995 device_find_child(device_t dev, const char *classname, int unit)
1996 {
1997         devclass_t dc;
1998         device_t child;
1999
2000         dc = devclass_find(classname);
2001         if (!dc)
2002                 return (NULL);
2003
2004         if (unit != -1) {
2005                 child = devclass_get_device(dc, unit);
2006                 if (child && child->parent == dev)
2007                         return (child);
2008         } else {
2009                 for (unit = 0; unit < devclass_get_maxunit(dc); unit++) {
2010                         child = devclass_get_device(dc, unit);
2011                         if (child && child->parent == dev)
2012                                 return (child);
2013                 }
2014         }
2015         return (NULL);
2016 }
2017
2018 /**
2019  * @internal
2020  */
2021 static driverlink_t
2022 first_matching_driver(devclass_t dc, device_t dev)
2023 {
2024         if (dev->devclass)
2025                 return (devclass_find_driver_internal(dc, dev->devclass->name));
2026         return (TAILQ_FIRST(&dc->drivers));
2027 }
2028
2029 /**
2030  * @internal
2031  */
2032 static driverlink_t
2033 next_matching_driver(devclass_t dc, device_t dev, driverlink_t last)
2034 {
2035         if (dev->devclass) {
2036                 driverlink_t dl;
2037                 for (dl = TAILQ_NEXT(last, link); dl; dl = TAILQ_NEXT(dl, link))
2038                         if (!strcmp(dev->devclass->name, dl->driver->name))
2039                                 return (dl);
2040                 return (NULL);
2041         }
2042         return (TAILQ_NEXT(last, link));
2043 }
2044
2045 /**
2046  * @internal
2047  */
2048 int
2049 device_probe_child(device_t dev, device_t child)
2050 {
2051         devclass_t dc;
2052         driverlink_t best = NULL;
2053         driverlink_t dl;
2054         int result, pri = 0;
2055         int hasclass = (child->devclass != NULL);
2056
2057         GIANT_REQUIRED;
2058
2059         dc = dev->devclass;
2060         if (!dc)
2061                 panic("device_probe_child: parent device has no devclass");
2062
2063         /*
2064          * If the state is already probed, then return.  However, don't
2065          * return if we can rebid this object.
2066          */
2067         if (child->state == DS_ALIVE && (child->flags & DF_REBID) == 0)
2068                 return (0);
2069
2070         for (; dc; dc = dc->parent) {
2071                 for (dl = first_matching_driver(dc, child);
2072                      dl;
2073                      dl = next_matching_driver(dc, child, dl)) {
2074                         /* If this driver's pass is too high, then ignore it. */
2075                         if (dl->pass > bus_current_pass)
2076                                 continue;
2077
2078                         PDEBUG(("Trying %s", DRIVERNAME(dl->driver)));
2079                         result = device_set_driver(child, dl->driver);
2080                         if (result == ENOMEM)
2081                                 return (result);
2082                         else if (result != 0)
2083                                 continue;
2084                         if (!hasclass) {
2085                                 if (device_set_devclass(child,
2086                                     dl->driver->name) != 0) {
2087                                         char const * devname =
2088                                             device_get_name(child);
2089                                         if (devname == NULL)
2090                                                 devname = "(unknown)";
2091                                         printf("driver bug: Unable to set "
2092                                             "devclass (class: %s "
2093                                             "devname: %s)\n",
2094                                             dl->driver->name,
2095                                             devname);
2096                                         (void)device_set_driver(child, NULL);
2097                                         continue;
2098                                 }
2099                         }
2100
2101                         /* Fetch any flags for the device before probing. */
2102                         resource_int_value(dl->driver->name, child->unit,
2103                             "flags", &child->devflags);
2104
2105                         result = DEVICE_PROBE(child);
2106
2107                         /* Reset flags and devclass before the next probe. */
2108                         child->devflags = 0;
2109                         if (!hasclass)
2110                                 (void)device_set_devclass(child, NULL);
2111
2112                         /*
2113                          * If the driver returns SUCCESS, there can be
2114                          * no higher match for this device.
2115                          */
2116                         if (result == 0) {
2117                                 best = dl;
2118                                 pri = 0;
2119                                 break;
2120                         }
2121
2122                         /*
2123                          * Probes that return BUS_PROBE_NOWILDCARD or lower
2124                          * only match on devices whose driver was explicitly
2125                          * specified.
2126                          */
2127                         if (result <= BUS_PROBE_NOWILDCARD &&
2128                             !(child->flags & DF_FIXEDCLASS)) {
2129                                 result = ENXIO;
2130                         }
2131
2132                         /*
2133                          * The driver returned an error so it
2134                          * certainly doesn't match.
2135                          */
2136                         if (result > 0) {
2137                                 (void)device_set_driver(child, NULL);
2138                                 continue;
2139                         }
2140
2141                         /*
2142                          * A priority lower than SUCCESS, remember the
2143                          * best matching driver. Initialise the value
2144                          * of pri for the first match.
2145                          */
2146                         if (best == NULL || result > pri) {
2147                                 best = dl;
2148                                 pri = result;
2149                                 continue;
2150                         }
2151                 }
2152                 /*
2153                  * If we have an unambiguous match in this devclass,
2154                  * don't look in the parent.
2155                  */
2156                 if (best && pri == 0)
2157                         break;
2158         }
2159
2160         /*
2161          * If we found a driver, change state and initialise the devclass.
2162          */
2163         /* XXX What happens if we rebid and got no best? */
2164         if (best) {
2165                 /*
2166                  * If this device was attached, and we were asked to
2167                  * rescan, and it is a different driver, then we have
2168                  * to detach the old driver and reattach this new one.
2169                  * Note, we don't have to check for DF_REBID here
2170                  * because if the state is > DS_ALIVE, we know it must
2171                  * be.
2172                  *
2173                  * This assumes that all DF_REBID drivers can have
2174                  * their probe routine called at any time and that
2175                  * they are idempotent as well as completely benign in
2176                  * normal operations.
2177                  *
2178                  * We also have to make sure that the detach
2179                  * succeeded, otherwise we fail the operation (or
2180                  * maybe it should just fail silently?  I'm torn).
2181                  */
2182                 if (child->state > DS_ALIVE && best->driver != child->driver)
2183                         if ((result = device_detach(dev)) != 0)
2184                                 return (result);
2185
2186                 /* Set the winning driver, devclass, and flags. */
2187                 if (!child->devclass) {
2188                         result = device_set_devclass(child, best->driver->name);
2189                         if (result != 0)
2190                                 return (result);
2191                 }
2192                 result = device_set_driver(child, best->driver);
2193                 if (result != 0)
2194                         return (result);
2195                 resource_int_value(best->driver->name, child->unit,
2196                     "flags", &child->devflags);
2197
2198                 if (pri < 0) {
2199                         /*
2200                          * A bit bogus. Call the probe method again to make
2201                          * sure that we have the right description.
2202                          */
2203                         DEVICE_PROBE(child);
2204 #if 0
2205                         child->flags |= DF_REBID;
2206 #endif
2207                 } else
2208                         child->flags &= ~DF_REBID;
2209                 child->state = DS_ALIVE;
2210
2211                 bus_data_generation_update();
2212                 return (0);
2213         }
2214
2215         return (ENXIO);
2216 }
2217
2218 /**
2219  * @brief Return the parent of a device
2220  */
2221 device_t
2222 device_get_parent(device_t dev)
2223 {
2224         return (dev->parent);
2225 }
2226
2227 /**
2228  * @brief Get a list of children of a device
2229  *
2230  * An array containing a list of all the children of the given device
2231  * is allocated and returned in @p *devlistp. The number of devices
2232  * in the array is returned in @p *devcountp. The caller should free
2233  * the array using @c free(p, M_TEMP).
2234  *
2235  * @param dev           the device to examine
2236  * @param devlistp      points at location for array pointer return
2237  *                      value
2238  * @param devcountp     points at location for array size return value
2239  *
2240  * @retval 0            success
2241  * @retval ENOMEM       the array allocation failed
2242  */
2243 int
2244 device_get_children(device_t dev, device_t **devlistp, int *devcountp)
2245 {
2246         int count;
2247         device_t child;
2248         device_t *list;
2249
2250         count = 0;
2251         TAILQ_FOREACH(child, &dev->children, link) {
2252                 count++;
2253         }
2254         if (count == 0) {
2255                 *devlistp = NULL;
2256                 *devcountp = 0;
2257                 return (0);
2258         }
2259
2260         list = malloc(count * sizeof(device_t), M_TEMP, M_NOWAIT|M_ZERO);
2261         if (!list)
2262                 return (ENOMEM);
2263
2264         count = 0;
2265         TAILQ_FOREACH(child, &dev->children, link) {
2266                 list[count] = child;
2267                 count++;
2268         }
2269
2270         *devlistp = list;
2271         *devcountp = count;
2272
2273         return (0);
2274 }
2275
2276 /**
2277  * @brief Return the current driver for the device or @c NULL if there
2278  * is no driver currently attached
2279  */
2280 driver_t *
2281 device_get_driver(device_t dev)
2282 {
2283         return (dev->driver);
2284 }
2285
2286 /**
2287  * @brief Return the current devclass for the device or @c NULL if
2288  * there is none.
2289  */
2290 devclass_t
2291 device_get_devclass(device_t dev)
2292 {
2293         return (dev->devclass);
2294 }
2295
2296 /**
2297  * @brief Return the name of the device's devclass or @c NULL if there
2298  * is none.
2299  */
2300 const char *
2301 device_get_name(device_t dev)
2302 {
2303         if (dev != NULL && dev->devclass)
2304                 return (devclass_get_name(dev->devclass));
2305         return (NULL);
2306 }
2307
2308 /**
2309  * @brief Return a string containing the device's devclass name
2310  * followed by an ascii representation of the device's unit number
2311  * (e.g. @c "foo2").
2312  */
2313 const char *
2314 device_get_nameunit(device_t dev)
2315 {
2316         return (dev->nameunit);
2317 }
2318
2319 /**
2320  * @brief Return the device's unit number.
2321  */
2322 int
2323 device_get_unit(device_t dev)
2324 {
2325         return (dev->unit);
2326 }
2327
2328 /**
2329  * @brief Return the device's description string
2330  */
2331 const char *
2332 device_get_desc(device_t dev)
2333 {
2334         return (dev->desc);
2335 }
2336
2337 /**
2338  * @brief Return the device's flags
2339  */
2340 uint32_t
2341 device_get_flags(device_t dev)
2342 {
2343         return (dev->devflags);
2344 }
2345
2346 struct sysctl_ctx_list *
2347 device_get_sysctl_ctx(device_t dev)
2348 {
2349         return (&dev->sysctl_ctx);
2350 }
2351
2352 struct sysctl_oid *
2353 device_get_sysctl_tree(device_t dev)
2354 {
2355         return (dev->sysctl_tree);
2356 }
2357
2358 /**
2359  * @brief Print the name of the device followed by a colon and a space
2360  *
2361  * @returns the number of characters printed
2362  */
2363 int
2364 device_print_prettyname(device_t dev)
2365 {
2366         const char *name = device_get_name(dev);
2367
2368         if (name == NULL)
2369                 return (printf("unknown: "));
2370         return (printf("%s%d: ", name, device_get_unit(dev)));
2371 }
2372
2373 /**
2374  * @brief Print the name of the device followed by a colon, a space
2375  * and the result of calling vprintf() with the value of @p fmt and
2376  * the following arguments.
2377  *
2378  * @returns the number of characters printed
2379  */
2380 int
2381 device_printf(device_t dev, const char * fmt, ...)
2382 {
2383         va_list ap;
2384         int retval;
2385
2386         retval = device_print_prettyname(dev);
2387         va_start(ap, fmt);
2388         retval += vprintf(fmt, ap);
2389         va_end(ap);
2390         return (retval);
2391 }
2392
2393 /**
2394  * @internal
2395  */
2396 static void
2397 device_set_desc_internal(device_t dev, const char* desc, int copy)
2398 {
2399         if (dev->desc && (dev->flags & DF_DESCMALLOCED)) {
2400                 free(dev->desc, M_BUS);
2401                 dev->flags &= ~DF_DESCMALLOCED;
2402                 dev->desc = NULL;
2403         }
2404
2405         if (copy && desc) {
2406                 dev->desc = malloc(strlen(desc) + 1, M_BUS, M_NOWAIT);
2407                 if (dev->desc) {
2408                         strcpy(dev->desc, desc);
2409                         dev->flags |= DF_DESCMALLOCED;
2410                 }
2411         } else {
2412                 /* Avoid a -Wcast-qual warning */
2413                 dev->desc = (char *)(uintptr_t) desc;
2414         }
2415
2416         bus_data_generation_update();
2417 }
2418
2419 /**
2420  * @brief Set the device's description
2421  *
2422  * The value of @c desc should be a string constant that will not
2423  * change (at least until the description is changed in a subsequent
2424  * call to device_set_desc() or device_set_desc_copy()).
2425  */
2426 void
2427 device_set_desc(device_t dev, const char* desc)
2428 {
2429         device_set_desc_internal(dev, desc, FALSE);
2430 }
2431
2432 /**
2433  * @brief Set the device's description
2434  *
2435  * The string pointed to by @c desc is copied. Use this function if
2436  * the device description is generated, (e.g. with sprintf()).
2437  */
2438 void
2439 device_set_desc_copy(device_t dev, const char* desc)
2440 {
2441         device_set_desc_internal(dev, desc, TRUE);
2442 }
2443
2444 /**
2445  * @brief Set the device's flags
2446  */
2447 void
2448 device_set_flags(device_t dev, uint32_t flags)
2449 {
2450         dev->devflags = flags;
2451 }
2452
2453 /**
2454  * @brief Return the device's softc field
2455  *
2456  * The softc is allocated and zeroed when a driver is attached, based
2457  * on the size field of the driver.
2458  */
2459 void *
2460 device_get_softc(device_t dev)
2461 {
2462         return (dev->softc);
2463 }
2464
2465 /**
2466  * @brief Set the device's softc field
2467  *
2468  * Most drivers do not need to use this since the softc is allocated
2469  * automatically when the driver is attached.
2470  */
2471 void
2472 device_set_softc(device_t dev, void *softc)
2473 {
2474         if (dev->softc && !(dev->flags & DF_EXTERNALSOFTC))
2475                 free(dev->softc, M_BUS_SC);
2476         dev->softc = softc;
2477         if (dev->softc)
2478                 dev->flags |= DF_EXTERNALSOFTC;
2479         else
2480                 dev->flags &= ~DF_EXTERNALSOFTC;
2481 }
2482
2483 /**
2484  * @brief Free claimed softc
2485  *
2486  * Most drivers do not need to use this since the softc is freed
2487  * automatically when the driver is detached.
2488  */
2489 void
2490 device_free_softc(void *softc)
2491 {
2492         free(softc, M_BUS_SC);
2493 }
2494
2495 /**
2496  * @brief Claim softc
2497  *
2498  * This function can be used to let the driver free the automatically
2499  * allocated softc using "device_free_softc()". This function is
2500  * useful when the driver is refcounting the softc and the softc
2501  * cannot be freed when the "device_detach" method is called.
2502  */
2503 void
2504 device_claim_softc(device_t dev)
2505 {
2506         if (dev->softc)
2507                 dev->flags |= DF_EXTERNALSOFTC;
2508         else
2509                 dev->flags &= ~DF_EXTERNALSOFTC;
2510 }
2511
2512 /**
2513  * @brief Get the device's ivars field
2514  *
2515  * The ivars field is used by the parent device to store per-device
2516  * state (e.g. the physical location of the device or a list of
2517  * resources).
2518  */
2519 void *
2520 device_get_ivars(device_t dev)
2521 {
2522
2523         KASSERT(dev != NULL, ("device_get_ivars(NULL, ...)"));
2524         return (dev->ivars);
2525 }
2526
2527 /**
2528  * @brief Set the device's ivars field
2529  */
2530 void
2531 device_set_ivars(device_t dev, void * ivars)
2532 {
2533
2534         KASSERT(dev != NULL, ("device_set_ivars(NULL, ...)"));
2535         dev->ivars = ivars;
2536 }
2537
2538 /**
2539  * @brief Return the device's state
2540  */
2541 device_state_t
2542 device_get_state(device_t dev)
2543 {
2544         return (dev->state);
2545 }
2546
2547 /**
2548  * @brief Set the DF_ENABLED flag for the device
2549  */
2550 void
2551 device_enable(device_t dev)
2552 {
2553         dev->flags |= DF_ENABLED;
2554 }
2555
2556 /**
2557  * @brief Clear the DF_ENABLED flag for the device
2558  */
2559 void
2560 device_disable(device_t dev)
2561 {
2562         dev->flags &= ~DF_ENABLED;
2563 }
2564
2565 /**
2566  * @brief Increment the busy counter for the device
2567  */
2568 void
2569 device_busy(device_t dev)
2570 {
2571         if (dev->state < DS_ATTACHING)
2572                 panic("device_busy: called for unattached device");
2573         if (dev->busy == 0 && dev->parent)
2574                 device_busy(dev->parent);
2575         dev->busy++;
2576         if (dev->state == DS_ATTACHED)
2577                 dev->state = DS_BUSY;
2578 }
2579
2580 /**
2581  * @brief Decrement the busy counter for the device
2582  */
2583 void
2584 device_unbusy(device_t dev)
2585 {
2586         if (dev->busy != 0 && dev->state != DS_BUSY &&
2587             dev->state != DS_ATTACHING)
2588                 panic("device_unbusy: called for non-busy device %s",
2589                     device_get_nameunit(dev));
2590         dev->busy--;
2591         if (dev->busy == 0) {
2592                 if (dev->parent)
2593                         device_unbusy(dev->parent);
2594                 if (dev->state == DS_BUSY)
2595                         dev->state = DS_ATTACHED;
2596         }
2597 }
2598
2599 /**
2600  * @brief Set the DF_QUIET flag for the device
2601  */
2602 void
2603 device_quiet(device_t dev)
2604 {
2605         dev->flags |= DF_QUIET;
2606 }
2607
2608 /**
2609  * @brief Clear the DF_QUIET flag for the device
2610  */
2611 void
2612 device_verbose(device_t dev)
2613 {
2614         dev->flags &= ~DF_QUIET;
2615 }
2616
2617 /**
2618  * @brief Return non-zero if the DF_QUIET flag is set on the device
2619  */
2620 int
2621 device_is_quiet(device_t dev)
2622 {
2623         return ((dev->flags & DF_QUIET) != 0);
2624 }
2625
2626 /**
2627  * @brief Return non-zero if the DF_ENABLED flag is set on the device
2628  */
2629 int
2630 device_is_enabled(device_t dev)
2631 {
2632         return ((dev->flags & DF_ENABLED) != 0);
2633 }
2634
2635 /**
2636  * @brief Return non-zero if the device was successfully probed
2637  */
2638 int
2639 device_is_alive(device_t dev)
2640 {
2641         return (dev->state >= DS_ALIVE);
2642 }
2643
2644 /**
2645  * @brief Return non-zero if the device currently has a driver
2646  * attached to it
2647  */
2648 int
2649 device_is_attached(device_t dev)
2650 {
2651         return (dev->state >= DS_ATTACHED);
2652 }
2653
2654 /**
2655  * @brief Set the devclass of a device
2656  * @see devclass_add_device().
2657  */
2658 int
2659 device_set_devclass(device_t dev, const char *classname)
2660 {
2661         devclass_t dc;
2662         int error;
2663
2664         if (!classname) {
2665                 if (dev->devclass)
2666                         devclass_delete_device(dev->devclass, dev);
2667                 return (0);
2668         }
2669
2670         if (dev->devclass) {
2671                 printf("device_set_devclass: device class already set\n");
2672                 return (EINVAL);
2673         }
2674
2675         dc = devclass_find_internal(classname, NULL, TRUE);
2676         if (!dc)
2677                 return (ENOMEM);
2678
2679         error = devclass_add_device(dc, dev);
2680
2681         bus_data_generation_update();
2682         return (error);
2683 }
2684
2685 /**
2686  * @brief Set the driver of a device
2687  *
2688  * @retval 0            success
2689  * @retval EBUSY        the device already has a driver attached
2690  * @retval ENOMEM       a memory allocation failure occurred
2691  */
2692 int
2693 device_set_driver(device_t dev, driver_t *driver)
2694 {
2695         if (dev->state >= DS_ATTACHED)
2696                 return (EBUSY);
2697
2698         if (dev->driver == driver)
2699                 return (0);
2700
2701         if (dev->softc && !(dev->flags & DF_EXTERNALSOFTC)) {
2702                 free(dev->softc, M_BUS_SC);
2703                 dev->softc = NULL;
2704         }
2705         device_set_desc(dev, NULL);
2706         kobj_delete((kobj_t) dev, NULL);
2707         dev->driver = driver;
2708         if (driver) {
2709                 kobj_init((kobj_t) dev, (kobj_class_t) driver);
2710                 if (!(dev->flags & DF_EXTERNALSOFTC) && driver->size > 0) {
2711                         dev->softc = malloc(driver->size, M_BUS_SC,
2712                             M_NOWAIT | M_ZERO);
2713                         if (!dev->softc) {
2714                                 kobj_delete((kobj_t) dev, NULL);
2715                                 kobj_init((kobj_t) dev, &null_class);
2716                                 dev->driver = NULL;
2717                                 return (ENOMEM);
2718                         }
2719                 }
2720         } else {
2721                 kobj_init((kobj_t) dev, &null_class);
2722         }
2723
2724         bus_data_generation_update();
2725         return (0);
2726 }
2727
2728 /**
2729  * @brief Probe a device, and return this status.
2730  *
2731  * This function is the core of the device autoconfiguration
2732  * system. Its purpose is to select a suitable driver for a device and
2733  * then call that driver to initialise the hardware appropriately. The
2734  * driver is selected by calling the DEVICE_PROBE() method of a set of
2735  * candidate drivers and then choosing the driver which returned the
2736  * best value. This driver is then attached to the device using
2737  * device_attach().
2738  *
2739  * The set of suitable drivers is taken from the list of drivers in
2740  * the parent device's devclass. If the device was originally created
2741  * with a specific class name (see device_add_child()), only drivers
2742  * with that name are probed, otherwise all drivers in the devclass
2743  * are probed. If no drivers return successful probe values in the
2744  * parent devclass, the search continues in the parent of that
2745  * devclass (see devclass_get_parent()) if any.
2746  *
2747  * @param dev           the device to initialise
2748  *
2749  * @retval 0            success
2750  * @retval ENXIO        no driver was found
2751  * @retval ENOMEM       memory allocation failure
2752  * @retval non-zero     some other unix error code
2753  * @retval -1           Device already attached
2754  */
2755 int
2756 device_probe(device_t dev)
2757 {
2758         int error;
2759
2760         GIANT_REQUIRED;
2761
2762         if (dev->state >= DS_ALIVE && (dev->flags & DF_REBID) == 0)
2763                 return (-1);
2764
2765         if (!(dev->flags & DF_ENABLED)) {
2766                 if (bootverbose && device_get_name(dev) != NULL) {
2767                         device_print_prettyname(dev);
2768                         printf("not probed (disabled)\n");
2769                 }
2770                 return (-1);
2771         }
2772         if ((error = device_probe_child(dev->parent, dev)) != 0) {              
2773                 if (bus_current_pass == BUS_PASS_DEFAULT &&
2774                     !(dev->flags & DF_DONENOMATCH)) {
2775                         BUS_PROBE_NOMATCH(dev->parent, dev);
2776                         devnomatch(dev);
2777                         dev->flags |= DF_DONENOMATCH;
2778                 }
2779                 return (error);
2780         }
2781         return (0);
2782 }
2783
2784 /**
2785  * @brief Probe a device and attach a driver if possible
2786  *
2787  * calls device_probe() and attaches if that was successful.
2788  */
2789 int
2790 device_probe_and_attach(device_t dev)
2791 {
2792         int error;
2793
2794         GIANT_REQUIRED;
2795
2796         error = device_probe(dev);
2797         if (error == -1)
2798                 return (0);
2799         else if (error != 0)
2800                 return (error);
2801
2802         CURVNET_SET_QUIET(vnet0);
2803         error = device_attach(dev);
2804         CURVNET_RESTORE();
2805         return error;
2806 }
2807
2808 /**
2809  * @brief Attach a device driver to a device
2810  *
2811  * This function is a wrapper around the DEVICE_ATTACH() driver
2812  * method. In addition to calling DEVICE_ATTACH(), it initialises the
2813  * device's sysctl tree, optionally prints a description of the device
2814  * and queues a notification event for user-based device management
2815  * services.
2816  *
2817  * Normally this function is only called internally from
2818  * device_probe_and_attach().
2819  *
2820  * @param dev           the device to initialise
2821  *
2822  * @retval 0            success
2823  * @retval ENXIO        no driver was found
2824  * @retval ENOMEM       memory allocation failure
2825  * @retval non-zero     some other unix error code
2826  */
2827 int
2828 device_attach(device_t dev)
2829 {
2830         uint64_t attachtime;
2831         int error;
2832
2833         if (resource_disabled(dev->driver->name, dev->unit)) {
2834                 device_disable(dev);
2835                 if (bootverbose)
2836                          device_printf(dev, "disabled via hints entry\n");
2837                 return (ENXIO);
2838         }
2839
2840         device_sysctl_init(dev);
2841         if (!device_is_quiet(dev))
2842                 device_print_child(dev->parent, dev);
2843         attachtime = get_cyclecount();
2844         dev->state = DS_ATTACHING;
2845         if ((error = DEVICE_ATTACH(dev)) != 0) {
2846                 printf("device_attach: %s%d attach returned %d\n",
2847                     dev->driver->name, dev->unit, error);
2848                 if (!(dev->flags & DF_FIXEDCLASS))
2849                         devclass_delete_device(dev->devclass, dev);
2850                 (void)device_set_driver(dev, NULL);
2851                 device_sysctl_fini(dev);
2852                 KASSERT(dev->busy == 0, ("attach failed but busy"));
2853                 dev->state = DS_NOTPRESENT;
2854                 return (error);
2855         }
2856         attachtime = get_cyclecount() - attachtime;
2857         /*
2858          * 4 bits per device is a reasonable value for desktop and server
2859          * hardware with good get_cyclecount() implementations, but may
2860          * need to be adjusted on other platforms.
2861          */
2862 #ifdef RANDOM_DEBUG
2863         printf("%s(): feeding %d bit(s) of entropy from %s%d\n",
2864             __func__, 4, dev->driver->name, dev->unit);
2865 #endif
2866         random_harvest(&attachtime, sizeof(attachtime), 4, RANDOM_ATTACH);
2867         device_sysctl_update(dev);
2868         if (dev->busy)
2869                 dev->state = DS_BUSY;
2870         else
2871                 dev->state = DS_ATTACHED;
2872         dev->flags &= ~DF_DONENOMATCH;
2873         devadded(dev);
2874         return (0);
2875 }
2876
2877 /**
2878  * @brief Detach a driver from a device
2879  *
2880  * This function is a wrapper around the DEVICE_DETACH() driver
2881  * method. If the call to DEVICE_DETACH() succeeds, it calls
2882  * BUS_CHILD_DETACHED() for the parent of @p dev, queues a
2883  * notification event for user-based device management services and
2884  * cleans up the device's sysctl tree.
2885  *
2886  * @param dev           the device to un-initialise
2887  *
2888  * @retval 0            success
2889  * @retval ENXIO        no driver was found
2890  * @retval ENOMEM       memory allocation failure
2891  * @retval non-zero     some other unix error code
2892  */
2893 int
2894 device_detach(device_t dev)
2895 {
2896         int error;
2897
2898         GIANT_REQUIRED;
2899
2900         PDEBUG(("%s", DEVICENAME(dev)));
2901         if (dev->state == DS_BUSY)
2902                 return (EBUSY);
2903         if (dev->state != DS_ATTACHED)
2904                 return (0);
2905
2906         if ((error = DEVICE_DETACH(dev)) != 0)
2907                 return (error);
2908         devremoved(dev);
2909         if (!device_is_quiet(dev))
2910                 device_printf(dev, "detached\n");
2911         if (dev->parent)
2912                 BUS_CHILD_DETACHED(dev->parent, dev);
2913
2914         if (!(dev->flags & DF_FIXEDCLASS))
2915                 devclass_delete_device(dev->devclass, dev);
2916
2917         dev->state = DS_NOTPRESENT;
2918         (void)device_set_driver(dev, NULL);
2919         device_sysctl_fini(dev);
2920
2921         return (0);
2922 }
2923
2924 /**
2925  * @brief Tells a driver to quiesce itself.
2926  *
2927  * This function is a wrapper around the DEVICE_QUIESCE() driver
2928  * method. If the call to DEVICE_QUIESCE() succeeds.
2929  *
2930  * @param dev           the device to quiesce
2931  *
2932  * @retval 0            success
2933  * @retval ENXIO        no driver was found
2934  * @retval ENOMEM       memory allocation failure
2935  * @retval non-zero     some other unix error code
2936  */
2937 int
2938 device_quiesce(device_t dev)
2939 {
2940
2941         PDEBUG(("%s", DEVICENAME(dev)));
2942         if (dev->state == DS_BUSY)
2943                 return (EBUSY);
2944         if (dev->state != DS_ATTACHED)
2945                 return (0);
2946
2947         return (DEVICE_QUIESCE(dev));
2948 }
2949
2950 /**
2951  * @brief Notify a device of system shutdown
2952  *
2953  * This function calls the DEVICE_SHUTDOWN() driver method if the
2954  * device currently has an attached driver.
2955  *
2956  * @returns the value returned by DEVICE_SHUTDOWN()
2957  */
2958 int
2959 device_shutdown(device_t dev)
2960 {
2961         if (dev->state < DS_ATTACHED)
2962                 return (0);
2963         return (DEVICE_SHUTDOWN(dev));
2964 }
2965
2966 /**
2967  * @brief Set the unit number of a device
2968  *
2969  * This function can be used to override the unit number used for a
2970  * device (e.g. to wire a device to a pre-configured unit number).
2971  */
2972 int
2973 device_set_unit(device_t dev, int unit)
2974 {
2975         devclass_t dc;
2976         int err;
2977
2978         dc = device_get_devclass(dev);
2979         if (unit < dc->maxunit && dc->devices[unit])
2980                 return (EBUSY);
2981         err = devclass_delete_device(dc, dev);
2982         if (err)
2983                 return (err);
2984         dev->unit = unit;
2985         err = devclass_add_device(dc, dev);
2986         if (err)
2987                 return (err);
2988
2989         bus_data_generation_update();
2990         return (0);
2991 }
2992
2993 /*======================================*/
2994 /*
2995  * Some useful method implementations to make life easier for bus drivers.
2996  */
2997
2998 /**
2999  * @brief Initialise a resource list.
3000  *
3001  * @param rl            the resource list to initialise
3002  */
3003 void
3004 resource_list_init(struct resource_list *rl)
3005 {
3006         STAILQ_INIT(rl);
3007 }
3008
3009 /**
3010  * @brief Reclaim memory used by a resource list.
3011  *
3012  * This function frees the memory for all resource entries on the list
3013  * (if any).
3014  *
3015  * @param rl            the resource list to free               
3016  */
3017 void
3018 resource_list_free(struct resource_list *rl)
3019 {
3020         struct resource_list_entry *rle;
3021
3022         while ((rle = STAILQ_FIRST(rl)) != NULL) {
3023                 if (rle->res)
3024                         panic("resource_list_free: resource entry is busy");
3025                 STAILQ_REMOVE_HEAD(rl, link);
3026                 free(rle, M_BUS);
3027         }
3028 }
3029
3030 /**
3031  * @brief Add a resource entry.
3032  *
3033  * This function adds a resource entry using the given @p type, @p
3034  * start, @p end and @p count values. A rid value is chosen by
3035  * searching sequentially for the first unused rid starting at zero.
3036  *
3037  * @param rl            the resource list to edit
3038  * @param type          the resource entry type (e.g. SYS_RES_MEMORY)
3039  * @param start         the start address of the resource
3040  * @param end           the end address of the resource
3041  * @param count         XXX end-start+1
3042  */
3043 int
3044 resource_list_add_next(struct resource_list *rl, int type, u_long start,
3045     u_long end, u_long count)
3046 {
3047         int rid;
3048
3049         rid = 0;
3050         while (resource_list_find(rl, type, rid) != NULL)
3051                 rid++;
3052         resource_list_add(rl, type, rid, start, end, count);
3053         return (rid);
3054 }
3055
3056 /**
3057  * @brief Add or modify a resource entry.
3058  *
3059  * If an existing entry exists with the same type and rid, it will be
3060  * modified using the given values of @p start, @p end and @p
3061  * count. If no entry exists, a new one will be created using the
3062  * given values.  The resource list entry that matches is then returned.
3063  *
3064  * @param rl            the resource list to edit
3065  * @param type          the resource entry type (e.g. SYS_RES_MEMORY)
3066  * @param rid           the resource identifier
3067  * @param start         the start address of the resource
3068  * @param end           the end address of the resource
3069  * @param count         XXX end-start+1
3070  */
3071 struct resource_list_entry *
3072 resource_list_add(struct resource_list *rl, int type, int rid,
3073     u_long start, u_long end, u_long count)
3074 {
3075         struct resource_list_entry *rle;
3076
3077         rle = resource_list_find(rl, type, rid);
3078         if (!rle) {
3079                 rle = malloc(sizeof(struct resource_list_entry), M_BUS,
3080                     M_NOWAIT);
3081                 if (!rle)
3082                         panic("resource_list_add: can't record entry");
3083                 STAILQ_INSERT_TAIL(rl, rle, link);
3084                 rle->type = type;
3085                 rle->rid = rid;
3086                 rle->res = NULL;
3087                 rle->flags = 0;
3088         }
3089
3090         if (rle->res)
3091                 panic("resource_list_add: resource entry is busy");
3092
3093         rle->start = start;
3094         rle->end = end;
3095         rle->count = count;
3096         return (rle);
3097 }
3098
3099 /**
3100  * @brief Determine if a resource entry is busy.
3101  *
3102  * Returns true if a resource entry is busy meaning that it has an
3103  * associated resource that is not an unallocated "reserved" resource.
3104  *
3105  * @param rl            the resource list to search
3106  * @param type          the resource entry type (e.g. SYS_RES_MEMORY)
3107  * @param rid           the resource identifier
3108  *
3109  * @returns Non-zero if the entry is busy, zero otherwise.
3110  */
3111 int
3112 resource_list_busy(struct resource_list *rl, int type, int rid)
3113 {
3114         struct resource_list_entry *rle;
3115
3116         rle = resource_list_find(rl, type, rid);
3117         if (rle == NULL || rle->res == NULL)
3118                 return (0);
3119         if ((rle->flags & (RLE_RESERVED | RLE_ALLOCATED)) == RLE_RESERVED) {
3120                 KASSERT(!(rman_get_flags(rle->res) & RF_ACTIVE),
3121                     ("reserved resource is active"));
3122                 return (0);
3123         }
3124         return (1);
3125 }
3126
3127 /**
3128  * @brief Determine if a resource entry is reserved.
3129  *
3130  * Returns true if a resource entry is reserved meaning that it has an
3131  * associated "reserved" resource.  The resource can either be
3132  * allocated or unallocated.
3133  *
3134  * @param rl            the resource list to search
3135  * @param type          the resource entry type (e.g. SYS_RES_MEMORY)
3136  * @param rid           the resource identifier
3137  *
3138  * @returns Non-zero if the entry is reserved, zero otherwise.
3139  */
3140 int
3141 resource_list_reserved(struct resource_list *rl, int type, int rid)
3142 {
3143         struct resource_list_entry *rle;
3144
3145         rle = resource_list_find(rl, type, rid);
3146         if (rle != NULL && rle->flags & RLE_RESERVED)
3147                 return (1);
3148         return (0);
3149 }
3150
3151 /**
3152  * @brief Find a resource entry by type and rid.
3153  *
3154  * @param rl            the resource list to search
3155  * @param type          the resource entry type (e.g. SYS_RES_MEMORY)
3156  * @param rid           the resource identifier
3157  *
3158  * @returns the resource entry pointer or NULL if there is no such
3159  * entry.
3160  */
3161 struct resource_list_entry *
3162 resource_list_find(struct resource_list *rl, int type, int rid)
3163 {
3164         struct resource_list_entry *rle;
3165
3166         STAILQ_FOREACH(rle, rl, link) {
3167                 if (rle->type == type && rle->rid == rid)
3168                         return (rle);
3169         }
3170         return (NULL);
3171 }
3172
3173 /**
3174  * @brief Delete a resource entry.
3175  *
3176  * @param rl            the resource list to edit
3177  * @param type          the resource entry type (e.g. SYS_RES_MEMORY)
3178  * @param rid           the resource identifier
3179  */
3180 void
3181 resource_list_delete(struct resource_list *rl, int type, int rid)
3182 {
3183         struct resource_list_entry *rle = resource_list_find(rl, type, rid);
3184
3185         if (rle) {
3186                 if (rle->res != NULL)
3187                         panic("resource_list_delete: resource has not been released");
3188                 STAILQ_REMOVE(rl, rle, resource_list_entry, link);
3189                 free(rle, M_BUS);
3190         }
3191 }
3192
3193 /**
3194  * @brief Allocate a reserved resource
3195  *
3196  * This can be used by busses to force the allocation of resources
3197  * that are always active in the system even if they are not allocated
3198  * by a driver (e.g. PCI BARs).  This function is usually called when
3199  * adding a new child to the bus.  The resource is allocated from the
3200  * parent bus when it is reserved.  The resource list entry is marked
3201  * with RLE_RESERVED to note that it is a reserved resource.
3202  *
3203  * Subsequent attempts to allocate the resource with
3204  * resource_list_alloc() will succeed the first time and will set
3205  * RLE_ALLOCATED to note that it has been allocated.  When a reserved
3206  * resource that has been allocated is released with
3207  * resource_list_release() the resource RLE_ALLOCATED is cleared, but
3208  * the actual resource remains allocated.  The resource can be released to
3209  * the parent bus by calling resource_list_unreserve().
3210  *
3211  * @param rl            the resource list to allocate from
3212  * @param bus           the parent device of @p child
3213  * @param child         the device for which the resource is being reserved
3214  * @param type          the type of resource to allocate
3215  * @param rid           a pointer to the resource identifier
3216  * @param start         hint at the start of the resource range - pass
3217  *                      @c 0UL for any start address
3218  * @param end           hint at the end of the resource range - pass
3219  *                      @c ~0UL for any end address
3220  * @param count         hint at the size of range required - pass @c 1
3221  *                      for any size
3222  * @param flags         any extra flags to control the resource
3223  *                      allocation - see @c RF_XXX flags in
3224  *                      <sys/rman.h> for details
3225  * 
3226  * @returns             the resource which was allocated or @c NULL if no
3227  *                      resource could be allocated
3228  */
3229 struct resource *
3230 resource_list_reserve(struct resource_list *rl, device_t bus, device_t child,
3231     int type, int *rid, u_long start, u_long end, u_long count, u_int flags)
3232 {
3233         struct resource_list_entry *rle = NULL;
3234         int passthrough = (device_get_parent(child) != bus);
3235         struct resource *r;
3236
3237         if (passthrough)
3238                 panic(
3239     "resource_list_reserve() should only be called for direct children");
3240         if (flags & RF_ACTIVE)
3241                 panic(
3242     "resource_list_reserve() should only reserve inactive resources");
3243
3244         r = resource_list_alloc(rl, bus, child, type, rid, start, end, count,
3245             flags);
3246         if (r != NULL) {
3247                 rle = resource_list_find(rl, type, *rid);
3248                 rle->flags |= RLE_RESERVED;
3249         }
3250         return (r);
3251 }
3252
3253 /**
3254  * @brief Helper function for implementing BUS_ALLOC_RESOURCE()
3255  *
3256  * Implement BUS_ALLOC_RESOURCE() by looking up a resource from the list
3257  * and passing the allocation up to the parent of @p bus. This assumes
3258  * that the first entry of @c device_get_ivars(child) is a struct
3259  * resource_list. This also handles 'passthrough' allocations where a
3260  * child is a remote descendant of bus by passing the allocation up to
3261  * the parent of bus.
3262  *
3263  * Typically, a bus driver would store a list of child resources
3264  * somewhere in the child device's ivars (see device_get_ivars()) and
3265  * its implementation of BUS_ALLOC_RESOURCE() would find that list and
3266  * then call resource_list_alloc() to perform the allocation.
3267  *
3268  * @param rl            the resource list to allocate from
3269  * @param bus           the parent device of @p child
3270  * @param child         the device which is requesting an allocation
3271  * @param type          the type of resource to allocate
3272  * @param rid           a pointer to the resource identifier
3273  * @param start         hint at the start of the resource range - pass
3274  *                      @c 0UL for any start address
3275  * @param end           hint at the end of the resource range - pass
3276  *                      @c ~0UL for any end address
3277  * @param count         hint at the size of range required - pass @c 1
3278  *                      for any size
3279  * @param flags         any extra flags to control the resource
3280  *                      allocation - see @c RF_XXX flags in
3281  *                      <sys/rman.h> for details
3282  * 
3283  * @returns             the resource which was allocated or @c NULL if no
3284  *                      resource could be allocated
3285  */
3286 struct resource *
3287 resource_list_alloc(struct resource_list *rl, device_t bus, device_t child,
3288     int type, int *rid, u_long start, u_long end, u_long count, u_int flags)
3289 {
3290         struct resource_list_entry *rle = NULL;
3291         int passthrough = (device_get_parent(child) != bus);
3292         int isdefault = (start == 0UL && end == ~0UL);
3293
3294         if (passthrough) {
3295                 return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child,
3296                     type, rid, start, end, count, flags));
3297         }
3298
3299         rle = resource_list_find(rl, type, *rid);
3300
3301         if (!rle)
3302                 return (NULL);          /* no resource of that type/rid */
3303
3304         if (rle->res) {
3305                 if (rle->flags & RLE_RESERVED) {
3306                         if (rle->flags & RLE_ALLOCATED)
3307                                 return (NULL);
3308                         if ((flags & RF_ACTIVE) &&
3309                             bus_activate_resource(child, type, *rid,
3310                             rle->res) != 0)
3311                                 return (NULL);
3312                         rle->flags |= RLE_ALLOCATED;
3313                         return (rle->res);
3314                 }
3315                 device_printf(bus,
3316                     "resource entry %#x type %d for child %s is busy\n", *rid,
3317                     type, device_get_nameunit(child));
3318                 return (NULL);
3319         }
3320
3321         if (isdefault) {
3322                 start = rle->start;
3323                 count = ulmax(count, rle->count);
3324                 end = ulmax(rle->end, start + count - 1);
3325         }
3326
3327         rle->res = BUS_ALLOC_RESOURCE(device_get_parent(bus), child,
3328             type, rid, start, end, count, flags);
3329
3330         /*
3331          * Record the new range.
3332          */
3333         if (rle->res) {
3334                 rle->start = rman_get_start(rle->res);
3335                 rle->end = rman_get_end(rle->res);
3336                 rle->count = count;
3337         }
3338
3339         return (rle->res);
3340 }
3341
3342 /**
3343  * @brief Helper function for implementing BUS_RELEASE_RESOURCE()
3344  * 
3345  * Implement BUS_RELEASE_RESOURCE() using a resource list. Normally
3346  * used with resource_list_alloc().
3347  * 
3348  * @param rl            the resource list which was allocated from
3349  * @param bus           the parent device of @p child
3350  * @param child         the device which is requesting a release
3351  * @param type          the type of resource to release
3352  * @param rid           the resource identifier
3353  * @param res           the resource to release
3354  * 
3355  * @retval 0            success
3356  * @retval non-zero     a standard unix error code indicating what
3357  *                      error condition prevented the operation
3358  */
3359 int
3360 resource_list_release(struct resource_list *rl, device_t bus, device_t child,
3361     int type, int rid, struct resource *res)
3362 {
3363         struct resource_list_entry *rle = NULL;
3364         int passthrough = (device_get_parent(child) != bus);
3365         int error;
3366
3367         if (passthrough) {
3368                 return (BUS_RELEASE_RESOURCE(device_get_parent(bus), child,
3369                     type, rid, res));
3370         }
3371
3372         rle = resource_list_find(rl, type, rid);
3373
3374         if (!rle)
3375                 panic("resource_list_release: can't find resource");
3376         if (!rle->res)
3377                 panic("resource_list_release: resource entry is not busy");
3378         if (rle->flags & RLE_RESERVED) {
3379                 if (rle->flags & RLE_ALLOCATED) {
3380                         if (rman_get_flags(res) & RF_ACTIVE) {
3381                                 error = bus_deactivate_resource(child, type,
3382                                     rid, res);
3383                                 if (error)
3384                                         return (error);
3385                         }
3386                         rle->flags &= ~RLE_ALLOCATED;
3387                         return (0);
3388                 }
3389                 return (EINVAL);
3390         }
3391
3392         error = BUS_RELEASE_RESOURCE(device_get_parent(bus), child,
3393             type, rid, res);
3394         if (error)
3395                 return (error);
3396
3397         rle->res = NULL;
3398         return (0);
3399 }
3400
3401 /**
3402  * @brief Release all active resources of a given type
3403  *
3404  * Release all active resources of a specified type.  This is intended
3405  * to be used to cleanup resources leaked by a driver after detach or
3406  * a failed attach.
3407  *
3408  * @param rl            the resource list which was allocated from
3409  * @param bus           the parent device of @p child
3410  * @param child         the device whose active resources are being released
3411  * @param type          the type of resources to release
3412  * 
3413  * @retval 0            success
3414  * @retval EBUSY        at least one resource was active
3415  */
3416 int
3417 resource_list_release_active(struct resource_list *rl, device_t bus,
3418     device_t child, int type)
3419 {
3420         struct resource_list_entry *rle;
3421         int error, retval;
3422
3423         retval = 0;
3424         STAILQ_FOREACH(rle, rl, link) {
3425                 if (rle->type != type)
3426                         continue;
3427                 if (rle->res == NULL)
3428                         continue;
3429                 if ((rle->flags & (RLE_RESERVED | RLE_ALLOCATED)) ==
3430                     RLE_RESERVED)
3431                         continue;
3432                 retval = EBUSY;
3433                 error = resource_list_release(rl, bus, child, type,
3434                     rman_get_rid(rle->res), rle->res);
3435                 if (error != 0)
3436                         device_printf(bus,
3437                             "Failed to release active resource: %d\n", error);
3438         }
3439         return (retval);
3440 }
3441
3442
3443 /**
3444  * @brief Fully release a reserved resource
3445  *
3446  * Fully releases a resource reserved via resource_list_reserve().
3447  *
3448  * @param rl            the resource list which was allocated from
3449  * @param bus           the parent device of @p child
3450  * @param child         the device whose reserved resource is being released
3451  * @param type          the type of resource to release
3452  * @param rid           the resource identifier
3453  * @param res           the resource to release
3454  * 
3455  * @retval 0            success
3456  * @retval non-zero     a standard unix error code indicating what
3457  *                      error condition prevented the operation
3458  */
3459 int
3460 resource_list_unreserve(struct resource_list *rl, device_t bus, device_t child,
3461     int type, int rid)
3462 {
3463         struct resource_list_entry *rle = NULL;
3464         int passthrough = (device_get_parent(child) != bus);
3465
3466         if (passthrough)
3467                 panic(
3468     "resource_list_unreserve() should only be called for direct children");
3469
3470         rle = resource_list_find(rl, type, rid);
3471
3472         if (!rle)
3473                 panic("resource_list_unreserve: can't find resource");
3474         if (!(rle->flags & RLE_RESERVED))
3475                 return (EINVAL);
3476         if (rle->flags & RLE_ALLOCATED)
3477                 return (EBUSY);
3478         rle->flags &= ~RLE_RESERVED;
3479         return (resource_list_release(rl, bus, child, type, rid, rle->res));
3480 }
3481
3482 /**
3483  * @brief Print a description of resources in a resource list
3484  *
3485  * Print all resources of a specified type, for use in BUS_PRINT_CHILD().
3486  * The name is printed if at least one resource of the given type is available.
3487  * The format is used to print resource start and end.
3488  *
3489  * @param rl            the resource list to print
3490  * @param name          the name of @p type, e.g. @c "memory"
3491  * @param type          type type of resource entry to print
3492  * @param format        printf(9) format string to print resource
3493  *                      start and end values
3494  * 
3495  * @returns             the number of characters printed
3496  */
3497 int
3498 resource_list_print_type(struct resource_list *rl, const char *name, int type,
3499     const char *format)
3500 {
3501         struct resource_list_entry *rle;
3502         int printed, retval;
3503
3504         printed = 0;
3505         retval = 0;
3506         /* Yes, this is kinda cheating */
3507         STAILQ_FOREACH(rle, rl, link) {
3508                 if (rle->type == type) {
3509                         if (printed == 0)
3510                                 retval += printf(" %s ", name);
3511                         else
3512                                 retval += printf(",");
3513                         printed++;
3514                         retval += printf(format, rle->start);
3515                         if (rle->count > 1) {
3516                                 retval += printf("-");
3517                                 retval += printf(format, rle->start +
3518                                                  rle->count - 1);
3519                         }
3520                 }
3521         }
3522         return (retval);
3523 }
3524
3525 /**
3526  * @brief Releases all the resources in a list.
3527  *
3528  * @param rl            The resource list to purge.
3529  * 
3530  * @returns             nothing
3531  */
3532 void
3533 resource_list_purge(struct resource_list *rl)
3534 {
3535         struct resource_list_entry *rle;
3536
3537         while ((rle = STAILQ_FIRST(rl)) != NULL) {
3538                 if (rle->res)
3539                         bus_release_resource(rman_get_device(rle->res),
3540                             rle->type, rle->rid, rle->res);
3541                 STAILQ_REMOVE_HEAD(rl, link);
3542                 free(rle, M_BUS);
3543         }
3544 }
3545
3546 device_t
3547 bus_generic_add_child(device_t dev, u_int order, const char *name, int unit)
3548 {
3549
3550         return (device_add_child_ordered(dev, order, name, unit));
3551 }
3552
3553 /**
3554  * @brief Helper function for implementing DEVICE_PROBE()
3555  *
3556  * This function can be used to help implement the DEVICE_PROBE() for
3557  * a bus (i.e. a device which has other devices attached to it). It
3558  * calls the DEVICE_IDENTIFY() method of each driver in the device's
3559  * devclass.
3560  */
3561 int
3562 bus_generic_probe(device_t dev)
3563 {
3564         devclass_t dc = dev->devclass;
3565         driverlink_t dl;
3566
3567         TAILQ_FOREACH(dl, &dc->drivers, link) {
3568                 /*
3569                  * If this driver's pass is too high, then ignore it.
3570                  * For most drivers in the default pass, this will
3571                  * never be true.  For early-pass drivers they will
3572                  * only call the identify routines of eligible drivers
3573                  * when this routine is called.  Drivers for later
3574                  * passes should have their identify routines called
3575                  * on early-pass busses during BUS_NEW_PASS().
3576                  */
3577                 if (dl->pass > bus_current_pass)
3578                         continue;
3579                 DEVICE_IDENTIFY(dl->driver, dev);
3580         }
3581
3582         return (0);
3583 }
3584
3585 /**
3586  * @brief Helper function for implementing DEVICE_ATTACH()
3587  *
3588  * This function can be used to help implement the DEVICE_ATTACH() for
3589  * a bus. It calls device_probe_and_attach() for each of the device's
3590  * children.
3591  */
3592 int
3593 bus_generic_attach(device_t dev)
3594 {
3595         device_t child;
3596
3597         TAILQ_FOREACH(child, &dev->children, link) {
3598                 device_probe_and_attach(child);
3599         }
3600
3601         return (0);
3602 }
3603
3604 /**
3605  * @brief Helper function for implementing DEVICE_DETACH()
3606  *
3607  * This function can be used to help implement the DEVICE_DETACH() for
3608  * a bus. It calls device_detach() for each of the device's
3609  * children.
3610  */
3611 int
3612 bus_generic_detach(device_t dev)
3613 {
3614         device_t child;
3615         int error;
3616
3617         if (dev->state != DS_ATTACHED)
3618                 return (EBUSY);
3619
3620         TAILQ_FOREACH(child, &dev->children, link) {
3621                 if ((error = device_detach(child)) != 0)
3622                         return (error);
3623         }
3624
3625         return (0);
3626 }
3627
3628 /**
3629  * @brief Helper function for implementing DEVICE_SHUTDOWN()
3630  *
3631  * This function can be used to help implement the DEVICE_SHUTDOWN()
3632  * for a bus. It calls device_shutdown() for each of the device's
3633  * children.
3634  */
3635 int
3636 bus_generic_shutdown(device_t dev)
3637 {
3638         device_t child;
3639
3640         TAILQ_FOREACH(child, &dev->children, link) {
3641                 device_shutdown(child);
3642         }
3643
3644         return (0);
3645 }
3646
3647 /**
3648  * @brief Helper function for implementing DEVICE_SUSPEND()
3649  *
3650  * This function can be used to help implement the DEVICE_SUSPEND()
3651  * for a bus. It calls DEVICE_SUSPEND() for each of the device's
3652  * children. If any call to DEVICE_SUSPEND() fails, the suspend
3653  * operation is aborted and any devices which were suspended are
3654  * resumed immediately by calling their DEVICE_RESUME() methods.
3655  */
3656 int
3657 bus_generic_suspend(device_t dev)
3658 {
3659         int             error;
3660         device_t        child, child2;
3661
3662         TAILQ_FOREACH(child, &dev->children, link) {
3663                 error = DEVICE_SUSPEND(child);
3664                 if (error) {
3665                         for (child2 = TAILQ_FIRST(&dev->children);
3666                              child2 && child2 != child;
3667                              child2 = TAILQ_NEXT(child2, link))
3668                                 DEVICE_RESUME(child2);
3669                         return (error);
3670                 }
3671         }
3672         return (0);
3673 }
3674
3675 /**
3676  * @brief Helper function for implementing DEVICE_RESUME()
3677  *
3678  * This function can be used to help implement the DEVICE_RESUME() for
3679  * a bus. It calls DEVICE_RESUME() on each of the device's children.
3680  */
3681 int
3682 bus_generic_resume(device_t dev)
3683 {
3684         device_t        child;
3685
3686         TAILQ_FOREACH(child, &dev->children, link) {
3687                 DEVICE_RESUME(child);
3688                 /* if resume fails, there's nothing we can usefully do... */
3689         }
3690         return (0);
3691 }
3692
3693 /**
3694  * @brief Helper function for implementing BUS_PRINT_CHILD().
3695  *
3696  * This function prints the first part of the ascii representation of
3697  * @p child, including its name, unit and description (if any - see
3698  * device_set_desc()).
3699  *
3700  * @returns the number of characters printed
3701  */
3702 int
3703 bus_print_child_header(device_t dev, device_t child)
3704 {
3705         int     retval = 0;
3706
3707         if (device_get_desc(child)) {
3708                 retval += device_printf(child, "<%s>", device_get_desc(child));
3709         } else {
3710                 retval += printf("%s", device_get_nameunit(child));
3711         }
3712
3713         return (retval);
3714 }
3715
3716 /**
3717  * @brief Helper function for implementing BUS_PRINT_CHILD().
3718  *
3719  * This function prints the last part of the ascii representation of
3720  * @p child, which consists of the string @c " on " followed by the
3721  * name and unit of the @p dev.
3722  *
3723  * @returns the number of characters printed
3724  */
3725 int
3726 bus_print_child_footer(device_t dev, device_t child)
3727 {
3728         return (printf(" on %s\n", device_get_nameunit(dev)));
3729 }
3730
3731 /**
3732  * @brief Helper function for implementing BUS_PRINT_CHILD().
3733  *
3734  * This function prints out the VM domain for the given device.
3735  *
3736  * @returns the number of characters printed
3737  */
3738 int
3739 bus_print_child_domain(device_t dev, device_t child)
3740 {
3741         int domain;
3742
3743         /* No domain? Don't print anything */
3744         if (BUS_GET_DOMAIN(dev, child, &domain) != 0)
3745                 return (0);
3746
3747         return (printf(" numa-domain %d", domain));
3748 }
3749
3750 /**
3751  * @brief Helper function for implementing BUS_PRINT_CHILD().
3752  *
3753  * This function simply calls bus_print_child_header() followed by
3754  * bus_print_child_footer().
3755  *
3756  * @returns the number of characters printed
3757  */
3758 int
3759 bus_generic_print_child(device_t dev, device_t child)
3760 {
3761         int     retval = 0;
3762
3763         retval += bus_print_child_header(dev, child);
3764         retval += bus_print_child_domain(dev, child);
3765         retval += bus_print_child_footer(dev, child);
3766
3767         return (retval);
3768 }
3769
3770 /**
3771  * @brief Stub function for implementing BUS_READ_IVAR().
3772  * 
3773  * @returns ENOENT
3774  */
3775 int
3776 bus_generic_read_ivar(device_t dev, device_t child, int index,
3777     uintptr_t * result)
3778 {
3779         return (ENOENT);
3780 }
3781
3782 /**
3783  * @brief Stub function for implementing BUS_WRITE_IVAR().
3784  * 
3785  * @returns ENOENT
3786  */
3787 int
3788 bus_generic_write_ivar(device_t dev, device_t child, int index,
3789     uintptr_t value)
3790 {
3791         return (ENOENT);
3792 }
3793
3794 /**
3795  * @brief Stub function for implementing BUS_GET_RESOURCE_LIST().
3796  * 
3797  * @returns NULL
3798  */
3799 struct resource_list *
3800 bus_generic_get_resource_list(device_t dev, device_t child)
3801 {
3802         return (NULL);
3803 }
3804
3805 /**
3806  * @brief Helper function for implementing BUS_DRIVER_ADDED().
3807  *
3808  * This implementation of BUS_DRIVER_ADDED() simply calls the driver's
3809  * DEVICE_IDENTIFY() method to allow it to add new children to the bus
3810  * and then calls device_probe_and_attach() for each unattached child.
3811  */
3812 void
3813 bus_generic_driver_added(device_t dev, driver_t *driver)
3814 {
3815         device_t child;
3816
3817         DEVICE_IDENTIFY(driver, dev);
3818         TAILQ_FOREACH(child, &dev->children, link) {
3819                 if (child->state == DS_NOTPRESENT ||
3820                     (child->flags & DF_REBID))
3821                         device_probe_and_attach(child);
3822         }
3823 }
3824
3825 /**
3826  * @brief Helper function for implementing BUS_NEW_PASS().
3827  *
3828  * This implementing of BUS_NEW_PASS() first calls the identify
3829  * routines for any drivers that probe at the current pass.  Then it
3830  * walks the list of devices for this bus.  If a device is already
3831  * attached, then it calls BUS_NEW_PASS() on that device.  If the
3832  * device is not already attached, it attempts to attach a driver to
3833  * it.
3834  */
3835 void
3836 bus_generic_new_pass(device_t dev)
3837 {
3838         driverlink_t dl;
3839         devclass_t dc;
3840         device_t child;
3841
3842         dc = dev->devclass;
3843         TAILQ_FOREACH(dl, &dc->drivers, link) {
3844                 if (dl->pass == bus_current_pass)
3845                         DEVICE_IDENTIFY(dl->driver, dev);
3846         }
3847         TAILQ_FOREACH(child, &dev->children, link) {
3848                 if (child->state >= DS_ATTACHED)
3849                         BUS_NEW_PASS(child);
3850                 else if (child->state == DS_NOTPRESENT)
3851                         device_probe_and_attach(child);
3852         }
3853 }
3854
3855 /**
3856  * @brief Helper function for implementing BUS_SETUP_INTR().
3857  *
3858  * This simple implementation of BUS_SETUP_INTR() simply calls the
3859  * BUS_SETUP_INTR() method of the parent of @p dev.
3860  */
3861 int
3862 bus_generic_setup_intr(device_t dev, device_t child, struct resource *irq,
3863     int flags, driver_filter_t *filter, driver_intr_t *intr, void *arg, 
3864     void **cookiep)
3865 {
3866         /* Propagate up the bus hierarchy until someone handles it. */
3867         if (dev->parent)
3868                 return (BUS_SETUP_INTR(dev->parent, child, irq, flags,
3869                     filter, intr, arg, cookiep));
3870         return (EINVAL);
3871 }
3872
3873 /**
3874  * @brief Helper function for implementing BUS_TEARDOWN_INTR().
3875  *
3876  * This simple implementation of BUS_TEARDOWN_INTR() simply calls the
3877  * BUS_TEARDOWN_INTR() method of the parent of @p dev.
3878  */
3879 int
3880 bus_generic_teardown_intr(device_t dev, device_t child, struct resource *irq,
3881     void *cookie)
3882 {
3883         /* Propagate up the bus hierarchy until someone handles it. */
3884         if (dev->parent)
3885                 return (BUS_TEARDOWN_INTR(dev->parent, child, irq, cookie));
3886         return (EINVAL);
3887 }
3888
3889 /**
3890  * @brief Helper function for implementing BUS_ADJUST_RESOURCE().
3891  *
3892  * This simple implementation of BUS_ADJUST_RESOURCE() simply calls the
3893  * BUS_ADJUST_RESOURCE() method of the parent of @p dev.
3894  */
3895 int
3896 bus_generic_adjust_resource(device_t dev, device_t child, int type,
3897     struct resource *r, u_long start, u_long end)
3898 {
3899         /* Propagate up the bus hierarchy until someone handles it. */
3900         if (dev->parent)
3901                 return (BUS_ADJUST_RESOURCE(dev->parent, child, type, r, start,
3902                     end));
3903         return (EINVAL);
3904 }
3905
3906 /**
3907  * @brief Helper function for implementing BUS_ALLOC_RESOURCE().
3908  *
3909  * This simple implementation of BUS_ALLOC_RESOURCE() simply calls the
3910  * BUS_ALLOC_RESOURCE() method of the parent of @p dev.
3911  */
3912 struct resource *
3913 bus_generic_alloc_resource(device_t dev, device_t child, int type, int *rid,
3914     u_long start, u_long end, u_long count, u_int flags)
3915 {
3916         /* Propagate up the bus hierarchy until someone handles it. */
3917         if (dev->parent)
3918                 return (BUS_ALLOC_RESOURCE(dev->parent, child, type, rid,
3919                     start, end, count, flags));
3920         return (NULL);
3921 }
3922
3923 /**
3924  * @brief Helper function for implementing BUS_RELEASE_RESOURCE().
3925  *
3926  * This simple implementation of BUS_RELEASE_RESOURCE() simply calls the
3927  * BUS_RELEASE_RESOURCE() method of the parent of @p dev.
3928  */
3929 int
3930 bus_generic_release_resource(device_t dev, device_t child, int type, int rid,
3931     struct resource *r)
3932 {
3933         /* Propagate up the bus hierarchy until someone handles it. */
3934         if (dev->parent)
3935                 return (BUS_RELEASE_RESOURCE(dev->parent, child, type, rid,
3936                     r));
3937         return (EINVAL);
3938 }
3939
3940 /**
3941  * @brief Helper function for implementing BUS_ACTIVATE_RESOURCE().
3942  *
3943  * This simple implementation of BUS_ACTIVATE_RESOURCE() simply calls the
3944  * BUS_ACTIVATE_RESOURCE() method of the parent of @p dev.
3945  */
3946 int
3947 bus_generic_activate_resource(device_t dev, device_t child, int type, int rid,
3948     struct resource *r)
3949 {
3950         /* Propagate up the bus hierarchy until someone handles it. */
3951         if (dev->parent)
3952                 return (BUS_ACTIVATE_RESOURCE(dev->parent, child, type, rid,
3953                     r));
3954         return (EINVAL);
3955 }
3956
3957 /**
3958  * @brief Helper function for implementing BUS_DEACTIVATE_RESOURCE().
3959  *
3960  * This simple implementation of BUS_DEACTIVATE_RESOURCE() simply calls the
3961  * BUS_DEACTIVATE_RESOURCE() method of the parent of @p dev.
3962  */
3963 int
3964 bus_generic_deactivate_resource(device_t dev, device_t child, int type,
3965     int rid, struct resource *r)
3966 {
3967         /* Propagate up the bus hierarchy until someone handles it. */
3968         if (dev->parent)
3969                 return (BUS_DEACTIVATE_RESOURCE(dev->parent, child, type, rid,
3970                     r));
3971         return (EINVAL);
3972 }
3973
3974 /**
3975  * @brief Helper function for implementing BUS_BIND_INTR().
3976  *
3977  * This simple implementation of BUS_BIND_INTR() simply calls the
3978  * BUS_BIND_INTR() method of the parent of @p dev.
3979  */
3980 int
3981 bus_generic_bind_intr(device_t dev, device_t child, struct resource *irq,
3982     int cpu)
3983 {
3984
3985         /* Propagate up the bus hierarchy until someone handles it. */
3986         if (dev->parent)
3987                 return (BUS_BIND_INTR(dev->parent, child, irq, cpu));
3988         return (EINVAL);
3989 }
3990
3991 /**
3992  * @brief Helper function for implementing BUS_CONFIG_INTR().
3993  *
3994  * This simple implementation of BUS_CONFIG_INTR() simply calls the
3995  * BUS_CONFIG_INTR() method of the parent of @p dev.
3996  */
3997 int
3998 bus_generic_config_intr(device_t dev, int irq, enum intr_trigger trig,
3999     enum intr_polarity pol)
4000 {
4001
4002         /* Propagate up the bus hierarchy until someone handles it. */
4003         if (dev->parent)
4004                 return (BUS_CONFIG_INTR(dev->parent, irq, trig, pol));
4005         return (EINVAL);
4006 }
4007
4008 /**
4009  * @brief Helper function for implementing BUS_DESCRIBE_INTR().
4010  *
4011  * This simple implementation of BUS_DESCRIBE_INTR() simply calls the
4012  * BUS_DESCRIBE_INTR() method of the parent of @p dev.
4013  */
4014 int
4015 bus_generic_describe_intr(device_t dev, device_t child, struct resource *irq,
4016     void *cookie, const char *descr)
4017 {
4018
4019         /* Propagate up the bus hierarchy until someone handles it. */
4020         if (dev->parent)
4021                 return (BUS_DESCRIBE_INTR(dev->parent, child, irq, cookie,
4022                     descr));
4023         return (EINVAL);
4024 }
4025
4026 /**
4027  * @brief Helper function for implementing BUS_GET_DMA_TAG().
4028  *
4029  * This simple implementation of BUS_GET_DMA_TAG() simply calls the
4030  * BUS_GET_DMA_TAG() method of the parent of @p dev.
4031  */
4032 bus_dma_tag_t
4033 bus_generic_get_dma_tag(device_t dev, device_t child)
4034 {
4035
4036         /* Propagate up the bus hierarchy until someone handles it. */
4037         if (dev->parent != NULL)
4038                 return (BUS_GET_DMA_TAG(dev->parent, child));
4039         return (NULL);
4040 }
4041
4042 /**
4043  * @brief Helper function for implementing BUS_GET_RESOURCE().
4044  *
4045  * This implementation of BUS_GET_RESOURCE() uses the
4046  * resource_list_find() function to do most of the work. It calls
4047  * BUS_GET_RESOURCE_LIST() to find a suitable resource list to
4048  * search.
4049  */
4050 int
4051 bus_generic_rl_get_resource(device_t dev, device_t child, int type, int rid,
4052     u_long *startp, u_long *countp)
4053 {
4054         struct resource_list *          rl = NULL;
4055         struct resource_list_entry *    rle = NULL;
4056
4057         rl = BUS_GET_RESOURCE_LIST(dev, child);
4058         if (!rl)
4059                 return (EINVAL);
4060
4061         rle = resource_list_find(rl, type, rid);
4062         if (!rle)
4063                 return (ENOENT);
4064
4065         if (startp)
4066                 *startp = rle->start;
4067         if (countp)
4068                 *countp = rle->count;
4069
4070         return (0);
4071 }
4072
4073 /**
4074  * @brief Helper function for implementing BUS_SET_RESOURCE().
4075  *
4076  * This implementation of BUS_SET_RESOURCE() uses the
4077  * resource_list_add() function to do most of the work. It calls
4078  * BUS_GET_RESOURCE_LIST() to find a suitable resource list to
4079  * edit.
4080  */
4081 int
4082 bus_generic_rl_set_resource(device_t dev, device_t child, int type, int rid,
4083     u_long start, u_long count)
4084 {
4085         struct resource_list *          rl = NULL;
4086
4087         rl = BUS_GET_RESOURCE_LIST(dev, child);
4088         if (!rl)
4089                 return (EINVAL);
4090
4091         resource_list_add(rl, type, rid, start, (start + count - 1), count);
4092
4093         return (0);
4094 }
4095
4096 /**
4097  * @brief Helper function for implementing BUS_DELETE_RESOURCE().
4098  *
4099  * This implementation of BUS_DELETE_RESOURCE() uses the
4100  * resource_list_delete() function to do most of the work. It calls
4101  * BUS_GET_RESOURCE_LIST() to find a suitable resource list to
4102  * edit.
4103  */
4104 void
4105 bus_generic_rl_delete_resource(device_t dev, device_t child, int type, int rid)
4106 {
4107         struct resource_list *          rl = NULL;
4108
4109         rl = BUS_GET_RESOURCE_LIST(dev, child);
4110         if (!rl)
4111                 return;
4112
4113         resource_list_delete(rl, type, rid);
4114
4115         return;
4116 }
4117
4118 /**
4119  * @brief Helper function for implementing BUS_RELEASE_RESOURCE().
4120  *
4121  * This implementation of BUS_RELEASE_RESOURCE() uses the
4122  * resource_list_release() function to do most of the work. It calls
4123  * BUS_GET_RESOURCE_LIST() to find a suitable resource list.
4124  */
4125 int
4126 bus_generic_rl_release_resource(device_t dev, device_t child, int type,
4127     int rid, struct resource *r)
4128 {
4129         struct resource_list *          rl = NULL;
4130
4131         if (device_get_parent(child) != dev)
4132                 return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
4133                     type, rid, r));
4134
4135         rl = BUS_GET_RESOURCE_LIST(dev, child);
4136         if (!rl)
4137                 return (EINVAL);
4138
4139         return (resource_list_release(rl, dev, child, type, rid, r));
4140 }
4141
4142 /**
4143  * @brief Helper function for implementing BUS_ALLOC_RESOURCE().
4144  *
4145  * This implementation of BUS_ALLOC_RESOURCE() uses the
4146  * resource_list_alloc() function to do most of the work. It calls
4147  * BUS_GET_RESOURCE_LIST() to find a suitable resource list.
4148  */
4149 struct resource *
4150 bus_generic_rl_alloc_resource(device_t dev, device_t child, int type,
4151     int *rid, u_long start, u_long end, u_long count, u_int flags)
4152 {
4153         struct resource_list *          rl = NULL;
4154
4155         if (device_get_parent(child) != dev)
4156                 return (BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
4157                     type, rid, start, end, count, flags));
4158
4159         rl = BUS_GET_RESOURCE_LIST(dev, child);
4160         if (!rl)
4161                 return (NULL);
4162
4163         return (resource_list_alloc(rl, dev, child, type, rid,
4164             start, end, count, flags));
4165 }
4166
4167 /**
4168  * @brief Helper function for implementing BUS_CHILD_PRESENT().
4169  *
4170  * This simple implementation of BUS_CHILD_PRESENT() simply calls the
4171  * BUS_CHILD_PRESENT() method of the parent of @p dev.
4172  */
4173 int
4174 bus_generic_child_present(device_t dev, device_t child)
4175 {
4176         return (BUS_CHILD_PRESENT(device_get_parent(dev), dev));
4177 }
4178
4179 int
4180 bus_generic_get_domain(device_t dev, device_t child, int *domain)
4181 {
4182
4183         if (dev->parent)
4184                 return (BUS_GET_DOMAIN(dev->parent, dev, domain));
4185
4186         return (ENOENT);
4187 }
4188
4189 /*
4190  * Some convenience functions to make it easier for drivers to use the
4191  * resource-management functions.  All these really do is hide the
4192  * indirection through the parent's method table, making for slightly
4193  * less-wordy code.  In the future, it might make sense for this code
4194  * to maintain some sort of a list of resources allocated by each device.
4195  */
4196
4197 int
4198 bus_alloc_resources(device_t dev, struct resource_spec *rs,
4199     struct resource **res)
4200 {
4201         int i;
4202
4203         for (i = 0; rs[i].type != -1; i++)
4204                 res[i] = NULL;
4205         for (i = 0; rs[i].type != -1; i++) {
4206                 res[i] = bus_alloc_resource_any(dev,
4207                     rs[i].type, &rs[i].rid, rs[i].flags);
4208                 if (res[i] == NULL && !(rs[i].flags & RF_OPTIONAL)) {
4209                         bus_release_resources(dev, rs, res);
4210                         return (ENXIO);
4211                 }
4212         }
4213         return (0);
4214 }
4215
4216 void
4217 bus_release_resources(device_t dev, const struct resource_spec *rs,
4218     struct resource **res)
4219 {
4220         int i;
4221
4222         for (i = 0; rs[i].type != -1; i++)
4223                 if (res[i] != NULL) {
4224                         bus_release_resource(
4225                             dev, rs[i].type, rs[i].rid, res[i]);
4226                         res[i] = NULL;
4227                 }
4228 }
4229
4230 /**
4231  * @brief Wrapper function for BUS_ALLOC_RESOURCE().
4232  *
4233  * This function simply calls the BUS_ALLOC_RESOURCE() method of the
4234  * parent of @p dev.
4235  */
4236 struct resource *
4237 bus_alloc_resource(device_t dev, int type, int *rid, u_long start, u_long end,
4238     u_long count, u_int flags)
4239 {
4240         if (dev->parent == NULL)
4241                 return (NULL);
4242         return (BUS_ALLOC_RESOURCE(dev->parent, dev, type, rid, start, end,
4243             count, flags));
4244 }
4245
4246 /**
4247  * @brief Wrapper function for BUS_ADJUST_RESOURCE().
4248  *
4249  * This function simply calls the BUS_ADJUST_RESOURCE() method of the
4250  * parent of @p dev.
4251  */
4252 int
4253 bus_adjust_resource(device_t dev, int type, struct resource *r, u_long start,
4254     u_long end)
4255 {
4256         if (dev->parent == NULL)
4257                 return (EINVAL);
4258         return (BUS_ADJUST_RESOURCE(dev->parent, dev, type, r, start, end));
4259 }
4260
4261 /**
4262  * @brief Wrapper function for BUS_ACTIVATE_RESOURCE().
4263  *
4264  * This function simply calls the BUS_ACTIVATE_RESOURCE() method of the
4265  * parent of @p dev.
4266  */
4267 int
4268 bus_activate_resource(device_t dev, int type, int rid, struct resource *r)
4269 {
4270         if (dev->parent == NULL)
4271                 return (EINVAL);
4272         return (BUS_ACTIVATE_RESOURCE(dev->parent, dev, type, rid, r));
4273 }
4274
4275 /**
4276  * @brief Wrapper function for BUS_DEACTIVATE_RESOURCE().
4277  *
4278  * This function simply calls the BUS_DEACTIVATE_RESOURCE() method of the
4279  * parent of @p dev.
4280  */
4281 int
4282 bus_deactivate_resource(device_t dev, int type, int rid, struct resource *r)
4283 {
4284         if (dev->parent == NULL)
4285                 return (EINVAL);
4286         return (BUS_DEACTIVATE_RESOURCE(dev->parent, dev, type, rid, r));
4287 }
4288
4289 /**
4290  * @brief Wrapper function for BUS_RELEASE_RESOURCE().
4291  *
4292  * This function simply calls the BUS_RELEASE_RESOURCE() method of the
4293  * parent of @p dev.
4294  */
4295 int
4296 bus_release_resource(device_t dev, int type, int rid, struct resource *r)
4297 {
4298         if (dev->parent == NULL)
4299                 return (EINVAL);
4300         return (BUS_RELEASE_RESOURCE(dev->parent, dev, type, rid, r));
4301 }
4302
4303 /**
4304  * @brief Wrapper function for BUS_SETUP_INTR().
4305  *
4306  * This function simply calls the BUS_SETUP_INTR() method of the
4307  * parent of @p dev.
4308  */
4309 int
4310 bus_setup_intr(device_t dev, struct resource *r, int flags,
4311     driver_filter_t filter, driver_intr_t handler, void *arg, void **cookiep)
4312 {
4313         int error;
4314
4315         if (dev->parent == NULL)
4316                 return (EINVAL);
4317         error = BUS_SETUP_INTR(dev->parent, dev, r, flags, filter, handler,
4318             arg, cookiep);
4319         if (error != 0)
4320                 return (error);
4321         if (handler != NULL && !(flags & INTR_MPSAFE))
4322                 device_printf(dev, "[GIANT-LOCKED]\n");
4323         return (0);
4324 }
4325
4326 /**
4327  * @brief Wrapper function for BUS_TEARDOWN_INTR().
4328  *
4329  * This function simply calls the BUS_TEARDOWN_INTR() method of the
4330  * parent of @p dev.
4331  */
4332 int
4333 bus_teardown_intr(device_t dev, struct resource *r, void *cookie)
4334 {
4335         if (dev->parent == NULL)
4336                 return (EINVAL);
4337         return (BUS_TEARDOWN_INTR(dev->parent, dev, r, cookie));
4338 }
4339
4340 /**
4341  * @brief Wrapper function for BUS_BIND_INTR().
4342  *
4343  * This function simply calls the BUS_BIND_INTR() method of the
4344  * parent of @p dev.
4345  */
4346 int
4347 bus_bind_intr(device_t dev, struct resource *r, int cpu)
4348 {
4349         if (dev->parent == NULL)
4350                 return (EINVAL);
4351         return (BUS_BIND_INTR(dev->parent, dev, r, cpu));
4352 }
4353
4354 /**
4355  * @brief Wrapper function for BUS_DESCRIBE_INTR().
4356  *
4357  * This function first formats the requested description into a
4358  * temporary buffer and then calls the BUS_DESCRIBE_INTR() method of
4359  * the parent of @p dev.
4360  */
4361 int
4362 bus_describe_intr(device_t dev, struct resource *irq, void *cookie,
4363     const char *fmt, ...)
4364 {
4365         va_list ap;
4366         char descr[MAXCOMLEN + 1];
4367
4368         if (dev->parent == NULL)
4369                 return (EINVAL);
4370         va_start(ap, fmt);
4371         vsnprintf(descr, sizeof(descr), fmt, ap);
4372         va_end(ap);
4373         return (BUS_DESCRIBE_INTR(dev->parent, dev, irq, cookie, descr));
4374 }
4375
4376 /**
4377  * @brief Wrapper function for BUS_SET_RESOURCE().
4378  *
4379  * This function simply calls the BUS_SET_RESOURCE() method of the
4380  * parent of @p dev.
4381  */
4382 int
4383 bus_set_resource(device_t dev, int type, int rid,
4384     u_long start, u_long count)
4385 {
4386         return (BUS_SET_RESOURCE(device_get_parent(dev), dev, type, rid,
4387             start, count));
4388 }
4389
4390 /**
4391  * @brief Wrapper function for BUS_GET_RESOURCE().
4392  *
4393  * This function simply calls the BUS_GET_RESOURCE() method of the
4394  * parent of @p dev.
4395  */
4396 int
4397 bus_get_resource(device_t dev, int type, int rid,
4398     u_long *startp, u_long *countp)
4399 {
4400         return (BUS_GET_RESOURCE(device_get_parent(dev), dev, type, rid,
4401             startp, countp));
4402 }
4403
4404 /**
4405  * @brief Wrapper function for BUS_GET_RESOURCE().
4406  *
4407  * This function simply calls the BUS_GET_RESOURCE() method of the
4408  * parent of @p dev and returns the start value.
4409  */
4410 u_long
4411 bus_get_resource_start(device_t dev, int type, int rid)
4412 {
4413         u_long start, count;
4414         int error;
4415
4416         error = BUS_GET_RESOURCE(device_get_parent(dev), dev, type, rid,
4417             &start, &count);
4418         if (error)
4419                 return (0);
4420         return (start);
4421 }
4422
4423 /**
4424  * @brief Wrapper function for BUS_GET_RESOURCE().
4425  *
4426  * This function simply calls the BUS_GET_RESOURCE() method of the
4427  * parent of @p dev and returns the count value.
4428  */
4429 u_long
4430 bus_get_resource_count(device_t dev, int type, int rid)
4431 {
4432         u_long start, count;
4433         int error;
4434
4435         error = BUS_GET_RESOURCE(device_get_parent(dev), dev, type, rid,
4436             &start, &count);
4437         if (error)
4438                 return (0);
4439         return (count);
4440 }
4441
4442 /**
4443  * @brief Wrapper function for BUS_DELETE_RESOURCE().
4444  *
4445  * This function simply calls the BUS_DELETE_RESOURCE() method of the
4446  * parent of @p dev.
4447  */
4448 void
4449 bus_delete_resource(device_t dev, int type, int rid)
4450 {
4451         BUS_DELETE_RESOURCE(device_get_parent(dev), dev, type, rid);
4452 }
4453
4454 /**
4455  * @brief Wrapper function for BUS_CHILD_PRESENT().
4456  *
4457  * This function simply calls the BUS_CHILD_PRESENT() method of the
4458  * parent of @p dev.
4459  */
4460 int
4461 bus_child_present(device_t child)
4462 {
4463         return (BUS_CHILD_PRESENT(device_get_parent(child), child));
4464 }
4465
4466 /**
4467  * @brief Wrapper function for BUS_CHILD_PNPINFO_STR().
4468  *
4469  * This function simply calls the BUS_CHILD_PNPINFO_STR() method of the
4470  * parent of @p dev.
4471  */
4472 int
4473 bus_child_pnpinfo_str(device_t child, char *buf, size_t buflen)
4474 {
4475         device_t parent;
4476
4477         parent = device_get_parent(child);
4478         if (parent == NULL) {
4479                 *buf = '\0';
4480                 return (0);
4481         }
4482         return (BUS_CHILD_PNPINFO_STR(parent, child, buf, buflen));
4483 }
4484
4485 /**
4486  * @brief Wrapper function for BUS_CHILD_LOCATION_STR().
4487  *
4488  * This function simply calls the BUS_CHILD_LOCATION_STR() method of the
4489  * parent of @p dev.
4490  */
4491 int
4492 bus_child_location_str(device_t child, char *buf, size_t buflen)
4493 {
4494         device_t parent;
4495
4496         parent = device_get_parent(child);
4497         if (parent == NULL) {
4498                 *buf = '\0';
4499                 return (0);
4500         }
4501         return (BUS_CHILD_LOCATION_STR(parent, child, buf, buflen));
4502 }
4503
4504 /**
4505  * @brief Wrapper function for BUS_GET_DMA_TAG().
4506  *
4507  * This function simply calls the BUS_GET_DMA_TAG() method of the
4508  * parent of @p dev.
4509  */
4510 bus_dma_tag_t
4511 bus_get_dma_tag(device_t dev)
4512 {
4513         device_t parent;
4514
4515         parent = device_get_parent(dev);
4516         if (parent == NULL)
4517                 return (NULL);
4518         return (BUS_GET_DMA_TAG(parent, dev));
4519 }
4520
4521 /**
4522  * @brief Wrapper function for BUS_GET_DOMAIN().
4523  *
4524  * This function simply calls the BUS_GET_DOMAIN() method of the
4525  * parent of @p dev.
4526  */
4527 int
4528 bus_get_domain(device_t dev, int *domain)
4529 {
4530         return (BUS_GET_DOMAIN(device_get_parent(dev), dev, domain));
4531 }
4532
4533 /* Resume all devices and then notify userland that we're up again. */
4534 static int
4535 root_resume(device_t dev)
4536 {
4537         int error;
4538
4539         error = bus_generic_resume(dev);
4540         if (error == 0)
4541                 devctl_notify("kern", "power", "resume", NULL);
4542         return (error);
4543 }
4544
4545 static int
4546 root_print_child(device_t dev, device_t child)
4547 {
4548         int     retval = 0;
4549
4550         retval += bus_print_child_header(dev, child);
4551         retval += printf("\n");
4552
4553         return (retval);
4554 }
4555
4556 static int
4557 root_setup_intr(device_t dev, device_t child, struct resource *irq, int flags,
4558     driver_filter_t *filter, driver_intr_t *intr, void *arg, void **cookiep)
4559 {
4560         /*
4561          * If an interrupt mapping gets to here something bad has happened.
4562          */
4563         panic("root_setup_intr");
4564 }
4565
4566 /*
4567  * If we get here, assume that the device is permanant and really is
4568  * present in the system.  Removable bus drivers are expected to intercept
4569  * this call long before it gets here.  We return -1 so that drivers that
4570  * really care can check vs -1 or some ERRNO returned higher in the food
4571  * chain.
4572  */
4573 static int
4574 root_child_present(device_t dev, device_t child)
4575 {
4576         return (-1);
4577 }
4578
4579 static kobj_method_t root_methods[] = {
4580         /* Device interface */
4581         KOBJMETHOD(device_shutdown,     bus_generic_shutdown),
4582         KOBJMETHOD(device_suspend,      bus_generic_suspend),
4583         KOBJMETHOD(device_resume,       root_resume),
4584
4585         /* Bus interface */
4586         KOBJMETHOD(bus_print_child,     root_print_child),
4587         KOBJMETHOD(bus_read_ivar,       bus_generic_read_ivar),
4588         KOBJMETHOD(bus_write_ivar,      bus_generic_write_ivar),
4589         KOBJMETHOD(bus_setup_intr,      root_setup_intr),
4590         KOBJMETHOD(bus_child_present,   root_child_present),
4591
4592         KOBJMETHOD_END
4593 };
4594
4595 static driver_t root_driver = {
4596         "root",
4597         root_methods,
4598         1,                      /* no softc */
4599 };
4600
4601 device_t        root_bus;
4602 devclass_t      root_devclass;
4603
4604 static int
4605 root_bus_module_handler(module_t mod, int what, void* arg)
4606 {
4607         switch (what) {
4608         case MOD_LOAD:
4609                 TAILQ_INIT(&bus_data_devices);
4610                 kobj_class_compile((kobj_class_t) &root_driver);
4611                 root_bus = make_device(NULL, "root", 0);
4612                 root_bus->desc = "System root bus";
4613                 kobj_init((kobj_t) root_bus, (kobj_class_t) &root_driver);
4614                 root_bus->driver = &root_driver;
4615                 root_bus->state = DS_ATTACHED;
4616                 root_devclass = devclass_find_internal("root", NULL, FALSE);
4617                 devinit();
4618                 return (0);
4619
4620         case MOD_SHUTDOWN:
4621                 device_shutdown(root_bus);
4622                 return (0);
4623         default:
4624                 return (EOPNOTSUPP);
4625         }
4626
4627         return (0);
4628 }
4629
4630 static moduledata_t root_bus_mod = {
4631         "rootbus",
4632         root_bus_module_handler,
4633         NULL
4634 };
4635 DECLARE_MODULE(rootbus, root_bus_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST);
4636
4637 /**
4638  * @brief Automatically configure devices
4639  *
4640  * This function begins the autoconfiguration process by calling
4641  * device_probe_and_attach() for each child of the @c root0 device.
4642  */ 
4643 void
4644 root_bus_configure(void)
4645 {
4646
4647         PDEBUG(("."));
4648
4649         /* Eventually this will be split up, but this is sufficient for now. */
4650         bus_set_pass(BUS_PASS_DEFAULT);
4651 }
4652
4653 /**
4654  * @brief Module handler for registering device drivers
4655  *
4656  * This module handler is used to automatically register device
4657  * drivers when modules are loaded. If @p what is MOD_LOAD, it calls
4658  * devclass_add_driver() for the driver described by the
4659  * driver_module_data structure pointed to by @p arg
4660  */
4661 int
4662 driver_module_handler(module_t mod, int what, void *arg)
4663 {
4664         struct driver_module_data *dmd;
4665         devclass_t bus_devclass;
4666         kobj_class_t driver;
4667         int error, pass;
4668
4669         dmd = (struct driver_module_data *)arg;
4670         bus_devclass = devclass_find_internal(dmd->dmd_busname, NULL, TRUE);
4671         error = 0;
4672
4673         switch (what) {
4674         case MOD_LOAD:
4675                 if (dmd->dmd_chainevh)
4676                         error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg);
4677
4678                 pass = dmd->dmd_pass;
4679                 driver = dmd->dmd_driver;
4680                 PDEBUG(("Loading module: driver %s on bus %s (pass %d)",
4681                     DRIVERNAME(driver), dmd->dmd_busname, pass));
4682                 error = devclass_add_driver(bus_devclass, driver, pass,
4683                     dmd->dmd_devclass);
4684                 break;
4685
4686         case MOD_UNLOAD:
4687                 PDEBUG(("Unloading module: driver %s from bus %s",
4688                     DRIVERNAME(dmd->dmd_driver),
4689                     dmd->dmd_busname));
4690                 error = devclass_delete_driver(bus_devclass,
4691                     dmd->dmd_driver);
4692
4693                 if (!error && dmd->dmd_chainevh)
4694                         error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg);
4695                 break;
4696         case MOD_QUIESCE:
4697                 PDEBUG(("Quiesce module: driver %s from bus %s",
4698                     DRIVERNAME(dmd->dmd_driver),
4699                     dmd->dmd_busname));
4700                 error = devclass_quiesce_driver(bus_devclass,
4701                     dmd->dmd_driver);
4702
4703                 if (!error && dmd->dmd_chainevh)
4704                         error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg);
4705                 break;
4706         default:
4707                 error = EOPNOTSUPP;
4708                 break;
4709         }
4710
4711         return (error);
4712 }
4713
4714 /**
4715  * @brief Enumerate all hinted devices for this bus.
4716  *
4717  * Walks through the hints for this bus and calls the bus_hinted_child
4718  * routine for each one it fines.  It searches first for the specific
4719  * bus that's being probed for hinted children (eg isa0), and then for
4720  * generic children (eg isa).
4721  *
4722  * @param       dev     bus device to enumerate
4723  */
4724 void
4725 bus_enumerate_hinted_children(device_t bus)
4726 {
4727         int i;
4728         const char *dname, *busname;
4729         int dunit;
4730
4731         /*
4732          * enumerate all devices on the specific bus
4733          */
4734         busname = device_get_nameunit(bus);
4735         i = 0;
4736         while (resource_find_match(&i, &dname, &dunit, "at", busname) == 0)
4737                 BUS_HINTED_CHILD(bus, dname, dunit);
4738
4739         /*
4740          * and all the generic ones.
4741          */
4742         busname = device_get_name(bus);
4743         i = 0;
4744         while (resource_find_match(&i, &dname, &dunit, "at", busname) == 0)
4745                 BUS_HINTED_CHILD(bus, dname, dunit);
4746 }
4747
4748 #ifdef BUS_DEBUG
4749
4750 /* the _short versions avoid iteration by not calling anything that prints
4751  * more than oneliners. I love oneliners.
4752  */
4753
4754 static void
4755 print_device_short(device_t dev, int indent)
4756 {
4757         if (!dev)
4758                 return;
4759
4760         indentprintf(("device %d: <%s> %sparent,%schildren,%s%s%s%s%s,%sivars,%ssoftc,busy=%d\n",
4761             dev->unit, dev->desc,
4762             (dev->parent? "":"no "),
4763             (TAILQ_EMPTY(&dev->children)? "no ":""),
4764             (dev->flags&DF_ENABLED? "enabled,":"disabled,"),
4765             (dev->flags&DF_FIXEDCLASS? "fixed,":""),
4766             (dev->flags&DF_WILDCARD? "wildcard,":""),
4767             (dev->flags&DF_DESCMALLOCED? "descmalloced,":""),
4768             (dev->flags&DF_REBID? "rebiddable,":""),
4769             (dev->ivars? "":"no "),
4770             (dev->softc? "":"no "),
4771             dev->busy));
4772 }
4773
4774 static void
4775 print_device(device_t dev, int indent)
4776 {
4777         if (!dev)
4778                 return;
4779
4780         print_device_short(dev, indent);
4781
4782         indentprintf(("Parent:\n"));
4783         print_device_short(dev->parent, indent+1);
4784         indentprintf(("Driver:\n"));
4785         print_driver_short(dev->driver, indent+1);
4786         indentprintf(("Devclass:\n"));
4787         print_devclass_short(dev->devclass, indent+1);
4788 }
4789
4790 void
4791 print_device_tree_short(device_t dev, int indent)
4792 /* print the device and all its children (indented) */
4793 {
4794         device_t child;
4795
4796         if (!dev)
4797                 return;
4798
4799         print_device_short(dev, indent);
4800
4801         TAILQ_FOREACH(child, &dev->children, link) {
4802                 print_device_tree_short(child, indent+1);
4803         }
4804 }
4805
4806 void
4807 print_device_tree(device_t dev, int indent)
4808 /* print the device and all its children (indented) */
4809 {
4810         device_t child;
4811
4812         if (!dev)
4813                 return;
4814
4815         print_device(dev, indent);
4816
4817         TAILQ_FOREACH(child, &dev->children, link) {
4818                 print_device_tree(child, indent+1);
4819         }
4820 }
4821
4822 static void
4823 print_driver_short(driver_t *driver, int indent)
4824 {
4825         if (!driver)
4826                 return;
4827
4828         indentprintf(("driver %s: softc size = %zd\n",
4829             driver->name, driver->size));
4830 }
4831
4832 static void
4833 print_driver(driver_t *driver, int indent)
4834 {
4835         if (!driver)
4836                 return;
4837
4838         print_driver_short(driver, indent);
4839 }
4840
4841 static void
4842 print_driver_list(driver_list_t drivers, int indent)
4843 {
4844         driverlink_t driver;
4845
4846         TAILQ_FOREACH(driver, &drivers, link) {
4847                 print_driver(driver->driver, indent);
4848         }
4849 }
4850
4851 static void
4852 print_devclass_short(devclass_t dc, int indent)
4853 {
4854         if ( !dc )
4855                 return;
4856
4857         indentprintf(("devclass %s: max units = %d\n", dc->name, dc->maxunit));
4858 }
4859
4860 static void
4861 print_devclass(devclass_t dc, int indent)
4862 {
4863         int i;
4864
4865         if ( !dc )
4866                 return;
4867
4868         print_devclass_short(dc, indent);
4869         indentprintf(("Drivers:\n"));
4870         print_driver_list(dc->drivers, indent+1);
4871
4872         indentprintf(("Devices:\n"));
4873         for (i = 0; i < dc->maxunit; i++)
4874                 if (dc->devices[i])
4875                         print_device(dc->devices[i], indent+1);
4876 }
4877
4878 void
4879 print_devclass_list_short(void)
4880 {
4881         devclass_t dc;
4882
4883         printf("Short listing of devclasses, drivers & devices:\n");
4884         TAILQ_FOREACH(dc, &devclasses, link) {
4885                 print_devclass_short(dc, 0);
4886         }
4887 }
4888
4889 void
4890 print_devclass_list(void)
4891 {
4892         devclass_t dc;
4893
4894         printf("Full listing of devclasses, drivers & devices:\n");
4895         TAILQ_FOREACH(dc, &devclasses, link) {
4896                 print_devclass(dc, 0);
4897         }
4898 }
4899
4900 #endif
4901
4902 /*
4903  * User-space access to the device tree.
4904  *
4905  * We implement a small set of nodes:
4906  *
4907  * hw.bus                       Single integer read method to obtain the
4908  *                              current generation count.
4909  * hw.bus.devices               Reads the entire device tree in flat space.
4910  * hw.bus.rman                  Resource manager interface
4911  *
4912  * We might like to add the ability to scan devclasses and/or drivers to
4913  * determine what else is currently loaded/available.
4914  */
4915
4916 static int
4917 sysctl_bus(SYSCTL_HANDLER_ARGS)
4918 {
4919         struct u_businfo        ubus;
4920
4921         ubus.ub_version = BUS_USER_VERSION;
4922         ubus.ub_generation = bus_data_generation;
4923
4924         return (SYSCTL_OUT(req, &ubus, sizeof(ubus)));
4925 }
4926 SYSCTL_NODE(_hw_bus, OID_AUTO, info, CTLFLAG_RW, sysctl_bus,
4927     "bus-related data");
4928
4929 static int
4930 sysctl_devices(SYSCTL_HANDLER_ARGS)
4931 {
4932         int                     *name = (int *)arg1;
4933         u_int                   namelen = arg2;
4934         int                     index;
4935         struct device           *dev;
4936         struct u_device         udev;   /* XXX this is a bit big */
4937         int                     error;
4938
4939         if (namelen != 2)
4940                 return (EINVAL);
4941
4942         if (bus_data_generation_check(name[0]))
4943                 return (EINVAL);
4944
4945         index = name[1];
4946
4947         /*
4948          * Scan the list of devices, looking for the requested index.
4949          */
4950         TAILQ_FOREACH(dev, &bus_data_devices, devlink) {
4951                 if (index-- == 0)
4952                         break;
4953         }
4954         if (dev == NULL)
4955                 return (ENOENT);
4956
4957         /*
4958          * Populate the return array.
4959          */
4960         bzero(&udev, sizeof(udev));
4961         udev.dv_handle = (uintptr_t)dev;
4962         udev.dv_parent = (uintptr_t)dev->parent;
4963         if (dev->nameunit != NULL)
4964                 strlcpy(udev.dv_name, dev->nameunit, sizeof(udev.dv_name));
4965         if (dev->desc != NULL)
4966                 strlcpy(udev.dv_desc, dev->desc, sizeof(udev.dv_desc));
4967         if (dev->driver != NULL && dev->driver->name != NULL)
4968                 strlcpy(udev.dv_drivername, dev->driver->name,
4969                     sizeof(udev.dv_drivername));
4970         bus_child_pnpinfo_str(dev, udev.dv_pnpinfo, sizeof(udev.dv_pnpinfo));
4971         bus_child_location_str(dev, udev.dv_location, sizeof(udev.dv_location));
4972         udev.dv_devflags = dev->devflags;
4973         udev.dv_flags = dev->flags;
4974         udev.dv_state = dev->state;
4975         error = SYSCTL_OUT(req, &udev, sizeof(udev));
4976         return (error);
4977 }
4978
4979 SYSCTL_NODE(_hw_bus, OID_AUTO, devices, CTLFLAG_RD, sysctl_devices,
4980     "system device tree");
4981
4982 int
4983 bus_data_generation_check(int generation)
4984 {
4985         if (generation != bus_data_generation)
4986                 return (1);
4987
4988         /* XXX generate optimised lists here? */
4989         return (0);
4990 }
4991
4992 void
4993 bus_data_generation_update(void)
4994 {
4995         bus_data_generation++;
4996 }
4997
4998 int
4999 bus_free_resource(device_t dev, int type, struct resource *r)
5000 {
5001         if (r == NULL)
5002                 return (0);
5003         return (bus_release_resource(dev, type, rman_get_rid(r), r));
5004 }
5005
5006 /*
5007  * /dev/devctl2 implementation.  The existing /dev/devctl device has
5008  * implicit semantics on open, so it could not be reused for this.
5009  * Another option would be to call this /dev/bus?
5010  */
5011 static int
5012 find_device(struct devreq *req, device_t *devp)
5013 {
5014         device_t dev;
5015
5016         /*
5017          * First, ensure that the name is nul terminated.
5018          */
5019         if (memchr(req->dr_name, '\0', sizeof(req->dr_name)) == NULL)
5020                 return (EINVAL);
5021
5022         /*
5023          * Second, try to find an attached device whose name matches
5024          * 'name'.
5025          */
5026         TAILQ_FOREACH(dev, &bus_data_devices, devlink) {
5027                 if (dev->nameunit != NULL &&
5028                     strcmp(dev->nameunit, req->dr_name) == 0) {
5029                         *devp = dev;
5030                         return (0);
5031                 }
5032         }
5033
5034         /* Finally, give device enumerators a chance. */
5035         dev = NULL;
5036         EVENTHANDLER_INVOKE(dev_lookup, req->dr_name, &dev);
5037         if (dev == NULL)
5038                 return (ENOENT);
5039         *devp = dev;
5040         return (0);
5041 }
5042
5043 static bool
5044 driver_exists(struct device *bus, const char *driver)
5045 {
5046         devclass_t dc;
5047
5048         for (dc = bus->devclass; dc != NULL; dc = dc->parent) {
5049                 if (devclass_find_driver_internal(dc, driver) != NULL)
5050                         return (true);
5051         }
5052         return (false);
5053 }
5054
5055 static int
5056 devctl2_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int fflag,
5057     struct thread *td)
5058 {
5059         struct devreq *req;
5060         device_t dev;
5061         int error, old;
5062
5063         /* Locate the device to control. */
5064         mtx_lock(&Giant);
5065         req = (struct devreq *)data;
5066         switch (cmd) {
5067         case DEV_ATTACH:
5068         case DEV_DETACH:
5069         case DEV_ENABLE:
5070         case DEV_DISABLE:
5071         case DEV_SET_DRIVER:
5072                 error = priv_check(td, PRIV_DRIVER);
5073                 if (error == 0)
5074                         error = find_device(req, &dev);
5075                 break;
5076         default:
5077                 error = ENOTTY;
5078                 break;
5079         }
5080         if (error) {
5081                 mtx_unlock(&Giant);
5082                 return (error);
5083         }
5084
5085         /* Perform the requested operation. */
5086         switch (cmd) {
5087         case DEV_ATTACH:
5088                 if (device_is_attached(dev) && (dev->flags & DF_REBID) == 0)
5089                         error = EBUSY;
5090                 else if (!device_is_enabled(dev))
5091                         error = ENXIO;
5092                 else
5093                         error = device_probe_and_attach(dev);
5094                 break;
5095         case DEV_DETACH:
5096                 if (!device_is_attached(dev)) {
5097                         error = ENXIO;
5098                         break;
5099                 }
5100                 if (!(req->dr_flags & DEVF_FORCE_DETACH)) {
5101                         error = device_quiesce(dev);
5102                         if (error)
5103                                 break;
5104                 }
5105                 error = device_detach(dev);
5106                 break;
5107         case DEV_ENABLE:
5108                 if (device_is_enabled(dev)) {
5109                         error = EBUSY;
5110                         break;
5111                 }
5112
5113                 /*
5114                  * If the device has been probed but not attached (e.g.
5115                  * when it has been disabled by a loader hint), just
5116                  * attach the device rather than doing a full probe.
5117                  */
5118                 device_enable(dev);
5119                 if (device_is_alive(dev)) {
5120                         /*
5121                          * If the device was disabled via a hint, clear
5122                          * the hint.
5123                          */
5124                         if (resource_disabled(dev->driver->name, dev->unit))
5125                                 resource_unset_value(dev->driver->name,
5126                                     dev->unit, "disabled");
5127                         error = device_attach(dev);
5128                 } else
5129                         error = device_probe_and_attach(dev);
5130                 break;
5131         case DEV_DISABLE:
5132                 if (!device_is_enabled(dev)) {
5133                         error = ENXIO;
5134                         break;
5135                 }
5136
5137                 if (!(req->dr_flags & DEVF_FORCE_DETACH)) {
5138                         error = device_quiesce(dev);
5139                         if (error)
5140                                 break;
5141                 }
5142
5143                 /*
5144                  * Force DF_FIXEDCLASS on around detach to preserve
5145                  * the existing name.
5146                  */
5147                 old = dev->flags;
5148                 dev->flags |= DF_FIXEDCLASS;
5149                 error = device_detach(dev);
5150                 if (!(old & DF_FIXEDCLASS))
5151                         dev->flags &= ~DF_FIXEDCLASS;
5152                 if (error == 0)
5153                         device_disable(dev);
5154                 break;
5155         case DEV_SET_DRIVER: {
5156                 devclass_t dc;
5157                 char driver[128];
5158
5159                 error = copyinstr(req->dr_data, driver, sizeof(driver), NULL);
5160                 if (error)
5161                         break;
5162                 if (driver[0] == '\0') {
5163                         error = EINVAL;
5164                         break;
5165                 }
5166                 if (dev->devclass != NULL &&
5167                     strcmp(driver, dev->devclass->name) == 0)
5168                         /* XXX: Could possibly force DF_FIXEDCLASS on? */
5169                         break;
5170
5171                 /*
5172                  * Scan drivers for this device's bus looking for at
5173                  * least one matching driver.
5174                  */
5175                 if (dev->parent == NULL) {
5176                         error = EINVAL;
5177                         break;
5178                 }
5179                 if (!driver_exists(dev->parent, driver)) {
5180                         error = ENOENT;
5181                         break;
5182                 }
5183                 dc = devclass_create(driver);
5184                 if (dc == NULL) {
5185                         error = ENOMEM;
5186                         break;
5187                 }
5188
5189                 /* Detach device if necessary. */
5190                 if (device_is_attached(dev)) {
5191                         if (req->dr_flags & DEVF_SET_DRIVER_DETACH)
5192                                 error = device_detach(dev);
5193                         else
5194                                 error = EBUSY;
5195                         if (error)
5196                                 break;
5197                 }
5198
5199                 /* Clear any previously-fixed device class and unit. */
5200                 if (dev->flags & DF_FIXEDCLASS)
5201                         devclass_delete_device(dev->devclass, dev);
5202                 dev->flags |= DF_WILDCARD;
5203                 dev->unit = -1;
5204
5205                 /* Force the new device class. */
5206                 error = devclass_add_device(dc, dev);
5207                 if (error)
5208                         break;
5209                 dev->flags |= DF_FIXEDCLASS;
5210                 error = device_probe_and_attach(dev);
5211                 break;
5212         }
5213         }
5214         mtx_unlock(&Giant);
5215         return (error);
5216 }
5217
5218 static struct cdevsw devctl2_cdevsw = {
5219         .d_version =    D_VERSION,
5220         .d_ioctl =      devctl2_ioctl,
5221         .d_name =       "devctl2",
5222 };
5223
5224 static void
5225 devctl2_init(void)
5226 {
5227
5228         make_dev_credf(MAKEDEV_ETERNAL, &devctl2_cdevsw, 0, NULL,
5229             UID_ROOT, GID_WHEEL, 0600, "devctl2");
5230 }