XenevaOS
Loading...
Searching...
No Matches
basicacpi.h
Go to the documentation of this file.
1
30#ifndef __BASIC_ACPI_H__
31#define __BASIC_ACPI_H__
32
33#include <stdint.h>
34#include <aurora.h>
35
36//APIC structure types
37#define ACPI_APICTYPE_LAPIC 0
38#define ACPI_APICTYPE_IOAPIC 1
39#define ACPI_MADTTYPE_GICC 11
40#define ACPI_MADTTYPE_GICD 12
41#define ACPI_MADTTYPE_GICMSI 13
42#define ACPI_MADTTYPE_GICR 14
43#define ACPI_MADTTYPE_GICITS 15
44#define ACPI_MADTTYPE_CIC 17 //RISC-V
45#define ACPI_MADTTYPE_LPI 18 //ARM(Server)
46#define ACPI_MADTTYPE_GICCPU_AFFIN 19
47#define ACPI_MADTTYPE_GICV4 20
48
49
50#define ACPI_SIG_RSDP "RSD PTR "
51#define ACPI_SIG_APIC "APIC"
52#define ACPI_SIG_DSDT "DSDT"
53#define ACPI_SIG_FADT "FACP"
54#define ACPI_SIG_FACS "FACS"
55#define ACPI_SIG_PSDT "PSDT"
56#define ACPI_SIG_RSDT "RSDT"
57#define ACPI_SIG_SSDT "SSDT"
58#define ACPI_SIG_SBST "SBST"
59
60//FACS flags
61#define ACPI_FACSFL_S4BIOS 0x00000001
62
64#define ACPI_PMCTRL_SCI_EN 0x0001
65#define ACPI_PMCTRL_BM_RLD 0x0002
66#define ACPI_PMCTRL_GBL_RLS 0x0004
67#define ACPI_PMCTRL_SLP_TYPX 0x1C00
68#define ACPI_PMCTRL_SLP_EN 0x2000
69
70
71//ACPI Version 2.0 definitions
72#define ACPI_SIG_ECDT "ECDT"
73#define ACPI_SIG_OEMX "OEM"
74#define ACPI_SIG_XSDT "XSDT"
75#define ACPI_SIG_BOOT "BOOT"
76#define ACPI_SIG_CPEP "CPEP"
77#define ACPI_SIG_DBGP "DBGP"
78#define ACPI_SIG_ETDT "ETDT"
79#define ACPI_SIG_HPET "HPET"
80#define ACPI_SIG_SLIT "SLIT"
81#define ACPI_SIG_SPCR "SPCR"
82#define ACPI_SIG_SRAT "SRAT"
83#define ACPI_SIG_SPMI "SPMI"
84#define ACPI_SIG_TCPA "TCPA"
85
87#define ACPI_APICTYPE_ISOVER 2
88#define ACPI_APICTYPE_NMI 3
89#define ACPI_APICTYPE_LAPIC_NMI 4
90#define ACPI_APICTYPE_LAPIC_AOS 5
91#define ACPI_APICTYPE_IOSAPIC 6
92#define ACPI_APICTYPE_LSAPIC 7
93#define ACPI_APICTYPE_PLATIS 8
94
96#define ACPI_SIG_BERT "BERT" //Boot Error Record Table
97#define ACPI_SIG_DMAR "DMAR" //DMA Remapping Table
98#define ACPI_SIG_ERST "ERST" //Error Record Serialization Table
99#define ACPI_SIG_HEST "HEST" //Hardware error source table
100#define ACPI_SIG_IBFT "IBFT" // iSCSI Boot firmware table
101#define ACPI_SIG_MCFG "MCFG"
102#define ACPI_SIG_UEFI "UEFI" //UEFI ACPI Boot Optimization Table
103#define ACPI_SIG_WAET "WAET" // Windows ACPI Enlightenment Table
104#define ACPI_SIG_WDAT "WDAT" // Watchdog action table
105#define ACPI_SIG_WDRT "WDRT" // Watchdog resource table
106#define ACPI_SIG_WSPT "WSPT"
107
108// ACPI Version 4.0 Definitions
109#define ACPI_SIG_EINJ "EINJ" // Error injection table
110#define ACPI_SIG_MSCT "MSCT" // Max System Characteristics Table
111#define ACPI_SIG_PSDT "PSDT" // Persistent System DT
112#define ACPI_SIG_IVRS "IVRS" // I/O Virt Reporting Structure
113#define ACPI_SIG_MCHI "MCHI" // Mgmt Ctrllr Host Interface Table
114
115// FACS Flags
116#define ACPI_FACSFL_64BITWAKE 0x00000002 // 64-bit waking vector support
117
119#pragma pack (push,1)
120// ACPI version 2.0 structures
121typedef struct
122{
123 unsigned char addrSpaceId;
124 unsigned char regBitWidth;
125 unsigned char regBitOffset;
126 unsigned char addrSize;
129
131typedef struct _rsdp_
132{
133 char signature[8];
134 unsigned char checksum;
135 char oemId[6];
136 unsigned char revision;
137 unsigned rsdtAddr;
138
139 unsigned length;
141 unsigned char xChecksum;
142 unsigned char res[3];
144
145typedef struct _acpiSysDesc
146{
147 char signature[4];
148 unsigned length;
149 unsigned char revision;
150 unsigned char checksum;
151 char oemId[6];
152 char oemTableId[8];
153 unsigned oemRevision;
154 unsigned creatorId;
157
158
160typedef struct
161{
163 unsigned entry[];
164} acpiRsdt;
165
166typedef struct _acpi_apic_header_
167{
168 unsigned char type;
169 unsigned char length;
171
172typedef struct
173{
175 unsigned char procId;
176 unsigned char lapicId;
177 unsigned flags;
179
200
209
219
220typedef struct
221{
223 unsigned char ioApicId;
224 unsigned char res;
225 unsigned int ioApicAddr;
226 unsigned gsiBase;
228
229typedef struct
230{
233 unsigned flags;
234 size_t entry[];
235}acpiMadt;
236
237typedef struct
238{
240 unsigned facsAddr;
241 unsigned dsdtAddr;
242 unsigned char intMode;
243 unsigned char res1;
244 unsigned short sciInt;
245 unsigned sciCmdPort;
246 unsigned char acpiEnable;
247 unsigned char acpiDisable;
248 unsigned char s4BiosReq;
249 unsigned char res2;
254 unsigned pm2CtrlBlock;
255 unsigned pmTimerBlock;
258 unsigned char pm1EventBlockLen;
259 unsigned char pm1CtrlBlockLen;
260 unsigned char pm2CtrlBlockLen;
261 unsigned char pmTimerBlockLen;
262 unsigned char genEvent0BlockLen;
263 unsigned char genEvent1BlockLen;
264 unsigned char genEvent1Bbase;
265 unsigned char res3;
266 unsigned short c2Latency;
267 unsigned short c3Latency;
268 unsigned short flushSize;
269 unsigned short flushStride;
270 unsigned char dutyOffset;
271 unsigned char dutyWidth;
272 unsigned char dutyAlarm;
273 unsigned char century;
274 unsigned short bootArch;
275 unsigned char res4[1];
276 unsigned flags;
277 // Fields added in ACPI 2.0
279 unsigned char resetValue;
280 unsigned char res5[3];
291
292} acpiFadt;
293
295typedef struct
296{
297 char signature[4];
298 unsigned length;
299 unsigned hardwareSig;
300 unsigned wakingVector;
301 unsigned globalLock;
302 unsigned flags;
303 // Fields added in ACPI 2.0 (version field >= 1)
305 unsigned char version;
306 // Fields added in ACPI 4.0 (version field >= 2)
307 unsigned char res1[3];
308 unsigned ospmFlags;
309 // Padding
310 unsigned char res2[24];
311} acpiFacs;
312
313typedef struct
314{
316 unsigned char data[];
317} acpiDsdt;
318
319
328
334
335typedef struct
336{
338 unsigned char cmosIndex;
339 unsigned char res[3];
340} acpiBoot;
341
342typedef struct {
344 uint8_t reserved[8];
345} acpiMcfg;
346
354
368
377
379{
380 acpiSysDescHeader Header; /* Common ACPI Table Header */
381 uint32_t TableRevision; /* Must be value '1' */
382 uint64_t Reserved; /* Reserved, must be zero */
384
385
391
392#pragma pack (pop)
403
404#pragma pack(push,1)
416#pragma pack(pop)
417
418#define APIC_TYPE_INTERRUPT_OVERRIDE 2
419
420/*
421* AuACPIEnable -- Enable acpi
422*/
423extern void AuACPIEnable();
424
425/*
426 * AuACPIShutdown -- power off the system
427 */
428extern void AuACPIShutdown();
429
430/*
431* AuACPIInitialise -- initialise the aurora's basic acpi
432* subsystem
433* @param acpi_base -- acpi base address
434*/
435extern void AuACPIInitialise(void* acpi_base);
436
437/*
438* AuACPIGetMCFG -- Returns the mcfg table
439* from basic acpi
440*/
441extern acpiMcfg *AuACPIGetMCFG();
442
443/*
444* AuACPIPCIESupported -- Checks if pcie is
445* supported or not
446*/
447extern bool AuACPIPCIESupported();
448
449/*
450* AuACPIGetRSDP -- return the
451* rsdp pointer
452*/
453extern void* AuACPIGetRSDP();
454
455/*
456* AuInitialiseACPISubsys -- initialise full acpica
457* subsystem
458* @param info -- boot information
459*/
461
462/*
463* AuGetCPUCount -- returns the number of cpu
464* in the system
465*/
466extern uint8_t AuGetCPUCount();
467#endif
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
void AuACPIInitialise(void *acpi_base)
Definition basicacpi.cpp:159
void AuACPIEnable()
Definition basicacpi.cpp:70
struct _aurora_acpi_ AuroraBasicACPI
Standard kernel ACPI header for kernel use only.
struct _acpiSysDesc acpiSysDescHeader
bool AuACPIPCIESupported()
Definition basicacpi.cpp:249
struct _acpi_table_srat_x_ acpi_table_srat_xe
void * AuACPIGetRSDP()
Definition basicacpi.cpp:257
void AuInitialiseACPISubsys(KERNEL_BOOT_INFO *info)
Definition basicacpi.cpp:266
struct _rsdp_ acpiRsdp
ACPI version 1.0 structures.
struct _acpi_sub_tab_ acpi_sub_table
struct _acpi_srat_mem_affinity_ AcpiSRATMemAffinity
uint8_t AuGetCPUCount()
Definition basicacpi.cpp:302
struct _apic_interrupt_override_ apic_interrupt_override
acpiMcfg * AuACPIGetMCFG()
Definition basicacpi.cpp:241
acpi_srat_type
Definition basicacpi.h:394
@ acpi_srat_type_cpu_affinity
Definition basicacpi.h:395
@ acpi_srat_type_reserved
ACPI 6.3.
Definition basicacpi.h:401
@ acpi_srat_type_gicc_affinity
Definition basicacpi.h:398
@ acpi_srat_type_gic_its_affinity
Definition basicacpi.h:399
@ acpi_srat_type_x2apic_cpu_affinity
Definition basicacpi.h:397
@ acpi_srat_type_memory_affinity
Definition basicacpi.h:396
@ acpi_srat_type_generic_affinity
ACPI 6.2.
Definition basicacpi.h:400
struct _acpi_apic_header_ acpiApicHeader
void AuACPIShutdown()
Definition basicacpi.cpp:63
void(* entry)(void *)
Definition process.h:91
Definition aurora.h:99
Definition basicacpi.h:146
char oemTableId[8]
Definition basicacpi.h:152
unsigned char checksum
Definition basicacpi.h:150
char signature[4]
Definition basicacpi.h:147
unsigned creatorId
Definition basicacpi.h:154
char oemId[6]
Definition basicacpi.h:151
unsigned length
Definition basicacpi.h:148
unsigned oemRevision
Definition basicacpi.h:153
unsigned creatorRevision
Definition basicacpi.h:155
unsigned char revision
Definition basicacpi.h:149
Definition basicacpi.h:167
unsigned char type
Definition basicacpi.h:168
unsigned char length
Definition basicacpi.h:169
Definition basicacpi.h:406
uint64_t reserved2
Definition basicacpi.h:414
uint64_t length
Definition basicacpi.h:411
uint16_t reserved
Definition basicacpi.h:409
uint32_t flags
Definition basicacpi.h:413
uint64_t base_address
Definition basicacpi.h:410
acpi_sub_table header
Definition basicacpi.h:407
uint32_t reserved1
Definition basicacpi.h:412
uint32_t proximity_domain
Definition basicacpi.h:408
Definition basicacpi.h:387
uint8_t type
Definition basicacpi.h:388
uint8_t length
Definition basicacpi.h:389
Definition basicacpi.h:379
uint64_t Reserved
Definition basicacpi.h:382
uint32_t TableRevision
Definition basicacpi.h:381
acpiSysDescHeader Header
Definition basicacpi.h:380
Definition basicacpi.h:370
uint32_t interrupt
Definition basicacpi.h:374
acpiApicHeader header
Definition basicacpi.h:371
uint16_t flags
Definition basicacpi.h:375
uint8_t bus
Definition basicacpi.h:372
uint8_t source
Definition basicacpi.h:373
Standard kernel ACPI header for kernel use only.
Definition basicacpi.h:357
acpiMadt * madt
Definition basicacpi.h:359
uint16_t slp_typa
Definition basicacpi.h:364
uint16_t slp_typb
Definition basicacpi.h:365
acpiMcfg * mcfg
Definition basicacpi.h:363
acpiFadt * fadt
Definition basicacpi.h:360
acpiDsdt * dsdt
Definition basicacpi.h:362
uint8_t num_cpu
Definition basicacpi.h:366
acpiFacs * facs
Definition basicacpi.h:361
unsigned char revision
Definition basicacpi.h:358
ACPI version 1.0 structures.
Definition basicacpi.h:132
uint64_t xsdtAddr
Definition basicacpi.h:140
unsigned char revision
Definition basicacpi.h:136
char oemId[6]
Definition basicacpi.h:135
unsigned char res[3]
Definition basicacpi.h:142
unsigned char checksum
Definition basicacpi.h:134
char signature[8]
Definition basicacpi.h:133
unsigned length
Definition basicacpi.h:139
unsigned rsdtAddr
Definition basicacpi.h:137
unsigned char xChecksum
Definition basicacpi.h:141
Definition basicacpi.h:336
acpiSysDescHeader header
Definition basicacpi.h:337
unsigned char cmosIndex
Definition basicacpi.h:338
Definition basicacpi.h:314
acpiSysDescHeader header
Definition basicacpi.h:315
Firmware ACPI Control structure.
Definition basicacpi.h:296
unsigned hardwareSig
Definition basicacpi.h:299
unsigned flags
Definition basicacpi.h:302
unsigned ospmFlags
Definition basicacpi.h:308
unsigned char version
Definition basicacpi.h:305
uint64_t xWakingVector
Definition basicacpi.h:304
unsigned wakingVector
Definition basicacpi.h:300
unsigned globalLock
Definition basicacpi.h:301
unsigned length
Definition basicacpi.h:298
Definition basicacpi.h:238
unsigned pm1bCtrlBlock
Definition basicacpi.h:253
unsigned char pm1EventBlockLen
Definition basicacpi.h:258
unsigned char resetValue
Definition basicacpi.h:279
unsigned char genEvent0BlockLen
Definition basicacpi.h:262
unsigned char dutyOffset
Definition basicacpi.h:270
acpiGenAddr xPmTimerBlock
Definition basicacpi.h:288
uint64_t xFacsAddr
Definition basicacpi.h:281
unsigned short flushStride
Definition basicacpi.h:269
unsigned facsAddr
Definition basicacpi.h:240
acpiGenAddr xPm1bCtrlBlock
Definition basicacpi.h:286
unsigned char intMode
Definition basicacpi.h:242
unsigned char dutyAlarm
Definition basicacpi.h:272
unsigned char pmTimerBlockLen
Definition basicacpi.h:261
unsigned char pm1CtrlBlockLen
Definition basicacpi.h:259
unsigned char dutyWidth
Definition basicacpi.h:271
unsigned dsdtAddr
Definition basicacpi.h:241
unsigned short flushSize
Definition basicacpi.h:268
unsigned genEvent1Block
Definition basicacpi.h:257
acpiGenAddr xPm1bEventBlock
Definition basicacpi.h:284
unsigned char century
Definition basicacpi.h:273
unsigned pm2CtrlBlock
Definition basicacpi.h:254
unsigned flags
Definition basicacpi.h:276
unsigned char acpiEnable
Definition basicacpi.h:246
acpiSysDescHeader header
Definition basicacpi.h:239
acpiGenAddr xPm2CtrlBlock
Definition basicacpi.h:287
unsigned char res3
Definition basicacpi.h:265
uint64_t xDsdtAddr
Definition basicacpi.h:282
unsigned char pm2CtrlBlockLen
Definition basicacpi.h:260
unsigned char genEvent1BlockLen
Definition basicacpi.h:263
unsigned pmTimerBlock
Definition basicacpi.h:255
acpiGenAddr resetReg
Definition basicacpi.h:278
acpiGenAddr xPm1aCtrlBlock
Definition basicacpi.h:285
unsigned genEvent0Block
Definition basicacpi.h:256
unsigned char acpiDisable
Definition basicacpi.h:247
unsigned char res1
Definition basicacpi.h:243
unsigned short c2Latency
Definition basicacpi.h:266
unsigned char genEvent1Bbase
Definition basicacpi.h:264
acpiGenAddr xPm1aEventBlock
Definition basicacpi.h:283
unsigned short sciInt
Definition basicacpi.h:244
unsigned short bootArch
Definition basicacpi.h:274
unsigned pm1aEventBlock
Definition basicacpi.h:250
acpiGenAddr xGenEvent0Block
Definition basicacpi.h:289
unsigned sciCmdPort
Definition basicacpi.h:245
unsigned pm1aCtrlBlock
Definition basicacpi.h:252
unsigned char s4BiosReq
Definition basicacpi.h:248
acpiGenAddr xGenEvent1Block
Definition basicacpi.h:290
unsigned short c3Latency
Definition basicacpi.h:267
unsigned char res2
Definition basicacpi.h:249
unsigned pm1bEventBlock
Definition basicacpi.h:251
Definition basicacpi.h:180
uint16_t SPEOverflowInterrupt
Definition basicacpi.h:197
uint16_t TRBEInterrupt
Definition basicacpi.h:198
uint32_t cpuInterfaceNumber
Definition basicacpi.h:183
uint64_t gicv
Definition basicacpi.h:190
uint32_t performanceGSI
Definition basicacpi.h:187
uint64_t gich
Definition basicacpi.h:191
uint64_t physicalBaseAddress
Definition basicacpi.h:189
uint32_t parkingProtocolVersion
Definition basicacpi.h:186
uint8_t reserved2
Definition basicacpi.h:196
uint32_t acpiProcessorUID
Definition basicacpi.h:184
uint64_t mpidr
Definition basicacpi.h:194
uint32_t vgicMaintenanceInterrupt
Definition basicacpi.h:192
uint64_t parkedAddress
Definition basicacpi.h:188
uint8_t processorPowerEfficiencyClass
Definition basicacpi.h:195
uint32_t flags
Definition basicacpi.h:185
uint16_t reserved1
Definition basicacpi.h:182
uint64_t gicrBaseAddress
Definition basicacpi.h:193
acpiApicHeader header
Definition basicacpi.h:181
Definition basicacpi.h:201
acpiApicHeader header
Definition basicacpi.h:202
uint32_t gicID
Definition basicacpi.h:204
uint32_t systemVectorBase
Definition basicacpi.h:206
uint8_t gicVersion
Definition basicacpi.h:207
uint16_t reserved01
Definition basicacpi.h:203
uint64_t physicalBaseAddress
Definition basicacpi.h:205
Definition basicacpi.h:210
uint64_t physicalBaseAddress
Definition basicacpi.h:214
uint16_t spiCount
Definition basicacpi.h:216
acpiApicHeader header
Definition basicacpi.h:211
uint32_t gicMSIFrameID
Definition basicacpi.h:213
uint16_t spiBase
Definition basicacpi.h:217
uint32_t flags
Definition basicacpi.h:215
uint16_t reserved
Definition basicacpi.h:212
source from Visopsys Operating System
Definition basicacpi.h:122
uint64_t address
Definition basicacpi.h:127
unsigned char addrSize
Definition basicacpi.h:126
unsigned char addrSpaceId
Definition basicacpi.h:123
unsigned char regBitWidth
Definition basicacpi.h:124
unsigned char regBitOffset
Definition basicacpi.h:125
Definition basicacpi.h:221
unsigned gsiBase
Definition basicacpi.h:226
unsigned char ioApicId
Definition basicacpi.h:223
unsigned int ioApicAddr
Definition basicacpi.h:225
acpiApicHeader header
Definition basicacpi.h:222
unsigned char res
Definition basicacpi.h:224
Definition basicacpi.h:321
acpiApicHeader header
Definition basicacpi.h:322
uint64_t address
Definition basicacpi.h:326
uint8_t reserved
Definition basicacpi.h:324
uint32_t global_irq_base
Definition basicacpi.h:325
uint8_t id
Definition basicacpi.h:323
Definition basicacpi.h:173
unsigned flags
Definition basicacpi.h:177
acpiApicHeader header
Definition basicacpi.h:174
unsigned char lapicId
Definition basicacpi.h:176
unsigned char procId
Definition basicacpi.h:175
Definition basicacpi.h:230
unsigned flags
Definition basicacpi.h:233
unsigned localApicAddr
Definition basicacpi.h:232
acpiSysDescHeader header
Definition basicacpi.h:231
Definition basicacpi.h:347
uint32_t reserved
Definition basicacpi.h:352
uint64_t baseAddress
Definition basicacpi.h:348
uint8_t endBusNum
Definition basicacpi.h:351
uint16_t pciSegment
Definition basicacpi.h:349
uint8_t startBusNum
Definition basicacpi.h:350
Definition basicacpi.h:342
acpiSysDescHeader header
Definition basicacpi.h:343
Root System Descriptor Table.
Definition basicacpi.h:161
acpiSysDescHeader header
Definition basicacpi.h:162
Definition basicacpi.h:330
acpiSysDescHeader header
Definition basicacpi.h:331