123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- #ifndef _ATA_H
- #define _ATA_H
- #include <libata.h>
- #ifndef CONFIG_SYS_ATA_STRIDE
- #define CONFIG_SYS_ATA_STRIDE 1
- #endif
- #define ATA_IO_DATA(x) (CONFIG_SYS_ATA_DATA_OFFSET+((x) * CONFIG_SYS_ATA_STRIDE))
- #define ATA_IO_REG(x) (CONFIG_SYS_ATA_REG_OFFSET +((x) * CONFIG_SYS_ATA_STRIDE))
- #define ATA_IO_ALT(x) (CONFIG_SYS_ATA_ALT_OFFSET +((x) * CONFIG_SYS_ATA_STRIDE))
- #define ATA_DATA_REG ATA_IO_DATA(0)
- #define ATA_ERROR_REG ATA_IO_REG(1)
- #define ATA_SECT_CNT ATA_IO_REG(2)
- #define ATA_SECT_NUM ATA_IO_REG(3)
- #define ATA_CYL_LOW ATA_IO_REG(4)
- #define ATA_CYL_HIGH ATA_IO_REG(5)
- #define ATA_DEV_HD ATA_IO_REG(6)
- #define ATA_COMMAND ATA_IO_REG(7)
- #define ATA_DATA_EVEN ATA_IO_REG(8)
- #define ATA_DATA_ODD ATA_IO_REG(9)
- #define ATA_STATUS ATA_COMMAND
- #define ATA_DEV_CTL ATA_IO_ALT(6)
- #define ATA_LBA_LOW ATA_SECT_NUM
- #define ATA_LBA_MID ATA_CYL_LOW
- #define ATA_LBA_HIGH ATA_CYL_HIGH
- #define ATA_LBA_SEL ATA_DEV_CTL
- #define ATA_STAT_BUSY 0x80
- #define ATA_STAT_READY 0x40
- #define ATA_STAT_FAULT 0x20
- #define ATA_STAT_SEEK 0x10
- #define ATA_STAT_DRQ 0x08
- #define ATA_STAT_CORR 0x04
- #define ATA_STAT_INDEX 0x02
- #define ATA_STAT_ERR 0x01
- #ifndef ATA_DEVICE
- #define ATA_DEVICE(x) ((x & 1)<<4)
- #endif
- #define ATA_LBA 0xE0
- #define ATA_CMD_READ 0x20
- #define ATA_CMD_READN 0x21
- #define ATA_CMD_WRITE 0x30
- #define ATA_CMD_WRITEN 0x31
- #define ATA_CMD_VRFY 0x40
- #define ATA_CMD_VRFYN 0x41
- #define ATA_CMD_SEEK 0x70
- #define ATA_CMD_DIAG 0x90
- #define ATA_CMD_INIT 0x91
- #define ATA_CMD_RD_MULT 0xC4
- #define ATA_CMD_WR_MULT 0xC5
- #define ATA_CMD_SETMULT 0xC6
- #define ATA_CMD_RD_DMA 0xC8
- #define ATA_CMD_RD_DMAN 0xC9
- #define ATA_CMD_WR_DMA 0xCA
- #define ATA_CMD_WR_DMAN 0xCB
- #define ATA_CMD_IDENT 0xEC
- #define ATA_CMD_SETF 0xEF
- #define ATA_CMD_CHK_PWR 0xE5
- #define ATA_CMD_READ_EXT 0x24
- #define ATA_CMD_WRITE_EXT 0x34
- #define ATA_CMD_VRFY_EXT 0x42
- #define ATA_CMD_FLUSH 0xE7
- #define ATA_CMD_FLUSH_EXT 0xEA
- #define ATAPI_CMD_IDENT 0xA1
- #define ATAPI_CMD_PACKET 0xA0
- #define ATAPI_CMD_INQUIRY 0x12
- #define ATAPI_CMD_REQ_SENSE 0x03
- #define ATAPI_CMD_READ_CAP 0x25
- #define ATAPI_CMD_START_STOP 0x1B
- #define ATAPI_CMD_READ_12 0xA8
- #define ATA_GET_ERR() inb(ATA_STATUS)
- #define ATA_GET_STAT() inb(ATA_STATUS)
- #define ATA_OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good))
- #define ATA_BAD_R_STAT (ATA_STAT_BUSY | ATA_STAT_ERR)
- #define ATA_BAD_W_STAT (ATA_BAD_R_STAT | ATA_STAT_FAULT)
- #define ATA_BAD_STAT (ATA_BAD_R_STAT | ATA_STAT_DRQ)
- #define ATA_DRIVE_READY (ATA_READY_STAT | ATA_STAT_SEEK)
- #define ATA_DATA_READY (ATA_STAT_DRQ)
- #define ATA_BLOCKSIZE 512
- #define ATA_BLOCKSHIFT 9
- #define ATA_SECTORWORDS (512 / sizeof(uint32_t))
- #ifndef ATA_RESET_TIME
- #define ATA_RESET_TIME 60
- #endif
- typedef struct hd_driveid {
- unsigned short config;
- unsigned short cyls;
- unsigned short reserved2;
- unsigned short heads;
- unsigned short track_bytes;
- unsigned short sector_bytes;
- unsigned short sectors;
- unsigned short vendor0;
- unsigned short vendor1;
- unsigned short vendor2;
- unsigned char serial_no[20];
- unsigned short buf_type;
- unsigned short buf_size;
- unsigned short ecc_bytes;
- unsigned char fw_rev[8];
- unsigned char model[40];
- unsigned char max_multsect;
- unsigned char vendor3;
- unsigned short dword_io;
- unsigned char vendor4;
- unsigned char capability;
- unsigned short reserved50;
- unsigned char vendor5;
- unsigned char tPIO;
- unsigned char vendor6;
- unsigned char tDMA;
- unsigned short field_valid;
- unsigned short cur_cyls;
- unsigned short cur_heads;
- unsigned short cur_sectors;
- unsigned short cur_capacity0;
- unsigned short cur_capacity1;
- unsigned char multsect;
- unsigned char multsect_valid;
- unsigned int lba_capacity;
- unsigned short dma_1word;
- unsigned short dma_mword;
- unsigned short eide_pio_modes;
- unsigned short eide_dma_min;
- unsigned short eide_dma_time;
- unsigned short eide_pio;
- unsigned short eide_pio_iordy;
- unsigned short words69_70[2];
- unsigned short words71_74[4];
- unsigned short queue_depth;
- unsigned short words76_79[4];
- unsigned short major_rev_num;
- unsigned short minor_rev_num;
- unsigned short command_set_1;
- unsigned short command_set_2;
- unsigned short cfsse;
- unsigned short cfs_enable_1;
- unsigned short cfs_enable_2;
- unsigned short csf_default;
- unsigned short dma_ultra;
- unsigned short word89;
- unsigned short word90;
- unsigned short CurAPMvalues;
- unsigned short word92;
- unsigned short hw_config;
- unsigned short words94_99[6];
-
- unsigned short lba48_capacity[4];
- unsigned short words104_125[22];
- unsigned short last_lun;
- unsigned short word127;
- unsigned short dlf;
- unsigned short csfo;
- unsigned short words130_155[26];
- unsigned short word156;
- unsigned short words157_159[3];
- unsigned short words160_162[3];
- unsigned short cf_advanced_caps;
- unsigned short words164_255[92];
- } hd_driveid_t;
- typedef struct {
- unsigned int t_setup;
- unsigned int t_length;
- unsigned int t_hold;
- }
- pio_config_t;
- #define IDE_MAX_PIO_MODE 4
- #endif
|