XenevaOS
Loading...
Searching...
No Matches
ahci.h
Go to the documentation of this file.
1
30#ifndef __AHCI_H__
31#define __AHCI_H__
32
33#include <stdint.h>
34#include <Fs/vfs.h>
35
36/* Port Command Bits */
37#define PX_CMD_START 1
38#define PX_CMD_POD 2
39#define PX_CMD_SUD 4
40#define PX_CMD_FRE (1<<4)
41#define PX_CMD_FR (1<<14)
42#define PX_CMD_CR (1<<15)
43#define PX_CMD_ATAPI (1<<24)
44#define PX_SCTL_NODETECT 0x0
45#define PX_SCTL_DETECT 0x1
46#define PX_SCTL_NOSPEEDLIM 0x0
47#define PX_SCTL_PM_DISABLE (0x7 << 8)
48#define PX_TFD_ERR 1
49#define PX_TFD_DRQ (1<<3)
50#define PX_TFD_BUSY (1<<7)
51
52
53#define GHC_BOHC_OOC (1<<3)
54#define GHC_BOHC_OOS (1<<1)
55#define GHC_BOHC_SMIE 4
56#define GHC_BOHC_BB 0x10
57#define GHC_BOHC_BOS 1
58
59#define GHC_CAP2_BOH 1
60
61#define FIS_TYPE_REG_H2D 0x27
62#define FIS_TYPE_REG_D2H 0x34
63#define FIS_TYPE_DMA_ACT 0x39
64#define FIS_TYPE_DMA_SETUP 0x41
65#define FIS_TYPE_DATA 0x46
66#define FIS_TYPE_BIST 0x58
67#define FIS_TYPE_PIO_SETUP 0x5F
68#define FIS_TYPE_DEV_BITS 0xA1
69
71#define ATA_CMD_IDENTIFY 0xEC
72#define ATA_CMD_READ_DMA 0xC8
73#define ATA_CMD_READ_DMA_EXT 0x25
74#define ATA_CMD_WRITE_DMA 0xCA
75#define ATA_CMD_WRITE_DMA_EXT 0x35
76#define ATA_CMD_PACKET 0xA0
77
78#define FIS_REG_H2D_CTRL_INTERRUPT (1<<7)
79
80#define HBA_CMD_PRDT_DBC_INTERRUPT (1<<31)
81
82#define SCTL_PORT_DET_INIT 0x1
83#define SCTL_PORT_IPM_NOPART 0x100
84#define SCTL_PORT_IPM_NOSLUM 0x200
85#define SCTL_PORT_IPM_NODSLP 0x400
86#define PX_SCTL_IPM_MASK 0xf << 8
87#define PX_SCTL_IPM_ACTIVE 0x1 << 8
88#define PX_SCTL_IPM_NONE 0x3 << 8
89
90#define HBA_PX_SSTS_DET 0xfULL
91#define HBA_PX_SSTS_DET_INIT 1
92#define HBA_PX_SSTS_DET_PRESENT 3
93
94#define HBA_PX_IS_TFES (1<<30)
95#define HBA_PX_CMD_ICC (0xf << 28)
96#define HBA_PX_CMD_ICC_ACTIVE (1<<28)
97
98#pragma pack(push,1)
120#pragma pack(pop)
121
122
123#pragma pack(push,1)
140#pragma pack(pop)
141
142#pragma pack(push,1)
151#pragma pack(pop)
152
153#pragma pack(push,1)
160#pragma pack(pop)
161
162
163#pragma pack(push,1)
170#pragma pack(pop)
171
172#pragma pack(push,1)
173
199
231
259
260
275
276
277typedef struct _hba_fis_ {
280 /* 0x20 */
283 /*0x40*/
286 /*0x58 */
288 /*0x60 */
290 /*0xA0*/
291 uint8_t rsv[0x100 - 0xA0];
293
294#pragma pack(pop)
295
296
297#pragma pack(push,1)
315#pragma pack(pop)
316
320 Px_FB = 8,
321 Px_FBU = 0xC,
322 Px_IS = 0x10,
323 Px_IE = 0x14,
324 Px_CMD = 0x18,
325 Px_TFD = 0x20,
326 Px_SIG = 0x24,
327 Px_SSTS = 0x28,
328 Px_SCTL = 0x2C,
329 Px_SERR = 0x30,
330 Px_SACT = 0x34,
331 Px_CI = 0x38,
332 Px_SNTF = 0x3C,
333 Px_FBS = 0x40,
334 Px_DEVSLP = 0x44
336
345#endif
PORT_REGISTERS
Definition ahci.h:317
@ Px_SIG
Definition ahci.h:326
@ Px_DEVSLP
Definition ahci.h:334
@ Px_SACT
Definition ahci.h:330
@ Px_CMD
Definition ahci.h:324
@ Px_IE
Definition ahci.h:323
@ Px_SCTL
Definition ahci.h:328
@ Px_SSTS
Definition ahci.h:327
@ Px_CLB
Definition ahci.h:318
@ Px_TFD
Definition ahci.h:325
@ Px_CI
Definition ahci.h:331
@ Px_FB
Definition ahci.h:320
@ Px_CLBU
Definition ahci.h:319
@ Px_SNTF
Definition ahci.h:332
@ Px_IS
Definition ahci.h:322
@ Px_FBU
Definition ahci.h:321
@ Px_SERR
Definition ahci.h:329
@ Px_FBS
Definition ahci.h:333
struct _fis_dma_setup_ FIS_DMA_SETUP
struct _hba_port_ HBA_PORT
struct _hba_fis_ HBA_FIS
struct _cmd_list_hdr_ HBA_CMD_HEADER
struct _hba_cmd_tbl_ HBA_CMD_TABLE
struct _hba_cmd_prdt_ HBA_CMD_PRDT
struct _fis_reg_d2h_ FIS_REG_D2H
struct _fis_data_ FIS_DATA
struct _fis_pio_setup_ FIS_PIO_SETUP
struct _hba_mem_ HBA_MEM
struct _fis_reg_h2d_ FIS_REG_H2D
struct _AHCI_Controller_ AHCIController
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
Definition ahci.h:337
AuVFSNode * devfs
Definition ahci.h:339
uint32_t numPort
Definition ahci.h:343
char * controllerpath
Definition ahci.h:338
bool _IsAHCI64Bit
Definition ahci.h:341
void * HBABar
Definition ahci.h:342
uint32_t CurrentPortID
Definition ahci.h:340
Definition vfs.h:89
Definition ahci.h:298
uint8_t a
Definition ahci.h:300
uint8_t b
Definition ahci.h:304
uint16_t prdtl
Definition ahci.h:309
uint32_t ctba
Definition ahci.h:311
uint8_t w
Definition ahci.h:301
uint8_t r
Definition ahci.h:303
uint8_t cfl
Definition ahci.h:299
uint8_t c
Definition ahci.h:305
uint32_t reserved[4]
Definition ahci.h:313
uint32_t prdbc
Definition ahci.h:310
uint8_t p
Definition ahci.h:302
uint32_t ctbau
Definition ahci.h:312
uint8_t pmp
Definition ahci.h:307
uint8_t rsv0
Definition ahci.h:306
Definition ahci.h:164
uint8_t resv1[2]
Definition ahci.h:167
uint32_t data[1]
Definition ahci.h:168
uint8_t pm_port
Definition ahci.h:166
uint8_t fis_type
Definition ahci.h:165
Definition ahci.h:261
uint8_t d
Definition ahci.h:265
uint8_t fis_type
Definition ahci.h:262
uint32_t transfer_count
Definition ahci.h:272
uint8_t a
Definition ahci.h:267
uint8_t rsv0
Definition ahci.h:264
uint32_t rsvd
Definition ahci.h:270
uint8_t i
Definition ahci.h:266
uint32_t resvd
Definition ahci.h:273
uint32_t dma_buff_offset
Definition ahci.h:271
uint8_t rsved[2]
Definition ahci.h:268
uint8_t pm_port
Definition ahci.h:263
uint64_t dma_buffer_id
Definition ahci.h:269
Definition ahci.h:174
uint8_t lba5
Definition ahci.h:188
uint8_t rsv3
Definition ahci.h:193
uint8_t fis_type
Definition ahci.h:176
uint8_t status
Definition ahci.h:178
uint8_t counth
Definition ahci.h:192
uint8_t lba4
Definition ahci.h:187
uint8_t rsv2
Definition ahci.h:189
uint8_t lba1
Definition ahci.h:182
uint8_t countl
Definition ahci.h:191
uint8_t lba3
Definition ahci.h:186
uint8_t device
Definition ahci.h:184
uint8_t error
Definition ahci.h:179
uint8_t e_status
Definition ahci.h:194
uint8_t lba2
Definition ahci.h:183
uint8_t ctl_byte
Definition ahci.h:177
uint16_t tc
Definition ahci.h:196
uint8_t rsv4[2]
Definition ahci.h:197
uint8_t lba0
Definition ahci.h:181
Definition ahci.h:232
uint8_t rsv3[2]
Definition ahci.h:254
uint8_t device
Definition ahci.h:243
uint8_t lba1
Definition ahci.h:241
uint8_t lba5
Definition ahci.h:248
uint8_t lba4
Definition ahci.h:247
uint8_t rsv2
Definition ahci.h:249
uint8_t ctl_byte
Definition ahci.h:235
uint8_t counth
Definition ahci.h:253
uint8_t lba3
Definition ahci.h:246
uint8_t lba0
Definition ahci.h:240
uint8_t status
Definition ahci.h:236
uint8_t rsv4[4]
Definition ahci.h:257
uint8_t lba2
Definition ahci.h:242
uint8_t error
Definition ahci.h:237
uint8_t countl
Definition ahci.h:252
uint8_t fis_type
Definition ahci.h:234
Definition ahci.h:200
uint8_t lba5
Definition ahci.h:219
uint8_t c
Definition ahci.h:205
uint8_t pmport
Definition ahci.h:203
uint8_t fis_type
Definition ahci.h:202
uint8_t rsv1[4]
Definition ahci.h:229
uint8_t countl
Definition ahci.h:223
uint8_t lba2
Definition ahci.h:213
uint8_t command
Definition ahci.h:207
uint8_t featurel
Definition ahci.h:208
uint8_t counth
Definition ahci.h:224
uint8_t icc
Definition ahci.h:225
uint8_t lba3
Definition ahci.h:217
uint8_t rsv0
Definition ahci.h:204
uint8_t control
Definition ahci.h:226
uint8_t lba1
Definition ahci.h:212
uint8_t device
Definition ahci.h:214
uint8_t lba0
Definition ahci.h:211
uint8_t lba4
Definition ahci.h:218
uint8_t featureh
Definition ahci.h:220
Definition ahci.h:143
uint32_t dbau
Definition ahci.h:145
uint32_t reserved
Definition ahci.h:146
uint32_t i
Definition ahci.h:149
uint32_t data_base_address
Definition ahci.h:144
uint32_t rsv1
Definition ahci.h:148
uint32_t data_byte_count
Definition ahci.h:147
Definition ahci.h:154
uint8_t atapi_cmd[0x10]
Definition ahci.h:156
uint8_t reserved[0x30]
Definition ahci.h:157
uint8_t cmd_fis[0x40]
Definition ahci.h:155
HBA_CMD_PRDT prdt[1]
Definition ahci.h:158
Definition ahci.h:277
uint8_t pad0[4]
Definition ahci.h:279
uint8_t ufis[64]
Definition ahci.h:289
uint8_t rsv[0x100 - 0xA0]
Definition ahci.h:291
FIS_DMA_SETUP ds_fis
Definition ahci.h:278
FIS_PIO_SETUP ps_fis
Definition ahci.h:281
uint64_t sdbfis
Definition ahci.h:287
uint8_t pad2[4]
Definition ahci.h:285
uint8_t pad1[12]
Definition ahci.h:282
FIS_REG_D2H rfis
Definition ahci.h:284
Definition ahci.h:124
uint8_t vendor[0x100 - 0xA0]
Definition ahci.h:137
uint8_t rsv[0xA0 - 0x2c]
Definition ahci.h:136
uint32_t vs
Definition ahci.h:129
uint32_t cap
Definition ahci.h:125
uint32_t is
Definition ahci.h:127
HBA_PORT port[1]
Definition ahci.h:138
uint32_t ccc_pts
Definition ahci.h:131
uint32_t bohc
Definition ahci.h:135
uint32_t ccc_ctl
Definition ahci.h:130
uint32_t ghc
Definition ahci.h:126
uint32_t em_ctl
Definition ahci.h:133
uint32_t pi
Definition ahci.h:128
uint32_t cap2
Definition ahci.h:134
uint32_t em_loc
Definition ahci.h:132
Definition ahci.h:99
uint32_t ci
Definition ahci.h:114
uint32_t rsv0
Definition ahci.h:107
uint32_t clbu
Definition ahci.h:101
uint32_t cmd
Definition ahci.h:106
uint32_t sact
Definition ahci.h:113
uint32_t rsv1[11]
Definition ahci.h:117
uint32_t vendor[4]
Definition ahci.h:118
uint32_t ie
Definition ahci.h:105
uint32_t is
Definition ahci.h:104
uint32_t fb
Definition ahci.h:102
uint32_t clb
Definition ahci.h:100
uint32_t fbu
Definition ahci.h:103
uint32_t ssts
Definition ahci.h:110
uint32_t fbs
Definition ahci.h:116
uint32_t tfd
Definition ahci.h:108
uint32_t serr
Definition ahci.h:112
uint32_t sctl
Definition ahci.h:111
uint32_t sig
Definition ahci.h:109
uint32_t sntf
Definition ahci.h:115