Changes in uspace/lib/drv/generic/remote_usbhc.c [9753220:f841608] in mainline
- File:
-
- 1 edited
-
uspace/lib/drv/generic/remote_usbhc.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/remote_usbhc.c
r9753220 rf841608 1 1 /* 2 * Copyright (c) 2010 -2011Vojtech Horky2 * Copyright (c) 2010 Vojtech Horky 3 3 * All rights reserved. 4 4 * … … 52 52 static void remote_usbhc_control_read_data(device_t *, void *, ipc_callid_t, ipc_call_t *); 53 53 static void remote_usbhc_control_read_status(device_t *, void *, ipc_callid_t, ipc_call_t *); 54 static void remote_usbhc_control_write(device_t *, void *, ipc_callid_t, ipc_call_t *);55 static void remote_usbhc_control_read(device_t *, void *, ipc_callid_t, ipc_call_t *);56 54 static void remote_usbhc_reserve_default_address(device_t *, void *, ipc_callid_t, ipc_call_t *); 57 55 static void remote_usbhc_release_default_address(device_t *, void *, ipc_callid_t, ipc_call_t *); … … 83 81 remote_usbhc_control_read_setup, 84 82 remote_usbhc_control_read_data, 85 remote_usbhc_control_read_status, 86 87 remote_usbhc_control_write, 88 remote_usbhc_control_read 83 remote_usbhc_control_read_status 89 84 }; 90 85 … … 100 95 ipc_callid_t caller; 101 96 void *buffer; 102 void *setup_packet;103 97 size_t size; 104 98 } async_transaction_t; … … 303 297 trans->caller = callid; 304 298 trans->buffer = buffer; 305 trans->setup_packet = NULL;306 299 trans->size = len; 307 300 … … 343 336 trans->caller = callid; 344 337 trans->buffer = malloc(len); 345 trans->setup_packet = NULL;346 338 trans->size = len; 347 339 … … 399 391 trans->caller = callid; 400 392 trans->buffer = NULL; 401 trans->setup_packet = NULL;402 393 trans->size = 0; 403 394 … … 505 496 } 506 497 507 void remote_usbhc_control_write(device_t *device, void *iface,508 ipc_callid_t callid, ipc_call_t *call)509 {510 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;511 assert(usb_iface != NULL);512 513 if (!usb_iface->control_write) {514 ipc_answer_0(callid, ENOTSUP);515 return;516 }517 518 usb_target_t target = {519 .address = DEV_IPC_GET_ARG1(*call),520 .endpoint = DEV_IPC_GET_ARG2(*call)521 };522 523 int rc;524 525 void *setup_packet = NULL;526 void *data_buffer = NULL;527 size_t setup_packet_len = 0;528 size_t data_buffer_len = 0;529 530 rc = async_data_write_accept(&setup_packet, false,531 1, USB_MAX_PAYLOAD_SIZE, 0, &setup_packet_len);532 if (rc != EOK) {533 ipc_answer_0(callid, rc);534 return;535 }536 rc = async_data_write_accept(&data_buffer, false,537 1, USB_MAX_PAYLOAD_SIZE, 0, &data_buffer_len);538 if (rc != EOK) {539 free(setup_packet);540 ipc_answer_0(callid, rc);541 return;542 }543 544 async_transaction_t *trans = malloc(sizeof(async_transaction_t));545 trans->caller = callid;546 trans->setup_packet = setup_packet;547 trans->buffer = data_buffer;548 trans->size = data_buffer_len;549 550 rc = usb_iface->control_write(device, target,551 setup_packet, setup_packet_len,552 data_buffer, data_buffer_len,553 callback_out, trans);554 555 if (rc != EOK) {556 ipc_answer_0(callid, rc);557 free(setup_packet);558 free(data_buffer);559 free(trans);560 }561 }562 563 564 void remote_usbhc_control_read(device_t *device, void *iface,565 ipc_callid_t callid, ipc_call_t *call)566 {567 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;568 assert(usb_iface != NULL);569 570 if (!usb_iface->control_read) {571 ipc_answer_0(callid, ENOTSUP);572 return;573 }574 575 size_t data_len = DEV_IPC_GET_ARG3(*call);576 usb_target_t target = {577 .address = DEV_IPC_GET_ARG1(*call),578 .endpoint = DEV_IPC_GET_ARG2(*call)579 };580 581 int rc;582 583 void *setup_packet = NULL;584 size_t setup_packet_len = 0;585 586 rc = async_data_write_accept(&setup_packet, false,587 1, USB_MAX_PAYLOAD_SIZE, 0, &setup_packet_len);588 if (rc != EOK) {589 ipc_answer_0(callid, rc);590 return;591 }592 593 async_transaction_t *trans = malloc(sizeof(async_transaction_t));594 trans->caller = callid;595 trans->setup_packet = setup_packet;596 trans->buffer = malloc(data_len);597 trans->size = data_len;598 599 rc = usb_iface->control_read(device, target,600 setup_packet, setup_packet_len,601 trans->buffer, trans->size,602 callback_in, trans);603 604 if (rc != EOK) {605 ipc_answer_0(callid, rc);606 free(setup_packet);607 free(trans->buffer);608 free(trans);609 }610 }611 612 498 613 499
Note:
See TracChangeset
for help on using the changeset viewer.
