📄 seeddm642_ide.h
字号:
/*
* Copyright 2004 by SEED Incorporated.
* All rights reserved. Property of SEED Incorporated.
*/
/*
* ======== seeddm642_ide.h ========
*
*/
#include <std.h>
#include <csl.h>
/*ATA register*/
#define SEEDDM642_ATA_AS (SEEDDM642_ATACS1 + 0x18) //read only
#define SEEDDM642_ATA_DEVCON (SEEDDM642_ATACS1 + 0x18) //write only
#define SEEDDM642_ATA_DATA (SEEDDM642_ATACS0 + 0x0) //write and read
#define SEEDDM642_ATA_ERROR (SEEDDM642_ATACS0 + 0x4) //read only
#define SEEDDM642_ATA_FEATURES (SEEDDM642_ATACS0 + 0x4) //write only
#define SEEDDM642_ATA_SECTOR (SEEDDM642_ATACS0 + 0x8) //write and read
#define SEEDDM642_ATA_LBAL (SEEDDM642_ATACS0 + 0xc)//write and read
#define SEEDDM642_ATA_LBAM (SEEDDM642_ATACS0 + 0x10) //write and read
#define SEEDDM642_ATA_LBAH (SEEDDM642_ATACS0 + 0x14)//write and read
#define SEEDDM642_ATA_DEVICE (SEEDDM642_ATACS0 + 0x18) //write and read
#define SEEDDM642_ATA_COM (SEEDDM642_ATACS0 + 0x1c) //write only
#define SEEDDM642_ATA_STATUS (SEEDDM642_ATACS0 + 0x1c) //read only
/*the bus status*/
#define ATA_BUS_BSY 0x80
#define ATA_BUS_DRDY 0x40
#define ATA_BUS_DF 0x20
#define ATA_BUS_DRQ 0x08
#define ATA_BUS_ERR 0x01
/*ata command*/
#define IDENTIFY_DEVICE 0xEC
#define READ_SECTOR(S) 0x20
#define WRITE_SECTOR(S) 0x30
/*ATA command,if a regiset is not used during command ,set the rigiter
value :0x100*/
typedef struct {
Uint32 features;
Uint32 sector_count;
Uint32 LBA_l;
Uint32 LBA_M;
Uint32 LBA_H;
Uint32 device;
Uint32 com_code;
int prereq;
int complete_flag;
} ATA_command;
/* ATA Handle */
typedef int SEEDDM642_ATAHandle;
/*******************************************************************/
/* */
/* int ata_status() */
/* 描述:读回当前硬盘的状态 */
/* 参数:无 */
/* 返值:当前状态寄存器的值 */
/* */
/*******************************************************************/
int ata_status();
/*******************************************************************/
/* */
/* SEEDDM642_ATAHandle ata_open() */
/* 描述:打开有效的硬盘设备 */
/* 参数:无 */
/* 返值:有效设备的句柄 */
/* */
/*******************************************************************/
SEEDDM642_ATAHandle ata_open();
/*******************************************************************/
/* */
/* int ata_command() */
/* 描述:设置当前寄存器 */
/* 参数:regaddr:寄存器地址 */
/* regdata:寄存器的值 */
/* 返值:无 */
/* */
/*******************************************************************/
Bool ata_command(ATA_command *command,Uint32 buffer,Uint32 longth);
/*******************************************************************/
/* */
/* int ata_reg_write() */
/* 描述:设置当前寄存器 */
/* 参数:regaddr:寄存器地址 */
/* regdata:寄存器的值 */
/* 返值:无 */
/* */
/*******************************************************************/
void ata_reg_write(Uint32 regaddr,Uint32 regdata);
/*******************************************************************/
/* */
/* int ata_reg_read() */
/* 描述:读回当前寄存器的状态 */
/* 参数:寄存器指示 */
/* 返值:当前状态寄存器的值 */
/* */
/*******************************************************************/
int ata_reg_read(Uint32 regaddr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -