From owner-FreeBSD-tech-jp@jp.freebsd.org  Mon Sep 20 02:33:36 1999
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id CAA63752;
	Mon, 20 Sep 1999 02:33:36 +0900 (JST)
	(envelope-from owner-FreeBSD-tech-jp@jp.FreeBSD.org)
Received: from light.imasy.or.jp (root@light.imasy.or.jp [202.227.24.4])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id CAA63747
	for <FreeBSD-tech-jp@jp.freebsd.org>; Mon, 20 Sep 1999 02:33:35 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from tasogare.imasy.or.jp (daemon@tasogare.imasy.or.jp [202.227.24.5])
	by light.imasy.or.jp (8.9.3+3.2W/3.7W-light) with ESMTP id CAA15699
	for <FreeBSD-tech-jp@jp.freebsd.org>; Mon, 20 Sep 1999 02:33:34 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (isdn30.imasy.or.jp [202.227.24.222])
	by tasogare.imasy.or.jp (8.9.3+3.2W/3.7W-tasogare/smtpfeed 1.01) with ESMTP id CAA16662;
	Mon, 20 Sep 1999 02:33:30 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Message-Id: <199909191733.CAA16662@tasogare.imasy.or.jp>
To: FreeBSD-tech-jp@jp.freebsd.org, AE5T-KSN@asahi-net.or.jp
In-Reply-To: Your message of "Mon, 20 Sep 1999 00:39:08 +0900"
	<14309.924.980812.72159A@ginza.atson.co.jp>
References: <14309.924.980812.72159A@ginza.atson.co.jp>
X-Mailer: Mew version 1.93 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Date: Mon, 20 Sep 1999 02:36:26 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 980905(IM100)
Lines: 132
Reply-To: FreeBSD-tech-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990727
X-Sequence: FreeBSD-tech-jp 2531
Subject: [FreeBSD-tech-jp 2531] Re: FreeBSD ACPI support? 
Errors-To: owner-FreeBSD-tech-jp@jp.freebsd.org
Sender: owner-FreeBSD-tech-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

RSDT $B$N(B physical address $B$r(B pmap_enter() $B$r;H$C$FC)$C$F:G=i$N(B
$B%(%s%H%j$N(B pa $B$r<hF@$9$k$H$3$m$^$G$G$-$^$7$?!#8e$OF1$8MWNN$G(B
FACP $B$r$5$,$7$F=i4|2=$r$9$l$PNI$5$=$&$G$9(B :-)
# $B$G$b$3$s$J;~4V$K$J$C$F$7$^$C$?$N$G!":n6H:F3+$O(B1$B=54V8e$G$9!#(B
# $B6=L#$N$"$kJ}$O0z$-B3$-$4<+M3$K$d$C$A$c$C$F$/$@$5$$!#(B

CURRENT $B$KBP$9$k:9J,$H(B dmesg $BH4?h$rN.$7$F$*$-$^$9!#(B

$B$?$@$7!":#D+$N%a!<%k$K=q$$$?$3$H$,860x$J$N$+!"(B3.3-STABLE $B$G$O(B
$B%@%a$G(B 4.0-CURRENT $B$O(B OK $B$G$9!#(B
sys/i386/i386/ $B$N(B vm86.c, machdep.c bios.c $B$J$I$,JQ99$5$l$F$$$F!"(B
speculative $B$J%a%b%j%5%$%:8!=P$,$-$l$$$KJRIU$$$F$^$9!#(B
$B$d$O$j(B System memory map $B$r;H$C$F$A$c$s$H(B address range memory $B$N$_$r(B
$B%+%&%s%H$7$F!"(BACPI $B4X78$N(B address range $B$K$O?($C$F$$$^$;$s!#(B
$B$H$$$&$o$1$G!":G=i$N%a!<%k$GN.$7$?(B SMAP $B4X78$N%3!<%I$O(B
$BK:$l$F$/$@$5$$$^$;(B (^^; 
# $B$d$O$j(B CURRENT $B$r:G=i$K%A%'%C%/$9$Y$-$G$9$M(B

> linux-kernel $B$K$O(B 2.3.18 $BMQ(B patch $B$H$7$F(B
>   http://www.geocities.com/SiliconValley/Hardware/3165/
> $B$J$s$F$$$&(B URL $B$,N.$l$F$^$7$?!#$3$l$,@5<0$K(B linux $BK\BN$KF~$k$N$+$I$&$+$O(B
> $B$o$+$j$^$;$s$,(B..

$B$I$&$b!#AaB.FI$s$G$_$^$7$?!#(B
$B$,$s$P$l$P$J$s$H$+DI$$IU$-$=$&$G$9$M(B :-)

> >$B$=$&$$$($P:G6a(B Linus $B$5$s$H%a!<%k$r$d$j$H$j$7$F$?$s$G!"(B
> >$B$D$$$G$K$J$K$+J9$$$F$_$^$9!#(B
> 
>   $B:#(B Linus $B$K%a%$%k=q$$$F$b(B
>     http://www.changelog.net/log/1999/09/a/a/ff.txt
> $B$H$$$&$3$H$J$N$G!"FI$^$l$J$$$+$b$7$l$J$$$G$9!#(B

$B$*$*!"K\Ev$@!#:G8e$K<u$1<h$C$?$N$,(B 9/7 $B$J$N$G$7$?!#(B
$BMn$ACe$$$?$i$K$7$F$_$^$9!#(B

Index: bios.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/bios.c,v
retrieving revision 1.26
diff -u -r1.26 bios.c
--- bios.c	1999/09/12 06:58:33	1.26
+++ bios.c	1999/09/19 17:00:27
@@ -37,6 +37,7 @@
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 #include <vm/vm.h>
+#include <vm/vm_prot.h>
 #include <vm/pmap.h>
 #include <machine/md_var.h>
 #include <machine/segments.h>
@@ -62,6 +63,27 @@
 static void	pnpbios_scan(void);
 static char 	*pnp_eisaformat(u_int8_t *data);
 
+struct ACPIrsdp {
+  u_char	signature[8];
+  u_char	sum;
+  u_char	oem[6];
+  u_char	res;
+  u_int32_t	addr;
+}; 
+
+struct ACPIsdt {
+  u_char	signature[4];
+  u_int32_t	len;
+  u_char	rev;
+  u_char	check;
+  u_char	oemid[6];
+  u_char	oemtblid[8];
+  u_char	oemrev[4];
+  u_char	creator[4];
+  u_char	crerev[4];
+#define SIZEOF_SDT_HDR 36 /*struct size except body*/
+  u_int32_t	body;
+};
 
 /*
  * bios32_init
@@ -74,6 +96,8 @@
     u_long			sigaddr;
     struct bios32_SDheader	*sdh;
     struct PnPBIOS_table	*pt;
+    struct ACPIrsdp		*rsdp;
+    struct ACPIsdt		*rsdt;
     u_int8_t			ck, *cv;
     int				i;
     
@@ -132,6 +156,38 @@
 	    pnpbios_scan();
 	} else {
 	    printf("pnpbios: Bad PnP BIOS data checksum\n");
+	}
+    }
+
+    /*
+     * ACPI BIOS
+     */
+    if ((sigaddr = bios_sigsearch(0, "RSD PTR ", 8, 16, 0)) != 0) {
+	/* get a virtual pointer to the structure */
+	rsdp = (struct ACPIrsdp *)(uintptr_t)BIOS_PADDRTOVADDR(sigaddr);
+	for (cv = (u_int8_t *)rsdp, ck = 0, i = 0; i < sizeof(struct ACPIrsdp); i++) {
+	    ck += cv[i];
+	}
+
+	/* If checksum is OK, enable use of the entrypoint */
+	if (ck == 0) {
+	    u_char	buff[9];	/* 8 characters + NULL */
+
+	    strncpy(buff, rsdp->oem, 6);
+	    printf("ACPI: Found ACPI BIOS data at %p (<%6s>, RSDT@%x)\n",
+		rsdp, buff, rsdp->addr);
+
+	    pmap_enter(kernel_pmap, (vm_offset_t)ptvmmap, rsdp->addr,
+		VM_PROT_READ, TRUE);
+	    rsdt = (struct ACPIsdt *)&ptvmmap[rsdp->addr & PAGE_MASK];
+
+	    strncpy(buff, rsdt->signature, 4);
+	    printf("ACPI: <%4s> entry starts@%x\n", buff, rsdt->body);
+
+	    pmap_remove(kernel_pmap, (vm_offset_t)ptvmmap,
+		(vm_offset_t)&ptvmmap[PAGE_SIZE]);
+	} else {
+	    printf("ACPI: Bad ACPI BIOS data checksum\n");
 	}
     }
 
real memory  = 134205440 (131060K bytes)
avail memory = 126509056 (123544K bytes)
ACPI: Found ACPI BIOS data at 0xc00f7f40 (<ASUS  >, RSDT@7ffd000)
ACPI: <RSDT> entry starts@7ffd080
Preloaded elf kernel "kernel" at 0xc037e000.
