Date: Tue, 5 Oct 2004 20:52:11 GMT From: Julian Elischer <julian@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 62693 for review Message-ID: <200410052052.i95KqBAX079272@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 <sys/param.h> +#include <sys/endian.h> #include <sys/kernel.h> #include <sys/linker.h> +#include "acpi.h" +#include <contrib/dev/acpica/actables.h> + #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 <sys/cdefs.h> -__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 <sys/param.h> #include <sys/systm.h>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200410052052.i95KqBAX079272>
