[openfirmware] r1233 - cpu/x86/pc/olpc/via

svn at openfirmware.info svn at openfirmware.info
Fri Jul 3 06:07:30 CEST 2009


Author: wmb
Date: 2009-07-03 06:07:29 +0200 (Fri, 03 Jul 2009)
New Revision: 1233

Modified:
   cpu/x86/pc/olpc/via/acpi.fth
   cpu/x86/pc/olpc/via/romreset.bth
Log:
Via - another try at ACPI wakeup.



Modified: cpu/x86/pc/olpc/via/acpi.fth
===================================================================
--- cpu/x86/pc/olpc/via/acpi.fth	2009-07-03 04:06:23 UTC (rev 1232)
+++ cpu/x86/pc/olpc/via/acpi.fth	2009-07-03 04:07:29 UTC (rev 1233)
@@ -232,7 +232,9 @@
    dup >acpi-table-len  9  fix-checksum
 ;
 
-h# 28 constant rm-ds     \ Must agree with GDT in rmstart.fth
+h# 18 constant ds32     \ Must agree with GDT in rmstart.fth
+h# 20 constant cs16     \ Must agree with GDT in rmstart.fth
+h# 28 constant ds16     \ Must agree with GDT in rmstart.fth
 
 label do-acpi-wake
    \ This code must be copied to low memory
@@ -251,22 +253,16 @@
    h# 0f # ax and  ax cx mov
    op: 4 # bx shr
 
-   \ The following might be unnecessary
-   ax ax xor  rm-ds #  al  mov  \ 16-bit data segment
-   ax ds mov  ax es mov  ax ss mov
+   \ Set data segment for storing offset and segment below
+   ax ax xor  ds16 #  al  mov  ax ds mov   \ 16-bit data segment
+   cx  wake-adr wa1+ #)  mov  \ Offset
+   bx  wake-adr la1+ #)  mov  \ Segment
 
-   cx  wake-adr la1+ #)  mov  \ Offset
-   bx  wake-adr wa1+ #)  mov  \ Segment
+   cr0 ax mov   h# fe # al and   ax cr0 mov   \ Enter real mode
 
-   op: cr0 ax mov   h# fe # al and   op: ax cr0 mov   \ Enter real mode
+   here 5 +  do-acpi-wake -  wake-adr  + lwsplit d# 12 lshift  #)  far jmp  \ Jump to set cs
 
-   here 5 +  do-acpi-wake -  wake-adr  + lwsplit #)  far jmp  \ Jump to set cs
-
-   \ The following might be unnecessary
-   \ Now we are running in real mode; fix segments again
-   cs ax mov   ax ds mov  ax es mov
-
-   wake-adr wa1+  s#)  far jmp
+   cs: wake-adr wa1+  lwsplit drop  s#)  far jmp
 end-code
 here do-acpi-wake - constant /do-acpi-wake
 

Modified: cpu/x86/pc/olpc/via/romreset.bth
===================================================================
--- cpu/x86/pc/olpc/via/romreset.bth	2009-07-03 04:06:23 UTC (rev 1232)
+++ cpu/x86/pc/olpc/via/romreset.bth	2009-07-03 04:07:29 UTC (rev 1233)
@@ -13,7 +13,7 @@
 \needs write-dropin      fload ${BP}/forth/lib/mkdropin.fth
 \needs >seg:off          fload ${BP}/cpu/x86/pc/rmtools.fth
 
-h# 20 constant rm-cs     \ Must agree with GDT in rmstart.fth
+h# 20 constant cs16     \ Must agree with GDT in rmstart.fth
 
 fload ${BP}/cpu/x86/mmuparam.fth
 
@@ -178,8 +178,7 @@
       facs-adr h# c + #) ax mov  ax ax or  0<>  if
          \ Resume in real mode for ACPI operating systems
          \ Linear wakeup address is in EAX
-         sp sp xor  \ Possibly unnecessary
-         wake-adr lwsplit drop  rm-cs #) far jmp
+         wake-adr lwsplit drop  cs16 #) far jmp
       else
          \ Resume in 32-bit protected mode for OFW
          resume-data  # sp mov




More information about the openfirmware mailing list