Changes in uspace/lib/usbvirt/src/ctrltransfer.c [9d58539:58563585] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbvirt/src/ctrltransfer.c
r9d58539 r58563585 50 50 */ 51 51 int process_control_transfer(usbvirt_device_t *dev, 52 usbvirt_control_request_handler_t *control_handlers,53 usb_device_request_setup_packet_t *setup,52 const usbvirt_control_request_handler_t *control_handlers, 53 const usb_device_request_setup_packet_t *setup, 54 54 uint8_t *data, size_t *data_sent_size) 55 55 { … … 60 60 return EFORWARD; 61 61 } 62 63 usb_direction_t direction = setup->request_type & 128 ? 64 USB_DIRECTION_IN : USB_DIRECTION_OUT; 65 usb_request_recipient_t req_recipient = setup->request_type & 31; 66 usb_request_type_t req_type = (setup->request_type >> 5) & 3; 67 68 usbvirt_control_request_handler_t *handler = control_handlers; 69 while (handler->callback != NULL) { 70 if (handler->req_direction != direction) { 71 goto next; 72 } 73 if (handler->req_recipient != req_recipient) { 74 goto next; 75 } 76 if (handler->req_type != req_type) { 77 goto next; 78 } 79 if (handler->request != setup->request) { 80 goto next; 62 63 const usbvirt_control_request_handler_t *handler = control_handlers; 64 for (;handler->callback != NULL; ++handler) { 65 if (handler->request != setup->request || 66 handler->request_type != setup->request_type) { 67 continue; 81 68 } 82 69 … … 84 71 usb_debug_str_buffer((uint8_t*) setup, sizeof(*setup), 0)); 85 72 int rc = handler->callback(dev, setup, data, data_sent_size); 86 if (rc == EFORWARD) {87 goto next;73 if (rc != EFORWARD) { 74 return rc; 88 75 } 89 76 90 return rc;91 92 next:93 handler++;94 77 } 95 78
Note:
See TracChangeset
for help on using the changeset viewer.