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