Annotation of sys/dev/acpi/acpireg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: acpireg.h,v 1.12 2006/12/12 18:07:25 mk Exp $ */
2: /*
3: * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
4: * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org>
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18:
19: #ifndef _DEV_ACPI_ACPIREG_H_
20: #define _DEV_ACPI_ACPIREG_H_
21:
22: /* Root System Descriptor Pointer */
23: struct acpi_rsdp1 {
24: u_int8_t signature[8];
25: #define RSDP_SIG "RSD PTR "
26: #define rsdp_signaturee rsdp1.signature
27: u_int8_t checksum; /* make sum == 0 */
28: #define rsdp_checksum rsdp1.checksum
29: u_int8_t oemid[6];
30: #define rsdp_oemid rsdp1.oemid
31: u_int8_t revision; /* 0 for 1, 2 for 2 */
32: #define rsdp_revision rsdp1.revision
33: u_int32_t rsdt; /* physical */
34: #define rsdp_rsdt rsdp1.rsdt
35: } __packed;
36:
37: struct acpi_rsdp {
38: struct acpi_rsdp1 rsdp1;
39: /*
40: * The following values are only valid
41: * when rsdp_revision == 2
42: */
43: u_int32_t rsdp_length; /* length of rsdp */
44: u_int64_t rsdp_xsdt; /* physical */
45: u_int8_t rsdp_extchecksum; /* entire table */
46: u_int8_t rsdp_reserved[3]; /* must be zero */
47: } __packed;
48:
49: struct acpi_table_header {
50: u_int8_t signature[4];
51: #define hdr_signature hdr.signature
52: u_int32_t length;
53: #define hdr_length hdr.length
54: u_int8_t revision;
55: #define hdr_revision hdr.revision
56: u_int8_t checksum;
57: #define hdr_checksum hdr.checksum
58: u_int8_t oemid[6];
59: #define hdr_oemid hdr.oemid
60: u_int8_t oemtableid[8];
61: #define hdr_oemtableid hdr.oemtableid
62: u_int32_t oemrevision;
63: #define hdr_oemrevision hdr.oemrevision
64: u_int8_t aslcompilerid[4];
65: #define hdr_aslcompilerid hdr.aslcompilerid
66: u_int32_t aslcompilerrevision;
67: #define hdr_aslcompilerrevision hdr.aslcompilerrevision
68: } __packed;
69:
70: struct acpi_rsdt {
71: struct acpi_table_header hdr;
72: #define RSDT_SIG "RSDT"
73: u_int32_t table_offsets[1];
74: } __packed;
75:
76: struct acpi_xsdt {
77: struct acpi_table_header hdr;
78: #define XSDT_SIG "XSDT"
79: u_int64_t table_offsets[1];
80: } __packed;
81:
82: struct acpi_gas {
83: u_int8_t address_space_id;
84: #define GAS_SYSTEM_MEMORY 0
85: #define GAS_SYSTEM_IOSPACE 1
86: #define GAS_PCI_CFG_SPACE 2
87: #define GAS_EMBEDDED 3
88: #define GAS_SMBUS 4
89: #define GAS_FUNCTIONAL_FIXED 127
90: u_int8_t register_bit_width;
91: u_int8_t register_bit_offset;
92: u_int8_t access_size;
93: #define GAS_ACCESS_UNDEFINED 0
94: #define GAS_ACCESS_BYTE 1
95: #define GAS_ACCESS_WORD 2
96: #define GAS_ACCESS_DWORD 3
97: #define GAS_ACCESS_QWORD 4
98: u_int64_t address;
99: } __packed;
100:
101: struct acpi_fadt {
102: struct acpi_table_header hdr;
103: #define FADT_SIG "FACP"
104: u_int32_t firmware_ctl; /* phys addr FACS */
105: u_int32_t dsdt; /* phys addr DSDT */
106: u_int8_t int_model; /* interrupt model (hdr_revision < 3) */
107: #define FADT_INT_DUAL_PIC 0
108: #define FADT_INT_MULTI_APIC 1
109: u_int8_t pm_profile; /* power mgmt profile */
110: #define FADT_PM_UNSPEC 0
111: #define FADT_PM_DESKTOP 1
112: #define FADT_PM_MOBILE 2
113: #define FADT_PM_WORKSTATION 3
114: #define FADT_PM_ENT_SERVER 4
115: #define FADT_PM_SOHO_SERVER 5
116: #define FADT_PM_APPLIANCE 6
117: #define FADT_PM_PERF_SERVER 7
118: u_int16_t sci_int; /* SCI interrupt */
119: u_int32_t smi_cmd; /* SMI command port */
120: u_int8_t acpi_enable; /* value to enable */
121: u_int8_t acpi_disable; /* value to disable */
122: u_int8_t s4bios_req; /* value for S4 */
123: u_int8_t pstate_cnt; /* value for performance (hdr_revision > 2) */
124: u_int32_t pm1a_evt_blk; /* power management 1a */
125: u_int32_t pm1b_evt_blk; /* power mangement 1b */
126: u_int32_t pm1a_cnt_blk; /* pm control 1a */
127: u_int32_t pm1b_cnt_blk; /* pm control 1b */
128: u_int32_t pm2_cnt_blk; /* pm control 2 */
129: u_int32_t pm_tmr_blk;
130: u_int32_t gpe0_blk;
131: u_int32_t gpe1_blk;
132: u_int8_t pm1_evt_len;
133: u_int8_t pm1_cnt_len;
134: u_int8_t pm2_cnt_len;
135: u_int8_t pm_tmr_len;
136: u_int8_t gpe0_blk_len;
137: u_int8_t gpe1_blk_len;
138: u_int8_t gpe1_base;
139: u_int8_t cst_cnt; /* (hdr_revision > 2) */
140: u_int16_t p_lvl2_lat;
141: u_int16_t p_lvl3_lat;
142: u_int16_t flush_size;
143: u_int16_t flush_stride;
144: u_int8_t duty_offset;
145: u_int8_t duty_width;
146: u_int8_t day_alrm;
147: u_int8_t mon_alrm;
148: u_int8_t century;
149: u_int16_t iapc_boot_arch; /* (hdr_revision > 2) */
150: #define FADT_LEGACY_DEVICES 0x0001 /* Legacy devices supported */
151: #define FADT_i8042 0x0002 /* Keyboard controller present */
152: #define FADT_NO_VGA 0x0004 /* Do not probe VGA */
153: u_int8_t reserved1;
154: u_int32_t flags;
155: #define FADT_WBINVD 0x00000001
156: #define FADT_WBINVD_FLUSH 0x00000002
157: #define FADT_PROC_C1 0x00000004
158: #define FADT_P_LVL2_UP 0x00000008
159: #define FADT_PWR_BUTTON 0x00000010
160: #define FADT_SLP_BUTTON 0x00000020
161: #define FADT_FIX_RTC 0x00000040
162: #define FADT_RTC_S4 0x00000080
163: #define FADT_TMR_VAL_EXT 0x00000100
164: #define FADT_DCK_CAP 0x00000200
165: #define FADT_RESET_REG_SUP 0x00000400
166: #define FADT_SEALED_CASE 0x00000800
167: #define FADT_HEADLESS 0x00001000
168: #define FADT_CPU_SW_SLP 0x00002000
169: #define FADT_PCI_EXP_WAK 0x00004000
170: #define FADT_USE_PLATFORM_CLOCK 0x00008000
171: #define FADT_S4_RTC_STS_VALID 0x00010000
172: #define FADT_REMOTE_POWER_ON_CAPABLE 0x00020000
173: #define FADT_FORCE_APIC_CLUSTER_MODEL 0x00040000
174: #define FADT_FORCE_APIC_PHYS_DEST_MODE 0x00080000
175: /*
176: * Following values only exist when rev > 1
177: * If the extended addresses exists, they
178: * must be used in preferense to the non-
179: * extended values above
180: */
181: struct acpi_gas reset_reg;
182: u_int8_t reset_value;
183: u_int8_t reserved2a;
184: u_int8_t reserved2b;
185: u_int8_t reserved2c;
186: u_int64_t x_firmware_ctl;
187: u_int64_t x_dsdt;
188: struct acpi_gas x_pm1a_evt_blk;
189: struct acpi_gas x_pm1b_evt_blk;
190: struct acpi_gas x_pm1a_cnt_blk;
191: struct acpi_gas x_pm1b_cnt_blk;
192: struct acpi_gas x_pm2_cnt_blk;
193: struct acpi_gas x_pm_tmr_blk;
194: struct acpi_gas x_gpe0_blk;
195: struct acpi_gas x_gpe1_blk;
196: } __packed;
197:
198: struct acpi_dsdt {
199: struct acpi_table_header hdr;
200: #define DSDT_SIG "DSDT"
201: u_int8_t aml[1];
202: } __packed;
203:
204: struct acpi_ssdt {
205: struct acpi_table_header hdr;
206: #define SSDT_SIG "SSDT"
207: u_int8_t aml[1];
208: } __packed;
209:
210: /*
211: * Table deprecated by ACPI 2.0
212: */
213: struct acpi_psdt {
214: struct acpi_table_header hdr;
215: #define PSDT_SIG "PSDT"
216: } __packed;
217:
218: struct acpi_madt {
219: struct acpi_table_header hdr;
220: #define MADT_SIG "APIC"
221: u_int32_t local_apic_address;
222: u_int32_t flags;
223: #define ACPI_APIC_PCAT_COMPAT 0x00000001
224: } __packed;
225:
226: struct acpi_madt_lapic {
227: u_int8_t apic_type;
228: #define ACPI_MADT_LAPIC 0
229: u_int8_t length;
230: u_int8_t acpi_proc_id;
231: u_int8_t apic_id;
232: u_int32_t flags;
233: #define ACPI_PROC_ENABLE 0x00000001
234: } __packed;
235:
236: struct acpi_madt_ioapic {
237: u_int8_t apic_type;
238: #define ACPI_MADT_IOAPIC 1
239: u_int8_t length;
240: u_int8_t acpi_ioapic_id;
241: u_int8_t reserved;
242: u_int32_t address;
243: u_int32_t global_int_base;
244: } __packed;
245:
246: struct acpi_madt_override {
247: u_int8_t apic_type;
248: #define ACPI_MADT_OVERRIDE 2
249: u_int8_t length;
250: u_int8_t bus;
251: #define ACPI_OVERRIDE_BUS_ISA 0
252: u_int8_t source;
253: u_int32_t global_int;
254: u_int16_t flags;
255: #define ACPI_OVERRIDE_POLARITY_BITS 0x3
256: #define ACPI_OVERRIDE_POLARITY_BUS 0x0
257: #define ACPI_OVERRIDE_POLARITY_HIGH 0x1
258: #define ACPI_OVERRIDE_POLARITY_LOW 0x3
259: #define ACPI_OVERRIDE_TRIGGER_BITS 0xc
260: #define ACPI_OVERRIDE_TRIGGER_BUS 0x0
261: #define ACPI_OVERRIDE_TRIGGER_EDGE 0x4
262: #define ACPI_OVERRIDE_TRIGGER_LEVEL 0xc
263: } __packed;
264:
265: struct acpi_madt_nmi {
266: u_int8_t apic_type;
267: #define ACPI_MADT_NMI 3
268: u_int8_t length;
269: u_int16_t flags; /* Same flags as acpi_madt_override */
270: u_int32_t global_int;
271: } __packed;
272:
273: struct acpi_madt_lapic_nmi {
274: u_int8_t apic_type;
275: #define ACPI_MADT_LAPIC_NMI 4
276: u_int8_t length;
277: u_int8_t acpi_proc_id;
278: u_int16_t flags; /* Same flags as acpi_madt_override */
279: u_int8_t local_apic_lint;
280: } __packed;
281:
282: struct acpi_madt_lapic_override {
283: u_int8_t apic_type;
284: #define ACPI_MADT_LAPIC_OVERRIDE 5
285: u_int8_t length;
286: u_int16_t reserved;
287: u_int64_t lapic_address;
288: } __packed;
289:
290: struct acpi_madt_io_sapic {
291: u_int8_t apic_type;
292: #define ACPI_MADT_IO_SAPIC 6
293: u_int8_t length;
294: u_int8_t iosapic_id;
295: u_int8_t reserved;
296: u_int32_t global_int_base;
297: u_int64_t iosapic_address;
298: } __packed;
299:
300: struct acpi_madt_local_sapic {
301: u_int8_t apic_type;
302: #define ACPI_MADT_LOCAL_SAPIC 7
303: u_int8_t length;
304: u_int8_t acpi_proc_id;
305: u_int8_t local_sapic_id;
306: u_int8_t local_sapic_eid;
307: u_int8_t reserved[3];
308: u_int32_t flags; /* Same flags as acpi_madt_lapic */
309: u_int32_t acpi_proc_uid;
310: u_int8_t acpi_proc_uid_string[1];
311: } __packed;
312:
313: struct acpi_madt_platform_int {
314: u_int8_t apic_type;
315: #define ACPI_MADT_PLATFORM_INT 8
316: u_int8_t length;
317: u_int16_t flags; /* Same flags as acpi_madt_override */
318: u_int8_t int_type;
319: #define ACPI_MADT_PLATFORM_PMI 1
320: #define ACPI_MADT_PLATFORM_INIT 2
321: #define ACPI_MADT_PLATFORM_CORR_ERROR 3
322: u_int8_t proc_id;
323: u_int8_t proc_eid;
324: u_int8_t io_sapic_vec;
325: u_int32_t global_int;
326: u_int32_t platform_int_flags;
327: #define ACPI_MADT_PLATFORM_CPEI 0x00000001
328: } __packed;
329:
330: union acpi_madt_entry {
331: struct acpi_madt_lapic madt_lapic;
332: struct acpi_madt_ioapic madt_ioapic;
333: struct acpi_madt_override madt_override;
334: struct acpi_madt_nmi madt_nmi;
335: struct acpi_madt_lapic_nmi madt_lapic_nmi;
336: struct acpi_madt_lapic_override madt_lapic_override;
337: struct acpi_madt_io_sapic madt_io_sapic;
338: struct acpi_madt_local_sapic madt_local_sapic;
339: struct acpi_madt_platform_int madt_platform_int;
340: } __packed;
341:
342: struct acpi_sbst {
343: struct acpi_table_header hdr;
344: #define SBST_SIG "SBST"
345: u_int32_t warning_energy_level;
346: u_int32_t low_energy_level;
347: u_int32_t critical_energy_level;
348: } __packed;
349:
350: struct acpi_ecdt {
351: struct acpi_table_header hdr;
352: #define ECDT_SIG "ECDT"
353: struct acpi_gas ec_control;
354: struct acpi_gas ec_data;
355: u_int32_t uid;
356: u_int8_t gpe_bit;
357: u_int8_t ec_id[1];
358: } __packed;
359:
360: struct acpi_srat {
361: struct acpi_table_header hdr;
362: #define SRAT_SIG "SRAT"
363: u_int32_t reserved1;
364: u_int64_t reserved2;
365: } __packed;
366:
367: struct acpi_slit {
368: struct acpi_table_header hdr;
369: #define SLIT_SIG "SLIT"
370: u_int64_t number_of_localities;
371: } __packed;
372:
373: struct acpi_hpet {
374: struct acpi_table_header hdr;
375: #define HPET_SIG "HPET"
376: u_int32_t event_timer_block_id;
377: struct acpi_gas base_address;
378: u_int8_t hpet_number;
379: u_int16_t main_counter_min_clock_tick;
380: u_int8_t page_protection;
381: } __packed;
382:
383: struct acpi_facs {
384: u_int8_t signature[4];
385: #define FACS_SIG "FACS"
386: u_int32_t length;
387: u_int32_t hardware_signature;
388: u_int32_t wakeup_vector;
389: u_int32_t global_lock;
390: #define FACS_LOCK_PENDING 0x00000001
391: #define FACS_LOCK_OWNED 0x00000002
392: u_int32_t flags;
393: #define FACS_S4BIOS_F 0x00000001 /* S4BIOS_REQ supported */
394: struct acpi_gas x_wakeup_vector;
395: u_int8_t version;
396: u_int8_t reserved[31];
397: } __packed;
398:
399: #define ACPI_FREQUENCY 3579545 /* Per ACPI spec */
400:
401: /*
402: * PCI Configuration space
403: */
404: #define ACPI_PCI_BUS(addr) (u_int16_t)((addr) >> 48)
405: #define ACPI_PCI_DEV(addr) (u_int16_t)((addr) >> 32)
406: #define ACPI_PCI_FN(addr) (u_int16_t)((addr) >> 16)
407: #define ACPI_PCI_REG(addr) (u_int16_t)(addr)
408: #define ACPI_PCI_ADDR(b,d,f,r) ((u_int64_t)(b)<<48LL | (u_int64_t)(d)<<32LL | (f)<<16LL | (r))
409:
410: /*
411: * PM1 Status Registers Fixed Hardware Feature Status Bits
412: */
413: #define ACPI_PM1_STATUS 0x00
414: #define ACPI_PM1_TMR_STS 0x0001
415: #define ACPI_PM1_BM_STS 0x0010
416: #define ACPI_PM1_GBL_STS 0x0020
417: #define ACPI_PM1_PWRBTN_STS 0x0100
418: #define ACPI_PM1_SLPBTN_STS 0x0200
419: #define ACPI_PM1_RTC_STS 0x0400
420: #define ACPI_PM1_PCIEXP_WAKE_STS 0x4000
421: #define ACPI_PM1_WAK_STS 0x8000
422:
423: /*
424: * PM1 Enable Registers
425: */
426: #define ACPI_PM1_ENABLE 0x02
427: #define ACPI_PM1_TMR_EN 0x0001
428: #define ACPI_PM1_GBL_EN 0x0020
429: #define ACPI_PM1_PWRBTN_EN 0x0100
430: #define ACPI_PM1_SLPBTN_EN 0x0200
431: #define ACPI_PM1_RTC_EN 0x0400
432: #define ACPI_PM1_PCIEXP_WAKE_DIS 0x4000
433:
434: /*
435: * PM1 Control Registers
436: */
437: #define ACPI_PM1_CONTROL 0x00
438: #define ACPI_PM1_SCI_EN 0x0001
439: #define ACPI_PM1_BM_RLD 0x0002
440: #define ACPI_PM1_GBL_RLS 0x0004
441: #define ACPI_PM1_SLP_TYPX(x) ((x) << 10)
442: #define ACPI_PM1_SLP_TYPX_MASK 0x1c00
443: #define ACPI_PM1_SLP_EN 0x2000
444:
445: /*
446: * Sleeping States
447: */
448: #define ACPI_STATE_S0 0
449: #define ACPI_STATE_S1 1
450: #define ACPI_STATE_S2 2
451: #define ACPI_STATE_S3 3
452: #define ACPI_STATE_S4 4
453: #define ACPI_STATE_S5 5
454:
455: /*
456: * ACPI Device IDs
457: */
458: #define ACPI_DEV_TIM "PNP0100" /* System timer */
459: #define ACPI_DEV_ACPI "PNP0C08" /* ACPI device */
460: #define ACPI_DEV_PCIB "PNP0A03" /* PCI bus */
461: #define ACPI_DEV_GISAB "PNP0A05" /* Generic ISA Bus */
462: #define ACPI_DEV_EIOB "PNP0A06" /* Extended I/O Bus */
463: #define ACPI_DEV_MR "PNP0C02" /* Motherboard resources */
464: #define ACPI_DEV_NPROC "PNP0C04" /* Numeric data processor */
465: #define ACPI_DEV_CS "PNP0C08" /* ACPI-Compliant System */
466: #define ACPI_DEV_ECD "PNP0C09" /* Embedded Controller Device */
467: #define ACPI_DEV_CMB "PNP0C0A" /* Control Method Battery */
468: #define ACPI_DEV_FAN "PNP0C0B" /* Fan Device */
469: #define ACPI_DEV_PBD "PNP0C0C" /* Power Button Device */
470: #define ACPI_DEV_LD "PNP0C0D" /* Lid Device */
471: #define ACPI_DEV_SBD "PNP0C0E" /* Sleep Button Device */
472: #define ACPI_DEV_PILD "PNP0C0F" /* PCI Interrupt Link Device */
473: #define ACPI_DEV_MEMD "PNP0C80" /* Memory Device */
474: #define ACPI_DEV_SHC "ACPI0001" /* SMBus 1.0 Host Controller */
475: #define ACPI_DEV_SMS1 "ACPI0002" /* Smart Battery Subsystem */
476: #define ACPI_DEV_AC "ACPI0003" /* AC Device */
477: #define ACPI_DEV_MD "ACPI0004" /* Module Device */
478: #define ACPI_DEV_SMS2 "ACPI0005" /* SMBus 2.0 Host Controller */
479: #define ACPI_DEV_GBD "ACPI0006" /* GPE Block Device */
480: #define ACPI_DEV_PD "ACPI0007" /* Processor Device */
481: #define ACPI_DEV_ALSD "ACPI0008" /* Ambient Light Sensor Device */
482: #define ACPI_DEV_IOXA "ACPI0009" /* IO x APIC Device */
483: #define ACPI_DEV_IOA "ACPI000A" /* IO APIC Device */
484: #define ACPI_DEV_IOSA "ACPI000B" /* IO SAPIC Device */
485: #define ACPI_DEV_THZ "THERMALZONE" /* Thermal Zone */
486: #define ACPI_DEV_FFB "FIXEDBUTTON" /* Fixed Feature Button */
487:
488: #endif /* !_DEV_ACPI_ACPIREG_H_ */
CVSweb