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