[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 32/47] acpi: add acpi_eisaid() term
From: |
Igor Mammedov |
Subject: |
[Qemu-devel] [PATCH v2 32/47] acpi: add acpi_eisaid() term |
Date: |
Thu, 22 Jan 2015 14:50:16 +0000 |
Signed-off-by: Igor Mammedov <address@hidden>
---
hw/acpi/acpi-build-utils.c | 31 +++++++++++++++++++++++++++++++
include/hw/acpi/acpi-build-utils.h | 1 +
2 files changed, 32 insertions(+)
diff --git a/hw/acpi/acpi-build-utils.c b/hw/acpi/acpi-build-utils.c
index e51196b..cbc1241 100644
--- a/hw/acpi/acpi-build-utils.c
+++ b/hw/acpi/acpi-build-utils.c
@@ -23,7 +23,9 @@
#include <stdarg.h>
#include <assert.h>
#include <stdbool.h>
+#include <string.h>
#include "hw/acpi/acpi-build-utils.h"
+#include "qemu/bswap.h"
GArray *build_alloc_array(void)
{
@@ -659,3 +661,32 @@ acpi_processor(uint8_t proc_id, uint32_t pblk_addr,
uint8_t pblk_len,
build_append_byte(var.buf, pblk_len); /* PblkLen */
return var;
}
+
+static uint8_t Hex2Digit(char c)
+{
+ if (c >= 'A') {
+ return c - 'A' + 10;
+ }
+
+ return c - '0';
+}
+
+/* ACPI 5.0: 19.5.36 EISAID (EISA ID String To Integer Conversion Macro) */
+AcpiAml acpi_eisaid(const char *str)
+{
+ AcpiAml var = aml_allocate_internal(0, NON_BLOCK);
+ uint32_t id;
+
+ g_assert(strlen(str) == 7);
+ id = (str[0] - 0x40) << 26 |
+ (str[1] - 0x40) << 21 |
+ (str[2] - 0x40) << 16 |
+ Hex2Digit(str[3]) << 12 |
+ Hex2Digit(str[4]) << 8 |
+ Hex2Digit(str[5]) << 4 |
+ Hex2Digit(str[6]);
+
+ build_append_byte(var.buf, 0x0C); /* DWordPrefix */
+ build_append_value(var.buf, bswap32(id), sizeof(id));
+ return var;
+}
diff --git a/include/hw/acpi/acpi-build-utils.h
b/include/hw/acpi/acpi-build-utils.h
index 753171f..02d5aa8 100644
--- a/include/hw/acpi/acpi-build-utils.h
+++ b/include/hw/acpi/acpi-build-utils.h
@@ -64,6 +64,7 @@ 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, ...);
+AcpiAml acpi_eisaid(const char *str);
/* Block ASL object primitives */
AcpiAml acpi_if(AcpiAml predicate);
--
1.8.3.1
- [Qemu-devel] [PATCH v2 23/47] acpi: include PkgLength size only when requested, (continued)
- [Qemu-devel] [PATCH v2 23/47] acpi: include PkgLength size only when requested, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 26/47] acpi: add acpi_local0() term, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 20/47] acpi: add acpi_buffer() term, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 28/47] pc: acpi-build: generate pvpanic device description dynamically, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 27/47] acpi: add acpi_string() term, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 29/47] acpi: add acpi_varpackage() term, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 31/47] acpi: add acpi_processor() term, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 35/47] acpi: add acpi_reserved_field() term, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 33/47] pc: acpi-build: drop template patching and CPU hotplug objects dynamically, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 36/47] pc: acpi-build: drop template patching and memory hotplug objects dynamically, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 32/47] acpi: add acpi_eisaid() term,
Igor Mammedov <=
- [Qemu-devel] [PATCH v2 34/47] pc: acpi-build: create CPU hotplug IO region dynamically, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 37/47] pc: acpi-build: create memory hotplug IO region dynamically, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 30/47] acpi: add acpi_equal() term, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 38/47] acpi: add acpi_word_bus_number(), acpi_word_io(), acpi_dword_memory(), acpi_qword_memory() terms, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 39/47] pc: pcihp: expose MMIO base and len as properties, Igor Mammedov, 2015/01/22
- [Qemu-devel] [PATCH v2 42/47] acpi: add acpi_def_block() term, Igor Mammedov, 2015/01/22