From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39474) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WBl06-0006ir-Hy for qemu-devel@nongnu.org; Fri, 07 Feb 2014 07:57:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WBl00-00039Q-84 for qemu-devel@nongnu.org; Fri, 07 Feb 2014 07:57:46 -0500 Received: from mx1.redhat.com ([209.132.183.28]:43868) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WBkzz-00039D-VX for qemu-devel@nongnu.org; Fri, 07 Feb 2014 07:57:40 -0500 From: Igor Mammedov Date: Fri, 7 Feb 2014 13:51:32 +0100 Message-Id: <1391777496-3882-6-git-send-email-imammedo@redhat.com> In-Reply-To: <1391777496-3882-1-git-send-email-imammedo@redhat.com> References: <1391777496-3882-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [RFC 5/9] acpi: add PNP0C02 to PCI0 bus List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kraxel@redhat.com, anthony@codemonkey.ws, mst@redhat.com Signed-off-by: Igor Mammedov --- hw/i386/acpi-build.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 55 insertions(+), 0 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 1dbe5ce..f0bedbd 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -492,6 +492,55 @@ static inline void acpi_add_table(GArray *table_offsets, GArray *table_data) g_array_append_val(table_offsets, offset); } +static uint8_t Hex2Digit(char c) +{ + if (c >= 'A') { + return c - 'A' + 10; + } + return c - '0'; +} + +static uint32_t encodeEisaId(const char *str) +{ + uint32_t ret; + g_assert(strlen(str) == 7); + ret = (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]); + return bswap32(ret); +} + +#define ACPI_SCOPE(ctx, name, ...) {\ + GArray *name = build_alloc_array(); \ + build_append_nameseg(name, stringify(name)); \ + __VA_ARGS__; \ + build_package(name, ScopeOp, 0); \ + build_append_array(ctx, name); \ + build_free_array(name); \ +} + +#define ACPI_NAME(ctx, name) { \ + build_append_byte(ctx, NameOp); \ + build_append_nameseg(ctx, name); \ +} + +#define ACPI_EISAID(ctx, val) { \ + build_append_value(ctx, encodeEisaId(val), sizeof(uint32_t)); \ +} + +#define ACPI_DEVICE(ctx, name, ...) {\ + GArray *name = build_alloc_array(); \ + build_append_nameseg(name, stringify(name)); \ + __VA_ARGS__; \ + build_extop_package(name, DeviceOp); \ + build_append_array(ctx, name); \ + build_free_array(name); \ +} + /* FACS */ static void build_facs(GArray *table_data, GArray *linker, PcGuestInfo *guest_info) @@ -1032,6 +1081,12 @@ build_ssdt(GArray *table_data, GArray *linker, build_pci_bus_state_cleanup(&hotplug_state); } + ACPI_SCOPE(sb_scope, PCI0, + ACPI_DEVICE(PCI0, MRES, + ACPI_NAME(MRES, "_HID"); ACPI_EISAID(MRES, "PNP0C02"); + ); + ); + build_package(sb_scope, op, 3); build_append_array(table_data, sb_scope); build_free_array(sb_scope); -- 1.7.1