Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbmast/main.c

    r721d4b6e rd6c953e9  
    8282    void *arg);
    8383
    84 /** Callback when a device is removed from the system.
    85  *
    86  * @param dev Representation of USB device.
    87  * @return Error code.
    88  */
    89 static int usbmast_device_gone(usb_device_t *dev)
    90 {
    91         usbmast_dev_t *mdev = dev->driver_data;
    92         assert(mdev);
    93 
    94         for (size_t i = 0; i < mdev->lun_count; ++i) {
    95                 const int rc = ddf_fun_unbind(mdev->luns[i]);
    96                 if (rc != EOK) {
    97                         usb_log_error("Failed to unbind LUN function %zu: "
    98                             "%s\n", i, str_error(rc));
    99                         return rc;
    100                 }
    101                 ddf_fun_destroy(mdev->luns[i]);
    102                 mdev->luns[i] = NULL;
    103         }
    104         free(mdev->luns);
    105         return EOK;
    106 }
    107 
    10884/** Callback when new device is attached and recognized as a mass storage.
    10985 *
     
    11187 * @return Error code.
    11288 */
    113 static int usbmast_device_add(usb_device_t *dev)
     89static int usbmast_add_device(usb_device_t *dev)
    11490{
    11591        int rc;
     
    11894
    11995        /* Allocate softstate */
    120         mdev = usb_device_data_alloc(dev, sizeof(usbmast_dev_t));
     96        mdev = ddf_dev_data_alloc(dev->ddf_dev, sizeof(usbmast_dev_t));
    12197        if (mdev == NULL) {
    12298                usb_log_error("Failed allocating softstate.\n");
     
    127103        mdev->usb_dev = dev;
    128104
    129         usb_log_info("Initializing mass storage `%s'.\n", dev->ddf_dev->name);
     105        usb_log_info("Initializing mass storage `%s'.\n",
     106            dev->ddf_dev->name);
    130107        usb_log_debug(" Bulk in endpoint: %d [%zuB].\n",
    131108            dev->pipes[BULK_IN_EP].pipe->endpoint_no,
     
    136113
    137114        usb_log_debug("Get LUN count...\n");
    138         mdev->lun_count = usb_masstor_get_lun_count(mdev);
    139         mdev->luns = calloc(mdev->lun_count, sizeof(ddf_fun_t*));
    140         if (mdev->luns == NULL) {
    141                 rc = ENOMEM;
    142                 usb_log_error("Failed allocating luns table.\n");
    143                 goto error;
    144         }
    145 
    146         for (i = 0; i < mdev->lun_count; i++) {
     115        mdev->luns = usb_masstor_get_lun_count(mdev);
     116
     117        for (i = 0; i < mdev->luns; i++) {
    147118                rc = usbmast_fun_create(mdev, i);
    148119                if (rc != EOK)
     
    152123        return EOK;
    153124error:
    154         /* Destroy functions */
    155         for (size_t i = 0; i < mdev->lun_count; ++i) {
    156                 if (mdev->luns[i] == NULL)
    157                         continue;
    158                 const int rc = ddf_fun_unbind(mdev->luns[i]);
    159                 if (rc != EOK) {
    160                         usb_log_warning("Failed to unbind LUN function %zu: "
    161                             "%s.\n", i, str_error(rc));
    162                 }
    163                 ddf_fun_destroy(mdev->luns[i]);
    164         }
    165         free(mdev->luns);
     125        /* XXX Destroy functions */
    166126        return rc;
    167127}
     
    203163        }
    204164
    205         mfun->ddf_fun = fun;
    206165        mfun->mdev = mdev;
    207166        mfun->lun = lun;
     
    254213
    255214        free(fun_name);
    256         mdev->luns[lun] = fun;
    257215
    258216        return EOK;
     
    337295/** USB mass storage driver ops. */
    338296static usb_driver_ops_t usbmast_driver_ops = {
    339         .device_add = usbmast_device_add,
    340         .device_gone = usbmast_device_gone,
     297        .add_device = usbmast_add_device,
    341298};
    342299
Note: See TracChangeset for help on using the changeset viewer.