76 lines
2.8 KiB
Plaintext
76 lines
2.8 KiB
Plaintext
/*
|
|
* Copyright (c) 2007, 2008, 2009, 2011, ETH Zurich. All rights reserved.
|
|
*
|
|
* This file is distributed under the terms in the attached LICENSE file.
|
|
* If you do not find this file, copies can be found by writing to:
|
|
* ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
|
|
*/
|
|
|
|
/*
|
|
* lpc_kbd.dev
|
|
*
|
|
* DESCRIPTION: Legacy keyboard and mouse port
|
|
*
|
|
* This file does not fully describe the 8042, which is not supported
|
|
* on most PCs anymore.
|
|
*
|
|
* Ref: http://www.mcamafia.de/pdf/ibm_hitrc07.pdf
|
|
*/
|
|
|
|
device lpc_kbd msbfirst (io base) "LPC Keyboard" {
|
|
register input ro io(base, 0) "Input" type(uint8);
|
|
register status ro io(base, 4) "Status" {
|
|
perr 1 "Parity error";
|
|
timeout 1 "General timeout";
|
|
aobf 1 "Auxiliary device output buffer full";
|
|
is 1 "Inhibit switch";
|
|
cd 1 "Command/data";
|
|
sf 1 "System flag";
|
|
ibf 1 "Input buffer full";
|
|
obf 1 "Output buffer full";
|
|
};
|
|
|
|
register output wo also io(base, 0) "Output" type(uint8);
|
|
|
|
constants cmd "Command" {
|
|
/* XXX: I don't attempt to encode the silly read/write RAM commands,
|
|
* since they mix a bitfield and a constant in the same register.
|
|
*/
|
|
rd_ccmd = 0x20 "Read controller command byte";
|
|
wr_ccmd = 0x60 "Write controller command byte";
|
|
aux_disable = 0xa7 "Disable auxiliary device interface";
|
|
aux_enable = 0xa8 "Enable auxiliary device interface";
|
|
kbd_disable = 0xad "Disable keyboard interface";
|
|
kbd_enable = 0xae "Enable keyboard interface";
|
|
read_input = 0xc0 "Read input port";
|
|
poll_input_low = 0xc1 "Poll input port low";
|
|
poll_input_high = 0xc2 "Poll input port high";
|
|
read_output = 0xd0 "Read output port";
|
|
write_output = 0xd1 "Write output port";
|
|
write_kbd_out = 0xd2 "Write keyboard output buffer";
|
|
write_aux_out = 0xd3 "Write auxiliary device output buffer";
|
|
write_aux = 0xd4 "Write to auxiliary device";
|
|
};
|
|
|
|
// FIXME: why won't Mackerel allow this?
|
|
// register command wo also io(base, 4) "Command" type(command);
|
|
register command wo also io(base, 4) "Command" {
|
|
cmd 8 type(cmd) "Command";
|
|
};
|
|
|
|
/* This is the format of the "controller command" byte, which is data
|
|
* returned in response to an 0x20 command, and not to be confused with
|
|
* the command register, which is write-only.
|
|
*/
|
|
regtype ccmd "Controller command byte" {
|
|
_ 1;
|
|
kbd_xl 1 "Keyboard translate";
|
|
aux_dis 1 "Disable auxiliary device";
|
|
kbd_dis 1 "Disable keyboard";
|
|
_ 1;
|
|
sysflg 1 "System flag";
|
|
aux_int 1 "Enable auxiliary interrupt";
|
|
kbd_int 1 "Enable keyboard interrupt";
|
|
};
|
|
};
|