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

📄 mvsata.h

📁 此为marvell6081芯片的驱动源码
💻 H
📖 第 1 页 / 共 2 页
字号:
    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 + -