scsi.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 1,695 行 · 第 1/4 页
H
1,695 行
#define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521)
/* Read Capacity Data. Returned in Big Endian format */
typedef struct _READ_CAPACITY_DATA {
ULONG LogicalBlockAddress;
ULONG BytesPerBlock;
} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
/* Read Block Limits Data. Returned in Big Endian format */
typedef struct _READ_BLOCK_LIMITS {
UCHAR Reserved;
UCHAR BlockMaximumSize[3];
UCHAR BlockMinimumSize[2];
} READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA;
typedef struct _MODE_PARAMETER_HEADER {
UCHAR ModeDataLength;
UCHAR MediumType;
UCHAR DeviceSpecificParameter;
UCHAR BlockDescriptorLength;
}MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
typedef struct _MODE_PARAMETER_HEADER10 {
UCHAR ModeDataLength[2];
UCHAR MediumType;
UCHAR DeviceSpecificParameter;
UCHAR Reserved[2];
UCHAR BlockDescriptorLength[2];
} MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
#define MODE_FD_SINGLE_SIDE 0x01
#define MODE_FD_DOUBLE_SIDE 0x02
#define MODE_FD_MAXIMUM_TYPE 0x1E
#define MODE_DSP_FUA_SUPPORTED 0x10
#define MODE_DSP_WRITE_PROTECT 0x80
typedef struct _MODE_PARAMETER_BLOCK {
UCHAR DensityCode;
UCHAR NumberOfBlocks[3];
UCHAR Reserved;
UCHAR BlockLength[3];
} MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
typedef struct _MODE_DISCONNECT_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved : 1;
UCHAR PageSavable : 1;
UCHAR PageLength;
UCHAR BufferFullRatio;
UCHAR BufferEmptyRatio;
UCHAR BusInactivityLimit[2];
UCHAR BusDisconnectTime[2];
UCHAR BusConnectTime[2];
UCHAR MaximumBurstSize[2];
UCHAR DataTransferDisconnect : 2;
UCHAR Reserved2[3];
}MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE;
typedef struct _MODE_CACHING_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved : 1;
UCHAR PageSavable : 1;
UCHAR PageLength;
UCHAR ReadDisableCache : 1;
UCHAR MultiplicationFactor : 1;
UCHAR WriteCacheEnable : 1;
UCHAR Reserved2 : 5;
UCHAR WriteRetensionPriority : 4;
UCHAR ReadRetensionPriority : 4;
UCHAR DisablePrefetchTransfer[2];
UCHAR MinimumPrefetch[2];
UCHAR MaximumPrefetch[2];
UCHAR MaximumPrefetchCeiling[2];
}MODE_CACHING_PAGE, *PMODE_CACHING_PAGE;
typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE {
UCHAR PageLength;
UCHAR WriteType : 4;
UCHAR TestWrite : 1;
UCHAR LinkSizeValid : 1;
UCHAR BufferUnderrunFreeEnabled : 1;
UCHAR Reserved2 : 1;
UCHAR TrackMode : 4;
UCHAR Copy : 1;
UCHAR FixedPacket : 1;
UCHAR MultiSession : 2;
UCHAR DataBlockType : 4;
UCHAR Reserved3 : 4;
UCHAR LinkSize;
UCHAR Reserved4;
UCHAR HostApplicationCode : 6;
UCHAR Reserved5 : 2;
UCHAR SessionFormat;
UCHAR Reserved6;
UCHAR PacketSize[4];
UCHAR AudioPauseLength[2];
UCHAR Reserved7 : 7;
UCHAR MediaCatalogNumberValid : 1;
UCHAR MediaCatalogNumber[13];
UCHAR MediaCatalogNumberZero;
UCHAR MediaCatalogNumberAFrame;
UCHAR Reserved8 : 7;
UCHAR ISRCValid : 1;
UCHAR ISRCCountry[2];
UCHAR ISRCOwner[3];
UCHAR ISRCRecordingYear[2];
UCHAR ISRCSerialNumber[5];
UCHAR ISRCZero;
UCHAR ISRCAFrame;
UCHAR ISRCReserved;
UCHAR SubHeaderData[4];
} MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE;
typedef struct _MODE_FLEXIBLE_DISK_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved : 1;
UCHAR PageSavable : 1;
UCHAR PageLength;
UCHAR TransferRate[2];
UCHAR NumberOfHeads;
UCHAR SectorsPerTrack;
UCHAR BytesPerSector[2];
UCHAR NumberOfCylinders[2];
UCHAR StartWritePrecom[2];
UCHAR StartReducedCurrent[2];
UCHAR StepRate[2];
UCHAR StepPluseWidth;
UCHAR HeadSettleDelay[2];
UCHAR MotorOnDelay;
UCHAR MotorOffDelay;
UCHAR Reserved2 : 5;
UCHAR MotorOnAsserted : 1;
UCHAR StartSectorNumber : 1;
UCHAR TrueReadySignal : 1;
UCHAR StepPlusePerCyclynder : 4;
UCHAR Reserved3 : 4;
UCHAR WriteCompenstation;
UCHAR HeadLoadDelay;
UCHAR HeadUnloadDelay;
UCHAR Pin2Usage : 4;
UCHAR Pin34Usage : 4;
UCHAR Pin1Usage : 4;
UCHAR Pin4Usage : 4;
UCHAR MediumRotationRate[2];
UCHAR Reserved4[2];
} MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE;
typedef struct _MODE_FORMAT_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved : 1;
UCHAR PageSavable : 1;
UCHAR PageLength;
UCHAR TracksPerZone[2];
UCHAR AlternateSectorsPerZone[2];
UCHAR AlternateTracksPerZone[2];
UCHAR AlternateTracksPerLogicalUnit[2];
UCHAR SectorsPerTrack[2];
UCHAR BytesPerPhysicalSector[2];
UCHAR Interleave[2];
UCHAR TrackSkewFactor[2];
UCHAR CylinderSkewFactor[2];
UCHAR Reserved2 : 4;
UCHAR SurfaceFirst : 1;
UCHAR RemovableMedia : 1;
UCHAR HardSectorFormating : 1;
UCHAR SoftSectorFormating : 1;
UCHAR Reserved3[3];
} MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE;
typedef struct _MODE_RIGID_GEOMETRY_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved : 1;
UCHAR PageSavable : 1;
UCHAR PageLength;
UCHAR NumberOfCylinders[3];
UCHAR NumberOfHeads;
UCHAR StartWritePrecom[3];
UCHAR StartReducedCurrent[3];
UCHAR DriveStepRate[2];
UCHAR LandZoneCyclinder[3];
UCHAR RotationalPositionLock : 2;
UCHAR Reserved2 : 6;
UCHAR RotationOffset;
UCHAR Reserved3;
UCHAR RoataionRate[2];
UCHAR Reserved4[2];
} MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE;
typedef struct _MODE_READ_WRITE_RECOVERY_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved1 : 1;
UCHAR PSBit : 1;
UCHAR PageLength;
UCHAR DCRBit : 1;
UCHAR DTEBit : 1;
UCHAR PERBit : 1;
UCHAR EERBit : 1;
UCHAR RCBit : 1;
UCHAR TBBit : 1;
UCHAR ARRE : 1;
UCHAR AWRE : 1;
UCHAR ReadRetryCount;
UCHAR Reserved4[4];
UCHAR WriteRetryCount;
UCHAR Reserved5[3];
} MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE;
typedef struct _MODE_READ_RECOVERY_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved1 : 1;
UCHAR PSBit : 1;
UCHAR PageLength;
UCHAR DCRBit : 1;
UCHAR DTEBit : 1;
UCHAR PERBit : 1;
UCHAR Reserved2 : 1;
UCHAR RCBit : 1;
UCHAR TBBit : 1;
UCHAR Reserved3 : 2;
UCHAR ReadRetryCount;
UCHAR Reserved4[4];
} MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE;
typedef struct _MODE_INFO_EXCEPTIONS {
UCHAR PageCode : 6;
UCHAR Reserved1 : 1;
UCHAR PSBit : 1;
UCHAR PageLength;
_ANONYMOUS_UNION union {
UCHAR Flags;
_ANONYMOUS_STRUCT struct {
UCHAR LogErr : 1;
UCHAR Reserved2 : 1;
UCHAR Test : 1;
UCHAR Dexcpt : 1;
UCHAR Reserved3 : 3;
UCHAR Perf : 1;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
UCHAR ReportMethod : 4;
UCHAR Reserved4 : 4;
UCHAR IntervalTimer[4];
UCHAR ReportCount[4];
} MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS;
/* CDROM audio control */
#define CDB_AUDIO_PAUSE 0x00
#define CDB_AUDIO_RESUME 0x01
#define CDB_DEVICE_START 0x11
#define CDB_DEVICE_STOP 0x10
#define CDB_EJECT_MEDIA 0x10
#define CDB_LOAD_MEDIA 0x01
#define CDB_SUBCHANNEL_HEADER 0x00
#define CDB_SUBCHANNEL_BLOCK 0x01
#define CDROM_AUDIO_CONTROL_PAGE 0x0E
#define MODE_SELECT_IMMEDIATE 0x04
#define MODE_SELECT_PFBIT 0x10
#define CDB_USE_MSF 0x01
typedef struct _PORT_OUTPUT {
UCHAR ChannelSelection;
UCHAR Volume;
} PORT_OUTPUT, *PPORT_OUTPUT;
typedef struct _AUDIO_OUTPUT {
UCHAR CodePage;
UCHAR ParameterLength;
UCHAR Immediate;
UCHAR Reserved[2];
UCHAR LbaFormat;
UCHAR LogicalBlocksPerSecond[2];
PORT_OUTPUT PortOutput[4];
} AUDIO_OUTPUT, *PAUDIO_OUTPUT;
/* Multisession CDROMs */
#define GET_LAST_SESSION 0x01
#define GET_SESSION_DATA 0x02;
/* Atapi 2.5 changers */
typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER {
UCHAR CurrentSlot : 5;
UCHAR ChangerState : 2;
UCHAR Fault : 1;
UCHAR Reserved : 5;
UCHAR MechanismState : 3;
UCHAR CurrentLogicalBlockAddress[3];
UCHAR NumberAvailableSlots;
UCHAR SlotTableLength[2];
} MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER;
typedef struct _SLOT_TABLE_INFORMATION {
UCHAR DiscChanged : 1;
UCHAR Reserved : 6;
UCHAR DiscPresent : 1;
UCHAR Reserved2[3];
} SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION;
typedef struct _MECHANICAL_STATUS {
MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader;
SLOT_TABLE_INFORMATION SlotTableInfo[1];
} MECHANICAL_STATUS, *PMECHANICAL_STATUS;
/* Tape definitions */
typedef struct _TAPE_POSITION_DATA {
UCHAR Reserved1 : 2;
UCHAR BlockPositionUnsupported : 1;
UCHAR Reserved2 : 3;
UCHAR EndOfPartition : 1;
UCHAR BeginningOfPartition : 1;
UCHAR PartitionNumber;
USHORT Reserved3;
UCHAR FirstBlock[4];
UCHAR LastBlock[4];
UCHAR Reserved4;
UCHAR NumberOfBlocks[3];
UCHAR NumberOfBytes[4];
} TAPE_POSITION_DATA, *PTAPE_POSITION_DATA;
/* This structure is used to convert little endian ULONGs
to SCSI CDB big endians values. */
typedef union _EIGHT_BYTE {
_ANONYMOUS_STRUCT struct {
UCHAR Byte0;
UCHAR Byte1;
UCHAR Byte2;
UCHAR Byte3;
UCHAR Byte4;
UCHAR Byte5;
UCHAR Byte6;
UCHAR Byte7;
} DUMMYSTRUCTNAME;
ULONGLONG AsULongLong;
} EIGHT_BYTE, *PEIGHT_BYTE;
typedef union _FOUR_BYTE {
_ANONYMOUS_STRUCT struct {
UCHAR Byte0;
UCHAR Byte1;
UCHAR Byte2;
UCHAR Byte3;
} DUMMYSTRUCTNAME;
ULONG AsULong;
} FOUR_BYTE, *PFOUR_BYTE;
typedef union _TWO_BYTE {
_ANONYMOUS_STRUCT struct {
UCHAR Byte0;
UCHAR Byte1;
} DUMMYSTRUCTNAME;
USHORT AsUShort;
} TWO_BYTE, *PTWO_BYTE;
/* Byte reversing macro for converting between
big- and little-endian formats */
#define REVERSE_BYTES_QUAD(Destination, Source) { \
PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \
PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \
_val1->Byte7 = _val2->Byte0; \
_val1->Byte6 = _val2->Byte1; \
_val1->Byte5 = _val2->Byte2; \
_val1->Byte4 = _val2->Byte3; \
_val1->Byte3 = _val2->Byte4; \
_val1->Byte2 = _val2->Byte5; \
_val1->Byte1 = _val2->Byte6; \
_val1->Byte0 = _val2->Byte7; \
}
#define REVERSE_BYTES(Destination, Source) { \
PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \
PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \
_val1->Byte3 = _val2->Byte0; \
_val1->Byte2 = _val2->Byte1; \
_val1->Byte1 = _val2->Byte2; \
_val1->Byte0 = _val2->Byte3; \
}
#define REVERSE_BYTES_SHORT(Destination, Source) { \
PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \
PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \
_val1->Byte1 = _val2->Byte0; \
_val1->Byte0 = _val2->Byte1; \
}
#define REVERSE_SHORT(Short) { \
UCHAR _val; \
PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \
_val = _val2->Byte0; \
_val2->Byte0 = _val2->Byte1; \
_val2->Byte1 = _val; \
}
#define REVERSE_LONG(Long) { \
UCHAR _val; \
PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \
_val = _val2->Byte3; \
_val2->Byte3 = _val2->Byte0; \
_val2->Byte0 = _val; \
_val = _val2->Byte2; \
_val2->Byte2 = _val2->Byte1; \
_val2->Byte1 = _val; \
}
#define WHICH_BIT(Data, Bit) { \
UCHAR _val; \
for (_val = 0; _val < 32; _val++) { \
if (((Data) >> _val) == 1) { \
break; \
} \
} \
ASSERT(_val != 32); \
(Bit) = _val; \
}
#ifdef __cplusplus
}
#endif
#endif /* __SCSI_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?