@@ -639,3 +639,23 @@ AcpiAml acpi_varpackage(uint32_t num_elements)
build_append_int(var.buf, num_elements);
return var;
}
+
+/* ACPI 5.0: 20.2.5.2 Named Objects Encoding: DefProcessor */
+AcpiAml GCC_FMT_ATTR(4, 5)
+acpi_processor(uint8_t proc_id, uint32_t pblk_addr, uint8_t pblk_len,
+ const char *name_format, ...)
+{
+ va_list ap;
+ AcpiAml var = aml_allocate_internal(0x83 /* ProcessorOp */, EXT_PACKAGE);
+ va_start(ap, name_format);
+ build_append_namestringv(var.buf, name_format, ap);
+ va_end(ap);
+ build_append_byte(var.buf, proc_id); /* ProcID */
+ /* PblkAddr */
+ build_append_byte(var.buf, pblk_addr & 0xFF);
+ build_append_byte(var.buf, (pblk_addr >> 8) & 0xFF);
+ build_append_byte(var.buf, (pblk_addr >> 16) & 0xFF);
+ build_append_byte(var.buf, (pblk_addr >> 24) & 0xFF);
+ build_append_byte(var.buf, pblk_len); /* PblkLen */
+ return var;
+}
@@ -61,6 +61,9 @@ AcpiAml acpi_named_field(const char *name, unsigned length);
AcpiAml GCC_FMT_ATTR(1, 2) acpi_string(const char *name_format, ...);
AcpiAml acpi_local0(void);
AcpiAml acpi_equal(AcpiAml arg1, AcpiAml arg2);
+AcpiAml GCC_FMT_ATTR(4, 5)
+acpi_processor(uint8_t proc_id, uint32_t pblk_addr, uint8_t pblk_len,
+ const char *name_format, ...);
/* Block ASL object primitives */
AcpiAml acpi_if(AcpiAml predicate);
Signed-off-by: Igor Mammedov <imammedo@redhat.com> --- hw/acpi/acpi-build-utils.c | 20 ++++++++++++++++++++ include/hw/acpi/acpi-build-utils.h | 3 +++ 2 files changed, 23 insertions(+)