Lines Matching +full:super +full:- +full:speed
7 /* ------------------------------------------------------------------ */
16 return -1; in usb_desc_device()
19 d->bLength = bLength; in usb_desc_device()
20 d->bDescriptorType = USB_DT_DEVICE; in usb_desc_device()
22 if (msos && dev->bcdUSB < 0x0200) { in usb_desc_device()
25 * Done this way so msos-desc compat property will handle both in usb_desc_device()
28 d->u.device.bcdUSB_lo = usb_lo(0x0200); in usb_desc_device()
29 d->u.device.bcdUSB_hi = usb_hi(0x0200); in usb_desc_device()
31 d->u.device.bcdUSB_lo = usb_lo(dev->bcdUSB); in usb_desc_device()
32 d->u.device.bcdUSB_hi = usb_hi(dev->bcdUSB); in usb_desc_device()
34 d->u.device.bDeviceClass = dev->bDeviceClass; in usb_desc_device()
35 d->u.device.bDeviceSubClass = dev->bDeviceSubClass; in usb_desc_device()
36 d->u.device.bDeviceProtocol = dev->bDeviceProtocol; in usb_desc_device()
37 d->u.device.bMaxPacketSize0 = dev->bMaxPacketSize0; in usb_desc_device()
39 d->u.device.idVendor_lo = usb_lo(id->idVendor); in usb_desc_device()
40 d->u.device.idVendor_hi = usb_hi(id->idVendor); in usb_desc_device()
41 d->u.device.idProduct_lo = usb_lo(id->idProduct); in usb_desc_device()
42 d->u.device.idProduct_hi = usb_hi(id->idProduct); in usb_desc_device()
43 d->u.device.bcdDevice_lo = usb_lo(id->bcdDevice); in usb_desc_device()
44 d->u.device.bcdDevice_hi = usb_hi(id->bcdDevice); in usb_desc_device()
45 d->u.device.iManufacturer = id->iManufacturer; in usb_desc_device()
46 d->u.device.iProduct = id->iProduct; in usb_desc_device()
47 d->u.device.iSerialNumber = id->iSerialNumber; in usb_desc_device()
49 d->u.device.bNumConfigurations = dev->bNumConfigurations; in usb_desc_device()
61 return -1; in usb_desc_device_qualifier()
64 d->bLength = bLength; in usb_desc_device_qualifier()
65 d->bDescriptorType = USB_DT_DEVICE_QUALIFIER; in usb_desc_device_qualifier()
67 d->u.device_qualifier.bcdUSB_lo = usb_lo(dev->bcdUSB); in usb_desc_device_qualifier()
68 d->u.device_qualifier.bcdUSB_hi = usb_hi(dev->bcdUSB); in usb_desc_device_qualifier()
69 d->u.device_qualifier.bDeviceClass = dev->bDeviceClass; in usb_desc_device_qualifier()
70 d->u.device_qualifier.bDeviceSubClass = dev->bDeviceSubClass; in usb_desc_device_qualifier()
71 d->u.device_qualifier.bDeviceProtocol = dev->bDeviceProtocol; in usb_desc_device_qualifier()
72 d->u.device_qualifier.bMaxPacketSize0 = dev->bMaxPacketSize0; in usb_desc_device_qualifier()
73 d->u.device_qualifier.bNumConfigurations = dev->bNumConfigurations; in usb_desc_device_qualifier()
74 d->u.device_qualifier.bReserved = 0; in usb_desc_device_qualifier()
88 return -1; in usb_desc_config()
91 d->bLength = bLength; in usb_desc_config()
92 d->bDescriptorType = USB_DT_CONFIG; in usb_desc_config()
94 d->u.config.bNumInterfaces = conf->bNumInterfaces; in usb_desc_config()
95 d->u.config.bConfigurationValue = conf->bConfigurationValue; in usb_desc_config()
96 d->u.config.iConfiguration = conf->iConfiguration; in usb_desc_config()
97 d->u.config.bmAttributes = conf->bmAttributes; in usb_desc_config()
98 d->u.config.bMaxPower = conf->bMaxPower; in usb_desc_config()
102 for (i = 0; i < conf->nif_groups; i++) { in usb_desc_config()
103 rc = usb_desc_iface_group(&(conf->if_groups[i]), flags, in usb_desc_config()
105 len - wTotalLength); in usb_desc_config()
113 for (i = 0; i < conf->nif; i++) { in usb_desc_config()
114 rc = usb_desc_iface(conf->ifs + i, flags, in usb_desc_config()
115 dest + wTotalLength, len - wTotalLength); in usb_desc_config()
122 d->u.config.wTotalLength_lo = usb_lo(wTotalLength); in usb_desc_config()
123 d->u.config.wTotalLength_hi = usb_hi(wTotalLength); in usb_desc_config()
137 return -1; in usb_desc_iface_group()
142 dest[0x02] = iad->bFirstInterface; in usb_desc_iface_group()
143 dest[0x03] = iad->bInterfaceCount; in usb_desc_iface_group()
144 dest[0x04] = iad->bFunctionClass; in usb_desc_iface_group()
145 dest[0x05] = iad->bFunctionSubClass; in usb_desc_iface_group()
146 dest[0x06] = iad->bFunctionProtocol; in usb_desc_iface_group()
147 dest[0x07] = iad->iFunction; in usb_desc_iface_group()
151 for (i = 0; i < iad->nif; i++) { in usb_desc_iface_group()
152 int rc = usb_desc_iface(&(iad->ifs[i]), flags, dest + pos, len - pos); in usb_desc_iface_group()
170 return -1; in usb_desc_iface()
173 d->bLength = bLength; in usb_desc_iface()
174 d->bDescriptorType = USB_DT_INTERFACE; in usb_desc_iface()
176 d->u.interface.bInterfaceNumber = iface->bInterfaceNumber; in usb_desc_iface()
177 d->u.interface.bAlternateSetting = iface->bAlternateSetting; in usb_desc_iface()
178 d->u.interface.bNumEndpoints = iface->bNumEndpoints; in usb_desc_iface()
179 d->u.interface.bInterfaceClass = iface->bInterfaceClass; in usb_desc_iface()
180 d->u.interface.bInterfaceSubClass = iface->bInterfaceSubClass; in usb_desc_iface()
181 d->u.interface.bInterfaceProtocol = iface->bInterfaceProtocol; in usb_desc_iface()
182 d->u.interface.iInterface = iface->iInterface; in usb_desc_iface()
185 for (i = 0; i < iface->ndesc; i++) { in usb_desc_iface()
186 rc = usb_desc_other(iface->descs + i, dest + pos, len - pos); in usb_desc_iface()
193 for (i = 0; i < iface->bNumEndpoints; i++) { in usb_desc_iface()
194 rc = usb_desc_endpoint(iface->eps + i, flags, dest + pos, len - pos); in usb_desc_iface()
207 uint8_t bLength = ep->is_audio ? 0x09 : 0x07; in usb_desc_endpoint()
208 uint8_t extralen = ep->extra ? ep->extra[0] : 0; in usb_desc_endpoint()
213 return -1; in usb_desc_endpoint()
216 d->bLength = bLength; in usb_desc_endpoint()
217 d->bDescriptorType = USB_DT_ENDPOINT; in usb_desc_endpoint()
219 d->u.endpoint.bEndpointAddress = ep->bEndpointAddress; in usb_desc_endpoint()
220 d->u.endpoint.bmAttributes = ep->bmAttributes; in usb_desc_endpoint()
221 d->u.endpoint.wMaxPacketSize_lo = usb_lo(ep->wMaxPacketSize); in usb_desc_endpoint()
222 d->u.endpoint.wMaxPacketSize_hi = usb_hi(ep->wMaxPacketSize); in usb_desc_endpoint()
223 d->u.endpoint.bInterval = ep->bInterval; in usb_desc_endpoint()
224 if (ep->is_audio) { in usb_desc_endpoint()
225 d->u.endpoint.bRefresh = ep->bRefresh; in usb_desc_endpoint()
226 d->u.endpoint.bSynchAddress = ep->bSynchAddress; in usb_desc_endpoint()
232 d->bLength = 0x06; in usb_desc_endpoint()
233 d->bDescriptorType = USB_DT_ENDPOINT_COMPANION; in usb_desc_endpoint()
235 d->u.super_endpoint.bMaxBurst = ep->bMaxBurst; in usb_desc_endpoint()
236 d->u.super_endpoint.bmAttributes = ep->bmAttributes_super; in usb_desc_endpoint()
237 d->u.super_endpoint.wBytesPerInterval_lo = in usb_desc_endpoint()
238 usb_lo(ep->wBytesPerInterval); in usb_desc_endpoint()
239 d->u.super_endpoint.wBytesPerInterval_hi = in usb_desc_endpoint()
240 usb_hi(ep->wBytesPerInterval); in usb_desc_endpoint()
243 if (ep->extra) { in usb_desc_endpoint()
244 memcpy(dest + bLength + superlen, ep->extra, extralen); in usb_desc_endpoint()
252 int bLength = desc->length ? desc->length : desc->data[0]; in usb_desc_other()
255 return -1; in usb_desc_other()
258 memcpy(dest, desc->data, bLength); in usb_desc_other()
268 return -1; in usb_desc_cap_usb2_ext()
271 d->bLength = bLength; in usb_desc_cap_usb2_ext()
272 d->bDescriptorType = USB_DT_DEVICE_CAPABILITY; in usb_desc_cap_usb2_ext()
273 d->u.cap.bDevCapabilityType = USB_DEV_CAP_USB2_EXT; in usb_desc_cap_usb2_ext()
275 d->u.cap.u.usb2_ext.bmAttributes_1 = (1 << 1); /* LPM */ in usb_desc_cap_usb2_ext()
276 d->u.cap.u.usb2_ext.bmAttributes_2 = 0; in usb_desc_cap_usb2_ext()
277 d->u.cap.u.usb2_ext.bmAttributes_3 = 0; in usb_desc_cap_usb2_ext()
278 d->u.cap.u.usb2_ext.bmAttributes_4 = 0; in usb_desc_cap_usb2_ext()
289 return -1; in usb_desc_cap_super()
292 d->bLength = bLength; in usb_desc_cap_super()
293 d->bDescriptorType = USB_DT_DEVICE_CAPABILITY; in usb_desc_cap_super()
294 d->u.cap.bDevCapabilityType = USB_DEV_CAP_SUPERSPEED; in usb_desc_cap_super()
296 d->u.cap.u.super.bmAttributes = 0; in usb_desc_cap_super()
297 d->u.cap.u.super.wSpeedsSupported_lo = 0; in usb_desc_cap_super()
298 d->u.cap.u.super.wSpeedsSupported_hi = 0; in usb_desc_cap_super()
299 d->u.cap.u.super.bFunctionalitySupport = 0; in usb_desc_cap_super()
300 d->u.cap.u.super.bU1DevExitLat = 0x0a; in usb_desc_cap_super()
301 d->u.cap.u.super.wU2DevExitLat_lo = 0x20; in usb_desc_cap_super()
302 d->u.cap.u.super.wU2DevExitLat_hi = 0; in usb_desc_cap_super()
304 if (desc->full) { in usb_desc_cap_super()
305 d->u.cap.u.super.wSpeedsSupported_lo |= (1 << 1); in usb_desc_cap_super()
306 d->u.cap.u.super.bFunctionalitySupport = 1; in usb_desc_cap_super()
308 if (desc->high) { in usb_desc_cap_super()
309 d->u.cap.u.super.wSpeedsSupported_lo |= (1 << 2); in usb_desc_cap_super()
310 if (!d->u.cap.u.super.bFunctionalitySupport) { in usb_desc_cap_super()
311 d->u.cap.u.super.bFunctionalitySupport = 2; in usb_desc_cap_super()
314 if (desc->super) { in usb_desc_cap_super()
315 d->u.cap.u.super.wSpeedsSupported_lo |= (1 << 3); in usb_desc_cap_super()
316 if (!d->u.cap.u.super.bFunctionalitySupport) { in usb_desc_cap_super()
317 d->u.cap.u.super.bFunctionalitySupport = 3; in usb_desc_cap_super()
333 return -1; in usb_desc_bos()
336 d->bLength = bLength; in usb_desc_bos()
337 d->bDescriptorType = USB_DT_BOS; in usb_desc_bos()
341 if (desc->high != NULL) { in usb_desc_bos()
343 len - wTotalLength); in usb_desc_bos()
351 if (desc->super != NULL) { in usb_desc_bos()
353 len - wTotalLength); in usb_desc_bos()
361 d->u.bos.wTotalLength_lo = usb_lo(wTotalLength); in usb_desc_bos()
362 d->u.bos.wTotalLength_hi = usb_hi(wTotalLength); in usb_desc_bos()
363 d->u.bos.bNumDeviceCaps = bNumDeviceCaps; in usb_desc_bos()
367 /* ------------------------------------------------------------------ */
375 for (i = 0; i < dev->ninterfaces; i++) { in usb_desc_ep_init()
376 iface = dev->ifaces[i]; in usb_desc_ep_init()
380 for (e = 0; e < iface->bNumEndpoints; e++) { in usb_desc_ep_init()
381 pid = (iface->eps[e].bEndpointAddress & USB_DIR_IN) ? in usb_desc_ep_init()
383 ep = iface->eps[e].bEndpointAddress & 0x0f; in usb_desc_ep_init()
384 usb_ep_set_type(dev, pid, ep, iface->eps[e].bmAttributes & 0x03); in usb_desc_ep_init()
385 usb_ep_set_ifnum(dev, pid, ep, iface->bInterfaceNumber); in usb_desc_ep_init()
387 iface->eps[e].wMaxPacketSize); in usb_desc_ep_init()
389 iface->eps[e].bmAttributes_super); in usb_desc_ep_init()
400 if (!dev->config) { in usb_desc_find_interface()
403 for (g = 0; g < dev->config->nif_groups; g++) { in usb_desc_find_interface()
404 for (i = 0; i < dev->config->if_groups[g].nif; i++) { in usb_desc_find_interface()
405 iface = &dev->config->if_groups[g].ifs[i]; in usb_desc_find_interface()
406 if (iface->bInterfaceNumber == nif && in usb_desc_find_interface()
407 iface->bAlternateSetting == alt) { in usb_desc_find_interface()
412 for (i = 0; i < dev->config->nif; i++) { in usb_desc_find_interface()
413 iface = &dev->config->ifs[i]; in usb_desc_find_interface()
414 if (iface->bInterfaceNumber == nif && in usb_desc_find_interface()
415 iface->bAlternateSetting == alt) { in usb_desc_find_interface()
429 return -1; in usb_desc_set_interface()
432 old = dev->altsetting[index]; in usb_desc_set_interface()
433 dev->altsetting[index] = value; in usb_desc_set_interface()
434 dev->ifaces[index] = iface; in usb_desc_set_interface()
448 dev->configuration = 0; in usb_desc_set_config()
449 dev->ninterfaces = 0; in usb_desc_set_config()
450 dev->config = NULL; in usb_desc_set_config()
452 for (i = 0; i < dev->device->bNumConfigurations; i++) { in usb_desc_set_config()
453 if (dev->device->confs[i].bConfigurationValue == value) { in usb_desc_set_config()
454 dev->configuration = value; in usb_desc_set_config()
455 dev->ninterfaces = dev->device->confs[i].bNumInterfaces; in usb_desc_set_config()
456 dev->config = dev->device->confs + i; in usb_desc_set_config()
457 assert(dev->ninterfaces <= USB_MAX_INTERFACES); in usb_desc_set_config()
460 if (i < dev->device->bNumConfigurations) { in usb_desc_set_config()
461 return -1; in usb_desc_set_config()
465 for (i = 0; i < dev->ninterfaces; i++) { in usb_desc_set_config()
469 dev->altsetting[i] = 0; in usb_desc_set_config()
470 dev->ifaces[i] = NULL; in usb_desc_set_config()
481 switch (dev->speed) { in usb_desc_setdefaults()
484 dev->device = desc->full; in usb_desc_setdefaults()
487 dev->device = desc->high; in usb_desc_setdefaults()
490 dev->device = desc->super; in usb_desc_setdefaults()
501 dev->speed = USB_SPEED_FULL; in usb_desc_init()
502 dev->speedmask = 0; in usb_desc_init()
503 if (desc->full) { in usb_desc_init()
504 dev->speedmask |= USB_SPEED_MASK_FULL; in usb_desc_init()
506 if (desc->high) { in usb_desc_init()
507 dev->speedmask |= USB_SPEED_MASK_HIGH; in usb_desc_init()
509 if (desc->super) { in usb_desc_init()
510 dev->speedmask |= USB_SPEED_MASK_SUPER; in usb_desc_init()
512 if (desc->msos && (dev->flags & (1 << USB_DEV_FLAG_MSOS_DESC_ENABLE))) { in usb_desc_init()
513 dev->flags |= (1 << USB_DEV_FLAG_MSOS_DESC_IN_USE); in usb_desc_init()
528 QLIST_FOREACH(s, &dev->strings, next) { in usb_desc_set_string()
529 if (s->index == index) { in usb_desc_set_string()
535 s->index = index; in usb_desc_set_string()
536 QLIST_INSERT_HEAD(&dev->strings, s, next); in usb_desc_set_string()
538 g_free(s->str); in usb_desc_set_string()
539 s->str = g_strdup(str); in usb_desc_set_string()
549 * from it. It has three pieces: First a fixed, device-specific
552 * Results in serial numbers like this: "314159-0000:00:1d.7-3".
556 DeviceState *hcd = dev->qdev.parent_bus->parent; in usb_desc_create_serial()
558 int index = desc->id.iSerialNumber; in usb_desc_create_serial()
561 if (dev->serial) { in usb_desc_create_serial()
563 usb_desc_set_string(dev, index, dev->serial); in usb_desc_create_serial()
567 assert(index != 0 && desc->str[index] != NULL); in usb_desc_create_serial()
570 serial = g_strdup_printf("%s-%s-%s", desc->str[index], in usb_desc_create_serial()
571 path, dev->port->path); in usb_desc_create_serial()
573 serial = g_strdup_printf("%s-%s", desc->str[index], dev->port->path); in usb_desc_create_serial()
584 QLIST_FOREACH(s, &dev->strings, next) { in usb_desc_get_string()
585 if (s->index == index) { in usb_desc_get_string()
586 return s->str; in usb_desc_get_string()
598 return -1; in usb_desc_string()
612 str = usb_device_get_usb_desc(dev)->str[index]; in usb_desc_string()
632 bool msos = (dev->flags & (1 << USB_DEV_FLAG_MSOS_DESC_IN_USE)); in usb_desc_get_descriptor()
639 int flags, ret = -1; in usb_desc_get_descriptor()
641 if (dev->speed == USB_SPEED_HIGH) { in usb_desc_get_descriptor()
642 other_dev = usb_device_get_usb_desc(dev)->full; in usb_desc_get_descriptor()
644 other_dev = usb_device_get_usb_desc(dev)->high; in usb_desc_get_descriptor()
648 if (dev->device->bcdUSB >= 0x0300) { in usb_desc_get_descriptor()
654 ret = usb_desc_device(&desc->id, dev->device, msos, buf, buflen); in usb_desc_get_descriptor()
655 trace_usb_desc_device(dev->addr, len, ret); in usb_desc_get_descriptor()
658 if (index < dev->device->bNumConfigurations) { in usb_desc_get_descriptor()
659 ret = usb_desc_config(dev->device->confs + index, flags, in usb_desc_get_descriptor()
662 trace_usb_desc_config(dev->addr, index, len, ret); in usb_desc_get_descriptor()
666 trace_usb_desc_string(dev->addr, index, len, ret); in usb_desc_get_descriptor()
672 trace_usb_desc_device_qualifier(dev->addr, len, ret); in usb_desc_get_descriptor()
675 if (other_dev != NULL && index < other_dev->bNumConfigurations) { in usb_desc_get_descriptor()
676 ret = usb_desc_config(other_dev->confs + index, flags, in usb_desc_get_descriptor()
680 trace_usb_desc_other_speed_config(dev->addr, index, len, ret); in usb_desc_get_descriptor()
684 trace_usb_desc_bos(dev->addr, len, ret); in usb_desc_get_descriptor()
693 dev->addr, type, len); in usb_desc_get_descriptor()
702 p->actual_length = ret; in usb_desc_get_descriptor()
711 bool msos = (dev->flags & (1 << USB_DEV_FLAG_MSOS_DESC_IN_USE)); in usb_desc_handle_control()
713 int ret = -1; in usb_desc_handle_control()
718 dev->addr = value; in usb_desc_handle_control()
719 trace_usb_set_addr(dev->addr); in usb_desc_handle_control()
732 data[0] = dev->config ? dev->config->bConfigurationValue : 0; in usb_desc_handle_control()
733 p->actual_length = 1; in usb_desc_handle_control()
738 trace_usb_set_config(dev->addr, value, ret); in usb_desc_handle_control()
742 const USBDescConfig *config = dev->config ? in usb_desc_handle_control()
743 dev->config : &dev->device->confs[0]; in usb_desc_handle_control()
752 if (config->bmAttributes & USB_CFG_ATT_SELFPOWER) { in usb_desc_handle_control()
755 if (dev->remote_wakeup) { in usb_desc_handle_control()
759 p->actual_length = 2; in usb_desc_handle_control()
765 dev->remote_wakeup = 0; in usb_desc_handle_control()
768 trace_usb_clear_device_feature(dev->addr, value, ret); in usb_desc_handle_control()
772 dev->remote_wakeup = 1; in usb_desc_handle_control()
775 trace_usb_set_device_feature(dev->addr, value, ret); in usb_desc_handle_control()
780 if (dev->speed == USB_SPEED_SUPER) { in usb_desc_handle_control()
786 if (index < 0 || index >= dev->ninterfaces) { in usb_desc_handle_control()
789 data[0] = dev->altsetting[index]; in usb_desc_handle_control()
790 p->actual_length = 1; in usb_desc_handle_control()
795 trace_usb_set_interface(dev->addr, index, value, ret); in usb_desc_handle_control()
801 trace_usb_desc_msos(dev->addr, index, length, ret); in usb_desc_handle_control()
807 trace_usb_desc_msos(dev->addr, index, length, ret); in usb_desc_handle_control()