From owner-acpi-jp@jp.freebsd.org  Tue Oct 16 22:32:13 2001
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id WAA24001;
	Tue, 16 Oct 2001 22:32:13 +0900 (JST)
	(envelope-from owner-acpi-jp@jp.FreeBSD.org)
Received: from tasogare.imasy.or.jp (root@tasogare.imasy.or.jp [202.227.24.5])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id WAA23996
	for <acpi-jp@jp.freebsd.org>; Tue, 16 Oct 2001 22:32:12 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (iwasaki.imasy.or.jp [202.227.24.92])
	by tasogare.imasy.or.jp (8.11.6+3.4W/8.11.6/tasogare) with ESMTP/inet id f9GDW9m32606
	for <acpi-jp@jp.freebsd.org>; Tue, 16 Oct 2001 22:32:09 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Date: Tue, 16 Oct 2001 22:32:07 +0900 (JST)
Message-Id: <20011016.223207.74756782.iwasaki@jp.FreeBSD.org>
To: acpi-jp@jp.freebsd.org
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
In-Reply-To: <200110151449.XAA77970@shidahara1.planet.sci.kobe-u.ac.jp>
References: <200110151449.XAA77970@shidahara1.planet.sci.kobe-u.ac.jp>
X-Mailer: Mew version 2.0 on Emacs 20.7 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+010328
X-Sequence: acpi-jp 1349
Subject: [acpi-jp 1349] Re: DSDT Override
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

> Hi, I implemented BIOS override written in following URL.

Cool!  You really did :-)  Thanks watanabe-san.
# do you remember our discussion over a year ago at shimbashi-station?

> This patch is not clean enough to put. But works.

OK, I modified this a bit and tested.  I think this is good enough to
commit.

We can stop having local workaround for some bogus ACPI BIOSes :-)

Thanks

Index: contrib/dev/acpica/acglobal.h
===================================================================
RCS file: /home/ncvs/src/sys/contrib/dev/acpica/acglobal.h,v
retrieving revision 1.1.1.8
diff -u -r1.1.1.8 acglobal.h
--- contrib/dev/acpica/acglobal.h	7 Sep 2001 01:22:23 -0000	1.1.1.8
+++ contrib/dev/acpica/acglobal.h	16 Oct 2001 05:36:53 -0000
@@ -168,6 +168,8 @@
 ACPI_EXTERN ACPI_TABLE_HEADER           *AcpiGbl_DSDT;
 ACPI_EXTERN ACPI_COMMON_FACS            *AcpiGbl_FACS;
 
+ACPI_EXTERN ACPI_TABLE_HEADER           *AcpiGbl_DSDT_TablePtr;
+
 /*
  * Since there may be multiple SSDTs and PSDTS, a single pointer is not
  * sufficient; Therefore, there isn't one!
Index: contrib/dev/acpica/tbget.c
===================================================================
RCS file: /home/ncvs/src/sys/contrib/dev/acpica/tbget.c,v
retrieving revision 1.1.1.10
diff -u -r1.1.1.10 tbget.c
--- contrib/dev/acpica/tbget.c	7 Sep 2001 01:22:25 -0000	1.1.1.10
+++ contrib/dev/acpica/tbget.c	16 Oct 2001 05:37:11 -0000
@@ -439,7 +439,9 @@
      * Get the DSDT (We know that the FADT is valid now)
      */
     Status = AcpiTbGetTable ((ACPI_PHYSICAL_ADDRESS) ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt),
-                                TablePtr, &TableInfo);
+                                ((AcpiGbl_DSDT_TablePtr) ?
+                                 AcpiGbl_DSDT_TablePtr : TablePtr), &TableInfo);
+
     if (ACPI_FAILURE (Status))
     {
         return_ACPI_STATUS (Status);
Index: contrib/dev/acpica/utglobal.c
===================================================================
RCS file: /home/ncvs/src/sys/contrib/dev/acpica/utglobal.c,v
retrieving revision 1.1.1.10
diff -u -r1.1.1.10 utglobal.c
--- contrib/dev/acpica/utglobal.c	7 Sep 2001 01:22:25 -0000	1.1.1.10
+++ contrib/dev/acpica/utglobal.c	16 Oct 2001 11:35:10 -0000
@@ -769,6 +769,7 @@
     AcpiGbl_FACS                        = NULL;
     AcpiGbl_FADT                        = NULL;
     AcpiGbl_DSDT                        = NULL;
+    AcpiGbl_DSDT_TablePtr               = NULL;
 
     /* Global Lock support */
 
Index: boot/forth/loader.conf
===================================================================
RCS file: /home/ncvs/src/sys/boot/forth/loader.conf,v
retrieving revision 1.49
diff -u -r1.49 loader.conf
--- boot/forth/loader.conf	1 Jun 2001 10:07:23 -0000	1.49
+++ boot/forth/loader.conf	16 Oct 2001 12:40:32 -0000
@@ -242,6 +242,14 @@
 atspeaker_load="NO"		# AT speaker module
 
 ##############################################################
+###  ACPI settings  ##########################################
+##############################################################
+
+acpi_dsdt_load="NO"		# DSDT Overriding
+acpi_dsdt_type="acpi_dsdt"	# Don't change this
+acpi_dsdt_name="acpi_dsdt.aml"	# Override DSDT in BIOS by this file
+
+##############################################################
 ###  Module loading syntax example  ##########################
 ##############################################################
 
Index: dev/acpica/acpi.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpica/acpi.c,v
retrieving revision 1.42
diff -u -r1.42 acpi.c
--- dev/acpica/acpi.c	4 Oct 2001 23:21:09 -0000	1.42
+++ dev/acpica/acpi.c	16 Oct 2001 11:33:40 -0000
@@ -42,6 +42,7 @@
 #include <sys/reboot.h>
 #include <sys/sysctl.h>
 #include <sys/ctype.h>
+#include <sys/linker.h>
 
 #include <machine/clock.h>
 #include <machine/resource.h>
@@ -200,6 +201,7 @@
 {
     device_t			child;
     int				error;
+    caddr_t			acpi_dsdt, p;
 #ifdef ENABLE_DEBUGGER
     char			*debugpoint = getenv("debug.acpi.debugger");
 #endif
@@ -242,6 +244,14 @@
     if (debugpoint && !strcmp(debugpoint, "tables"))
 	acpi_EnterDebugger();
 #endif
+
+    if ((acpi_dsdt = preload_search_by_type("acpi_dsdt")) != NULL) {
+        if ((p = preload_search_info(acpi_dsdt, MODINFO_ADDR)) != NULL) {
+            AcpiGbl_DSDT_TablePtr = *(void **)p;
+	    printf("ACPI: DSDT was overridden.\n");
+        }
+    }
+
     if ((error = AcpiLoadTables()) != AE_OK) {
 	printf("ACPI: table load failed: %s\n", AcpiFormatException(error));
 	return_VOID;
