From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56039) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGk4K-0001eF-9O for qemu-devel@nongnu.org; Thu, 29 Jan 2015 03:03:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YGk4H-0000zK-0z for qemu-devel@nongnu.org; Thu, 29 Jan 2015 03:03:16 -0500 Received: from szxga01-in.huawei.com ([119.145.14.64]:53383) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGk4G-0000yz-CA for qemu-devel@nongnu.org; Thu, 29 Jan 2015 03:03:12 -0500 Message-ID: <54C9E927.2060302@huawei.com> Date: Thu, 29 Jan 2015 16:02:47 +0800 From: Shannon Zhao MIME-Version: 1.0 References: <1421938231-25698-1-git-send-email-imammedo@redhat.com> <1421938231-25698-43-git-send-email-imammedo@redhat.com> In-Reply-To: <1421938231-25698-43-git-send-email-imammedo@redhat.com> Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 42/47] acpi: add acpi_def_block() term List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Mammedov , qemu-devel@nongnu.org Cc: pbonzini@redhat.com, drjones@redhat.com, mst@redhat.com, claudio.fontana@huawei.com, marcel.a@redhat.com On 2015/1/22 22:50, Igor Mammedov wrote: > Signed-off-by: Igor Mammedov > --- > hw/acpi/acpi-build-utils.c | 47 ++++++++++++++++++++++++++++++++++++++ > hw/i386/acpi-build.c | 1 - > include/hw/acpi/acpi-build-utils.h | 8 +++++++ > 3 files changed, 55 insertions(+), 1 deletion(-) > > diff --git a/hw/acpi/acpi-build-utils.c b/hw/acpi/acpi-build-utils.c > index b19d370..58f88cd 100644 > --- a/hw/acpi/acpi-build-utils.c > +++ b/hw/acpi/acpi-build-utils.c > @@ -26,6 +26,7 @@ > #include > #include "hw/acpi/acpi-build-utils.h" > #include "qemu/bswap.h" > +#include "hw/acpi/bios-linker-loader.h" > > GArray *build_alloc_array(void) > { > @@ -312,6 +313,21 @@ void aml_append(AcpiAml *parent_ctx, AcpiAml child) > build_prepend_int(child.buf, child.buf->len); > build_package(child.buf, child.op); > break; > + case DEF_BLOCK: { > + uint8_t *start = (uint8_t *)parent_ctx->buf->data + > + parent_ctx->buf->len; > + uint32_t le32_len = cpu_to_le32(child.buf->len); > + > + /* create linker entry for the DefinitionBlock */ > + bios_linker_loader_add_checksum(parent_ctx->linker, > + ACPI_BUILD_TABLE_FILE, > + parent_ctx->buf->data, > + start, child.buf->len, start + 9 /* checksum offset */); > + > + /* set DefinitionBlock length at TableLength offset*/ > + memcpy(child.buf->data + 4, &le32_len, sizeof le32_len); > + break; > + } > default: > break; > } > @@ -843,3 +859,34 @@ AcpiAml acpi_qword_memory(acpiDecode dec, acpiMinFixed min_fixed, > dec, addr_gran, addr_min, addr_max, > addr_trans, len, flags); > } > + > +/* ACPI 5.0: 20.2.1 Table and Table Header Encoding */ > +AcpiAml acpi_def_block(const char *signature, uint8_t revision, > + const char *oem_id, const char *oem_table_id, > + uint32_t oem_revision) > +{ > + int len; > + AcpiAml var = aml_allocate_internal(0, DEF_BLOCK); > + > + assert(strlen(signature) == 4); > + g_array_append_vals(var.buf, signature, 4); > + build_append_value(var.buf, 0, 4); /* Length place holder */ > + build_append_byte(var.buf, revision); > + build_append_byte(var.buf, 0); /* place holder for Checksum */ > + > + len = strlen(oem_id); > + assert(len <= 6); > + g_array_append_vals(var.buf, oem_id, len); > + g_array_append_vals(var.buf, "\0\0\0\0\0\0\0\0", 6 - len); > + > + len = strlen(oem_table_id); > + assert(len <= 8); > + g_array_append_vals(var.buf, oem_table_id, len); > + g_array_append_vals(var.buf, "\0\0\0\0\0\0\0\0", 8 - len); > + > + build_append_value(var.buf, oem_revision, 4); > + g_array_append_vals(var.buf, ACPI_BUILD_APPNAME4, 4); /* asl_compiler_id */ > + build_append_value(var.buf, 1, 4); /* asl_compiler_revision */ > + > + return var; > +} This function is similar with build_header() in hw/i386/acpi-build.c But the format of omt_id, oem_table_id, asl_compiler_id are not exactly same. Maybe we should make it consistent. > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index 4572c21..9ff8d72 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -270,7 +270,6 @@ static void acpi_get_pci_info(PcPciInfo *info) > #define ACPI_BUILD_APPNAME6 "BOCHS " > #define ACPI_BUILD_APPNAME4 "BXPC" > > -#define ACPI_BUILD_TABLE_FILE "etc/acpi/tables" > #define ACPI_BUILD_RSDP_FILE "etc/acpi/rsdp" > #define ACPI_BUILD_TPMLOG_FILE "etc/tpm/log" > > diff --git a/include/hw/acpi/acpi-build-utils.h b/include/hw/acpi/acpi-build-utils.h > index 5e8db3d..868d439 100644 > --- a/include/hw/acpi/acpi-build-utils.h > +++ b/include/hw/acpi/acpi-build-utils.h > @@ -11,12 +11,17 @@ typedef enum { > EXT_PACKAGE, > BUFFER, > RES_TEMPLATE, > + DEF_BLOCK, > } AcpiBlockFlags; > > +#define ACPI_BUILD_TABLE_FILE "etc/acpi/tables" > +#define ACPI_BUILD_APPNAME4 "BXPC" > + > typedef struct AcpiAml { > GArray *buf; > uint8_t op; > AcpiBlockFlags block_flags; > + GArray *linker; > } AcpiAml; > > typedef enum { > @@ -146,6 +151,9 @@ AcpiAml acpi_qword_memory(acpiDecode dec, acpiMinFixed min_fixed, > uint64_t len); > > /* Block ASL object primitives */ > +AcpiAml acpi_def_block(const char *signature, uint8_t revision, > + const char *oem_id, const char *oem_table_id, > + uint32_t oem_revision); > AcpiAml acpi_if(AcpiAml predicate); > AcpiAml acpi_method(const char *name, int arg_count); > AcpiAml GCC_FMT_ATTR(1, 2) acpi_scope(const char *name_format, ...); >