--- arch/i386/stand/libsa/gateA20.c-	Sat Mar  7 14:09:30 1998
+++ arch/i386/stand/libsa/gateA20.c	Thu Jun 29 14:06:00 2000
@@ -51,6 +51,26 @@
 int
 getA20type()
 {
+	u_int32_t status;
+	u_int8_t *vers;
+
+	__asm __volatile(DOINT(0x15) "\n\t"
+			 "setc %%al\n\t"
+			 : "=a" (status)
+			 : "0" (0xc000)
+			 : "%ecx", "cc");
+
+	/* On failure we go for a normal A20 line */
+	if (status)
+		return(A20_KBD);
+
+	vers = (void*) (((BIOS_regs.biosr_es << 4) | BIOS_regs.biosr_bx) +2);
+
+	/* Detect IBM L40 machine */
+	if (vers[0] == 0xF8 && vers[1] == 0x23)
+		return(A20_0x92);
+
+	/* By default we go for a normal A20 line */
 	return(A20_KBD);
 }
 
