Files
xen/tools/libacpi/static_tables.c
T
Boris Ostrovsky d6ac8e22c7 acpi/x86: define ACPI IO registers for PVH guests
Define VCPU available map address (used by AML's PRSC method)
and GPE0 CPU hotplug event number. Use these definitions in mk_dsdt
instead hardcoded values.

These definitions will later be used by both the hypervisor and
the toolstack (initially for PVH guests only), thus they are
placed in public headers.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
2016-12-20 09:54:38 +01:00

170 lines
5.3 KiB
C

/*
* Copyright (c) 2004, Intel Corporation.
* Copyright (c) 2006, Keir Fraser, XenSource Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; version 2.1 only. with the special
* exception on linking described in file LICENSE.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*/
#include "acpi2_0.h"
#include "../config.h"
/*
* Firmware ACPI Control Structure (FACS).
*/
struct acpi_20_facs Facs = {
.signature = ACPI_2_0_FACS_SIGNATURE,
.length = sizeof(struct acpi_20_facs),
.version = ACPI_2_0_FACS_VERSION
};
/*
* Fixed ACPI Description Table (FADT).
*/
/*
* These values must match register definitions in struct hvm_hw_acpi
* (in xen/include/public/arch-x86/hvm/save.h).
*/
#define ACPI_PM1A_EVT_BLK_BIT_WIDTH 0x20
#define ACPI_PM1A_EVT_BLK_BIT_OFFSET 0x00
#define ACPI_PM1A_CNT_BLK_BIT_WIDTH 0x10
#define ACPI_PM1A_CNT_BLK_BIT_OFFSET 0x00
#define ACPI_PM_TMR_BLK_BIT_WIDTH 0x20
#define ACPI_PM_TMR_BLK_BIT_OFFSET 0x00
struct acpi_fadt Fadt = {
.header = {
.signature = ACPI_FADT_SIGNATURE,
.oem_id = ACPI_OEM_ID,
.oem_table_id = ACPI_OEM_TABLE_ID,
.oem_revision = ACPI_OEM_REVISION,
.creator_id = ACPI_CREATOR_ID,
.creator_revision = ACPI_CREATOR_REVISION
},
.sci_int = 9,
.pm1a_evt_blk = ACPI_PM1A_EVT_BLK_ADDRESS_V1,
.pm1a_cnt_blk = ACPI_PM1A_CNT_BLK_ADDRESS_V1,
.pm_tmr_blk = ACPI_PM_TMR_BLK_ADDRESS_V1,
.gpe0_blk = ACPI_GPE0_BLK_ADDRESS_V1,
.pm1_evt_len = ACPI_PM1A_EVT_BLK_BIT_WIDTH / 8,
.pm1_cnt_len = ACPI_PM1A_CNT_BLK_BIT_WIDTH / 8,
.pm_tmr_len = ACPI_PM_TMR_BLK_BIT_WIDTH / 8,
.gpe0_blk_len = ACPI_GPE0_BLK_LEN_V1,
.p_lvl2_lat = 0x0fff, /* >100, means we do not support C2 state */
.p_lvl3_lat = 0x0fff, /* >1000, means we do not support C3 state */
.flags = (ACPI_PROC_C1 |
ACPI_WBINVD |
ACPI_FIX_RTC | ACPI_TMR_VAL_EXT |
ACPI_USE_PLATFORM_CLOCK),
.reset_reg = {
.address_space_id = ACPI_SYSTEM_IO,
.register_bit_width = 8, /* *must* be 8 */
.register_bit_offset = 0, /* *must* be 0 */
.address = 0xcf9
},
.reset_value = 6,
.x_pm1a_evt_blk = {
.address_space_id = ACPI_SYSTEM_IO,
.register_bit_width = ACPI_PM1A_EVT_BLK_BIT_WIDTH,
.register_bit_offset = ACPI_PM1A_EVT_BLK_BIT_OFFSET,
.address = ACPI_PM1A_EVT_BLK_ADDRESS_V1,
},
.x_pm1a_cnt_blk = {
.address_space_id = ACPI_SYSTEM_IO,
.register_bit_width = ACPI_PM1A_CNT_BLK_BIT_WIDTH,
.register_bit_offset = ACPI_PM1A_CNT_BLK_BIT_OFFSET,
.address = ACPI_PM1A_CNT_BLK_ADDRESS_V1,
},
.x_pm_tmr_blk = {
.address_space_id = ACPI_SYSTEM_IO,
.register_bit_width = ACPI_PM_TMR_BLK_BIT_WIDTH,
.register_bit_offset = ACPI_PM_TMR_BLK_BIT_OFFSET,
.address = ACPI_PM_TMR_BLK_ADDRESS_V1,
}
};
struct acpi_20_rsdt Rsdt = {
.header = {
.signature = ACPI_2_0_RSDT_SIGNATURE,
.length = sizeof(struct acpi_header),
.revision = ACPI_2_0_RSDT_REVISION,
.oem_id = ACPI_OEM_ID,
.oem_table_id = ACPI_OEM_TABLE_ID,
.oem_revision = ACPI_OEM_REVISION,
.creator_id = ACPI_CREATOR_ID,
.creator_revision = ACPI_CREATOR_REVISION
}
};
struct acpi_20_xsdt Xsdt = {
.header = {
.signature = ACPI_2_0_XSDT_SIGNATURE,
.length = sizeof(struct acpi_header),
.revision = ACPI_2_0_XSDT_REVISION,
.oem_id = ACPI_OEM_ID,
.oem_table_id = ACPI_OEM_TABLE_ID,
.oem_revision = ACPI_OEM_REVISION,
.creator_id = ACPI_CREATOR_ID,
.creator_revision = ACPI_CREATOR_REVISION
}
};
struct acpi_20_rsdp Rsdp = {
.signature = ACPI_2_0_RSDP_SIGNATURE,
.oem_id = ACPI_OEM_ID,
.revision = ACPI_2_0_RSDP_REVISION,
.length = sizeof(struct acpi_20_rsdp)
};
#define ACPI_WAET_RTC_NO_ACK (1<<0) /* RTC requires no int acknowledge */
#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */
/*
* The state of the RTC flag getting passed to the guest must be in
* sync with the mode selection in the hypervisor RTC emulation code.
*/
#define ACPI_WAET_FLAGS (ACPI_WAET_RTC_NO_ACK | \
ACPI_WAET_TIMER_ONE_READ)
struct acpi_20_waet Waet = {
.header = {
.signature = ACPI_2_0_WAET_SIGNATURE,
.length = sizeof(struct acpi_20_waet),
.revision = ACPI_2_0_WAET_REVISION,
.oem_id = ACPI_OEM_ID,
.oem_table_id = ACPI_OEM_TABLE_ID,
.oem_revision = ACPI_OEM_REVISION,
.creator_id = ACPI_CREATOR_ID,
.creator_revision = ACPI_CREATOR_REVISION
},
.flags = ACPI_WAET_FLAGS
};
/*
* Local variables:
* mode: C
* c-file-style: "BSD"
* c-basic-offset: 4
* tab-width: 4
* indent-tabs-mode: nil
* End:
*/