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

📄 mu_scsi.h

📁 本程序为ST公司开发的源代码
💻 H
字号:
/******************************************************************************                                                                           **      Copyright Mentor Graphics Corporation 2006                           **                                                                           **                All Rights Reserved.                                       **                                                                           **    THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION            **  WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS              **  LICENSORS AND IS SUBJECT TO LICENSE TERMS.                               **                                                                           *****************************************************************************//* * MUSB-MicroSW SCSI definitions. * $Revision: 1.2 $ */#ifndef __MUSB_MSD_SCSI_H__#define __MUSB_MSD_SCSI_H__#include "mu_tools.h"/** Maximum Length of command */#define MGC_SCSI_MAX_CMD_LENGTH             0x10/* SCSI Commands */#define MGC_SCSI_INQUIRY            0x12#define MGC_SCSI_REQUEST_SENSE      0x03#define MGC_SCSI_SEND_DIAGNOSTIC    0x1D#define MGC_SCSI_TEST_UNIT_READY    0x00#define MGC_SCSI_FORMAT_UNIT        0x04#define MGC_SCSI_READ6              0x08#define MGC_SCSI_WRITE6             0x0A#define MGC_SCSI_READ10             0x28#define MGC_SCSI_WRITE10            0x2A#define MGC_SCSI_READ12             0xA8#define MGC_SCSI_WRITE12            0xAA#define MGC_SCSI_READ_CAPACITY      0x25#define MGC_SCSI_RELEASE            0x17#define MGC_SCSI_RESERVE            0x16#define MGC_SCSI_RD_FMT_CAPC        0x23#define MGC_SCSI_MODE_SENSE         0x1A#define MGC_SCSI_MODE_SENSE10       0x5A#define MGC_SCSI_VERIFY             0x2F#define MGC_SCSI_START_STOP_UNIT    0x1B#define MGC_SCSI_SYNC_CACHE	    0x35#define MGC_SCSI_MODE_SELECT	    0x15#define MGC_SCSI_MODE_SELECT10      0x55#define MGC_SCSI_WRITE_BUFFER	    0x3B#define MGC_SCSI_PREVENT_ALLOW_MED_REMOVE   0x1e#define MGC_SCSI_READ_BUFFER        0x3C#define MGC_SCSI_SEEK6              0x0B #define MGC_SCSI_SEEK10             0x2B#define MGC_SCSI_CHNGDEF            0x40#define MGC_SCSI_COMPARE            0x39#define MGC_SCSI_COPY               0x18#define MGC_SCSI_COPY_VERIFY        0x3A#define MGC_SCSI_LOG_SELECT         0x4C #define MGC_SCSI_LOG_SENSE          0x4D#define MGC_SCSI_CMD_RECV_DIAGNOSTIC 0x1C/* Mode pages */#define MGC_SCSI_PAGE_CONTROL		0x0a#define MGC_SCSI_PAGE_DISCONNECT	0x02#define MGC_SCSI_PAGE_INFO_EXCEPTIONS	0x1c#define MGC_SCSI_PAGE_POWER_CONDITION	0x1a#define MGC_SCSI_PAGE_PROTOCOL_LUN	0x18#define MGC_SCSI_PAGE_PROTOCOL_PORT	0x19/* VPD pages */#define MGC_SCSI_PAGE_SUPPORTED_VPD	0x00#define MGC_SCSI_PAGE_UNIT_SERIAL_NUM	0x80#define MGC_SCSI_PAGE_ASCII_OPER_DEF	0x82#define MGC_SCSI_PAGE_DEVICE_ID		0x83/* status codes */#define MGC_SCSI_STATUS_CHECK_CONDITION	0x02/* device types */#define MGC_SCSI_DEVICE_TYPE_DIRECT	0#define MGC_SCSI_DEVICE_TYPE_SEQUENTIAL	0x1#define MGC_SCSI_DEVICE_TYPE_PRINTER	0x2#define MGC_SCSI_DEVICE_TYPE_PROCESSOR	0x3#define MGC_SCSI_DEVICE_TYPE_WORM	0x4#define MGC_SCSI_DEVICE_TYPE_CDROM	0x5#define MGC_SCSI_DEVICE_TYPE_SCANNER	0x6#define MGC_SCSI_DEVICE_TYPE_OPTICAL	0x7#define MGC_SCSI_DEVICE_TYPE_CHANGER	0x8#define MGC_SCSI_DEVICE_TYPE_COMM	0x9#define MGC_SCSI_DEVICE_TYPE_RAID	0xc#define MGC_SCSI_DEVICE_TYPE_RBC	0xe#define MGC_SCSI_DEVICE_TYPE_CARDREADER	0xf/* sense codes */typedef enum{    MGC_SCSI_SC_NONE,    MGC_SCSI_SC_RECOVERED_ERROR,    MGC_SCSI_SC_NOT_READY,    MGC_SCSI_SC_MEDIUM_ERROR,    MGC_SCSI_SC_HARDWARE_ERROR,    MGC_SCSI_SC_ILLEGAL_REQUEST,    MGC_SCSI_SC_UNIT_ATTENTION,    MGC_SCSI_SC_DATA_PROTECT,    MGC_SCSI_SC_BLANK_CHECK,    MGC_SCSI_SC_VENDOR,    MGC_SCSI_SC_COPY_ABORTED,    MGC_SCSI_SC_ABORTED_COMMAND,    MGC_SCSI_SC_OBSOLETE,    MGC_SCSI_SC_VOLUME_OVERFLOW,    MGC_SCSI_SC_MISCOMPARE} MGC_ScsiSenseCode;/* additional sense codes */#define MGC_SCSI_ASC_UNIT_NOT_READY	0x04#define MGC_SCSI_ASC_INVALID_OPCODE	0x20#define MGC_SCSI_ASC_INVALID_ADDRESS	0x21#define MGC_SCSI_ASC_INVALID_CDB_FIELD	0x24#define MGC_SCSI_ASC_WRITE_PROTECTED	0x27#define MGC_SCSI_ASC_MEDIUM_CHANGE	0x28#define MGC_SCSI_ASC_PARAMS_CHANGE	0x2a#define MGC_SCSI_ASC_MEDIUM_ERROR	0x30#define MGC_SCSI_ASC_MEDIUM_NOT_PRESENT	0x3a/* additional sense code qualifiers */#define MGC_SCSI_ASCQ_INVALID_CDB_FIELD	0x00/* byte-swapping */#ifndef BIG_ENDIAN#define MGC_SCSI_SWAP16(_data) (((_data) << 8) | ((_data) >> 8))#define MGC_SCSI_SWAP32(_data) (((uint32_t)(_data) << 24) | \    (((_data) << 8) & 0x00ff0000) | \    (((_data) >> 8) & 0xff00) | ((uint32_t)(_data) >> 24))#else#define MGC_SCSI_SWAP16(_data) _data#define MGC_SCSI_SWAP32(_data) _data#endif#include "mu_pkon.h"/*** MGC_MsdCommand6.* SPC-2 6-byte command.* @field bOpcode opcode* @field bBlockHi5 upper 5 bits of block* @field wBlockLo16 lower 16 bits of block* @field bLength length (transfer, allocation, or parameter block)* @field bControl control byte (always 0 for RBC)*/typedef struct{    uint8_t bOpcode;    uint8_t bBlockHi5;    uint16_t wBlockLo16;    uint8_t bLength;    uint8_t bControl;} MGC_MsdCommand6;#include "mu_pkoff.h"#include "mu_pkon.h"/*** MGC_MsdInquiryCommand.* SPC-2 inquiry command.* @field bOpcode opcode* @field bmFlags CMD_DT and EVPD* @field bPage page code* @field bLength allocation length* @field bControl control byte (always 0 for RBC)*/typedef struct{    uint8_t bOpcode;    uint8_t bmFlags;    uint8_t bPage;    uint8_t bReserved;    uint8_t bLength;    uint8_t bControl;} MGC_MsdInquiryCommand;#include "mu_pkoff.h"/** Send command support data */#define MGC_M_MSD_INQUIRY_CMD_DT	0x02/** Enable Vital Product Data */#define MGC_M_MSD_INQUIRY_EVPD		0x01#include "mu_pkon.h"/*** MGC_MsdCommand10.* SPC-2 10-byte command.* @field bOpcode opcode* @field bServiceAction Logical Unit Number in bits 7:5 in UFI* @field dwBlock block address* @field wLength length (transfer, allocation, or parameter block)* @field bControl control byte (always 0 for RBC)*/typedef struct{    uint8_t bOpcode;    uint8_t bServiceAction;    uint32_t dwBlock;    uint8_t bReserved;    uint16_t wLength;    uint8_t bControl;} MGC_MsdCommand10;#include "mu_pkoff.h"#include "mu_pkon.h"/*** MGC_MsdCommand12.* SPC-2 12-byte command.* @field bOpcode opcode* @field bServiceAction Logical Unit Number in bits 7:5 in UFI* @field dwBlock block address* @field dwLength length (transfer, allocation, or parameter block)* @field bControl control byte (always 0 for RBC)*/typedef struct{    uint8_t bOpcode;    uint8_t bServiceAction;    uint32_t dwBlock;    uint32_t dwLength;    uint8_t bReserved;    uint8_t bControl;} MGC_MsdCommand12;#include "mu_pkoff.h"typedef MGC_MsdCommand6 MGC_MsdModeSense6;typedef MGC_MsdCommand6 MGC_MsdModeSelect6;typedef MGC_MsdCommand6 MGC_MsdRead6;typedef MGC_MsdCommand6 MGC_MsdWrite6;typedef MGC_MsdCommand10 MGC_MsdModeSense10;typedef MGC_MsdCommand10 MGC_MsdModeSelect10;typedef MGC_MsdCommand10 MGC_MsdRead10;typedef MGC_MsdCommand10 MGC_MsdWrite10;#include "mu_pkon.h"/*** MGC_MsdStandardInquiryData.* SPC-2 standard inquiry data (when CMD_DT=0 and EVPD=0 in inquiry command)* @field bDeviceType qualifier and type (RBC type=0x0e)* @field bRmb set bit 7 for removable media* @field bVersion version of applicable standard* @field bFormat AERC, NORM_ACA, HI_SUP, FORMAT fields (use format=2)* @field bExtraLength length, in bytes, of parameters* @field abmFlags various flags* @field aVid space-padded ASCII vendor ID* @field aPid space-padded ASCII product ID* @field aRevision space-padded product revision*/typedef struct{    uint8_t bDeviceType;    uint8_t bRmb;    uint8_t bVersion;    uint8_t bFormat;    uint8_t bExtraLength;    uint8_t abmFlags[3];    char aVid[8];    char aPid[16];    char aRevision[4];} MGC_MsdStandardInquiryData;#include "mu_pkoff.h"/* bRmb: */#define MGC_M_MSD_INQUIRY_RMB		0x80/* bFormat: */#define MGC_M_MSD_INQUIRY_AERC		0x80#define MGC_M_MSD_INQUIRY_NORM_ACA	0x20#define MGC_M_MSD_INQUIRY_HI_SUP	0x10#define MGC_M_MSD_INQUIRY_FORMAT	0x0F/* abmFlags[0]: */#define MGC_M_MSD_INQUIRY_SCCS		0x80/* abmFlags[1]: */#define MGC_M_MSD_INQUIRY_B_QUE		0x80#define MGC_M_MSD_INQUIRY_ENC_SERV	0x40#define MGC_M_MSD_INQUIRY_VS1		0x20#define MGC_M_MSD_INQUIRY_MULTI_P	0x10#define MGC_M_MSD_INQUIRY_M_CHNGR	0x08#define MGC_M_MSD_INQUIRY_ADDR16	0x01/* abmFlags[2]: */#define MGC_M_MSD_INQUIRY_REL_ADR	0x80#define MGC_M_MSD_INQUIRY_WBUS16	0x20#define MGC_M_MSD_INQUIRY_SYNC		0x10#define MGC_M_MSD_INQUIRY_LINKED	0x08#define MGC_M_MSD_INQUIRY_CMD_QUE	0x02#define MGC_M_MSD_INQUIRY_VS2		0x01#include "mu_pkon.h"/** * MGC_MsdModeParamHeader6. * Mode parameter header (6-byte version) * @field bDataLength length of data following itself * @field bMediumType medium type (0 for RBC) * @field bDeviceSpecific device-specific parameter (0 for RBC) * @field bBlockDescLength block descriptor length (0 for RBC) */typedef struct{    uint8_t bDataLength;    uint8_t bMediumType;    uint8_t bDeviceSpecific;    uint8_t bBlockDescLength;} MGC_MsdModeParamHeader6;#include "mu_pkoff.h"#include "mu_pkon.h"/*** MGC_MsdRbcDeviceParams.* RBC device parameters.* @field bPageCode use 0x86* @field bPageLength use 0x0b* @field bWcd WCD flag* @field wBlockSize block size (bytes)* @field bBlockCountHi8 upper 8 bits block count* @field dwBlockCountLo32 lower 32 bits block count* @field bPowerPerformance 0=maximize power-saving .. ff=maximize performance* @field bFlags READD, WRITED, FORMATD, LOCKD flags*/typedef struct{    uint8_t bPageCode;    uint8_t bPageLength;    uint8_t bWcd;    uint16_t wBlockSize;    uint8_t bBlockCountHi8;    uint32_t dwBlockCountLo32;    uint8_t bPowerPerformance;    uint8_t bFlags;    uint8_t bReserved;} MGC_MsdRbcDeviceParams;#include "mu_pkoff.h"/* bWcd: */#define MGC_M_MSD_RBC_WCD		0x01/* bFlags: */#define MGC_M_MSD_RBC_READD		0x08#define MGC_M_MSD_RBC_WRITED		0x04#define MGC_M_MSD_RBC_FORMATD		0x02#define MGC_M_MSD_RBC_LOCKD		0x01#include "mu_pkon.h"/*** MGC_MsdModePage.* Mode page* @field bPage page code and PS* @field bLength length of data* @field aData variable-sized data*/typedef struct{    uint8_t bPage;    uint8_t bLength;    uint8_t aData[1];} MGC_MsdModePage;#include "mu_pkoff.h"/** Parameters saveable (in bPage) */#define MGC_M_MSD_MODE_PAGE_PS		0x80/** Page code (in bPage) */#define MGC_M_MSD_MODE_PAGE_CODE	0x3f#include "mu_pkon.h"/** * MGC_MsdCommandSupportData. * Command support data * @field bDeviceType as in standard inquiry data * @field bSupport 0=info unavailable, 1=unsupported, 3=supported (standard-conforming), 5=supported (vendor-specific) * @field bVersion as in standard inquiry data * @field bCdbSize size of data (command code plus usage map) * @field aData variable-size data */typedef struct{    uint8_t bDeviceType;    uint8_t bSupport;    uint8_t bVersion;    uint8_t bReserved[2];    uint8_t bCdbSize;    uint8_t aData[1];} MGC_MsdCommandSupportData;#include "mu_pkoff.h"#include "mu_pkon.h"/** * MGC_MsdScsiSenseData. * Sense data * @field bResponseCode response code (current errors=0x70), plus VALID * @field bSenseKey sense key, plus FILEMARK, EOM, and ILI * @field dwInfo information (LBA for direct-access devices) * @field bAdditionalLength length of additional data (everything else here) * @field dwCommandInfo command-specific information * @field bAsc ASC * @field bAscq ASCQ * @field bFruCode Field-Replaceable Unit code * @field aKeyFlags key-specific data, plus SKSV * @field aAdditional variable-length additional data */typedef struct{    uint8_t bResponseCode;    uint8_t bObsolete;    uint8_t bSenseKey;    uint32_t dwInfo;    uint8_t bAdditionalLength;    uint32_t dwCommandInfo;    uint8_t bAsc;    uint8_t bAscq;    uint8_t bFruCode;    uint8_t aKeyFlags[3];    uint8_t aAdditional[1];} MGC_MsdScsiSenseData;#include "mu_pkoff.h"/* bResponseCode: */#define MGC_M_MSD_SCSI_SENSE_DATA_VALID		0x80/* bSenseKey: */#define MGC_M_MSD_SCSI_SENSE_DATA_FILEMARK	0x80#define MGC_M_MSD_SCSI_SENSE_DATA_EOM		0x40#define MGC_M_MSD_SCSI_SENSE_DATA_ILI		0x20/* aKeyFlags[0]: */#define MGC_M_MSD_SCSI_SENSE_DATA_SKSV		0x80#include "mu_pkon.h"/*** MGC_MsdCapacityResponse.* Response to read capacity* @field dwLastBlock last logical block index* @field dwBytesPerBlock bytes per block*/typedef struct{    uint32_t dwLastBlock;    uint32_t dwBytesPerBlock;} MGC_MsdCapacityResponse;#include "mu_pkoff.h"#include "mu_pkon.h"/** * MGC_MsdFormatCapacityResponse. * Response to read format capacities */typedef struct{    uint32_t dwListLength;    uint32_t dwBlockCount;    uint32_t dwBytesPerBlock;} MGC_MsdFormatCapacityResponse;#include "mu_pkoff.h"#endif	/* multiple inclusion protection */

⌨️ 快捷键说明

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