Changes in uspace/drv/bus/usb/uhcirh/port.c [56fd7cf:ffa96c2] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/uhcirh/port.c
r56fd7cf rffa96c2 32 32 * @brief UHCI root hub port routines 33 33 */ 34 #include < libarch/ddi.h> /* pio_read and pio_write */34 #include <ddi.h> 35 35 #include <fibril_synch.h> /* async_usleep */ 36 36 #include <errno.h> … … 150 150 { 151 151 uhci_port_t *instance = port; 152 int rc; 152 153 assert(instance); 153 154 154 155 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)0166 156 167 157 while (1) { … … 182 172 instance->id_string, port_status); 183 173 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)); 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 } 187 182 188 183 /* Remove any old device */ … … 204 199 } 205 200 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; 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; 211 216 } 212 217 … … 264 269 int ret, count = MAX_ERROR_COUNT; 265 270 do { 266 ret = usb_hc_new_device_wrapper(port->rh, &port->hc_connection, 271 port->attached_device.fun = ddf_fun_create(port->rh, fun_inner, 272 NULL); 273 if (port->attached_device.fun == NULL) { 274 ret = ENOMEM; 275 continue; 276 } 277 278 ret = usb_hc_new_device_wrapper(port->rh, 279 port->attached_device.fun, 280 &port->hc_connection, 267 281 speed, uhci_port_reset_enable, port, 268 &port->attached_device.address, NULL, NULL, 269 &port->attached_device.fun); 282 &port->attached_device.address, NULL); 283 284 if (ret != EOK) { 285 ddf_fun_destroy(port->attached_device.fun); 286 port->attached_device.fun = NULL; 287 } 288 270 289 } while (ret != EOK && count-- > 0); 271 290
Note:
See TracChangeset
for help on using the changeset viewer.