Changes in uspace/lib/usb/src/ddfiface.c [27ed734c:79ae36dd] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/ddfiface.c
r27ed734c r79ae36dd 39 39 #include <usb/hc.h> 40 40 #include <usb/debug.h> 41 #include <usb/dev/hub.h>42 41 #include <errno.h> 43 42 #include <assert.h> 44 43 45 44 /** DDF interface for USB device, implementation for typical hub. */ 46 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,45 usb_iface_t usb_iface_hub_impl = { 46 .get_hc_handle = usb_iface_get_hc_handle_hub_impl, 47 .get_address = usb_iface_get_address_hub_impl 49 48 }; 50 49 51 50 /** DDF interface for USB device, implementation for child of a typical hub. */ 52 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,51 usb_iface_t usb_iface_hub_child_impl = { 52 .get_hc_handle = usb_iface_get_hc_handle_hub_child_impl, 53 .get_address = usb_iface_get_address_hub_child_impl 55 54 }; 56 55 … … 62 61 * @return Error code. 63 62 */ 64 int usb_iface_get_hc_handle_ device_impl(ddf_fun_t *fun, devman_handle_t *handle)63 int usb_iface_get_hc_handle_hub_impl(ddf_fun_t *fun, devman_handle_t *handle) 65 64 { 66 65 assert(fun); 67 66 return usb_hc_find(fun->handle, handle); 67 } 68 69 /** Get host controller handle, interface implementation for child of 70 * 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; 68 101 } 69 102 … … 92 125 * @return Error code. 93 126 */ 94 int usb_iface_get_ my_address_forward_impl(ddf_fun_t *fun,127 int usb_iface_get_address_hub_impl(ddf_fun_t *fun, devman_handle_t handle, 95 128 usb_address_t *address) 96 129 { 97 130 assert(fun); 98 131 99 132 async_sess_t *parent_sess = 100 133 devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle, … … 102 135 if (!parent_sess) 103 136 return ENOMEM; 104 137 105 138 async_exch_t *exch = async_exchange_begin(parent_sess); 106 139 107 140 sysarg_t addr; 108 int rc = async_req_ 1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),109 IPC_M_USB_GET_ MY_ADDRESS, &addr);110 141 int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE), 142 IPC_M_USB_GET_ADDRESS, handle, &addr); 143 111 144 async_exchange_end(exch); 112 145 async_hangup(parent_sess); 113 146 114 147 if (rc != EOK) 115 148 return rc; 116 149 117 150 if (address != NULL) 118 151 *address = (usb_address_t) addr; 119 152 120 153 return EOK; 121 154 } … … 124 157 * a hub driver. 125 158 * 126 * This implementation eccepts 0 as valid handle and replaces it with fun's127 * handle.128 *129 159 * @param[in] fun Device function the operation is running on. 130 160 * @param[in] handle Devman handle of USB device we want address of. … … 132 162 * @return Error code. 133 163 */ 134 int usb_iface_get_ my_address_from_device_data(ddf_fun_t *fun,135 usb_address_t *address)164 int usb_iface_get_address_hub_child_impl(ddf_fun_t *fun, 165 devman_handle_t handle, usb_address_t *address) 136 166 { 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; 167 if (handle == 0) { 168 handle = fun->handle; 169 } 170 return usb_iface_get_address_hub_impl(fun, handle, address); 144 171 } 145 172
Note:
See TracChangeset
for help on using the changeset viewer.