2005-04-17 02:20:36 +04:00
/* Driver for USB Mass Storage compliant devices
* Transport Functions Header File
*
* Current development and maintenance by :
* ( c ) 1999 , 2000 Matthew Dharm ( mdharm - usb @ one - eyed - alien . net )
*
* This driver is based on the ' USB Mass Storage Class ' document . This
* describes in detail the protocol used to communicate with such
* devices . Clearly , the designers had SCSI and ATAPI commands in
* mind when they created this document . The commands are all very
* similar to commands in the SCSI - II and ATAPI specifications .
*
* It is important to note that in a number of cases this class
* exhibits class - specific exemptions from the USB specification .
* Notably the usage of NAK , STALL and ACK differs from the norm , in
* that they are used to communicate wait , failed and OK on commands .
*
* Also , for certain devices , the interrupt endpoint is used to convey
* status of a command .
*
* Please see http : //www.one-eyed-alien.net/~mdharm/linux-usb for more
* information about this driver .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation ; either version 2 , or ( at your option ) any
* later version .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# ifndef _TRANSPORT_H_
# define _TRANSPORT_H_
# include <linux/blkdev.h>
/*
* usb_stor_bulk_transfer_xxx ( ) return codes , in order of severity
*/
# define USB_STOR_XFER_GOOD 0 /* good transfer */
# define USB_STOR_XFER_SHORT 1 /* transferred less than expected */
# define USB_STOR_XFER_STALLED 2 /* endpoint stalled */
# define USB_STOR_XFER_LONG 3 /* device tried to send too much */
# define USB_STOR_XFER_ERROR 4 /* transfer died in the middle */
/*
* Transport return codes
*/
# define USB_STOR_TRANSPORT_GOOD 0 /* Transport good, command good */
# define USB_STOR_TRANSPORT_FAILED 1 /* Transport good, command failed */
# define USB_STOR_TRANSPORT_NO_SENSE 2 /* Command failed, no auto-sense */
# define USB_STOR_TRANSPORT_ERROR 3 /* Transport bad (i.e. device dead) */
/*
* We used to have USB_STOR_XFER_ABORTED and USB_STOR_TRANSPORT_ABORTED
* return codes . But now the transport and low - level transfer routines
* treat an abort as just another error ( - ENOENT for a cancelled URB ) .
* It is up to the invoke_transport ( ) function to test for aborts and
* distinguish them from genuine communication errors .
*/
/*
* CBI accept device specific command
*/
# define US_CBI_ADSC 0
extern int usb_stor_CB_transport ( struct scsi_cmnd * , struct us_data * ) ;
extern int usb_stor_CB_reset ( struct us_data * ) ;
extern int usb_stor_Bulk_transport ( struct scsi_cmnd * , struct us_data * ) ;
extern int usb_stor_Bulk_max_lun ( struct us_data * ) ;
extern int usb_stor_Bulk_reset ( struct us_data * ) ;
extern void usb_stor_invoke_transport ( struct scsi_cmnd * , struct us_data * ) ;
extern void usb_stor_stop_transport ( struct us_data * ) ;
extern int usb_stor_control_msg ( struct us_data * us , unsigned int pipe ,
u8 request , u8 requesttype , u16 value , u16 index ,
void * data , u16 size , int timeout ) ;
extern int usb_stor_clear_halt ( struct us_data * us , unsigned int pipe ) ;
extern int usb_stor_ctrl_transfer ( struct us_data * us , unsigned int pipe ,
u8 request , u8 requesttype , u16 value , u16 index ,
void * data , u16 size ) ;
extern int usb_stor_bulk_transfer_buf ( struct us_data * us , unsigned int pipe ,
void * buf , unsigned int length , unsigned int * act_len ) ;
extern int usb_stor_bulk_transfer_sg ( struct us_data * us , unsigned int pipe ,
void * buf , unsigned int length , int use_sg , int * residual ) ;
2007-09-10 19:01:08 +04:00
extern int usb_stor_bulk_srb ( struct us_data * us , unsigned int pipe ,
struct scsi_cmnd * srb ) ;
2005-04-17 02:20:36 +04:00
2005-06-07 04:21:41 +04:00
extern int usb_stor_port_reset ( struct us_data * us ) ;
2005-04-17 02:20:36 +04:00
# endif