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