Changes in uspace/lib/usbvirt/src/ctrltransfer.c [81da273b:9d58539] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbvirt/src/ctrltransfer.c
r81da273b r9d58539 50 50 */ 51 51 int process_control_transfer(usbvirt_device_t *dev, 52 constusbvirt_control_request_handler_t *control_handlers,53 constusb_device_request_setup_packet_t *setup,52 usbvirt_control_request_handler_t *control_handlers, 53 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 const usbvirt_control_request_handler_t *handler = control_handlers; 63 for (;handler->callback != NULL; ++handler) { 64 if (handler->request != setup->request || 65 handler->request_type != setup->request_type) { 66 continue; 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; 67 81 } 68 82 … … 70 84 usb_debug_str_buffer((uint8_t*) setup, sizeof(*setup), 0)); 71 85 int rc = handler->callback(dev, setup, data, data_sent_size); 72 if (rc != EFORWARD) {73 return rc;86 if (rc == EFORWARD) { 87 goto next; 74 88 } 75 89 90 return rc; 91 92 next: 93 handler++; 76 94 } 77 95
Note:
See TracChangeset
for help on using the changeset viewer.