[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH v3 08/13] hw/acpi/aml-build: add processor hierarchy node str
From: |
Ying Fang |
Subject: |
[RFC PATCH v3 08/13] hw/acpi/aml-build: add processor hierarchy node structure |
Date: |
Mon, 9 Nov 2020 11:04:47 +0800 |
Add the processor hierarchy node structures to build ACPI information
for cpu topology. Three helpers are introduced:
(1) build_socket_hierarchy for socket description structure
(2) build_processor_hierarchy for processor description structure
(3) build_smt_hierarchy for thread (logic processor) description structure
We split the processor hierarchy node structure descriptions into
three helpers even if there are some identical code snippets between
them. The reason is that the private resources are variable among
different topology level. This will make the ACPI PPTT table much
more readable and easy to construct.
Cc: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Ying Fang <fangying1@huawei.com>
Signed-off-by: Henglong Fan <fanhenglong@huawei.com>
---
hw/acpi/aml-build.c | 37 +++++++++++++++++++++++++++++++++++++
include/hw/acpi/aml-build.h | 7 +++++++
2 files changed, 44 insertions(+)
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index 3792ba96ce..d1aa9fd716 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -1770,6 +1770,43 @@ void build_slit(GArray *table_data, BIOSLinker *linker,
MachineState *ms)
table_data->len - slit_start, 1, NULL, NULL);
}
+/*
+ * ACPI 6.3: 5.2.29.1 Processor hierarchy node structure (Type 0)
+ */
+void build_socket_hierarchy(GArray *tbl, uint32_t parent, uint32_t id)
+{
+ build_append_byte(tbl, 0); /* Type 0 - processor */
+ build_append_byte(tbl, 20); /* Length, no private resources */
+ build_append_int_noprefix(tbl, 0, 2); /* Reserved */
+ build_append_int_noprefix(tbl, 1, 4); /* Flags: Physical package */
+ build_append_int_noprefix(tbl, parent, 4); /* Parent */
+ build_append_int_noprefix(tbl, id, 4); /* ACPI processor ID */
+ build_append_int_noprefix(tbl, 0, 4); /* Number of private resources */
+}
+
+void build_processor_hierarchy(GArray *tbl, uint32_t flags,
+ uint32_t parent, uint32_t id)
+{
+ build_append_byte(tbl, 0); /* Type 0 - processor */
+ build_append_byte(tbl, 20); /* Length, no private resources */
+ build_append_int_noprefix(tbl, 0, 2); /* Reserved */
+ build_append_int_noprefix(tbl, flags, 4); /* Flags */
+ build_append_int_noprefix(tbl, parent, 4); /* Parent */
+ build_append_int_noprefix(tbl, id, 4); /* ACPI processor ID */
+ build_append_int_noprefix(tbl, 0, 4); /* Number of private resources */
+}
+
+void build_smt_hierarchy(GArray *tbl, uint32_t parent, uint32_t id)
+{
+ build_append_byte(tbl, 0); /* Type 0 - processor */
+ build_append_byte(tbl, 20); /* Length, no private resources */
+ build_append_int_noprefix(tbl, 0, 2); /* Reserved */
+ build_append_int_noprefix(tbl, 0x0e, 4); /* Processor is a thread */
+ build_append_int_noprefix(tbl, parent , 4); /* Parent */
+ build_append_int_noprefix(tbl, id, 4); /* ACPI processor ID */
+ build_append_int_noprefix(tbl, 0, 4); /* Num of private resources */
+}
+
/* build rev1/rev3/rev5.1 FADT */
void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f,
const char *oem_id, const char *oem_table_id)
diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
index fe0055fffb..56474835a7 100644
--- a/include/hw/acpi/aml-build.h
+++ b/include/hw/acpi/aml-build.h
@@ -437,6 +437,13 @@ void build_srat_memory(AcpiSratMemoryAffinity *numamem,
uint64_t base,
void build_slit(GArray *table_data, BIOSLinker *linker, MachineState *ms);
+void build_socket_hierarchy(GArray *tbl, uint32_t parent, uint32_t id);
+
+void build_processor_hierarchy(GArray *tbl, uint32_t flags,
+ uint32_t parent, uint32_t id);
+
+void build_smt_hierarchy(GArray *tbl, uint32_t parent, uint32_t id);
+
void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f,
const char *oem_id, const char *oem_table_id);
--
2.23.0
- [RFC PATCH v3 00/13] hw/arm/virt: Introduce cpu and cache topology support, Ying Fang, 2020/11/08
- [RFC PATCH v3 06/13] hw/arm/virt: DT: add cpu-map, Ying Fang, 2020/11/08
- [RFC PATCH v3 12/13] hw/acpi/aml-build: Build ACPI cpu cache hierarchy information, Ying Fang, 2020/11/08
- [RFC PATCH v3 08/13] hw/acpi/aml-build: add processor hierarchy node structure,
Ying Fang <=
- [RFC PATCH v3 04/13] device_tree: Add qemu_fdt_add_path, Ying Fang, 2020/11/08
- [RFC PATCH v3 13/13] hw/arm/virt-acpi-build: Enable cpu and cache topology, Ying Fang, 2020/11/08
- [RFC PATCH v3 02/13] hw/arm/virt: Remove unused variable, Ying Fang, 2020/11/08
- [RFC PATCH v3 11/13] hw/arm/virt: add fdt cache information, Ying Fang, 2020/11/08
- [RFC PATCH v3 03/13] hw/arm/virt: Replace smp_parse with one that prefers cores, Ying Fang, 2020/11/08
- [RFC PATCH v3 01/13] hw/arm/virt: Spell out smp.cpus and smp.max_cpus, Ying Fang, 2020/11/08