1 /* 2 * Copyright (c) 2004, Intel Corporation. 3 * Copyright (c) 2006, Keir Fraser, XenSource Inc. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU Lesser General Public License as published 7 * by the Free Software Foundation; version 2.1 only. with the special 8 * exception on linking described in file LICENSE. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 */ 15 16 #include "acpi2_0.h" 17 #include "../config.h" 18 19 /* 20 * Firmware ACPI Control Structure (FACS). 21 */ 22 23 struct acpi_20_facs Facs = { 24 .signature = ACPI_2_0_FACS_SIGNATURE, 25 .length = sizeof(struct acpi_20_facs), 26 .version = ACPI_2_0_FACS_VERSION 27 }; 28 29 30 /* 31 * Fixed ACPI Description Table (FADT). 32 */ 33 34 /* 35 * These values must match register definitions in struct hvm_hw_acpi 36 * (in xen/include/public/arch-x86/hvm/save.h). 37 */ 38 #define ACPI_PM1A_EVT_BLK_BIT_WIDTH 0x20 39 #define ACPI_PM1A_EVT_BLK_BIT_OFFSET 0x00 40 #define ACPI_PM1A_CNT_BLK_BIT_WIDTH 0x10 41 #define ACPI_PM1A_CNT_BLK_BIT_OFFSET 0x00 42 #define ACPI_PM_TMR_BLK_BIT_WIDTH 0x20 43 #define ACPI_PM_TMR_BLK_BIT_OFFSET 0x00 44 45 struct acpi_fadt Fadt = { 46 .header = { 47 .signature = ACPI_FADT_SIGNATURE, 48 .oem_id = ACPI_OEM_ID, 49 .oem_table_id = ACPI_OEM_TABLE_ID, 50 .oem_revision = ACPI_OEM_REVISION, 51 .creator_id = ACPI_CREATOR_ID, 52 .creator_revision = ACPI_CREATOR_REVISION 53 }, 54 55 .sci_int = 9, 56 57 .pm1a_evt_blk = ACPI_PM1A_EVT_BLK_ADDRESS_V1, 58 .pm1a_cnt_blk = ACPI_PM1A_CNT_BLK_ADDRESS_V1, 59 .pm_tmr_blk = ACPI_PM_TMR_BLK_ADDRESS_V1, 60 .gpe0_blk = ACPI_GPE0_BLK_ADDRESS_V1, 61 .pm1_evt_len = ACPI_PM1A_EVT_BLK_BIT_WIDTH / 8, 62 .pm1_cnt_len = ACPI_PM1A_CNT_BLK_BIT_WIDTH / 8, 63 .pm_tmr_len = ACPI_PM_TMR_BLK_BIT_WIDTH / 8, 64 .gpe0_blk_len = ACPI_GPE0_BLK_LEN_V1, 65 66 .p_lvl2_lat = 0x0fff, /* >100, means we do not support C2 state */ 67 .p_lvl3_lat = 0x0fff, /* >1000, means we do not support C3 state */ 68 .flags = (ACPI_PROC_C1 | 69 ACPI_WBINVD | 70 ACPI_FIX_RTC | ACPI_TMR_VAL_EXT | 71 ACPI_USE_PLATFORM_CLOCK), 72 73 .reset_reg = { 74 .address_space_id = ACPI_SYSTEM_IO, 75 .register_bit_width = 8, /* *must* be 8 */ 76 .register_bit_offset = 0, /* *must* be 0 */ 77 .address = 0xcf9 78 }, 79 .reset_value = 6, 80 81 .x_pm1a_evt_blk = { 82 .address_space_id = ACPI_SYSTEM_IO, 83 .register_bit_width = ACPI_PM1A_EVT_BLK_BIT_WIDTH, 84 .register_bit_offset = ACPI_PM1A_EVT_BLK_BIT_OFFSET, 85 .address = ACPI_PM1A_EVT_BLK_ADDRESS_V1, 86 }, 87 88 .x_pm1a_cnt_blk = { 89 .address_space_id = ACPI_SYSTEM_IO, 90 .register_bit_width = ACPI_PM1A_CNT_BLK_BIT_WIDTH, 91 .register_bit_offset = ACPI_PM1A_CNT_BLK_BIT_OFFSET, 92 .address = ACPI_PM1A_CNT_BLK_ADDRESS_V1, 93 }, 94 95 .x_pm_tmr_blk = { 96 .address_space_id = ACPI_SYSTEM_IO, 97 .register_bit_width = ACPI_PM_TMR_BLK_BIT_WIDTH, 98 .register_bit_offset = ACPI_PM_TMR_BLK_BIT_OFFSET, 99 .address = ACPI_PM_TMR_BLK_ADDRESS_V1, 100 } 101 }; 102 103 struct acpi_20_rsdt Rsdt = { 104 .header = { 105 .signature = ACPI_2_0_RSDT_SIGNATURE, 106 .length = sizeof(struct acpi_header), 107 .revision = ACPI_2_0_RSDT_REVISION, 108 .oem_id = ACPI_OEM_ID, 109 .oem_table_id = ACPI_OEM_TABLE_ID, 110 .oem_revision = ACPI_OEM_REVISION, 111 .creator_id = ACPI_CREATOR_ID, 112 .creator_revision = ACPI_CREATOR_REVISION 113 } 114 }; 115 116 struct acpi_20_xsdt Xsdt = { 117 .header = { 118 .signature = ACPI_2_0_XSDT_SIGNATURE, 119 .length = sizeof(struct acpi_header), 120 .revision = ACPI_2_0_XSDT_REVISION, 121 .oem_id = ACPI_OEM_ID, 122 .oem_table_id = ACPI_OEM_TABLE_ID, 123 .oem_revision = ACPI_OEM_REVISION, 124 .creator_id = ACPI_CREATOR_ID, 125 .creator_revision = ACPI_CREATOR_REVISION 126 } 127 }; 128 129 130 struct acpi_20_rsdp Rsdp = { 131 .signature = ACPI_2_0_RSDP_SIGNATURE, 132 .oem_id = ACPI_OEM_ID, 133 .revision = ACPI_2_0_RSDP_REVISION, 134 .length = sizeof(struct acpi_20_rsdp) 135 }; 136 137 #define ACPI_WAET_RTC_NO_ACK (1<<0) /* RTC requires no int acknowledge */ 138 #define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ 139 140 /* 141 * The state of the RTC flag getting passed to the guest must be in 142 * sync with the mode selection in the hypervisor RTC emulation code. 143 */ 144 #define ACPI_WAET_FLAGS (ACPI_WAET_RTC_NO_ACK | \ 145 ACPI_WAET_TIMER_ONE_READ) 146 147 struct acpi_20_waet Waet = { 148 .header = { 149 .signature = ACPI_2_0_WAET_SIGNATURE, 150 .length = sizeof(struct acpi_20_waet), 151 .revision = ACPI_2_0_WAET_REVISION, 152 .oem_id = ACPI_OEM_ID, 153 .oem_table_id = ACPI_OEM_TABLE_ID, 154 .oem_revision = ACPI_OEM_REVISION, 155 .creator_id = ACPI_CREATOR_ID, 156 .creator_revision = ACPI_CREATOR_REVISION 157 }, 158 .flags = ACPI_WAET_FLAGS 159 }; 160 161 /* 162 * Local variables: 163 * mode: C 164 * c-file-style: "BSD" 165 * c-basic-offset: 4 166 * tab-width: 4 167 * indent-tabs-mode: nil 168 * End: 169 */ 170