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