Ignore:
File:
1 edited

Legend:

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

    r920d0fc r58563585  
    3535 * Main routines of USB mass storage driver.
    3636 */
     37
    3738#include <as.h>
    3839#include <async.h>
     
    4445#include <usb/classes/massstor.h>
    4546#include <errno.h>
     47#include <io/logctl.h>
    4648#include <str_error.h>
    4749#include "cmdw.h"
     
    5153
    5254#define NAME "usbmast"
    53 
    54 #define GET_BULK_IN(dev) ((dev)->pipes[BULK_IN_EP].pipe)
    55 #define GET_BULK_OUT(dev) ((dev)->pipes[BULK_OUT_EP].pipe)
    5655
    5756static const usb_endpoint_description_t bulk_in_ep = {
     
    8584static int usbmast_bd_close(bd_srv_t *);
    8685static int usbmast_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t);
     86static int usbmast_bd_sync_cache(bd_srv_t *, aoff64_t, size_t);
    8787static int usbmast_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *, size_t);
    8888static int usbmast_bd_get_block_size(bd_srv_t *, size_t *);
     
    9393        .close = usbmast_bd_close,
    9494        .read_blocks = usbmast_bd_read_blocks,
     95        .sync_cache = usbmast_bd_sync_cache,
    9596        .write_blocks = usbmast_bd_write_blocks,
    9697        .get_block_size = usbmast_bd_get_block_size,
     
    110111static int usbmast_device_gone(usb_device_t *dev)
    111112{
    112         usbmast_dev_t *mdev = dev->driver_data;
     113        usbmast_dev_t *mdev = usb_device_data_get(dev);
    113114        assert(mdev);
    114115
     
    150151        unsigned i;
    151152
     153        usb_endpoint_mapping_t *epm_in =
     154            usb_device_get_mapped_ep_desc(dev, &bulk_in_ep);
     155        usb_endpoint_mapping_t *epm_out =
     156            usb_device_get_mapped_ep_desc(dev, &bulk_out_ep);
     157        if (!epm_in || !epm_out || !epm_in->present || !epm_out->present) {
     158                usb_log_error("Required EPs were not mapped.\n");
     159                return ENOENT;
     160        }
     161
    152162        /* Allocate softstate */
    153163        mdev = usb_device_data_alloc(dev, sizeof(usbmast_dev_t));
     
    157167        }
    158168
    159         mdev->ddf_dev = dev->ddf_dev;
    160169        mdev->usb_dev = dev;
    161170
    162         usb_log_info("Initializing mass storage `%s'.\n", ddf_dev_get_name(dev->ddf_dev));
     171        usb_log_info("Initializing mass storage `%s'.\n",
     172            usb_device_get_name(dev));
    163173        usb_log_debug("Bulk in endpoint: %d [%zuB].\n",
    164             dev->pipes[BULK_IN_EP].pipe.endpoint_no,
    165             dev->pipes[BULK_IN_EP].pipe.max_packet_size);
     174            epm_in->pipe.endpoint_no, epm_in->pipe.max_packet_size);
    166175        usb_log_debug("Bulk out endpoint: %d [%zuB].\n",
    167             dev->pipes[BULK_OUT_EP].pipe.endpoint_no,
    168             dev->pipes[BULK_OUT_EP].pipe.max_packet_size);
     176            epm_out->pipe.endpoint_no, epm_out->pipe.max_packet_size);
    169177
    170178        usb_log_debug("Get LUN count...\n");
     
    177185        }
    178186
     187        mdev->bulk_in_pipe = &epm_in->pipe;
     188        mdev->bulk_out_pipe = &epm_out->pipe;
    179189        for (i = 0; i < mdev->lun_count; i++) {
    180190                rc = usbmast_fun_create(mdev, i);
     
    221231        }
    222232
    223         fun = ddf_fun_create(mdev->ddf_dev, fun_exposed, fun_name);
     233        fun = usb_device_ddf_fun_create(mdev->usb_dev, fun_exposed, fun_name);
    224234        if (fun == NULL) {
    225235                usb_log_error("Failed to create DDF function %s.\n", fun_name);
     
    252262        if (rc != EOK) {
    253263                usb_log_warning("Failed to inquire device `%s': %s.\n",
    254                     ddf_dev_get_name(mdev->ddf_dev), str_error(rc));
     264                    usb_device_get_name(mdev->usb_dev), str_error(rc));
    255265                rc = EIO;
    256266                goto error;
     
    259269        usb_log_info("Mass storage `%s' LUN %u: " \
    260270            "%s by %s rev. %s is %s (%s).\n",
    261             ddf_dev_get_name(mdev->ddf_dev),
     271            usb_device_get_name(mdev->usb_dev),
    262272            lun,
    263273            inquiry.product,
     
    272282        if (rc != EOK) {
    273283                usb_log_warning("Failed to read capacity, device `%s': %s.\n",
    274                     ddf_dev_get_name(mdev->ddf_dev), str_error(rc));
     284                    usb_device_get_name(mdev->usb_dev), str_error(rc));
    275285                rc = EIO;
    276286                goto error;
     
    289299                goto error;
    290300        }
     301
     302        ddf_fun_add_to_category(fun, "disk");
    291303
    292304        free(fun_name);
     
    338350}
    339351
     352/** Synchronize blocks to nonvolatile storage. */
     353static int usbmast_bd_sync_cache(bd_srv_t *bd, uint64_t ba, size_t cnt)
     354{
     355        usbmast_fun_t *mfun = bd_srv_usbmast(bd);
     356
     357        return usbmast_sync_cache(mfun, ba, cnt);
     358}
     359
    340360/** Write blocks to the device. */
    341361static int usbmast_bd_write_blocks(bd_srv_t *bd, uint64_t ba, size_t cnt,
     
    384404{
    385405        log_init(NAME);
    386 
     406        logctl_set_log_level(NAME, LVL_NOTE);
    387407        return usb_driver_main(&usbmast_driver);
    388408}
Note: See TracChangeset for help on using the changeset viewer.