/******************************************************************************
 *
 * 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__ */
