📄 scsi.h
字号:
/////////////////////////////////////////////////////////////////////////////////// File name: SCSI.H// Version: 1.0// Date: 2003/7/13// Description: ////// Author: // Email: // Phone: (03) 578-7888// Company: Faraday Tech. Corp.///////////////////////////////////////////////////////////////////////////////#ifndef SCSI_H#define SCSI_H /* * This header file contains public constants and structures used by * the scsi code for linux. *///=================== 1.Condition Definition ============================================================//========================================================================================================#define ScsiCmd_Fail_Retry 3#define Scsi_Max_Transfer_Len 16384 //65536;;Bruce#define SCSI_DbgPrint printf//#define printk printf//=================== 2.Define Data Type ================================================================//========================================================================================================#define BOOLEAN UINT8#define INT32U UINT32#define INT16U UINT16#define INT8U UINT8/* * SCSI opcodes */#define TEST_UNIT_READY 0x00#define REQUEST_SENSE 0x03#define FORMAT_UNIT 0x04 //Option (unsupport)#define INQUIRY 0x12#define MODE_SELECT 0x15 //(unsupport)#define RESERVE 0x16 //Option (unsupport)#define RELEASE 0x17 //Option (unsupport)#define MODE_SENSE 0x1a#define START_STOP 0x1b // (unsupport)#define ALLOW_MEDIUM_REMOVAL 0x1e#define READ_CAPACITY 0x25#define READ_10 0x28#define WRITE_10 0x2a#define VERIFY 0x2f //(unsupport)#define SYNCHRONIZE_CACHE 0x35 //Option (unsupport)#define WRITE_BUFFER 0x3b //Option (unsupport)#define PERSISTENT_RESERVE_IN 0x5e //Option (unsupport)#define PERSISTENT_RESERVE_OUT 0x5f //Option (unsupport)#define SEND_DIAGNOSTIC 0x1d //(unsupport)/* * Status codes */#define GOOD 0x00#define CHECK_CONDITION 0x01#define CONDITION_GOOD 0x02#define BUSY 0x04#define INTERMEDIATE_GOOD 0x08#define INTERMEDIATE_C_GOOD 0x0a#define RESERVATION_CONFLICT 0x0c#define COMMAND_TERMINATED 0x11#define QUEUE_FULL 0x14#define STATUS_MASK 0x3e/* * SENSE KEYS */#define NO_SENSE 0x00#define RECOVERED_ERROR 0x01#define NOT_READY 0x02#define MEDIUM_ERROR 0x03#define HARDWARE_ERROR 0x04#define ILLEGAL_REQUEST 0x05#define UNIT_ATTENTION 0x06#define DATA_PROTECT 0x07#define BLANK_CHECK 0x08#define COPY_ABORTED 0x0a#define ABORTED_COMMAND 0x0b#define VOLUME_OVERFLOW 0x0d#define MISCOMPARE 0x0e/* * DEVICE TYPES */#define TYPE_DISK 0x00#define TYPE_TAPE 0x01#define TYPE_PRINTER 0x02#define TYPE_PROCESSOR 0x03 /* HP scanners use this */#define TYPE_WORM 0x04 /* Treated as ROM by our system */#define TYPE_ROM 0x05#define TYPE_SCANNER 0x06#define TYPE_MOD 0x07 /* Magneto-optical disk - * - treated as TYPE_DISK */#define TYPE_MEDIUM_CHANGER 0x08#define TYPE_COMM 0x09 /* Communications device */#define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */#define TYPE_NO_LUN 0x7f/* * MESSAGE CODES */#define COMMAND_COMPLETE 0x00#define EXTENDED_MESSAGE 0x01#define EXTENDED_MODIFY_DATA_POINTER 0x00#define EXTENDED_SDTR 0x01#define EXTENDED_EXTENDED_IDENTIFY 0x02 /* SCSI-I only */#define EXTENDED_WDTR 0x03#define SAVE_POINTERS 0x02#define RESTORE_POINTERS 0x03#define DISCONNECT 0x04#define INITIATOR_ERROR 0x05#define ABORT 0x06#define MESSAGE_REJECT 0x07#define NOP 0x08#define MSG_PARITY_ERROR 0x09#define LINKED_CMD_COMPLETE 0x0a#define LINKED_FLG_CMD_COMPLETE 0x0b#define BUS_DEVICE_RESET 0x0c#define INITIATE_RECOVERY 0x0f /* SCSI-II only */#define RELEASE_RECOVERY 0x10 /* SCSI-II only */#define SIMPLE_QUEUE_TAG 0x20#define HEAD_OF_QUEUE_TAG 0x21#define ORDERED_QUEUE_TAG 0x22/* * Here are some scsi specific ioctl commands which are sometimes useful. *//* These are a few other constants only used by scsi devices *//* Note that include/linux/cdrom.h also defines IOCTL 0x5300 - 0x5395 */#define SCSI_IOCTL_GET_IDLUN 0x5382 /* conflicts with CDROMAUDIOBUFSIZ *//* Used to turn on and off tagged queuing for scsi devices */#define SCSI_IOCTL_TAGGED_ENABLE 0x5383#define SCSI_IOCTL_TAGGED_DISABLE 0x5384/* Used to obtain the host number of a device. */#define SCSI_IOCTL_PROBE_HOST 0x5385/* Used to get the bus number for a device */#define SCSI_IOCTL_GET_BUS_NUMBER 0x5386/* Used to get the PCI location of a device */#define SCSI_IOCTL_GET_PCI 0x5387/* * Use these to separate status msg and our bytes * * These are set by: * * status byte = set from target device * msg_byte = return status from host adapter itself. * host_byte = set by low-level driver to indicate status. * driver_byte = set by mid-level. */#define status_byte(result) (((result) >> 1) & 0x1f)#define msg_byte(result) (((result) >> 8) & 0xff)#define host_byte(result) (((result) >> 16) & 0xff)#define driver_byte(result) (((result) >> 24) & 0xff)#define suggestion(result) (driver_byte(result) & SUGGEST_MASK)#define sense_class(sense) (((sense) >> 4) & 0x7)#define sense_error(sense) ((sense) & 0xf)#define sense_valid(sense) ((sense) & 0x80);#define NEEDS_RETRY 0x2001#define SUCCESS 0x2002#define FAILED 0x2003#define QUEUED 0x2004#define SOFT_ERROR 0x2005#define ADD_TO_MLQUEUE 0x2006#define IDENTIFY_BASE 0x80#define IDENTIFY(can_disconnect, lun) (IDENTIFY_BASE |\ ((can_disconnect) ? 0x40 : 0) |\ ((lun) & 0x07))/* * FIXME(eric) - one of the great regrets that I have is that I failed to define * these structure elements as something like sc_foo instead of foo. This would * make it so much easier to grep through sources and so forth. I propose that * all new elements that get added to these structures follow this convention. * As time goes on and as people have the stomach for it, it should be possible to * go back and retrofit at least some of the elements here with with the prefix. */ #define MAX_COMMAND_SIZE 16 #define SCSI_SENSE_BUFFERSIZE 64/* * the return of the status word will be in the following format : * The low byte is the status returned by the SCSI command, * with vendor specific bits masked. * * The next byte is the message which followed the SCSI status. * This allows a stos to be used, since the Intel is a little * endian machine. * * The final byte is a host return code, which is one of the following. * * IE * lsb msb * status msg host code * * Our errors returned by OUR driver, NOT SCSI message. Or'd with * SCSI message passed back to driver <IF any>. */#define DID_OK 0x00 /* NO error */#define DID_NO_CONNECT 0x01 /* Couldn't connect before timeout period */#define DID_BUS_BUSY 0x02 /* BUS stayed busy through time out period */#define DID_TIME_OUT 0x03 /* TIMED OUT for other reason */#define DID_BAD_TARGET 0x04 /* BAD target. */#define DID_ABORT 0x05 /* Told to abort for some other reason */#define DID_PARITY 0x06 /* Parity error */#define DID_ERROR 0x07 /* Internal error */#define DID_RESET 0x08 /* Reset by somebody. */#define DID_BAD_INTR 0x09 /* Got an interrupt we weren't expecting. */#define DID_PASSTHROUGH 0x0a /* Force command past mid-layer */#define DID_SOFT_ERROR 0x0b /* The low level driver just wish a retry */#define DRIVER_OK 0x00 /* Driver status *//* * These are the values that the SCpnt->sc_data_direction and * SRpnt->sr_data_direction can take. These need to be set * The SCSI_DATA_UNKNOWN value is essentially the default. * In the event that the command creator didn't bother to * set a value, you will see SCSI_DATA_UNKNOWN. */#define SCSI_DATA_UNKNOWN 0#define SCSI_DATA_WRITE 1#define SCSI_DATA_READ 2#define SCSI_DATA_NONE 3/* * SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft * T10/1561-D Revision 4 Draft dated 7th November 2002. */#define SAM_STAT_GOOD 0x00#define SAM_STAT_CHECK_CONDITION 0x02#define SAM_STAT_CONDITION_MET 0x04#define SAM_STAT_BUSY 0x08#define SAM_STAT_INTERMEDIATE 0x10#define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14#define SAM_STAT_RESERVATION_CONFLICT 0x18#define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */#define SAM_STAT_TASK_SET_FULL 0x28#define SAM_STAT_ACA_ACTIVE 0x30#define SAM_STAT_TASK_ABORTED 0x40/* * Overrides for Emacs so that we follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically * adjust the settings for this buffer only. This must remain at the end * of the file. * --------------------------------------------------------------------------- * Local variables: * c-indent-level: 4 * c-brace-imaginary-offset: 0 * c-brace-offset: -4 * c-argdecl-indent: 4 * c-label-offset: -4 * c-continued-statement-offset: 4 * c-continued-brace-offset: 0 * indent-tabs-mode: nil * tab-width: 8 * End: */#define CBW_TAG 0x01020304 // temp#define CBW_SIGNATE 0x43425355#define CSW_SIGNATE 0x53425355#define CSW_STATUS_CMD_PASS 0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -