- Removed unused HandleEvent method.
[AROS.git] / compiler / include / resources / acpi.h
blob723e3af9631e90a5a5bb13f8110aa660de31b39c
1 /*
2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: AROS Generic ACPI Definitions.
6 Lang: english
7 */
8 #ifndef __AROS_ACPI_H__
9 #define __AROS_ACPI_H__
11 #include <exec/lists.h>
12 #include <exec/semaphores.h>
13 #include <utility/hooks.h>
15 /********** ACPI DEFINITIONS ****************/
18 * Actually a reverse of AROS_MAKE_ID().
19 * Reverse because ACPI signatures appear to be stored in bigendian format.
21 #define ACPI_MAKE_ID(a, b, c, d) (((ULONG) (d)<<24) | ((ULONG) (c)<<16) | \
22 ((ULONG) (b)<<8) | ((ULONG) (a)))
24 #define ACPI_ID_ALL 0xFFFFFFFF
26 /* ACPI 2.0 Generic Address Structure (GAS) */
28 struct GENERIC_ACPI_ADDR
30 unsigned char address_space_id; /* Address space where struct or register exists. */
31 unsigned char register_bit_width; /* Size in bits of given register */
32 unsigned char register_bit_offset; /* Bit offset within the register */
33 unsigned char size; /* Acces size (see below) */
34 UQUAD address; /* 64-bit address of struct or register */
35 } __attribute__ ((packed));
37 /* Address spaces */
38 #define ACPI_SPACE_MEM 0
39 #define ACPI_SPACE_IO 1
40 #define ACPI_SPACE_PCI 2
41 #define ACPI_SPACE_EMBEDDED 3
42 #define ACPI_SPACE_SMBUS 4
43 #define ACPI_SPACE_FIXED 0x7F
44 #define ACPI_SPACE_OEM 0xC0
46 /* Access sizes */
47 #define ACPI_SIZE_UNDEFINED 0 /* Specified by bit offset and width */
48 #define ACPI_SIZE_BYTE 1
49 #define ACPI_SIZE_WORD 2
50 #define ACPI_SIZE_DWORD 3
51 #define ACPI_SIZE_QUAD 4
53 #define ACPI_PCI_OFFSET(addr) (unsigned short)((addr) & 0x0FFFF)
54 #define ACPI_PCI_FUNC(addr) (unsigned short)(((addr) >> 16) & 0x0FFFF)
55 #define ACPI_PCI_DEV(addr) (unsigned short)(((addr) >> 32) & 0x0FFFF)
57 struct ACPI_TABLE_DEF_HEADER /* ACPI common table header */
59 unsigned int signature; /* ACPI signature (4 ASCII characters) */
60 unsigned int length; /* Length of table, in bytes, including header */
61 unsigned char revision; /* ACPI Specification minor version # */
62 unsigned char checksum; /* To make sum of entire table == 0 */
63 char oem_id [6]; /* OEM identification */
64 char oem_table_id [8]; /* OEM table identification */
65 unsigned int oem_revision; /* OEM revision number */
66 char asl_compiler_id [4]; /* ASL compiler vendor ID */
67 unsigned int asl_compiler_revision; /* ASL compiler revision number */
70 /* Table Handlers */
72 enum ACPI_IRQ_PICS
74 ACPI_IRQ_PIC_8259 = 0,
75 ACPI_IRQ_PIC_IOAPIC,
76 ACPI_IRQ_PIC_IOSAPIC,
77 ACPI_IRQ_PIC_COUNT
80 /* Root System Description Pointer "RSDP" structure */
81 struct ACPI_TABLE_TYPE_RSDP
83 char signature[8];
84 unsigned char checksum;
85 char oem_id[6];
86 unsigned char revision;
87 unsigned int rsdt_address;
88 /* The following fields are present only if revision >= 2 */
89 unsigned int length;
90 UQUAD xsdt_address;
91 unsigned char ext_checksum;
92 unsigned char reserved[3];
95 struct ACPI_TABLE_DEF_ENTRY_HEADER
97 unsigned char type;
98 unsigned char length;
101 #define ACPI_ENTRY_TYPE_ALL -1
103 struct ACPI_TABLE_TYPE_RSDT /* Root System Description Table "RSDT" structures */
105 struct ACPI_TABLE_DEF_HEADER header;
106 unsigned int entry[8];
109 struct ACPI_TABLE_TYPE_XSDT /* Extended System Description Table "XSDT" structures */
111 struct ACPI_TABLE_DEF_HEADER header;
112 UQUAD entry[1];
113 } __attribute__ ((packed));
115 struct ACPI_TABLE_TYPE_FADT /* Fixed ACPI Description Table "FADT" structures */
117 struct ACPI_TABLE_DEF_HEADER header;
118 unsigned int facs_addr;
119 unsigned int dsdt_addr;
120 unsigned char reserved0; /* ACPI 1.0: interrupt model. Actually never used. */
121 unsigned char pm_profile; /* ACPI >= 2.0: preferred system profile, see below */
122 unsigned short sci_int;
123 unsigned int smi_cmd;
124 unsigned char acpi_enable;
125 unsigned char acpi_disable;
126 unsigned char s4bios_req;
127 unsigned char pstate_cnt;
128 unsigned int pm1a_evt_blk;
129 unsigned int pm1b_evt_blk;
130 unsigned int pm1a_cnt_blk;
131 unsigned int pm1b_cnt_blk;
132 unsigned int pm2_cnt_blk;
133 unsigned int pm_tmr_blk;
134 unsigned int gpe0_blk;
135 unsigned int gpe1_blk;
136 unsigned char pm1_evt_len;
137 unsigned char pm1_cnt_len;
138 unsigned char pm2_cnt_len;
139 unsigned char pm_tmr_len;
140 unsigned char gpe0_blk_len;
141 unsigned char gpe1_blk_len;
142 unsigned char gpe1_base;
143 unsigned char cst_cnt;
144 unsigned short p_lvl2_lat;
145 unsigned short p_lvl3_lat;
146 unsigned short flush_size; /* Obsolete leftover from ACPI v1.0 */
147 unsigned short flush_stride; /* Obsolete leftover from ACPI v1.0 */
148 unsigned char duty_offset;
149 unsigned char duty_width;
150 unsigned char day_alarm;
151 unsigned char mon_alarm;
152 unsigned char century;
153 unsigned short pc_arch; /* ACPI >= 2.0: IA-PC architecture flags, see below */
154 unsigned char reserved1;
155 unsigned int flags; /* Fixed feature flags, see below */
156 /* The following is present in ACPI >= 2.0 */
157 struct GENERIC_ACPI_ADDR reset_reg;
158 unsigned char reset_value;
159 unsigned char reserved2[3];
160 unsigned long long x_firmware_ctrl;
161 unsigned long long x_dsdt;
162 struct GENERIC_ACPI_ADDR x_pm1a_evt_blk;
163 struct GENERIC_ACPI_ADDR x_pm1b_evt_blk;
164 struct GENERIC_ACPI_ADDR x_pm1a_cnt_blk;
165 struct GENERIC_ACPI_ADDR x_pm1b_cnt_blk;
166 struct GENERIC_ACPI_ADDR x_pm2_cnt_blk;
167 struct GENERIC_ACPI_ADDR x_pm_tmr_blk;
168 struct GENERIC_ACPI_ADDR x_gpe0_blk;
169 struct GENERIC_ACPI_ADDR x_gpe1_blk;
170 } __attribute__ ((packed));
172 /* Preferred system profiles */
173 #define FACP_PROFILE_UNSPECIFIED 0
174 #define FACP_PROFILE_DESKTOP 1
175 #define FACP_PROFILE_MOBILE 2
176 #define FACP_PROFILE_WORKSTATION 3
177 #define FACP_PROFILE_ENTERPRIZE 4
178 #define FACP_PROFILE_SOHO 5
179 #define FACP_PROFILE_APPLIANCE 6
180 #define FACP_PROFILE_PERFORMANCE 7
182 /* IA-PC architecture flags */
183 #define FACP_PC_LEGACY (1 << 0)
184 #define FACP_PC_8042 (1 << 1)
185 #define FACP_PC_NO_VGA (1 << 2)
186 #define FACP_PC_NO_MSI (1 << 3)
187 #define FACP_PCIE_ASPM (1 << 4)
189 /* Fixed feature flags */
190 #define FACP_FF_WBINVD (1 << 0)
191 #define FACP_FF_WBINVD_FLUSH (1 << 1)
192 #define FACP_FF_PROC_C1 (1 << 2)
193 #define FACP_FF_P_LVL2_UP (1 << 3)
194 #define FACP_FF_PWR_BUTTON (1 << 4)
195 #define FACP_FF_SLP_BUTTON (1 << 5)
196 #define FACP_FF_FIX_RTC (1 << 6)
197 #define FACP_FF_RTC_S4 (1 << 7)
198 #define FACP_FF_TMR_VAL_EXT (1 << 8)
199 #define FACP_FF_DCK_CAP (1 << 9)
200 #define FACP_FF_RESET_REG_SUP (1 << 10)
201 #define FACP_FF_SEALED_CASE (1 << 11)
202 #define FACP_FF_HEADLESS (1 << 12)
203 #define FACP_FF_CPU_SW_SLP (1 << 13)
204 #define FACP_FF_PCI_EXP_WAK (1 << 14)
205 #define FACP_FF_PLATFORM_CLOCK (1 << 15)
206 #define FACP_FF_S4_RTC_STS_VALID (1 << 16)
207 #define FACP_FF_REMOTE_PWRON (1 << 17)
208 #define FACP_FF_APIC_CLUSTER (1 << 18)
209 #define FACP_FF_APIC_PHYS_DEST (1 << 19)
211 struct ACPI_TABLE_TYPE_MADT /* Multiple APIC Description Table "MADT" structures */
213 struct ACPI_TABLE_DEF_HEADER header;
214 unsigned int lapic_address;
215 struct
217 unsigned int pcat_compat:1;
218 unsigned int reserved:31;
219 } flags;
220 struct ACPI_TABLE_DEF_ENTRY_HEADER entries[0];
223 enum ACPI_MADT_TYPES
225 ACPI_MADT_LAPIC = 0,
226 ACPI_MADT_IOAPIC,
227 ACPI_MADT_INT_SRC_OVR,
228 ACPI_MADT_NMI_SRC,
229 ACPI_MADT_LAPIC_NMI,
230 ACPI_MADT_LAPIC_ADDR_OVR,
231 ACPI_MADT_IOSAPIC,
232 ACPI_MADT_LSAPIC,
233 ACPI_MADT_PLAT_INT_SRC,
234 ACPI_MADT_X2APIC,
235 ACPI_MADT_X2APIC_NMI,
236 ACPI_MADT_ENTRY_COUNT
239 typedef struct
241 UWORD polarity:2; /* See below */
242 UWORD trigger:2; /* See below */
243 UWORD reserved:12;
244 } ACPI_INT_FLAGS;
246 /* Polarity and trigger mode values */
247 #define INTF_POLARITY_BUS 0 /* Bus default */
248 #define INTF_POLARITY_HIGH 1 /* Active high */
249 #define INTF_POLARITY_LOW 3 /* Active low */
250 #define INTF_TRIGGER_BUS 0 /* Bus default */
251 #define INTF_TRIGGER_EDGE 1
252 #define INTF_TRIGGER_LEVEL 3
254 struct ACPI_TABLE_TYPE_LAPIC
256 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
257 unsigned char acpi_id;
258 unsigned char id;
259 struct
261 unsigned int enabled:1;
262 unsigned int reserved:31;
263 } flags;
266 struct ACPI_TABLE_TYPE_IOAPIC
268 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
269 unsigned char id;
270 unsigned char reserved;
271 unsigned int address;
272 unsigned int global_irq_base;
275 struct ACPI_TABLE_TYPE_INT_SRCOVR
277 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
278 unsigned char bus;
279 unsigned char bus_irq;
280 unsigned int global_irq;
281 ACPI_INT_FLAGS flags;
284 struct ACPI_TABLE_TYPE_LAPIC_NMI_SRC
286 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
287 ACPI_INT_FLAGS flags;
288 unsigned int global_irq;
291 struct ACPI_TABLE_TYPE_LAPIC_NMI
293 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
294 unsigned char acpi_id;
295 ACPI_INT_FLAGS flags;
296 unsigned char lint;
297 } __attribute__ ((packed));
299 #define ACPI_ID_BROADCAST 0xFF
301 struct ACPI_TABLE_TYPE_LAPIC_ADDROVR
303 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
304 unsigned char reserved[2];
305 UQUAD address;
306 } __attribute__ ((packed));
308 struct ACPI_TABLE_TYPE_IOSAPIC
310 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
311 unsigned char id;
312 unsigned char reserved;
313 unsigned int global_irq_base;
314 UQUAD address;
317 struct ACPI_TABLE_TYPE_LSAPIC
319 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
320 unsigned char acpi_id;
321 unsigned char id;
322 unsigned char eid;
323 unsigned char reserved[3];
324 struct {
325 unsigned int enabled:1;
326 unsigned int reserved:31;
327 } flags;
330 struct ACPI_TABLE_TYPE_PLAT_INTSRC
332 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
333 ACPI_INT_FLAGS flags;
334 unsigned char type; /* See acpi_interrupt_type */
335 unsigned char id;
336 unsigned char eid;
337 unsigned char iosapic_vector;
338 unsigned int global_irq;
339 unsigned int srcflags; /* See below */
342 /* Interrupt types */
343 enum ACPI_INT_IDS
345 ACPI_INTERRUPT_PMI = 1,
346 ACPI_INTERRUPT_INIT,
347 ACPI_INTERRUPT_CPEI,
348 ACPI_INTERRUPT_COUNT
351 /* Interrupt source flags */
352 #define ACPI_CPEI_PROC_OVERRIDE (1 << 0)
354 struct ACPI_TABLE_TYPE_X2APIC
356 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
357 /* 2 bytes of padding here */
358 unsigned int id;
359 unsigned int flags;
360 unsigned int acpi_uid;
363 #define ACPI_X2APIC_ENABLED (1 << 0)
365 struct ACPI_TABLE_TYPE_X2APIC_NMI
367 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
368 ACPI_INT_FLAGS flags;
369 unsigned int acpi_uid;
370 unsigned char lint;
373 #define ACPI_UID_BROADCAST 0xFFFFFFFF
375 struct ACPI_TABLE_TYPE_HPET
377 struct ACPI_TABLE_DEF_HEADER header;
378 unsigned int id;
379 struct GENERIC_ACPI_ADDR addr;
380 unsigned char number;
381 UWORD min_tick;
382 unsigned char page_protect;
383 } __attribute__ ((packed));
385 /* ID components */
386 #define HPET_HW_REV_MASK 0x000000FF
387 #define HPET_NUM_COMPARATORS_MASK 0x00001F00
388 #define HPET_NUM_COMPARATORS_SHIFT 8
389 #define HPET_COUNTER_SIZE 0x00002000
390 #define HPET_LEGACY_REPLACEMENT 0x00008000
391 #define HPET_PCI_VENDOR_MASK 0xFFFF0000
392 #define HPET_PCI_VENDOR_SHIFT 16
394 /* page_protect components */
395 #define HPET_PAGE_PROTECT_MASK 0x0F
396 #define HPET_OEM_ATTR_MASK 0xF0
397 #define HPET_OEM_ATTR_SHIFT 4
399 #define HPET_PAGE_NONE 0
400 #define HPET_PAGE_4K 1
401 #define HPET_PAGE_64K 2
404 System Resource Affinity Table (SRAT) [ see http://www.microsoft.com/hwdev/design/srat.htm ]
407 struct ACPI_TABLE_TYPE_SRAT
409 struct ACPI_TABLE_DEF_HEADER header;
410 unsigned int table_revision;
411 UQUAD reserved;
414 enum ACPI_SRAT_ENTRY_IDS
416 ACPI_SRAT_PROCESSOR_AFFINITY = 0,
417 ACPI_SRAT_MEMORY_AFFINITY,
418 ACPI_SRAT_ENTRY_COUNT
421 struct ACPI_TABLE_AFFIN_PROCESSOR
423 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
424 unsigned char proximity_domain;
425 unsigned char apic_id;
426 struct
428 unsigned int enabled:1;
429 unsigned int reserved:31;
430 } flags;
431 unsigned char lsapic_eid;
432 unsigned char reserved[7];
435 struct ACPI_TABLE_AFFIN_MEMORY
437 struct ACPI_TABLE_DEF_ENTRY_HEADER header;
438 unsigned char proximity_domain;
439 unsigned char reserved1[5];
440 unsigned int base_addr_lo;
441 unsigned int base_addr_hi;
442 unsigned int length_lo;
443 unsigned int length_hi;
444 unsigned int memory_type; /* See acpi_address_range_id */
445 struct
447 unsigned int enabled:1;
448 unsigned int hot_pluggable:1;
449 unsigned int reserved:30;
450 } flags;
451 UQUAD reserved2;
454 enum acpi_address_range_id
456 ACPI_ADDRESS_RANGE_MEMORY = 1,
457 ACPI_ADDRESS_RANGE_RESERVED = 2,
458 ACPI_ADDRESS_RANGE_ACPI = 3,
459 ACPI_ADDRESS_RANGE_NVS = 4,
460 ACPI_ADDRESS_RANGE_COUNT
464 System Locality Information Table (SLIT) [ see http://devresource.hp.com/devresource/docs/techpapers/ia64/slit.pdf ]
467 struct ACPI_TABLE_TYPE_SLIT
469 struct ACPI_TABLE_DEF_HEADER header;
470 UQUAD localities;
471 unsigned char entry[1]; /* real size = localities^2 */
474 struct ACPI_TABLE_TYPE_SBST /* Smart Battery Description Table (SBST) */
476 struct ACPI_TABLE_DEF_HEADER header;
477 unsigned int warning; /* Warn user */
478 unsigned int low; /* Critical sleep */
479 unsigned int critical; /* Critical shutdown */
482 struct ACPI_TABLE_TYPE_ECDT /* Embedded Controller Boot Resources Table (ECDT) */
484 struct ACPI_TABLE_DEF_HEADER header;
485 struct GENERIC_ACPI_ADDR ec_control;
486 struct GENERIC_ACPI_ADDR ec_data;
487 unsigned int uid;
488 unsigned char gpe_bit;
489 char ec_id[0];
493 * acpi.resource base.
494 * For a casual user it's actually black box. Use API to access the data.
495 * These pointers are provided for diagnostics purposes only.
497 struct ACPIBase
499 struct Node ACPIB_Node;
501 struct ACPI_TABLE_TYPE_RSDP *ACPIB_RSDP_Addr; /* Supervisor-only!!! */
502 struct ACPI_TABLE_DEF_HEADER *ACPIB_SDT_Addr; /* Raw XSDT or RSDT pointer */
503 int ACPIB_SDT_Count; /* These two are private. Do not use! */
504 struct ACPI_TABLE_DEF_HEADER **ACPIB_SDT_Entry;
505 char ACPI_OEM_ID[6]; /* Cached from RSDP */
506 unsigned char ACPI_Revision;
507 /*..*/
508 APTR ACPIB_ACPI_Data; /* Base address of acpi data block */
509 APTR ACPIB_ACPI_Data_End;
510 APTR ACPIB_ACPI_NVM; /* Base address of acpi data block */
512 int ACPIB_ACPI_IRQ;
514 int ACPIB_ACPI_HT;
517 #endif /* __AROS_ACPI_H__ */