Lines Matching +full:dp +full:- +full:usb

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
46 #include "usb.h"
55 ent->next = begin; \
56 ent->next->prev = ent; \
58 ent->next = NULL; \
60 ent->prev = NULL; \
66 if (ent->prev) { \
67 ent->prev->next = ent->next; \
69 begin = ent->next; \
71 if (ent->next) { \
72 ent->next->prev = ent->prev; \
74 ent->prev = NULL; \
75 ent->next = NULL; \
81 .dirname = {"/dev/usb"},
160 err = libusb20_dev_open(dev->dev, 16 * 2); in usb_open()
163 * Workaround buggy USB applications which open the USB in usb_open()
166 return (dev->dev); in usb_open()
172 * Dequeue USB device from backend queue so that it does not get in usb_open()
173 * freed when the backend is re-scanned: in usb_open()
175 libusb20_be_dequeue_device(usb_backend, dev->dev); in usb_open()
177 return (dev->dev); in usb_open()
189 return (-1); in usb_close()
193 * Enqueue USB device to backend queue so that it gets freed in usb_close()
194 * when the backend is re-scanned: in usb_close()
217 return (-1); in usb_get_string()
226 return (-1); in usb_get_string()
238 return (-1); in usb_get_string_simple()
247 return (-1); in usb_get_string_simple()
259 return (-1); in usb_get_descriptor_by_endpoint()
276 return (-1); in usb_get_descriptor()
289 uint8_t *dp = dest; in usb_parse_descriptor() local
296 case 'b': /* 8-bit byte */ in usb_parse_descriptor()
297 *dp++ = *sp++; in usb_parse_descriptor()
300 * 16-bit word, convert from little endian to CPU in usb_parse_descriptor()
306 dp += ((dp - (uint8_t *)0) & 1); in usb_parse_descriptor()
307 *((uint16_t *)dp) = w; in usb_parse_descriptor()
308 dp += 2; in usb_parse_descriptor()
311 * 32-bit dword, convert from little endian to CPU in usb_parse_descriptor()
318 dp += ((dp - (uint8_t *)0) & 1); in usb_parse_descriptor()
320 dp += ((dp - (uint8_t *)0) & 2); in usb_parse_descriptor()
321 *((uint32_t *)dp) = d; in usb_parse_descriptor()
322 dp += 4; in usb_parse_descriptor()
326 return (sp - source); in usb_parse_descriptor()
335 ptr = ps->a.currextra->ptr; in usb_parse_extra()
336 len = ps->a.currextra->len; in usb_parse_extra()
338 if (ps->preparse == 0) { in usb_parse_extra()
339 memcpy(ps->b.currextra, ptr, len); in usb_parse_extra()
340 *pptr = ps->b.currextra; in usb_parse_extra()
343 ps->b.currextra += len; in usb_parse_extra()
353 aep = ps->a.currep; in usb_parse_endpoint()
354 bep = ps->b.currep++; in usb_parse_endpoint()
356 if (ps->preparse == 0) { in usb_parse_endpoint()
358 bep->bLength = aep->desc.bLength; in usb_parse_endpoint()
359 bep->bDescriptorType = aep->desc.bDescriptorType; in usb_parse_endpoint()
360 bep->bEndpointAddress = aep->desc.bEndpointAddress; in usb_parse_endpoint()
361 bep->bmAttributes = aep->desc.bmAttributes; in usb_parse_endpoint()
362 bep->wMaxPacketSize = aep->desc.wMaxPacketSize; in usb_parse_endpoint()
363 bep->bInterval = aep->desc.bInterval; in usb_parse_endpoint()
364 bep->bRefresh = aep->desc.bRefresh; in usb_parse_endpoint()
365 bep->bSynchAddress = aep->desc.bSynchAddress; in usb_parse_endpoint()
367 ps->a.currextra = &aep->extra; in usb_parse_endpoint()
368 usb_parse_extra(ps, &bep->extra, &bep->extralen); in usb_parse_endpoint()
379 aifc = ps->a.currifc; in usb_parse_iface_sub()
380 bifc = ps->b.currifc++; in usb_parse_iface_sub()
382 if (ps->preparse == 0) { in usb_parse_iface_sub()
384 bifc->bLength = aifc->desc.bLength; in usb_parse_iface_sub()
385 bifc->bDescriptorType = aifc->desc.bDescriptorType; in usb_parse_iface_sub()
386 bifc->bInterfaceNumber = aifc->desc.bInterfaceNumber; in usb_parse_iface_sub()
387 bifc->bAlternateSetting = aifc->desc.bAlternateSetting; in usb_parse_iface_sub()
388 bifc->bNumEndpoints = aifc->num_endpoints; in usb_parse_iface_sub()
389 bifc->bInterfaceClass = aifc->desc.bInterfaceClass; in usb_parse_iface_sub()
390 bifc->bInterfaceSubClass = aifc->desc.bInterfaceSubClass; in usb_parse_iface_sub()
391 bifc->bInterfaceProtocol = aifc->desc.bInterfaceProtocol; in usb_parse_iface_sub()
392 bifc->iInterface = aifc->desc.iInterface; in usb_parse_iface_sub()
393 bifc->endpoint = ps->b.currep; in usb_parse_iface_sub()
395 for (x = 0; x != aifc->num_endpoints; x++) { in usb_parse_iface_sub()
396 ps->a.currep = aifc->endpoints + x; in usb_parse_iface_sub()
400 ps->a.currextra = &aifc->extra; in usb_parse_iface_sub()
401 usb_parse_extra(ps, &bifc->extra, &bifc->extralen); in usb_parse_iface_sub()
412 aifc = ps->a.currifc; in usb_parse_iface()
413 bifc = ps->b.currifcw++; in usb_parse_iface()
415 if (ps->preparse == 0) { in usb_parse_iface()
417 bifc->altsetting = ps->b.currifc; in usb_parse_iface()
418 bifc->num_altsetting = aifc->num_altsetting + 1; in usb_parse_iface()
422 for (x = 0; x != aifc->num_altsetting; x++) { in usb_parse_iface()
423 ps->a.currifc = aifc->altsetting + x; in usb_parse_iface()
436 acfg = ps->a.currcfg; in usb_parse_config()
437 bcfg = ps->b.currcfg; in usb_parse_config()
439 if (ps->preparse == 0) { in usb_parse_config()
441 bcfg->bLength = acfg->desc.bLength; in usb_parse_config()
442 bcfg->bDescriptorType = acfg->desc.bDescriptorType; in usb_parse_config()
443 bcfg->wTotalLength = acfg->desc.wTotalLength; in usb_parse_config()
444 bcfg->bNumInterfaces = acfg->num_interface; in usb_parse_config()
445 bcfg->bConfigurationValue = acfg->desc.bConfigurationValue; in usb_parse_config()
446 bcfg->iConfiguration = acfg->desc.iConfiguration; in usb_parse_config()
447 bcfg->bmAttributes = acfg->desc.bmAttributes; in usb_parse_config()
448 bcfg->MaxPower = acfg->desc.bMaxPower; in usb_parse_config()
449 bcfg->interface = ps->b.currifcw; in usb_parse_config()
451 for (x = 0; x != acfg->num_interface; x++) { in usb_parse_config()
452 ps->a.currifc = acfg->interface + x; in usb_parse_config()
456 ps->a.currextra = &acfg->extra; in usb_parse_config()
457 usb_parse_extra(ps, &bcfg->extra, &bcfg->extralen); in usb_parse_config()
473 return (-1); in usb_parse_configuration()
481 return (-1); in usb_parse_configuration()
483 /* do the pre-parse */ in usb_parse_configuration()
487 a = ((uint8_t *)(ps.b.currifcw) - ((uint8_t *)0)); in usb_parse_configuration()
488 b = ((uint8_t *)(ps.b.currifc) - ((uint8_t *)0)); in usb_parse_configuration()
489 c = ((uint8_t *)(ps.b.currep) - ((uint8_t *)0)); in usb_parse_configuration()
490 d = ((uint8_t *)(ps.b.currextra) - ((uint8_t *)0)); in usb_parse_configuration()
497 return (-1); in usb_parse_configuration()
521 if (dev->config == NULL) { in usb_destroy_configuration()
524 for (c = 0; c != dev->descriptor.bNumConfigurations; c++) { in usb_destroy_configuration()
525 struct usb_config_descriptor *cf = &dev->config[c]; in usb_destroy_configuration()
527 if (cf->interface != NULL) { in usb_destroy_configuration()
528 free(cf->interface); in usb_destroy_configuration()
529 cf->interface = NULL; in usb_destroy_configuration()
533 free(dev->config); in usb_destroy_configuration()
534 dev->config = NULL; in usb_destroy_configuration()
556 if (dev->descriptor.bNumConfigurations == 0) { in usb_fetch_and_parse_descriptors()
560 size = dev->descriptor.bNumConfigurations * in usb_fetch_and_parse_descriptors()
563 dev->config = malloc(size); in usb_fetch_and_parse_descriptors()
564 if (dev->config == NULL) { in usb_fetch_and_parse_descriptors()
568 memset(dev->config, 0, size); in usb_fetch_and_parse_descriptors()
570 for (x = 0; x != dev->descriptor.bNumConfigurations; x++) { in usb_fetch_and_parse_descriptors()
572 error = (pdev->methods->get_config_desc_full) ( in usb_fetch_and_parse_descriptors()
579 usb_parse_configuration(dev->config + x, ptr); in usb_fetch_and_parse_descriptors()
599 return (-1); in usb_std_io()
603 return (-1); in usb_std_io()
610 * equivalent to a zero length USB packet. in usb_std_io()
630 return (-1); in usb_std_io()
636 /* wait for USB event from kernel */ in usb_std_io()
637 libusb20_dev_wait_process((void *)dev, -1); in usb_std_io()
646 return (-ETIMEDOUT); in usb_std_io()
649 return (-ENXIO); in usb_std_io()
654 size -= actlen; in usb_std_io()
662 return (bytes - oldbytes); in usb_std_io()
717 return (-1); in usb_control_msg()
742 if (dev->config == NULL) { in usb_set_configuration()
743 return (-1); in usb_set_configuration()
746 if (i == dev->descriptor.bNumConfigurations) { in usb_set_configuration()
748 return (-1); in usb_set_configuration()
750 if ((dev->config + i)->bConfigurationValue == in usb_set_configuration()
760 return (-1); in usb_set_configuration()
770 pdev->claimed_interface = interface; in usb_claim_interface()
789 iface = pdev->claimed_interface; in usb_set_altinterface()
794 return (-1); in usb_set_altinterface()
802 /* emulate an endpoint reset through clear-STALL */ in usb_resetep()
813 return (-1); in usb_clear_halt()
828 return (-1); in usb_reset()
845 return (-1); in usb_check_connected()
891 udev = pdev->privLuData; in usb_find_devices()
900 /* free old USB backend, if any */ in usb_find_devices()
907 return (-1); in usb_find_devices()
920 udev->bus = &usb_global_bus; in usb_find_devices()
922 snprintf(udev->filename, sizeof(udev->filename), in usb_find_devices()
929 udev->descriptor.bLength = sizeof(udev->descriptor); in usb_find_devices()
930 udev->descriptor.bDescriptorType = ddesc->bDescriptorType; in usb_find_devices()
931 udev->descriptor.bcdUSB = ddesc->bcdUSB; in usb_find_devices()
932 udev->descriptor.bDeviceClass = ddesc->bDeviceClass; in usb_find_devices()
933 udev->descriptor.bDeviceSubClass = ddesc->bDeviceSubClass; in usb_find_devices()
934 udev->descriptor.bDeviceProtocol = ddesc->bDeviceProtocol; in usb_find_devices()
935 udev->descriptor.bMaxPacketSize0 = ddesc->bMaxPacketSize0; in usb_find_devices()
936 udev->descriptor.idVendor = ddesc->idVendor; in usb_find_devices()
937 udev->descriptor.idProduct = ddesc->idProduct; in usb_find_devices()
938 udev->descriptor.bcdDevice = ddesc->bcdDevice; in usb_find_devices()
939 udev->descriptor.iManufacturer = ddesc->iManufacturer; in usb_find_devices()
940 udev->descriptor.iProduct = ddesc->iProduct; in usb_find_devices()
941 udev->descriptor.iSerialNumber = ddesc->iSerialNumber; in usb_find_devices()
942 udev->descriptor.bNumConfigurations = in usb_find_devices()
943 ddesc->bNumConfigurations; in usb_find_devices()
944 if (udev->descriptor.bNumConfigurations > USB_MAXCONFIG) { in usb_find_devices()
946 udev->descriptor.bNumConfigurations = USB_MAXCONFIG; in usb_find_devices()
948 udev->devnum = devnum++; in usb_find_devices()
950 udev->dev = pdev; in usb_find_devices()
951 pdev->privLuData = udev; in usb_find_devices()
962 return (devnum - 1); /* success */ in usb_find_devices()
972 return (pdev->privLuData); in usb_device()
991 return (-1); in usb_get_driver_np()
993 return (-1); in usb_get_driver_np()
999 return (-1); in usb_get_driver_np()
1018 return (-1); in usb_detach_kernel_driver_np()
1022 return (-1); in usb_detach_kernel_driver_np()