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