Changes in uspace/drv/bus/usb/uhcirh/port.c [c53007f:e882e3a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/uhcirh/port.c
rc53007f re882e3a 32 32 * @brief UHCI root hub port routines 33 33 */ 34 #include < ddi.h>34 #include <libarch/ddi.h> /* pio_read and pio_write */ 35 35 #include <fibril_synch.h> /* async_usleep */ 36 36 #include <errno.h> … … 63 63 return pio_read_16(port->address); 64 64 } 65 65 /*----------------------------------------------------------------------------*/ 66 66 /** Register writing helper function. 67 67 * … … 75 75 pio_write_16(port->address, val); 76 76 } 77 77 /*----------------------------------------------------------------------------*/ 78 78 /** Initialize UHCI root hub port instance. 79 79 * … … 127 127 return EOK; 128 128 } 129 129 /*----------------------------------------------------------------------------*/ 130 130 /** Cleanup UHCI root hub port instance. 131 131 * … … 141 141 return; 142 142 } 143 143 /*----------------------------------------------------------------------------*/ 144 144 /** Periodically checks port status and reports new devices. 145 145 * … … 150 150 { 151 151 uhci_port_t *instance = port; 152 int rc;153 152 assert(instance); 154 153 155 154 unsigned allowed_failures = MAX_ERROR_COUNT; 155 #define CHECK_RET_FAIL(ret, msg...) \ 156 if (ret != EOK) { \ 157 usb_log_error(msg); \ 158 if (!(allowed_failures-- > 0)) { \ 159 usb_log_fatal( \ 160 "Maximum number of failures reached, " \ 161 "bailing out.\n"); \ 162 return ret; \ 163 } \ 164 continue; \ 165 } else (void)0 156 166 157 167 while (1) { … … 172 182 instance->id_string, port_status); 173 183 174 rc = usb_hc_connection_open(&instance->hc_connection); 175 if (rc != EOK) { 176 usb_log_error("%s: Failed to connect to HC %s.\n", 177 instance->id_string, str_error(rc)); 178 if (!(allowed_failures-- > 0)) 179 goto fatal_error; 180 continue; 181 } 184 int ret = usb_hc_connection_open(&instance->hc_connection); 185 CHECK_RET_FAIL(ret, "%s: Failed to connect to HC %s.\n", 186 instance->id_string, str_error(ret)); 182 187 183 188 /* Remove any old device */ … … 199 204 } 200 205 201 rc = usb_hc_connection_close(&instance->hc_connection); 202 if (rc != EOK) { 203 usb_log_error("%s: Failed to disconnect from HC %s.\n", 204 instance->id_string, str_error(rc)); 205 if (!(allowed_failures-- > 0)) 206 goto fatal_error; 207 continue; 208 } 209 } 210 211 return EOK; 212 213 fatal_error: 214 usb_log_fatal("Maximum number of failures reached, bailing out.\n"); 215 return rc; 216 } 217 206 ret = usb_hc_connection_close(&instance->hc_connection); 207 CHECK_RET_FAIL(ret, "%s: Failed to disconnect from hc: %s.\n", 208 instance->id_string, str_error(ret)); 209 } 210 return EOK; 211 } 212 /*----------------------------------------------------------------------------*/ 218 213 /** Callback for enabling port during adding a new device. 219 214 * … … 252 247 return EOK; 253 248 } 254 249 /*----------------------------------------------------------------------------*/ 255 250 /** Initialize and report connected device. 256 251 * … … 284 279 usb_log_info("%s: New device, address %d (handle %" PRIun ").\n", 285 280 port->id_string, port->attached_device.address, 286 ddf_fun_get_handle(port->attached_device.fun));287 return EOK; 288 } 289 281 port->attached_device.fun->handle); 282 return EOK; 283 } 284 /*----------------------------------------------------------------------------*/ 290 285 /** Remove device. 291 286 * … … 329 324 return EOK; 330 325 } 331 326 /*----------------------------------------------------------------------------*/ 332 327 /** Enable or disable root hub port. 333 328 * … … 363 358 return EOK; 364 359 } 365 360 /*----------------------------------------------------------------------------*/ 366 361 /** Print the port status value in a human friendly way 367 362 *
Note:
See TracChangeset
for help on using the changeset viewer.