forked from Minki/linux
7cb2d993c4
Now that the SPDX tag is in all USB files, that identifies the license in a specific and legally-defined manner. So the extra GPL text wording can be removed as it is no longer needed at all. This is done on a quest to remove the 700+ different ways that files in the kernel describe the GPL license text. And there's unneeded stuff like the address (sometimes incorrect) for the FSF which is never needed. No copyright headers or other non-license-description text was removed. Cc: Oliver Neukum <oneukum@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
92 lines
3.5 KiB
C
92 lines
3.5 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* 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.
|
|
*/
|
|
|
|
#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);
|
|
extern int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe,
|
|
struct scsi_cmnd* srb);
|
|
|
|
extern int usb_stor_port_reset(struct us_data *us);
|
|
#endif
|