ReactOS 0.4.16-dev-1520-gb558596
acpi.h
Go to the documentation of this file.
1#pragma once
2
4#include <uacpi/helpers.h>
5#include <uacpi/types.h>
6
7/*
8 * -----------------------------------------------------
9 * Common structures provided by the ACPI specification
10 * -----------------------------------------------------
11 */
12
13#define ACPI_RSDP_SIGNATURE "RSD PTR "
14#define ACPI_RSDT_SIGNATURE "RSDT"
15#define ACPI_XSDT_SIGNATURE "XSDT"
16#define ACPI_MADT_SIGNATURE "APIC"
17#define ACPI_FADT_SIGNATURE "FACP"
18#define ACPI_FACS_SIGNATURE "FACS"
19#define ACPI_MCFG_SIGNATURE "MCFG"
20#define ACPI_HPET_SIGNATURE "HPET"
21#define ACPI_SRAT_SIGNATURE "SRAT"
22#define ACPI_SLIT_SIGNATURE "SLIT"
23#define ACPI_DSDT_SIGNATURE "DSDT"
24#define ACPI_SSDT_SIGNATURE "SSDT"
25#define ACPI_PSDT_SIGNATURE "PSDT"
26#define ACPI_ECDT_SIGNATURE "ECDT"
27#define ACPI_RHCT_SIGNATURE "RHCT"
28
29#define ACPI_AS_ID_SYS_MEM 0x00
30#define ACPI_AS_ID_SYS_IO 0x01
31#define ACPI_AS_ID_PCI_CFG_SPACE 0x02
32#define ACPI_AS_ID_EC 0x03
33#define ACPI_AS_ID_SMBUS 0x04
34#define ACPI_AS_ID_SYS_CMOS 0x05
35#define ACPI_AS_ID_PCI_BAR_TGT 0x06
36#define ACPI_AS_ID_IPMI 0x07
37#define ACPI_AS_ID_GP_IO 0x08
38#define ACPI_AS_ID_GENERIC_SBUS 0x09
39#define ACPI_AS_ID_PCC 0x0A
40#define ACPI_AS_ID_FFH 0x7F
41#define ACPI_AS_ID_OEM_BASE 0xC0
42#define ACPI_AS_ID_OEM_END 0xFF
43
44#define ACPI_ACCESS_UD 0
45#define ACPI_ACCESS_BYTE 1
46#define ACPI_ACCESS_WORD 2
47#define ACPI_ACCESS_DWORD 3
48#define ACPI_ACCESS_QWORD 4
49
50UACPI_PACKED(struct acpi_gas {
51 uacpi_u8 address_space_id;
52 uacpi_u8 register_bit_width;
53 uacpi_u8 register_bit_offset;
54 uacpi_u8 access_size;
56})
57UACPI_EXPECT_SIZEOF(struct acpi_gas, 12);
58
59UACPI_PACKED(struct acpi_rsdp {
62 uacpi_char oemid[6];
63 uacpi_u8 revision;
64 uacpi_u32 rsdt_addr;
65
66 // vvvv available if .revision >= 2.0 only
68 uacpi_u64 xsdt_addr;
69 uacpi_u8 extended_checksum;
70 uacpi_u8 rsvd[3];
71})
72UACPI_EXPECT_SIZEOF(struct acpi_rsdp, 36);
73
74UACPI_PACKED(struct acpi_sdt_hdr {
77 uacpi_u8 revision;
79 uacpi_char oemid[6];
80 uacpi_char oem_table_id[8];
81 uacpi_u32 oem_revision;
82 uacpi_u32 creator_id;
83 uacpi_u32 creator_revision;
84})
85UACPI_EXPECT_SIZEOF(struct acpi_sdt_hdr, 36);
86
87UACPI_PACKED(struct acpi_rsdt {
88 struct acpi_sdt_hdr hdr;
89 uacpi_u32 entries[];
90})
91
92UACPI_PACKED(struct acpi_xsdt {
93 struct acpi_sdt_hdr hdr;
94 uacpi_u64 entries[];
95})
96
97UACPI_PACKED(struct acpi_entry_hdr {
98 /*
99 * - acpi_madt_entry_type for the APIC table
100 * - acpi_srat_entry_type for the SRAT table
101 */
104})
105
106// acpi_madt->flags
107#define ACPI_PCAT_COMPAT (1 << 0)
108
109enum acpi_madt_entry_type {
110 ACPI_MADT_ENTRY_TYPE_LAPIC = 0,
111 ACPI_MADT_ENTRY_TYPE_IOAPIC = 1,
112 ACPI_MADT_ENTRY_TYPE_INTERRUPT_SOURCE_OVERRIDE = 2,
113 ACPI_MADT_ENTRY_TYPE_NMI_SOURCE = 3,
114 ACPI_MADT_ENTRY_TYPE_LAPIC_NMI = 4,
115 ACPI_MADT_ENTRY_TYPE_LAPIC_ADDRESS_OVERRIDE = 5,
116 ACPI_MADT_ENTRY_TYPE_IOSAPIC = 6,
117 ACPI_MADT_ENTRY_TYPE_LSAPIC = 7,
118 ACPI_MADT_ENTRY_TYPE_PLATFORM_INTERRUPT_SOURCES = 8,
119 ACPI_MADT_ENTRY_TYPE_LOCAL_X2APIC = 9,
120 ACPI_MADT_ENTRY_TYPE_LOCAL_X2APIC_NMI = 0xA,
121 ACPI_MADT_ENTRY_TYPE_GICC = 0xB,
122 ACPI_MADT_ENTRY_TYPE_GICD = 0xC,
123 ACPI_MADT_ENTRY_TYPE_GIC_MSI_FRAME = 0xD,
124 ACPI_MADT_ENTRY_TYPE_GICR = 0xE,
125 ACPI_MADT_ENTRY_TYPE_GIC_ITS = 0xF,
126 ACPI_MADT_ENTRY_TYPE_MULTIPROCESSOR_WAKEUP = 0x10,
127 ACPI_MADT_ENTRY_TYPE_CORE_PIC = 0x11,
128 ACPI_MADT_ENTRY_TYPE_LIO_PIC = 0x12,
129 ACPI_MADT_ENTRY_TYPE_HT_PIC = 0x13,
130 ACPI_MADT_ENTRY_TYPE_EIO_PIC = 0x14,
131 ACPI_MADT_ENTRY_TYPE_MSI_PIC = 0x15,
132 ACPI_MADT_ENTRY_TYPE_BIO_PIC = 0x16,
133 ACPI_MADT_ENTRY_TYPE_LPC_PIC = 0x17,
134 ACPI_MADT_ENTRY_TYPE_RINTC = 0x18,
135 ACPI_MADT_ENTRY_TYPE_IMSIC = 0x19,
136 ACPI_MADT_ENTRY_TYPE_APLIC = 0x1A,
137 ACPI_MADT_ENTRY_TYPE_PLIC = 0x1B,
138 ACPI_MADT_ENTRY_TYPE_RESERVED = 0x1C, // 0x1C..0x7F
139 ACPI_MADT_ENTRY_TYPE_OEM = 0x80, // 0x80..0xFF
140};
141
142UACPI_PACKED(struct acpi_madt {
143 struct acpi_sdt_hdr hdr;
144 uacpi_u32 local_interrupt_controller_address;
146 struct acpi_entry_hdr entries[];
147})
148UACPI_EXPECT_SIZEOF(struct acpi_madt, 44);
149
150/*
151 * - acpi_madt_lapic->flags
152 * - acpi_madt_lsapic->flags
153 * - acpi_madt_x2apic->flags
154 */
155#define ACPI_PIC_ENABLED (1 << 0)
156#define ACPI_PIC_ONLINE_CAPABLE (1 << 1)
157
158UACPI_PACKED(struct acpi_madt_lapic {
159 struct acpi_entry_hdr hdr;
160 uacpi_u8 uid;
161 uacpi_u8 id;
163})
164UACPI_EXPECT_SIZEOF(struct acpi_madt_lapic, 8);
165
166UACPI_PACKED(struct acpi_madt_ioapic {
167 struct acpi_entry_hdr hdr;
168 uacpi_u8 id;
169 uacpi_u8 rsvd;
171 uacpi_u32 gsi_base;
172})
173UACPI_EXPECT_SIZEOF(struct acpi_madt_ioapic, 12);
174
175/*
176 * - acpi_madt_interrupt_source_override->flags
177 * - acpi_madt_nmi_source->flags
178 * - acpi_madt_lapic_nmi->flags
179 * - acpi_madt_platform_interrupt_source->flags
180 * - acpi_madt_x2apic_nmi->flags
181 */
182#define ACPI_MADT_POLARITY_MASK 0b11
183#define ACPI_MADT_POLARITY_CONFORMING 0b00
184#define ACPI_MADT_POLARITY_ACTIVE_HIGH 0b01
185#define ACPI_MADT_POLARITY_ACTIVE_LOW 0b11
186
187#define ACPI_MADT_TRIGGERING_MASK 0b1100
188#define ACPI_MADT_TRIGGERING_CONFORMING 0b0000
189#define ACPI_MADT_TRIGGERING_EDGE 0b0100
190#define ACPI_MADT_TRIGGERING_LEVEL 0b1100
191
192UACPI_PACKED(struct acpi_madt_interrupt_source_override {
193 struct acpi_entry_hdr hdr;
194 uacpi_u8 bus;
196 uacpi_u32 gsi;
198})
199UACPI_EXPECT_SIZEOF(struct acpi_madt_interrupt_source_override, 10);
200
202 struct acpi_entry_hdr hdr;
204 uacpi_u32 gsi;
205})
207
208UACPI_PACKED(struct acpi_madt_lapic_nmi {
209 struct acpi_entry_hdr hdr;
210 uacpi_u8 uid;
213})
214UACPI_EXPECT_SIZEOF(struct acpi_madt_lapic_nmi, 6);
215
216UACPI_PACKED(struct acpi_madt_lapic_address_override {
217 struct acpi_entry_hdr hdr;
218 uacpi_u16 rsvd;
220})
221UACPI_EXPECT_SIZEOF(struct acpi_madt_lapic_address_override, 12);
222
223UACPI_PACKED(struct acpi_madt_iosapic {
224 struct acpi_entry_hdr hdr;
225 uacpi_u8 id;
226 uacpi_u8 rsvd;
227 uacpi_u32 gsi_base;
229})
230UACPI_EXPECT_SIZEOF(struct acpi_madt_iosapic, 16);
231
232UACPI_PACKED(struct acpi_madt_lsapic {
233 struct acpi_entry_hdr hdr;
234 uacpi_u8 acpi_id;
235 uacpi_u8 id;
236 uacpi_u8 eid;
239 uacpi_u32 uid;
240 uacpi_char uid_string[];
241})
242UACPI_EXPECT_SIZEOF(struct acpi_madt_lsapic, 16);
243
244// acpi_madt_platform_interrupt_source->platform_flags
245#define ACPI_CPEI_PROCESSOR_OVERRIDE (1 << 0)
246
247UACPI_PACKED(struct acpi_madt_platform_interrupt_source {
248 struct acpi_entry_hdr hdr;
251 uacpi_u8 processor_id;
252 uacpi_u8 processor_eid;
253 uacpi_u8 iosapic_vector;
254 uacpi_u32 gsi;
255 uacpi_u32 platform_flags;
256})
257UACPI_EXPECT_SIZEOF(struct acpi_madt_platform_interrupt_source, 16);
258
259UACPI_PACKED(struct acpi_madt_x2apic {
260 struct acpi_entry_hdr hdr;
261 uacpi_u16 rsvd;
264 uacpi_u32 uid;
265})
266UACPI_EXPECT_SIZEOF(struct acpi_madt_x2apic, 16);
267
268UACPI_PACKED(struct acpi_madt_x2apic_nmi {
269 struct acpi_entry_hdr hdr;
271 uacpi_u32 uid;
274})
275UACPI_EXPECT_SIZEOF(struct acpi_madt_x2apic_nmi, 12);
276
277// acpi_madt_gicc->flags
278#define ACPI_GICC_ENABLED (1 << 0)
279#define ACPI_GICC_PERF_INTERRUPT_MODE (1 << 1)
280#define ACPI_GICC_VGIC_MAINTENANCE_INTERRUPT_MODE (1 << 2)
281#define ACPI_GICC_ONLINE_CAPABLE (1 << 3)
282
283// ACPI_GICC_*_INTERRUPT_MODE
284#define ACPI_GICC_TRIGGERING_EDGE 1
285#define ACPI_GICC_TRIGGERING_LEVEL 0
286
287UACPI_PACKED(struct acpi_madt_gicc {
288 struct acpi_entry_hdr hdr;
289 uacpi_u16 rsvd0;
290 uacpi_u32 interface_number;
291 uacpi_u32 acpi_id;
293 uacpi_u32 parking_protocol_version;
294 uacpi_u32 perf_interrupt_gsiv;
295 uacpi_u64 parked_address;
297 uacpi_u64 gicv;
298 uacpi_u64 gich;
299 uacpi_u32 vgic_maitenante_interrupt;
300 uacpi_u64 gicr_base_address;
301 uacpi_u64 mpidr;
302 uacpi_u8 power_efficiency_class;
303 uacpi_u8 rsvd1;
304 uacpi_u16 spe_overflow_interrupt;
305 uacpi_u16 trbe_interrupt;
306})
307UACPI_EXPECT_SIZEOF(struct acpi_madt_gicc, 82);
308
309UACPI_PACKED(struct acpi_madt_gicd {
310 struct acpi_entry_hdr hdr;
311 uacpi_u16 rsvd0;
314 uacpi_u32 system_vector_base;
315 uacpi_u8 gic_version;
316 uacpi_u8 reserved1[3];
317})
318UACPI_EXPECT_SIZEOF(struct acpi_madt_gicd, 24);
319
320// acpi_madt_gic_msi_frame->flags
321#define ACPI_SPI_SELECT (1 << 0)
322
323UACPI_PACKED(struct acpi_madt_gic_msi_frame {
324 struct acpi_entry_hdr hdr;
325 uacpi_u16 rsvd;
329 uacpi_u16 spi_count;
330 uacpi_u16 spi_base;
331})
332UACPI_EXPECT_SIZEOF(struct acpi_madt_gic_msi_frame, 24);
333
334UACPI_PACKED(struct acpi_madt_gicr {
335 struct acpi_entry_hdr hdr;
336 uacpi_u16 rsvd;
339})
340UACPI_EXPECT_SIZEOF(struct acpi_madt_gicr, 16);
341
342UACPI_PACKED(struct acpi_madt_gic_its {
343 struct acpi_entry_hdr hdr;
344 uacpi_u16 rsvd0;
347 uacpi_u32 rsvd1;
348})
349UACPI_EXPECT_SIZEOF(struct acpi_madt_gic_its, 20);
350
351UACPI_PACKED(struct acpi_madt_multiprocessor_wakeup {
352 struct acpi_entry_hdr hdr;
353 uacpi_u16 mailbox_version;
354 uacpi_u32 rsvd;
355 uacpi_u64 mailbox_address;
356})
357UACPI_EXPECT_SIZEOF(struct acpi_madt_multiprocessor_wakeup, 16);
358
359#define ACPI_CORE_PIC_ENABLED (1 << 0)
360
362 struct acpi_entry_hdr hdr;
364 uacpi_u32 acpi_id;
367})
369
371 struct acpi_entry_hdr hdr;
375 uacpi_u16 cascade_vector;
376 uacpi_u64 cascade_vector_mapping;
377})
379
381 struct acpi_entry_hdr hdr;
385 uacpi_u64 cascade_vector;
386})
388
390 struct acpi_entry_hdr hdr;
392 uacpi_u8 cascade_vector;
394 uacpi_u64 node_map;
395})
397
399 struct acpi_entry_hdr hdr;
404})
406
408 struct acpi_entry_hdr hdr;
412 uacpi_u16 hardware_id;
413 uacpi_u16 gsi_base;
414})
416
418 struct acpi_entry_hdr hdr;
422 uacpi_u16 cascade_vector;
423})
425
426UACPI_PACKED(struct acpi_madt_rintc {
427 struct acpi_entry_hdr hdr;
429 uacpi_u8 rsvd;
431 uacpi_u64 hart_id;
432 uacpi_u32 uid;
433 uacpi_u32 ext_intc_id;
436})
437UACPI_EXPECT_SIZEOF(struct acpi_madt_rintc, 36);
438
439UACPI_PACKED(struct acpi_madt_imsic {
440 struct acpi_entry_hdr hdr;
442 uacpi_u8 rsvd;
444 uacpi_u16 num_ids;
445 uacpi_u16 num_guest_ids;
446 uacpi_u8 guest_index_bits;
447 uacpi_u8 hart_index_bits;
448 uacpi_u8 group_index_bits;
449 uacpi_u8 group_index_shift;
450})
451UACPI_EXPECT_SIZEOF(struct acpi_madt_imsic, 16);
452
453UACPI_PACKED(struct acpi_madt_aplic {
454 struct acpi_entry_hdr hdr;
456 uacpi_u8 id;
458 uacpi_u64 hardware_id;
459 uacpi_u16 idc_count;
460 uacpi_u16 sources_count;
461 uacpi_u32 gsi_base;
464})
465UACPI_EXPECT_SIZEOF(struct acpi_madt_aplic, 36);
466
467UACPI_PACKED(struct acpi_madt_plic {
468 struct acpi_entry_hdr hdr;
470 uacpi_u8 id;
471 uacpi_u64 hardware_id;
472 uacpi_u16 sources_count;
473 uacpi_u16 max_priority;
477 uacpi_u32 gsi_base;
478
479})
480UACPI_EXPECT_SIZEOF(struct acpi_madt_plic, 36);
481
491};
492
493UACPI_PACKED(struct acpi_srat {
494 struct acpi_sdt_hdr hdr;
495 uacpi_u32 rsvd0;
496 uacpi_u64 rsvd1;
497 struct acpi_entry_hdr entries[];
498})
499UACPI_EXPECT_SIZEOF(struct acpi_srat, 48);
500
501/*
502 * acpi_srat_processor_affinity->flags
503 * acpi_srat_x2apic_affinity->flags
504 */
505#define ACPI_SRAT_PROCESSOR_ENABLED (1 << 0)
506
507UACPI_PACKED(struct acpi_srat_processor_affinity {
508 struct acpi_entry_hdr hdr;
509 uacpi_u8 proximity_domain_low;
510 uacpi_u8 id;
512 uacpi_u8 eid;
513 uacpi_u8 proximity_domain_high[3];
514 uacpi_u32 clock_domain;
515})
516UACPI_EXPECT_SIZEOF(struct acpi_srat_processor_affinity, 16);
517
518// acpi_srat_memory_affinity->flags
519#define ACPI_SRAT_MEMORY_ENABLED (1 << 0)
520#define ACPI_SRAT_MEMORY_HOTPLUGGABLE (1 << 1)
521#define ACPI_SRAT_MEMORY_NON_VOLATILE (1 << 2)
522
523UACPI_PACKED(struct acpi_srat_memory_affinity {
524 struct acpi_entry_hdr hdr;
525 uacpi_u32 proximity_domain;
526 uacpi_u16 rsvd0;
529 uacpi_u32 rsvd1;
531 uacpi_u64 rsdv2;
532})
533UACPI_EXPECT_SIZEOF(struct acpi_srat_memory_affinity, 40);
534
535UACPI_PACKED(struct acpi_srat_x2apic_affinity {
536 struct acpi_entry_hdr hdr;
537 uacpi_u16 rsvd0;
538 uacpi_u32 proximity_domain;
541 uacpi_u32 clock_domain;
542 uacpi_u32 rsvd1;
543})
544UACPI_EXPECT_SIZEOF(struct acpi_srat_x2apic_affinity, 24);
545
546// acpi_srat_gicc_affinity->flags
547#define ACPI_SRAT_GICC_ENABLED (1 << 0)
548
550 struct acpi_entry_hdr hdr;
551 uacpi_u32 proximity_domain;
552 uacpi_u32 uid;
554 uacpi_u32 clock_domain;
555})
557
559 struct acpi_entry_hdr hdr;
560 uacpi_u32 proximity_domain;
561 uacpi_u16 rsvd;
563})
565
566// acpi_srat_generic_affinity->flags
567#define ACPI_GENERIC_AFFINITY_ENABLED (1 << 0)
568#define ACPI_GENERIC_AFFINITY_ARCH_TRANSACTIONS (1 << 1)
569
571 struct acpi_entry_hdr hdr;
572 uacpi_u8 rsvd0;
573 uacpi_u8 handle_type;
574 uacpi_u32 proximity_domain;
575 uacpi_u8 handle[16];
577 uacpi_u32 rsvd1;
578})
580
581// acpi_srat_rintc_affinity->flags
582#define ACPI_SRAT_RINTC_AFFINITY_ENABLED (1 << 0)
583
584UACPI_PACKED(struct acpi_srat_rintc_affinity {
585 struct acpi_entry_hdr hdr;
586 uacpi_u16 rsvd;
587 uacpi_u32 proximity_domain;
588 uacpi_u32 uid;
590 uacpi_u32 clock_domain;
591})
592UACPI_EXPECT_SIZEOF(struct acpi_srat_rintc_affinity, 20);
593
594UACPI_PACKED(struct acpi_slit {
595 struct acpi_sdt_hdr hdr;
596 uacpi_u64 num_localities;
598})
599UACPI_EXPECT_SIZEOF(struct acpi_slit, 44);
600
601/*
602 * acpi_gtdt->el*_flags
603 * acpi_gtdt_timer_entry->physical_flags
604 * acpi_gtdt_timer_entry->virtual_flags
605 * acpi_gtdt_watchdog->flags
606 */
607#define ACPI_GTDT_TRIGGERING (1 << 0)
608#define ACPI_GTDT_TRIGGERING_EDGE 1
609#define ACPI_GTDT_TRIGGERING_LEVEL 0
610
611/*
612 * acpi_gtdt->el*_flags
613 * acpi_gtdt_timer_entry->physical_flags
614 * acpi_gtdt_timer_entry->virtual_flags
615 * acpi_gtdt_watchdog->flags
616 */
617#define ACPI_GTDT_POLARITY (1 << 1)
618#define ACPI_GTDT_POLARITY_ACTIVE_LOW 1
619#define ACPI_GTDT_POLARITY_ACTIVE_HIGH 0
620
621// acpi_gtdt->el*_flags
622#define ACPI_GTDT_ALWAYS_ON_CAPABLE (1 << 2)
623
624UACPI_PACKED(struct acpi_gtdt {
625 struct acpi_sdt_hdr hdr;
626 uacpi_u64 cnt_control_base;
627 uacpi_u32 rsvd;
628 uacpi_u32 el1_secure_gsiv;
629 uacpi_u32 el1_secure_flags;
630 uacpi_u32 el1_non_secure_gsiv;
631 uacpi_u32 el1_non_secure_flags;
632 uacpi_u32 el1_virtual_gsiv;
633 uacpi_u32 el1_virtual_flags;
634 uacpi_u32 el2_gsiv;
635 uacpi_u32 el2_flags;
636 uacpi_u64 cnt_read_base;
637 uacpi_u32 platform_timer_count;
638 uacpi_u32 platform_timer_offset;
639
640 // revision >= 3
641 uacpi_u32 el2_virtual_gsiv;
642 uacpi_u32 el2_virtual_flags;
643})
644UACPI_EXPECT_SIZEOF(struct acpi_gtdt, 104);
645
649};
650
651UACPI_PACKED(struct acpi_gtdt_entry_hdr {
654})
655
656UACPI_PACKED(struct acpi_gtdt_timer {
657 struct acpi_gtdt_entry_hdr hdr;
658 uacpi_u8 rsvd;
659 uacpi_u64 cnt_ctl_base;
660 uacpi_u32 timer_count;
661 uacpi_u32 timer_offset;
662})
663UACPI_EXPECT_SIZEOF(struct acpi_gtdt_timer, 20);
664
665// acpi_gtdt_timer_entry->common_flags
666#define ACPI_GTDT_TIMER_ENTRY_SECURE (1 << 0)
667#define ACPI_GTDT_TIMER_ENTRY_ALWAYS_ON_CAPABLE (1 << 1)
668
670 uacpi_u8 frame_number;
671 uacpi_u8 rsvd[3];
672 uacpi_u64 cnt_base;
673 uacpi_u64 el0_cnt_base;
674 uacpi_u32 physical_gsiv;
675 uacpi_u32 physical_flags;
676 uacpi_u32 virtual_gsiv;
677 uacpi_u32 virtual_flags;
678 uacpi_u32 common_flags;
679})
681
682// acpi_gtdt_watchdog->flags
683#define ACPI_GTDT_WATCHDOG_SECURE (1 << 2)
684
686 struct acpi_gtdt_entry_hdr hdr;
687 uacpi_u8 rsvd;
688 uacpi_u64 refresh_frame;
690 uacpi_u32 gsiv;
692})
694
695// acpi_fdt->iapc_flags
696#define ACPI_IA_PC_LEGACY_DEVS (1 << 0)
697#define ACPI_IA_PC_8042 (1 << 1)
698#define ACPI_IA_PC_NO_VGA (1 << 2)
699#define ACPI_IA_PC_NO_MSI (1 << 3)
700#define ACPI_IA_PC_NO_PCIE_ASPM (1 << 4)
701#define ACPI_IA_PC_NO_CMOS_RTC (1 << 5)
702
703// acpi_fdt->flags
704#define ACPI_WBINVD (1 << 0)
705#define ACPI_WBINVD_FLUSH (1 << 1)
706#define ACPI_PROC_C1 (1 << 2)
707#define ACPI_P_LVL2_UP (1 << 3)
708#define ACPI_PWR_BUTTON (1 << 4)
709#define ACPI_SLP_BUTTON (1 << 5)
710#define ACPI_FIX_RTC (1 << 6)
711#define ACPI_RTC_S4 (1 << 7)
712#define ACPI_TMR_VAL_EXT (1 << 8)
713#define ACPI_DCK_CAP (1 << 9)
714#define ACPI_RESET_REG_SUP (1 << 10)
715#define ACPI_SEALED_CASE (1 << 11)
716#define ACPI_HEADLESS (1 << 12)
717#define ACPI_CPU_SW_SLP (1 << 13)
718#define ACPI_PCI_EXP_WAK (1 << 14)
719#define ACPI_USE_PLATFORM_CLOCK (1 << 15)
720#define ACPI_S4_RTC_STS_VALID (1 << 16)
721#define ACPI_REMOTE_POWER_ON_CAPABLE (1 << 17)
722#define ACPI_FORCE_APIC_CLUSTER_MODEL (1 << 18)
723#define ACPI_FORCE_APIC_PHYS_DEST_MODE (1 << 19)
724#define ACPI_HW_REDUCED_ACPI (1 << 20)
725#define ACPI_LOW_POWER_S0_IDLE_CAPABLE (1 << 21)
726
727// acpi_fdt->arm_flags
728#define ACPI_ARM_PSCI_COMPLIANT (1 << 0)
729#define ACPI_ARM_PSCI_USE_HVC (1 << 1)
730
731UACPI_PACKED(struct acpi_fadt {
732 struct acpi_sdt_hdr hdr;
733 uacpi_u32 firmware_ctrl;
734 uacpi_u32 dsdt;
735 uacpi_u8 int_model;
736 uacpi_u8 preferred_pm_profile;
737 uacpi_u16 sci_int;
738 uacpi_u32 smi_cmd;
739 uacpi_u8 acpi_enable;
740 uacpi_u8 acpi_disable;
741 uacpi_u8 s4bios_req;
742 uacpi_u8 pstate_cnt;
743 uacpi_u32 pm1a_evt_blk;
744 uacpi_u32 pm1b_evt_blk;
745 uacpi_u32 pm1a_cnt_blk;
746 uacpi_u32 pm1b_cnt_blk;
747 uacpi_u32 pm2_cnt_blk;
748 uacpi_u32 pm_tmr_blk;
749 uacpi_u32 gpe0_blk;
750 uacpi_u32 gpe1_blk;
751 uacpi_u8 pm1_evt_len;
752 uacpi_u8 pm1_cnt_len;
753 uacpi_u8 pm2_cnt_len;
754 uacpi_u8 pm_tmr_len;
755 uacpi_u8 gpe0_blk_len;
756 uacpi_u8 gpe1_blk_len;
757 uacpi_u8 gpe1_base;
758 uacpi_u8 cst_cnt;
759 uacpi_u16 p_lvl2_lat;
760 uacpi_u16 p_lvl3_lat;
761 uacpi_u16 flush_size;
762 uacpi_u16 flush_stride;
763 uacpi_u8 duty_offset;
764 uacpi_u8 duty_width;
765 uacpi_u8 day_alrm;
766 uacpi_u8 mon_alrm;
767 uacpi_u8 century;
768 uacpi_u16 iapc_boot_arch;
769 uacpi_u8 rsvd;
771 struct acpi_gas reset_reg;
772 uacpi_u8 reset_value;
773 uacpi_u16 arm_boot_arch;
774 uacpi_u8 fadt_minor_verison;
775 uacpi_u64 x_firmware_ctrl;
776 uacpi_u64 x_dsdt;
777 struct acpi_gas x_pm1a_evt_blk;
778 struct acpi_gas x_pm1b_evt_blk;
779 struct acpi_gas x_pm1a_cnt_blk;
780 struct acpi_gas x_pm1b_cnt_blk;
781 struct acpi_gas x_pm2_cnt_blk;
782 struct acpi_gas x_pm_tmr_blk;
783 struct acpi_gas x_gpe0_blk;
784 struct acpi_gas x_gpe1_blk;
785 struct acpi_gas sleep_control_reg;
786 struct acpi_gas sleep_status_reg;
787 uacpi_u64 hypervisor_vendor_identity;
788})
789UACPI_EXPECT_SIZEOF(struct acpi_fadt, 276);
790
791// acpi_facs->flags
792#define ACPI_S4BIOS_F (1 << 0)
793#define ACPI_64BIT_WAKE_SUPPORTED_F (1 << 1)
794
795// acpi_facs->ospm_flags
796#define ACPI_64BIT_WAKE_F (1 << 0)
797
798struct acpi_facs {
810};
812
815 uacpi_u16 segment;
816 uacpi_u8 start_bus;
817 uacpi_u8 end_bus;
818 uacpi_u32 rsvd;
819})
821
822UACPI_PACKED(struct acpi_mcfg {
823 struct acpi_sdt_hdr hdr;
824 uacpi_u64 rsvd;
825 struct acpi_mcfg_allocation entries[];
826})
827UACPI_EXPECT_SIZEOF(struct acpi_mcfg, 44);
828
829// acpi_hpet->block_id
830#define ACPI_HPET_PCI_VENDOR_ID_SHIFT 16
831#define ACPI_HPET_LEGACY_REPLACEMENT_IRQ_ROUTING_CAPABLE (1 << 15)
832#define ACPI_HPET_COUNT_SIZE_CAP (1 << 13)
833#define ACPI_HPET_NUMBER_OF_COMPARATORS_SHIFT 8
834#define ACPI_HPET_NUMBER_OF_COMPARATORS_MASK 0b11111
835#define ACPI_HPET_HARDWARE_REV_ID_MASK 0b11111111
836
837// acpi_hpet->flags
838#define ACPI_HPET_PAGE_PROTECTION_MASK 0b11
839#define ACPI_HPET_PAGE_NO_PROTECTION 0
840#define ACPI_HPET_PAGE_4K_PROTECTED 1
841#define ACPI_HPET_PAGE_64K_PROTECTED 2
842
843UACPI_PACKED(struct acpi_hpet {
844 struct acpi_sdt_hdr hdr;
845 uacpi_u32 block_id;
846 struct acpi_gas address;
848 uacpi_u16 min_clock_tick;
850})
851UACPI_EXPECT_SIZEOF(struct acpi_hpet, 56);
852
853// PM1{a,b}_STS
854#define ACPI_PM1_STS_TMR_STS_IDX 0
855#define ACPI_PM1_STS_BM_STS_IDX 4
856#define ACPI_PM1_STS_GBL_STS_IDX 5
857#define ACPI_PM1_STS_PWRBTN_STS_IDX 8
858#define ACPI_PM1_STS_SLPBTN_STS_IDX 9
859#define ACPI_PM1_STS_RTC_STS_IDX 10
860#define ACPI_PM1_STS_IGN0_IDX 11
861#define ACPI_PM1_STS_PCIEXP_WAKE_STS_IDX 14
862#define ACPI_PM1_STS_WAKE_STS_IDX 15
863
864#define ACPI_PM1_STS_TMR_STS_MASK (1 << ACPI_PM1_STS_TMR_STS_IDX)
865#define ACPI_PM1_STS_BM_STS_MASK (1 << ACPI_PM1_STS_BM_STS_IDX)
866#define ACPI_PM1_STS_GBL_STS_MASK (1 << ACPI_PM1_STS_GBL_STS_IDX)
867#define ACPI_PM1_STS_PWRBTN_STS_MASK (1 << ACPI_PM1_STS_PWRBTN_STS_IDX)
868#define ACPI_PM1_STS_SLPBTN_STS_MASK (1 << ACPI_PM1_STS_SLPBTN_STS_IDX)
869#define ACPI_PM1_STS_RTC_STS_MASK (1 << ACPI_PM1_STS_RTC_STS_IDX)
870#define ACPI_PM1_STS_IGN0_MASK (1 << ACPI_PM1_STS_IGN0_IDX)
871#define ACPI_PM1_STS_PCIEXP_WAKE_STS_MASK (1 << ACPI_PM1_STS_PCIEXP_WAKE_STS_IDX)
872#define ACPI_PM1_STS_WAKE_STS_MASK (1 << ACPI_PM1_STS_WAKE_STS_IDX)
873
874#define ACPI_PM1_STS_CLEAR 1
875
876// PM1{a,b}_EN
877#define ACPI_PM1_EN_TMR_EN_IDX 0
878#define ACPI_PM1_EN_GBL_EN_IDX 5
879#define ACPI_PM1_EN_PWRBTN_EN_IDX 8
880#define ACPI_PM1_EN_SLPBTN_EN_IDX 9
881#define ACPI_PM1_EN_RTC_EN_IDX 10
882#define ACPI_PM1_EN_PCIEXP_WAKE_DIS_IDX 14
883
884#define ACPI_PM1_EN_TMR_EN_MASK (1 << ACPI_PM1_EN_TMR_EN_IDX)
885#define ACPI_PM1_EN_GBL_EN_MASK (1 << ACPI_PM1_EN_GBL_EN_IDX)
886#define ACPI_PM1_EN_PWRBTN_EN_MASK (1 << ACPI_PM1_EN_PWRBTN_EN_IDX)
887#define ACPI_PM1_EN_SLPBTN_EN_MASK (1 << ACPI_PM1_EN_SLPBTN_EN_IDX)
888#define ACPI_PM1_EN_RTC_EN_MASK (1 << ACPI_PM1_EN_RTC_EN_IDX)
889#define ACPI_PM1_EN_PCIEXP_WAKE_DIS_MASK (1 << ACPI_PM1_EN_PCIEXP_WAKE_DIS_IDX)
890
891// PM1{a,b}_CNT_BLK
892#define ACPI_PM1_CNT_SCI_EN_IDX 0
893#define ACPI_PM1_CNT_BM_RLD_IDX 1
894#define ACPI_PM1_CNT_GBL_RLS_IDX 2
895#define ACPI_PM1_CNT_RSVD0_IDX 3
896#define ACPI_PM1_CNT_RSVD1_IDX 4
897#define ACPI_PM1_CNT_RSVD2_IDX 5
898#define ACPI_PM1_CNT_RSVD3_IDX 6
899#define ACPI_PM1_CNT_RSVD4_IDX 7
900#define ACPI_PM1_CNT_RSVD5_IDX 8
901#define ACPI_PM1_CNT_IGN0_IDX 9
902#define ACPI_PM1_CNT_SLP_TYP_IDX 10
903#define ACPI_PM1_CNT_SLP_EN_IDX 13
904#define ACPI_PM1_CNT_RSVD6_IDX 14
905#define ACPI_PM1_CNT_RSVD7_IDX 15
906
907#define ACPI_SLP_TYP_MAX 0b111
908
909#define ACPI_PM1_CNT_SCI_EN_MASK (1 << ACPI_PM1_CNT_SCI_EN_IDX)
910#define ACPI_PM1_CNT_BM_RLD_MASK (1 << ACPI_PM1_CNT_BM_RLD_IDX)
911#define ACPI_PM1_CNT_GBL_RLS_MASK (1 << ACPI_PM1_CNT_GBL_RLS_IDX)
912#define ACPI_PM1_CNT_SLP_TYP_MASK (ACPI_SLP_TYP_MAX << ACPI_PM1_CNT_SLP_TYP_IDX)
913#define ACPI_PM1_CNT_SLP_EN_MASK (1 << ACPI_PM1_CNT_SLP_EN_IDX)
914
915/*
916 * SCI_EN is not in this mask even though the spec says it must be preserved.
917 * This is because it's known to be bugged on some hardware that relies on
918 * software writing 1 to it after resume (as indicated by a similar comment in
919 * ACPICA)
920 */
921#define ACPI_PM1_CNT_PRESERVE_MASK ( \
922 (1 << ACPI_PM1_CNT_RSVD0_IDX) | \
923 (1 << ACPI_PM1_CNT_RSVD1_IDX) | \
924 (1 << ACPI_PM1_CNT_RSVD2_IDX) | \
925 (1 << ACPI_PM1_CNT_RSVD3_IDX) | \
926 (1 << ACPI_PM1_CNT_RSVD4_IDX) | \
927 (1 << ACPI_PM1_CNT_RSVD5_IDX) | \
928 (1 << ACPI_PM1_CNT_IGN0_IDX ) | \
929 (1 << ACPI_PM1_CNT_RSVD6_IDX) | \
930 (1 << ACPI_PM1_CNT_RSVD7_IDX) \
931)
932
933// PM2_CNT
934#define ACPI_PM2_CNT_ARB_DIS_IDX 0
935#define ACPI_PM2_CNT_ARB_DIS_MASK (1 << ACPI_PM2_CNT_ARB_DIS_IDX)
936
937// All bits are reserved but this first one
938#define ACPI_PM2_CNT_PRESERVE_MASK (~((uacpi_u64)ACPI_PM2_CNT_ARB_DIS_MASK))
939
940// SLEEP_CONTROL_REG
941#define ACPI_SLP_CNT_RSVD0_IDX 0
942#define ACPI_SLP_CNT_IGN0_IDX 1
943#define ACPI_SLP_CNT_SLP_TYP_IDX 2
944#define ACPI_SLP_CNT_SLP_EN_IDX 5
945#define ACPI_SLP_CNT_RSVD1_IDX 6
946#define ACPI_SLP_CNT_RSVD2_IDX 7
947
948#define ACPI_SLP_CNT_SLP_TYP_MASK (ACPI_SLP_TYP_MAX << ACPI_SLP_CNT_SLP_TYP_IDX)
949#define ACPI_SLP_CNT_SLP_EN_MASK (1 << ACPI_SLP_CNT_SLP_EN_IDX)
950
951#define ACPI_SLP_CNT_PRESERVE_MASK ( \
952 (1 << ACPI_SLP_CNT_RSVD0_IDX) | \
953 (1 << ACPI_SLP_CNT_IGN0_IDX) | \
954 (1 << ACPI_SLP_CNT_RSVD1_IDX) | \
955 (1 << ACPI_SLP_CNT_RSVD2_IDX) \
956)
957
958// SLEEP_STATUS_REG
959#define ACPI_SLP_STS_WAK_STS_IDX 7
960
961#define ACPI_SLP_STS_WAK_STS_MASK (1 << ACPI_SLP_STS_WAK_STS_IDX)
962
963// All bits are reserved but this last one
964#define ACPI_SLP_STS_PRESERVE_MASK (~((uacpi_u64)ACPI_SLP_STS_WAK_STS_MASK))
965
966#define ACPI_SLP_STS_CLEAR 1
967
968UACPI_PACKED(struct acpi_dsdt {
969 struct acpi_sdt_hdr hdr;
970 uacpi_u8 definition_block[];
971})
972
973UACPI_PACKED(struct acpi_ssdt {
974 struct acpi_sdt_hdr hdr;
975 uacpi_u8 definition_block[];
976})
977
978/*
979 * ACPI 6.5 specification:
980 * Bit [0] - Set if the device is present.
981 * Bit [1] - Set if the device is enabled and decoding its resources.
982 * Bit [2] - Set if the device should be shown in the UI.
983 * Bit [3] - Set if the device is functioning properly (cleared if device
984 * failed its diagnostics).
985 * Bit [4] - Set if the battery is present.
986 */
988#define ACPI_STA_RESULT_DEVICE_ENABLED (1 << 1)
989#define ACPI_STA_RESULT_DEVICE_SHOWN_IN_UI (1 << 2)
990#define ACPI_STA_RESULT_DEVICE_FUNCTIONING (1 << 3)
991#define ACPI_STA_RESULT_DEVICE_BATTERY_PRESENT (1 << 4)
992
993#define ACPI_REG_DISCONNECT 0
994#define ACPI_REG_CONNECT 1
995
996UACPI_PACKED(struct acpi_ecdt {
997 struct acpi_sdt_hdr hdr;
998 struct acpi_gas ec_control;
999 struct acpi_gas ec_data;
1000 uacpi_u32 uid;
1001 uacpi_u8 gpe_bit;
1002 uacpi_char ec_id[];
1003})
1004UACPI_EXPECT_SIZEOF(struct acpi_ecdt, 65);
1005
1006UACPI_PACKED(struct acpi_rhct_hdr {
1009 uacpi_u16 revision;
1010})
1011UACPI_EXPECT_SIZEOF(struct acpi_rhct_hdr, 6);
1012
1013// acpi_rhct->flags
1014#define ACPI_TIMER_CANNOT_WAKE_CPU (1 << 0)
1015
1016UACPI_PACKED(struct acpi_rhct {
1017 struct acpi_sdt_hdr hdr;
1019 uacpi_u64 timebase_frequency;
1020 uacpi_u32 node_count;
1021 uacpi_u32 nodes_offset;
1022 struct acpi_rhct_hdr entries[];
1023})
1024UACPI_EXPECT_SIZEOF(struct acpi_rhct, 56);
1025
1031};
1032
1033UACPI_PACKED(struct acpi_rhct_isa_string {
1034 struct acpi_rhct_hdr hdr;
1036 uacpi_u8 isa[];
1037})
1038UACPI_EXPECT_SIZEOF(struct acpi_rhct_isa_string, 8);
1039
1040UACPI_PACKED(struct acpi_rhct_cmo {
1041 struct acpi_rhct_hdr hdr;
1042 uacpi_u8 rsvd;
1043 uacpi_u8 cbom_size;
1044 uacpi_u8 cbop_size;
1045 uacpi_u8 cboz_size;
1046})
1047UACPI_EXPECT_SIZEOF(struct acpi_rhct_cmo, 10);
1048
1053};
1054
1055UACPI_PACKED(struct acpi_rhct_mmu {
1056 struct acpi_rhct_hdr hdr;
1057 uacpi_u8 rsvd;
1058 uacpi_u8 type;
1059})
1060UACPI_EXPECT_SIZEOF(struct acpi_rhct_mmu, 8);
1061
1062UACPI_PACKED(struct acpi_rhct_hart_info {
1063 struct acpi_rhct_hdr hdr;
1064 uacpi_u16 offset_count;
1065 uacpi_u32 uid;
1067})
1068UACPI_EXPECT_SIZEOF(struct acpi_rhct_hart_info, 12);
1069
1070#define ACPI_LARGE_ITEM (1 << 7)
1071
1072#define ACPI_SMALL_ITEM_NAME_IDX 3
1073#define ACPI_SMALL_ITEM_NAME_MASK 0b1111
1074#define ACPI_SMALL_ITEM_LENGTH_MASK 0b111
1075
1076#define ACPI_LARGE_ITEM_NAME_MASK 0b1111111
1077
1078// Small items
1079#define ACPI_RESOURCE_IRQ 0x04
1080#define ACPI_RESOURCE_DMA 0x05
1081#define ACPI_RESOURCE_START_DEPENDENT 0x06
1082#define ACPI_RESOURCE_END_DEPENDENT 0x07
1083#define ACPI_RESOURCE_IO 0x08
1084#define ACPI_RESOURCE_FIXED_IO 0x09
1085#define ACPI_RESOURCE_FIXED_DMA 0x0A
1086#define ACPI_RESOURCE_VENDOR_TYPE0 0x0E
1087#define ACPI_RESOURCE_END_TAG 0x0F
1088
1089// Large items
1090#define ACPI_RESOURCE_MEMORY24 0x01
1091#define ACPI_RESOURCE_GENERIC_REGISTER 0x02
1092#define ACPI_RESOURCE_VENDOR_TYPE1 0x04
1093#define ACPI_RESOURCE_MEMORY32 0x05
1094#define ACPI_RESOURCE_FIXED_MEMORY32 0x06
1095#define ACPI_RESOURCE_ADDRESS32 0x07
1096#define ACPI_RESOURCE_ADDRESS16 0x08
1097#define ACPI_RESOURCE_EXTENDED_IRQ 0x09
1098#define ACPI_RESOURCE_ADDRESS64 0x0A
1099#define ACPI_RESOURCE_ADDRESS64_EXTENDED 0x0B
1100#define ACPI_RESOURCE_GPIO_CONNECTION 0x0C
1101#define ACPI_RESOURCE_PIN_FUNCTION 0x0D
1102#define ACPI_RESOURCE_SERIAL_CONNECTION 0x0E
1103#define ACPI_RESOURCE_PIN_CONFIGURATION 0x0F
1104#define ACPI_RESOURCE_PIN_GROUP 0x10
1105#define ACPI_RESOURCE_PIN_GROUP_FUNCTION 0x11
1106#define ACPI_RESOURCE_PIN_GROUP_CONFIGURATION 0x12
1107#define ACPI_RESOURCE_CLOCK_INPUT 0x13
1108
1109/*
1110 * Resources as encoded by the raw AML byte stream.
1111 * For decode API & human usable structures refer to uacpi/resources.h
1112 */
1113UACPI_PACKED(struct acpi_small_item {
1114 uacpi_u8 type_and_length;
1115})
1116UACPI_EXPECT_SIZEOF(struct acpi_small_item, 1);
1117
1119 struct acpi_small_item common;
1120 uacpi_u16 irq_mask;
1122})
1124
1126 struct acpi_small_item common;
1127 uacpi_u8 channel_mask;
1129})
1131
1133 struct acpi_small_item common;
1135})
1137
1138UACPI_PACKED(struct acpi_resource_end_dependent {
1139 struct acpi_small_item common;
1140})
1141UACPI_EXPECT_SIZEOF(struct acpi_resource_end_dependent, 1);
1142
1144 struct acpi_small_item common;
1146 uacpi_u16 minimum;
1147 uacpi_u16 maximum;
1150})
1152
1154 struct acpi_small_item common;
1157})
1159
1161 struct acpi_small_item common;
1162 uacpi_u16 request_line;
1163 uacpi_u16 channel;
1164 uacpi_u8 transfer_width;
1165})
1167
1168UACPI_PACKED(struct acpi_resource_vendor_defined_type0 {
1169 struct acpi_small_item common;
1170 uacpi_u8 byte_data[];
1171})
1172UACPI_EXPECT_SIZEOF(struct acpi_resource_vendor_defined_type0, 1);
1173
1175 struct acpi_small_item common;
1177})
1179
1180UACPI_PACKED(struct acpi_large_item {
1181 uacpi_u8 type;
1183})
1184UACPI_EXPECT_SIZEOF(struct acpi_large_item, 3);
1185
1187 struct acpi_large_item common;
1189 uacpi_u16 minimum;
1190 uacpi_u16 maximum;
1193})
1195
1196UACPI_PACKED(struct acpi_resource_vendor_defined_type1 {
1197 struct acpi_large_item common;
1198 uacpi_u8 byte_data[];
1199})
1200UACPI_EXPECT_SIZEOF(struct acpi_resource_vendor_defined_type1, 3);
1201
1203 struct acpi_large_item common;
1205 uacpi_u32 minimum;
1206 uacpi_u32 maximum;
1209})
1211
1213 struct acpi_large_item common;
1217})
1219
1221 struct acpi_large_item common;
1222 uacpi_u8 type;
1224 uacpi_u8 type_flags;
1225})
1227
1229 struct acpi_resource_address common;
1230 uacpi_u64 granularity;
1231 uacpi_u64 minimum;
1232 uacpi_u64 maximum;
1233 uacpi_u64 translation_offset;
1235})
1237
1239 struct acpi_resource_address common;
1240 uacpi_u32 granularity;
1241 uacpi_u32 minimum;
1242 uacpi_u32 maximum;
1243 uacpi_u32 translation_offset;
1245})
1247
1249 struct acpi_resource_address common;
1250 uacpi_u16 granularity;
1251 uacpi_u16 minimum;
1252 uacpi_u16 maximum;
1253 uacpi_u16 translation_offset;
1255})
1257
1258UACPI_PACKED(struct acpi_resource_address64_extended {
1259 struct acpi_resource_address common;
1260 uacpi_u8 revision_id;
1261 uacpi_u8 rsvd;
1262 uacpi_u64 granularity;
1263 uacpi_u64 minimum;
1264 uacpi_u64 maximum;
1265 uacpi_u64 translation_offset;
1267 uacpi_u64 attributes;
1268})
1269UACPI_EXPECT_SIZEOF(struct acpi_resource_address64_extended, 56);
1270
1272 struct acpi_large_item common;
1274 uacpi_u8 num_irqs;
1275 uacpi_u32 irqs[];
1276})
1278
1280 struct acpi_large_item common;
1281 uacpi_u8 address_space_id;
1282 uacpi_u8 bit_width;
1283 uacpi_u8 bit_offset;
1284 uacpi_u8 access_size;
1286})
1288
1289UACPI_PACKED(struct acpi_resource_gpio_connection {
1290 struct acpi_large_item common;
1291 uacpi_u8 revision_id;
1292 uacpi_u8 type;
1293 uacpi_u16 general_flags;
1294 uacpi_u16 connection_flags;
1295 uacpi_u8 pull_configuration;
1296 uacpi_u16 drive_strength;
1297 uacpi_u16 debounce_timeout;
1298 uacpi_u16 pin_table_offset;
1299 uacpi_u8 source_index;
1300 uacpi_u16 source_offset;
1301 uacpi_u16 vendor_data_offset;
1302 uacpi_u16 vendor_data_length;
1303})
1304UACPI_EXPECT_SIZEOF(struct acpi_resource_gpio_connection, 23);
1305
1306#define ACPI_SERIAL_TYPE_I2C 1
1307#define ACPI_SERIAL_TYPE_SPI 2
1308#define ACPI_SERIAL_TYPE_UART 3
1309#define ACPI_SERIAL_TYPE_CSI2 4
1310#define ACPI_SERIAL_TYPE_MAX ACPI_SERIAL_TYPE_CSI2
1311
1312UACPI_PACKED(struct acpi_resource_serial {
1313 struct acpi_large_item common;
1314 uacpi_u8 revision_id;
1315 uacpi_u8 source_index;
1316 uacpi_u8 type;
1318 uacpi_u16 type_specific_flags;
1319 uacpi_u8 type_specific_revision_id;
1320 uacpi_u16 type_data_length;
1321})
1322UACPI_EXPECT_SIZEOF(struct acpi_resource_serial, 12);
1323
1324UACPI_PACKED(struct acpi_resource_serial_i2c {
1325 struct acpi_resource_serial common;
1326 uacpi_u32 connection_speed;
1327 uacpi_u16 slave_address;
1328})
1329UACPI_EXPECT_SIZEOF(struct acpi_resource_serial_i2c, 18);
1330
1331UACPI_PACKED(struct acpi_resource_serial_spi {
1332 struct acpi_resource_serial common;
1333 uacpi_u32 connection_speed;
1334 uacpi_u8 data_bit_length;
1335 uacpi_u8 phase;
1336 uacpi_u8 polarity;
1337 uacpi_u16 device_selection;
1338})
1339UACPI_EXPECT_SIZEOF(struct acpi_resource_serial_spi, 21);
1340
1341UACPI_PACKED(struct acpi_resource_serial_uart {
1342 struct acpi_resource_serial common;
1343 uacpi_u32 baud_rate;
1344 uacpi_u16 rx_fifo;
1345 uacpi_u16 tx_fifo;
1346 uacpi_u8 parity;
1347 uacpi_u8 lines_enabled;
1348})
1349UACPI_EXPECT_SIZEOF(struct acpi_resource_serial_uart, 22);
1350
1351UACPI_PACKED(struct acpi_resource_serial_csi2 {
1352 struct acpi_resource_serial common;
1353})
1354UACPI_EXPECT_SIZEOF(struct acpi_resource_serial_csi2, 12);
1355
1357 struct acpi_large_item common;
1358 uacpi_u8 revision_id;
1360 uacpi_u8 pull_configuration;
1361 uacpi_u16 function_number;
1362 uacpi_u16 pin_table_offset;
1363 uacpi_u8 source_index;
1364 uacpi_u16 source_offset;
1365 uacpi_u16 vendor_data_offset;
1366 uacpi_u16 vendor_data_length;
1367})
1369
1370UACPI_PACKED(struct acpi_resource_pin_configuration {
1371 struct acpi_large_item common;
1372 uacpi_u8 revision_id;
1374 uacpi_u8 type;
1376 uacpi_u16 pin_table_offset;
1377 uacpi_u8 source_index;
1378 uacpi_u16 source_offset;
1379 uacpi_u16 vendor_data_offset;
1380 uacpi_u16 vendor_data_length;
1381})
1382UACPI_EXPECT_SIZEOF(struct acpi_resource_pin_configuration, 20);
1383
1385 struct acpi_large_item common;
1386 uacpi_u8 revision_id;
1388 uacpi_u16 pin_table_offset;
1389 uacpi_u16 source_lable_offset;
1390 uacpi_u16 vendor_data_offset;
1391 uacpi_u16 vendor_data_length;
1392})
1394
1396 struct acpi_large_item common;
1397 uacpi_u8 revision_id;
1399 uacpi_u16 function;
1400 uacpi_u8 source_index;
1401 uacpi_u16 source_offset;
1402 uacpi_u16 source_lable_offset;
1403 uacpi_u16 vendor_data_offset;
1404 uacpi_u16 vendor_data_length;
1405})
1407
1408UACPI_PACKED(struct acpi_resource_pin_group_configuration {
1409 struct acpi_large_item common;
1410 uacpi_u8 revision_id;
1412 uacpi_u8 type;
1414 uacpi_u8 source_index;
1415 uacpi_u16 source_offset;
1416 uacpi_u16 source_lable_offset;
1417 uacpi_u16 vendor_data_offset;
1418 uacpi_u16 vendor_data_length;
1419})
1420UACPI_EXPECT_SIZEOF(struct acpi_resource_pin_group_configuration, 20);
1421
1422UACPI_PACKED(struct acpi_resource_clock_input {
1423 struct acpi_large_item common;
1424 uacpi_u8 revision_id;
1427 uacpi_u32 numerator;
1428 uacpi_u8 source_index;
1429})
1430UACPI_EXPECT_SIZEOF(struct acpi_resource_clock_input, 13);
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
Definition: align.cpp:48
#define lint
Definition: hash.c:43
static PDB_INFORMATION information
Definition: db.cpp:178
static cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum)
Definition: fdi.c:353
static const WCHAR version[]
Definition: asmname.c:66
#define ACPI_STA_RESULT_DEVICE_PRESENT
Definition: acpi.h:987
acpi_gtdt_entry_type
Definition: acpi.h:646
@ ACPI_GTDT_ENTRY_TYPE_TIMER
Definition: acpi.h:647
@ ACPI_GTDT_ENTRY_TYPE_WATCHDOG
Definition: acpi.h:648
#define ACPI_PCAT_COMPAT
acpi_rhct_entry_type
Definition: acpi.h:1026
@ ACPI_RHCT_ENTRY_TYPE_ISA_STRING
Definition: acpi.h:1027
@ ACPI_RHCT_ENTRY_TYPE_HART_INFO
Definition: acpi.h:1030
@ ACPI_RHCT_ENTRY_TYPE_CMO
Definition: acpi.h:1028
@ ACPI_RHCT_ENTRY_TYPE_MMU
Definition: acpi.h:1029
acpi_srat_entry_type
Definition: acpi.h:482
@ ACPI_SRAT_ENTRY_TYPE_X2APIC_AFFINITY
Definition: acpi.h:485
@ ACPI_SRAT_ENTRY_TYPE_GENERIC_INITIATOR_AFFINITY
Definition: acpi.h:488
@ ACPI_SRAT_ENTRY_TYPE_GIC_ITS_AFFINITY
Definition: acpi.h:487
@ ACPI_SRAT_ENTRY_TYPE_GICC_AFFINITY
Definition: acpi.h:486
@ ACPI_SRAT_ENTRY_TYPE_RINTC_AFFINITY
Definition: acpi.h:490
@ ACPI_SRAT_ENTRY_TYPE_MEMORY_AFFINITY
Definition: acpi.h:484
@ ACPI_SRAT_ENTRY_TYPE_PROCESSOR_AFFINITY
Definition: acpi.h:483
@ ACPI_SRAT_ENTRY_TYPE_GENERIC_PORT_AFFINITY
Definition: acpi.h:489
acpi_rhct_mmu_type
Definition: acpi.h:1049
@ ACPI_RHCT_MMU_TYPE_SV39
Definition: acpi.h:1050
@ ACPI_RHCT_MMU_TYPE_SV48
Definition: acpi.h:1051
@ ACPI_RHCT_MMU_TYPE_SV57
Definition: acpi.h:1052
#define UACPI_EXPECT_SIZEOF(type, size)
Definition: helpers.h:22
#define UACPI_PACKED(decl)
Definition: compiler.h:25
uint32_t uacpi_u32
Definition: types.h:21
uint64_t uacpi_u64
Definition: types.h:22
char uacpi_char
Definition: types.h:44
uint16_t uacpi_u16
Definition: types.h:20
uint8_t uacpi_u8
Definition: types.h:19
r reserved
Definition: btrfs.c:3006
static const FxOffsetAndName offsets[]
GLuint start
Definition: gl.h:1545
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint address
Definition: glext.h:9393
GLsizeiptr size
Definition: glext.h:5919
GLuint GLenum matrix
Definition: glext.h:9407
GLuint divisor
Definition: glext.h:6313
GLbitfield flags
Definition: glext.h:7161
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLuint id
Definition: glext.h:5910
char hdr[14]
Definition: iptest.cpp:33
static unsigned int number
Definition: dsound.c:1479
uacpi_u32 length
Definition: acpi.h:800
uacpi_u32 global_lock
Definition: acpi.h:803
uacpi_u64 x_firmware_waking_vector
Definition: acpi.h:805
uacpi_u32 flags
Definition: acpi.h:804
uacpi_u32 ospm_flags
Definition: acpi.h:808
uacpi_u8 version
Definition: acpi.h:806
uacpi_u32 firmware_waking_vector
Definition: acpi.h:802
uacpi_char rsvd1[24]
Definition: acpi.h:809
uacpi_u32 hardware_signature
Definition: acpi.h:801
uacpi_char rsvd0[3]
Definition: acpi.h:807
Definition: actbl1.h:1559
Definition: dlist.c:348
Definition: pdh_main.c:96