Changes in / [edc4c66:a19a2d7] in mainline
- Location:
- uspace
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/ports.c
redc4c66 ra19a2d7 181 181 */ 182 182 } else { 183 // TODO: is this really reason to print a warning? 184 usb_log_warning("Device removed before being registered.\n"); 185 186 /* 187 * Device was removed before port reset completed. 188 * We will announce a failed port reset to unblock the 189 * port reset callback from new device wrapper. 190 */ 191 usb_hub_port_t *the_port = hub->ports + port; 192 fibril_mutex_lock(&the_port->reset_mutex); 193 the_port->reset_completed = true; 194 the_port->reset_okay = false; 195 fibril_condvar_broadcast(&the_port->reset_cv); 196 fibril_mutex_unlock(&the_port->reset_mutex); 183 usb_log_warning("this is strange, disconnected device had " 184 "no address\n"); 185 //device was disconnected before it`s port was reset - 186 //return default address 187 usb_hub_release_default_address(hub); 197 188 } 198 189 } … … 216 207 fibril_mutex_lock(&the_port->reset_mutex); 217 208 the_port->reset_completed = true; 218 the_port->reset_okay = true;219 209 fibril_condvar_broadcast(&the_port->reset_cv); 220 210 fibril_mutex_unlock(&the_port->reset_mutex); … … 329 319 } 330 320 331 if (my_port->reset_okay) { 332 return EOK; 333 } else { 334 return ESTALL; 335 } 321 return EOK; 336 322 } 337 323 -
uspace/drv/usbhub/ports.h
redc4c66 ra19a2d7 51 51 */ 52 52 bool reset_completed; 53 /** Whether to announce the port reset as successful. */54 bool reset_okay;55 53 56 54 /** Information about attached device. */ -
uspace/drv/usbhub/usbhub.c
redc4c66 ra19a2d7 177 177 178 178 return true; 179 } 180 181 /** 182 * release default address used by given hub 183 * 184 * Also unsets hub->is_default_address_used. Convenience wrapper function. 185 * @note hub->connection MUST be open for communication 186 * @param hub hub representation 187 * @return error code 188 */ 189 int usb_hub_release_default_address(usb_hub_info_t * hub) { 190 int opResult = usb_hc_release_default_address(&hub->connection); 191 if (opResult != EOK) { 192 usb_log_error("could not release default address, errno %d\n", 193 opResult); 194 return opResult; 195 } 196 hub->is_default_address_used = false; 197 return EOK; 179 198 } 180 199 -
uspace/drv/usbhub/usbhub.h
redc4c66 ra19a2d7 98 98 uint8_t *change_bitmap, size_t change_bitmap_size, void *arg); 99 99 100 int usb_hub_release_default_address(usb_hub_info_t * hub); 101 100 102 #endif 101 103 /** -
uspace/drv/vhc/connhost.c
redc4c66 ra19a2d7 324 324 } 325 325 326 static int reserve_default_address(ddf_fun_t *fun, usb_speed_t ignored) 327 { 328 usb_address_keeping_reserve_default(&addresses); 329 return EOK; 330 } 331 332 static int release_default_address(ddf_fun_t *fun) 333 { 334 usb_address_keeping_release_default(&addresses); 335 return EOK; 336 } 337 326 338 static int request_address(ddf_fun_t *fun, usb_speed_t ignored, 327 339 usb_address_t *address) … … 376 388 377 389 usbhc_iface_t vhc_iface = { 390 .reserve_default_address = reserve_default_address, 391 .release_default_address = release_default_address, 378 392 .request_address = request_address, 379 393 .bind_address = bind_address, -
uspace/lib/drv/generic/remote_usbhc.c
redc4c66 ra19a2d7 50 50 static void remote_usbhc_control_write(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 51 51 static void remote_usbhc_control_read(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 52 static void remote_usbhc_reserve_default_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 53 static void remote_usbhc_release_default_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 52 54 static void remote_usbhc_request_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 53 55 static void remote_usbhc_bind_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); … … 59 61 /** Remote USB host controller interface operations. */ 60 62 static remote_iface_func_ptr_t remote_usbhc_iface_ops [] = { 63 remote_usbhc_reserve_default_address, 64 remote_usbhc_release_default_address, 65 61 66 remote_usbhc_request_address, 62 67 remote_usbhc_bind_address, … … 122 127 123 128 return trans; 129 } 130 131 void remote_usbhc_reserve_default_address(ddf_fun_t *fun, void *iface, 132 ipc_callid_t callid, ipc_call_t *call) 133 { 134 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface; 135 136 if (!usb_iface->reserve_default_address) { 137 async_answer_0(callid, ENOTSUP); 138 return; 139 } 140 141 usb_speed_t speed = DEV_IPC_GET_ARG1(*call); 142 143 int rc = usb_iface->reserve_default_address(fun, speed); 144 145 async_answer_0(callid, rc); 146 } 147 148 void remote_usbhc_release_default_address(ddf_fun_t *fun, void *iface, 149 ipc_callid_t callid, ipc_call_t *call) 150 { 151 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface; 152 153 if (!usb_iface->release_default_address) { 154 async_answer_0(callid, ENOTSUP); 155 return; 156 } 157 158 int rc = usb_iface->release_default_address(fun); 159 160 async_answer_0(callid, rc); 124 161 } 125 162 -
uspace/lib/drv/include/usbhc_iface.h
redc4c66 ra19a2d7 84 84 */ 85 85 typedef enum { 86 /** Reserve usage of default address. 87 * This call informs the host controller that the caller will be 88 * using default USB address. It is duty of the HC driver to ensure 89 * that only single entity will have it reserved. 90 * The address is returned via IPC_M_USBHC_RELEASE_DEFAULT_ADDRESS. 91 * The caller can start using the address after receiving EOK 92 * answer. 93 */ 94 IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS, 95 96 /** Release usage of default address. 97 * @see IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS 98 */ 99 IPC_M_USBHC_RELEASE_DEFAULT_ADDRESS, 100 86 101 /** Asks for address assignment by host controller. 87 102 * Answer: -
uspace/lib/usb/include/usb/hub.h
redc4c66 ra19a2d7 59 59 } usb_hc_attached_device_t; 60 60 61 int usb_hc_reserve_default_address(usb_hc_connection_t *, usb_speed_t); 62 int usb_hc_release_default_address(usb_hc_connection_t *); 63 61 64 usb_address_t usb_hc_request_address(usb_hc_connection_t *, usb_speed_t); 62 65 int usb_hc_register_device(usb_hc_connection_t *, -
uspace/lib/usb/src/host/endpoint.c
redc4c66 ra19a2d7 99 99 assert(instance); 100 100 if (instance->address == target.address && 101 (instance->endpoint == target.endpoint || target.endpoint == 0))101 instance->endpoint == target.endpoint) 102 102 instance->toggle = 0; 103 103 } -
uspace/lib/usb/src/hub.c
redc4c66 ra19a2d7 42 42 #include <usb/debug.h> 43 43 44 /** How much time to wait between attempts to register endpoint 0:0.45 * The value is based on typical value for port reset + some overhead.46 */47 #define ENDPOINT_0_0_REGISTER_ATTEMPT_DELAY_USEC (1000 * (10 + 2))48 49 44 /** Check that HC connection is alright. 50 45 * … … 58 53 } \ 59 54 } while (false) 55 56 57 /** Tell host controller to reserve default address. 58 * @deprecated 59 * 60 * @param connection Opened connection to host controller. 61 * @param speed Speed of the device that will respond on the default address. 62 * @return Error code. 63 */ 64 int usb_hc_reserve_default_address(usb_hc_connection_t *connection, 65 usb_speed_t speed) 66 { 67 CHECK_CONNECTION(connection); 68 69 usb_log_warning("usb_hc_reserve_default_address() considered obsolete"); 70 71 return async_req_2_0(connection->hc_phone, 72 DEV_IFACE_ID(USBHC_DEV_IFACE), 73 IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS, speed); 74 } 75 76 /** Tell host controller to release default address. 77 * @deprecated 78 * 79 * @param connection Opened connection to host controller. 80 * @return Error code. 81 */ 82 int usb_hc_release_default_address(usb_hc_connection_t *connection) 83 { 84 CHECK_CONNECTION(connection); 85 86 usb_log_warning("usb_hc_release_default_address() considered obsolete"); 87 88 return async_req_1_0(connection->hc_phone, 89 DEV_IFACE_ID(USBHC_DEV_IFACE), 90 IPC_M_USBHC_RELEASE_DEFAULT_ADDRESS); 91 } 60 92 61 93 /** Ask host controller for free address assignment. … … 237 269 if (rc != EOK) { 238 270 /* Do not overheat the CPU ;-). */ 239 async_usleep( ENDPOINT_0_0_REGISTER_ATTEMPT_DELAY_USEC);271 async_usleep(10); 240 272 } 241 273 } while (rc != EOK);
Note:
See TracChangeset
for help on using the changeset viewer.