From owner-p4-projects@FreeBSD.ORG Tue Oct 5 20:52:12 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 764E516A4CE; Tue, 5 Oct 2004 20:52:12 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 3A31C16A4CE for ; Tue, 5 Oct 2004 20:52:12 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1DCD143D2D for ; Tue, 5 Oct 2004 20:52:12 +0000 (GMT) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i95KqCx1079275 for ; Tue, 5 Oct 2004 20:52:12 GMT (envelope-from julian@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i95KqBAX079272 for perforce@freebsd.org; Tue, 5 Oct 2004 20:52:11 GMT (envelope-from julian@freebsd.org) Date: Tue, 5 Oct 2004 20:52:11 GMT Message-Id: <200410052052.i95KqBAX079272@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to julian@freebsd.org using -f From: Julian Elischer To: Perforce Change Reviews Subject: PERFORCE change 62693 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2004 20:52:13 -0000 http://perforce.freebsd.org/chv.cgi?CH=62693 Change 62693 by julian@julian_ref on 2004/10/05 20:51:20 IFC@62692 loop back kse cleanup Affected files ... .. //depot/projects/nsched/sys/dev/acpica/Osd/OsdTable.c#3 integrate .. //depot/projects/nsched/sys/kern/kern_kse.c#33 integrate Differences ... ==== //depot/projects/nsched/sys/dev/acpica/Osd/OsdTable.c#3 (text+ko) ==== @@ -23,24 +23,32 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/acpica/Osd/OsdTable.c,v 1.7 2004/04/20 17:13:08 njl Exp $ + * $FreeBSD: src/sys/dev/acpica/Osd/OsdTable.c,v 1.8 2004/10/05 20:41:44 njl Exp $ */ /* * ACPI Table interfaces */ -#include "acpi.h" - +#include +#include #include #include +#include "acpi.h" +#include + #undef _COMPONENT #define _COMPONENT ACPI_TABLES static char acpi_osname[128]; TUNABLE_STR("hw.acpi.osname", acpi_osname, sizeof(acpi_osname)); +static struct { + ACPI_TABLE_HEADER_DEF + uint32_t no_op; +} __packed fake_ssdt; + ACPI_STATUS AcpiOsPredefinedOverride ( const ACPI_PREDEFINED_NAMES *InitVal, @@ -63,20 +71,42 @@ ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable) { - caddr_t acpi_dsdt, p; + caddr_t acpi_dsdt, p; if (ExistingTable == NULL || NewTable == NULL) - return(AE_BAD_PARAMETER); + return (AE_BAD_PARAMETER); + /* If we're not overriding the DSDT, just return. */ *NewTable = NULL; - if (strncmp(ExistingTable->Signature, "DSDT", 4) != 0) - return(AE_OK); if ((acpi_dsdt = preload_search_by_type("acpi_dsdt")) == NULL) - return(AE_OK); + return (AE_OK); if ((p = preload_search_info(acpi_dsdt, MODINFO_ADDR)) == NULL) - return(AE_OK); + return (AE_OK); + + /* + * Override the DSDT with the user's custom version. Override the + * contents of any SSDTs with a simple no-op table since the user's + * DSDT is expected to contain their contents as well. + */ + if (strncmp(ExistingTable->Signature, "DSDT", 4) == 0) { + printf("ACPI: overriding DSDT/SSDT with custom table\n"); + *NewTable = *(void **)p; + } else if (strncmp(ExistingTable->Signature, "SSDT", 4) == 0) { + if (fake_ssdt.Length == 0) { + sprintf(fake_ssdt.Signature, "%.4s", "SSDT"); + fake_ssdt.Length = htole32(sizeof(fake_ssdt)); + fake_ssdt.Revision = 2; + fake_ssdt.Checksum = 0; + sprintf(fake_ssdt.OemId, "%.6s", "FBSD "); + sprintf(fake_ssdt.OemTableId, "%.8s", "NullSSDT"); + fake_ssdt.OemRevision = htole32(1); + sprintf(fake_ssdt.AslCompilerId, "%.4s", "FBSD"); + fake_ssdt.AslCompilerRevision = htole32(1); + fake_ssdt.no_op = htole32(0x005c0310); /* Scope(\) */ + fake_ssdt.Checksum -= AcpiTbChecksum(&fake_ssdt, sizeof(fake_ssdt)); + } + *NewTable = (void *)&fake_ssdt; + } - *NewTable = *(void **)p; - printf("ACPI: DSDT was overridden.\n"); return (AE_OK); } ==== //depot/projects/nsched/sys/kern/kern_kse.c#33 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/kern/kern_kse.c,v 1.203 2004/10/05 20:39:26 julian Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_kse.c,v 1.204 2004/10/05 20:48:16 julian Exp $"); #include #include