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