📄 mvsata.h
字号:
MV_VOID_PTR commandId;
} MV_NONE_UDMA_COMMAND_PARAMS;
typedef struct mvQueueCommandInfo
{
MV_QUEUED_COMMAND_TYPE type;
MV_U8 PMPort;
union
{
MV_UDMA_COMMAND_PARAMS udmaCommand;
MV_NONE_UDMA_COMMAND_PARAMS NoneUdmaCommand;
} commandParams;
} MV_QUEUE_COMMAND_INFO;
/* The following structure is for the Core Driver internal usage */
typedef struct mvQueuedCommandEntry
{
MV_BOOLEAN isFreeEntry;
MV_U8 commandTag;
struct mvQueuedCommandEntry *next;
struct mvQueuedCommandEntry *prev;
MV_QUEUE_COMMAND_INFO commandInfo;
} MV_QUEUED_COMMAND_ENTRY;
/* The following structures are part of the Core Driver API */
typedef struct mvSataChannel
{
/* Fields set by Intermediate Application Layer */
MV_U8 channelNumber;
struct mvDmaRequestQueueEntry *requestQueue;
struct mvDmaResponseQueueEntry *responseQueue;
MV_U32 requestQueuePciHiAddress;
MV_U32 requestQueuePciLowAddress;
MV_U32 responseQueuePciHiAddress;
MV_U32 responseQueuePciLowAddress;
/* Fields set by CORE driver */
struct mvSataAdapter *mvSataAdapter;
MV_OS_SEMAPHORE semaphore;
MV_U32 eDmaRegsOffset;
MV_BOOLEAN EdmaActive;
MV_EDMA_MODE queuedDMA;
MV_U8 outstandingCommands;
struct mvQueuedCommandEntry commandsQueue[MV_SATA_SW_QUEUE_SIZE];
struct mvQueuedCommandEntry *commandsQueueHead;
struct mvQueuedCommandEntry *commandsQueueTail;
MV_BOOLEAN queueCommandsEnabled;
MV_U8 noneUdmaOutstandingCommands;
MV_U8 EdmaQueuedCommands;
MV_U32 freeIDsStack[MV_SATA_SW_QUEUE_SIZE];
MV_U32 freeIDsNum;
MV_U32 reqInPtr;
MV_U32 rspOutPtr;
/* Port Multiplier fiels*/
MV_BOOLEAN PMSupported;
MV_SATA_DEVICE_TYPE deviceType;
#ifdef MV_SATA_C2C_COMM
/* Channel 2 Channel*/
MV_BOOLEAN C2CmodeEnabled;
MV_SATA_C2C_MODE C2CMode;
C2CCallBack_t C2CCallback;
#endif
} MV_SATA_CHANNEL;
typedef struct mvSataAdapter
{
/* Fields set by Intermediate Application Layer */
MV_U32 adapterId;
MV_VOID_PTR IALData;
MV_U8 pciConfigRevisionId;
MV_U16 pciConfigDeviceId;
MV_BUS_ADDR_T adapterIoBaseAddress;
MV_U32 intCoalThre[MV_SATA_UNITS_NUM];
MV_U32 intTimeThre[MV_SATA_UNITS_NUM];
MV_BOOLEAN (*mvSataEventNotify)(struct mvSataAdapter *,
MV_EVENT_TYPE,
MV_U32, MV_U32);
MV_SATA_CHANNEL *sataChannel[MV_SATA_CHANNELS_NUM];
MV_U32 pciCommand;
MV_U32 pciSerrMask;
MV_U32 pciInterruptMask;
/* Fields set by CORE driver */
MV_SATA_GEN sataAdapterGeneration;
MV_BOOLEAN staggaredSpinup[MV_SATA_CHANNELS_NUM]; /* For 60x1 only */
MV_BOOLEAN limitInterfaceSpeed[MV_SATA_CHANNELS_NUM]; /* For 60x1 only */
MV_SATA_IF_SPEED ifSpeed[MV_SATA_CHANNELS_NUM]; /* For 60x1 only */
MV_U8 numberOfChannels;/* 4 channels for 504x, 8 for 508x*/
MV_U8 numberOfUnits;/* 1 for 504x, 2 for 508x*/
MV_OS_SEMAPHORE semaphore;
MV_U32 mainMask;
MV_BOOLEAN interruptsAreMasked;
MV_SATA_INTERRUPT_SCHEME interruptsScheme;
MV_OS_SEMAPHORE interruptsMaskSem;
MV_BOOLEAN implement50XXB0Workarounds;
MV_BOOLEAN implement50XXB1Workarounds;
MV_BOOLEAN implement50XXB2Workarounds;
MV_BOOLEAN implement60X1A1Workarounds;
MV_BOOLEAN implement60X1B0Workarounds;
MV_U8 signalAmps[MV_SATA_CHANNELS_NUM];
MV_U8 pre[MV_SATA_CHANNELS_NUM];
#ifdef MV_SATA_IO_GRANULARITY
MV_BOOLEAN iogEnabled;
MV_U8 iogFreeIdsStack[MV_IOG_QUEUE_SIZE];
MV_U8 iogFreeIdsNum;
MV_OS_SEMAPHORE iogSemaphore;
#endif
} MV_SATA_ADAPTER;
/* this structure used by the IAL defines the PRD entries used by the EDMA HW */
typedef struct mvSataEdmaPRDEntry
{
volatile MV_U32 lowBaseAddr;
volatile MV_U16 byteCount;
volatile MV_U16 flags;
volatile MV_U32 highBaseAddr;
volatile MV_U32 reserved;
}MV_SATA_EDMA_PRD_ENTRY;
/* API Functions */
/* CORE driver Adapter Management */
MV_BOOLEAN mvSataInitAdapter(MV_SATA_ADAPTER *pAdapter);
MV_BOOLEAN mvSataShutdownAdapter(MV_SATA_ADAPTER *pAdapter);
MV_U32 mvSataReadReg(MV_SATA_ADAPTER *pAdapter, MV_U32 regOffset);
MV_VOID mvSataWriteReg(MV_SATA_ADAPTER *pAdapter, MV_U32 regOffset,
MV_U32 regValue);
MV_VOID mvEnableAutoFlush(MV_VOID);
MV_VOID mvDisableAutoFlush(MV_VOID);
/* CORE driver SATA Channel Management */
MV_BOOLEAN mvSataConfigureChannel(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataRemoveChannel(MV_SATA_ADAPTER *pAdapter, MV_U8 channelIndex);
MV_BOOLEAN mvSataIsStorageDeviceConnected(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataChannelHardReset(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataConfigEdmaMode(MV_SATA_ADAPTER *pAdapter, MV_U8 channelIndex,
MV_EDMA_MODE eDmaMode, MV_U8 maxQueueDepth);
MV_BOOLEAN mvSataEnableChannelDma(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataDisableChannelDma(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataFlushDmaQueue(MV_SATA_ADAPTER *pAdapter, MV_U8 channelIndex,
MV_FLUSH_TYPE flushType);
MV_U8 mvSataNumOfDmaCommands(MV_SATA_ADAPTER *pAdapter, MV_U8 channelIndex);
MV_BOOLEAN mvSataSetIntCoalParams (MV_SATA_ADAPTER *pAdapter, MV_U8 sataUnit,
MV_U32 intCoalThre, MV_U32 intTimeThre);
MV_BOOLEAN mvSataSetChannelPhyParams(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex,
MV_U8 signalAmps, MV_U8 pre);
MV_BOOLEAN mvSataChannelPhyShutdown(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataChannelPhyPowerOn(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataChannelFarLoopbackDiagnostic(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
/* Queue ATA command */
MV_QUEUE_COMMAND_RESULT mvSataQueueCommand(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex,
MV_QUEUE_COMMAND_INFO *pCommandParams);
/* Interrupt Service Routine */
MV_BOOLEAN mvSataInterruptServiceRoutine(MV_SATA_ADAPTER *pAdapter);
MV_BOOLEAN mvSataMaskAdapterInterrupt(MV_SATA_ADAPTER *pAdapter);
MV_BOOLEAN mvSataUnmaskAdapterInterrupt(MV_SATA_ADAPTER *pAdapter);
MV_BOOLEAN mvSataCheckPendingInterrupt(MV_SATA_ADAPTER *pAdapter);
MV_BOOLEAN mvSataSetInterruptsScheme(MV_SATA_ADAPTER *pAdapter,
MV_SATA_INTERRUPT_SCHEME interruptScheme);
/*
* Staggered spin-ip support and SATA interface speed control
* (relevant for 60x1 adapters)
*/
MV_BOOLEAN mvSataEnableStaggeredSpinUpAll (MV_SATA_ADAPTER *pAdapter);
MV_BOOLEAN mvSataEnableStaggeredSpinUp (MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataDisableStaggeredSpinUpAll (MV_SATA_ADAPTER *pAdapter);
MV_BOOLEAN mvSataDisableStaggeredSpinUp (MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN mvSataSetInterfaceSpeed (MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex,
MV_SATA_IF_SPEED ifSpeed);
MV_SATA_IF_SPEED mvSataGetInterfaceSpeed (MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
/* Command Completion and Event Notification (user implemented) */
MV_BOOLEAN mvSataEventNotify(MV_SATA_ADAPTER *, MV_EVENT_TYPE ,
MV_U32, MV_U32);
#ifdef MV_SATA_C2C_COMM
/* Channel 2 Channel communication */
MV_BOOLEAN mvSataC2CInit (MV_SATA_ADAPTER *pAdapter, MV_U8 channelIndex,
MV_SATA_C2C_MODE mvSataC2CMode,
C2CCallBack_t mvSataC2CCallBack);
MV_BOOLEAN mvSataC2CStop (MV_SATA_ADAPTER *pAdapter, MV_U8 channelIndex);
MV_BOOLEAN mvSataC2CSendRegisterDeviceToHostFIS(
MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex,
MV_U8 pmPort,
MV_BOOLEAN bInterrupt,
MV_U8 message[MV_C2C_MESSAGE_SIZE]);
MV_BOOLEAN mvSataC2CActivateBmDma(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex,
MV_U8 pmPort,
MV_U32 prdTableHi,
MV_U32 prdTableLow,
MV_UDMA_TYPE dmaType);
MV_BOOLEAN mvSataC2CResetBmDma(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
#endif
#ifdef MV_SATA_IO_GRANULARITY
MV_BOOLEAN mvSataEnableIoGranularity(MV_SATA_ADAPTER *pAdapter,
MV_BOOLEAN enable);
#endif
#ifdef __cplusplus
/*}*/
#endif /* __cplusplus */
#endif /* __INCmvSatah */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -