Lines Matching refs:dc
132 static void print_devclass_short(devclass_t dc, int indent);
133 static void print_devclass(devclass_t dc, int indent);
290 devclass_t dc;
296 TAILQ_FOREACH(dc, &devclasses, link) {
297 if (!strcmp(dc->name, classname))
301 if (create && !dc) {
302 dc = bsd_malloc(sizeof(struct devclass) + strlen(classname) + 1,
304 if (!dc)
306 dc->parent = NULL;
307 dc->name = (char*) (dc + 1);
308 if (strcpy_s(dc->name, strlen(classname) + 1, classname) != EOK) {
309 bsd_free(dc, M_BUS);
312 TAILQ_INIT(&dc->drivers);
313 TAILQ_INSERT_TAIL(&devclasses, dc, link);
315 PDEBUG(("create dc %p, %s", dc, classname));
327 if (parentname && dc && !dc->parent &&
329 dc->parent = devclass_find_internal(parentname, NULL, TRUE);
330 if (dc->parent == NULL) {
333 dc->parent->flags = (unsigned int)dc->parent->flags | DC_HAS_CHILDREN;
336 PDEBUG(("found dc %p, %s", dc, classname));
337 return (dc);
373 * notification of all the children classes of dc, as well as dc.
382 * @param dc the devclass to edit
386 devclass_driver_added(devclass_t dc, driver_t *driver)
394 for (i = 0; i < dc->maxunit; i++)
395 if (dc->devices[i] && device_is_attached(dc->devices[i]))
396 BUS_DRIVER_ADDED(dc->devices[i], driver);
406 if (!((unsigned int)dc->flags & DC_HAS_CHILDREN))
408 parent = dc;
409 TAILQ_FOREACH(dc, &devclasses, link) {
410 if (dc->parent == parent)
411 devclass_driver_added(dc, driver);
423 * @param dc the devclass to edit
427 devclass_add_driver(devclass_t dc, driver_t *driver, int pass, devclass_t *dcp)
464 TAILQ_INSERT_TAIL(&dc->drivers, dl, link);
469 devclass_driver_added(dc, driver);
491 * @param dc the devclass of the driver being deleted
495 devclass_driver_deleted(devclass_t busclass, devclass_t dc, driver_t *driver)
511 for (i = 0; i < dc->maxunit; i++) {
512 if (dc->devices[i]) {
513 dev = dc->devices[i];
538 error = devclass_driver_deleted(busclass, dc, driver);
557 * @param dc the devclass to edit
563 devclass_t dc = devclass_find(driver->name);
569 if (!dc)
586 error = devclass_driver_deleted(busclass, dc, driver);
612 * @param dc the devclass to edit
618 devclass_t dc = devclass_find(driver->name);
626 if (!dc)
653 for (i = 0; i < dc->maxunit; i++) {
654 if (dc->devices[i]) {
655 dev = dc->devices[i];
671 devclass_find_driver_internal(devclass_t dc, const char *classname)
675 PDEBUG(("%s in devclass %s", classname, DEVCLANAME(dc)));
677 TAILQ_FOREACH(dl, &dc->drivers, link) {
690 devclass_get_name(devclass_t dc)
692 return (dc->name);
698 * @param dc the devclass to search
705 devclass_get_device(devclass_t dc, int unit)
707 if (dc == NULL || unit < 0 || unit >= dc->maxunit)
709 return (dc->devices[unit]);
715 * @param dc the devclass to search
723 devclass_get_softc(devclass_t dc, int unit)
727 dev = devclass_get_device(dc, unit);
742 * @param dc the devclass to examine
751 devclass_get_devices(devclass_t dc, device_t **devlistp, int *devcountp)
756 count = devclass_get_count(dc);
762 for (i = 0; i < dc->maxunit; i++) {
763 if (dc->devices[i]) {
764 list[count] = dc->devices[i];
783 * @param dc the devclass to examine
792 devclass_get_drivers(devclass_t dc, driver_t ***listp, int *countp)
799 TAILQ_FOREACH(dl, &dc->drivers, link)
806 TAILQ_FOREACH(dl, &dc->drivers, link) {
819 * @param dc the devclass to examine
822 devclass_get_count(devclass_t dc)
827 for (i = 0; i < dc->maxunit; i++)
828 if (dc->devices[i])
840 * @param dc the devclass to examine
843 devclass_get_maxunit(devclass_t dc)
845 if (dc == NULL)
847 return (dc->maxunit);
856 * @param dc the devclass to examine
860 devclass_find_free_unit(devclass_t dc, int unit)
862 if (dc == NULL)
864 while (unit < dc->maxunit && dc->devices[unit] != NULL)
875 * @param dc the devclass to edit
879 devclass_set_parent(devclass_t dc, devclass_t pdc)
881 dc->parent = pdc;
887 * @param dc the devclass to examine
890 devclass_get_parent(devclass_t dc)
892 return (dc->parent);
902 * @param dc the devclass to allocate from
911 devclass_alloc_unit(devclass_t dc, device_t dev, int *unitp)
915 PDEBUG(("unit %d in devclass %s", unit, DEVCLANAME(dc)));
919 BUS_HINT_DEVICE_UNIT(device_get_parent(dev), dev, dc->name, &unit);
924 if (unit >= 0 && unit < dc->maxunit && dc->devices[unit] != NULL) {
926 printf("%s: %s%d already exists; skipping it\n", dc->name, dc->name, *unitp);
934 if (unit < dc->maxunit && dc->devices[unit] != NULL)
940 PDEBUG(("mid: unit %d in devclass %s", unit, DEVCLANAME(dc)));
946 if (unit >= dc->maxunit) {
950 oldlist = dc->devices;
956 PDEBUG(("start memcpy, size %d", sizeof(device_t) * dc->maxunit));
958 (void)memcpy_s(newlist, sizeof(device_t) * dc->maxunit, oldlist, sizeof(device_t) * dc->maxunit);
959 PDEBUG(("start memset, maxunit %d, size %d", dc->maxunit, sizeof(device_t) * (newsize - dc->maxunit)));
960 (void)memset_s(newlist + dc->maxunit, sizeof(device_t) * (newsize - dc->maxunit), 0,
961 sizeof(device_t) * (newsize - dc->maxunit));
962 dc->devices = newlist;
963 dc->maxunit = newsize;
967 PDEBUG(("now: unit %d in devclass %s", unit, DEVCLANAME(dc)));
1267 * @param dc the devclass to add to
1275 devclass_add_device(devclass_t dc, device_t dev)
1279 PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
1281 buflen = snprintf(NULL, 0, "%s%d$", dc->name, INT_MAX);
1288 if ((error = devclass_alloc_unit(dc, dev, &dev->unit)) != 0) {
1293 dc->devices[dev->unit] = dev;
1294 dev->devclass = dc;
1295 if (snprintf_s(dev->nameunit, buflen, buflen - 1, "%s%d", dc->name, dev->unit) < 0) {
1312 * @param dc the devclass to delete from
1318 devclass_delete_device(devclass_t dc, device_t dev)
1320 if (!dc || !dev)
1323 PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
1325 if (dev->devclass != dc || dc->devices[dev->unit] != dev)
1327 dc->devices[dev->unit] = NULL;
1353 devclass_t dc;
1358 dc = devclass_find_internal(name, NULL, TRUE);
1359 if (!dc) {
1365 dc = NULL;
1388 if (devclass_add_device(dc, dev)) {
1818 devclass_t dc = dev->devclass;
1822 TAILQ_FOREACH(dl, &dc->drivers, link) {
2115 devclass_t dc;
2118 dc = dev->devclass;
2119 TAILQ_FOREACH(dl, &dc->drivers, link) {
2236 first_matching_driver(devclass_t dc, device_t dev)
2239 return (devclass_find_driver_internal(dc, dev->devclass->name));
2240 return (TAILQ_FIRST(&dc->drivers));
2247 next_matching_driver(devclass_t dc, device_t dev, driverlink_t last)
2267 devclass_t dc;
2281 dc = devclass_find_internal(classname, NULL, TRUE);
2282 if (!dc)
2285 error = devclass_add_device(dc, dev);
2425 devclass_t dc;
2433 dc = dev->devclass;
2434 if (!dc)
2444 for (; dc; dc = dc->parent) {
2445 for (dl = first_matching_driver(dc, child);
2447 dl = next_matching_driver(dc, child, dl)) {
2984 print_devclass_short(devclass_t dc, int indent)
2986 if ( !dc )
2989 indentprintf(("devclass %s: max units = %d\n", dc->name, dc->maxunit));
2993 print_devclass(devclass_t dc, int indent)
2997 if ( !dc )
3000 print_devclass_short(dc, indent);
3002 print_driver_list(dc->drivers, indent+1);
3005 for (i = 0; i < dc->maxunit; i++)
3006 if (dc->devices[i])
3007 print_device(dc->devices[i], indent+1);
3013 devclass_t dc;
3016 TAILQ_FOREACH(dc, &devclasses, link) {
3017 print_devclass_short(dc, 0);
3024 devclass_t dc;
3027 TAILQ_FOREACH(dc, &devclasses, link) {
3028 print_devclass(dc, 0);