Changeset 7feeb84 in mainline for uspace/lib/usbvirt/src/stdreq.c
- Timestamp:
- 2010-12-13T14:25:49Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 76daaf9f
- Parents:
- 8f8ae1fd
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbvirt/src/stdreq.c
r8f8ae1fd r7feeb84 40 40 #include "private.h" 41 41 42 43 typedef int (*usbvirt_stdreq_handler_t)(usbvirt_device_t *,44 usb_device_request_setup_packet_t *, uint8_t *);45 46 42 /* 47 43 * All sub handlers must return EFORWARD to inform the caller that … … 177 173 } 178 174 179 static usbvirt_stdreq_handler_t local_handlers[USB_DEVREQ_LAST_STD] = { 180 [USB_DEVREQ_GET_DESCRIPTOR] = handle_get_descriptor, 181 [USB_DEVREQ_SET_ADDRESS] = handle_set_address, 182 [USB_DEVREQ_SET_CONFIGURATION] = handle_set_configuration 175 176 #define MAKE_BM_REQUEST(direction, recipient) \ 177 USBVIRT_MAKE_CONTROL_REQUEST_TYPE(direction, \ 178 USBVIRT_REQUEST_TYPE_STANDARD, recipient) 179 #define MAKE_BM_REQUEST_DEV(direction) \ 180 MAKE_BM_REQUEST(direction, USBVIRT_REQUEST_RECIPIENT_DEVICE) 181 182 usbvirt_control_transfer_handler_t control_pipe_zero_local_handlers[] = { 183 { 184 .request_type = MAKE_BM_REQUEST_DEV(USB_DIRECTION_IN), 185 .request = USB_DEVREQ_GET_DESCRIPTOR, 186 .callback = handle_get_descriptor 187 }, 188 { 189 .request_type = MAKE_BM_REQUEST_DEV(USB_DIRECTION_OUT), 190 .request = USB_DEVREQ_SET_ADDRESS, 191 .callback = handle_set_address 192 }, 193 { 194 .request_type = MAKE_BM_REQUEST_DEV(USB_DIRECTION_OUT), 195 .request = USB_DEVREQ_SET_CONFIGURATION, 196 .callback = handle_set_configuration 197 }, 198 USBVIRT_CONTROL_TRANSFER_HANDLER_LAST 183 199 }; 184 185 /** Handle standard device request. */186 int handle_std_request(usbvirt_device_t *device,187 usb_device_request_setup_packet_t *request_packet, uint8_t *data)188 {189 int request = request_packet->request;190 191 device->lib_debug(device, 3, USBVIRT_DEBUGTAG_CONTROL_PIPE_ZERO,192 "handling standard request %d", request);193 194 if (request >= USB_DEVREQ_LAST_STD) {195 return ENOTSUP;196 }197 198 int rc = EFORWARD;199 if ((device->ops)200 && (device->ops->on_standard_request[request])) {201 rc = device->ops->on_standard_request[request](device,202 request_packet, data);203 }204 205 if (rc == EFORWARD) {206 if (local_handlers[request]) {207 rc = local_handlers[request](device,208 request_packet, data);209 } else {210 rc = ENOTSUP;211 }212 }213 214 assert(rc != EFORWARD);215 return rc;216 }217 200 218 201 /**
Note:
See TracChangeset
for help on using the changeset viewer.