Changes in uspace/lib/usb/src/ddfiface.c [79ae36dd:27ed734c] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/ddfiface.c
r79ae36dd r27ed734c 39 39 #include <usb/hc.h> 40 40 #include <usb/debug.h> 41 #include <usb/dev/hub.h> 41 42 #include <errno.h> 42 43 #include <assert.h> 43 44 44 45 /** DDF interface for USB device, implementation for typical hub. */ 45 usb_iface_t 46 .get_hc_handle = usb_iface_get_hc_handle_ hub_impl,47 .get_ address = usb_iface_get_address_hub_impl46 usb_iface_t usb_iface_hub_impl = { 47 .get_hc_handle = usb_iface_get_hc_handle_device_impl, 48 .get_my_address = usb_iface_get_my_address_forward_impl, 48 49 }; 49 50 50 51 /** DDF interface for USB device, implementation for child of a typical hub. */ 51 usb_iface_t 52 .get_hc_handle = usb_iface_get_hc_handle_ hub_child_impl,53 .get_ address = usb_iface_get_address_hub_child_impl52 usb_iface_t usb_iface_hub_child_impl = { 53 .get_hc_handle = usb_iface_get_hc_handle_device_impl, 54 .get_my_address = usb_iface_get_my_address_from_device_data, 54 55 }; 55 56 … … 61 62 * @return Error code. 62 63 */ 63 int usb_iface_get_hc_handle_ hub_impl(ddf_fun_t *fun, devman_handle_t *handle)64 int usb_iface_get_hc_handle_device_impl(ddf_fun_t *fun, devman_handle_t *handle) 64 65 { 65 66 assert(fun); 66 67 return usb_hc_find(fun->handle, handle); 67 }68 69 /** Get host controller handle, interface implementation for child of70 * a hub driver.71 *72 * @param[in] fun Device function the operation is running on.73 * @param[out] handle Storage for the host controller handle.74 * @return Error code.75 */76 int usb_iface_get_hc_handle_hub_child_impl(ddf_fun_t *fun,77 devman_handle_t *handle)78 {79 assert(fun != NULL);80 81 async_sess_t *parent_sess =82 devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle,83 IPC_FLAG_BLOCKING);84 if (!parent_sess)85 return ENOMEM;86 87 async_exch_t *exch = async_exchange_begin(parent_sess);88 89 sysarg_t hc_handle;90 int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),91 IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &hc_handle);92 93 async_exchange_end(exch);94 async_hangup(parent_sess);95 96 if (rc != EOK)97 return rc;98 99 *handle = hc_handle;100 return EOK;101 68 } 102 69 … … 125 92 * @return Error code. 126 93 */ 127 int usb_iface_get_ address_hub_impl(ddf_fun_t *fun, devman_handle_t handle,94 int usb_iface_get_my_address_forward_impl(ddf_fun_t *fun, 128 95 usb_address_t *address) 129 96 { 130 97 assert(fun); 131 98 132 99 async_sess_t *parent_sess = 133 100 devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle, … … 135 102 if (!parent_sess) 136 103 return ENOMEM; 137 104 138 105 async_exch_t *exch = async_exchange_begin(parent_sess); 139 106 140 107 sysarg_t addr; 141 int rc = async_req_ 2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),142 IPC_M_USB_GET_ ADDRESS, handle, &addr);143 108 int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE), 109 IPC_M_USB_GET_MY_ADDRESS, &addr); 110 144 111 async_exchange_end(exch); 145 112 async_hangup(parent_sess); 146 113 147 114 if (rc != EOK) 148 115 return rc; 149 116 150 117 if (address != NULL) 151 118 *address = (usb_address_t) addr; 152 119 153 120 return EOK; 154 121 } … … 157 124 * a hub driver. 158 125 * 126 * This implementation eccepts 0 as valid handle and replaces it with fun's 127 * handle. 128 * 159 129 * @param[in] fun Device function the operation is running on. 160 130 * @param[in] handle Devman handle of USB device we want address of. … … 162 132 * @return Error code. 163 133 */ 164 int usb_iface_get_ address_hub_child_impl(ddf_fun_t *fun,165 devman_handle_t handle,usb_address_t *address)134 int usb_iface_get_my_address_from_device_data(ddf_fun_t *fun, 135 usb_address_t *address) 166 136 { 167 if (handle == 0) { 168 handle = fun->handle; 169 } 170 return usb_iface_get_address_hub_impl(fun, handle, address); 137 assert(fun); 138 assert(fun->driver_data); 139 usb_hub_attached_device_t *device = fun->driver_data; 140 assert(device->fun == fun); 141 if (address) 142 *address = device->address; 143 return EOK; 171 144 } 172 145
Note:
See TracChangeset
for help on using the changeset viewer.