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