Changes in uspace/lib/usbdev/src/devdrv.c [fb422312:065064e6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbdev/src/devdrv.c
rfb422312 r065064e6 54 54 }; 55 55 56 static usb_driver_t *driver = NULL;56 static const usb_driver_t *driver = NULL; 57 57 58 58 … … 115 115 int rc = usb_device_create_pipes(dev->ddf_dev, &dev->wire, endpoints, 116 116 dev->descriptors.configuration, dev->descriptors.configuration_size, 117 dev->interface_no, alternate_setting, 118 &pipes, &pipes_count); 117 dev->interface_no, alternate_setting, &pipes, &pipes_count); 119 118 120 119 if (rc != EOK) { … … 153 152 gen_dev->driver_data = dev; 154 153 155 return driver->ops->device_add(dev); 154 rc = driver->ops->device_add(dev); 155 if (rc != EOK) 156 usb_device_destroy(dev); 157 return rc; 156 158 } 157 159 /*----------------------------------------------------------------------------*/ … … 186 188 if (driver->ops->device_gone == NULL) 187 189 return ENOTSUP; 188 const int ret = driver->ops->device_gone(gen_dev->driver_data); 190 usb_device_t *usb_dev = gen_dev->driver_data; 191 const int ret = driver->ops->device_gone(usb_dev); 189 192 if (ret == EOK) 190 usb_device_destroy( gen_dev->driver_data);193 usb_device_destroy(usb_dev); 191 194 192 195 return ret; … … 319 322 int usb_device_create_pipes(const ddf_dev_t *dev, usb_device_connection_t *wire, 320 323 usb_endpoint_description_t **endpoints, 321 uint8_t *config_descr, size_t config_descr_size,324 const uint8_t *config_descr, size_t config_descr_size, 322 325 int interface_no, int interface_setting, 323 326 usb_endpoint_mapping_t **pipes_ptr, size_t *pipes_count_ptr) … … 333 336 int rc; 334 337 335 size_t pipe_count = count_other_pipes(endpoints);338 const size_t pipe_count = count_other_pipes(endpoints); 336 339 if (pipe_count == 0) { 340 *pipes_count_ptr = pipe_count; 337 341 *pipes_ptr = NULL; 338 342 return EOK; … … 445 449 { 446 450 assert(dev != NULL); 447 assert(((pipes != NULL) && (pipes_count > 0))448 || ((pipes == NULL) && (pipes_count == 0)));449 451 450 452 if (pipes_count == 0) { 453 assert(pipes == NULL); 451 454 return EOK; 452 455 } 456 assert(pipes != NULL); 453 457 454 458 int rc; … … 468 472 size_t i; 469 473 for (i = 0; i < pipes_count; i++) { 470 usb_pipe_unregister(pipes[i].pipe, &hc_conn); 474 usb_log_debug2("Unregistering pipe %zu (%spresent).\n", 475 i, pipes[i].present ? "" : "not "); 476 if (pipes[i].present) 477 usb_pipe_unregister(pipes[i].pipe, &hc_conn); 471 478 free(pipes[i].pipe); 472 479 } … … 592 599 593 600 /* Ignore errors and hope for the best. */ 594 usb_device_destroy_pipes(dev->ddf_dev, dev->pipes, dev->pipes_count); 595 free(dev->descriptors.configuration); 601 destroy_current_pipes(dev); 596 602 597 603 if (dev->alternate_interfaces != NULL) { … … 599 605 } 600 606 free(dev->alternate_interfaces); 601 602 free(dev); 607 free(dev->descriptors.configuration); 608 free(dev->driver_data); 609 } 610 611 void * usb_device_data_alloc(usb_device_t *usb_dev, size_t size) 612 { 613 assert(usb_dev); 614 assert(usb_dev->driver_data == NULL); 615 return usb_dev->driver_data = calloc(1, size); 616 603 617 } 604 618
Note:
See TracChangeset
for help on using the changeset viewer.