📄 ata_includes.h
字号:
#define kATADevInfoModelBeg 27 // Model Number Begin
#define kATADevInfoModelEnd 46 // Model Number End
#define kATADevInfoMaxCap 57
#define kATADevInfoPIO 64 // b[0-7] pio modes supported
#define kATADevInfoUDMA 88 // b5=udma5..b0=udma0
// =====================================================
//
// Timing constant
//
// =====================================================
#define kATAIPGPrd 3/50 // 30MHz, 16.666 ns
// ATA PIO0 - PIO4 timing
#define kATARPIO0Reg1 (600*kATAIPGPrd*0x100)+(290*kATAIPGPrd)+0x0101 // cycle time, t2
#define kATAPIO0Reg1 (600*kATAIPGPrd*0x100)+(165*kATAIPGPrd)+0x0101
#define kATAPIO0Reg2 (165*kATAIPGPrd*0x100)+(365*kATAIPGPrd)+0x0101
#define kATAPIO0Reg3 (30*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define kATAPIO0Reg4 (35*kATAIPGPrd*0x100)+0+0x0100
#define kATARPIO1Reg1 (383*kATAIPGPrd*0x100)+(290*kATAIPGPrd)+0x0101
#define kATAPIO1Reg1 (383*kATAIPGPrd*0x100)+(125*kATAIPGPrd)+0x0101
#define kATAPIO1Reg2 (125*kATAIPGPrd*0x100)+(208*kATAIPGPrd)+0x0101
#define kATAPIO1Reg3 (20*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0101
#define kATAPIO1Reg4 (35*kATAIPGPrd*0x100)+0+0x0100
#define kATARPIO2Reg1 (240*kATAIPGPrd*0x100)+(290*kATAIPGPrd)+0x0101
#define kATAPIO2Reg1 (240*kATAIPGPrd*0x100)+(100*kATAIPGPrd)+0x0101
#define kATAPIO2Reg2 (100*kATAIPGPrd*0x100)+(110*kATAIPGPrd)+0x0101
#define kATAPIO2Reg3 (15*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101
#define kATAPIO2Reg4 (35*kATAIPGPrd*0x100)+0+0x0100
#define kATARPIO3Reg1 (180*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define kATAPIO3Reg1 (180*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define kATAPIO3Reg2 (80*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define kATAPIO3Reg3 (10*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101
#define kATAPIO3Reg4 (35*kATAIPGPrd*0x100)+0+0x0100
#define kATARPIO4Reg1 (120*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define kATAPIO4Reg1 (120*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define kATAPIO4Reg2 (70*kATAIPGPrd*0x100)+(25*kATAIPGPrd)+0x0101
#define kATAPIO4Reg3 (10*kATAIPGPrd*0x100)+(25*kATAIPGPrd)+0x0101
#define kATAPIO4Reg4 (35*kATAIPGPrd*0x100)+0x0100
// Multiword DMA0 - DMA2 timing
#define kATAMDMA0Reg1 (480*kATAIPGPrd*0x100)+(215*kATAIPGPrd)+0x0101
#define kATAMDMA0Reg2 (215*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0101
#define kATAMDMA0Reg3 (20*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define kATAMDMA0Reg4 (15*kATAIPGPrd*0x100)
#define kATAMDMA1Reg1 (150*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define kATAMDMA1Reg2 (50*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101
#define kATAMDMA1Reg3 (15*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define kATAMDMA1Reg4 (10*kATAIPGPrd*0x100)
#define kATAMDMA2Reg1 (120*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define kATAMDMA2Reg2 (25*kATAIPGPrd*0x100)+(25*kATAIPGPrd)+0x0101
#define kATAMDMA2Reg3 (10*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define kATAMDMA2Reg4 (10*kATAIPGPrd*0x100)
// UDMA0 - UDMA4 timing
//#define kATAUDMA0Reg1 (240*kATAIPGPrd*0x100)+(120*kATAIPGPrd)+0x0101
#define kATAUDMA0Reg1 (240*kATAIPGPrd*0x100)+(150*kATAIPGPrd)+0x0101
#define kATAUDMA0Reg2 (15*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define kATAUDMA0Reg3 (70*kATAIPGPrd*0x100)+(7*kATAIPGPrd)+0x0101
#define kATAUDMA0Reg4 (230*kATAIPGPrd*0x100)+(150*kATAIPGPrd)
#define kATAUDMA0Reg5 (20*kATAIPGPrd*0x100)+(10*kATAIPGPrd)+0x0100
#define kATAUDMA0Reg6 (20*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0101
#define kATAUDMA0Reg7 (50*kATAIPGPrd*0x100)+(75*kATAIPGPrd)+0x0100
#define kATAUDMA0Reg8 (160*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define kATAUDMA0Reg9 (20*kATAIPGPrd*0x100)+0x0100
//#define kATAUDMA1Reg1 (160*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define kATAUDMA1Reg1 0x0005 // xx, cycle (80)
#define kATAUDMA1Reg2 0x0000 // xx, xx
#define kATAUDMA1Reg3 0x0301 // DVS(48), DVH (7)
#define kATAUDMA1Reg4 0x0000 // xx, xx
#define kATAUDMA1Reg5 0x0300 // MLI (20), xx
#define kATAUDMA1Reg6 0x030F // ENV (20), SR (30)
#define kATAUDMA1Reg7 0x0F1F // SS (50), RFS (75) max
#define kATAUDMA1Reg8 0x3F02 // RP (125), ACK (20)
#define kATAUDMA1Reg9 0x0200 // ZAH (20)
#define kATAUDMA2Reg1 0x0004 // xx, cycle (60)
#define kATAUDMA2Reg2 0x0000 // xx, xx
#define kATAUDMA2Reg3 0x0202 // DVS(31), DVH (7)
#define kATAUDMA2Reg4 0x0000 // xx, xx
#define kATAUDMA2Reg5 0x0F00 // MLI (20), xx
#define kATAUDMA2Reg6 0x0300 // ENV (20), SR (0)
#define kATAUDMA2Reg7 0x0402 // SS (50), RFS (70) max
#define kATAUDMA2Reg8 0x0702 // RP (100), ACK (20)
#define kATAUDMA2Reg9 0x0200 // ZAH (20)
#define kATAUDMA3Reg1 0x0003 // xx, cycle (45)
#define kATAUDMA3Reg2 0x0000 // xx, xx
#define kATAUDMA3Reg3 0x0202 // DVS(20), DVH (7)
#define kATAUDMA3Reg4 0x0000 // xx, xx
#define kATAUDMA3Reg5 0x0F00 // MLI, AZ
#define kATAUDMA3Reg6 0x0300 // ENV, SR (0)
#define kATAUDMA3Reg7 0x0402 // SS (50), RFS (60 max)
#define kATAUDMA3Reg8 0x0702 // RP (100), ACK (20)
#define kATAUDMA3Reg9 0x0200 // ZAH (20)
//#define kATAUDMA4Reg1 (60*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101 // 2cylcle, cycle
#define kATAUDMA4Reg1 0x0002 // xx, cycle (30)
#define kATAUDMA4Reg2 0x0101 // DS (7), DH (5)
#define kATAUDMA4Reg3 0x0101 // DVS(7), DVH (7)
//#define kATAUDMA4Reg2 (7*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101 // DS, DH
//#define kATAUDMA4Reg3 (7*kATAIPGPrd*0x100)+(7*kATAIPGPrd)+0x0101 // DVS, DVH
//#define kATAUDMA4Reg4 (120*kATAIPGPrd*0x100)+(100*kATAIPGPrd)-0x101 // FS, LI
#define kATAUDMA4Reg4 (100*kATAIPGPrd*0x100)+(100*kATAIPGPrd) // FS, LI
#define kATAUDMA4Reg5 (20*kATAIPGPrd*0x100)+0x0100 // MLI, AZ
#define kATAUDMA4Reg6 (20*kATAIPGPrd*0x100)+0x0101 // ENV, SR
#define kATAUDMA4Reg7 (50*kATAIPGPrd*0x100)+(60*kATAIPGPrd)+0x0100 // SS, RFS
#define kATAUDMA4Reg8 (100*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101 // RP, ACK
#define kATAUDMA4Reg9 (20*kATAIPGPrd*0x100)+0x0100
#define kATAUDMA5Reg1 (40*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define kATAUDMA5Reg2 (4*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define kATAUDMA5Reg3 (5*kATAIPGPrd*0x100)+(10*kATAIPGPrd)+0x0101
//#define kATAUDMA5Reg4 (90*kATAIPGPrd*0x100)+(75*kATAIPGPrd)-0x101
#define kATAUDMA5Reg4 (50*kATAIPGPrd*0x100)+(50*kATAIPGPrd)
#define kATAUDMA5Reg5 (20*kATAIPGPrd*0x100)+0x0100
#define kATAUDMA5Reg6 (20*kATAIPGPrd*0x100)+0x0101
#define kATAUDMA5Reg7 (50*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0100
#define kATAUDMA5Reg8 (85*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define kATAUDMA5Reg9 (20*kATAIPGPrd*0x100)+0x0100
// ======================================================
//
// ATA hardware
//
// ======================================================
#define kATAResetPin 0
#define kATAResetPort PORTT
// ======================================================
//
// ATA error code
//
// ======================================================
#define kATAPass 0x0000
#define kATAError 0x0001
#define kATACRCError 0x0002
#define kATATimeoutError 0x0003
#define kATATimeout 10000 // 10 second for ATA timeout
#define kATASetPIOError 0x0004
#define kATASetUDMAError 0x0005
// ======================================================
//
// Compile Option
//
// ======================================================
#define kATA_Removeable 0 // 1 = removeable
// ======================================================
//
// Macro
//
// ======================================================
#define kmATAByteSwap(word) (word >> 8) | (word << 8)
// ======================================================
//
// Global Variables internally used by ATA Driver
//
// ======================================================
//
#pragma DATA_SEG DEFAULT
// The Sys Timer Hook Function List
extern pHookFunc gpATARequestHookTable[];
extern pHookFunc gpATADataHookTable[];
// ===================================================================
//
// Module Specific Macro Functions definitions
//
// ===================================================================
typedef struct {
muint8 features;
muint8 count;
muint8 lba_low;
muint8 lba_mid;
muint8 lba_high;
muint8 device;
muint8 command;
muint8 dmamode;
} sATACommand;
// ===================================================================
//
// ATA Specific Types definitions
//
// ===================================================================
typedef muint8 ATAErrorCode;
// *********************************************************************
//
// FUNCTIONS PROVIDED BY ATA Processor
//
//
//
// *********************************************************************
ATAErrorCode ATA_SCSIInquiry(muint16 *pBuffer);
ATAErrorCode ATA_SCSIReadCapacity(muint8 *pBuffer);
ATAErrorCode ATA_IdentifyDevice(muint16 *pBuffer, muint16 XferLen);
// *********************************************************************
//
// FUNCTIONS PROVIDED BY ATA Driver
//
//
//
// *********************************************************************
#pragma CODE_SEG DEFAULT
void ATA_Delay(muint16 delay);
volatile ATAErrorCode ATA_WaitRegBusy(void);
void ATA_SetPIOTiming(muint8 pio);
void ATA_SetRPIOTiming(muint8 pio);
void ATA_SetUDMATiming(muint8 udma);
void ATA_SetMDMATiming(muint8 mdma);
ATAErrorCode ATA_WaitATABusy(void);
ATAErrorCode ATA_WaitATABusyDRQ(void);
void ATA_PreInit(void);
ATAErrorCode ATA_Init(muint8 resetpin, volatile muint8 *resetport);
ATAErrorCode ATA_SoftwareReset(void);
ATAErrorCode ATA_PacketCommand(muint16 *pCommand);
ATAErrorCode ATA_Command(sATACommand *ATACommand);
ATAErrorCode ATA_LBAATACommand(muint8 block, muint8 ATACmd);
ATAErrorCode ATA_LBAATACommand1(muint8 block, muint8 *pLBA, muint8 ATACmd);
ATAErrorCode ATA_PIORead(muint16 *pBuffer, muint16 XferWordLen);
ATAErrorCode ATA_DummyPIORead(muint16 XferWordLen);
ATAErrorCode ATA_PIOWriteTwoBlock(muint16 *pBuffer);
ATAErrorCode ATA_PIOWrite(muint16 *pBuffer, muint16 XferWordLen);
ATAErrorCode ATA_GetSetDeviceInfo(void);
void ATA_FillNZero(muint16 XferWordLen);
void ATA_UDMARead(muint8 pIQUEBuffer);
void ATA_UDMAWrite(muint8 pIQUEBuffer);
// for Testing use only
void Demo_PIOMode(void);
void Demo_UDMAMode(void);
// ==================================================================
// ATA_Command() -
//
// ATA Command
//
//
// Input - serviceID = the ID of service to be registered.
//
// Output - nil
//
// Function returns the error code of the result.
//
//
ATAErrorCode ATA_RegService(muint8 serviceID);
// ==================================================================
// MK_RegService() -
//
// To register the shared Service of Mini-Kernel.
//
//
// Input - serviceID = the ID of service to be registered.
//
// Output - nil
//
// Function returns the error code of the result.
//
//
ATAErrorCode ATA_QueryService(muint8 serviceID);
// *********************************************************************
//
// FUNCTIONS INTERNALLY USED BY ATA Driver
//
// DO NOT CALL TO THESE FUNCTIONS DIRECTLY.
//
// *********************************************************************
// ==================================================================
// ATA_InitATAData() -
//
// To initialize the ATA global variables.
// ==================================================================
void ATA_InitATAData(void);
#endif _H_ATA_INCLUDES_ // end of my Constants & Macros definition
//
// The end of file ata_Includes.h
// *********************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -