23#ifndef _MINIOS_DRIVERS_ATA_H_
24#define _MINIOS_DRIVERS_ATA_H_
30#define ATA_PRIMARY_BASE 0x1F0
31#define ATA_PRIMARY_CTRL 0x3F6
32#define ATA_SECONDARY_BASE 0x170
33#define ATA_SECONDARY_CTRL 0x376
36#define ATA_PRIMARY_IRQ 14
37#define ATA_SECONDARY_IRQ 15
40#define ATA_MASTER 0xA0
44#define ATA_REG_DATA 0x00
45#define ATA_REG_ERROR 0x01
46#define ATA_REG_FEATURES 0x01
47#define ATA_REG_SECCOUNT0 0x02
48#define ATA_REG_LBA0 0x03
49#define ATA_REG_LBA1 0x04
50#define ATA_REG_LBA2 0x05
51#define ATA_REG_HDDEVSEL 0x06
52#define ATA_REG_STATUS 0x07
53#define ATA_REG_COMMAND 0x07
56#define ATA_SR_BSY 0x80
57#define ATA_SR_DRDY 0x40
58#define ATA_SR_DRQ 0x08
59#define ATA_SR_ERR 0x01
63#define BMR_STATUS 0x02
67#define SECTOR_SIZE 512
68#define MAX_SECTORS_PER_RW 8
71#define ATA_CMD_READ_DMA_EXT 0x25
72#define ATA_CMD_WRITE_DMA_EXT 0x35
73#define ATA_CMD_CACHE_FLUSH_EXT 0xEA
76#define PRD_LAST_ENTRY 0x8000
79#define BMR_ACTIVE_BIT 0x01
80#define BMR_ERROR_BIT 0x02
81#define BMR_IRQ_BIT 0x04
82#define BMR_START_BIT 0x01
int ata_read_sectors(uint64_t lba, uint16_t count, void *buf)
Definition ata.c:162
int ata_write_sectors(uint64_t lba, uint16_t count, const void *buf)
Definition ata.c:248
int ata_flush(void)
Definition ata.c:325
int ata_init(void)
Definition ata.c:99
uint32_t phys_addr
Definition ata.h:86
uint16_t byte_count
Definition ata.h:87
uint16_t flags
Definition ata.h:88
unsigned short uint16_t
Definition types.h:31
unsigned int uint32_t
Definition types.h:34
unsigned long int uint64_t
Definition types.h:37