linux-old/drivers/usb/storage/transport.h
<<
>>
Prefs
   1/* Driver for USB Mass Storage compliant devices
   2 * Transport Functions Header File
   3 *
   4 * $Id: transport.h,v 1.17 2002/02/25 00:43:41 mdharm Exp $
   5 *
   6 * Current development and maintenance by:
   7 *   (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
   8 *
   9 * This driver is based on the 'USB Mass Storage Class' document. This
  10 * describes in detail the protocol used to communicate with such
  11 * devices.  Clearly, the designers had SCSI and ATAPI commands in
  12 * mind when they created this document.  The commands are all very
  13 * similar to commands in the SCSI-II and ATAPI specifications.
  14 *
  15 * It is important to note that in a number of cases this class
  16 * exhibits class-specific exemptions from the USB specification.
  17 * Notably the usage of NAK, STALL and ACK differs from the norm, in
  18 * that they are used to communicate wait, failed and OK on commands.
  19 *
  20 * Also, for certain devices, the interrupt endpoint is used to convey
  21 * status of a command.
  22 *
  23 * Please see http://www.one-eyed-alien.net/~mdharm/linux-usb for more
  24 * information about this driver.
  25 *
  26 * This program is free software; you can redistribute it and/or modify it
  27 * under the terms of the GNU General Public License as published by the
  28 * Free Software Foundation; either version 2, or (at your option) any
  29 * later version.
  30 *
  31 * This program is distributed in the hope that it will be useful, but
  32 * WITHOUT ANY WARRANTY; without even the implied warranty of
  33 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  34 * General Public License for more details.
  35 *
  36 * You should have received a copy of the GNU General Public License along
  37 * with this program; if not, write to the Free Software Foundation, Inc.,
  38 * 675 Mass Ave, Cambridge, MA 02139, USA.
  39 */
  40
  41#ifndef _TRANSPORT_H_
  42#define _TRANSPORT_H_
  43
  44#include <linux/config.h>
  45#include <linux/blk.h>
  46#include "usb.h"
  47#include "scsi.h"
  48
  49/* Protocols */
  50
  51#define US_PR_CBI       0x00            /* Control/Bulk/Interrupt */
  52#define US_PR_CB        0x01            /* Control/Bulk w/o interrupt */
  53#define US_PR_BULK      0x50            /* bulk only */
  54#ifdef CONFIG_USB_STORAGE_HP8200e
  55#define US_PR_SCM_ATAPI 0x80            /* SCM-ATAPI bridge */
  56#endif
  57#ifdef CONFIG_USB_STORAGE_SDDR09
  58#define US_PR_EUSB_SDDR09       0x81    /* SCM-SCSI bridge for
  59                                                SDDR-09 */
  60#endif
  61#ifdef CONFIG_USB_STORAGE_SDDR55
  62#define US_PR_SDDR55    0x82            /* SDDR-55 (made up) */
  63#endif
  64#define US_PR_DPCM_USB  0xf0            /* Combination CB/SDDR09 */
  65
  66#ifdef CONFIG_USB_STORAGE_FREECOM
  67#define US_PR_FREECOM   0xf1            /* Freecom */
  68#endif
  69
  70#ifdef CONFIG_USB_STORAGE_DATAFAB
  71#define US_PR_DATAFAB   0xf2            /* Datafab chipsets */
  72#endif
  73
  74#ifdef CONFIG_USB_STORAGE_JUMPSHOT
  75#define US_PR_JUMPSHOT  0xf3            /* Lexar Jumpshot */
  76#endif
  77
  78#define US_PR_DEVICE    0xff            /* Use device's value */
  79
  80/*
  81 * Bulk only data structures
  82 */
  83
  84/* command block wrapper */
  85struct bulk_cb_wrap {
  86        __u32   Signature;              /* contains 'USBC' */
  87        __u32   Tag;                    /* unique per command id */
  88        __u32   DataTransferLength;     /* size of data */
  89        __u8    Flags;                  /* direction in bit 0 */
  90        __u8    Lun;                    /* LUN normally 0 */
  91        __u8    Length;                 /* of of the CDB */
  92        __u8    CDB[16];                /* max command */
  93};
  94
  95#define US_BULK_CB_WRAP_LEN     31
  96#define US_BULK_CB_SIGN         0x43425355      /*spells out USBC */
  97#define US_BULK_FLAG_IN         1
  98#define US_BULK_FLAG_OUT        0
  99
 100/* command status wrapper */
 101struct bulk_cs_wrap {
 102        __u32   Signature;              /* should = 'USBS' */
 103        __u32   Tag;                    /* same as original command */
 104        __u32   Residue;                /* amount not transferred */
 105        __u8    Status;                 /* see below */
 106        __u8    Filler[18];
 107};
 108
 109#define US_BULK_CS_WRAP_LEN     13
 110#define US_BULK_CS_SIGN         0x53425355      /* spells out 'USBS' */
 111/* This is for Olympus Camedia digital cameras */
 112#define US_BULK_CS_OLYMPUS_SIGN         0x55425355      /* spells out 'USBU' */
 113#define US_BULK_STAT_OK         0
 114#define US_BULK_STAT_FAIL       1
 115#define US_BULK_STAT_PHASE      2
 116
 117/* bulk-only class specific requests */
 118#define US_BULK_RESET_REQUEST   0xff
 119#define US_BULK_GET_MAX_LUN     0xfe
 120
 121/*
 122 * usb_stor_transfer() return codes
 123 */
 124#define US_BULK_TRANSFER_GOOD           0  /* good transfer                 */
 125#define US_BULK_TRANSFER_SHORT          1  /* transfered less than expected */
 126#define US_BULK_TRANSFER_FAILED         2  /* transfer died in the middle   */
 127#define US_BULK_TRANSFER_ABORTED        3  /* transfer canceled             */
 128
 129/*
 130 * Transport return codes
 131 */
 132
 133#define USB_STOR_TRANSPORT_GOOD    0   /* Transport good, command good     */
 134#define USB_STOR_TRANSPORT_FAILED  1   /* Transport good, command failed   */
 135#define USB_STOR_TRANSPORT_ERROR   2   /* Transport bad (i.e. device dead) */
 136#define USB_STOR_TRANSPORT_ABORTED 3   /* Transport aborted                */
 137
 138/*
 139 * CBI accept device specific command
 140 */
 141
 142#define US_CBI_ADSC             0
 143
 144extern void usb_stor_CBI_irq(struct urb*);
 145extern int usb_stor_CBI_transport(Scsi_Cmnd*, struct us_data*);
 146
 147extern int usb_stor_CB_transport(Scsi_Cmnd*, struct us_data*);
 148extern int usb_stor_CB_reset(struct us_data*);
 149
 150extern int usb_stor_Bulk_transport(Scsi_Cmnd*, struct us_data*);
 151extern int usb_stor_Bulk_max_lun(struct us_data*);
 152extern int usb_stor_Bulk_reset(struct us_data*);
 153
 154extern unsigned int usb_stor_transfer_length(Scsi_Cmnd*);
 155extern void usb_stor_invoke_transport(Scsi_Cmnd*, struct us_data*);
 156extern int usb_stor_transfer_partial(struct us_data*, char*, int);
 157extern int usb_stor_bulk_msg(struct us_data*, void*, int, unsigned int,
 158                unsigned int*);
 159extern int usb_stor_control_msg(struct us_data*, unsigned int, u8, u8,
 160                u16, u16, void*, u16);
 161extern int usb_stor_clear_halt(struct us_data*, int );
 162extern void usb_stor_transfer(Scsi_Cmnd*, struct us_data*);
 163#endif
 164
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.