2005-04-16 15:20:36 -07:00
/******************************************************************************
*
* 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"
2005-08-05 00:44:28 -04:00
# 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 */
2005-04-16 15:20:36 -07:00
/*
* 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 .
*/
2005-08-05 00:44:28 -04:00
struct rsdp_descriptor { /* Root System Descriptor Pointer */
char signature [ 8 ] ; /* ACPI signature, contains "RSD PTR " */
u8 checksum ; /* ACPI 1.0 checksum */
char oem_id [ 6 ] ; /* OEM identification */
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 ; /* XSDT Length in bytes, including header */
u64 xsdt_physical_address ; /* 64-bit physical address of the XSDT */
u8 extended_checksum ; /* Checksum of entire table (ACPI 2.0) */
char reserved [ 3 ] ; /* Reserved, must be zero */
2005-04-16 15:20:36 -07:00
} ;
2005-08-05 00:44:28 -04:00
struct acpi_common_facs { /* Common FACS for internal use */
u32 * global_lock ;
u64 * firmware_waking_vector ;
u8 vector_width ;
2005-04-16 15:20:36 -07:00
} ;
# define ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \
2005-07-08 00:00:00 -04:00
char signature [ 4 ] ; /* ASCII table signature */ \
u32 length ; /* Length of table in bytes, including this header */ \
2005-04-16 15:20:36 -07:00
u8 revision ; /* ACPI Specification minor version # */ \
u8 checksum ; /* To make sum of entire table == 0 */ \
2005-07-08 00:00:00 -04:00
char oem_id [ 6 ] ; /* ASCII OEM identification */ \
char oem_table_id [ 8 ] ; /* ASCII OEM table identification */ \
2005-04-16 15:20:36 -07:00
u32 oem_revision ; /* OEM revision number */ \
2005-07-08 00:00:00 -04:00
char asl_compiler_id [ 4 ] ; /* ASCII ASL compiler vendor ID */ \
2005-08-05 00:44:28 -04:00
u32 asl_compiler_revision ; /* ASL compiler version */
2005-04-16 15:20:36 -07:00
2005-08-05 00:44:28 -04:00
struct acpi_table_header { /* ACPI common table header */
ACPI_TABLE_HEADER_DEF } ;
2005-04-16 15:20:36 -07:00
/*
* MADT values and structures
*/
/* Values for MADT PCATCompat */
# define DUAL_PIC 0
# define MULTIPLE_APIC 1
/* Master MADT */
2005-08-05 00:44:28 -04:00
struct multiple_apic_table {
ACPI_TABLE_HEADER_DEF /* ACPI common table header */
u32 local_apic_address ; /* Physical address of local APIC */
2005-07-08 00:00:00 -04:00
/* Flags (32 bits) */
2005-08-05 00:44:28 -04:00
u8 PCATcompat : 1 ; /* 00: System also has dual 8259s */
u8 : 7 ; /* 01-07: Reserved, must be zero */
u8 reserved1 [ 3 ] ; /* 08-31: Reserved, must be zero */
2005-04-16 15:20:36 -07:00
} ;
/* 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
2005-08-05 00:44:28 -04:00
# define APIC_RESERVED 9 /* 9 and greater are reserved */
2005-04-16 15:20:36 -07:00
/*
* MADT sub - structures ( Follow MULTIPLE_APIC_DESCRIPTION_TABLE )
*/
# define APIC_HEADER_DEF /* Common APIC sub-structure header */ \
u8 type ; \
u8 length ;
2005-08-05 00:44:28 -04:00
struct apic_header {
APIC_HEADER_DEF } ;
2005-04-16 15:20:36 -07:00
/* 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
2005-07-08 00:00:00 -04:00
/* Common flag definitions (16 bits each) */
2005-04-16 15:20:36 -07:00
# define MPS_INTI_FLAGS \
2005-07-08 00:00:00 -04:00
u8 polarity : 2 ; /* 00-01: Polarity of APIC I/O input signals */ \
u8 trigger_mode : 2 ; /* 02-03: Trigger mode of APIC input signals */ \
u8 : 4 ; /* 04-07: Reserved, must be zero */ \
2005-08-05 00:44:28 -04:00
u8 reserved1 ; /* 08-15: Reserved, must be zero */
2005-04-16 15:20:36 -07:00
# define LOCAL_APIC_FLAGS \
2005-07-08 00:00:00 -04:00
u8 processor_enabled : 1 ; /* 00: Processor is usable if set */ \
u8 : 7 ; /* 01-07: Reserved, must be zero */ \
2005-08-05 00:44:28 -04:00
u8 reserved2 ; /* 08-15: Reserved, must be zero */
2005-04-16 15:20:36 -07:00
/* Sub-structures for MADT */
2005-08-05 00:44:28 -04:00
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 */
2005-04-16 15:20:36 -07:00
} ;
2005-08-05 00:44:28 -04:00
struct madt_interrupt_override {
APIC_HEADER_DEF u8 bus ; /* 0 - ISA */
u8 source ; /* Interrupt source (IRQ) */
u32 interrupt ; /* Global system interrupt */
MPS_INTI_FLAGS } ;
2005-04-16 15:20:36 -07:00
2005-08-05 00:44:28 -04:00
struct madt_nmi_source {
APIC_HEADER_DEF MPS_INTI_FLAGS u32 interrupt ; /* Global system interrupt */
2005-04-16 15:20:36 -07:00
} ;
2005-08-05 00:44:28 -04:00
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 */
2005-04-16 15:20:36 -07:00
} ;
2005-08-05 00:44:28 -04:00
struct madt_address_override {
APIC_HEADER_DEF u16 reserved ; /* Reserved, must be zero */
u64 address ; /* APIC physical address */
2005-04-16 15:20:36 -07:00
} ;
2005-08-05 00:44:28 -04:00
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 */
2005-04-16 15:20:36 -07:00
} ;
2005-08-05 00:44:28 -04:00
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 */
2005-04-16 15:20:36 -07:00
} ;
2005-08-05 00:44:28 -04:00
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 */
2005-04-16 15:20:36 -07:00
} ;
/*
* Smart Battery
*/
2005-08-05 00:44:28 -04:00
struct smart_battery_table {
ACPI_TABLE_HEADER_DEF u32 warning_level ;
u32 low_level ;
u32 critical_level ;
2005-04-16 15:20:36 -07:00
} ;
# 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 */
2005-08-05 00:44:28 -04:00
struct acpi_table_support {
char * name ;
char * signature ;
void * * global_ptr ;
u8 sig_length ;
u8 flags ;
2005-04-16 15:20:36 -07:00
} ;
/*
* Get the ACPI version - specific tables
*/
2005-08-05 00:44:28 -04:00
# include "actbl1.h" /* Acpi 1.0 table definitions */
# include "actbl2.h" /* Acpi 2.0 table definitions */
2005-04-16 15:20:36 -07:00
2005-08-05 00:44:28 -04:00
extern u8 acpi_fadt_is_v1 ; /* is set to 1 if FADT is revision 1,
* needed for certain workarounds */
2005-04-16 15:20:36 -07:00
# pragma pack(1)
/*
* High performance timer
*/
2005-08-05 00:44:28 -04:00
struct hpet_table {
ACPI_TABLE_HEADER_DEF u32 hardware_id ;
struct acpi_generic_address base_address ;
u8 hpet_number ;
u16 clock_tick ;
u8 attributes ;
2005-04-16 15:20:36 -07:00
} ;
# pragma pack()
2005-08-05 00:44:28 -04:00
# endif /* __ACTBL_H__ */