Ignore:
Timestamp:
2011-07-17T09:56:53Z (13 years ago)
Author:
Petr Koupy <petr.koupy@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
df0956ee
Parents:
04b3c8c (diff), 4069f5c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge libposix changes.

File:
1 moved

Legend:

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

    r04b3c8c r64639256  
    3232/**
    3333 * @file
    34  * Generic functions for USB mass storage (implementation).
    35  */
    36 #include "mast.h"
    37 #include "cmds.h"
     34 * USB mass storage bulk-only transport.
     35 */
    3836#include <bool.h>
    3937#include <errno.h>
     
    4139#include <usb/debug.h>
    4240#include <usb/dev/request.h>
     41
     42#include "bo_trans.h"
     43#include "cmdw.h"
     44#include "usbmast.h"
    4345
    4446bool usb_mast_verbose = false;
     
    5355/** Send command via bulk-only transport.
    5456 *
     57 * @param mfun          Mass storage function
    5558 * @param tag           Command block wrapper tag (automatically compared
    5659 *                      with answer)
    57  * @param lun           LUN
    5860 * @param cmd           Command block
    5961 * @param cmd_size      Command block size in bytes
     
    6567 * @return              Error code
    6668 */
    67 static int usb_massstor_cmd(usb_device_t *dev, uint32_t tag, uint8_t lun,
    68     const void *cmd, size_t cmd_size, usb_direction_t ddir, void *dbuf,
    69     size_t dbuf_size, size_t *xferred_size)
     69static int usb_massstor_cmd(usbmast_fun_t *mfun, uint32_t tag, const void *cmd,
     70    size_t cmd_size, usb_direction_t ddir, void *dbuf, size_t dbuf_size,
     71    size_t *xferred_size)
    7072{
    7173        int rc;
    7274        size_t act_size;
    73         usb_pipe_t *bulk_in_pipe = dev->pipes[BULK_IN_EP].pipe;
    74         usb_pipe_t *bulk_out_pipe = dev->pipes[BULK_OUT_EP].pipe;
     75        usb_pipe_t *bulk_in_pipe = mfun->mdev->usb_dev->pipes[BULK_IN_EP].pipe;
     76        usb_pipe_t *bulk_out_pipe = mfun->mdev->usb_dev->pipes[BULK_OUT_EP].pipe;
    7577
    7678        /* Prepare CBW - command block wrapper */
    7779        usb_massstor_cbw_t cbw;
    78         usb_massstor_cbw_prepare(&cbw, tag, dbuf_size, ddir, lun, cmd_size,
    79             cmd);
     80        usb_massstor_cbw_prepare(&cbw, tag, dbuf_size, ddir, mfun->lun,
     81            cmd_size, cmd);
    8082
    8183        /* Send the CBW. */
     
    164166/** Perform data-in command.
    165167 *
     168 * @param mfun          Mass storage function
    166169 * @param tag           Command block wrapper tag (automatically compared with
    167170 *                      answer)
    168  * @param lun           LUN
    169171 * @param cmd           CDB (Command Descriptor)
    170172 * @param cmd_size      CDB length in bytes
     
    175177 * @return Error code
    176178 */
    177 int usb_massstor_data_in(usb_device_t *dev, uint32_t tag, uint8_t lun,
    178     const void *cmd, size_t cmd_size, void *dbuf, size_t dbuf_size, size_t *proc_size)
    179 {
    180         return usb_massstor_cmd(dev, tag, lun, cmd, cmd_size, USB_DIRECTION_IN,
     179int usb_massstor_data_in(usbmast_fun_t *mfun, uint32_t tag, const void *cmd,
     180    size_t cmd_size, void *dbuf, size_t dbuf_size, size_t *proc_size)
     181{
     182        return usb_massstor_cmd(mfun, tag, cmd, cmd_size, USB_DIRECTION_IN,
    181183            dbuf, dbuf_size, proc_size);
    182184}
     
    184186/** Perform data-out command.
    185187 *
     188 * @param mfun          Mass storage function
    186189 * @param tag           Command block wrapper tag (automatically compared with
    187190 *                      answer)
    188  * @param lun           LUN
    189191 * @param cmd           CDB (Command Descriptor)
    190192 * @param cmd_size      CDB length in bytes
     
    195197 * @return Error code
    196198 */
    197 int usb_massstor_data_out(usb_device_t *dev, uint32_t tag, uint8_t lun,
    198     const void *cmd, size_t cmd_size, const void *data, size_t data_size,
    199     size_t *proc_size)
    200 {
    201         return usb_massstor_cmd(dev, tag, lun, cmd, cmd_size, USB_DIRECTION_OUT,
     199int usb_massstor_data_out(usbmast_fun_t *mfun, uint32_t tag, const void *cmd,
     200    size_t cmd_size, const void *data, size_t data_size, size_t *proc_size)
     201{
     202        return usb_massstor_cmd(mfun, tag, cmd, cmd_size, USB_DIRECTION_OUT,
    202203            (void *) data, data_size, proc_size);
    203204}
     
    205206/** Perform bulk-only mass storage reset.
    206207 *
    207  * @param dev Device to be reseted.
    208  * @return Error code.
    209  */
    210 int usb_massstor_reset(usb_device_t *dev)
    211 {
    212         return usb_control_request_set(&dev->ctrl_pipe,
     208 * @param mfun          Mass storage function
     209 * @return              Error code
     210 */
     211int usb_massstor_reset(usbmast_dev_t *mdev)
     212{
     213        return usb_control_request_set(&mdev->usb_dev->ctrl_pipe,
    213214            USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,
    214             0xFF, 0, dev->interface_no, NULL, 0);
     215            0xFF, 0, mdev->usb_dev->interface_no, NULL, 0);
    215216}
    216217
     
    220221 * would reappear on next transaction somehow.
    221222 *
    222  * @param dev Device to be reseted.
    223  */
    224 void usb_massstor_reset_recovery(usb_device_t *dev)
     223 * @param mfun          Mass storage function
     224 */
     225void usb_massstor_reset_recovery(usbmast_dev_t *mdev)
    225226{
    226227        /* We would ignore errors here because if this fails
    227228         * we are doomed anyway and any following transaction would fail.
    228229         */
    229         usb_massstor_reset(dev);
    230         usb_pipe_clear_halt(&dev->ctrl_pipe, dev->pipes[BULK_IN_EP].pipe);
    231         usb_pipe_clear_halt(&dev->ctrl_pipe, dev->pipes[BULK_OUT_EP].pipe);
     230        usb_massstor_reset(mdev);
     231        usb_pipe_clear_halt(&mdev->usb_dev->ctrl_pipe,
     232            mdev->usb_dev->pipes[BULK_IN_EP].pipe);
     233        usb_pipe_clear_halt(&mdev->usb_dev->ctrl_pipe,
     234            mdev->usb_dev->pipes[BULK_OUT_EP].pipe);
    232235}
    233236
     
    240243 * You shall rather use usb_masstor_get_lun_count.
    241244 *
    242  * @param dev Mass storage device.
    243  * @return Error code of maximum LUN (index, not count).
    244  */
    245 int usb_massstor_get_max_lun(usb_device_t *dev)
     245 * @param mfun          Mass storage function
     246 * @return              Error code of maximum LUN (index, not count)
     247 */
     248int usb_massstor_get_max_lun(usbmast_dev_t *mdev)
    246249{
    247250        uint8_t max_lun;
    248251        size_t data_recv_len;
    249         int rc = usb_control_request_get(&dev->ctrl_pipe,
     252        int rc = usb_control_request_get(&mdev->usb_dev->ctrl_pipe,
    250253            USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,
    251             0xFE, 0, dev->interface_no, &max_lun, 1, &data_recv_len);
     254            0xFE, 0, mdev->usb_dev->interface_no, &max_lun, 1, &data_recv_len);
    252255        if (rc != EOK) {
    253256                return rc;
     
    264267 * (typically that shall not be a problem).
    265268 *
    266  * @param dev Mass storage device.
    267  * @return Number of LUNs.
    268  */
    269 size_t usb_masstor_get_lun_count(usb_device_t *dev)
    270 {
    271         int max_lun = usb_massstor_get_max_lun(dev);
     269 * @param mfun          Mass storage function
     270 * @return              Number of LUNs
     271 */
     272size_t usb_masstor_get_lun_count(usbmast_dev_t *mdev)
     273{
     274        int max_lun = usb_massstor_get_max_lun(mdev);
    272275        if (max_lun < 0) {
    273276                max_lun = 1;
Note: See TracChangeset for help on using the changeset viewer.