PERFORCE change 62693 for review

Julian Elischer julian at FreeBSD.org
Tue Oct 5 13:52:13 PDT 2004


http://perforce.freebsd.org/chv.cgi?CH=62693

Change 62693 by julian at julian_ref on 2004/10/05 20:51:20

	IFC at 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>


More information about the p4-projects mailing list