Changeset 0918382f in mainline for uspace/drv/bus/usb/usbhub
- Timestamp:
- 2013-08-07T15:00:36Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 14dd4c9
- Parents:
- 2757247
- Location:
- uspace/drv/bus/usb/usbhub
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbhub/port.c
r2757247 r0918382f 64 64 { 65 65 assert(port); 66 if (port-> attached_handle != USB_DEVICE_HANDLE_INVALID)66 if (port->device_attached) 67 67 return usb_hub_port_device_gone(port, hub); 68 68 return EOK; … … 139 139 assert(port); 140 140 assert(hub); 141 usb_log_debug("Interrupt at port % zu\n", port->port_number);141 usb_log_debug("Interrupt at port %u\n", port->port_number); 142 142 143 143 usb_port_status_t status = 0; 144 144 const int opResult = get_port_status(port, &status); 145 145 if (opResult != EOK) { 146 usb_log_error("Failed to get port % zu status: %s.\n",146 usb_log_error("Failed to get port %u status: %s.\n", 147 147 port->port_number, str_error(opResult)); 148 148 return; … … 153 153 const bool connected = 154 154 (status & USB_HUB_PORT_STATUS_CONNECTION) != 0; 155 usb_log_debug("Connection change on port % zu: device %s.\n",155 usb_log_debug("Connection change on port %u: device %s.\n", 156 156 port->port_number, connected ? "attached" : "removed"); 157 157 … … 169 169 if (opResult != EOK) { 170 170 usb_log_error( 171 "Cannot handle change on port % zu: %s.\n",171 "Cannot handle change on port %u: %s.\n", 172 172 port->port_number, str_error(opResult)); 173 173 } … … 183 183 /* Enable change, ports are automatically disabled on errors. */ 184 184 if (status & USB_HUB_PORT_C_STATUS_ENABLED) { 185 usb_log_info("Port % zu, disabled because of errors.\n",185 usb_log_info("Port %u, disabled because of errors.\n", 186 186 port->port_number); 187 187 usb_hub_port_device_gone(port, hub); … … 190 190 if (rc != EOK) { 191 191 usb_log_error( 192 "Failed to clear port % zu enable change feature: "192 "Failed to clear port %u enable change feature: " 193 193 "%s.\n", port->port_number, str_error(rc)); 194 194 } … … 198 198 /* Suspend change */ 199 199 if (status & USB_HUB_PORT_C_STATUS_SUSPEND) { 200 usb_log_error("Port % zu went to suspend state, this should"200 usb_log_error("Port %u went to suspend state, this should" 201 201 "NOT happen as we do not support suspend state!", 202 202 port->port_number); … … 205 205 if (rc != EOK) { 206 206 usb_log_error( 207 "Failed to clear port % zu suspend change feature: "207 "Failed to clear port %u suspend change feature: " 208 208 "%s.\n", port->port_number, str_error(rc)); 209 209 } … … 221 221 if (rc != EOK) { 222 222 usb_log_error( 223 "Failed to clear port % zu OC change feature: %s.\n",223 "Failed to clear port %u OC change feature: %s.\n", 224 224 port->port_number, str_error(rc)); 225 225 } … … 229 229 if (rc != EOK) { 230 230 usb_log_error( 231 "Failed to set port % zu power after OC:"231 "Failed to set port %u power after OC:" 232 232 " %s.\n", port->port_number, str_error(rc)); 233 233 } … … 240 240 } 241 241 242 usb_log_debug("Port % zu status 0x%08" PRIx32 "\n",242 usb_log_debug("Port %u status %#08" PRIx32 "\n", 243 243 port->port_number, status); 244 244 } … … 260 260 if (!exch) 261 261 return ENOMEM; 262 const int rc = usb_device_remove(exch, port-> attached_handle);262 const int rc = usb_device_remove(exch, port->port_number); 263 263 usb_device_bus_exchange_end(exch); 264 264 if (rc == EOK) 265 port-> attached_handle = -1;265 port->device_attached = false; 266 266 return rc; 267 267 … … 286 286 287 287 if (port->reset_okay) { 288 usb_log_debug("Port % zu reset complete.\n", port->port_number);288 usb_log_debug("Port %u reset complete.\n", port->port_number); 289 289 } else { 290 290 usb_log_warning( 291 "Port % zu reset complete but port not enabled.\n",291 "Port %u reset complete but port not enabled.\n", 292 292 port->port_number); 293 293 } … … 299 299 if (rc != EOK) { 300 300 usb_log_error( 301 "Failed to clear port % zu reset change feature: %s.\n",301 "Failed to clear port %u reset change feature: %s.\n", 302 302 port->port_number, str_error(rc)); 303 303 } … … 407 407 port_enable(port, true); 408 408 if (!port->reset_completed || !port->reset_okay) { 409 usb_log_error("Failed to reset port % zu\n", port->port_number);409 usb_log_error("Failed to reset port %u\n", port->port_number); 410 410 if (usb_release_default_address(exch) != EOK) 411 411 usb_log_warning("Failed to release default address\n"); … … 414 414 } 415 415 416 ret = usb_device_enumerate(exch, &port->attached_handle);416 ret = usb_device_enumerate(exch, port->port_number); 417 417 if (ret != EOK) { 418 usb_log_error("Failed to reset port %zu\n", port->port_number); 418 usb_log_error("Failed to enumerate device on port %u\n", 419 port->port_number); 419 420 if (port_enable(port, false) != EOK) { 420 usb_log_warning("Failed to disable port % zu, NOT "421 usb_log_warning("Failed to disable port %u, NOT " 421 422 "releasing default address.\n", port->port_number); 422 423 } else { … … 426 427 } 427 428 } else { 429 port->device_attached = true; 428 430 if (usb_release_default_address(exch) != EOK) 429 431 usb_log_warning("Failed to release default address\n"); -
uspace/drv/bus/usb/usbhub/port.h
r2757247 r0918382f 44 44 /** Information about single port on a hub. */ 45 45 typedef struct { 46 /* Port number as reported in descriptors. */47 size_tport_number;46 /** Port number as reported in descriptors. */ 47 unsigned port_number; 48 48 /** Device communication pipe. */ 49 49 usb_pipe_t *control_pipe; … … 58 58 /** Whether to announce the port reset as successful. */ 59 59 bool reset_okay; 60 61 usb_device_handle_t attached_handle; 62 60 /** Device reported to USB bus driver */ 61 bool device_attached; 63 62 } usb_hub_port_t; 64 63 … … 67 66 * @param port Port to be initialized. 68 67 */ 69 static inline void usb_hub_port_init(usb_hub_port_t *port, size_tport_number,68 static inline void usb_hub_port_init(usb_hub_port_t *port, unsigned port_number, 70 69 usb_pipe_t *control_pipe) 71 70 { … … 73 72 port->port_number = port_number; 74 73 port->control_pipe = control_pipe; 75 port->attached_handle = USB_DEVICE_HANDLE_INVALID; 74 port->reset_completed = false; 75 port->reset_okay = false; 76 port->device_attached = false; 76 77 fibril_mutex_initialize(&port->mutex); 77 78 fibril_condvar_initialize(&port->reset_cv); -
uspace/drv/bus/usb/usbhub/usbhub.c
r2757247 r0918382f 317 317 318 318 if (ret != EOK) { 319 usb_log_error("Cannot power on port % zu: %s.\n",319 usb_log_error("Cannot power on port %u: %s.\n", 320 320 hub_dev->ports[port].port_number, str_error(ret)); 321 321 } else { … … 406 406 if (ret != EOK) { 407 407 usb_log_warning("HUB OVER-CURRENT GONE: Cannot power on" 408 " port % zu: %s\n", hub_dev->ports[port].port_number,408 " port %u: %s\n", hub_dev->ports[port].port_number, 409 409 str_error(ret)); 410 410 } else {
Note:
See TracChangeset
for help on using the changeset viewer.