qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 07/13] acpi: make toplevel ACPI tables blob a dedica


From: Igor Mammedov
Subject: [Qemu-devel] [PATCH 07/13] acpi: make toplevel ACPI tables blob a dedicated object
Date: Wed, 28 Jan 2015 10:03:31 +0000

it will help to generalize and reuse blob intitalization/
destruction code.

Signed-off-by: Igor Mammedov <address@hidden>
---
 hw/acpi/acpi-build-utils.c         | 12 +++++++++++-
 hw/i386/acpi-build.c               |  4 ++--
 include/hw/acpi/acpi-build-utils.h | 17 ++++++++++++++++-
 3 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/hw/acpi/acpi-build-utils.c b/hw/acpi/acpi-build-utils.c
index 02f60d7..bffad1e 100644
--- a/hw/acpi/acpi-build-utils.c
+++ b/hw/acpi/acpi-build-utils.c
@@ -320,9 +320,10 @@ void aml_append(AcpiAml *parent_ctx, AcpiAml *child)
         uint8_t *start = (uint8_t *)parent_ctx->buf->data +
                          parent_ctx->buf->len;
         uint32_t le32_len = cpu_to_le32(child->buf->len);
+        AcpiAmlTablesBlob *tables_blob = AML_TABLES_BLOB(parent_ctx);
 
         /* create linker entry for the DefinitionBlock */
-        bios_linker_loader_add_checksum(parent_ctx->linker,
+        bios_linker_loader_add_checksum(tables_blob->linker,
             ACPI_BUILD_TABLE_FILE,
             parent_ctx->buf->data,
             start, child->buf->len, start + 9 /* checksum offset */);
@@ -948,9 +949,18 @@ static const TypeInfo aml_object_type_info = {
     .class_size = sizeof(AcpiAmlClass),
 };
 
+static const TypeInfo aml_tables_blob_type_info = {
+    .name = TYPE_AML_TABLES_BLOB,
+    .parent = TYPE_AML_OBJECT,
+    .instance_size = sizeof(AcpiAmlTablesBlob),
+    .abstract = false,
+    .class_size = sizeof(AcpiAmlTablesBlobClass),
+};
+
 static void aml_register_types(void)
 {
     type_register_static(&aml_object_type_info);
+    type_register_static(&aml_tables_blob_type_info);
 }
 
 type_init(aml_register_types)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index f456f53..624c903 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -1279,10 +1279,10 @@ struct AcpiBuildTables {
 static inline void acpi_build_tables_init(AcpiBuildTables *tables)
 {
     tables->rsdp = g_array_new(false, true /* clear */, 1);
-    tables->table_data = AML_OBJECT(object_new(TYPE_AML_OBJECT));
     tables->tcpalog = g_array_new(false, true /* clear */, 1);
     tables->linker = bios_linker_loader_init();
-    tables->table_data->linker = tables->linker;
+    tables->table_data = AML_OBJECT(object_new(TYPE_AML_TABLES_BLOB));
+    AML_TABLES_BLOB(tables->table_data)->linker = tables->linker;
 }
 
 static inline void acpi_build_tables_cleanup(AcpiBuildTables *tables, bool 
mfre)
diff --git a/include/hw/acpi/acpi-build-utils.h 
b/include/hw/acpi/acpi-build-utils.h
index c36ddb6..b2d023e 100644
--- a/include/hw/acpi/acpi-build-utils.h
+++ b/include/hw/acpi/acpi-build-utils.h
@@ -30,13 +30,28 @@ typedef struct AcpiAml {
     GArray *buf;
     uint8_t op;
     AcpiBlockFlags block_flags;
-    GArray *linker;
 } AcpiAml;
 
 typedef struct AcpiAmlClass {
     ObjectClass parent_class;
 } AcpiAmlClass;
 
+#define TYPE_AML_TABLES_BLOB "aml-tables-blob"
+#define AML_TABLES_BLOB(obj) OBJECT_CHECK(AcpiAmlTablesBlob, (obj), 
TYPE_AML_TABLES_BLOB)
+#define AML_TABLES_BLOB_CLASS(klass) \
+     OBJECT_CLASS_CHECK(AcpiAmlTablesBlobClass, (klass), TYPE_AML_TABLES_BLOB)
+#define AML_TABLES_BLOB_GET_CLASS \
+     OBJECT_GET_CLASS(AcpiAmlTablesBlobClass, (obj), TYPE_AML_TABLES_BLOB)
+
+typedef struct AcpiAmlTablesBlob {
+    AcpiAml parent_obj;
+    GArray *linker;
+} AcpiAmlTablesBlob;
+
+typedef struct AcpiAmlTablesBlobClass {
+  AcpiAmlClass parent_class;
+} AcpiAmlTablesBlobClass;
+
 typedef enum {
     acpi_decode10 = 0,
     acpi_decode16 = 1,
-- 
1.8.3.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]