#include <sys/types.h>
#include <lib/libsa/stand.h>
#include "libi386.h"
#include "biosmca.h"
#include "cpufunc.h"
#define K_RDWR 0x60
#define K_STATUS 0x64
#define K_CMD 0x64
#define K_OBUF_FUL 0x01
#define K_IBUF_FUL 0x02
#define KC_CMD_WIN 0xd0
#define KC_CMD_WOUT 0xd1
#define KB_A20 0x9f
static unsigned char x_20 = KB_A20;
void
gateA20(void)
{
int biosA20(void);
u_long psl;
if (!biosA20())
return;
psl = x86_read_psl();
x86_disable_intr();
if (
#ifdef SUPPORT_PS2
biosmca_ps2model == 0xf82 ||
#endif
(inb(K_STATUS) == 0xff && inb(K_RDWR) == 0xff)) {
int data;
data = inb(0x92);
outb(0x92, data | 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);
while (inb(K_STATUS) & K_IBUF_FUL);
outb(K_RDWR, x_20);
while (inb(K_STATUS) & K_IBUF_FUL);
while (inb(K_STATUS) & K_OBUF_FUL)
(void)inb(K_RDWR);
}
x86_write_psl(psl);
}