Changes in uspace/lib/usbdev/src/devdrv.c [fb422312:70452dd4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbdev/src/devdrv.c
rfb422312 r70452dd4 41 41 #include <assert.h> 42 42 43 static int generic_device_add(ddf_dev_t *); 44 static int generic_device_remove(ddf_dev_t *); 45 static int generic_device_gone(ddf_dev_t *); 43 static int generic_add_device(ddf_dev_t *); 46 44 47 45 static driver_ops_t generic_driver_ops = { 48 .add_device = generic_device_add, 49 .dev_remove = generic_device_remove, 50 .dev_gone = generic_device_gone, 46 .add_device = generic_add_device 51 47 }; 52 48 static driver_t generic_driver = { … … 127 123 return EOK; 128 124 } 129 /*----------------------------------------------------------------------------*/ 130 /** Callback when anew device is supposed to be controlled by this driver.131 * 132 * This callback is a wrapper for USB specific version of @c device_add.125 126 /** Callback when new device is supposed to be controlled by this driver. 127 * 128 * This callback is a wrapper for USB specific version of @c add_device. 133 129 * 134 130 * @param gen_dev Device structure as prepared by DDF. 135 131 * @return Error code. 136 132 */ 137 int generic_ device_add(ddf_dev_t *gen_dev)133 int generic_add_device(ddf_dev_t *gen_dev) 138 134 { 139 135 assert(driver); 140 136 assert(driver->ops); 141 assert(driver->ops-> device_add);137 assert(driver->ops->add_device); 142 138 143 139 int rc; … … 151 147 return rc; 152 148 } 153 gen_dev->driver_data = dev; 154 155 return driver->ops->device_add(dev); 156 } 157 /*----------------------------------------------------------------------------*/ 158 /** Callback when a device is supposed to be removed from the system. 159 * 160 * This callback is a wrapper for USB specific version of @c device_remove. 161 * 162 * @param gen_dev Device structure as prepared by DDF. 163 * @return Error code. 164 */ 165 int generic_device_remove(ddf_dev_t *gen_dev) 166 { 167 assert(driver); 168 assert(driver->ops); 169 if (driver->ops->device_rem == NULL) 170 return ENOTSUP; 171 /* Just tell the driver to stop whatever it is doing, keep structures */ 172 return driver->ops->device_rem(gen_dev->driver_data); 173 } 174 /*----------------------------------------------------------------------------*/ 175 /** Callback when a device was removed from the system. 176 * 177 * This callback is a wrapper for USB specific version of @c device_gone. 178 * 179 * @param gen_dev Device structure as prepared by DDF. 180 * @return Error code. 181 */ 182 int generic_device_gone(ddf_dev_t *gen_dev) 183 { 184 assert(driver); 185 assert(driver->ops); 186 if (driver->ops->device_gone == NULL) 187 return ENOTSUP; 188 const int ret = driver->ops->device_gone(gen_dev->driver_data); 189 if (ret == EOK) 190 usb_device_destroy(gen_dev->driver_data); 191 192 return ret; 193 } 194 /*----------------------------------------------------------------------------*/ 149 150 return driver->ops->add_device(dev); 151 } 152 195 153 /** Destroy existing pipes of a USB device. 196 154 * … … 317 275 * @return Error code. 318 276 */ 319 int usb_device_create_pipes( constddf_dev_t *dev, usb_device_connection_t *wire,277 int usb_device_create_pipes(ddf_dev_t *dev, usb_device_connection_t *wire, 320 278 usb_endpoint_description_t **endpoints, 321 279 uint8_t *config_descr, size_t config_descr_size, … … 391 349 } 392 350 393 if (usb_hc_connection_close(&hc_conn) != EOK) 394 usb_log_warning("usb_device_create_pipes(): " 395 "Failed to close connection.\n"); 351 usb_hc_connection_close(&hc_conn); 396 352 397 353 *pipes_ptr = pipes; … … 415 371 } 416 372 417 if (usb_hc_connection_close(&hc_conn) != EOK) 418 usb_log_warning("usb_device_create_pipes(): " 419 "Failed to close connection.\n"); 373 usb_hc_connection_close(&hc_conn); 420 374 421 375 /* … … 441 395 * @param[in] pipes_count Number of endpoints. 442 396 */ 443 int usb_device_destroy_pipes( constddf_dev_t *dev,397 int usb_device_destroy_pipes(ddf_dev_t *dev, 444 398 usb_endpoint_mapping_t *pipes, size_t pipes_count) 445 399 { … … 472 426 } 473 427 474 if (usb_hc_connection_close(&hc_conn) != EOK) 475 usb_log_warning("usb_device_destroy_pipes(): " 476 "Failed to close connection.\n"); 428 usb_hc_connection_close(&hc_conn); 477 429 478 430 free(pipes); … … 593 545 /* Ignore errors and hope for the best. */ 594 546 usb_device_destroy_pipes(dev->ddf_dev, dev->pipes, dev->pipes_count); 595 free(dev->descriptors.configuration); 547 if (dev->descriptors.configuration != NULL) { 548 free(dev->descriptors.configuration); 549 } 596 550 597 551 if (dev->alternate_interfaces != NULL) { 598 free(dev->alternate_interfaces->alternatives); 599 } 600 free(dev->alternate_interfaces); 552 if (dev->alternate_interfaces->alternatives != NULL) { 553 free(dev->alternate_interfaces->alternatives); 554 } 555 free(dev->alternate_interfaces); 556 } 601 557 602 558 free(dev);
Note:
See TracChangeset
for help on using the changeset viewer.