Changes in uspace/drv/vhc/hub/virthubops.c [6cb58e6:bd8c753d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/vhc/hub/virthubops.c
r6cb58e6 rbd8c753d 35 35 #include <errno.h> 36 36 #include <usb/classes/hub.h> 37 #include <usbvirt/device.h>38 37 #include "virthub.h" 39 38 #include "hub.h" 40 39 41 40 /** Callback when device changes states. */ 42 static void on_state_change( usbvirt_device_t*dev,41 static void on_state_change(struct usbvirt_device *dev, 43 42 usbvirt_device_state_t old_state, usbvirt_device_state_t new_state) 44 43 { … … 62 61 63 62 /** Callback for data request. */ 64 static int req_on_ status_change_pipe(usbvirt_device_t*dev,65 usb_endpoint_t endpoint, usb_transfer_type_t tr_type,66 void *buffer, size_t buffer_size, size_t *actual_size)63 static int req_on_data(struct usbvirt_device *dev, 64 usb_endpoint_t endpoint, 65 void *buffer, size_t size, size_t *actual_size) 67 66 { 68 67 if (endpoint != HUB_STATUS_CHANGE_PIPE) { 69 return ESTALL; 70 } 71 if (tr_type != USB_TRANSFER_INTERRUPT) { 72 return ESTALL; 68 return EINVAL; 73 69 } 74 70 75 hub_t *hub = dev->device_data;71 hub_t *hub = (hub_t *)dev->device_data; 76 72 77 73 hub_acquire(hub); 78 74 79 if (!hub->signal_changes) {80 hub_release(hub);81 82 return ENAK;83 }84 85 86 75 uint8_t change_map = hub_get_status_change_bitmap(hub); 87 76 88 77 uint8_t *b = (uint8_t *) buffer; 89 if ( buffer_size > 0) {78 if (size > 0) { 90 79 *b = change_map; 91 80 *actual_size = 1; 92 } else {93 *actual_size = 0;94 81 } 95 82 96 hub->signal_changes = false;97 98 83 hub_release(hub); 99 84 … … 109 94 */ 110 95 static int req_clear_hub_feature(usbvirt_device_t *dev, 111 const usb_device_request_setup_packet_t *request, uint8_t *data,112 size_t *act_size)96 usb_device_request_setup_packet_t *request, 97 uint8_t *data) 113 98 { 114 99 return ENOTSUP; … … 123 108 */ 124 109 static int req_clear_port_feature(usbvirt_device_t *dev, 125 const usb_device_request_setup_packet_t *request, uint8_t *data,126 size_t *act_size)110 usb_device_request_setup_packet_t *request, 111 uint8_t *data) 127 112 { 128 113 int rc; … … 203 188 */ 204 189 static int req_get_bus_state(usbvirt_device_t *dev, 205 const usb_device_request_setup_packet_t *request, uint8_t *data,206 size_t *act_size)190 usb_device_request_setup_packet_t *request, 191 uint8_t *data) 207 192 { 208 193 return ENOTSUP; … … 217 202 */ 218 203 static int req_get_descriptor(usbvirt_device_t *dev, 219 const usb_device_request_setup_packet_t *request, uint8_t *data,220 size_t *act_size)204 usb_device_request_setup_packet_t *request, 205 uint8_t *data) 221 206 { 222 207 if (request->value_high == USB_DESCTYPE_HUB) { 223 usbvirt_control_reply_helper(request, data, act_size,208 int rc = dev->control_transfer_reply(dev, 0, 224 209 &hub_descriptor, hub_descriptor.length); 225 210 226 return EOK;211 return rc; 227 212 } 228 213 /* Let the framework handle all the rest. */ … … 238 223 */ 239 224 static int req_get_hub_status(usbvirt_device_t *dev, 240 const usb_device_request_setup_packet_t *request, uint8_t *data,241 size_t *act_size)225 usb_device_request_setup_packet_t *request, 226 uint8_t *data) 242 227 { 243 228 uint32_t hub_status = 0; 244 229 245 usbvirt_control_reply_helper(request, data, act_size,230 return dev->control_transfer_reply(dev, 0, 246 231 &hub_status, sizeof(hub_status)); 247 248 return EOK;249 232 } 250 233 … … 257 240 */ 258 241 static int req_get_port_status(usbvirt_device_t *dev, 259 const usb_device_request_setup_packet_t *request, uint8_t *data,260 size_t *act_size)242 usb_device_request_setup_packet_t *request, 243 uint8_t *data) 261 244 { 262 245 hub_t *hub = (hub_t *) dev->device_data; … … 268 251 hub_release(hub); 269 252 270 usbvirt_control_reply_helper(request, data, act_size, 271 &status, sizeof(status)); 272 273 return EOK; 253 return dev->control_transfer_reply(dev, 0, &status, 4); 274 254 } 275 255 … … 282 262 */ 283 263 static int req_set_hub_feature(usbvirt_device_t *dev, 284 const usb_device_request_setup_packet_t *request, uint8_t *data,285 size_t *act_size)264 usb_device_request_setup_packet_t *request, 265 uint8_t *data) 286 266 { 287 267 return ENOTSUP; … … 296 276 */ 297 277 static int req_set_port_feature(usbvirt_device_t *dev, 298 const usb_device_request_setup_packet_t *request, uint8_t *data,299 size_t *act_size)278 usb_device_request_setup_packet_t *request, 279 uint8_t *data) 300 280 { 301 281 int rc; … … 350 330 351 331 /** Recipient: other. */ 352 #define REC_OTHER USB _REQUEST_RECIPIENT_OTHER332 #define REC_OTHER USBVIRT_REQUEST_RECIPIENT_OTHER 353 333 /** Recipient: device. */ 354 #define REC_DEVICE USB _REQUEST_RECIPIENT_DEVICE334 #define REC_DEVICE USBVIRT_REQUEST_RECIPIENT_DEVICE 355 335 /** Direction: in. */ 356 336 #define DIR_IN USB_DIRECTION_IN … … 358 338 #define DIR_OUT USB_DIRECTION_OUT 359 339 360 361 340 /** Create a class request. 362 341 * … … 366 345 */ 367 346 #define CLASS_REQ(direction, recipient, req) \ 368 .req_direction = direction, \ 369 .req_recipient = recipient, \ 370 .req_type = USB_REQUEST_TYPE_CLASS, \ 347 .request_type = USBVIRT_MAKE_CONTROL_REQUEST_TYPE(direction, \ 348 USBVIRT_REQUEST_TYPE_CLASS, recipient), \ 371 349 .request = req 372 350 … … 378 356 */ 379 357 #define STD_REQ(direction, recipient, req) \ 380 .req_direction = direction, \ 381 .req_recipient = recipient, \ 382 .req_type = USB_REQUEST_TYPE_STANDARD, \ 358 .request_type = USBVIRT_MAKE_CONTROL_REQUEST_TYPE(direction, \ 359 USBVIRT_REQUEST_TYPE_STANDARD, recipient), \ 383 360 .request = req 384 361 385 362 /** Hub operations on control endpoint zero. */ 386 static usbvirt_control_ request_handler_t endpoint_zero_handlers[] = {363 static usbvirt_control_transfer_handler_t endpoint_zero_handlers[] = { 387 364 { 388 365 STD_REQ(DIR_IN, REC_DEVICE, USB_DEVREQ_GET_DESCRIPTOR), … … 440 417 .callback = req_set_port_feature 441 418 }, 442 { 443 .callback = NULL 444 } 419 USBVIRT_CONTROL_TRANSFER_HANDLER_LAST 445 420 }; 446 421 … … 448 423 /** Hub operations. */ 449 424 usbvirt_device_ops_t hub_ops = { 450 .control = endpoint_zero_handlers, 451 .data_in[HUB_STATUS_CHANGE_PIPE] = req_on_status_change_pipe, 452 .state_changed = on_state_change, 425 .control_transfer_handlers = endpoint_zero_handlers, 426 .on_data = NULL, 427 .on_data_request = req_on_data, 428 .on_state_change = on_state_change, 453 429 }; 454 430
Note:
See TracChangeset
for help on using the changeset viewer.