1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2002 ELTEC Elektronik AG 3*4882a593Smuzhiyun * Frank Gottschling <fgottschling@eltec.de> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* i8042.h - Intel 8042 keyboard driver header */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef _I8042_H_ 11*4882a593Smuzhiyun #define _I8042_H_ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* defines */ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define I8042_DATA_REG 0x60 /* keyboard i/o buffer */ 16*4882a593Smuzhiyun #define I8042_STS_REG 0x64 /* keyboard status read */ 17*4882a593Smuzhiyun #define I8042_CMD_REG 0x64 /* keyboard ctrl write */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* Status register bit defines */ 20*4882a593Smuzhiyun #define STATUS_OBF (1 << 0) 21*4882a593Smuzhiyun #define STATUS_IBF (1 << 1) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* Configuration byte bit defines */ 24*4882a593Smuzhiyun #define CONFIG_KIRQ_EN (1 << 0) 25*4882a593Smuzhiyun #define CONFIG_MIRQ_EN (1 << 1) 26*4882a593Smuzhiyun #define CONFIG_SET_BIST (1 << 2) 27*4882a593Smuzhiyun #define CONFIG_KCLK_DIS (1 << 4) 28*4882a593Smuzhiyun #define CONFIG_MCLK_DIS (1 << 5) 29*4882a593Smuzhiyun #define CONFIG_AT_TRANS (1 << 6) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* i8042 commands */ 32*4882a593Smuzhiyun #define CMD_RD_CONFIG 0x20 /* read configuration byte */ 33*4882a593Smuzhiyun #define CMD_WR_CONFIG 0x60 /* write configuration byte */ 34*4882a593Smuzhiyun #define CMD_SELF_TEST 0xaa /* controller self-test */ 35*4882a593Smuzhiyun #define CMD_KBD_DIS 0xad /* keyboard disable */ 36*4882a593Smuzhiyun #define CMD_KBD_EN 0xae /* keyboard enable */ 37*4882a593Smuzhiyun #define CMD_SET_KBD_LED 0xed /* set keyboard led */ 38*4882a593Smuzhiyun #define CMD_DRAIN_OUTPUT 0xf4 /* drain output buffer */ 39*4882a593Smuzhiyun #define CMD_RESET_KBD 0xff /* reset keyboard */ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* i8042 command result */ 42*4882a593Smuzhiyun #define KBC_TEST_OK 0x55 43*4882a593Smuzhiyun #define KBD_ACK 0xfa 44*4882a593Smuzhiyun #define KBD_POR 0xaa 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* keyboard scan codes */ 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #define KBD_US 0 /* default US layout */ 49*4882a593Smuzhiyun #define KBD_GER 1 /* german layout */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #define KBD_TIMEOUT 1000 /* 1 sec */ 52*4882a593Smuzhiyun #define KBD_RESET_TRIES 3 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #define AS 0 /* normal character index */ 55*4882a593Smuzhiyun #define SH 1 /* shift index */ 56*4882a593Smuzhiyun #define CN 2 /* control index */ 57*4882a593Smuzhiyun #define NM 3 /* numeric lock index */ 58*4882a593Smuzhiyun #define AK 4 /* right alt key */ 59*4882a593Smuzhiyun #define CP 5 /* capslock index */ 60*4882a593Smuzhiyun #define ST 6 /* stop output index */ 61*4882a593Smuzhiyun #define EX 7 /* extended code index */ 62*4882a593Smuzhiyun #define ES 8 /* escape and extended code index */ 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define NORMAL 0x0000 /* normal key */ 65*4882a593Smuzhiyun #define STP 0x0001 /* scroll lock stop output*/ 66*4882a593Smuzhiyun #define NUM 0x0002 /* numeric lock */ 67*4882a593Smuzhiyun #define CAPS 0x0004 /* capslock */ 68*4882a593Smuzhiyun #define SHIFT 0x0008 /* shift */ 69*4882a593Smuzhiyun #define CTRL 0x0010 /* control*/ 70*4882a593Smuzhiyun #define EXT 0x0020 /* extended scan code 0xe0 */ 71*4882a593Smuzhiyun #define ESC 0x0040 /* escape key press */ 72*4882a593Smuzhiyun #define E1 0x0080 /* extended scan code 0xe1 */ 73*4882a593Smuzhiyun #define BRK 0x0100 /* make break flag for keyboard */ 74*4882a593Smuzhiyun #define ALT 0x0200 /* right alt */ 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* exports */ 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /** 79*4882a593Smuzhiyun * Flush all buffer from keyboard controller to host. 80*4882a593Smuzhiyun */ 81*4882a593Smuzhiyun void i8042_flush(void); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /** 84*4882a593Smuzhiyun * Disables the keyboard so that key strokes no longer generate scancodes to 85*4882a593Smuzhiyun * the host. 86*4882a593Smuzhiyun * 87*4882a593Smuzhiyun * @return 0 if ok, -1 if keyboard input was found while disabling 88*4882a593Smuzhiyun */ 89*4882a593Smuzhiyun int i8042_disable(void); 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #endif /* _I8042_H_ */ 92