Lines Matching defs:dc
202 static void print_devclass_short(devclass_t dc, int indent);
203 static void print_devclass(devclass_t dc, int indent);
236 devclass_t dc = (devclass_t)arg1;
241 value = dc->parent ? dc->parent->name : "";
250 devclass_sysctl_init(devclass_t dc)
252 if (dc->sysctl_tree != NULL)
254 sysctl_ctx_init(&dc->sysctl_ctx);
255 dc->sysctl_tree = SYSCTL_ADD_NODE(&dc->sysctl_ctx,
256 SYSCTL_STATIC_CHILDREN(_dev), OID_AUTO, dc->name,
258 SYSCTL_ADD_PROC(&dc->sysctl_ctx, SYSCTL_CHILDREN(dc->sysctl_tree),
261 dc, DEVCLASS_SYSCTL_PARENT, devclass_sysctl_handler, "A",
333 devclass_t dc = dev->devclass;
338 devclass_sysctl_init(dc);
341 SYSCTL_CHILDREN(dc->sysctl_tree), OID_AUTO,
342 dev->nameunit + strlen(dc->name),
382 devclass_t dc = dev->devclass;
386 sysctl_rename_oid(dev->sysctl_tree, dev->nameunit + strlen(dc->name));
561 devclass_t dc;
567 TAILQ_FOREACH(dc, &devclasses, link) {
568 if (!strcmp(dc->name, classname))
572 if (create && !dc) {
574 dc = malloc(sizeof(struct devclass) + strlen(classname) + 1,
576 if (!dc)
578 dc->parent = NULL;
579 dc->name = (char*) (dc + 1);
580 strcpy(dc->name, classname);
581 TAILQ_INIT(&dc->drivers);
582 TAILQ_INSERT_TAIL(&devclasses, dc, link);
595 if (parentname && dc && !dc->parent &&
597 dc->parent = devclass_find_internal(parentname, NULL, TRUE);
598 dc->parent->flags |= DC_HAS_CHILDREN;
601 return (dc);
637 * notification of all the children classes of dc, as well as dc.
646 * @param dc the devclass to edit
650 devclass_driver_added(devclass_t dc, driver_t *driver)
658 for (i = 0; i < dc->maxunit; i++)
659 if (dc->devices[i] && device_is_attached(dc->devices[i]))
660 BUS_DRIVER_ADDED(dc->devices[i], driver);
670 if (!(dc->flags & DC_HAS_CHILDREN))
672 parent = dc;
673 TAILQ_FOREACH(dc, &devclasses, link) {
674 if (dc->parent == parent)
675 devclass_driver_added(dc, driver);
695 * @param dc the devclass to edit
699 devclass_add_driver(devclass_t dc, driver_t *driver, int pass, devclass_t *dcp)
739 TAILQ_INSERT_TAIL(&dc->drivers, dl, link);
747 devclass_driver_added(dc, driver);
769 * @param dc the devclass of the driver being deleted
773 devclass_driver_deleted(devclass_t busclass, devclass_t dc, driver_t *driver)
792 for (i = 0; i < dc->maxunit; i++) {
793 if (dc->devices[i]) {
794 dev = dc->devices[i];
822 error = devclass_driver_deleted(busclass, dc, driver);
841 * @param dc the devclass to edit
847 devclass_t dc = devclass_find(driver->name);
853 if (!dc)
870 error = devclass_driver_deleted(busclass, dc, driver);
896 * @param dc the devclass to edit
902 devclass_t dc = devclass_find(driver->name);
910 if (!dc)
937 for (i = 0; i < dc->maxunit; i++) {
938 if (dc->devices[i]) {
939 dev = dc->devices[i];
955 devclass_find_driver_internal(devclass_t dc, const char *classname)
959 PDEBUG(("%s in devclass %s", classname, DEVCLANAME(dc)));
961 TAILQ_FOREACH(dl, &dc->drivers, link) {
974 devclass_get_name(devclass_t dc)
976 return (dc->name);
982 * @param dc the devclass to search
989 devclass_get_device(devclass_t dc, int unit)
991 if (dc == NULL || unit < 0 || unit >= dc->maxunit)
993 return (dc->devices[unit]);
999 * @param dc the devclass to search
1007 devclass_get_softc(devclass_t dc, int unit)
1011 dev = devclass_get_device(dc, unit);
1026 * @param dc the devclass to examine
1035 devclass_get_devices(devclass_t dc, device_t **devlistp, int *devcountp)
1040 count = devclass_get_count(dc);
1046 for (i = 0; i < dc->maxunit; i++) {
1047 if (dc->devices[i]) {
1048 list[count] = dc->devices[i];
1067 * @param dc the devclass to examine
1076 devclass_get_drivers(devclass_t dc, driver_t ***listp, int *countp)
1083 TAILQ_FOREACH(dl, &dc->drivers, link)
1090 TAILQ_FOREACH(dl, &dc->drivers, link) {
1103 * @param dc the devclass to examine
1106 devclass_get_count(devclass_t dc)
1111 for (i = 0; i < dc->maxunit; i++)
1112 if (dc->devices[i])
1121 * @p dc is NULL, @c -1 is returned to indicate that not even the devclass has
1124 * @param dc the devclass to examine
1127 devclass_get_maxunit(devclass_t dc)
1129 if (dc == NULL)
1131 return (dc->maxunit);
1141 * @param dc the devclass to examine
1145 devclass_find_free_unit(devclass_t dc, int unit)
1147 if (dc == NULL)
1149 while (unit < dc->maxunit && dc->devices[unit] != NULL)
1160 * @param dc the devclass to edit
1164 devclass_set_parent(devclass_t dc, devclass_t pdc)
1166 dc->parent = pdc;
1172 * @param dc the devclass to examine
1175 devclass_get_parent(devclass_t dc)
1177 return (dc->parent);
1181 devclass_get_sysctl_ctx(devclass_t dc)
1183 return (&dc->sysctl_ctx);
1187 devclass_get_sysctl_tree(devclass_t dc)
1189 return (dc->sysctl_tree);
1199 * @param dc the devclass to allocate from
1209 devclass_alloc_unit(devclass_t dc, device_t dev, int *unitp)
1214 PDEBUG(("unit %d in devclass %s", unit, DEVCLANAME(dc)));
1218 BUS_HINT_DEVICE_UNIT(device_get_parent(dev), dev, dc->name,
1227 if (unit < dc->maxunit && dc->devices[unit] != NULL) {
1230 dc->name, dc->name, *unitp);
1238 if (unit < dc->maxunit && dc->devices[unit] != NULL)
1242 if (resource_string_value(dc->name, unit, "at", &s) ==
1263 if (unit >= dc->maxunit) {
1267 dc->devices = reallocf(dc->devices,
1268 newsize * sizeof(*dc->devices), M_BUS, M_WAITOK);
1269 memset(dc->devices + dc->maxunit, 0,
1270 sizeof(device_t) * (newsize - dc->maxunit));
1271 dc->maxunit = newsize;
1273 PDEBUG(("now: unit %d in devclass %s", unit, DEVCLANAME(dc)));
1288 * @param dc the devclass to add to
1297 devclass_add_device(devclass_t dc, device_t dev)
1301 PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
1303 buflen = snprintf(NULL, 0, "%s%d$", dc->name, INT_MAX);
1310 if ((error = devclass_alloc_unit(dc, dev, &dev->unit)) != 0) {
1315 dc->devices[dev->unit] = dev;
1316 dev->devclass = dc;
1317 snprintf(dev->nameunit, buflen, "%s%d", dc->name, dev->unit);
1329 * @param dc the devclass to delete from
1335 devclass_delete_device(devclass_t dc, device_t dev)
1337 if (!dc || !dev)
1340 PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
1342 if (dev->devclass != dc || dc->devices[dev->unit] != dev)
1344 dc->devices[dev->unit] = NULL;
1370 devclass_t dc;
1375 dc = devclass_find_internal(name, NULL, TRUE);
1376 if (!dc) {
1382 dc = NULL;
1405 if (devclass_add_device(dc, dev)) {
1621 devclass_t dc;
1624 dc = devclass_find(classname);
1625 if (!dc)
1629 child = devclass_get_device(dc, unit);
1633 for (unit = 0; unit < devclass_get_maxunit(dc); unit++) {
1634 child = devclass_get_device(dc, unit);
1646 first_matching_driver(devclass_t dc, device_t dev)
1649 return (devclass_find_driver_internal(dc, dev->devclass->name));
1650 return (TAILQ_FIRST(&dc->drivers));
1657 next_matching_driver(devclass_t dc, device_t dev, driverlink_t last)
1675 devclass_t dc;
1684 dc = dev->devclass;
1685 if (!dc)
1694 for (; dc; dc = dc->parent) {
1695 for (dl = first_matching_driver(dc, child);
1697 dl = next_matching_driver(dc, child, dl)) {
2389 devclass_t dc;
2403 dc = devclass_find_internal(classname, NULL, TRUE);
2404 if (!dc)
2407 error = devclass_add_device(dc, dev);
2768 devclass_t dc;
2773 dc = device_get_devclass(dev);
2774 if (unit < dc->maxunit && dc->devices[unit])
2776 err = devclass_delete_device(dc, dev);
2780 err = devclass_add_device(dc, dev);
3428 devclass_t dc = dev->devclass;
3431 TAILQ_FOREACH(dl, &dc->drivers, link) {
3913 devclass_t dc;
3916 dc = dev->devclass;
3917 TAILQ_FOREACH(dl, &dc->drivers, link) {
5457 print_devclass_short(devclass_t dc, int indent)
5459 if ( !dc )
5462 indentprintf(("devclass %s: max units = %d\n", dc->name, dc->maxunit));
5466 print_devclass(devclass_t dc, int indent)
5470 if ( !dc )
5473 print_devclass_short(dc, indent);
5475 print_driver_list(dc->drivers, indent+1);
5478 for (i = 0; i < dc->maxunit; i++)
5479 if (dc->devices[i])
5480 print_device(dc->devices[i], indent+1);
5486 devclass_t dc;
5489 TAILQ_FOREACH(dc, &devclasses, link) {
5490 print_devclass_short(dc, 0);
5497 devclass_t dc;
5500 TAILQ_FOREACH(dc, &devclasses, link) {
5501 print_devclass(dc, 0);
5673 devclass_t dc;
5675 for (dc = bus->devclass; dc != NULL; dc = dc->parent) {
5676 if (devclass_find_driver_internal(dc, driver) != NULL)
5700 devclass_t dc;
5710 TAILQ_FOREACH(dc, &devclasses, link) {
5711 TAILQ_FOREACH(dl, &dc->drivers, link) {
5713 devclass_driver_added(dc, dl->driver);
5888 devclass_t dc;
5915 dc = devclass_create(driver);
5916 if (dc == NULL) {
5938 error = devclass_add_device(dc, dev);