xref: /linux/include/acpi/actbl.h (revision 20d0021394c1b070bf04b22c5bc8fdb437edd4c5)
1 /******************************************************************************
2  *
3  * Name: actbl.h - Table data structures defined in ACPI specification
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2005, R. Byron Moore
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #ifndef __ACTBL_H__
45 #define __ACTBL_H__
46 
47 
48 /*
49  *  Values for description table header signatures
50  */
51 #define RSDP_NAME               "RSDP"
52 #define RSDP_SIG                "RSD PTR "  /* RSDT Pointer signature */
53 #define APIC_SIG                "APIC"      /* Multiple APIC Description Table */
54 #define DSDT_SIG                "DSDT"      /* Differentiated System Description Table */
55 #define FADT_SIG                "FACP"      /* Fixed ACPI Description Table */
56 #define FACS_SIG                "FACS"      /* Firmware ACPI Control Structure */
57 #define PSDT_SIG                "PSDT"      /* Persistent System Description Table */
58 #define RSDT_SIG                "RSDT"      /* Root System Description Table */
59 #define XSDT_SIG                "XSDT"      /* Extended  System Description Table */
60 #define SSDT_SIG                "SSDT"      /* Secondary System Description Table */
61 #define SBST_SIG                "SBST"      /* Smart Battery Specification Table */
62 #define SPIC_SIG                "SPIC"      /* IOSAPIC table */
63 #define BOOT_SIG                "BOOT"      /* Boot table */
64 
65 
66 #define GL_OWNED                0x02        /* Ownership of global lock is bit 1 */
67 
68 
69 /*
70  * Common table types.  The base code can remain
71  * constant if the underlying tables are changed
72  */
73 #define RSDT_DESCRIPTOR         struct rsdt_descriptor_rev2
74 #define XSDT_DESCRIPTOR         struct xsdt_descriptor_rev2
75 #define FACS_DESCRIPTOR         struct facs_descriptor_rev2
76 #define FADT_DESCRIPTOR         struct fadt_descriptor_rev2
77 
78 
79 #pragma pack(1)
80 
81 /*
82  * ACPI Version-independent tables
83  *
84  * NOTE: The tables that are specific to ACPI versions (1.0, 2.0, etc.)
85  * are in separate files.
86  */
87 struct rsdp_descriptor         /* Root System Descriptor Pointer */
88 {
89 	char                            signature [8];          /* ACPI signature, contains "RSD PTR " */
90 	u8                              checksum;               /* To make sum of struct == 0 */
91 	char                            oem_id [6];             /* OEM identification */
92 	u8                              revision;               /* Must be 0 for 1.0, 2 for 2.0 */
93 	u32                             rsdt_physical_address;  /* 32-bit physical address of RSDT */
94 	u32                             length;                 /* XSDT Length in bytes including hdr */
95 	u64                             xsdt_physical_address;  /* 64-bit physical address of XSDT */
96 	u8                              extended_checksum;      /* Checksum of entire table */
97 	char                            reserved [3];           /* Reserved field must be 0 */
98 };
99 
100 
101 struct acpi_common_facs          /* Common FACS for internal use */
102 {
103 	u32                             *global_lock;
104 	u64                             *firmware_waking_vector;
105 	u8                              vector_width;
106 };
107 
108 
109 #define ACPI_TABLE_HEADER_DEF   /* ACPI common table header */ \
110 	char                            signature [4];          /* ACPI signature (4 ASCII characters) */\
111 	u32                             length;                 /* Length of table, in bytes, including header */\
112 	u8                              revision;               /* ACPI Specification minor version # */\
113 	u8                              checksum;               /* To make sum of entire table == 0 */\
114 	char                            oem_id [6];             /* OEM identification */\
115 	char                            oem_table_id [8];       /* OEM table identification */\
116 	u32                             oem_revision;           /* OEM revision number */\
117 	char                            asl_compiler_id [4];    /* ASL compiler vendor ID */\
118 	u32                             asl_compiler_revision;  /* ASL compiler revision number */
119 
120 
121 struct acpi_table_header         /* ACPI common table header */
122 {
123 	ACPI_TABLE_HEADER_DEF
124 };
125 
126 
127 /*
128  * MADT values and structures
129  */
130 
131 /* Values for MADT PCATCompat */
132 
133 #define DUAL_PIC                0
134 #define MULTIPLE_APIC           1
135 
136 /* Master MADT */
137 
138 struct multiple_apic_table
139 {
140 	ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
141 	u32                             local_apic_address;     /* Physical address of local APIC */
142 	u32                             PCATcompat      : 1;    /* A one indicates system also has dual 8259s */
143 	u32                             reserved1       : 31;
144 };
145 
146 /* Values for Type in APIC_HEADER_DEF */
147 
148 #define APIC_PROCESSOR          0
149 #define APIC_IO                 1
150 #define APIC_XRUPT_OVERRIDE     2
151 #define APIC_NMI                3
152 #define APIC_LOCAL_NMI          4
153 #define APIC_ADDRESS_OVERRIDE   5
154 #define APIC_IO_SAPIC           6
155 #define APIC_LOCAL_SAPIC        7
156 #define APIC_XRUPT_SOURCE       8
157 #define APIC_RESERVED           9           /* 9 and greater are reserved */
158 
159 /*
160  * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE)
161  */
162 #define APIC_HEADER_DEF                     /* Common APIC sub-structure header */\
163 	u8                              type; \
164 	u8                              length;
165 
166 struct apic_header
167 {
168 	APIC_HEADER_DEF
169 };
170 
171 /* Values for MPS INTI flags */
172 
173 #define POLARITY_CONFORMS       0
174 #define POLARITY_ACTIVE_HIGH    1
175 #define POLARITY_RESERVED       2
176 #define POLARITY_ACTIVE_LOW     3
177 
178 #define TRIGGER_CONFORMS        0
179 #define TRIGGER_EDGE            1
180 #define TRIGGER_RESERVED        2
181 #define TRIGGER_LEVEL           3
182 
183 /* Common flag definitions */
184 
185 #define MPS_INTI_FLAGS \
186 	u16                             polarity        : 2;    /* Polarity of APIC I/O input signals */\
187 	u16                             trigger_mode    : 2;    /* Trigger mode of APIC input signals */\
188 	u16                             reserved1       : 12;   /* Reserved, must be zero */
189 
190 #define LOCAL_APIC_FLAGS \
191 	u32                             processor_enabled: 1;   /* Processor is usable if set */\
192 	u32                             reserved2       : 31;   /* Reserved, must be zero */
193 
194 /* Sub-structures for MADT */
195 
196 struct madt_processor_apic
197 {
198 	APIC_HEADER_DEF
199 	u8                              processor_id;           /* ACPI processor id */
200 	u8                              local_apic_id;          /* Processor's local APIC id */
201 	LOCAL_APIC_FLAGS
202 };
203 
204 struct madt_io_apic
205 {
206 	APIC_HEADER_DEF
207 	u8                              io_apic_id;             /* I/O APIC ID */
208 	u8                              reserved;               /* Reserved - must be zero */
209 	u32                             address;                /* APIC physical address */
210 	u32                             interrupt;              /* Global system interrupt where INTI
211 			  * lines start */
212 };
213 
214 struct madt_interrupt_override
215 {
216 	APIC_HEADER_DEF
217 	u8                              bus;                    /* 0 - ISA */
218 	u8                              source;                 /* Interrupt source (IRQ) */
219 	u32                             interrupt;              /* Global system interrupt */
220 	MPS_INTI_FLAGS
221 };
222 
223 struct madt_nmi_source
224 {
225 	APIC_HEADER_DEF
226 	MPS_INTI_FLAGS
227 	u32                             interrupt;              /* Global system interrupt */
228 };
229 
230 struct madt_local_apic_nmi
231 {
232 	APIC_HEADER_DEF
233 	u8                              processor_id;           /* ACPI processor id */
234 	MPS_INTI_FLAGS
235 	u8                              lint;                   /* LINTn to which NMI is connected */
236 };
237 
238 struct madt_address_override
239 {
240 	APIC_HEADER_DEF
241 	u16                             reserved;               /* Reserved - must be zero */
242 	u64                             address;                /* APIC physical address */
243 };
244 
245 struct madt_io_sapic
246 {
247 	APIC_HEADER_DEF
248 	u8                              io_sapic_id;            /* I/O SAPIC ID */
249 	u8                              reserved;               /* Reserved - must be zero */
250 	u32                             interrupt_base;         /* Glocal interrupt for SAPIC start */
251 	u64                             address;                /* SAPIC physical address */
252 };
253 
254 struct madt_local_sapic
255 {
256 	APIC_HEADER_DEF
257 	u8                              processor_id;           /* ACPI processor id */
258 	u8                              local_sapic_id;         /* SAPIC ID */
259 	u8                              local_sapic_eid;        /* SAPIC EID */
260 	u8                              reserved [3];           /* Reserved - must be zero */
261 	LOCAL_APIC_FLAGS
262 	u32                             processor_uID;          /* Numeric UID - ACPI 3.0 */
263 	char                            processor_uIDstring[1]; /* String UID  - ACPI 3.0 */
264 };
265 
266 struct madt_interrupt_source
267 {
268 	APIC_HEADER_DEF
269 	MPS_INTI_FLAGS
270 	u8                              interrupt_type;         /* 1=PMI, 2=INIT, 3=corrected */
271 	u8                              processor_id;           /* Processor ID */
272 	u8                              processor_eid;          /* Processor EID */
273 	u8                              io_sapic_vector;        /* Vector value for PMI interrupts */
274 	u32                             interrupt;              /* Global system interrupt */
275 	u32                             flags;                  /* Interrupt Source Flags */
276 };
277 
278 
279 /*
280  * Smart Battery
281  */
282 struct smart_battery_table
283 {
284 	ACPI_TABLE_HEADER_DEF
285 	u32                             warning_level;
286 	u32                             low_level;
287 	u32                             critical_level;
288 };
289 
290 
291 #pragma pack()
292 
293 
294 /*
295  * ACPI Table information.  We save the table address, length,
296  * and type of memory allocation (mapped or allocated) for each
297  * table for 1) when we exit, and 2) if a new table is installed
298  */
299 #define ACPI_MEM_NOT_ALLOCATED  0
300 #define ACPI_MEM_ALLOCATED      1
301 #define ACPI_MEM_MAPPED         2
302 
303 /* Definitions for the Flags bitfield member of struct acpi_table_support */
304 
305 #define ACPI_TABLE_SINGLE       0x00
306 #define ACPI_TABLE_MULTIPLE     0x01
307 #define ACPI_TABLE_EXECUTABLE   0x02
308 
309 #define ACPI_TABLE_ROOT         0x00
310 #define ACPI_TABLE_PRIMARY      0x10
311 #define ACPI_TABLE_SECONDARY    0x20
312 #define ACPI_TABLE_ALL          0x30
313 #define ACPI_TABLE_TYPE_MASK    0x30
314 
315 /* Data about each known table type */
316 
317 struct acpi_table_support
318 {
319 	char                            *name;
320 	char                            *signature;
321 	void                            **global_ptr;
322 	u8                              sig_length;
323 	u8                              flags;
324 };
325 
326 
327 /*
328  * Get the ACPI version-specific tables
329  */
330 #include "actbl1.h"   /* Acpi 1.0 table definitions */
331 #include "actbl2.h"   /* Acpi 2.0 table definitions */
332 
333 extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1,
334 			    * needed for certain workarounds */
335 
336 #pragma pack(1)
337 /*
338  * High performance timer
339  */
340 struct hpet_table
341 {
342 	ACPI_TABLE_HEADER_DEF
343 	u32                             hardware_id;
344 	struct acpi_generic_address     base_address;
345 	u8                              hpet_number;
346 	u16                             clock_tick;
347 	u8                              attributes;
348 };
349 
350 #pragma pack()
351 
352 #endif /* __ACTBL_H__ */
353