Message ID | 1421938231-25698-43-git-send-email-imammedo@redhat.com |
---|---|
State | New |
Headers | show |
On 2015/1/22 22:50, Igor Mammedov wrote: > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > --- > 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 <string.h> > #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, ...); >
On Thu, 29 Jan 2015 16:02:47 +0800 Shannon Zhao <zhaoshenglong@huawei.com> wrote: > On 2015/1/22 22:50, Igor Mammedov wrote: > > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > > --- > > 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 <string.h> > > #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. I've tried to follow APCI spec for definition block here, which should be identical to build_header(). What exactly is not the same? > > > > 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, ...); > > > >
On 2015/1/29 16:45, Igor Mammedov wrote: > On Thu, 29 Jan 2015 16:02:47 +0800 > Shannon Zhao <zhaoshenglong@huawei.com> wrote: > >> > On 2015/1/22 22:50, Igor Mammedov wrote: >>> > > Signed-off-by: Igor Mammedov <imammedo@redhat.com> >>> > > --- >>> > > 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 <string.h> >>> > > #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. > I've tried to follow APCI spec for definition block here, > which should be identical to build_header(). > What exactly is not the same? > Sorry, I don make myself clear. I mean that the values of omt_id, oem_table_id, asl_compiler_id are different between using build_header and acpi_def_block. E.g. using acpi_def_block the asl_compiler_id would be "BXPC" while build_header is blank. I think we should make the omt_id, oem_table_id, asl_compiler_id as parameters of the functions, then users assign the value. Thanks, Shannon
On Thu, 29 Jan 2015 17:01:02 +0800 Shannon Zhao <zhaoshenglong@huawei.com> wrote: > On 2015/1/29 16:45, Igor Mammedov wrote: > > On Thu, 29 Jan 2015 16:02:47 +0800 > > Shannon Zhao <zhaoshenglong@huawei.com> wrote: > > > >> > On 2015/1/22 22:50, Igor Mammedov wrote: > >>> > > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > >>> > > --- > >>> > > 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 <string.h> > >>> > > #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 ()(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. > > I've tried to follow APCI spec for definition block here, > > which should be identical to build_header(). > > What exactly is not the same? > > > > Sorry, I don make myself clear. > I mean that the values of omt_id, oem_table_id, asl_compiler_id are different between > using build_header and acpi_def_block. > E.g. using acpi_def_block the asl_compiler_id would be "BXPC" while build_header is blank. That's no true, build_header() sets asl_compiler_id to ACPI_BUILD_APPNAME4 the same way as does acpi_def_block(). > > I think we should make the omt_id, oem_table_id, asl_compiler_id as parameters of the > functions, then users assign the value. The only thing not exposed to API user is asl_compiler_id and asl_compiler_revision, I'll add them as arguments of acpi_def_block() on the next respin to be closer to ACPI spec. > > Thanks, > Shannon >
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 <string.h> #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; +} 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, ...);
Signed-off-by: Igor Mammedov <imammedo@redhat.com> --- 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(-)