1/*
2 * Copyright 2004-2005 Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 *
5 * PS/2 interface definitions
6 *
7 * Authors (in chronological order):
8 *		Elad Lahav (elad@eldarshany.com)
9 *		Stefano Ceccherini (burton666@libero.it)
10 *		Axel D��rfler, axeld@pinc-software.de
11 */
12#ifndef _PS2_DEFS_H
13#define _PS2_DEFS_H
14
15
16/** Interface definitions for the Intel 8042, 8741, or 8742 (PS/2) */
17
18// I/O addresses
19#define PS2_PORT_DATA					0x60
20#define PS2_PORT_CTRL					0x64
21
22// data port bits
23#define PS2_STATUS_OUTPUT_BUFFER_FULL	0x01
24#define PS2_STATUS_INPUT_BUFFER_FULL	0x02
25#define PS2_STATUS_AUX_DATA				0x20
26#define PS2_STATUS_TIMEOUT				0x40
27
28// control words
29#define PS2_CTRL_READ_CMD				0x20
30#define PS2_CTRL_WRITE_CMD				0x60
31#define PS2_CTRL_AUX_LOOPBACK			0xd3
32#define PS2_CTRL_WRITE_AUX				0xd4
33#define PS2_CTRL_MOUSE_DISABLE			0xa7
34#define PS2_CTRL_MOUSE_ENABLE			0xa8
35#define PS2_CTRL_MOUSE_TEST				0xa9
36#define PS2_CTRL_SELF_TEST				0xaa
37#define PS2_CTRL_KEYBOARD_TEST			0xab
38#define PS2_CTRL_KEYBOARD_DISABLE		0xad
39#define PS2_CTRL_KEYBOARD_ENABLE		0xae
40
41// command bytes
42#define PS2_CMD_DEV_INIT				0x43
43
44// command bits
45#define PS2_BITS_KEYBOARD_INTERRUPT		0x01
46#define PS2_BITS_AUX_INTERRUPT			0x02
47#define PS2_BITS_KEYBOARD_DISABLED		0x10
48#define PS2_BITS_MOUSE_DISABLED			0x20
49#define PS2_BITS_TRANSLATE_SCANCODES	0x40
50
51// data words
52#define PS2_CMD_MOUSE_SET_SCALE11		0xe6
53#define PS2_CMD_MOUSE_SET_SCALE21		0xe7
54#define PS2_CMD_MOUSE_SET_RES			0xe8
55#define PS2_CMD_MOUSE_GET_INFO			0xe9
56#define PS2_CMD_MOUSE_SET_STREAM  		0xea
57#define PS2_CMD_KEYBOARD_SET_LEDS		0xed
58#define PS2_CMD_MOUSE_SET_POLL			0xf0
59#define PS2_CMD_SET_TYPEMATIC			0xf3
60#define PS2_CMD_ECHO					0xee
61#define PS2_CMD_TEST_PASSED				0xaa
62#define PS2_CMD_GET_DEVICE_ID			0xf2
63#define PS2_CMD_SET_SAMPLE_RATE			0xf3
64#define PS2_CMD_ENABLE					0xf4
65#define PS2_CMD_DISABLE					0xf5
66#define PS2_CMD_MOUSE_RESET_DIS			0xf6
67#define PS2_CMD_RESET					0xff
68#define PS2_CMD_RESEND					0xfe
69
70// reply codes
71#define PS2_REPLY_TEST_PASSED			0x55
72#define PS2_REPLY_ACK					0xfa
73#define PS2_REPLY_RESEND				0xfe
74#define PS2_REPLY_ERROR					0xfc
75
76// interrupts
77#define INT_PS2_MOUSE					0x0c
78#define INT_PS2_KEYBOARD				0x01
79
80// mouse device IDs
81#define PS2_DEV_ID_STANDARD				0
82#define PS2_DEV_ID_INTELLIMOUSE			3
83#define PS2_DEV_ID_TOUCHPAD_RICATECH	4
84
85// packet sizes
86#define PS2_PACKET_STANDARD				3
87#define PS2_PACKET_INTELLIMOUSE			4
88#define PS2_PACKET_SYNAPTICS			6
89#define PS2_PACKET_ALPS					6
90#define PS2_PACKET_ELANTECH				6	// version 1 is only 4
91#define PS2_MAX_PACKET_SIZE				6
92	// Should be equal to the biggest packet size
93
94// timeouts
95#define PS2_CTRL_WAIT_TIMEOUT			500000
96
97#endif /* _PS2_H */
98