📄 scsi.h
字号:
#ifndef __SCSI_H__
#define __SCSI_H__
#include "GENLIB.H"
#define MAX_LUN 2 // 2002.08.29 Insert by Nicehong
typedef int SCSI_BOOL;
/* SCSI operation code */
#define SCSI_OPCODE_INQUIRY 0x12
#define SCSI_OPCODE_READ_FORMAT_CAPACITY 0x23 // only in UFI, not in SCSI
#define SCSI_OPCODE_READ_CAPACITY 0x25
#define SCSI_OPCODE_REQUEST_SENSE 0x03
#define SCSI_OPCODE_READ6 0x08
#define SCSI_OPCODE_READ10 0x28
#define SCSI_OPCODE_MODE_SELECT6 0x15
#define SCSI_OPCODE_MODE_SENSE6 0x1a
//#define SCSI_OPCODE_MODE_SENSE10 0x5a
#define SCSI_OPCODE_ALLOW_REMOVAL 0x1e
#define SCSI_OPCODE_WRITE10 0x2a
#define SCSI_OPCODE_FORMAT_UNIT 0x04
#define SCSI_OPCODE_RESERVED 0x16
#define SCSI_OPCODE_SEND_DIAGNOSTIC 0x1d
#define SCSI_OPCODE_TEST_UNIT_READY 0x00
#define SCSI_OPCODE_START_STOP_UNIT 0x1b
#define SCSI_OPCODE_VERIFY 0x2f
enum _tag_scsi_error {
SCSI_ERR_NOERROR = 0,
SCSI_ERR_INVALID_CBW,
SCSI_ERR_UNSUPPORTED,
SCSI_ERR_SPECIFIC // Locally assign the sense key
};
#define SCSI_OK SCSI_ERR_NOERROR
#define SCSI_ERR_OK SCSI_ERR_NOERROR
#pragma packed on
typedef struct __tag_scsi_COMMAND
{
unsigned char opcode;
unsigned char parameters[15];
} SCSI_COMMAND;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////7
// INQUIRY
#pragma packed on
typedef struct __tag_scsi_command_INQUIRY
{
unsigned char opcode; // must be 0x12 = INQUIRY
unsigned char bEVPD; // = LogicalUnit:3, Reserved1:4, EVPD:1;
unsigned char bPageCode;
unsigned char bReserved2;
unsigned char bAllocLength;
unsigned char bControl;
} SCSI_COMMAND_INQUIRY;
#pragma packed off
#define SCSI_DEVICE_TYPE_DIRECT_ACCESS 0x00 /* disks */
#define SCSI_DEVICE_TYPE_SEQUENTIAL_ACCESS 0x01 /* tapes */
#define SCSI_DEVICE_TYPE_PRINTER 0x02 /* printers */
#define SCSI_DEVICE_TYPE_PROCESSOR 0x03 /* scanners, printers, etc */
#define SCSI_DEVICE_TYPE_WRITE_ONCE_READ_MULTIPLE 0x04 /* worms */
#define SCSI_DEVICE_TYPE_READ_ONLY_DIRECT_ACCESS 0x05 /* cdroms */
#define SCSI_DEVICE_TYPE_SCANNER 0x06 /* scanners */
#define SCSI_DEVICE_TYPE_OPTICAL 0x07 /* optical disks */
#define SCSI_DEVICE_TYPE_MEDIUM_CHANGER 0x08 /* jukebox */
#define SCSI_DEVICE_TYPE_COMMUNICATION 0x09 /* network */
#define SCSI_DEVICE_TYPE_ASC0T18 0x0A /* ASC IT8 */
#define SCSI_DEVICE_TYPE_ASC1T18 0x0B /* ASC IT8 */
#define SCSI_DEVICE_TYPE_SCC2 0x0C /* Storage Controller device */
#define SCSI_DEVICE_TYPE_SES 0x0D /* Enclousre Service device */
#define SCSI_DEVICE_TYPE_RBC 0x0E /* RBC device */
#define SCSI_DEVICE_TYPE_OCRW 0x0F /* optical Card Reader /writer Device */
#define SCSI_DEVICE_TYPE_UNKNOWN
#pragma packed on
typedef struct __tag_scsi_data_STANDARD_INQUITY
{
unsigned char bPeriphDevType; // = PeriphQualifier:3, PeriphDevType:5
unsigned char bDevTypeModifier; // = RMB:1, DevTypeModifier:7
// (RMB = "removable media bit")
unsigned char bVersion; // = ISOVersion:2, ECMAVersion:3, ANSIVersion:3
unsigned char bDeviceCapability; // = AENC:1, TrmIOP:1, Reserved1:2, ResponseFormat:4
unsigned char bAdditionalLength;
unsigned char bReserved2;
unsigned char bReserved3;
unsigned char bDeviceSupport; // = RelAddr:1, WBus32:1, WBus16:1, Sync:1
// = Linked:1, Reserved4:1, CmdQueue, SoftReset:1
unsigned char sVendorID[8];
unsigned char sProductID[16];
unsigned char sProductRevision[4];
} SCSI_DATA_STANDARD_INQUIRY;
#pragma packed off
#pragma packed on
typedef struct __tag_scsi_data_SERIALNUM_INQUITY
{
unsigned char bPeriphDeviceType; // = PeriphQualifier:3, PeriphDeviceType:5
unsigned char bPageCode;
unsigned char bReserved1;
unsigned char bPageLength;
unsigned char sSerialNum[24];
} SCSI_DATA_SERIALNUM_INQUIRY;
#pragma packed off
#define SCSI_INQUIRY_ASCIIID_STRING_LEN 32
#pragma packed on
typedef struct __tag_scsi_inquiry_ID_DESC {
unsigned char bCodeSet; // = Reserved1:4, CodeSet:4
unsigned char bIDType; // = Reserved2:2, Association:2, IDType:4
unsigned char bReserved3;
unsigned char bIDLength;
unsigned char sAsciiID[SCSI_INQUIRY_ASCIIID_STRING_LEN];
} SCSI_DATA_INQUIRY_ID_DESC;
#pragma packed off
#pragma packed on
typedef struct __tag_scsi_data_ASCIIID_INQUITY
{
unsigned char bPeriphDeviceType; // = PeriphQualifier:3, PeriphDeviceType:5
unsigned char bPageCode;
unsigned char bReserved1;
unsigned char bPageLength;
SCSI_DATA_INQUIRY_ID_DESC id[1];
} SCSI_DATA_ASCIIID_INQUIRY;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////7
// READ FORMAT CAPACITY
#pragma packed on
typedef struct __tag_scsi_command_READ_FORMAT_CAPACITY
{
unsigned char opcode; // must be 0x23 = READ_FORMAT_CAPACITY
unsigned char bLogicalUnit; // = LogicalUnit:3, Reserved1:5
unsigned char bReserved2;
unsigned char bReserved3;
unsigned char bReserved4;
unsigned char bReserved5;
unsigned char bReserved6;
unsigned short int wAllocLength;
} SCSI_COMMAND_READ_FORMAT_CAPACITY;
#pragma packed off
#pragma packed on
typedef struct __tag_scsi_data_CAPACITY_LIST_HEADER
{
unsigned char bReserved1;
unsigned char bReserved2;
unsigned char bReserved3;
unsigned char bCapacityListLen;
} SCSI_DATA_CAPACITY_LIST_HEADER;
#pragma packed off
#pragma packed on
typedef struct __tag_scsi_data_CUR_MAX_CAPACITY_DESC
{
unsigned long int dwBlockCount;
unsigned char bDescriptorCode; // = Reserved1:6, DescriptorCode:2
unsigned char xBlockLength[3];
} SCSI_DATA_CUR_MAX_CAPACITY_DESC;
#pragma packed off
#pragma packed on
typedef struct __tag_scsi_data_FORMATTABLE_CAPACITY_DESC
{
unsigned long int dwBlockCount;
unsigned char bReserved1;
unsigned char xBlockLength[3];
} SCSI_DATA_FORMATTABLE_CAPACITY_DESC;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////7
// READ CAPACITY
#pragma packed on
typedef struct __tag_scsi_command_READ_CAPACITY
{
unsigned char opcode; // must be 0x25 = READ_CAPACITY
unsigned char bLogicalUnit; // = LogicalUnit:3, Reserved1:4, RelAddr:1
unsigned long dwLogicalBlockAddr;
unsigned char bReserved2;
unsigned char bReserved3;
unsigned char bPMI; // = Reserved4:7, PMI:1
unsigned char bControl;
} SCSI_COMMAND_READ_CAPACITY;
#pragma packed off
#pragma packed on
typedef struct __tag_scsi_data_READ_CAPACITY
{
unsigned long dwLogicalBlockAddr;
unsigned long dwBlockLength;
} SCSI_DATA_READ_CAPACITY;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////7
// REQUEST SENSE
#pragma packed on
typedef struct __tag_scsi_command_REQUEST_SENSE
{
unsigned char opcode;
unsigned char bLogicalUnit; // = LogicalUnit:3, Reserved1:5
unsigned char bReserved2;
unsigned char bReserved3;
unsigned char bAllocLength;
unsigned char bControl;
} SCSI_COMMAND_REQUEST_SENSE;
#pragma packed off
#pragma packed on
typedef struct __tag_scsi_data_REQUEST_SENSE
{
unsigned char bErrorCode; // = Valid:1, ErrorCode:7
unsigned char bSegNumber;
unsigned char bSenseKey; // = FileMark:1, EOM:1, ILI:1, Reserved1:1, SenseKey:4
unsigned long int dwInfo;
unsigned char bAddSenseLength;
unsigned long int dwCommandSpecificInfo;
unsigned char bASC;
unsigned char bASCQ;
unsigned char bFieldRepaceUnitCode;
unsigned char xSenseKeySpecific[3];
} SCSI_DATA_REQUEST_SENSE;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////7
// READ(10)
#pragma packed on
typedef struct __tag_scsi_command_READ10
{
unsigned char opcode;
unsigned char bLogicalUnit; // LogicalUnit:3, DPO:1, FUA:1, Reserved1:2, RelAddr:1
unsigned long dwLogicalBlockAddr;
unsigned char bReserved2;
unsigned short int wTransferLength;
unsigned char bContol;
} SCSI_COMMAND_READ10;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////7
// MODE SELECT(6)
#pragma packed on
typedef struct __tag_scsi_command_MODE_SELECT6
{
unsigned char opcode; // must be 0x15 = MODE_SELECT6
unsigned char bLogicalUnit; // LogicalUnit:3, PF:1, Reserved1:3, SP:1
unsigned char bReserved2;
unsigned char bReserved3;
unsigned char bParamListLen;
unsigned char bControl;
} SCSI_COMMAND_MODE_SELECT6;
#pragma packed off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -