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

📄 ata.h

📁 三星2443芯片
💻 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 + -