Lines Matching refs:dev

159 usbd_devinfo_vp(struct usbd_device *dev, char *v, size_t vl, char *p,  in usbd_devinfo_vp()  argument
162 usb_device_descriptor_t *udd = &dev->ud_ddesc; in usbd_devinfo_vp()
163 if (dev == NULL) in usbd_devinfo_vp()
169 if (usbd_get_string0(dev, udd->iManufacturer, v, useencoded) == in usbd_devinfo_vp()
172 if (usbd_get_string0(dev, udd->iProduct, p, useencoded) == in usbd_devinfo_vp()
176 if (dev->ud_vendor) { in usbd_devinfo_vp()
177 strlcpy(v, dev->ud_vendor, vl); in usbd_devinfo_vp()
179 if (dev->ud_product) { in usbd_devinfo_vp()
180 strlcpy(p, dev->ud_product, pl); in usbd_devinfo_vp()
197 usbd_devinfo(struct usbd_device *dev, int showclass, char *cp, size_t l) in usbd_devinfo() argument
199 usb_device_descriptor_t *udd = &dev->ud_ddesc; in usbd_devinfo()
209 usbd_devinfo_vp(dev, vendor, USB_MAX_ENCODED_STRING_LEN, in usbd_devinfo()
222 cp += snprintf(cp, ep - cp, ", addr %d", dev->ud_addr); in usbd_devinfo()
228 usbd_devinfo_alloc(struct usbd_device *dev, int showclass) in usbd_devinfo_alloc() argument
233 usbd_devinfo(dev, showclass, devinfop, DEVINFOSIZE); in usbd_devinfo_alloc()
262 usbd_delay_ms_locked(struct usbd_device *dev, u_int ms, kmutex_t *lock) in usbd_delay_ms_locked() argument
264 usb_delay_ms_locked(dev->ud_bus, ms, lock); in usbd_delay_ms_locked()
269 usbd_delay_ms(struct usbd_device *dev, u_int ms) in usbd_delay_ms() argument
271 usb_delay_ms_locked(dev->ud_bus, ms, NULL); in usbd_delay_ms()
275 usbd_reset_port(struct usbd_device *dev, int port, usb_port_status_t *ps) in usbd_reset_port() argument
287 err = usbd_do_request(dev, &req, 0); in usbd_reset_port()
294 usbd_delay_ms(dev, USB_PORT_RESET_DELAY); in usbd_reset_port()
295 err = usbd_get_port_status(dev, port, ps); in usbd_reset_port()
306 err = usbd_clear_port_feature(dev, port, UHF_C_PORT_RESET); in usbd_reset_port()
313 usbd_delay_ms(dev, USB_PORT_RESET_RECOVERY); in usbd_reset_port()
407 usbd_iface_init(struct usbd_device *dev, int ifaceidx) in usbd_iface_init() argument
409 struct usbd_interface *ifc = &dev->ud_ifaces[ifaceidx]; in usbd_iface_init()
413 ifc->ui_dev = dev; in usbd_iface_init()
422 usbd_iface_fini(struct usbd_device *dev, int ifaceidx) in usbd_iface_fini() argument
424 struct usbd_interface *ifc __diagused = &dev->ud_ifaces[ifaceidx]; in usbd_iface_fini()
426 KASSERT(ifc->ui_dev == dev); in usbd_iface_fini()
528 usbd_fill_iface_data(struct usbd_device *dev, int ifaceidx, int altidx) in usbd_fill_iface_data() argument
533 struct usbd_interface *ifc = &dev->ud_ifaces[ifaceidx]; in usbd_fill_iface_data()
541 KASSERT(ifc->ui_dev == dev); in usbd_fill_iface_data()
544 idesc = usbd_find_idesc(dev->ud_cdesc, ifaceidx, altidx); in usbd_fill_iface_data()
557 end = (char *)dev->ud_cdesc + UGETW(dev->ud_cdesc->wTotalLength); in usbd_fill_iface_data()
558 KASSERTMSG((char *)dev->ud_cdesc <= (char *)idesc, "cdesc=%p idesc=%p", in usbd_fill_iface_data()
559 dev->ud_cdesc, idesc); in usbd_fill_iface_data()
591 if (dev->ud_speed == USB_SPEED_HIGH) { in usbd_fill_iface_data()
641 usbd_free_iface_data(struct usbd_device *dev, int ifcno) in usbd_free_iface_data() argument
643 struct usbd_interface *ifc = &dev->ud_ifaces[ifcno]; in usbd_free_iface_data()
645 KASSERT(ifc->ui_dev == dev); in usbd_free_iface_data()
662 usbd_set_config_no(struct usbd_device *dev, int no, int msg) in usbd_set_config_no() argument
670 return usbd_set_config_index(dev, USB_UNCONFIG_INDEX, msg); in usbd_set_config_no()
673 for (index = 0; index < dev->ud_ddesc.bNumConfigurations; index++) { in usbd_set_config_no()
674 err = usbd_get_config_desc(dev, index, &cd); in usbd_set_config_no()
678 return usbd_set_config_index(dev, index, msg); in usbd_set_config_no()
684 usbd_set_config_index(struct usbd_device *dev, int index, int msg) in usbd_set_config_index() argument
688 (uintptr_t)dev, index, 0, 0); in usbd_set_config_index()
695 if (index >= dev->ud_ddesc.bNumConfigurations && in usbd_set_config_index()
703 if (dev->ud_config != USB_UNCONFIG_NO) { in usbd_set_config_index()
706 nifc = dev->ud_cdesc->bNumInterface; in usbd_set_config_index()
708 usbd_iface_exlock(&dev->ud_ifaces[ifcidx]); in usbd_set_config_index()
709 usbd_free_iface_data(dev, ifcidx); in usbd_set_config_index()
710 usbd_iface_unlock(&dev->ud_ifaces[ifcidx]); in usbd_set_config_index()
711 usbd_iface_fini(dev, ifcidx); in usbd_set_config_index()
713 kmem_free(dev->ud_ifaces, nifc * sizeof(struct usbd_interface)); in usbd_set_config_index()
714 kmem_free(dev->ud_cdesc, UGETW(dev->ud_cdesc->wTotalLength)); in usbd_set_config_index()
715 if (dev->ud_bdesc != NULL) in usbd_set_config_index()
716 kmem_free(dev->ud_bdesc, in usbd_set_config_index()
717 UGETW(dev->ud_bdesc->wTotalLength)); in usbd_set_config_index()
718 dev->ud_ifaces = NULL; in usbd_set_config_index()
719 dev->ud_cdesc = NULL; in usbd_set_config_index()
720 dev->ud_bdesc = NULL; in usbd_set_config_index()
721 dev->ud_config = USB_UNCONFIG_NO; in usbd_set_config_index()
727 err = usbd_set_config(dev, USB_UNCONFIG_NO); in usbd_set_config_index()
736 err = usbd_get_config_desc(dev, index, &cd); in usbd_set_config_index()
750 err = usbd_get_desc(dev, UDESC_CONFIG, index, len, cdp); in usbd_set_config_index()
753 usbd_delay_ms(dev, 200); in usbd_set_config_index()
770 if (USB_IS_SS(dev->ud_speed)) { in usbd_set_config_index()
774 err = usbd_get_bos_desc(dev, index, &bd); in usbd_set_config_index()
786 err = usbd_get_desc(dev, UDESC_BOS, index, blen, in usbd_set_config_index()
790 usbd_delay_ms(dev, 200); in usbd_set_config_index()
801 dev->ud_bdesc = bdp; in usbd_set_config_index()
808 err = usbd_get_device_status(dev, &ds); in usbd_set_config_index()
821 dev->ud_addr, cdp->bConfigurationValue, cdp->bmAttributes, in usbd_set_config_index()
831 device_xname(dev->ud_bus->bdev), dev->ud_addr, in usbd_set_config_index()
838 if (dev->ud_powersrc == NULL) { in usbd_set_config_index()
845 if (power > dev->ud_powersrc->up_power) { in usbd_set_config_index()
847 dev->ud_powersrc->up_power, 0, 0); in usbd_set_config_index()
852 device_xname(dev->ud_bus->ub_usbctl), dev->ud_addr, in usbd_set_config_index()
854 power, dev->ud_powersrc->up_power); in usbd_set_config_index()
858 dev->ud_power = power; in usbd_set_config_index()
859 dev->ud_selfpowered = selfpowered; in usbd_set_config_index()
863 err = usbd_set_config(dev, cdp->bConfigurationValue); in usbd_set_config_index()
870 KASSERTMSG(dev->ud_ifaces == NULL, "ud_ifaces=%p", dev->ud_ifaces); in usbd_set_config_index()
879 dev->ud_ifaces = kmem_alloc(nifc * sizeof(struct usbd_interface), in usbd_set_config_index()
881 DPRINTFN(5, "dev=%#jx cdesc=%#jx", (uintptr_t)dev, (uintptr_t)cdp, in usbd_set_config_index()
883 dev->ud_cdesc = cdp; in usbd_set_config_index()
884 dev->ud_config = cdp->bConfigurationValue; in usbd_set_config_index()
886 usbd_iface_init(dev, ifcidx); in usbd_set_config_index()
887 usbd_iface_exlock(&dev->ud_ifaces[ifcidx]); in usbd_set_config_index()
888 err = usbd_fill_iface_data(dev, ifcidx, 0); in usbd_set_config_index()
889 usbd_iface_unlock(&dev->ud_ifaces[ifcidx]); in usbd_set_config_index()
892 usbd_iface_exlock(&dev->ud_ifaces[ifcidx]); in usbd_set_config_index()
893 usbd_free_iface_data(dev, ifcidx); in usbd_set_config_index()
894 usbd_iface_unlock(&dev->ud_ifaces[ifcidx]); in usbd_set_config_index()
895 usbd_iface_fini(dev, ifcidx); in usbd_set_config_index()
897 kmem_free(dev->ud_ifaces, in usbd_set_config_index()
899 dev->ud_ifaces = NULL; in usbd_set_config_index()
909 dev->ud_config = USB_UNCONFIG_NO; in usbd_set_config_index()
910 KASSERT(dev->ud_ifaces == NULL); in usbd_set_config_index()
912 dev->ud_cdesc = NULL; in usbd_set_config_index()
915 dev->ud_bdesc = NULL; in usbd_set_config_index()
923 usbd_setup_pipe(struct usbd_device *dev, struct usbd_interface *iface, in usbd_setup_pipe() argument
926 return usbd_setup_pipe_flags(dev, iface, ep, ival, pipe, 0); in usbd_setup_pipe()
930 usbd_setup_pipe_flags(struct usbd_device *dev, struct usbd_interface *iface, in usbd_setup_pipe_flags() argument
935 (uintptr_t)dev, dev->ud_addr, (uintptr_t)iface, (uintptr_t)ep); in usbd_setup_pipe_flags()
941 err = usbd_endpoint_acquire(dev, ep, flags & USBD_EXCLUSIVE_USE); in usbd_setup_pipe_flags()
946 p = kmem_alloc(dev->ud_bus->ub_pipesize, KM_SLEEP); in usbd_setup_pipe_flags()
948 p->up_dev = dev; in usbd_setup_pipe_flags()
963 err = dev->ud_bus->ub_methods->ubm_open(p); in usbd_setup_pipe_flags()
984 kmem_free(p, dev->ud_bus->ub_pipesize); in usbd_setup_pipe_flags()
987 usbd_endpoint_release(dev, ep); in usbd_setup_pipe_flags()
992 usbd_endpoint_acquire(struct usbd_device *dev, struct usbd_endpoint *ep, in usbd_endpoint_acquire() argument
997 mutex_enter(dev->ud_bus->ub_lock); in usbd_endpoint_acquire()
1006 mutex_exit(dev->ud_bus->ub_lock); in usbd_endpoint_acquire()
1012 usbd_endpoint_release(struct usbd_device *dev, struct usbd_endpoint *ep) in usbd_endpoint_release() argument
1015 mutex_enter(dev->ud_bus->ub_lock); in usbd_endpoint_release()
1018 mutex_exit(dev->ud_bus->ub_lock); in usbd_endpoint_release()
1044 usbd_attach_roothub(device_t parent, struct usbd_device *dev) in usbd_attach_roothub() argument
1047 usb_device_descriptor_t *dd = &dev->ud_ddesc; in usbd_attach_roothub()
1050 uaa.uaa_device = dev; in usbd_attach_roothub()
1065 dev->ud_subdevs = kmem_alloc(sizeof(dv), KM_SLEEP); in usbd_attach_roothub()
1066 dev->ud_subdevs[0] = dv; in usbd_attach_roothub()
1067 dev->ud_subdevlen = 1; in usbd_attach_roothub()
1073 usbd_properties(device_t dv, struct usbd_device *dev) in usbd_properties() argument
1075 usb_device_descriptor_t *dd = &dev->ud_ddesc; in usbd_properties()
1086 prop_dictionary_set_uint8(dict, "address", dev->ud_addr); in usbd_properties()
1088 if (dev->ud_myhub) { in usbd_properties()
1089 struct usbd_device *hdev = dev->ud_myhub; in usbd_properties()
1097 if (hub->uh_ports[p-1].up_dev == dev) { in usbd_properties()
1111 if (dev->ud_vendor) { in usbd_properties()
1113 "vendor-string", dev->ud_vendor); in usbd_properties()
1115 if (dev->ud_product) { in usbd_properties()
1117 "product-string", dev->ud_product); in usbd_properties()
1119 if (dev->ud_serial) { in usbd_properties()
1121 "serialnumber", dev->ud_serial); in usbd_properties()
1126 usbd_attachwholedevice(device_t parent, struct usbd_device *dev, int port, in usbd_attachwholedevice() argument
1130 usb_device_descriptor_t *dd = &dev->ud_ddesc; in usbd_attachwholedevice()
1136 uaa.uaa_device = dev; in usbd_attachwholedevice()
1163 dev->ud_subdevs = kmem_alloc(sizeof(dv), KM_SLEEP); in usbd_attachwholedevice()
1164 dev->ud_subdevs[0] = dv; in usbd_attachwholedevice()
1165 dev->ud_subdevlen = 1; in usbd_attachwholedevice()
1166 dev->ud_nifaces_claimed = 1; /* XXX */ in usbd_attachwholedevice()
1167 usbd_properties(dv, dev); in usbd_attachwholedevice()
1174 usbd_attachinterfaces(device_t parent, struct usbd_device *dev, in usbd_attachinterfaces() argument
1180 usb_device_descriptor_t *dd = &dev->ud_ddesc; in usbd_attachinterfaces()
1188 nifaces = dev->ud_cdesc->bNumInterface; in usbd_attachinterfaces()
1191 if (!dev->ud_subdevs[i]) { in usbd_attachinterfaces()
1192 ifaces[i] = &dev->ud_ifaces[i]; in usbd_attachinterfaces()
1198 uiaa.uiaa_device = dev; in usbd_attachinterfaces()
1203 uiaa.uiaa_configno = dev->ud_cdesc->bConfigurationValue; in usbd_attachinterfaces()
1247 usbd_properties(dv, dev); in usbd_attachinterfaces()
1254 if (!ifaces[j] && !dev->ud_subdevs[j]) { in usbd_attachinterfaces()
1257 dev->ud_subdevs[j] = dv; in usbd_attachinterfaces()
1258 dev->ud_nifaces_claimed++; in usbd_attachinterfaces()
1268 usbd_probe_and_attach(device_t parent, struct usbd_device *dev, in usbd_probe_and_attach() argument
1273 usb_device_descriptor_t *dd = &dev->ud_ddesc; in usbd_probe_and_attach()
1280 err = usbd_attachwholedevice(parent, dev, port, 0); in usbd_probe_and_attach()
1281 if (dev->ud_nifaces_claimed || err) in usbd_probe_and_attach()
1289 err = usbd_set_config_index(dev, confi, 1); in usbd_probe_and_attach()
1297 nifaces = dev->ud_cdesc->bNumInterface; in usbd_probe_and_attach()
1298 dev->ud_subdevs = kmem_zalloc(nifaces * sizeof(device_t), in usbd_probe_and_attach()
1300 dev->ud_subdevlen = nifaces; in usbd_probe_and_attach()
1302 err = usbd_attachinterfaces(parent, dev, port, NULL); in usbd_probe_and_attach()
1304 if (dev->ud_subdevs && dev->ud_nifaces_claimed == 0) { in usbd_probe_and_attach()
1305 kmem_free(dev->ud_subdevs, in usbd_probe_and_attach()
1306 dev->ud_subdevlen * sizeof(device_t)); in usbd_probe_and_attach()
1307 dev->ud_subdevs = 0; in usbd_probe_and_attach()
1308 dev->ud_subdevlen = 0; in usbd_probe_and_attach()
1310 if (dev->ud_nifaces_claimed || err) in usbd_probe_and_attach()
1316 usbd_set_config_index(dev, 0, 0); in usbd_probe_and_attach()
1321 err = usbd_attachwholedevice(parent, dev, port, 1); in usbd_probe_and_attach()
1338 usbd_reattach_device(device_t parent, struct usbd_device *dev, in usbd_reattach_device() argument
1355 loc != UGETW(dev->ud_ddesc.idVendor)) in usbd_reattach_device()
1359 loc != UGETW(dev->ud_ddesc.idProduct)) in usbd_reattach_device()
1363 loc != UGETW(dev->ud_ddesc.bcdDevice)) in usbd_reattach_device()
1366 if (dev->ud_subdevlen == 0) { in usbd_reattach_device()
1369 return usbd_probe_and_attach(parent, dev, port, dev->ud_addr); in usbd_reattach_device()
1370 } else if (dev->ud_subdevlen != dev->ud_cdesc->bNumInterface) { in usbd_reattach_device()
1375 for (i = 0; i < dev->ud_subdevlen; i++) { in usbd_reattach_device()
1376 if (dev->ud_subdevs[i] == NULL) { in usbd_reattach_device()
1380 if (i >= dev->ud_subdevlen) in usbd_reattach_device()
1382 return usbd_attachinterfaces(parent, dev, port, locators); in usbd_reattach_device()
1398 struct usbd_device *dev, *adev; in usbd_new_device() local
1420 dev = kmem_zalloc(sizeof(*dev), KM_SLEEP); in usbd_new_device()
1421 dev->ud_bus = bus; in usbd_new_device()
1424 dev->ud_ep0.ue_edesc = &dev->ud_ep0desc; in usbd_new_device()
1427 dev->ud_ep0desc.bLength = USB_ENDPOINT_DESCRIPTOR_SIZE; in usbd_new_device()
1428 dev->ud_ep0desc.bDescriptorType = UDESC_ENDPOINT; in usbd_new_device()
1429 dev->ud_ep0desc.bEndpointAddress = USB_CONTROL_ENDPOINT; in usbd_new_device()
1430 dev->ud_ep0desc.bmAttributes = UE_CONTROL; in usbd_new_device()
1437 USETW(dev->ud_ep0desc.wMaxPacketSize, 64); in usbd_new_device()
1439 USETW(dev->ud_ep0desc.wMaxPacketSize, USB_MAX_IPACKET); in usbd_new_device()
1441 dev->ud_ep0desc.bInterval = 0; in usbd_new_device()
1444 dev->ud_ep0.ue_toggle = 0; in usbd_new_device()
1446 dev->ud_quirks = &usbd_no_quirk; in usbd_new_device()
1447 dev->ud_addr = USB_START_ADDR; in usbd_new_device()
1448 dev->ud_ddesc.bMaxPacketSize = 0; in usbd_new_device()
1449 dev->ud_depth = depth; in usbd_new_device()
1450 dev->ud_powersrc = up; in usbd_new_device()
1451 dev->ud_myhub = up->up_parent; in usbd_new_device()
1453 up->up_dev = dev; in usbd_new_device()
1456 for (adev = dev, hub = up->up_parent; in usbd_new_device()
1463 dev->ud_myhsport = in usbd_new_device()
1472 dev->ud_myhsport = NULL; in usbd_new_device()
1474 dev->ud_speed = speed; in usbd_new_device()
1475 dev->ud_langid = USBD_NOLANG; in usbd_new_device()
1476 dev->ud_cookie.cookie = ++usb_cookie_no; in usbd_new_device()
1479 err = usbd_setup_pipe_flags(dev, 0, &dev->ud_ep0, USBD_DEFAULT_INTERVAL, in usbd_new_device()
1480 &dev->ud_pipe0, USBD_MPSAFE); in usbd_new_device()
1482 usbd_remove_device(dev, up); in usbd_new_device()
1486 dd = &dev->ud_ddesc; in usbd_new_device()
1490 err = usbd_get_initial_ddesc(dev, dd); in usbd_new_device()
1498 usbd_delay_ms(dev, 200); in usbd_new_device()
1505 usbd_remove_device(dev, up); in usbd_new_device()
1528 dd->bDeviceProtocol, dd->bMaxPacketSize, dd->bLength, dev->ud_speed); in usbd_new_device()
1533 usbd_remove_device(dev, up); in usbd_new_device()
1539 usbd_remove_device(dev, up); in usbd_new_device()
1543 USETW(dev->ud_ep0desc.wMaxPacketSize, dd->bMaxPacketSize); in usbd_new_device()
1546 usbd_kill_pipe(dev->ud_pipe0); in usbd_new_device()
1547 dev->ud_pipe0 = NULL; in usbd_new_device()
1548 err = usbd_setup_pipe_flags(dev, 0, &dev->ud_ep0, USBD_DEFAULT_INTERVAL, in usbd_new_device()
1549 &dev->ud_pipe0, USBD_MPSAFE); in usbd_new_device()
1552 usbd_remove_device(dev, up); in usbd_new_device()
1558 err = usbd_set_address(dev, addr); in usbd_new_device()
1562 usbd_remove_device(dev, up); in usbd_new_device()
1567 usbd_delay_ms(dev, USB_SET_ADDRESS_SETTLE); in usbd_new_device()
1568 dev->ud_addr = addr; /* new device address now */ in usbd_new_device()
1569 bus->ub_devices[usb_addr2dindex(addr)] = dev; in usbd_new_device()
1572 usbd_kill_pipe(dev->ud_pipe0); in usbd_new_device()
1573 dev->ud_pipe0 = NULL; in usbd_new_device()
1574 err = usbd_setup_pipe_flags(dev, 0, &dev->ud_ep0, USBD_DEFAULT_INTERVAL, in usbd_new_device()
1575 &dev->ud_pipe0, USBD_MPSAFE); in usbd_new_device()
1578 usbd_remove_device(dev, up); in usbd_new_device()
1582 err = usbd_reload_device_desc(dev); in usbd_new_device()
1586 usbd_remove_device(dev, up); in usbd_new_device()
1591 dev->ud_power = USB_MIN_POWER; in usbd_new_device()
1592 dev->ud_selfpowered = 0; in usbd_new_device()
1595 addr, (uintptr_t)dev, (uintptr_t)parent, 0); in usbd_new_device()
1597 usbd_get_device_strings(dev); in usbd_new_device()
1599 usbd_add_dev_event(USB_EVENT_DEVICE_ATTACH, dev); in usbd_new_device()
1603 usbd_attach_roothub(parent, dev); in usbd_new_device()
1607 err = usbd_probe_and_attach(parent, dev, port, addr); in usbd_new_device()
1609 usbd_remove_device(dev, up); in usbd_new_device()
1617 usbd_reload_device_desc(struct usbd_device *dev) in usbd_reload_device_desc() argument
1620 usb_device_descriptor_t *udd = &dev->ud_ddesc; in usbd_reload_device_desc()
1624 err = usbd_get_device_desc(dev, udd); in usbd_reload_device_desc()
1655 dev->ud_quirks = usbd_find_quirk(udd); in usbd_reload_device_desc()
1661 usbd_remove_device(struct usbd_device *dev, struct usbd_port *up) in usbd_remove_device() argument
1666 (uintptr_t)dev, (uintptr_t)up, 0, 0); in usbd_remove_device()
1668 if (dev->ud_pipe0 != NULL) in usbd_remove_device()
1669 usbd_kill_pipe(dev->ud_pipe0); in usbd_remove_device()
1671 dev->ud_bus->ub_devices[usb_addr2dindex(dev->ud_addr)] = NULL; in usbd_remove_device()
1673 if (dev->ud_vendor != NULL) { in usbd_remove_device()
1674 kmem_free(dev->ud_vendor, USB_MAX_ENCODED_STRING_LEN); in usbd_remove_device()
1676 if (dev->ud_product != NULL) { in usbd_remove_device()
1677 kmem_free(dev->ud_product, USB_MAX_ENCODED_STRING_LEN); in usbd_remove_device()
1679 if (dev->ud_serial != NULL) { in usbd_remove_device()
1680 kmem_free(dev->ud_serial, USB_MAX_ENCODED_STRING_LEN); in usbd_remove_device()
1682 kmem_free(dev, sizeof(*dev)); in usbd_remove_device()
1744 usbd_fill_deviceinfo(struct usbd_device *dev, struct usb_device_info *di, in usbd_fill_deviceinfo() argument
1750 di->udi_bus = device_unit(dev->ud_bus->ub_usbctl); in usbd_fill_deviceinfo()
1751 di->udi_addr = dev->ud_addr; in usbd_fill_deviceinfo()
1752 di->udi_cookie = dev->ud_cookie; in usbd_fill_deviceinfo()
1753 usbd_devinfo_vp(dev, di->udi_vendor, sizeof(di->udi_vendor), in usbd_fill_deviceinfo()
1756 UGETW(dev->ud_ddesc.bcdDevice)); in usbd_fill_deviceinfo()
1758 usbd_status uerr = usbd_get_string(dev, in usbd_fill_deviceinfo()
1759 dev->ud_ddesc.iSerialNumber, di->udi_serial); in usbd_fill_deviceinfo()
1767 if (dev->ud_serial) { in usbd_fill_deviceinfo()
1768 strlcpy(di->udi_serial, dev->ud_serial, in usbd_fill_deviceinfo()
1773 di->udi_vendorNo = UGETW(dev->ud_ddesc.idVendor); in usbd_fill_deviceinfo()
1774 di->udi_productNo = UGETW(dev->ud_ddesc.idProduct); in usbd_fill_deviceinfo()
1775 di->udi_releaseNo = UGETW(dev->ud_ddesc.bcdDevice); in usbd_fill_deviceinfo()
1776 di->udi_class = dev->ud_ddesc.bDeviceClass; in usbd_fill_deviceinfo()
1777 di->udi_subclass = dev->ud_ddesc.bDeviceSubClass; in usbd_fill_deviceinfo()
1778 di->udi_protocol = dev->ud_ddesc.bDeviceProtocol; in usbd_fill_deviceinfo()
1779 di->udi_config = dev->ud_config; in usbd_fill_deviceinfo()
1780 di->udi_power = dev->ud_selfpowered ? 0 : dev->ud_power; in usbd_fill_deviceinfo()
1781 di->udi_speed = dev->ud_speed; in usbd_fill_deviceinfo()
1783 if (dev->ud_subdevlen > 0) { in usbd_fill_deviceinfo()
1784 for (i = 0, j = 0; i < dev->ud_subdevlen && in usbd_fill_deviceinfo()
1786 if (!dev->ud_subdevs[i]) in usbd_fill_deviceinfo()
1789 device_xname(dev->ud_subdevs[i]), USB_MAX_DEVNAMELEN); in usbd_fill_deviceinfo()
1799 if (!dev->ud_hub) { in usbd_fill_deviceinfo()
1804 const int nports = dev->ud_hub->uh_hubdesc.bNbrPorts; in usbd_fill_deviceinfo()
1806 p = &dev->ud_hub->uh_ports[i - 1]; in usbd_fill_deviceinfo()
1811 const bool sshub_p = USB_IS_SS(dev->ud_speed); in usbd_fill_deviceinfo()
1834 usb_free_device(struct usbd_device *dev) in usb_free_device() argument
1838 if (dev->ud_pipe0 != NULL) in usb_free_device()
1839 usbd_kill_pipe(dev->ud_pipe0); in usb_free_device()
1840 if (dev->ud_ifaces != NULL) { in usb_free_device()
1841 nifc = dev->ud_cdesc->bNumInterface; in usb_free_device()
1843 usbd_iface_exlock(&dev->ud_ifaces[ifcidx]); in usb_free_device()
1844 usbd_free_iface_data(dev, ifcidx); in usb_free_device()
1845 usbd_iface_unlock(&dev->ud_ifaces[ifcidx]); in usb_free_device()
1846 usbd_iface_fini(dev, ifcidx); in usb_free_device()
1848 kmem_free(dev->ud_ifaces, in usb_free_device()
1851 if (dev->ud_cdesc != NULL) in usb_free_device()
1852 kmem_free(dev->ud_cdesc, UGETW(dev->ud_cdesc->wTotalLength)); in usb_free_device()
1853 if (dev->ud_bdesc != NULL) in usb_free_device()
1854 kmem_free(dev->ud_bdesc, UGETW(dev->ud_bdesc->wTotalLength)); in usb_free_device()
1855 if (dev->ud_subdevlen > 0) { in usb_free_device()
1856 kmem_free(dev->ud_subdevs, in usb_free_device()
1857 dev->ud_subdevlen * sizeof(device_t)); in usb_free_device()
1858 dev->ud_subdevlen = 0; in usb_free_device()
1860 if (dev->ud_vendor) { in usb_free_device()
1861 kmem_free(dev->ud_vendor, USB_MAX_ENCODED_STRING_LEN); in usb_free_device()
1863 if (dev->ud_product) { in usb_free_device()
1864 kmem_free(dev->ud_product, USB_MAX_ENCODED_STRING_LEN); in usb_free_device()
1866 if (dev->ud_serial) { in usb_free_device()
1867 kmem_free(dev->ud_serial, USB_MAX_ENCODED_STRING_LEN); in usb_free_device()
1869 kmem_free(dev, sizeof(*dev)); in usb_free_device()
1892 struct usbd_device *dev = up->up_dev; in usb_disconnect_port() local
1900 (uintptr_t)up, (uintptr_t)dev, up->up_portno, 0); in usb_disconnect_port()
1902 if (dev == NULL) { in usb_disconnect_port()
1906 usbd_suspend_pipe(dev->ud_pipe0); in usb_disconnect_port()
1907 if (dev->ud_subdevlen > 0) { in usb_disconnect_port()
1909 for (i = 0; i < dev->ud_subdevlen; i++) { in usb_disconnect_port()
1910 if ((subdev = dev->ud_subdevs[i]) == NULL) in usb_disconnect_port()
1922 printf(" (addr %d) disconnected\n", dev->ud_addr); in usb_disconnect_port()
1924 KASSERT(!dev->ud_nifaces_claimed); in usb_disconnect_port()
1927 mutex_enter(dev->ud_bus->ub_lock); in usb_disconnect_port()
1928 dev->ud_bus->ub_devices[usb_addr2dindex(dev->ud_addr)] = NULL; in usb_disconnect_port()
1930 mutex_exit(dev->ud_bus->ub_lock); in usb_disconnect_port()
1932 usbd_add_dev_event(USB_EVENT_DEVICE_DETACH, dev); in usb_disconnect_port()
1934 usb_free_device(dev); in usb_disconnect_port()