?? fx_mass_storage.h
字號:
#define ASC_MEDIA_CHANGED 0x2800
#define ASC_MEDIA_NOT_PRESENT 0x3A00
#define ASC_INSUFFICIENT_RESOURCES 0x8000
//////////////////////////////////////////////////////////////////////////////
// FORMAT UNIT Command 04H - physically format one track of a diskette
// according to selected options
//////////////////////////////////////////////////////////////////////////////
// Request Sence Command
typedef struct tagSUFIFORMATUNITCMD
{
// Byte 0 - opcode 04H
unsigned uwOpcode : 8;
// Byte 1 from LSB to MSB
unsigned uwDefectListFormat : 3;
unsigned uwCmpList : 1;
unsigned uwFmtData : 1;
unsigned uwLun : 3;
// Bytes 2
unsigned uwTrackNumber : 8;
// Bytes 3, 4 - interleav that shall be used for formatting
// 0 - default interleave, 1 use an interleave of 1:1
unsigned uwInterleaveMsb : 8;
unsigned uwInterleaveLsb : 8;
// Bytes 5-6
unsigned uwReserved1 :16;
// Bytes 7-8
unsigned uwParamListLengthMsb : 8;
unsigned uwParamListLengthLsb : 8;
} SUFIFORMATUNITCMD, *PSUFIFORMATUNITCMD;
typedef struct tagSUFIDEFECTLISTHDR
{
// Byte 0
unsigned uwReserved1 : 8;
// Byte 1 from LSB to MSB
unsigned uwSide : 1;
unsigned uwImmediate : 1;
unsigned uwReserved2 : 2;
unsigned uwSingleTrack : 1;
unsigned uwDisableCertification : 1;
unsigned uwExtended : 1;
unsigned uwFormatOptionValid : 1;
// Bytes 2,3 - shall be set to 8 - number of bytes in Format Descriptor
unsigned uwDefrctListLengthMsb : 8;
unsigned uwDefrctListLengthLsb : 8;
} SUFIDEFECTLISTHDR, *PSUFIDEFECTLISTHDR;
//
typedef struct tagSUFIFORMATDESC
{
// Format Descriptor
// Bytes 0,1,2,3
unsigned uwNumberOfBlocksMsb : 8;
unsigned uwNumberOfBlocksMidMsb : 8;
unsigned uwNumberOfBlocksMidLsb : 8;
unsigned uwNumberOfBlocksLsb : 8;
// Byte 4
unsigned uwReserved3 : 8;
// Byte 5
unsigned uwBlockLengthMsb : 8;
// Byte 6
unsigned uwBlockLengthMid : 8;
// Byte 7
unsigned uwBlockLengthLsb : 8;
} SUFIFORMATDESC, *PSUFIFORMATDESC;
//
typedef struct tagSUFIFORMATPARAMLIST
{
// Bytes 0-3
SUFIDEFECTLISTHDR sDefectListHeader;
// Bytes 4-11
SUFIFORMATDESC sFormatDescriptor;
} SUFIFORMATPARAMLIST, *PSUFIFORMATPARAMLIST;
//////////////////////////////////////////////////////////////////////////////
// READ(10) Command A8H / WRITE(10) Command AAH
//////////////////////////////////////////////////////////////////////////////
typedef struct tagSUFIRDWR10CMD
{
// Byte 0 - 28H/2AH
unsigned uwOpCode : 8;
// Byte 1 from LSB to MSB; Dpo, Fua and RelAdr shall be set to 0
unsigned uwRelAdr : 1;
unsigned uwReserved1 : 2;
unsigned uwFua : 1;
unsigned uwDpo : 1;
unsigned uwLun : 3;
// Bytes 2,3,4,5
unsigned uwLbaMsb : 8;
unsigned uwLbaMidMsb : 8;
unsigned uwLbaMidLsb : 8;
unsigned uwLbaLsb : 8;
// Byte 6
unsigned uwReserved2 : 8;
// Bytes 7,8 - Number of Logical Blocks
unsigned uwTransferLengthMsb : 8;
unsigned uwTransferLengthLsb : 8;
} SUFIRDWR10CMD, *PSUFIRDWR10CMD;
//////////////////////////////////////////////////////////////////////////////
// READ(12) Command A8H / WRITE(12) Command AAH
//////////////////////////////////////////////////////////////////////////////
typedef struct tagSUFIRDWR12CMD
{
// Byte 0 - A8H/AAH
unsigned uwOpCode : 8;
// Byte 1 from LSB to MSB
unsigned uwRelAdr : 1;
unsigned uwReserved1 : 2;
unsigned uwFua : 1;
unsigned uwDpo : 1;
unsigned uwLun : 3;
// Bytes 2-5
unsigned uwLbaMsb : 8;
unsigned uwLbaMidMsb : 8;
unsigned uwLbaMidLsb : 8;
unsigned uwLbaLsb : 8;
// Bytes 6-9
unsigned uwTransferLengthMsb : 8;
unsigned uwTransferLengthMidMsb : 8;
unsigned uwTransferLengthMidLsb : 8;
unsigned uwTransferLengthLsb : 8;
} SUFIRDWR12CMD, *PSUFIRDWR12CMD;
//////////////////////////////////////////////////////////////////////////////
// PREVENT ALLOW MEDIUM REMOVAL command 1EH
//////////////////////////////////////////////////////////////////////////////
// Prevent Allow Medium Removal command
typedef struct tagSUFIPREVENTALLOWCMD
{
// Byte 0 - 1EH
unsigned uwOpCode : 8;
// Byte 1 from LSB to MSB
unsigned uwReserved1 : 5;
unsigned uwLun : 3;
// Bytes 2-3
unsigned uwReserved2 :16;
// Byte 4, 0 allow media removal, 1 prevent media removal
unsigned uwPrevent : 1;
unsigned uwReserved3 : 7;
} SUFIPREVENTALLOWCMD, *PSUFIPREVENTALLOWCMD;
//////////////////////////////////////////////////////////////////////////////
// START-STOP UNIT Command 1BH
//////////////////////////////////////////////////////////////////////////////
// Start Stop Command
typedef struct tagSUFISTARTSTOPCMD
{
// Byte 0
unsigned uwOpCode : 8;
// Byte 1 LSB - MSB
unsigned uwImmediate : 1;
unsigned uwReserved1 : 4;
unsigned uwLun : 3;
// Byte 2,3
unsigned uwReserved2 :16;
// Byte 4, Start bit enables/disables media access operations
unsigned uwStart : 1;
unsigned uwLoadEject : 1;
unsigned uwReserved3 : 6;
} SUFISTARTSTOPCMD, *PSUFISTARTSTOPCMD;
//////////////////////////////////////////////////////////////////////////////
// MODE SENSE Command 5AH / MODE-SELECT Command 55H
//////////////////////////////////////////////////////////////////////////////
// Mode Sense command
// Start Stop Command
typedef struct tagSUFIMODESENSECMD
{
// Byte 0
unsigned uwOpCode : 8;
// Byte 1 LSB - MSB
unsigned uwReserved1 : 3;
unsigned uwDbd : 1;
unsigned uwReserved2 : 1;
unsigned uwLun : 3;
// Byte 2
unsigned uwPageCode : 6;
unsigned uwPc : 2;
// Byte 3-6
unsigned uwReserved3 :16;
unsigned uwReserved4 :16;
// Byte 7-8
unsigned uwParamListLengthMsb : 8;
unsigned uwParamListLengthLsb : 8;
} SUFIMODESENSECMD, *PSUFIMODESENSECMD;
//
typedef struct tagSUFIMODEPARAMHDR
{
// Byte 0,1
unsigned uwModeDataLengthMsb : 8;
unsigned uwModeDataLengthLsb : 8;
// Byte 2
unsigned uwMediumTypeCode : 8;
// Byte 3 - LSB to MSB
unsigned uwReserved1 : 4;
unsigned uwDpofua : 1;
unsigned uwReserved2 : 2;
unsigned uwWriteProtect : 1;
// Bytes 4-7
USHORT uwReserved3[4];
} SUFIMODEPARAMHDR, *PSUFIMODEPARAMHDR;
//
typedef struct tagSFCURDWRRECOVERYPAGE
{
// Byte 0 from LSB to MSB
unsigned uwPageCode : 6;
unsigned uwReserved1 : 1;
unsigned uwParamSaveable : 1;
// Byte 1
unsigned uwPageLength : 8;
// Byte 2 from LSB to MSB
unsigned uwDisableCorrection : 1;
unsigned uwReserved2 : 1;
unsigned uwPostError : 1;
unsigned uwReserved3 : 1;
unsigned uwReadContinuose : 1;
unsigned uwReserved4 : 2;
unsigned uwAutoWriteEnable : 1;
// Byte 3
unsigned uwReadRetryCount : 8;
// Byte 4,5,6,7
USHORT uwReserved5[4];
// Byte 8
unsigned uwWriteRetryCount : 8;
// Byte 9,10,11
USHORT uwReserved6[3];
} SFCURDWRRECOVERYPAGE, *PSFCURDWRRECOVERYPAGE;
//
typedef struct tagSUFIMODEPARAMLIST
{
SUFIMODEPARAMHDR sHeader;
} SUFIMODEPARAMLIST, *PSUFIMODEPARAMLIST;
#pragma pack()
// Mode Page Code
#define READ_WRITE_ERROR_RECOVERY_PAGE 0x01
#define FLEXIBLE_DISK_PAGE 0x05
#define REMOVABLE_BLOCK_ACCESS_CAPACITIES_PAGE 0x1B
#define TIMER_AND_PROTECT_PAGE 0x1C
#define ALL_PAGES 0x3F
// Medium Type Code
#define MEDIUM_TYPE_DEFAULT 0x00
#define MEDIUM_TYPE_720KB 0x1E
#define MEDIUM_TYPE_1_25MB 0x93
#define MEDIUM_TYPE_1_44MB 0x94
///////////////////////////////////////////////////////////////////////////////
// Mass Storage Bulk Only structures
///////////////////////////////////////////////////////////////////////////////
#pragma pack(1)
// Bulk-Only Command Block wrapper structure
typedef struct tagSCBW
{
ULONG ulSignature;
ULONG ulTag;
ULONG ulDataTransferLength;
BYTE byFlags;
unsigned byLun : 4;
unsigned byReserved2 : 4;
unsigned byLength : 5;
unsigned byReserved3 : 3;
BYTE byCommandBlock[16];
// BYTE byPadding[10];
} SCBW, *PSCBW;
// Bulk-Only Command Status Wrapper structure
typedef struct tagSCSW
{
ULONG ulSignature;
ULONG ulTag;
ULONG ulDataResidue;
BYTE byStatus;
} SCSW, *PSCSW;
#pragma pack()
///////////////////////////////////////////////////////////////////////////////
// Mass storage driver specific
///////////////////////////////////////////////////////////////////////////////
#define MASS_STORAGE_STATUS_PASSED 0
#define MASS_STORAGE_STATUS_FAILED 1
#define MASS_STORAGE_STATUS_PHASE_ERROR 2
#define MASS_STORAGE_CSW_SIGNATURE (0x53425355UL)
#define MASS_STORAGE_CBW_SIGNATURE (0x43425355UL)
#define MASS_STORAGE_DATA_OUT 0x00
#define MASS_STORAGE_DATA_IN 0x80
#endif //__FX_MASS_STORAGE_H
#endif // I86_USB_SUPPORT
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -