[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 31/55] acpi: support specified oem table id for build
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 31/55] acpi: support specified oem table id for build_header |
Date: |
Tue, 22 Dec 2015 18:54:08 +0200 |
From: Xiao Guangrong <address@hidden>
Let build_header() support specified OEM table id so that we can build
multiple SSDT later
If the oem table id is not specified (aka, NULL), we use the default id
instead as the previous behavior
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Xiao Guangrong <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
include/hw/acpi/aml-build.h | 3 ++-
hw/acpi/aml-build.c | 15 +++++++++++----
hw/arm/virt-acpi-build.c | 13 +++++++------
hw/i386/acpi-build.c | 20 ++++++++++----------
4 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
index 0d36453..9fa61a3 100644
--- a/include/hw/acpi/aml-build.h
+++ b/include/hw/acpi/aml-build.h
@@ -310,7 +310,8 @@ Aml *aml_unicode(const char *str);
void
build_header(GArray *linker, GArray *table_data,
- AcpiTableHeader *h, const char *sig, int len, uint8_t rev);
+ AcpiTableHeader *h, const char *sig, int len, uint8_t rev,
+ const char *oem_table_id);
void *acpi_data_push(GArray *table_data, unsigned size);
unsigned acpi_data_len(GArray *table);
void acpi_add_table(GArray *table_offsets, GArray *table_data);
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index 302cf01..363e83b 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -1242,14 +1242,21 @@ Aml *aml_unicode(const char *str)
void
build_header(GArray *linker, GArray *table_data,
- AcpiTableHeader *h, const char *sig, int len, uint8_t rev)
+ AcpiTableHeader *h, const char *sig, int len, uint8_t rev,
+ const char *oem_table_id)
{
memcpy(&h->signature, sig, 4);
h->length = cpu_to_le32(len);
h->revision = rev;
memcpy(h->oem_id, ACPI_BUILD_APPNAME6, 6);
- memcpy(h->oem_table_id, ACPI_BUILD_APPNAME4, 4);
- memcpy(h->oem_table_id + 4, sig, 4);
+
+ if (oem_table_id) {
+ strncpy((char *)h->oem_table_id, oem_table_id,
sizeof(h->oem_table_id));
+ } else {
+ memcpy(h->oem_table_id, ACPI_BUILD_APPNAME4, 4);
+ memcpy(h->oem_table_id + 4, sig, 4);
+ }
+
h->oem_revision = cpu_to_le32(1);
memcpy(h->asl_compiler_id, ACPI_BUILD_APPNAME4, 4);
h->asl_compiler_revision = cpu_to_le32(1);
@@ -1316,5 +1323,5 @@ build_rsdt(GArray *table_data, GArray *linker, GArray
*table_offsets)
sizeof(uint32_t));
}
build_header(linker, table_data,
- (void *)rsdt, "RSDT", rsdt_len, 1);
+ (void *)rsdt, "RSDT", rsdt_len, 1, NULL);
}
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 32ec19e..7aa0ab3 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -423,7 +423,8 @@ build_spcr(GArray *table_data, GArray *linker,
VirtGuestInfo *guest_info)
spcr->pci_device_id = 0xffff; /* PCI Device ID: not a PCI device */
spcr->pci_vendor_id = 0xffff; /* PCI Vendor ID: not a PCI device */
- build_header(linker, table_data, (void *)spcr, "SPCR", sizeof(*spcr), 2);
+ build_header(linker, table_data, (void *)spcr, "SPCR", sizeof(*spcr), 2,
+ NULL);
}
static void
@@ -442,7 +443,7 @@ build_mcfg(GArray *table_data, GArray *linker,
VirtGuestInfo *guest_info)
mcfg->allocation[0].end_bus_number = (memmap[VIRT_PCIE_ECAM].size
/ PCIE_MMCFG_SIZE_MIN) - 1;
- build_header(linker, table_data, (void *)mcfg, "MCFG", len, 1);
+ build_header(linker, table_data, (void *)mcfg, "MCFG", len, 1, NULL);
}
/* GTDT */
@@ -468,7 +469,7 @@ build_gtdt(GArray *table_data, GArray *linker)
build_header(linker, table_data,
(void *)(table_data->data + gtdt_start), "GTDT",
- table_data->len - gtdt_start, 2);
+ table_data->len - gtdt_start, 2, NULL);
}
/* MADT */
@@ -530,7 +531,7 @@ build_madt(GArray *table_data, GArray *linker,
VirtGuestInfo *guest_info,
build_header(linker, table_data,
(void *)(table_data->data + madt_start), "APIC",
- table_data->len - madt_start, 3);
+ table_data->len - madt_start, 3, NULL);
}
/* FADT */
@@ -555,7 +556,7 @@ build_fadt(GArray *table_data, GArray *linker, unsigned
dsdt)
sizeof fadt->dsdt);
build_header(linker, table_data,
- (void *)fadt, "FACP", sizeof(*fadt), 5);
+ (void *)fadt, "FACP", sizeof(*fadt), 5, NULL);
}
/* DSDT */
@@ -591,7 +592,7 @@ build_dsdt(GArray *table_data, GArray *linker,
VirtGuestInfo *guest_info)
g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len);
build_header(linker, table_data,
(void *)(table_data->data + table_data->len - dsdt->buf->len),
- "DSDT", dsdt->buf->len, 2);
+ "DSDT", dsdt->buf->len, 2, NULL);
free_aml_allocator();
}
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index a60436b..27d2caf 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -361,7 +361,7 @@ build_fadt(GArray *table_data, GArray *linker, AcpiPmInfo
*pm,
fadt_setup(fadt, pm);
build_header(linker, table_data,
- (void *)fadt, "FACP", sizeof(*fadt), 1);
+ (void *)fadt, "FACP", sizeof(*fadt), 1, NULL);
}
static void
@@ -431,7 +431,7 @@ build_madt(GArray *table_data, GArray *linker, AcpiCpuInfo
*cpu,
build_header(linker, table_data,
(void *)(table_data->data + madt_start), "APIC",
- table_data->len - madt_start, 1);
+ table_data->len - madt_start, 1, NULL);
}
/* Assign BSEL property to all buses. In the future, this can be changed
@@ -1374,7 +1374,7 @@ build_ssdt(GArray *table_data, GArray *linker,
g_array_append_vals(table_data, ssdt->buf->data, ssdt->buf->len);
build_header(linker, table_data,
(void *)(table_data->data + table_data->len - ssdt->buf->len),
- "SSDT", ssdt->buf->len, 1);
+ "SSDT", ssdt->buf->len, 1, NULL);
free_aml_allocator();
}
@@ -1390,7 +1390,7 @@ build_hpet(GArray *table_data, GArray *linker)
hpet->timer_block_id = cpu_to_le32(0x8086a201);
hpet->addr.address = cpu_to_le64(HPET_BASE);
build_header(linker, table_data,
- (void *)hpet, "HPET", sizeof(*hpet), 1);
+ (void *)hpet, "HPET", sizeof(*hpet), 1, NULL);
}
static void
@@ -1413,7 +1413,7 @@ build_tpm_tcpa(GArray *table_data, GArray *linker, GArray
*tcpalog)
sizeof(tcpa->log_area_start_address));
build_header(linker, table_data,
- (void *)tcpa, "TCPA", sizeof(*tcpa), 2);
+ (void *)tcpa, "TCPA", sizeof(*tcpa), 2, NULL);
acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
}
@@ -1430,7 +1430,7 @@ build_tpm2(GArray *table_data, GArray *linker)
tpm2_ptr->start_method = cpu_to_le32(TPM2_START_METHOD_MMIO);
build_header(linker, table_data,
- (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4);
+ (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL);
}
typedef enum {
@@ -1544,7 +1544,7 @@ build_srat(GArray *table_data, GArray *linker,
PcGuestInfo *guest_info)
build_header(linker, table_data,
(void *)(table_data->data + srat_start),
"SRAT",
- table_data->len - srat_start, 1);
+ table_data->len - srat_start, 1, NULL);
}
static void
@@ -1573,7 +1573,7 @@ build_mcfg_q35(GArray *table_data, GArray *linker,
AcpiMcfgInfo *info)
} else {
sig = "MCFG";
}
- build_header(linker, table_data, (void *)mcfg, sig, len, 1);
+ build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL);
}
static void
@@ -1597,7 +1597,7 @@ build_dmar_q35(GArray *table_data, GArray *linker)
drhd->address = cpu_to_le64(Q35_HOST_BRIDGE_IOMMU_ADDR);
build_header(linker, table_data, (void *)(table_data->data + dmar_start),
- "DMAR", table_data->len - dmar_start, 1);
+ "DMAR", table_data->len - dmar_start, 1, NULL);
}
static void
@@ -1612,7 +1612,7 @@ build_dsdt(GArray *table_data, GArray *linker,
AcpiMiscInfo *misc)
memset(dsdt, 0, sizeof *dsdt);
build_header(linker, table_data, dsdt, "DSDT",
- misc->dsdt_size, 1);
+ misc->dsdt_size, 1, NULL);
}
static GArray *
--
MST
- [Qemu-devel] [PULL 23/55] ipmi: Add a force off function, (continued)
- [Qemu-devel] [PULL 23/55] ipmi: Add a force off function, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 22/55] ipmi: Add firmware registration to the ISA interface, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 21/55] ipmi: Add a firmware configuration repository, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 24/55] q35: skip q35-acpi-dsdt.aml load if not needed, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 25/55] pc: Remove redundant code from pc-*-2.3 machine classes, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 26/55] pc: Add pc-*-2.6 machine classes, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 27/55] pc: Change indentation of PC_COMPAT_* to 4 spaces, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 28/55] hw/compat.h: Change indentation of HW_COMPAT_* to 4 spaces, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 30/55] nvdimm: implement NVDIMM device abstract, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 29/55] docs/pci_expander_bridge: fix typo, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 31/55] acpi: support specified oem table id for build_header,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 32/55] nvdimm acpi: build ACPI NFIT table, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 33/55] nvdimm acpi: build ACPI nvdimm devices, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 34/55] nvdimm: add maintain info, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 35/55] acpi: add aml_derefof, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 36/55] acpi: add aml_sizeof, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 37/55] acpi: add aml_lgreater_equal(), Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 38/55] acpi: add aml_mutex(), aml_acquire(), aml_release(), Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 39/55] acpi: add aml_create_qword_field(), Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 40/55] acpi: aml: add helper for Opcode Arg2 Arg2 [Dst] AML pattern, Michael S. Tsirkin, 2015/12/22
- [Qemu-devel] [PULL 41/55] acpi: extend aml_add() to accept target argument, Michael S. Tsirkin, 2015/12/22