⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fx_mass_storage.h

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 H
📖 第 1 页 / 共 2 页
字号:
#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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -