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