mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
The GPL and LGPL SPDX forms without an explicit -only or -or-later suffix are deprecated and should not be used. Update the documention. Somewhat unhelpfully at the time of writing, this only appears to be indicated by the separation of the two tables at https://spdx.org/licenses/ The recent changes to libacpi are the only examples of deprecated LGPL tags in tree, so fix them all up. For GPL, we have many examples using deprecated tags. For now, just identify them as such and recommend that no new instances get added. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com> Acked-by: Stefano Stabellini <sstabellini@kernel.org>
490 lines
12 KiB
C
490 lines
12 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-only */
|
|
/*
|
|
* Copyright (c) 2004, Intel Corporation.
|
|
*/
|
|
#ifndef _ACPI_2_0_H_
|
|
#define _ACPI_2_0_H_
|
|
|
|
#include <stdint.h>
|
|
#include <xen/xen.h>
|
|
#include <xen/hvm/ioreq.h>
|
|
|
|
#define ASCII32(a,b,c,d) \
|
|
(((a) << 0) | ((b) << 8) | ((c) << 16) | ((d) << 24))
|
|
#define ASCII64(a,b,c,d,e,f,g,h) \
|
|
(((uint64_t)ASCII32(a,b,c,d)) | (((uint64_t)ASCII32(e,f,g,h)) << 32))
|
|
|
|
#pragma pack (1)
|
|
|
|
/*
|
|
* Common ACPI header.
|
|
*/
|
|
struct acpi_header {
|
|
uint32_t signature;
|
|
uint32_t length;
|
|
uint8_t revision;
|
|
uint8_t checksum;
|
|
char oem_id[6];
|
|
char oem_table_id[8];
|
|
uint32_t oem_revision;
|
|
uint32_t creator_id;
|
|
uint32_t creator_revision;
|
|
};
|
|
|
|
#define ACPI_OEM_ID "Xen"
|
|
#define ACPI_OEM_TABLE_ID "HVM"
|
|
#define ACPI_OEM_REVISION 0
|
|
|
|
#define ACPI_CREATOR_ID ASCII32('H','V','M','L') /* HVMLoader */
|
|
#define ACPI_CREATOR_REVISION 0
|
|
|
|
/*
|
|
* ACPI 2.0 Generic Address Space definition.
|
|
*/
|
|
struct acpi_20_generic_address {
|
|
uint8_t address_space_id;
|
|
uint8_t register_bit_width;
|
|
uint8_t register_bit_offset;
|
|
uint8_t reserved;
|
|
uint64_t address;
|
|
};
|
|
|
|
/*
|
|
* Generic Address Space Address IDs.
|
|
*/
|
|
#define ACPI_SYSTEM_MEMORY 0
|
|
#define ACPI_SYSTEM_IO 1
|
|
#define ACPI_PCI_CONFIGURATION_SPACE 2
|
|
#define ACPI_EMBEDDED_CONTROLLER 3
|
|
#define ACPI_SMBUS 4
|
|
#define ACPI_FUNCTIONAL_FIXED_HARDWARE 0x7F
|
|
|
|
/*
|
|
* Root System Description Pointer Structure in ACPI 1.0.
|
|
*/
|
|
struct acpi_10_rsdp {
|
|
uint64_t signature;
|
|
uint8_t checksum;
|
|
char oem_id[6];
|
|
uint8_t reserved;
|
|
uint32_t rsdt_address;
|
|
};
|
|
|
|
/*
|
|
* Root System Description Pointer Structure.
|
|
*/
|
|
struct acpi_20_rsdp {
|
|
uint64_t signature;
|
|
uint8_t checksum;
|
|
char oem_id[6];
|
|
uint8_t revision;
|
|
uint32_t rsdt_address;
|
|
uint32_t length;
|
|
uint64_t xsdt_address;
|
|
uint8_t extended_checksum;
|
|
uint8_t reserved[3];
|
|
};
|
|
|
|
/*
|
|
* Root System Description Table (RSDT).
|
|
*/
|
|
struct acpi_20_rsdt {
|
|
struct acpi_header header;
|
|
uint32_t entry[1];
|
|
};
|
|
|
|
/*
|
|
* Extended System Description Table (XSDT).
|
|
*/
|
|
struct acpi_20_xsdt {
|
|
struct acpi_header header;
|
|
uint64_t entry[1];
|
|
};
|
|
|
|
/*
|
|
* TCG Hardware Interface Table (TCPA)
|
|
*/
|
|
struct acpi_20_tcpa {
|
|
struct acpi_header header;
|
|
uint16_t platform_class;
|
|
uint32_t laml;
|
|
uint64_t lasa;
|
|
};
|
|
#define ACPI_2_0_TCPA_LAML_SIZE (64*1024)
|
|
|
|
/*
|
|
* TPM2
|
|
*/
|
|
struct acpi_20_tpm2 {
|
|
struct acpi_header header;
|
|
uint16_t platform_class;
|
|
uint16_t reserved;
|
|
uint64_t control_area_address;
|
|
uint32_t start_method;
|
|
uint8_t start_method_params[12];
|
|
uint32_t log_area_minimum_length;
|
|
uint64_t log_area_start_address;
|
|
};
|
|
#define TPM2_ACPI_CLASS_CLIENT 0
|
|
#define TPM2_START_METHOD_CRB 7
|
|
|
|
/*
|
|
* TPM register I/O Mapped region, location of which defined in the
|
|
* TCG PC Client Platform TPM Profile Specification for TPM 2.0.
|
|
* See table 9 - Only Locality 0 is used here. This is emulated by QEMU.
|
|
* Definition of Register space is found in table 12.
|
|
*/
|
|
#define TPM_REGISTER_BASE 0xFED40000
|
|
#define TPM_CRB_CTRL_REQ (TPM_REGISTER_BASE + 0x40)
|
|
#define TPM_CRB_INTF_ID (TPM_REGISTER_BASE + 0x30)
|
|
|
|
#define TPM_LOG_AREA_ADDRESS 0xFED50000
|
|
|
|
#define TPM_LOG_AREA_MINIMUM_SIZE (64 << 10)
|
|
#define TPM_LOG_SIZE (64 << 10)
|
|
|
|
/*
|
|
* Fixed ACPI Description Table Structure (FADT) in ACPI 1.0.
|
|
*/
|
|
struct acpi_10_fadt {
|
|
struct acpi_header header;
|
|
uint32_t firmware_ctrl;
|
|
uint32_t dsdt;
|
|
uint8_t reserved0;
|
|
uint8_t preferred_pm_profile;
|
|
uint16_t sci_int;
|
|
uint32_t smi_cmd;
|
|
uint8_t acpi_enable;
|
|
uint8_t acpi_disable;
|
|
uint8_t s4bios_req;
|
|
uint8_t pstate_cnt;
|
|
uint32_t pm1a_evt_blk;
|
|
uint32_t pm1b_evt_blk;
|
|
uint32_t pm1a_cnt_blk;
|
|
uint32_t pm1b_cnt_blk;
|
|
uint32_t pm2_cnt_blk;
|
|
uint32_t pm_tmr_blk;
|
|
uint32_t gpe0_blk;
|
|
uint32_t gpe1_blk;
|
|
uint8_t pm1_evt_len;
|
|
uint8_t pm1_cnt_len;
|
|
uint8_t pm2_cnt_len;
|
|
uint8_t pm_tmr_len;
|
|
uint8_t gpe0_blk_len;
|
|
uint8_t gpe1_blk_len;
|
|
uint8_t gpe1_base;
|
|
uint8_t cst_cnt;
|
|
uint16_t p_lvl2_lat;
|
|
uint16_t p_lvl3_lat;
|
|
uint16_t flush_size;
|
|
uint16_t flush_stride;
|
|
uint8_t duty_offset;
|
|
uint8_t duty_width;
|
|
uint8_t day_alrm;
|
|
uint8_t mon_alrm;
|
|
uint8_t century;
|
|
uint16_t iapc_boot_arch;
|
|
uint8_t reserved1;
|
|
uint32_t flags;
|
|
};
|
|
|
|
/*
|
|
* Fixed ACPI Description Table Structure (FADT).
|
|
*/
|
|
struct acpi_fadt {
|
|
struct acpi_header header;
|
|
uint32_t firmware_ctrl;
|
|
uint32_t dsdt;
|
|
uint8_t reserved0;
|
|
uint8_t preferred_pm_profile;
|
|
uint16_t sci_int;
|
|
uint32_t smi_cmd;
|
|
uint8_t acpi_enable;
|
|
uint8_t acpi_disable;
|
|
uint8_t s4bios_req;
|
|
uint8_t pstate_cnt;
|
|
uint32_t pm1a_evt_blk;
|
|
uint32_t pm1b_evt_blk;
|
|
uint32_t pm1a_cnt_blk;
|
|
uint32_t pm1b_cnt_blk;
|
|
uint32_t pm2_cnt_blk;
|
|
uint32_t pm_tmr_blk;
|
|
uint32_t gpe0_blk;
|
|
uint32_t gpe1_blk;
|
|
uint8_t pm1_evt_len;
|
|
uint8_t pm1_cnt_len;
|
|
uint8_t pm2_cnt_len;
|
|
uint8_t pm_tmr_len;
|
|
uint8_t gpe0_blk_len;
|
|
uint8_t gpe1_blk_len;
|
|
uint8_t gpe1_base;
|
|
uint8_t cst_cnt;
|
|
uint16_t p_lvl2_lat;
|
|
uint16_t p_lvl3_lat;
|
|
uint16_t flush_size;
|
|
uint16_t flush_stride;
|
|
uint8_t duty_offset;
|
|
uint8_t duty_width;
|
|
uint8_t day_alrm;
|
|
uint8_t mon_alrm;
|
|
uint8_t century;
|
|
uint16_t iapc_boot_arch;
|
|
uint8_t reserved1;
|
|
uint32_t flags;
|
|
struct acpi_20_generic_address reset_reg;
|
|
uint8_t reset_value;
|
|
uint8_t reserved2[3];
|
|
uint64_t x_firmware_ctrl;
|
|
uint64_t x_dsdt;
|
|
struct acpi_20_generic_address x_pm1a_evt_blk;
|
|
struct acpi_20_generic_address x_pm1b_evt_blk;
|
|
struct acpi_20_generic_address x_pm1a_cnt_blk;
|
|
struct acpi_20_generic_address x_pm1b_cnt_blk;
|
|
struct acpi_20_generic_address x_pm2_cnt_blk;
|
|
struct acpi_20_generic_address x_pm_tmr_blk;
|
|
struct acpi_20_generic_address x_gpe0_blk;
|
|
struct acpi_20_generic_address x_gpe1_blk;
|
|
/* Only available starting from FADT revision 5. */
|
|
struct acpi_20_generic_address sleep_control;
|
|
struct acpi_20_generic_address sleep_status;
|
|
};
|
|
|
|
/*
|
|
* FADT Boot Architecture Flags.
|
|
*/
|
|
#define ACPI_FADT_LEGACY_DEVICES (1 << 0)
|
|
#define ACPI_FADT_8042 (1 << 1)
|
|
#define ACPI_FADT_NO_VGA (1 << 2)
|
|
#define ACPI_FADT_NO_CMOS_RTC (1 << 5)
|
|
|
|
/*
|
|
* FADT Fixed Feature Flags.
|
|
*/
|
|
#define ACPI_WBINVD (1 << 0)
|
|
#define ACPI_WBINVD_FLUSH (1 << 1)
|
|
#define ACPI_PROC_C1 (1 << 2)
|
|
#define ACPI_P_LVL2_UP (1 << 3)
|
|
#define ACPI_PWR_BUTTON (1 << 4)
|
|
#define ACPI_SLP_BUTTON (1 << 5)
|
|
#define ACPI_FIX_RTC (1 << 6)
|
|
#define ACPI_RTC_S4 (1 << 7)
|
|
#define ACPI_TMR_VAL_EXT (1 << 8)
|
|
#define ACPI_DCK_CAP (1 << 9)
|
|
#define ACPI_RESET_REG_SUP (1 << 10)
|
|
#define ACPI_SEALED_CASE (1 << 11)
|
|
#define ACPI_HEADLESS (1 << 12)
|
|
#define ACPI_CPU_SW_SLP (1 << 13)
|
|
#define ACPI_USE_PLATFORM_CLOCK (1 << 15)
|
|
|
|
/* PM1 Control Register Bits */
|
|
#define ACPI_PM1C_SCI_EN (1 << 0)
|
|
|
|
/*
|
|
* Firmware ACPI Control Structure (FACS).
|
|
*/
|
|
struct acpi_20_facs {
|
|
uint32_t signature;
|
|
uint32_t length;
|
|
uint32_t hardware_signature;
|
|
uint32_t firmware_waking_vector;
|
|
uint32_t global_lock;
|
|
uint32_t flags;
|
|
uint64_t x_firmware_waking_vector;
|
|
uint8_t version;
|
|
uint8_t reserved[31];
|
|
};
|
|
|
|
#define ACPI_2_0_FACS_VERSION 0x01
|
|
|
|
/*
|
|
* Multiple APIC Description Table header definition (MADT).
|
|
*/
|
|
struct acpi_20_madt {
|
|
struct acpi_header header;
|
|
uint32_t lapic_addr;
|
|
uint32_t flags;
|
|
};
|
|
|
|
|
|
/*
|
|
* HPET Description Table
|
|
*/
|
|
struct acpi_20_hpet {
|
|
struct acpi_header header;
|
|
uint32_t timer_block_id;
|
|
struct acpi_20_generic_address addr;
|
|
uint8_t hpet_number;
|
|
uint16_t min_tick;
|
|
uint8_t page_protect;
|
|
};
|
|
#define ACPI_HPET_ADDRESS 0xFED00000UL
|
|
|
|
/*
|
|
* WAET Description Table
|
|
*/
|
|
struct acpi_20_waet {
|
|
struct acpi_header header;
|
|
uint32_t flags;
|
|
};
|
|
|
|
/*
|
|
* Multiple APIC Flags.
|
|
*/
|
|
#define ACPI_PCAT_COMPAT (1 << 0)
|
|
|
|
/*
|
|
* Multiple APIC Description Table APIC structure types.
|
|
*/
|
|
#define ACPI_PROCESSOR_LOCAL_APIC 0x00
|
|
#define ACPI_IO_APIC 0x01
|
|
#define ACPI_INTERRUPT_SOURCE_OVERRIDE 0x02
|
|
#define ACPI_NON_MASKABLE_INTERRUPT_SOURCE 0x03
|
|
#define ACPI_LOCAL_APIC_NMI 0x04
|
|
#define ACPI_LOCAL_APIC_ADDRESS_OVERRIDE 0x05
|
|
#define ACPI_IO_SAPIC 0x06
|
|
#define ACPI_PROCESSOR_LOCAL_SAPIC 0x07
|
|
#define ACPI_PLATFORM_INTERRUPT_SOURCES 0x08
|
|
|
|
/*
|
|
* APIC Structure Definitions.
|
|
*/
|
|
|
|
/*
|
|
* Processor Local APIC Structure Definition.
|
|
*/
|
|
struct acpi_20_madt_lapic {
|
|
uint8_t type;
|
|
uint8_t length;
|
|
uint8_t acpi_processor_id;
|
|
uint8_t apic_id;
|
|
uint32_t flags;
|
|
};
|
|
|
|
/*
|
|
* Local APIC Flags. All other bits are reserved and must be 0.
|
|
*/
|
|
#define ACPI_LOCAL_APIC_ENABLED (1 << 0)
|
|
|
|
/*
|
|
* IO APIC Structure.
|
|
*/
|
|
struct acpi_20_madt_ioapic {
|
|
uint8_t type;
|
|
uint8_t length;
|
|
uint8_t ioapic_id;
|
|
uint8_t reserved;
|
|
uint32_t ioapic_addr;
|
|
uint32_t gsi_base;
|
|
};
|
|
|
|
struct acpi_20_madt_intsrcovr {
|
|
uint8_t type;
|
|
uint8_t length;
|
|
uint8_t bus;
|
|
uint8_t source;
|
|
uint32_t gsi;
|
|
uint16_t flags;
|
|
};
|
|
|
|
/*
|
|
* System Resource Affinity Table header definition (SRAT)
|
|
*/
|
|
struct acpi_20_srat {
|
|
struct acpi_header header;
|
|
uint32_t table_revision;
|
|
uint32_t reserved2[2];
|
|
};
|
|
|
|
#define ACPI_SRAT_TABLE_REVISION 1
|
|
|
|
/*
|
|
* System Resource Affinity Table structure types.
|
|
*/
|
|
#define ACPI_PROCESSOR_AFFINITY 0x0
|
|
#define ACPI_MEMORY_AFFINITY 0x1
|
|
struct acpi_20_srat_processor {
|
|
uint8_t type;
|
|
uint8_t length;
|
|
uint8_t domain;
|
|
uint8_t apic_id;
|
|
uint32_t flags;
|
|
uint8_t sapic_id;
|
|
uint8_t domain_hi[3];
|
|
uint32_t reserved;
|
|
};
|
|
|
|
/*
|
|
* Local APIC Affinity Flags. All other bits are reserved and must be 0.
|
|
*/
|
|
#define ACPI_LOCAL_APIC_AFFIN_ENABLED (1 << 0)
|
|
|
|
struct acpi_20_srat_memory {
|
|
uint8_t type;
|
|
uint8_t length;
|
|
uint32_t domain;
|
|
uint16_t reserved;
|
|
uint64_t base_address;
|
|
uint64_t mem_length;
|
|
uint32_t reserved2;
|
|
uint32_t flags;
|
|
uint64_t reserved3;
|
|
};
|
|
|
|
/*
|
|
* Memory Affinity Flags. All other bits are reserved and must be 0.
|
|
*/
|
|
#define ACPI_MEM_AFFIN_ENABLED (1 << 0)
|
|
#define ACPI_MEM_AFFIN_HOTPLUGGABLE (1 << 1)
|
|
#define ACPI_MEM_AFFIN_NONVOLATILE (1 << 2)
|
|
|
|
struct acpi_20_slit {
|
|
struct acpi_header header;
|
|
uint64_t localities;
|
|
uint8_t entry[0];
|
|
};
|
|
|
|
/*
|
|
* Table Signatures.
|
|
*/
|
|
#define ACPI_2_0_RSDP_SIGNATURE ASCII64('R','S','D',' ','P','T','R',' ')
|
|
#define ACPI_2_0_FACS_SIGNATURE ASCII32('F','A','C','S')
|
|
#define ACPI_FADT_SIGNATURE ASCII32('F','A','C','P')
|
|
#define ACPI_2_0_MADT_SIGNATURE ASCII32('A','P','I','C')
|
|
#define ACPI_2_0_RSDT_SIGNATURE ASCII32('R','S','D','T')
|
|
#define ACPI_2_0_XSDT_SIGNATURE ASCII32('X','S','D','T')
|
|
#define ACPI_2_0_TCPA_SIGNATURE ASCII32('T','C','P','A')
|
|
#define ACPI_2_0_TPM2_SIGNATURE ASCII32('T','P','M','2')
|
|
#define ACPI_2_0_HPET_SIGNATURE ASCII32('H','P','E','T')
|
|
#define ACPI_2_0_WAET_SIGNATURE ASCII32('W','A','E','T')
|
|
#define ACPI_2_0_SRAT_SIGNATURE ASCII32('S','R','A','T')
|
|
#define ACPI_2_0_SLIT_SIGNATURE ASCII32('S','L','I','T')
|
|
|
|
/*
|
|
* Table revision numbers.
|
|
*/
|
|
#define ACPI_2_0_RSDP_REVISION 0x02
|
|
#define ACPI_2_0_MADT_REVISION 0x02
|
|
#define ACPI_2_0_RSDT_REVISION 0x01
|
|
#define ACPI_2_0_XSDT_REVISION 0x01
|
|
#define ACPI_2_0_TCPA_REVISION 0x02
|
|
#define ACPI_2_0_TPM2_REVISION 0x04
|
|
#define ACPI_2_0_HPET_REVISION 0x01
|
|
#define ACPI_2_0_WAET_REVISION 0x01
|
|
#define ACPI_1_0_FADT_REVISION 0x01
|
|
#define ACPI_2_0_SRAT_REVISION 0x01
|
|
#define ACPI_2_0_SLIT_REVISION 0x01
|
|
|
|
#pragma pack ()
|
|
|
|
#endif /* _ACPI_2_0_H_ */
|
|
|
|
/*
|
|
* Local variables:
|
|
* mode: C
|
|
* c-file-style: "BSD"
|
|
* c-basic-offset: 4
|
|
* tab-width: 4
|
|
* indent-tabs-mode: nil
|
|
* End:
|
|
*/
|