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