Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/sommerfeld_i386mp_1]: src/sys/arch/i386/stand/lib There are other system...



details:   https://anonhg.NetBSD.org/src/rev/66857dacac14
branches:  sommerfeld_i386mp_1
changeset: 482570:66857dacac14
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Mon Aug 12 14:27:35 2002 +0000

description:
There are other systems besides the PS/2 L40 that enable A20
via the Configuration Port, so restructure the code a little
to allow for them, and list at least one other system that does
(anything based on AMD Elan SC520).

XXX We don't actually check for Elan SC520 yet.

diffstat:

 sys/arch/i386/stand/lib/gatea20.c |  60 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 0 deletions(-)

diffs (64 lines):

diff -r 9b0ed8103a06 -r 66857dacac14 sys/arch/i386/stand/lib/gatea20.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/i386/stand/lib/gatea20.c Mon Aug 12 14:27:35 2002 +0000
@@ -0,0 +1,60 @@
+/*     $NetBSD: gatea20.c,v 1.5.2.2 2002/08/12 14:27:35 thorpej Exp $  */
+
+/* extracted from freebsd:sys/i386/boot/biosboot/io.c */
+
+#include <sys/types.h>
+#include <machine/pio.h>
+
+#include <lib/libsa/stand.h>
+
+#include "libi386.h"
+#include "biosmca.h"
+
+#define K_RDWR                 0x60            /* keyboard data & cmds (read/write) */
+#define K_STATUS       0x64            /* keyboard status */
+#define K_CMD          0x64            /* keybd ctlr command (write-only) */
+
+#define K_OBUF_FUL     0x01            /* output buffer full */
+#define K_IBUF_FUL     0x02            /* input buffer full */
+
+#define KC_CMD_WIN     0xd0            /* read  output port */
+#define KC_CMD_WOUT    0xd1            /* write output port */
+#define KB_A20         0x9f            /* enable A20,
+                                          reset (!),
+                                          enable output buffer full interrupt
+                                          enable data line
+                                          disable clock line */
+
+/*
+ * Gate A20 for high memory
+ */
+static unsigned char   x_20 = KB_A20;
+void gateA20()
+{
+       __asm("pushfl ; cli");
+       /*
+        * Not all systems enable A20 via the keyboard controller.
+        *      * IBM PS/2 L40
+        *      * AMD Elan SC520-based systems
+        */
+       if (
+#ifdef SUPPORT_PS2
+           biosmca_ps2model == 0xf82 ||
+#endif
+           /* XXX How to check for AMD Elan SC520? */
+           0) {
+               outb(0x92, 0x2);
+       } else {
+               while (inb(K_STATUS) & K_IBUF_FUL);
+               while (inb(K_STATUS) & K_OBUF_FUL)
+                       (void)inb(K_RDWR);
+
+               outb(K_CMD, KC_CMD_WOUT);
+               delay(100);
+               while (inb(K_STATUS) & K_IBUF_FUL);
+               outb(K_RDWR, x_20);
+               delay(100);
+               while (inb(K_STATUS) & K_IBUF_FUL);
+       }
+       __asm("popfl");
+}



Home | Main Index | Thread Index | Old Index