Voxia OS
v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
ahci_reg.hpp
Go to the documentation of this file.
1
#ifndef __AHCI__AHCI_REG_HPP__
2
#define __AHCI__AHCI_REG_HPP__
3
4
#include <
type.h
>
5
6
typedef
volatile
struct
{
7
uint32_t
clb
;
// 0x00, command list base address, 1K-byte aligned
8
uint32_t
clbu
;
// 0x04, command list base address upper 32 bits
9
uint32_t
fb
;
// 0x08, FIS base address, 256-byte aligned
10
uint32_t
fbu
;
// 0x0C, FIS base address upper 32 bits
11
uint32_t
is
;
// 0x10, interrupt status
12
uint32_t
ie
;
// 0x14, interrupt enable
13
uint32_t
cmd
;
// 0x18, command and status
14
uint32_t
rsv0
;
// 0x1C, Reserved
15
uint32_t
tfd
;
// 0x20, task file data
16
uint32_t
sig
;
// 0x24, signature
17
uint32_t
ssts
;
// 0x28, SATA status (SCR0:SStatus)
18
uint32_t
sctl
;
// 0x2C, SATA control (SCR2:SControl)
19
uint32_t
serr
;
// 0x30, SATA error (SCR1:SError)
20
uint32_t
sact
;
// 0x34, SATA active (SCR3:SActive)
21
uint32_t
ci
;
// 0x38, command issue
22
uint32_t
sntf
;
// 0x3C, SATA notification (SCR4:SNotification)
23
uint32_t
fbs
;
// 0x40, FIS-based switch control
24
uint32_t
rsv1
[11];
// 0x44 ~ 0x6F, Reserved
25
uint32_t
vendor
[4];
// 0x70 ~ 0x7F, vendor specific
26
}
ahci_port_t
;
27
28
typedef
volatile
struct
{
29
uint8_t
reset
: 1;
30
uint8_t
int_enable
: 1;
31
uint8_t
mrsm
: 2;
32
uint32_t
reserved
: 27;
33
uint8_t
ahci_enable
: 1;
34
}
ahci_ghc_t
;
35
36
typedef
volatile
struct
{
37
uint32_t
cap
;
// 0x00, Host capability
38
uint32_t
ghc
;
// 0x04, Global host control
39
uint32_t
is
;
// 0x08, Interrupt status
40
uint32_t
pi
;
// 0x0C, Port implemented
41
uint32_t
vs
;
// 0x10, Version
42
uint32_t
ccc_ctl
;
// 0x14, Command completion coalescing control
43
uint32_t
ccc_pts
;
// 0x18, Command completion coalescing ports
44
uint32_t
em_loc
;
// 0x1C, Enclosure management location
45
uint32_t
em_ctl
;
// 0x20, Enclosure management control
46
uint32_t
cap2
;
// 0x24, Host capabilities extended
47
uint32_t
bohc
;
// 0x28, BIOS/OS handoff control and status
48
49
// 0x2C - 0x9F, Reserved
50
uint8_t
rsv
[0xA0 - 0x2C];
51
52
// 0xA0 - 0xFF, Vendor specific registers
53
uint8_t
vendor
[0x100 - 0xA0];
54
55
// 0x100 - 0x10FF, Port control registers
56
ahci_port_t
ports
[1];
57
}
__attribute__
((packed)) ahci_op_t;
58
59
// ========== Device Signatures ==========
60
#define AHCI_SIG_ATA 0x00000101
// SATA drive
61
#define AHCI_SIG_ATAPI 0xEB140101
// SATAPI drive
62
#define AHCI_SIG_SEMB 0xC33C0101
// Enclosure management bridge
63
#define AHCI_SIG_PM 0x96690101
// Port multiplier
64
65
// ========== SATA Status Register Bits ==========
66
#define HBA_PxSSTS_DET_MASK 0xF
67
#define HBA_PxSSTS_DET_NONE 0x0
// No device detected
68
#define HBA_PxSSTS_DET_PRESENT 0x1
// Device present, no PHY
69
#define HBA_PxSSTS_DET_ESTABLISHED 0x3
// Device present and PHY established
70
#define HBA_PxSSTS_DET_OFFLINE 0x4
// PHY offline
71
72
#define HBA_PxSSTS_SPD_MASK (0xF << 4)
73
#define HBA_PxSSTS_SPD_NONE (0x0 << 4)
74
#define HBA_PxSSTS_SPD_GEN1 (0x1 << 4)
// Gen 1 (1.5 Gbps)
75
#define HBA_PxSSTS_SPD_GEN2 (0x2 << 4)
// Gen 2 (3.0 Gbps)
76
#define HBA_PxSSTS_SPD_GEN3 (0x3 << 4)
// Gen 3 (6.0 Gbps)
77
78
#define HBA_PxSSTS_IPM_MASK (0xF << 8)
79
#define HBA_PxSSTS_IPM_NONE (0x0 << 8)
80
#define HBA_PxSSTS_IPM_ACTIVE (0x1 << 8)
81
#define HBA_PxSSTS_IPM_PARTIAL (0x2 << 8)
82
#define HBA_PxSSTS_IPM_SLUMBER (0x6 << 8)
83
84
#define ATA_DEV_BUSY 0x80
85
#define ATA_DEV_DRQ 0x08
86
87
typedef
enum
{
88
FIS_TYPE_REG_H2D
= 0x27,
// Register FIS - host to device
89
FIS_TYPE_REG_D2H
= 0x34,
// Register FIS - device to host
90
FIS_TYPE_DMA_ACT
= 0x39,
// DMA activate FIS - device to host
91
FIS_TYPE_DMA_SETUP
= 0x41,
// DMA setup FIS - bidirectional
92
FIS_TYPE_DATA
= 0x46,
// Data FIS - bidirectional
93
FIS_TYPE_BIST
= 0x58,
// BIST activate FIS - bidirectional
94
FIS_TYPE_PIO_SETUP
= 0x5F,
// PIO setup FIS - device to host
95
FIS_TYPE_DEV_BITS
= 0xA1,
// Set device bits FIS - device to host
96
}
FIS_TYPE
;
97
98
typedef
enum
99
:
int
{
AHCI_DEV_NULL
= 0,
// Tidak ada device
100
AHCI_DEV_SATA
,
// SATA drive
101
AHCI_DEV_SATAPI
,
// SATAPI drive (CD/DVD)
102
AHCI_DEV_SEMB
,
// Enclosure management bridge
103
AHCI_DEV_PM
// Port multiplier
104
}
ahci_device_type_t
;
105
106
typedef
struct
{
107
uint32_t
dba
;
// Data base address
108
uint32_t
dbau
;
// Data base address upper 32 bits
109
uint32_t
rsv0
;
// Reserved
110
111
// DW3
112
uint32_t
dbc
: 22;
// Byte count, 4M max
113
uint32_t
rsv1
: 9;
// Reserved
114
uint32_t
i
: 1;
115
}
__attribute__
((packed)) ahci_prdt_t;
116
117
typedef
struct
{
118
// DW0
119
uint8_t
cfl
: 5;
// Command FIS length in DWORDS, 2 ~ 16
120
uint8_t
a
: 1;
// ATAPI
121
uint8_t
w
: 1;
// Write, 1: H2D, 0: D2H
122
uint8_t
p
: 1;
// Prefetchable
123
124
uint8_t
r
: 1;
// Reset
125
uint8_t
b
: 1;
// BIST
126
uint8_t
c
: 1;
// Clear busy upon R_OK
127
uint8_t
rsv0
: 1;
// Reserved
128
uint8_t
pmp
: 4;
// Port multiplier port
129
130
uint16_t
prdtl
;
// Physical region descriptor table length in entries
131
132
// DW1
133
volatile
uint32_t
134
prdbc
;
// Physical region descriptor byte count transferred
135
136
// DW2, 3
137
uint32_t
ctba
;
// Command table descriptor base address
138
uint32_t
ctbau
;
// Command table descriptor base address upper 32 bits
139
140
// DW4 - 7
141
uint32_t
rsv1
[4];
// Reserved
142
}
ahci_cmd_t
;
143
144
typedef
struct
{
145
uint8_t
cfis
[64];
146
uint8_t
acmd
[16];
147
uint8_t
rsv
[48];
148
ahci_prdt_t
prdt
[];
149
}
__attribute__
((packed)) ahci_cmd_tbl_t;
150
151
typedef
struct
{
152
// DWORD 0
153
uint8_t
fis_type
;
// FIS_TYPE_REG_H2D
154
155
uint8_t
pmport
: 4;
// Port multiplier
156
uint8_t
rsv0
: 3;
// Reserved
157
uint8_t
c
: 1;
// 1: Command, 0: Control
158
159
uint8_t
command
;
// Command register
160
uint8_t
featurel
;
// Feature register, 7:0
161
162
// DWORD 1
163
uint8_t
lba0
;
// LBA low register, 7:0
164
uint8_t
lba1
;
// LBA mid register, 15:8
165
uint8_t
lba2
;
// LBA high register, 23:16
166
uint8_t
device
;
// Device register
167
168
// DWORD 2
169
uint8_t
lba3
;
// LBA register, 31:24
170
uint8_t
lba4
;
// LBA register, 39:32
171
uint8_t
lba5
;
// LBA register, 47:40
172
uint8_t
featureh
;
// Feature register, 15:8
173
174
// DWORD 3
175
uint8_t
countl
;
// Count register, 7:0
176
uint8_t
counth
;
// Count register, 15:8
177
uint8_t
icc
;
// Isochronous command completion
178
uint8_t
control
;
// Control register
179
180
// DWORD 4
181
uint8_t
rsv1
[4];
// Reserved
182
}
ahci_fis_h2d_t
;
183
184
#endif
//__AHCI__AHCI_REG_HPP__
ahci_device_type_t
ahci_device_type_t
Definition
ahci_reg.hpp:99
AHCI_DEV_SEMB
@ AHCI_DEV_SEMB
Definition
ahci_reg.hpp:102
AHCI_DEV_NULL
@ AHCI_DEV_NULL
Definition
ahci_reg.hpp:99
AHCI_DEV_SATA
@ AHCI_DEV_SATA
Definition
ahci_reg.hpp:100
AHCI_DEV_SATAPI
@ AHCI_DEV_SATAPI
Definition
ahci_reg.hpp:101
AHCI_DEV_PM
@ AHCI_DEV_PM
Definition
ahci_reg.hpp:103
FIS_TYPE
FIS_TYPE
Definition
ahci_reg.hpp:87
FIS_TYPE_DMA_ACT
@ FIS_TYPE_DMA_ACT
Definition
ahci_reg.hpp:90
FIS_TYPE_PIO_SETUP
@ FIS_TYPE_PIO_SETUP
Definition
ahci_reg.hpp:94
FIS_TYPE_REG_H2D
@ FIS_TYPE_REG_H2D
Definition
ahci_reg.hpp:88
FIS_TYPE_BIST
@ FIS_TYPE_BIST
Definition
ahci_reg.hpp:93
FIS_TYPE_DEV_BITS
@ FIS_TYPE_DEV_BITS
Definition
ahci_reg.hpp:95
FIS_TYPE_DATA
@ FIS_TYPE_DATA
Definition
ahci_reg.hpp:92
FIS_TYPE_DMA_SETUP
@ FIS_TYPE_DMA_SETUP
Definition
ahci_reg.hpp:91
FIS_TYPE_REG_D2H
@ FIS_TYPE_REG_D2H
Definition
ahci_reg.hpp:89
__attribute__
typedef __attribute__
Definition
msi.c:47
__attribute__::em_loc
uint32_t em_loc
Definition
ahci_reg.hpp:44
__attribute__::ccc_ctl
uint32_t ccc_ctl
Definition
ahci_reg.hpp:42
__attribute__::is
uint32_t is
Definition
ahci_reg.hpp:39
__attribute__::cfis
uint8_t cfis[64]
Definition
ahci_reg.hpp:145
__attribute__::bohc
uint32_t bohc
Definition
ahci_reg.hpp:47
__attribute__::dbau
uint32_t dbau
Definition
ahci_reg.hpp:108
__attribute__::vs
uint32_t vs
Definition
ahci_reg.hpp:41
__attribute__::ccc_pts
uint32_t ccc_pts
Definition
ahci_reg.hpp:43
__attribute__::rsv
uint8_t rsv[0xA0 - 0x2C]
Definition
ahci_reg.hpp:50
__attribute__::vendor
uint8_t vendor[0x100 - 0xA0]
Definition
ahci_reg.hpp:53
__attribute__::pi
uint32_t pi
Definition
ahci_reg.hpp:40
__attribute__::ghc
uint32_t ghc
Definition
ahci_reg.hpp:38
__attribute__::rsv0
uint32_t rsv0
Definition
ahci_reg.hpp:109
__attribute__::acmd
uint8_t acmd[16]
Definition
ahci_reg.hpp:146
__attribute__::em_ctl
uint32_t em_ctl
Definition
ahci_reg.hpp:45
__attribute__::prdt
ahci_prdt_t prdt[]
Definition
ahci_reg.hpp:148
__attribute__::i
uint32_t i
Definition
ahci_reg.hpp:114
__attribute__::dba
uint32_t dba
Definition
ahci_reg.hpp:107
__attribute__::dbc
uint32_t dbc
Definition
ahci_reg.hpp:112
__attribute__::rsv1
uint32_t rsv1
Definition
ahci_reg.hpp:113
__attribute__::ports
ahci_port_t ports[1]
Definition
ahci_reg.hpp:56
__attribute__::cap
uint32_t cap
Definition
ahci_reg.hpp:37
__attribute__::cap2
uint32_t cap2
Definition
ahci_reg.hpp:46
ahci_cmd_t
Definition
ahci_reg.hpp:117
ahci_cmd_t::prdtl
uint16_t prdtl
Definition
ahci_reg.hpp:130
ahci_cmd_t::rsv0
uint8_t rsv0
Definition
ahci_reg.hpp:127
ahci_cmd_t::r
uint8_t r
Definition
ahci_reg.hpp:124
ahci_cmd_t::w
uint8_t w
Definition
ahci_reg.hpp:121
ahci_cmd_t::c
uint8_t c
Definition
ahci_reg.hpp:126
ahci_cmd_t::p
uint8_t p
Definition
ahci_reg.hpp:122
ahci_cmd_t::pmp
uint8_t pmp
Definition
ahci_reg.hpp:128
ahci_cmd_t::cfl
uint8_t cfl
Definition
ahci_reg.hpp:119
ahci_cmd_t::rsv1
uint32_t rsv1[4]
Definition
ahci_reg.hpp:141
ahci_cmd_t::ctba
uint32_t ctba
Definition
ahci_reg.hpp:137
ahci_cmd_t::a
uint8_t a
Definition
ahci_reg.hpp:120
ahci_cmd_t::prdbc
volatile uint32_t prdbc
Definition
ahci_reg.hpp:134
ahci_cmd_t::b
uint8_t b
Definition
ahci_reg.hpp:125
ahci_cmd_t::ctbau
uint32_t ctbau
Definition
ahci_reg.hpp:138
ahci_fis_h2d_t
Definition
ahci_reg.hpp:151
ahci_fis_h2d_t::device
uint8_t device
Definition
ahci_reg.hpp:166
ahci_fis_h2d_t::fis_type
uint8_t fis_type
Definition
ahci_reg.hpp:153
ahci_fis_h2d_t::rsv1
uint8_t rsv1[4]
Definition
ahci_reg.hpp:181
ahci_fis_h2d_t::icc
uint8_t icc
Definition
ahci_reg.hpp:177
ahci_fis_h2d_t::counth
uint8_t counth
Definition
ahci_reg.hpp:176
ahci_fis_h2d_t::control
uint8_t control
Definition
ahci_reg.hpp:178
ahci_fis_h2d_t::lba3
uint8_t lba3
Definition
ahci_reg.hpp:169
ahci_fis_h2d_t::lba0
uint8_t lba0
Definition
ahci_reg.hpp:163
ahci_fis_h2d_t::lba5
uint8_t lba5
Definition
ahci_reg.hpp:171
ahci_fis_h2d_t::c
uint8_t c
Definition
ahci_reg.hpp:157
ahci_fis_h2d_t::lba1
uint8_t lba1
Definition
ahci_reg.hpp:164
ahci_fis_h2d_t::rsv0
uint8_t rsv0
Definition
ahci_reg.hpp:156
ahci_fis_h2d_t::featurel
uint8_t featurel
Definition
ahci_reg.hpp:160
ahci_fis_h2d_t::lba2
uint8_t lba2
Definition
ahci_reg.hpp:165
ahci_fis_h2d_t::command
uint8_t command
Definition
ahci_reg.hpp:159
ahci_fis_h2d_t::countl
uint8_t countl
Definition
ahci_reg.hpp:175
ahci_fis_h2d_t::pmport
uint8_t pmport
Definition
ahci_reg.hpp:155
ahci_fis_h2d_t::lba4
uint8_t lba4
Definition
ahci_reg.hpp:170
ahci_fis_h2d_t::featureh
uint8_t featureh
Definition
ahci_reg.hpp:172
ahci_ghc_t
Definition
ahci_reg.hpp:28
ahci_ghc_t::ahci_enable
uint8_t ahci_enable
Definition
ahci_reg.hpp:33
ahci_ghc_t::mrsm
uint8_t mrsm
Definition
ahci_reg.hpp:31
ahci_ghc_t::reserved
uint32_t reserved
Definition
ahci_reg.hpp:32
ahci_ghc_t::int_enable
uint8_t int_enable
Definition
ahci_reg.hpp:30
ahci_ghc_t::reset
uint8_t reset
Definition
ahci_reg.hpp:29
ahci_port_t
Definition
ahci_reg.hpp:6
ahci_port_t::ie
uint32_t ie
Definition
ahci_reg.hpp:12
ahci_port_t::is
uint32_t is
Definition
ahci_reg.hpp:11
ahci_port_t::sctl
uint32_t sctl
Definition
ahci_reg.hpp:18
ahci_port_t::sact
uint32_t sact
Definition
ahci_reg.hpp:20
ahci_port_t::fbs
uint32_t fbs
Definition
ahci_reg.hpp:23
ahci_port_t::cmd
uint32_t cmd
Definition
ahci_reg.hpp:13
ahci_port_t::fb
uint32_t fb
Definition
ahci_reg.hpp:9
ahci_port_t::ci
uint32_t ci
Definition
ahci_reg.hpp:21
ahci_port_t::sntf
uint32_t sntf
Definition
ahci_reg.hpp:22
ahci_port_t::clbu
uint32_t clbu
Definition
ahci_reg.hpp:8
ahci_port_t::ssts
uint32_t ssts
Definition
ahci_reg.hpp:17
ahci_port_t::rsv0
uint32_t rsv0
Definition
ahci_reg.hpp:14
ahci_port_t::clb
uint32_t clb
Definition
ahci_reg.hpp:7
ahci_port_t::rsv1
uint32_t rsv1[11]
Definition
ahci_reg.hpp:24
ahci_port_t::serr
uint32_t serr
Definition
ahci_reg.hpp:19
ahci_port_t::vendor
uint32_t vendor[4]
Definition
ahci_reg.hpp:25
ahci_port_t::fbu
uint32_t fbu
Definition
ahci_reg.hpp:10
ahci_port_t::tfd
uint32_t tfd
Definition
ahci_reg.hpp:15
ahci_port_t::sig
uint32_t sig
Definition
ahci_reg.hpp:16
type.h
uint16_t
unsigned short uint16_t
Definition
type.h:13
uint32_t
unsigned int uint32_t
Definition
type.h:19
uint8_t
unsigned char uint8_t
Definition
type.h:7
modules
ahci
include
ahci
ahci_reg.hpp
Generated on Sat May 30 2026 11:09:57 for Voxia OS by
1.13.2