📄 atamx27.h
字号:
//------------------------------------------------------------------------------
//
// Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//
//------------------------------------------------------------------------------
//
// ATAMX27.h
//
// ATA MX27 device abstraction.
//
//------------------------------------------------------------------------------
#ifndef _ATAMX27_H_
#define _ATAMX27_H_
#include "csp.h"
#include <atamain.h>
#define CLOCK_PERIOD 7
#define PIO_MODE 1
#define MDMA_MODE 2
#define UDMA_MODE 3
////#define USE_DMA_SG_LIST
#define ATA_DMA_BUFFER_SIZE (MAX_SECT_PER_COMMAND_DMA*512)
#define ATA_DMA_WATERMARK 32 // ATA DMA watermark in bytes
#define ATA_MAX_SECTOR 512
#define ATA_MAX_TRANSFER (MAX_SECT_PER_COMMAND * ATA_MAX_SECTOR)
#define ATA_MAX_DESC_COUNT ((ATA_MAX_TRANSFER / 4096) * 2)
class CMX27Disk : public CDisk {
public:
// member variables
static LONG m_lDeviceCount;
PCSP_ATA_REG g_pVAtaReg;
DWORD bIntrPending;
// (DMA support)
PHYSICAL_ADDRESS PhysDMABufferAddr;
PBYTE pVirtDMABufferAddr;
UINT8 DmaChanATARx, DmaChanATATx;
UINT8 DmaReqTx ;
UINT8 DmaReqRx ;
// constructors/destructors
CMX27Disk(HKEY hKey);
virtual ~CMX27Disk();
// member functions
virtual VOID ConfigureRegisterBlock(DWORD dwStride);
virtual BOOL Init(HKEY hActiveKey);
virtual DWORD MainIoctl(PIOREQ pIOReq);
virtual BOOL WaitForInterrupt(DWORD dwTimeOut);
virtual void EnableInterrupt();
virtual BOOL ConfigPort();
virtual BOOL SetupDMA(PSG_BUF pSgBuf, DWORD dwSgCount, BOOL fRead);
virtual BOOL BeginDMA(BOOL fRead);
virtual BOOL EndDMA();
virtual BOOL AbortDMA();
virtual BOOL CompleteDMA(PSG_BUF pSgBuf, DWORD dwSgCount, BOOL fRead);
void CopyDiskInfoFromPort();
void SetTimingRegisters(int speed, int mode, int ClkSpd);
BOOL ConfigureIOMUXPad(int muxmode);
BOOL InitializePort(void);
void ShowRegisters(UCHAR usel);
inline virtual void CMX27Disk::TakeCS() {
m_pPort->TakeCS();
}
inline virtual void CMX27Disk::ReleaseCS() {
m_pPort->ReleaseCS();
}
inline BOOL CMX27Disk::DoesDeviceAlreadyExist() {
return FALSE;
}
// DMA support
PSG_BUF m_pDMASgBuf;
DWORD m_dwAlignedSgCount;
DWORD m_dwAlignedDescCount;
DWORD m_dwAlignedSgBytes;
UINT8 m_DMAChan;
DWORD dwDoubleBufferPos;
BOOL fDMAIntrEnable;
BOOL MapDMABuffers(void);
BOOL UnmapDMABuffers(void);
BOOL DeinitChannelDMA(void);
BOOL InitChannelDMA(void);
BOOL InitDMA(void) ;
BOOL DeInitDMA(void);
DWORD MoveDMABuffer(PSG_BUF pSgBuf, DWORD dwSgIndex, DWORD dwSgCount, BOOL fRead);
};
EXTERN_C
CDisk *
CreateMX27HD(
HKEY hDevKey
);
//------------------------------------------------------------------------------
// Functions
//------------------------------------------------------------------------------
extern BOOL BSPATAEnableClock(BOOL bEnable);
extern BOOL BSPATApbcmapping(PHYSICAL_ADDRESS *phyAddr);
extern BOOL BSPATAIOMUXConfig(void);
extern BOOL BSPATADMAChanAlloc(UINT8 *pDmaReqTx, UINT8 *pDmaReqRx);
#endif //_ATAMX27_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -