📄 ata.h
字号:
/*----------------------------------------------------------------------
*
* Filename: ata.h
*
* Contents: class ATA
*
* Authors: Whing, Anderson, Sean, ...
*
* Notes:
* 1.
* 2.
*
* Copyright (c) 2005 SAMSUNG Electronics.
*----------------------------------------------------------------------
*/
#ifndef __ATA_H__
#define __ATA_H__
#ifdef __cplusplus
extern "C"
{
#endif
#define CFCON_MODE
#define PIOMODE unsigned char
#define PIO0 0
#define PIO1 1
#define PIO2 2
#define PIO3 3
#define PIO4 4
/*
enum PIOMODE
{
PIO0, PIO1, PIO2, PIO3, PIO4
};
*/
#define UDMAMODE unsigned char
#define UDMA0 0
#define UDMA1 1
#define UDMA2 2
#define UDMA3 3
#define UDMA4 4
/*
enum UDMAMODE
{
UDMA0, UDMA1, UDMA2, UDMA3, UDMA4
};
*/
#define ATA_TRANSFER_CMD unsigned char
#define ATA_CMD_STOP 0
#define ATA_CMD_START 1
#define ATA_CMD_ABORT 2
#define ATA_CMD_CONTINUE 3
/*
enum ATA_TRANSFER_CMD
{
ATA_CMD_STOP, ATA_CMD_START, ATA_CMD_ABORT, ATA_CMD_CONTINUE
};
*/
#define ATA_INT_SRC unsigned char
#define ATA_INT_XFER_DONE 0
#define ATA_INT_UDMA_HOLD 1
#define ATA_INT_IRQ 2
#define ATA_INT_TBUF_FULL 3
#define ATA_INT_SBUF_EMPTY 4
/*
enum ATA_INT_SRC
{
ATA_INT_XFER_DONE, ATA_INT_UDMA_HOLD, ATA_INT_IRQ, ATA_INT_TBUF_FULL, ATA_INT_SBUF_EMPTY
};
*/
#define ATA_MODE unsigned char
#define PIO_CPU 0
#define PIO_DMA 1
#define UDMA 2
/*
enum ATA_MODE
{
PIO_CPU, PIO_DMA, UDMA
};
*/
#define SRC_INT_NUM 5
bool OpenATAMedia(void);
bool OpenATAMediaWithMode(ATA_MODE mode);
bool CloseATAMedia(void);
bool ReadATABlocks(unsigned int uStBlock, unsigned int uBlocks, unsigned int uBufAddr);
bool WriteATABlocks(unsigned int uStBlock, unsigned int uBlocks, unsigned int uBufAddr);
bool StartReadingBlocks(unsigned int uStBlock, unsigned int uBlocks, unsigned int uBufAddr);
bool StartWritingBlocks(unsigned int uStBlock, unsigned int uBlocks, unsigned int uBufAddr);
bool IsReadingBlocksDone(void);
bool IsWritingBlocksDone(void);
void ContinueReadingBlocks(void);
void ContinueWritingBlocks(void);
extern void ChangeATAMode(void);
void Init(void);
void IdentifyDevice(void);
void GetMaxSectors(unsigned int* maxSec);
void GetMaxMultiple(unsigned int* maxMulti);
void ResetAll(void );
void Clear_Pending(unsigned int srcInt);
bool FindInterruptRequest(unsigned int* nthBit);
void ClearAllInterrupt(void);
void SetTransferCommand(ATA_TRANSFER_CMD command);
void IsTBufFullContinue(bool* status);
void IsSBufEmptyContinue(bool* status);
void SetMultiple(unsigned int uSector);
bool ReadSectors_Pio(unsigned int nLBA,unsigned int nSectorCount,unsigned int nDesAddress);
bool ReadSector_PioDma(unsigned int uLBA,unsigned int uDesAddress);
bool ReadSectors_MultiplePioDma(unsigned int uLBA, unsigned int uDesAddress); ///
bool ReadSectors_Udma(unsigned int uLBA,unsigned int uSectorCount,unsigned int uSrcAddress);
bool WriteSectors_Pio(unsigned int nLBA,unsigned int nSectorCount,unsigned int nSrcAddress);
bool WriteSector_PioDma(unsigned int uLBA, unsigned int uSrcAddress);
bool WriteSectors_MultiplePioDma(unsigned int uLBA, unsigned int uSrcAddress); ///
bool WriteSectors_Udma(unsigned int uLBA, unsigned int uSectorCount, unsigned int uSrcAddress);
void SetAtaMode(ATA_MODE mode);
bool IsDmaDone(void);
//prot
bool WaitForDeviceReady(void);
void WaitForHostReady(void);
void SetPioMode(PIOMODE pmode);
void SetUdmaMode(UDMAMODE umode);
void SetLittleEndian(void);
void SetConfigMode(ATA_MODE mode, bool isWriteMode);
void ReadDeviceReg(unsigned int nRegister, unsigned char* data);
void GetDataFromATADevice(unsigned short* data);
void WaitForTransferDone(void);
void WriteOnTaskFileReg(unsigned int nRegister,unsigned int nValue);
void PutDataToATADevice(unsigned short data);
void SetAtaOnOff(unsigned char OnOff);
void SetAtaDevice(unsigned int nLBA, unsigned int nSectorCount);
//global
extern unsigned int uCfgReg;
extern ATA_MODE eMode;
extern unsigned int uMaxMultiple;
extern unsigned int uCurrentMultiple;
extern unsigned int uMaxSectors;
extern PIOMODE eMaxPioMode;
extern PIOMODE eCurrentPioMode;
extern unsigned int uMaxUdmaMode;
extern unsigned int uCurrentUdmaMode;
#define SetAtaMode(mode) eMode = mode
#ifdef __cplusplus
}
#endif
#endif // __ATA_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -