diff options
author | Tobias Weingartner <weingart@cvs.openbsd.org> | 1997-03-31 03:12:20 +0000 |
---|---|---|
committer | Tobias Weingartner <weingart@cvs.openbsd.org> | 1997-03-31 03:12:20 +0000 |
commit | db37cd8003c371210064ba9f9a9c279f13a175d2 (patch) | |
tree | 95a740b2174d900a416d0fd7fac0895c9e3972ab /sys/arch/i386/stand/libsa/gateA20.c | |
parent | 1dc40aae41ae95a97b3d0955f1cf85385b6de1a4 (diff) |
Initial /boot stuff (from Mickey)
Diffstat (limited to 'sys/arch/i386/stand/libsa/gateA20.c')
-rw-r--r-- | sys/arch/i386/stand/libsa/gateA20.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/sys/arch/i386/stand/libsa/gateA20.c b/sys/arch/i386/stand/libsa/gateA20.c new file mode 100644 index 00000000000..7c3ac5a5fda --- /dev/null +++ b/sys/arch/i386/stand/libsa/gateA20.c @@ -0,0 +1,76 @@ +/* $OpenBSD: gateA20.c,v 1.2 1997/03/31 03:12:13 weingart Exp $ */ + +/* + * Ported to boot 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 + * + * Mach Operating System + * Copyright (c) 1992, 1991 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ + +#include <sys/types.h> +#include <machine/pio.h> +#include <stand.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 0xdf /* enable A20, + enable output buffer full interrupt + enable data line + enable clock line */ + +/* + * Gate A20 for high memory + */ +void +gateA20(on) + int on; +{ +#ifdef IBM_L40 + outb(0x92, 0x2); +#else IBM_L40 + while (inb(K_STATUS) & K_IBUF_FUL); + + while (inb(K_STATUS) & K_OBUF_FUL) + (void)inb(K_RDWR); + + outb(K_CMD, KC_CMD_WOUT); + while (inb(K_STATUS) & K_IBUF_FUL); + + if (on) + outb(K_RDWR, KB_A20); + else + outb(K_RDWR, 0xcd); + while (inb(K_STATUS) & K_IBUF_FUL); + + while (inb(K_STATUS) & K_OBUF_FUL) + (void)inb(K_RDWR); +#endif IBM_L40 +} |