Changes in uspace/lib/usb/src/usbdrv.c [97e660e:71ed4849] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/usbdrv.c
r97e660e r71ed4849 35 35 #include <usb/usbdrv.h> 36 36 #include <usbhc_iface.h> 37 #include <usb_iface.h> 37 38 #include <errno.h> 38 39 #include <str_error.h> … … 54 55 } transfer_info_t; 55 56 57 /** Find handle of host controller the device is physically attached to. 58 * 59 * @param[in] dev Device looking for its host controller. 60 * @param[out] handle Host controller devman handle. 61 * @return Error code. 62 */ 63 int usb_drv_find_hc(device_t *dev, devman_handle_t *handle) 64 { 65 if (dev == NULL) { 66 return EBADMEM; 67 } 68 if (handle == NULL) { 69 return EBADMEM; 70 } 71 72 int parent_phone = devman_parent_device_connect(dev->handle, 73 IPC_FLAG_BLOCKING); 74 if (parent_phone < 0) { 75 return parent_phone; 76 } 77 78 devman_handle_t h; 79 int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE), 80 IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &h); 81 82 ipc_hangup(parent_phone); 83 84 if (rc != EOK) { 85 return rc; 86 } 87 88 *handle = h; 89 90 return EOK; 91 } 92 93 /** Connect to host controller the device is physically attached to. 94 * 95 * @param dev Device asking for connection. 96 * @param hc_handle Devman handle of the host controller. 97 * @param flags Connection flags (blocking connection). 98 * @return Phone to the HC or error code. 99 */ 100 int usb_drv_hc_connect(device_t *dev, devman_handle_t hc_handle, 101 unsigned int flags) 102 { 103 return devman_device_connect(hc_handle, flags); 104 } 105 56 106 /** Connect to host controller the device is physically attached to. 57 107 * … … 60 110 * @return Phone to corresponding HC or error code. 61 111 */ 62 int usb_drv_hc_connect(device_t *dev, unsigned int flags) 63 { 112 int usb_drv_hc_connect_auto(device_t *dev, unsigned int flags) 113 { 114 int rc; 115 devman_handle_t hc_handle; 116 64 117 /* 65 118 * Call parent hub to obtain device handle of respective HC. 66 119 */ 67 68 /* 69 * FIXME: currently we connect always to virtual host controller. 70 */ 71 int rc; 72 devman_handle_t handle; 73 74 rc = devman_device_get_handle("/virt/usbhc", &handle, flags); 120 rc = usb_drv_find_hc(dev, &hc_handle); 75 121 if (rc != EOK) { 76 122 return rc; 77 123 } 78 124 79 int phone = devman_device_connect(handle, flags); 80 81 return phone; 125 return usb_drv_hc_connect(dev, hc_handle, flags); 82 126 } 83 127 … … 90 134 usb_address_t usb_drv_get_my_address(int phone, device_t *dev) 91 135 { 92 ipcarg_t address;136 sysarg_t address; 93 137 int rc = async_req_2_1(phone, DEV_IFACE_ID(USBHC_DEV_IFACE), 94 138 IPC_M_USBHC_GET_ADDRESS, … … 132 176 usb_address_t usb_drv_request_address(int phone) 133 177 { 134 ipcarg_t address;178 sysarg_t address; 135 179 int rc = async_req_1_1(phone, DEV_IFACE_ID(USBHC_DEV_IFACE), 136 180 IPC_M_USBHC_REQUEST_ADDRESS, &address); … … 298 342 * @return Error status. 299 343 */ 300 static int read_buffer_in(int phone, ipcarg_t hash,344 static int read_buffer_in(int phone, sysarg_t hash, 301 345 void *buffer, size_t size, size_t *actual_size) 302 346 { 303 347 ipc_call_t answer_data; 304 ipcarg_t answer_rc;348 sysarg_t answer_rc; 305 349 aid_t req; 306 350 int rc; … … 350 394 transfer_info_t *transfer = (transfer_info_t *) handle; 351 395 352 ipcarg_t answer_rc;396 sysarg_t answer_rc; 353 397 async_wait_for(transfer->request, &answer_rc); 354 398 … … 367 411 * We will use it when actually reading-in the data. 368 412 */ 369 ipcarg_t buffer_hash = IPC_GET_ARG1(transfer->reply);413 sysarg_t buffer_hash = IPC_GET_ARG1(transfer->reply); 370 414 if (buffer_hash == 0) { 371 415 rc = ENOENT;
Note:
See TracChangeset
for help on using the changeset viewer.