1*59b4e0cdSNishad Kamdar /* SPDX-License-Identifier: GPL-2.0+ */ 2f0183a33SFelipe Balbi /* 3f0183a33SFelipe Balbi * Driver for USB Mass Storage compliant devices 41da177e4SLinus Torvalds * Protocol Functions Header File 51da177e4SLinus Torvalds * 61da177e4SLinus Torvalds * Current development and maintenance by: 71da177e4SLinus Torvalds * (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net) 81da177e4SLinus Torvalds * 91da177e4SLinus Torvalds * This driver is based on the 'USB Mass Storage Class' document. This 101da177e4SLinus Torvalds * describes in detail the protocol used to communicate with such 111da177e4SLinus Torvalds * devices. Clearly, the designers had SCSI and ATAPI commands in 121da177e4SLinus Torvalds * mind when they created this document. The commands are all very 131da177e4SLinus Torvalds * similar to commands in the SCSI-II and ATAPI specifications. 141da177e4SLinus Torvalds * 151da177e4SLinus Torvalds * It is important to note that in a number of cases this class 161da177e4SLinus Torvalds * exhibits class-specific exemptions from the USB specification. 171da177e4SLinus Torvalds * Notably the usage of NAK, STALL and ACK differs from the norm, in 181da177e4SLinus Torvalds * that they are used to communicate wait, failed and OK on commands. 191da177e4SLinus Torvalds * 201da177e4SLinus Torvalds * Also, for certain devices, the interrupt endpoint is used to convey 211da177e4SLinus Torvalds * status of a command. 221da177e4SLinus Torvalds */ 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds #ifndef _PROTOCOL_H_ 251da177e4SLinus Torvalds #define _PROTOCOL_H_ 261da177e4SLinus Torvalds 271da177e4SLinus Torvalds /* Protocol handling routines */ 283dae5345SAlan Stern extern void usb_stor_pad12_command(struct scsi_cmnd*, struct us_data*); 291da177e4SLinus Torvalds extern void usb_stor_ufi_command(struct scsi_cmnd*, struct us_data*); 301da177e4SLinus Torvalds extern void usb_stor_transparent_scsi_command(struct scsi_cmnd*, 311da177e4SLinus Torvalds struct us_data*); 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds /* struct scsi_cmnd transfer buffer access utilities */ 341da177e4SLinus Torvalds enum xfer_buf_dir {TO_XFER_BUF, FROM_XFER_BUF}; 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds extern unsigned int usb_stor_access_xfer_buf(unsigned char *buffer, 371f6f31a0SJens Axboe unsigned int buflen, struct scsi_cmnd *srb, struct scatterlist **, 381da177e4SLinus Torvalds unsigned int *offset, enum xfer_buf_dir dir); 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds extern void usb_stor_set_xfer_buf(unsigned char *buffer, 411da177e4SLinus Torvalds unsigned int buflen, struct scsi_cmnd *srb); 421da177e4SLinus Torvalds #endif 43