From nobody Sat May 10 07:49:12 2025 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 80.81.252.135 is neither permitted nor denied by domain of seabios.org) client-ip=80.81.252.135; envelope-from=seabios-bounces@seabios.org; helo=mail.coreboot.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 80.81.252.135 is neither permitted nor denied by domain of seabios.org) smtp.mailfrom=seabios-bounces@seabios.org Return-Path: Received: from mail.coreboot.org (mail.coreboot.org [80.81.252.135]) by mx.zohomail.com with SMTPS id 1501062204858576.490437727461; Wed, 26 Jul 2017 02:43:24 -0700 (PDT) Received: from [127.0.0.1] (helo=ra.coresystems.de) by mail.coreboot.org with esmtp (Exim 4.86_2) (envelope-from ) id 1daIoP-0003Kx-5x; Wed, 26 Jul 2017 11:41:01 +0200 Received: from mx1.redhat.com ([209.132.183.28]) by mail.coreboot.org with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.86_2) (envelope-from ) id 1daIo8-0003Hh-Sz for seabios@seabios.org; Wed, 26 Jul 2017 11:41:00 +0200 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D360915561; Wed, 26 Jul 2017 09:42:47 +0000 (UTC) Received: from donizetti.redhat.com (ovpn-117-59.ams2.redhat.com [10.36.117.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 95ACB5D978; Wed, 26 Jul 2017 09:42:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D360915561 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=pbonzini@redhat.com From: Paolo Bonzini To: seabios@seabios.org Date: Wed, 26 Jul 2017 11:42:35 +0200 Message-Id: <20170726094235.14267-3-pbonzini@redhat.com> In-Reply-To: <20170726094235.14267-1-pbonzini@redhat.com> References: <20170726094235.14267-1-pbonzini@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 26 Jul 2017 09:42:48 +0000 (UTC) X-Spam-Score: -7.5 (-------) Subject: [SeaBIOS] [seabios PATCH 2/2] seabios: create rev1 FADT in compatibility RSDT X-BeenThere: seabios@seabios.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SeaBIOS mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: phil@philjordan.eu, mst@redhat.com, qemu-devel@nongnu.org, programmingkidx@gmail.com, kraxel@redhat.com, lists@philjordan.eu, lersek@redhat.com MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: seabios-bounces@seabios.org Sender: "SeaBIOS" X-Duff: Orig. Duff, Duff Lite, Duff Dry, Duff Dark, Raspberry Duff, Lady Duff, Red Duff, Tartar Control Duff X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This patch completes the job, presenting a rev1 FADT inside the compatibility RSDT, so that ACPI 1.0 operating systems such as Windows 2000 are not broken. Signed-off-by: Paolo Bonzini --- src/fw/paravirt.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c index 927fd75..97e2fe3 100644 --- a/src/fw/paravirt.c +++ b/src/fw/paravirt.c @@ -148,6 +148,20 @@ static void msr_feature_control_setup(void) wrmsr_smp(MSR_IA32_FEATURE_CONTROL, feature_control_bits); } =20 +static void* +build_rev1_fadt(struct fadt_descriptor_rev1 *fadt_v3) +{ + struct fadt_descriptor_rev1 *fadt_v1 =3D malloc_high(sizeof *fadt_v1); + + memcpy(fadt_v1, fadt_v3, sizeof *fadt_v1); + fadt_v1->length =3D sizeof *fadt_v1; + fadt_v1->revision =3D 1; + // the upper 23 bits are reserved in the rev1 FADT + fadt_v1->flags &=3D 0x1ff; + fadt_v1->checksum -=3D checksum(fadt_v1, fadt_v1->length); + return fadt_v1; +} + static void build_compatibility_rsdt(void) { @@ -186,6 +200,11 @@ build_compatibility_rsdt(void) u64 tbl_addr =3D xsdt->table_offset_entry[i]; if (!tbl_addr || (tbl_addr & ~0xffffffffULL)) continue; + struct acpi_table_header *tbl =3D (void*)(u32)tbl_addr; + // for compatibility with Windows 2000, the RSDT should contain + // an ACPI 1.0 FADT (table revision 1) + if (tbl->signature =3D=3D FACP_SIGNATURE && tbl->revision > 1) + tbl_addr =3D (u32)build_rev1_fadt((void *)tbl); rsdt->table_offset_entry[j++] =3D (u32)tbl_addr; } =20 --=20 2.13.3 _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios