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