Changeset 1b0b86e6 in mainline for uspace/drv/uhci-rhd/port.c
- Timestamp:
- 2011-03-13T22:02:44Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b7d8fd9
- Parents:
- 67f54965 (diff), deb4ba7 (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/drv/uhci-rhd/port.c
r67f54965 r1b0b86e6 44 44 45 45 #include "port.h" 46 #include "port_status.h"47 46 48 47 static int uhci_port_new_device(uhci_port_t *port, usb_speed_t speed); … … 67 66 { 68 67 assert(port); 68 asprintf(&port->id_string, "Port (%p - %d)", port, number); 69 if (port->id_string == NULL) { 70 return ENOMEM; 71 } 69 72 70 73 port->address = address; … … 116 119 assert(instance); 117 120 118 /* Iteration count, for debug purposes only */119 unsigned count = 0;120 121 121 while (1) { 122 122 async_usleep(instance->wait_period_usec); 123 123 124 124 /* read register value */ 125 port_status_t port_status = port_status_read(instance->address); 126 127 /* debug print mutex */ 128 static fibril_mutex_t dbg_mtx = 129 FIBRIL_MUTEX_INITIALIZER(dbg_mtx); 130 fibril_mutex_lock(&dbg_mtx); 131 usb_log_debug2("Port(%p - %d): Status: %#04x. === %u\n", 132 instance->address, instance->number, port_status, count++); 133 // print_port_status(port_status); 134 fibril_mutex_unlock(&dbg_mtx); 125 port_status_t port_status = uhci_port_read_status(instance); 126 127 /* print the value if it's interesting */ 128 if (port_status & ~STATUS_ALWAYS_ONE) 129 uhci_port_print_status(instance, port_status); 135 130 136 131 if ((port_status & STATUS_CONNECTED_CHANGED) == 0) 137 132 continue; 138 133 139 usb_log_debug(" Port(%p - %d): Connected change detected: %x.\n",140 instance-> address, instance->number, port_status);134 usb_log_debug("%s: Connected change detected: %x.\n", 135 instance->id_string, port_status); 141 136 142 137 int rc = 143 138 usb_hc_connection_open(&instance->hc_connection); 144 139 if (rc != EOK) { 145 usb_log_error(" Port(%p - %d): Failed to connect to HC.",146 instance-> address, instance->number);140 usb_log_error("%s: Failed to connect to HC.", 141 instance->id_string); 147 142 continue; 148 143 } … … 150 145 /* Remove any old device */ 151 146 if (instance->attached_device) { 152 usb_log_debug2(" Port(%p - %d): Removing device.\n",153 instance-> address, instance->number);147 usb_log_debug2("%s: Removing device.\n", 148 instance->id_string); 154 149 uhci_port_remove_device(instance); 155 150 } … … 163 158 } else { 164 159 /* Write one to WC bits, to ack changes */ 165 port_status_write(instance->address, port_status);166 usb_log_debug(" Port(%p - %d): Change statusACK.\n",167 instance-> address, instance->number);160 uhci_port_write_status(instance, port_status); 161 usb_log_debug("%s: status change ACK.\n", 162 instance->id_string); 168 163 } 169 164 170 165 rc = usb_hc_connection_close(&instance->hc_connection); 171 166 if (rc != EOK) { 172 usb_log_error(" Port(%p - %d): Failed to disconnect.",173 instance-> address, instance->number);167 usb_log_error("%s: Failed to disconnect.", 168 instance->id_string); 174 169 } 175 170 } … … 187 182 uhci_port_t *port = (uhci_port_t *) arg; 188 183 189 usb_log_debug2("Port(%p - %d): new_device_enable_port.\n", 190 port->address, port->number); 184 usb_log_debug2("%s: new_device_enable_port.\n", port->id_string); 191 185 192 186 /* … … 196 190 async_usleep(100000); 197 191 198 199 /* The hub maintains the reset signal to that port for 10 ms 200 * (See Section 11.5.1.5) 192 /* 193 * Resets from root ports should be nominally 50ms 201 194 */ 202 195 { 203 usb_log_debug("Port(%p - %d): Reset Signal start.\n", 204 port->address, port->number); 205 port_status_t port_status = 206 port_status_read(port->address); 196 usb_log_debug("%s: Reset Signal start.\n", port->id_string); 197 port_status_t port_status = uhci_port_read_status(port); 207 198 port_status |= STATUS_IN_RESET; 208 port_status_write(port->address, port_status);209 async_usleep( 10000);210 port_status = port_status_read(port->address);199 uhci_port_write_status(port, port_status); 200 async_usleep(50000); 201 port_status = uhci_port_read_status(port); 211 202 port_status &= ~STATUS_IN_RESET; 212 port_status_write(port->address, port_status); 213 usb_log_debug("Port(%p - %d): Reset Signal stop.\n", 214 port->address, port->number); 215 } 203 uhci_port_write_status(port, port_status); 204 usb_log_debug("%s: Reset Signal stop.\n", port->id_string); 205 } 206 207 /* the reset recovery time 10ms */ 208 async_usleep(10000); 216 209 217 210 /* Enable the port. */ 218 211 uhci_port_set_enabled(port, true); 212 219 213 return EOK; 220 214 } … … 233 227 assert(usb_hc_connection_is_opened(&port->hc_connection)); 234 228 235 usb_log_info("Port(%p-%d): Detected new device.\n", 236 port->address, port->number); 229 usb_log_info("%s: Detected new device.\n", port->id_string); 237 230 238 231 usb_address_t dev_addr; … … 242 235 243 236 if (rc != EOK) { 244 usb_log_error(" Port(%p-%d): Failed(%d) to add device: %s.\n",245 port-> address, port->number, rc, str_error(rc));237 usb_log_error("%s: Failed(%d) to add device: %s.\n", 238 port->id_string, rc, str_error(rc)); 246 239 uhci_port_set_enabled(port, false); 247 240 return rc; 248 241 } 249 242 250 usb_log_info(" Port(%p-%d): New device has address %d (handle %zu).\n",251 port-> address, port->number, dev_addr, port->attached_device);243 usb_log_info("%s: New device has address %d (handle %zu).\n", 244 port->id_string, dev_addr, port->attached_device); 252 245 253 246 return EOK; … … 263 256 int uhci_port_remove_device(uhci_port_t *port) 264 257 { 265 usb_log_error(" Port(%p-%d): Don't know how to remove device %#x.\n",266 port-> address, port->number, (unsigned int)port->attached_device);258 usb_log_error("%s: Don't know how to remove device %d.\n", 259 port->id_string, (unsigned int)port->attached_device); 267 260 return EOK; 268 261 } … … 278 271 279 272 /* Read register value */ 280 port_status_t port_status = port_status_read(port->address);273 port_status_t port_status = uhci_port_read_status(port); 281 274 282 275 /* Set enabled bit */ … … 288 281 289 282 /* Write new value. */ 290 port_status_write(port->address, port_status);291 292 usb_log_info(" Port(%p-%d): %sabled port.\n",293 port-> address, port->number, enabled ? "En" : "Dis");283 uhci_port_write_status(port, port_status); 284 285 usb_log_info("%s: %sabled port.\n", 286 port->id_string, enabled ? "En" : "Dis"); 294 287 return EOK; 295 288 }
Note:
See TracChangeset
for help on using the changeset viewer.