actbl.h 12.7 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 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 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
/******************************************************************************
 *
 * Name: actbl.h - Table data structures defined in ACPI specification
 *
 *****************************************************************************/

/*
 * Copyright (C) 2000 - 2005, R. Byron Moore
 * 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__


/*
 *  Values for description table header signatures
 */
#define RSDP_NAME               "RSDP"
#define RSDP_SIG                "RSD PTR "  /* RSDT Pointer signature */
#define APIC_SIG                "APIC"      /* Multiple APIC Description Table */
#define DSDT_SIG                "DSDT"      /* Differentiated System Description Table */
#define FADT_SIG                "FACP"      /* Fixed ACPI Description Table */
#define FACS_SIG                "FACS"      /* Firmware ACPI Control Structure */
#define PSDT_SIG                "PSDT"      /* Persistent System Description Table */
#define RSDT_SIG                "RSDT"      /* Root System Description Table */
#define XSDT_SIG                "XSDT"      /* Extended  System Description Table */
#define SSDT_SIG                "SSDT"      /* Secondary System Description Table */
#define SBST_SIG                "SBST"      /* Smart Battery Specification Table */
#define SPIC_SIG                "SPIC"      /* IOSAPIC table */
#define BOOT_SIG                "BOOT"      /* Boot table */


#define GL_OWNED                0x02        /* Ownership of global lock is bit 1 */


/*
 * Common table types.  The base code can remain
 * constant if the underlying tables are changed
 */
#define RSDT_DESCRIPTOR         struct rsdt_descriptor_rev2
#define XSDT_DESCRIPTOR         struct xsdt_descriptor_rev2
#define FACS_DESCRIPTOR         struct facs_descriptor_rev2
#define FADT_DESCRIPTOR         struct fadt_descriptor_rev2


#pragma pack(1)

/*
 * ACPI Version-independent tables
 *
 * NOTE: The tables that are specific to ACPI versions (1.0, 2.0, etc.)
 * are in separate files.
 */
struct rsdp_descriptor         /* Root System Descriptor Pointer */
{
	char                            signature [8];          /* ACPI signature, contains "RSD PTR " */
	u8                              checksum;               /* To make sum of struct == 0 */
	char                            oem_id [6];             /* OEM identification */
	u8                              revision;               /* Must be 0 for 1.0, 2 for 2.0 */
	u32                             rsdt_physical_address;  /* 32-bit physical address of RSDT */
	u32                             length;                 /* XSDT Length in bytes including hdr */
	u64                             xsdt_physical_address;  /* 64-bit physical address of XSDT */
	u8                              extended_checksum;      /* Checksum of entire table */
	char                            reserved [3];           /* Reserved field must be 0 */
};


struct acpi_common_facs          /* Common FACS for internal use */
{
	u32                             *global_lock;
	u64                             *firmware_waking_vector;
	u8                              vector_width;
};


#define ACPI_TABLE_HEADER_DEF   /* ACPI common table header */ \
	char                            signature [4];          /* ACPI signature (4 ASCII characters) */\
	u32                             length;                 /* Length of table, in bytes, including header */\
	u8                              revision;               /* ACPI Specification minor version # */\
	u8                              checksum;               /* To make sum of entire table == 0 */\
	char                            oem_id [6];             /* OEM identification */\
	char                            oem_table_id [8];       /* OEM table identification */\
	u32                             oem_revision;           /* OEM revision number */\
	char                            asl_compiler_id [4];    /* ASL compiler vendor ID */\
	u32                             asl_compiler_revision;  /* ASL compiler revision number */


struct acpi_table_header         /* ACPI common table header */
{
	ACPI_TABLE_HEADER_DEF
};


/*
 * MADT values and structures
 */

/* Values for MADT PCATCompat */

#define DUAL_PIC                0
#define MULTIPLE_APIC           1

/* Master MADT */

struct multiple_apic_table
{
	ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
	u32                             local_apic_address;     /* Physical address of local APIC */
	u32                             PCATcompat      : 1;    /* A one indicates system also has dual 8259s */
	u32                             reserved1       : 31;
};

/* Values for Type in APIC_HEADER_DEF */

#define APIC_PROCESSOR          0
#define APIC_IO                 1
#define APIC_XRUPT_OVERRIDE     2
#define APIC_NMI                3
#define APIC_LOCAL_NMI          4
#define APIC_ADDRESS_OVERRIDE   5
#define APIC_IO_SAPIC           6
#define APIC_LOCAL_SAPIC        7
#define APIC_XRUPT_SOURCE       8
#define APIC_RESERVED           9           /* 9 and greater are reserved */

/*
 * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE)
 */
#define APIC_HEADER_DEF                     /* Common APIC sub-structure header */\
	u8                              type; \
	u8                              length;

struct apic_header
{
	APIC_HEADER_DEF
};

/* Values for MPS INTI flags */

#define POLARITY_CONFORMS       0
#define POLARITY_ACTIVE_HIGH    1
#define POLARITY_RESERVED       2
#define POLARITY_ACTIVE_LOW     3

#define TRIGGER_CONFORMS        0
#define TRIGGER_EDGE            1
#define TRIGGER_RESERVED        2
#define TRIGGER_LEVEL           3

/* Common flag definitions */

#define MPS_INTI_FLAGS \
	u16                             polarity        : 2;    /* Polarity of APIC I/O input signals */\
	u16                             trigger_mode    : 2;    /* Trigger mode of APIC input signals */\
	u16                             reserved1       : 12;   /* Reserved, must be zero */

#define LOCAL_APIC_FLAGS \
	u32                             processor_enabled: 1;   /* Processor is usable if set */\
	u32                             reserved2       : 31;   /* Reserved, must be zero */

/* Sub-structures for MADT */

struct madt_processor_apic
{
	APIC_HEADER_DEF
	u8                              processor_id;           /* ACPI processor id */
	u8                              local_apic_id;          /* Processor's local APIC id */
	LOCAL_APIC_FLAGS
};

struct madt_io_apic
{
	APIC_HEADER_DEF
	u8                              io_apic_id;             /* I/O APIC ID */
	u8                              reserved;               /* Reserved - must be zero */
	u32                             address;                /* APIC physical address */
	u32                             interrupt;              /* Global system interrupt where INTI
			  * lines start */
};

struct madt_interrupt_override
{
	APIC_HEADER_DEF
	u8                              bus;                    /* 0 - ISA */
	u8                              source;                 /* Interrupt source (IRQ) */
	u32                             interrupt;              /* Global system interrupt */
	MPS_INTI_FLAGS
};

struct madt_nmi_source
{
	APIC_HEADER_DEF
	MPS_INTI_FLAGS
	u32                             interrupt;              /* Global system interrupt */
};

struct madt_local_apic_nmi
{
	APIC_HEADER_DEF
	u8                              processor_id;           /* ACPI processor id */
	MPS_INTI_FLAGS
	u8                              lint;                   /* LINTn to which NMI is connected */
};

struct madt_address_override
{
	APIC_HEADER_DEF
	u16                             reserved;               /* Reserved - must be zero */
	u64                             address;                /* APIC physical address */
};

struct madt_io_sapic
{
	APIC_HEADER_DEF
	u8                              io_sapic_id;            /* I/O SAPIC ID */
	u8                              reserved;               /* Reserved - must be zero */
	u32                             interrupt_base;         /* Glocal interrupt for SAPIC start */
	u64                             address;                /* SAPIC physical address */
};

struct madt_local_sapic
{
	APIC_HEADER_DEF
	u8                              processor_id;           /* ACPI processor id */
	u8                              local_sapic_id;         /* SAPIC ID */
	u8                              local_sapic_eid;        /* SAPIC EID */
	u8                              reserved [3];           /* Reserved - must be zero */
	LOCAL_APIC_FLAGS
	u32                             processor_uID;          /* Numeric UID - ACPI 3.0 */
	char                            processor_uIDstring[1]; /* String UID  - ACPI 3.0 */
};

struct madt_interrupt_source
{
	APIC_HEADER_DEF
	MPS_INTI_FLAGS
	u8                              interrupt_type;         /* 1=PMI, 2=INIT, 3=corrected */
	u8                              processor_id;           /* Processor ID */
	u8                              processor_eid;          /* Processor EID */
	u8                              io_sapic_vector;        /* Vector value for PMI interrupts */
	u32                             interrupt;              /* Global system interrupt */
	u32                             flags;                  /* Interrupt Source Flags */
};


/*
 * Smart Battery
 */
struct smart_battery_table
{
	ACPI_TABLE_HEADER_DEF
	u32                             warning_level;
	u32                             low_level;
	u32                             critical_level;
};


#pragma pack()


/*
 * ACPI Table information.  We save the table address, length,
 * and type of memory allocation (mapped or allocated) for each
 * table for 1) when we exit, and 2) if a new table is installed
 */
#define ACPI_MEM_NOT_ALLOCATED  0
#define ACPI_MEM_ALLOCATED      1
#define ACPI_MEM_MAPPED         2

/* Definitions for the Flags bitfield member of struct acpi_table_support */

#define ACPI_TABLE_SINGLE       0x00
#define ACPI_TABLE_MULTIPLE     0x01
#define ACPI_TABLE_EXECUTABLE   0x02

#define ACPI_TABLE_ROOT         0x00
#define ACPI_TABLE_PRIMARY      0x10
#define ACPI_TABLE_SECONDARY    0x20
#define ACPI_TABLE_ALL          0x30
#define ACPI_TABLE_TYPE_MASK    0x30

/* Data about each known table type */

struct acpi_table_support
{
	char                            *name;
	char                            *signature;
	void                            **global_ptr;
	u8                              sig_length;
	u8                              flags;
};


/*
 * Get the ACPI version-specific tables
 */
#include "actbl1.h"   /* Acpi 1.0 table definitions */
#include "actbl2.h"   /* Acpi 2.0 table definitions */

extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1,
			    * needed for certain workarounds */

#pragma pack(1)
/*
 * High performance timer
 */
struct hpet_table
{
	ACPI_TABLE_HEADER_DEF
	u32                             hardware_id;
	struct acpi_generic_address     base_address;
	u8                              hpet_number;
	u16                             clock_tick;
	u8                              attributes;
};

#pragma pack()

#endif /* __ACTBL_H__ */