?? ata.h
字號:
/**************************************************************************************
*
* Project Name : S3C6400 Validation
*
* Copyright 2006 by Samsung Electronics, Inc.
* All rights reserved.
*
* Project Description :
* This software is only for validating functions of the S3C6400.
* Anybody can use this software without our permission.
*
*--------------------------------------------------------------------------------------
*
* File Name : ata.h
*
* File Description : This file defines the register access function
* and declares prototypes of adcts funcions
*
* Author : Sunil,Roe
* Dept. : AP Development Team
* Created Date : 2007/1/26
* Version : 0.1
*
* History
* - Created(Sunil,Roe 2007/1/26)
*
**************************************************************************************/
#ifndef __ATA6400_H__
#define __ATA6400_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdio.h>
#define ENABLE 1
#define DISABLE 0
#define MASK 1
#define UNMASK 0
#define RESET 1
#define NORESET 0
#define ATA_INT_NUM 5
#define ATA_CONNUM 1
#define ATA_CON0 0
//#define ATA_CON1 1
#define ATA_BASE (CFCON_BASE+0x1900)
#define ATA_SECTORSIZE 512
typedef enum ATA_MODE_6400
{
eATA_MODE_PIO = 0,
eATA_MODE_PIOCPU = 0,
eATA_MODE_PIODMA = 1,
eATA_MODE_UDMA = 2,
eATA_MODE_NONE = 3,
}
eATA_MODE_6400;
typedef enum ATA_PIOMODE
{
eATA_PIO0 = 0,
eATA_PIO1 = 1,
eATA_PIO2 = 2,
eATA_PIO3 = 3,
eATA_PIO4 = 4,
}
eATA_PIOMODE;
typedef enum ATA_UDMAMODE
{
eATA_UDMA0 = 0,
eATA_UDMA1 = 1,
eATA_UDMA2 = 2,
eATA_UDMA3 = 3,
eATA_UDMA4 = 4,
}
eATA_UDMAMODE;
typedef enum ATA_INT_SRC_6400
{
eATA_INT_XFER_DONE = 0,
eATA_INT_UDMA_HOLD = 1,
eATA_INT_IRQ = 2,
eATA_INT_TBUF_FULL = 3,
eATA_INT_SBUF_EMPTY = 4,
}
eATA_INT_SRC_6400;
typedef enum ATA_Id
{
eATA_CONTROL = 0, // ATA enable and clock down status
eATA_STATUS = 1, // ATA status
eATA_COMMAND = 2, // ATA command
eATA_SWRST = 3, // ATA software reset
eATA_IRQ = 4, // ATA interrupt sources
eATA_IRQ_MASK = 5, // ATA interrupt mask
eATA_CFG = 6, // ATA configuration for ATA interface
rReserved1 = 7,
rReserved2 = 8,
rReserved3 = 9,
rReserved4 = 10,
eATA_PIO_TIME = 11, // ATA PIO timing
eATA_UDMA_TIME = 12, // ATA UDMA timing
eATA_XFR_NUM = 13, // ATA transfer number
eATA_XFR_CNT = 14, // ATA current transfer count
eATA_TBUF_START = 15, // ATA start address of track buffer
eATA_TBUF_SIZE = 16, // ATA size of track buffer
eATA_SBUF_START = 17, // ATA start address of source buffer
eATA_SBUF_SIZE = 18, // ATA size of source buffer
eATA_CADR_TBUF = 19, // ATA current write address of track buffer
eATA_CADR_SBUF = 20, // ATA current read address of source buffer
eATA_PIO_DTR = 21, // ATA PIO device data register
eATA_PIO_FED = 22, // ATA PIO device Feature/Error register
eATA_PIO_SCR = 23, // ATA PIO sector count register
eATA_PIO_LLR = 24, // ATA PIO device LBA Low register
eATA_PIO_LMR = 25, // ATA PIO device LBA middle register
eATA_PIO_LHR = 26, // ATA PIO device LBA high register
eATA_PIO_DVR = 27, // ATA PIO device register
eATA_PIO_CSD = 28, // ATA PIO device command/status register
eATA_PIO_DAD = 29, // ATA PIO device control/alternate status register
eATA_PIO_READY = 30, // ATA PIO read data from device data register
eATA_PIO_RDATA = 31, // ATA PIO read data from device data register
rReserved5 = 32,
rReserved6 = 33,
rReserved7 = 34,
rReserved8 = 35,
eBUS_FIFO_STATUS = 36, // ATA internal AHB FIFO status
eATA_FIFO_STATUS = 37, // ATA internal ATA FIFO status
}
eATA_Id;
/*---------------------------------- Init Function ---------------------------------*/
/*---------------------------------- ATA_CONTROL Register ---------------------------------*/
/*---------------------------------- ATA_STATUS Register ---------------------------------*/
#define STATUS_DEVICE_BUSY 0x80
#define STATUS_DATA_REQUEST 0x58
#define STATUS_ERR 0x1
typedef enum ATA_XFR_STATUS
{
eATA_XFR_STATUS_DEVICE_BUSY = 0x80,
eATA_XFR_STATUS_DATA_REQUEST = 0x58,
eATA_XFR_STATUS_ERR = 0x01,
}
eATA_XFR_STATUS;
/*---------------------------------- ATA_COMMAND Register ---------------------------------*/
typedef enum ATA_XFR_CMD
{
eATA_XFR_CMD_STOP = 0,
eATA_XFR_CMD_START = 1,
eATA_XFR_CMD_ABORT = 2,
eATA_XFR_CMD_CONTINUE = 3,
}
eATA_XFR_CMD;
/*---------------------------------- ATA_SWRST Register ---------------------------------*/
/*---------------------------------- ATA_IRQ Register ---------------------------------*/
/*---------------------------------- ATA_IRQ_MASK Register ---------------------------------*/
typedef enum ATA_IRQ_SRC
{
eATA_IRQ_SBUF_EMPTY = 0x10,
eATA_IRQ_TBUF_FULL = 0x08,
eATA_IRQ_ATADEV_IRQ = 0x04,
eATA_IRQ_UDMA_HOLD = 0x02,
eATA_IRQ_XFR_DONE = 0x01,
eATA_IRQ_ALL = 0x1f,
}
eATA_IRQ_SRC;
/*---------------------------------- ATA_CFG Register ---------------------------------*/
typedef enum ATA_ENDIAN
{
eATA_ENDIAN_LITTLE = 0,
eATA_ENDIAN_BIG = 1,
}
eATA_ENDIAN;
typedef enum ATA_DMA_DIR
{
eATA_DMA_READ_DATA = 0,
eATA_DMA_WRITE_DATA = 1,
}
eATA_DMA_DIR;
/*---------------------------------- ATA_PIO_TIME Register ---------------------------------*/
/*---------------------------------- ATA_UDMA_TIME Register ---------------------------------*/
/*---------------------------------- ATA_XFR_NUM Register ---------------------------------*/
typedef struct ATA_Inform
{
eATA_MODE_6400 eAtaMode;
u32 uMaxMultiple;
u32 uCurrentMultiple;
u32 uMaxSectors;
eATA_PIOMODE eMaxPioMode;
eATA_PIOMODE eCurrentPioMode;
eATA_UDMAMODE eMaxUdmaMode;
eATA_UDMAMODE eCurrentUdmaMode;
bool bIsXferDone;
bool bIsDone;
u32* puATAWriteBuf;
u32* puATAReadBuf;
/*
u32 PCCARD_DATA;
u32 PCCARD_FEATURE;
u32 PCCARD_SECTOR;
u32 PCCARD_LOWLBA;
u32 PCCARD_MIDLBA;
u32 PCCARD_HIGHLBA;
u32 PCCARD_DEVICE;
u32 PCCARD_STATUS;
u32 PCCARD_COMMAND;
*/
}
ATA_oInform;
bool ATA_Init(u8, u8);
void ATA_InitBuffer(u8);
/*---------------------------------- Functions for Implement ATA Test functions ---------------------------------*/
bool ATA_WriteBlocks(u8 ucCon, u32 uStBlock, u32 uBlocks, u32 uBufAddr);
bool ATA_ReadBlocks(u8 ucCon, u32 uStBlock, u32 uBlocks, u32 uBufAddr);
void ATA_IdentifyDevice(u8 ucCon);
void ATA_TestResetAll(u8 ucCon);
void ATA_SetPIOMode(u8 ucCon, eATA_PIOMODE ePioMode);
void ATA_ChangeATAMode(u8 ucCon);
void ATA_SetUdmaMode(u8 ucCon, eATA_UDMAMODE eUdmaMode);
bool ATA_FindInterruptRequest(u8 ucCon, u32* uNthBit);
void ATA_ClearPending(u8 ucCon, u32 uSrcInt);
void ATA_ClearAllInterrupt(u8 ucCon);
bool ATA_IsDmaDone(u8 ucCon);
bool ATA_IsTBufFullContinue(u8 ucCon);
bool ATA_IsSBufEmptyContinue(u8 ucCon);
bool ATA_StartWritingBlocks(u8 ucCon, u32 uStBlock, u32 uBlocks, u32 uBufAddr);
bool ATA_StartReadingBlocks(u8 ucCon, u32 uStBlock, u32 uBlocks, u32 uBufAddr);
bool ATA_StartWritingSectors(u8 ucCon, u32 uStBlock, u32 uBlocks, u32 uBufAddr);
bool ATA_StartReadingSectors(u8 ucCon, u32 uStBlock, u32 uBlocks, u32 uBufAddr);
void ATA_SetTransferCommand(u8 ucCon, eATA_XFR_CMD eXfrCmd);
/*---------------------------------- APIs of ATA_CONTROL Registers ---------------------------------*/
void ATA_SetEnable(u8 ucCon, u8 ucEnFlag);
u8 *ATA_GetModeName(eATA_MODE_6400);
void ATA_TestUDmaMode_Int_for_EBI(void);
void ATA_TestPDmaMode_Int_for_EBI(void);
bool ATA_OpenMedia(u8, eATA_MODE_6400);
bool ATA_CloseMedia(u8);
void ATA_SetRst(u8 , u8 );
#ifdef __cplusplus
}
#endif
#endif // __ATA6400_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -