Changeset 00aece0 in mainline for uspace/lib/usb/src/ddfiface.c
- Timestamp:
- 2012-02-18T16:47:38Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4449c6c
- Parents:
- bd5f3b7 (diff), f943dd3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/ddfiface.c
rbd5f3b7 r00aece0 36 36 #include <devman.h> 37 37 #include <async.h> 38 #include <usb_iface.h> 38 39 #include <usb/ddfiface.h> 39 40 #include <usb/hc.h> 40 41 #include <usb/debug.h> 42 #include <usb/dev/hub.h> 41 43 #include <errno.h> 42 44 #include <assert.h> 43 45 46 #include <usb/dev.h> 47 44 48 /** 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_impl49 usb_iface_t usb_iface_hub_impl = { 50 .get_hc_handle = usb_iface_get_hc_handle_device_impl, 51 .get_my_address = usb_iface_get_my_address_forward_impl, 48 52 }; 49 53 50 54 /** 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_impl55 usb_iface_t usb_iface_hub_child_impl = { 56 .get_hc_handle = usb_iface_get_hc_handle_device_impl, 57 .get_my_address = usb_iface_get_my_address_from_device_data, 54 58 }; 55 59 … … 61 65 * @return Error code. 62 66 */ 63 int usb_iface_get_hc_handle_ hub_impl(ddf_fun_t *fun, devman_handle_t *handle)67 int usb_iface_get_hc_handle_device_impl(ddf_fun_t *fun, devman_handle_t *handle) 64 68 { 65 69 assert(fun); 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; 70 return usb_get_hc_by_handle(fun->handle, handle); 101 71 } 102 72 … … 125 95 * @return Error code. 126 96 */ 127 int usb_iface_get_ address_hub_impl(ddf_fun_t *fun, devman_handle_t handle,97 int usb_iface_get_my_address_forward_impl(ddf_fun_t *fun, 128 98 usb_address_t *address) 129 99 { 130 100 assert(fun); 131 132 async_sess_t *parent_sess = 133 devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle, 134 IPC_FLAG_BLOCKING); 135 if (!parent_sess) 136 return ENOMEM; 137 138 async_exch_t *exch = async_exchange_begin(parent_sess); 139 140 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 144 async_exchange_end(exch); 145 async_hangup(parent_sess); 146 147 if (rc != EOK) 148 return rc; 149 150 if (address != NULL) 151 *address = (usb_address_t) addr; 152 153 return EOK; 101 return usb_get_address_by_handle(fun->handle, address); 154 102 } 155 103 156 104 /** Get USB device address, interface implementation for child of 157 105 * a hub driver. 106 * 107 * This implementation eccepts 0 as valid handle and replaces it with fun's 108 * handle. 158 109 * 159 110 * @param[in] fun Device function the operation is running on. … … 162 113 * @return Error code. 163 114 */ 164 int usb_iface_get_ address_hub_child_impl(ddf_fun_t *fun,165 devman_handle_t handle,usb_address_t *address)115 int usb_iface_get_my_address_from_device_data(ddf_fun_t *fun, 116 usb_address_t *address) 166 117 { 167 if (handle == 0) { 168 handle = fun->handle; 169 } 170 return usb_iface_get_address_hub_impl(fun, handle, address); 118 assert(fun); 119 assert(fun->driver_data); 120 const usb_hub_attached_device_t *device = fun->driver_data; 121 assert(device->fun == fun); 122 if (address) 123 *address = device->address; 124 return EOK; 171 125 } 172 126
Note:
See TracChangeset
for help on using the changeset viewer.