20#define ATA_SR_BSY 0x80
21#define ATA_SR_DRDY 0x40
23#define ATA_SR_DSC 0x10
24#define ATA_SR_DRQ 0x08
25#define ATA_SR_CORR 0x04
26#define ATA_SR_IDX 0x02
27#define ATA_SR_ERR 0x01
30#define ATA_ER_BBK 0x80
31#define ATA_ER_UNC 0x40
33#define ATA_ER_IDNF 0x10
34#define ATA_ER_MCR 0x08
35#define ATA_ER_ABRT 0x04
36#define ATA_ER_TK0NF 0x02
37#define ATA_ER_AMNF 0x01
39#define ATA_CMD_READ_PIO 0x20
40#define ATA_CMD_READ_PIO_EXT 0x24
41#define ATA_CMD_READ_DMA 0xC8
42#define ATA_CMD_READ_DMA_EXT 0x25
43#define ATA_CMD_WRITE_PIO 0x30
44#define ATA_CMD_WRITE_PIO_EXT 0x34
45#define ATA_CMD_WRITE_DMA 0xCA
46#define ATA_CMD_WRITE_DMA_EXT 0x35
47#define ATA_CMD_CACHE_FLUSH 0xE7
48#define ATA_CMD_CACHE_FLUSH_EXT 0xEA
49#define ATA_CMD_PACKET 0xA0
50#define ATA_CMD_IDENTIFY_PACKET 0xA1
51#define ATA_CMD_IDENTIFY 0xEC
54#define ATA_IDENT_DEVICE_TYPE 0
55#define ATA_IDENT_CYLINDERS 2
56#define ATA_IDENT_HEADS 6
57#define ATA_IDENT_SECTORS 12
58#define ATA_IDENT_SERIAL 20
59#define ATA_IDENT_MODEL 54
60#define ATA_IDENT_CAPABILITIES 98
61#define ATA_IDENT_FIELDVALID 106
62#define ATA_IDENT_MAX_LBA 120
63#define ATA_IDENT_COMMANDSETS 164
64#define ATA_IDENT_MAX_LBA_EXT 200
66#define ATA_REG_SET_FEATURES 0xEF
68#define ATA_MASTER 0x00
72#define ATA_REG_DATA 0x00
73#define ATA_REG_ERROR 0x01
74#define ATA_REG_FEATURES 0x01
75#define ATA_REG_SEC_COUNT0 0x02
76#define ATA_REG_LBA0 0x03
77#define ATA_REG_LBA1 0x04
78#define ATA_REG_LBA2 0x05
79#define ATA_REG_HDDEVSEL 0x06
80#define ATA_REG_COMMAND 0x07
81#define ATA_REG_STATUS 0x07
82#define ATA_REG_SEC_COUNT1 0x08
83#define ATA_REG_LBA3 0x09
84#define ATA_REG_LBA4 0x0A
85#define ATA_REG_LBA5 0x0B
86#define ATA_REG_CONTROL 0x0C
87#define ATA_REG_ALT_STATUS 0x0C
88#define ATA_REG_DEV_ADDRESS 0x0D
90#define ATA_REG_NEIN 0x01
92#define ATA_PRIMARY_IO 0x1F0
93#define ATA_SECONDARY_IO 0x170
94#define ATA_PRIMARY_DCR_AS 0x3F6
95#define ATA_SECONDARY_DCR_AS 0x376
98#define ATA_PRIMARY_IRQ 14
99#define ATA_SECONDARY_IRQ 15
102#define ATA_PRIMARY 0x00
103#define ATA_SECONDARY 0x01
107#define ATA_CYL_HIGH 5
111#define ATA_WRITE 0x013
113#define ATA_PRIMARY_SEL 0xA0
114#define ATA_SECONDARY_SEL 0xB0
117#define ATA_ADDRESS1(x) (x + 3)
118#define ATA_ADDRESS2(x) (x + 4)
119#define ATA_ADDRESS3(x) (x + 5)
122#define ATA_COMMAND(x) (x + 7)
124#define kATASectorSize (512U)
134#if defined(__ATA_PIO__) || defined(__ATA_DMA__)
Kernel::Void drv_std_write(Kernel::UInt64 lba, Kernel::Char *buf, Kernel::SizeT sector_sz, Kernel::SizeT buf_sz)
Write to AHCI disk.
Kernel::Boolean drv_std_init(Kernel::UInt16 &PortsImplemented)
Initializes an AHCI disk.
Kernel::SizeT drv_std_get_sector_count()
Gets the sector count from AHCI disk.
Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char *buf, Kernel::SizeT sector_sz, Kernel::SizeT buf_sz)
Read from AHCI disk.
Kernel::Boolean drv_std_detected(Kernel::Void)
Kernel::SizeT drv_std_get_size()
Gets the AHCI disk size.
@ kATADevicePATA
Definition ATA.h:127
@ kATADevicePATA_PI
Definition ATA.h:129
@ kATADeviceSATA_PI
Definition ATA.h:130
@ kATADeviceCount
Definition ATA.h:131
@ kATADeviceSATA
Definition ATA.h:128
char Char
Definition Defines.h:51
void Void
Definition Defines.h:85
unsigned char UInt8
Definition Defines.h:53
__SIZE_TYPE__ SizeT
Definition Defines.h:58
unsigned short UInt16
Definition Defines.h:40
bool Boolean
Definition Defines.h:49
__UINT64_TYPE__ UInt64
Definition Defines.h:48