From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42083) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aJkuf-0000Nr-J5 for qemu-devel@nongnu.org; Thu, 14 Jan 2016 11:38:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aJkub-0007zM-6H for qemu-devel@nongnu.org; Thu, 14 Jan 2016 11:38:17 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49292) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aJkua-0007zG-VG for qemu-devel@nongnu.org; Thu, 14 Jan 2016 11:38:13 -0500 References: <1452735417-5461-1-git-send-email-lersek@redhat.com> <1452735417-5461-4-git-send-email-lersek@redhat.com> <20160114121538-mutt-send-email-mst@redhat.com> From: Laszlo Ersek Message-ID: <5697CEF2.3010503@redhat.com> Date: Thu, 14 Jan 2016 17:38:10 +0100 MIME-Version: 1.0 In-Reply-To: <20160114121538-mutt-send-email-mst@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/4] acpi: stash the OEM ID and OEM Table ID fields from an external SLIC table List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: Aleksei Kovura , Igor Mammedov , Michael Tokarev , qemu-devel@nongnu.org, "Richard W.M. Jones" On 01/14/16 11:21, Michael S. Tsirkin wrote: > On Thu, Jan 14, 2016 at 02:36:56AM +0100, Laszlo Ersek wrote: >> The SLIC table is not generated by QEMU. If the user specifies an external >> one however, then board-specific code might want to adapt other, >> auto-generated tables to it. This patch saves the OEM ID and OEM Table ID >> fields from the SLIC, and leaves the actual utilization to board code (the >> next patch). >> >> Cc: "Michael S. Tsirkin" (supporter:ACPI/SMBIOS) >> Cc: Igor Mammedov (supporter:ACPI/SMBIOS) >> Cc: Richard W.M. Jones >> Cc: Aleksei Kovura >> Cc: Michael Tokarev >> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1248758 >> Signed-off-by: Laszlo Ersek >> --- >> include/hw/acpi/acpi.h | 2 ++ >> hw/acpi/core.c | 18 ++++++++++++++++++ >> 2 files changed, 20 insertions(+) >> >> diff --git a/include/hw/acpi/acpi.h b/include/hw/acpi/acpi.h >> index b20bd55..407197a 100644 >> --- a/include/hw/acpi/acpi.h >> +++ b/include/hw/acpi/acpi.h >> @@ -189,6 +189,8 @@ void acpi_update_sci(ACPIREGS *acpi_regs, qemu_irq irq); >> extern int acpi_enabled; >> extern char unsigned *acpi_tables; >> extern size_t acpi_tables_len; >> +extern char *acpi_slic_oem_id; >> +extern char *acpi_slic_oem_table_id; >> >> uint8_t *acpi_table_first(void); >> uint8_t *acpi_table_next(uint8_t *current); > > This seems rather messy. > How about an API to find SLIC and return the IDs > from the installed tables? If testing confirms this idea is worthwhile, I won't object to your suggestion. I admit I don't readily recall how the externally provided tables are represented in that big concatenated blob, but perhaps I can look at acpi_table_first() / acpi_table_next(). (Or just stare at the code longer.) So: fair enough, thanks. Laszlo > >> diff --git a/hw/acpi/core.c b/hw/acpi/core.c >> index 21e113d..7046035 100644 >> --- a/hw/acpi/core.c >> +++ b/hw/acpi/core.c >> @@ -54,6 +54,8 @@ static const char unsigned dfl_hdr[ACPI_TABLE_HDR_SIZE - ACPI_TABLE_PFX_SIZE] = >> >> char unsigned *acpi_tables; >> size_t acpi_tables_len; >> +char *acpi_slic_oem_id; >> +char *acpi_slic_oem_table_id; >> >> static QemuOptsList qemu_acpi_opts = { >> .name = "acpi", >> @@ -227,6 +229,22 @@ static void acpi_table_install(const char unsigned *blob, size_t bloblen, >> /* recalculate checksum */ >> ext_hdr->checksum = acpi_checksum((const char unsigned *)ext_hdr + >> ACPI_TABLE_PFX_SIZE, acpi_payload_size); >> + >> + /* If the table signature is SLIC, stash the OEM ID and OEM Table ID >> + * fields, so we can later adapt the RSDT and the FADT. >> + */ >> + if (memcmp(ext_hdr->sig, "SLIC", 4) == 0) { >> + g_free(acpi_slic_oem_id); >> + acpi_slic_oem_id = g_malloc(sizeof ext_hdr->oem_id + 1); >> + memcpy(acpi_slic_oem_id, ext_hdr->oem_id, sizeof ext_hdr->oem_id); >> + acpi_slic_oem_id[sizeof ext_hdr->oem_id] = '\0'; >> + >> + g_free(acpi_slic_oem_table_id); >> + acpi_slic_oem_table_id = g_malloc(sizeof ext_hdr->oem_table_id + 1); >> + memcpy(acpi_slic_oem_table_id, ext_hdr->oem_table_id, >> + sizeof ext_hdr->oem_table_id); >> + acpi_slic_oem_table_id[sizeof ext_hdr->oem_table_id] = '\0'; >> + } >> } >> >> void acpi_table_add(const QemuOpts *opts, Error **errp) >> -- >> 1.8.3.1 >>