actbl.h 14.7 KB
Newer Older
L
Linus Torvalds 已提交
1 2
/******************************************************************************
 *
B
Bob Moore 已提交
3
 * Name: actbl.h - Basic ACPI Table Definitions
L
Linus Torvalds 已提交
4 5 6 7
 *
 *****************************************************************************/

/*
L
Len Brown 已提交
8
 * Copyright (C) 2000 - 2008, Intel Corp.
L
Linus Torvalds 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 *    substantially similar to the "NO WARRANTY" disclaimer below
 *    ("Disclaimer") and any redistribution must be conditioned upon
 *    including a substantially similar Disclaimer requirement for further
 *    binary redistribution.
 * 3. Neither the names of the above-listed copyright holders nor the names
 *    of any contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * NO WARRANTY
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 */

#ifndef __ACTBL_H__
#define __ACTBL_H__

B
Bob Moore 已提交
47
/*
B
Bob Moore 已提交
48 49
 * Values for description table header signatures. Useful because they make
 * it more difficult to inadvertently type in the wrong signature.
L
Linus Torvalds 已提交
50
 */
51 52 53 54 55 56 57 58
#define ACPI_SIG_DSDT           "DSDT"	/* Differentiated System Description Table */
#define ACPI_SIG_FADT           "FACP"	/* Fixed ACPI Description Table */
#define ACPI_SIG_FACS           "FACS"	/* Firmware ACPI Control Structure */
#define ACPI_SIG_PSDT           "PSDT"	/* Persistent System Description Table */
#define ACPI_SIG_RSDP           "RSD PTR "	/* Root System Description Pointer */
#define ACPI_SIG_RSDT           "RSDT"	/* Root System Description Table */
#define ACPI_SIG_XSDT           "XSDT"	/* Extended  System Description Table */
#define ACPI_SIG_SSDT           "SSDT"	/* Secondary System Description Table */
59
#define ACPI_RSDP_NAME          "RSDP"	/* Short name for RSDP, not signature */
L
Linus Torvalds 已提交
60 61

/*
B
Bob Moore 已提交
62 63
 * All tables and structures must be byte-packed to match the ACPI
 * specification, since the tables are provided by the system BIOS
L
Linus Torvalds 已提交
64 65 66 67
 */
#pragma pack(1)

/*
B
Bob Moore 已提交
68 69 70 71
 * These are the ACPI tables that are directly consumed by the subsystem.
 *
 * The RSDP and FACS do not use the common ACPI table header. All other ACPI
 * tables use the header.
L
Linus Torvalds 已提交
72
 *
B
Bob Moore 已提交
73 74 75
 * Note about bitfields: The u8 type is used for bitfields in ACPI tables.
 * This is the only type that is even remotely portable. Anything else is not
 * portable, so do not use any other bitfield types.
L
Linus Torvalds 已提交
76 77
 */

B
Bob Moore 已提交
78 79 80 81 82 83 84
/*******************************************************************************
 *
 * ACPI Table Header. This common header is used by all tables except the
 * RSDP and FACS. The define is used for direct inclusion of header into
 * other ACPI tables
 *
 ******************************************************************************/
L
Linus Torvalds 已提交
85

B
Bob Moore 已提交
86
struct acpi_table_header {
87 88 89 90 91 92 93 94 95 96
	char signature[ACPI_NAME_SIZE];	/* ASCII table signature */
	u32 length;		/* Length of table in bytes, including this header */
	u8 revision;		/* ACPI Specification minor version # */
	u8 checksum;		/* To make sum of entire table == 0 */
	char oem_id[ACPI_OEM_ID_SIZE];	/* ASCII OEM identification */
	char oem_table_id[ACPI_OEM_TABLE_ID_SIZE];	/* ASCII OEM table identification */
	u32 oem_revision;	/* OEM revision number */
	char asl_compiler_id[ACPI_NAME_SIZE];	/* ASCII ASL compiler vendor ID */
	u32 asl_compiler_revision;	/* ASL compiler version */
};
L
Linus Torvalds 已提交
97 98

/*
B
Bob Moore 已提交
99
 * GAS - Generic Address Structure (ACPI 2.0+)
100 101 102 103
 *
 * Note: Since this structure is used in the ACPI tables, it is byte aligned.
 * If misalignment is not supported, access to the Address field must be
 * performed with care.
L
Linus Torvalds 已提交
104
 */
B
Bob Moore 已提交
105
struct acpi_generic_address {
106 107 108
	u8 space_id;		/* Address space where struct or register exists */
	u8 bit_width;		/* Size in bits of given register */
	u8 bit_offset;		/* Bit offset within the register */
B
Bob Moore 已提交
109 110 111
	u8 access_width;	/* Minimum Access size (ACPI 3.0) */
	u64 address;		/* 64-bit address of struct or register */
};
L
Linus Torvalds 已提交
112

B
Bob Moore 已提交
113 114 115 116 117 118
/*******************************************************************************
 *
 * RSDP - Root System Description Pointer (Signature is "RSD PTR ")
 *
 ******************************************************************************/

119
struct acpi_table_rsdp {
B
Bob Moore 已提交
120 121
	char signature[8];	/* ACPI signature, contains "RSD PTR " */
	u8 checksum;		/* ACPI 1.0 checksum */
122
	char oem_id[ACPI_OEM_ID_SIZE];	/* OEM identification */
B
Bob Moore 已提交
123 124 125 126 127 128 129
	u8 revision;		/* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */
	u32 rsdt_physical_address;	/* 32-bit physical address of the RSDT */
	u32 length;		/* Table length in bytes, including header (ACPI 2.0+) */
	u64 xsdt_physical_address;	/* 64-bit physical address of the XSDT (ACPI 2.0+) */
	u8 extended_checksum;	/* Checksum of entire table (ACPI 2.0+) */
	u8 reserved[3];		/* Reserved, must be zero */
};
L
Linus Torvalds 已提交
130

B
Bob Moore 已提交
131
#define ACPI_RSDP_REV0_SIZE     20	/* Size of original ACPI 1.0 RSDP */
L
Linus Torvalds 已提交
132

B
Bob Moore 已提交
133 134 135 136 137
/*******************************************************************************
 *
 * RSDT/XSDT - Root System Description Tables
 *
 ******************************************************************************/
L
Linus Torvalds 已提交
138

139 140 141
struct acpi_table_rsdt {
	struct acpi_table_header header;	/* Common ACPI table header */
	u32 table_offset_entry[1];	/* Array of pointers to ACPI tables */
B
Bob Moore 已提交
142 143
};

144 145 146
struct acpi_table_xsdt {
	struct acpi_table_header header;	/* Common ACPI table header */
	u64 table_offset_entry[1];	/* Array of pointers to ACPI tables */
B
Bob Moore 已提交
147 148 149 150 151 152 153 154
};

/*******************************************************************************
 *
 * FACS - Firmware ACPI Control Structure (FACS)
 *
 ******************************************************************************/

155
struct acpi_table_facs {
B
Bob Moore 已提交
156 157 158 159 160
	char signature[4];	/* ASCII table signature */
	u32 length;		/* Length of structure, in bytes */
	u32 hardware_signature;	/* Hardware configuration signature */
	u32 firmware_waking_vector;	/* 32-bit physical address of the Firmware Waking Vector */
	u32 global_lock;	/* Global Lock for shared hardware resources */
161
	u32 flags;
B
Bob Moore 已提交
162 163 164 165
	u64 xfirmware_waking_vector;	/* 64-bit version of the Firmware Waking Vector (ACPI 2.0+) */
	u8 version;		/* Version of this table (ACPI 2.0+) */
	u8 reserved[31];	/* Reserved, must be zero */
};
L
Linus Torvalds 已提交
166

167 168 169 170 171 172
/* Flag macros */

#define ACPI_FACS_S4_BIOS_PRESENT (1)	/* 00: S4BIOS support is present */

/* Global lock flags */

B
Bob Moore 已提交
173 174
#define ACPI_GLOCK_PENDING      0x01	/* 00: Pending global lock ownership */
#define ACPI_GLOCK_OWNED        0x02	/* 01: Global lock is owned */
L
Linus Torvalds 已提交
175

B
Bob Moore 已提交
176 177 178 179 180 181 182 183
/*******************************************************************************
 *
 * FADT - Fixed ACPI Description Table (Signature "FACP")
 *
 ******************************************************************************/

/* Fields common to all versions of the FADT */

184 185 186 187
struct acpi_table_fadt {
	struct acpi_table_header header;	/* Common ACPI table header */
	u32 facs;		/* 32-bit physical address of FACS */
	u32 dsdt;		/* 32-bit physical address of DSDT */
188
	u8 model;		/* System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */
189 190
	u8 preferred_profile;	/* Conveys preferred power management profile to OSPM. */
	u16 sci_interrupt;	/* System vector of SCI interrupt */
191
	u32 smi_command;	/* 32-bit Port address of SMI command port */
192 193 194 195
	u8 acpi_enable;		/* Value to write to smi_cmd to enable ACPI */
	u8 acpi_disable;	/* Value to write to smi_cmd to disable ACPI */
	u8 S4bios_request;	/* Value to write to SMI CMD to enter S4BIOS state */
	u8 pstate_control;	/* Processor performance state control */
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
	u32 pm1a_event_block;	/* 32-bit Port address of Power Mgt 1a Event Reg Blk */
	u32 pm1b_event_block;	/* 32-bit Port address of Power Mgt 1b Event Reg Blk */
	u32 pm1a_control_block;	/* 32-bit Port address of Power Mgt 1a Control Reg Blk */
	u32 pm1b_control_block;	/* 32-bit Port address of Power Mgt 1b Control Reg Blk */
	u32 pm2_control_block;	/* 32-bit Port address of Power Mgt 2 Control Reg Blk */
	u32 pm_timer_block;	/* 32-bit Port address of Power Mgt Timer Ctrl Reg Blk */
	u32 gpe0_block;		/* 32-bit Port address of General Purpose Event 0 Reg Blk */
	u32 gpe1_block;		/* 32-bit Port address of General Purpose Event 1 Reg Blk */
	u8 pm1_event_length;	/* Byte Length of ports at pm1x_event_block */
	u8 pm1_control_length;	/* Byte Length of ports at pm1x_control_block */
	u8 pm2_control_length;	/* Byte Length of ports at pm2_control_block */
	u8 pm_timer_length;	/* Byte Length of ports at pm_timer_block */
	u8 gpe0_block_length;	/* Byte Length of ports at gpe0_block */
	u8 gpe1_block_length;	/* Byte Length of ports at gpe1_block */
	u8 gpe1_base;		/* Offset in GPE number space where GPE1 events start */
	u8 cst_control;		/* Support for the _CST object and C States change notification */
212 213 214 215
	u16 C2latency;		/* Worst case HW latency to enter/exit C2 state */
	u16 C3latency;		/* Worst case HW latency to enter/exit C3 state */
	u16 flush_size;		/* Processor's memory cache line width, in bytes */
	u16 flush_stride;	/* Number of flush strides that need to be read */
216 217
	u8 duty_offset;		/* Processor duty cycle index in processor's P_CNT reg */
	u8 duty_width;		/* Processor duty cycle value bit width in P_CNT register. */
218 219 220 221 222
	u8 day_alarm;		/* Index to day-of-month alarm in RTC CMOS RAM */
	u8 month_alarm;		/* Index to month-of-year alarm in RTC CMOS RAM */
	u8 century;		/* Index to century in RTC CMOS RAM */
	u16 boot_flags;		/* IA-PC Boot Architecture Flags. See Table 5-10 for description */
	u8 reserved;		/* Reserved, must be zero */
223 224
	u32 flags;		/* Miscellaneous flag bits (see below for individual flags) */
	struct acpi_generic_address reset_register;	/* 64-bit address of the Reset register */
B
Bob Moore 已提交
225
	u8 reset_value;		/* Value to write to the reset_register port to reset the system */
226
	u8 reserved4[3];	/* Reserved, must be zero */
227
	u64 Xfacs;		/* 64-bit physical address of FACS */
B
Bob Moore 已提交
228
	u64 Xdsdt;		/* 64-bit physical address of DSDT */
229 230 231 232 233 234 235 236
	struct acpi_generic_address xpm1a_event_block;	/* 64-bit Extended Power Mgt 1a Event Reg Blk address */
	struct acpi_generic_address xpm1b_event_block;	/* 64-bit Extended Power Mgt 1b Event Reg Blk address */
	struct acpi_generic_address xpm1a_control_block;	/* 64-bit Extended Power Mgt 1a Control Reg Blk address */
	struct acpi_generic_address xpm1b_control_block;	/* 64-bit Extended Power Mgt 1b Control Reg Blk address */
	struct acpi_generic_address xpm2_control_block;	/* 64-bit Extended Power Mgt 2 Control Reg Blk address */
	struct acpi_generic_address xpm_timer_block;	/* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */
	struct acpi_generic_address xgpe0_block;	/* 64-bit Extended General Purpose Event 0 Reg Blk address */
	struct acpi_generic_address xgpe1_block;	/* 64-bit Extended General Purpose Event 1 Reg Blk address */
L
Linus Torvalds 已提交
237 238
};

239 240 241 242 243 244 245 246 247
/* FADT flags */

#define ACPI_FADT_WBINVD            (1)	/* 00: The wbinvd instruction works properly */
#define ACPI_FADT_WBINVD_FLUSH      (1<<1)	/* 01: The wbinvd flushes but does not invalidate */
#define ACPI_FADT_C1_SUPPORTED      (1<<2)	/* 02: All processors support C1 state */
#define ACPI_FADT_C2_MP_SUPPORTED   (1<<3)	/* 03: C2 state works on MP system */
#define ACPI_FADT_POWER_BUTTON      (1<<4)	/* 04: Power button is handled as a generic feature */
#define ACPI_FADT_SLEEP_BUTTON      (1<<5)	/* 05: Sleep button is handled as a generic feature, or  not present */
#define ACPI_FADT_FIXED_RTC         (1<<6)	/* 06: RTC wakeup stat not in fixed register space */
248
#define ACPI_FADT_S4_RTC_WAKE       (1<<7)	/* 07: RTC wakeup possible from S4 */
249 250 251 252 253 254 255 256 257 258 259 260
#define ACPI_FADT_32BIT_TIMER       (1<<8)	/* 08: tmr_val is 32 bits 0=24-bits */
#define ACPI_FADT_DOCKING_SUPPORTED (1<<9)	/* 09: Docking supported */
#define ACPI_FADT_RESET_REGISTER    (1<<10)	/* 10: System reset via the FADT RESET_REG supported */
#define ACPI_FADT_SEALED_CASE       (1<<11)	/* 11: No internal expansion capabilities and case is sealed */
#define ACPI_FADT_HEADLESS          (1<<12)	/* 12: No local video capabilities or local input devices */
#define ACPI_FADT_SLEEP_TYPE        (1<<13)	/* 13: Must execute native instruction after writing  SLP_TYPx register */
#define ACPI_FADT_PCI_EXPRESS_WAKE  (1<<14)	/* 14: System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */
#define ACPI_FADT_PLATFORM_CLOCK    (1<<15)	/* 15: OSPM should use platform-provided timer (ACPI 3.0) */
#define ACPI_FADT_S4_RTC_VALID      (1<<16)	/* 16: Contents of RTC_STS valid after S4 wake (ACPI 3.0) */
#define ACPI_FADT_REMOTE_POWER_ON   (1<<17)	/* 17: System is compatible with remote power on (ACPI 3.0) */
#define ACPI_FADT_APIC_CLUSTER      (1<<18)	/* 18: All local APICs must use cluster model (ACPI 3.0) */
#define ACPI_FADT_APIC_PHYSICAL     (1<<19)	/* 19: All local x_aPICs must use physical dest mode (ACPI 3.0) */
L
Linus Torvalds 已提交
261

B
Bob Moore 已提交
262
/*
263
 * FADT Prefered Power Management Profiles
B
Bob Moore 已提交
264
 */
265 266 267 268 269 270 271 272
enum acpi_prefered_pm_profiles {
	PM_UNSPECIFIED = 0,
	PM_DESKTOP = 1,
	PM_MOBILE = 2,
	PM_WORKSTATION = 3,
	PM_ENTERPRISE_SERVER = 4,
	PM_SOHO_SERVER = 5,
	PM_APPLIANCE_PC = 6
L
Linus Torvalds 已提交
273 274
};

275
/* FADT Boot Arch Flags */
L
Linus Torvalds 已提交
276

B
Bob Moore 已提交
277 278
#define BAF_LEGACY_DEVICES              0x0001
#define BAF_8042_KEYBOARD_CONTROLLER    0x0002
279
#define BAF_MSI_NOT_SUPPORTED           0x0008
280
#define BAF_PCIE_ASPM_CONTROL           0x0010
B
Bob Moore 已提交
281 282 283 284 285

#define FADT2_REVISION_ID               3
#define FADT2_MINUS_REVISION_ID         2

/* Reset to default packing */
L
Linus Torvalds 已提交
286 287 288

#pragma pack()

289
#define ACPI_FADT_OFFSET(f)             (u8) ACPI_OFFSET (struct acpi_table_fadt, f)
B
Bob Moore 已提交
290

291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
union acpi_name_union {
	u32 integer;
	char ascii[4];
};

/*
 * Internal ACPI Table Descriptor. One per ACPI table
 */
struct acpi_table_desc {
	acpi_physical_address address;
	struct acpi_table_header *pointer;
	u32 length;		/* Length fixed at 32 bits */
	union acpi_name_union signature;
	acpi_owner_id owner_id;
	u8 flags;
};

/* Flags for above */

#define ACPI_TABLE_ORIGIN_UNKNOWN       (0)
#define ACPI_TABLE_ORIGIN_MAPPED        (1)
#define ACPI_TABLE_ORIGIN_ALLOCATED     (2)
#define ACPI_TABLE_ORIGIN_MASK          (3)
#define ACPI_TABLE_IS_LOADED            (4)

L
Linus Torvalds 已提交
316
/*
317
 * Get the remaining ACPI tables
L
Linus Torvalds 已提交
318
 */
319

320
#include <acpi/actbl1.h>
321

L
Len Brown 已提交
322
#endif				/* __ACTBL_H__ */