patch-2.0.37 linux/arch/i386/boot/setup.S
Next file: linux/arch/i386/config.in
Previous file: linux/arch/alpha/defconfig
Back to the patch index
Back to the overall index
- Lines: 48
- Date:
Sun Jun 13 10:20:59 1999
- Orig file:
v2.0.36/linux/arch/i386/boot/setup.S
- Orig date:
Sun Nov 15 21:51:46 1998
diff -u --recursive --new-file v2.0.36/linux/arch/i386/boot/setup.S linux/arch/i386/boot/setup.S
@@ -18,7 +18,7 @@
! March 1993/June 1994 (Christoph.Niemann@linux.org)
!
! add APM BIOS checking by Stephen Rothwell, May 1994
-! (Stephen.Rothwell@pd.necisa.oz.au)
+! (Stephen.Rothwell@canb.auug.org.au)
!
! High load stuff, initrd support and position independency
! by Hans Lermen & Werner Almesberger, February 1996
@@ -331,7 +331,7 @@
#ifdef CONFIG_APM
! check for APM BIOS
- ! NOTE: DS is pointing to the bootsector
+ ! NOTE: DS is pointing to the boot sector
!
mov [64],#0 ! version == 0 means no APM BIOS
@@ -481,6 +481,29 @@
mov al,#0xDF ! A20 on
out #0x60,al
call empty_8042
+
+! wait until a20 really *is* enabled; it can take a fair amount of
+! time on certain systems; Toshiba Tecras are known to have this
+! problem. The memory location used here is the int 0x1f vector,
+! which should be safe to use; any *unused* memory location < 0xfff0
+! should work here.
+
+#define TEST_ADDR 0x7c
+
+ push ds
+ xor ax,ax ! segment 0x0000
+ mov ds,ax
+ dec ax ! segment 0xffff (HMA)
+ mov gs,ax
+ mov bx,[TEST_ADDR] ! we want to restore the value later
+a20_wait:
+ inc ax
+ mov [TEST_ADDR],ax
+ seg gs
+ cmp ax,[TEST_ADDR+0x10]
+ je a20_wait ! loop until no longer aliased
+ mov [TEST_ADDR],bx ! restore original value
+ pop ds
! make sure any possible coprocessor is properly reset..
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov