hv: vacpi: add fadt table support

Add FADT table support to support guest S5 setting.

According to ACPI 6.3 Spec, OSPM must ignored the DSDT and FACS fields if them're zero.
However, Linux kernel seems not to abide by the protocol, it will check DSDT still.
So add an empty DSDT to meet it.

Tracked-On: #4623
Signed-off-by: Li Fei1 <fei1.li@intel.com>
This commit is contained in:
Li Fei1
2020-04-21 11:52:41 +08:00
committed by wenlingz
parent 9f036cff6a
commit 4eb3f5a0c7
3 changed files with 79 additions and 7 deletions

View File

@@ -56,6 +56,7 @@
#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
#define ACPI_SIG_DMAR "DMAR"
#define ACPI_SIG_MCFG "MCFG" /* Memory Mapped Configuration table */
#define ACPI_SIG_DSDT "DSDT" /* Differentiated System Description Table */
struct packed_gas {
uint8_t space_id;
@@ -121,6 +122,23 @@ struct acpi_table_xsdt {
uint64_t table_offset_entry[1];
} __packed;
struct acpi_table_fadt {
struct acpi_table_header header;/* Common ACPI table header */
uint32_t facs; /* 32-bit physical address of FACS */
uint32_t dsdt; /* 32-bit physical address of DSDT */
uint8_t unused0[12]; /* ACRN doesn't use these fields */
uint32_t pm1a_event_block; /* 32-bit port address of Power Mgt 1a Event Reg Blk */
uint32_t pm1b_event_block; /* 32-bit port address of Power Mgt 1b Event Reg Blk */
uint32_t pm1a_control_block; /* 32-bit port address of Power Mgt 1a Control Reg Blk */
uint32_t pm1b_control_block; /* 32-bit port address of Power Mgt 1b Control Reg Blk */
uint8_t unused1[16]; /* ACRN doesn't use these fields */
uint8_t pm1_event_length; /* Byte Length of ports at pm1x_event_block */
uint8_t pm1_control_length; /* Byte Length of ports at pm1x_control_block */
uint8_t unused2[22]; /* ACRN doesn't use these fields */
uint32_t flags; /* Miscellaneous flag bits (see below for individual flags) */
uint8_t unused3[128]; /* ACRN doesn't use these fields */
} __packed;
struct acpi_table_madt {
/* Common ACPI table header */
struct acpi_table_header header;