2 PS2 Mouse Communication Interface
4 Copyright (c) 2006 - 2007, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 #define PS2_PACKET_LENGTH 3
19 #define PS2_SYNC_MASK 0xc
20 #define PS2_SYNC_BYTE 0x8
22 #define IS_PS2_SYNC_BYTE(byte) ((byte & PS2_SYNC_MASK) == PS2_SYNC_BYTE)
24 #define PS2_READ_BYTE_ONE 0
25 #define PS2_READ_DATA_BYTE 1
26 #define PS2_PROCESS_PACKET 2
29 #define BAT_TIMEOUT 500000
34 #define KBC_DATA_PORT 0x60
35 #define KBC_CMD_STS_PORT 0x64
40 #define READ_CMD_BYTE 0x20
41 #define WRITE_CMD_BYTE 0x60
42 #define DISABLE_AUX 0xa7
43 #define ENABLE_AUX 0xa8
44 #define SELF_TEST 0xaa
45 #define DISABLE_KB 0xad
46 #define ENABLE_KB 0xae
47 #define WRITE_AUX_DEV 0xd4
49 #define CMD_SYS_FLAG 0x04
50 #define CMD_KB_STS 0x10
51 #define CMD_KB_DIS 0x10
55 // 8042 Auxiliary Device Command
57 #define SETSF1_CMD 0xe6
58 #define SETSF2_CMD 0xe7
59 #define SETRE_CMD 0xe8
61 #define SETRM_CMD 0xf0
62 #define SETSR_CMD 0xf3
63 #define ENABLE_CMD 0xf4
64 #define DISABLE_CMD 0xf5
65 #define RESET_CMD 0xff
71 #define PS2_RESEND 0xfe
72 #define PS2MOUSE_BAT1 0xaa
73 #define PS2MOUSE_BAT2 0x0
76 // Keyboard Controller Status
78 #define KBC_PARE 0x80 // Parity Error
79 #define KBC_TIM 0x40 // General Time Out
80 #define KBC_AUXB 0x20 // Output buffer for auxiliary device (PS/2):
81 // 0 - Holds keyboard data
82 // 1 - Holds data for auxiliary device
84 #define KBC_KEYL 0x10 // Keyboard lock status:
85 // 0 - keyboard locked
88 #define KBC_CD 0x08 // Command/Data:
89 // 0 - data byte written via port 60h
90 // 1 - command byte written via port 64h
92 #define KBC_SYSF 0x04 // System Flag:
94 // 1 - self-test successful
96 #define KBC_INPB 0x02 // Input Buffer Status :
97 // 0 - input buffer empty
98 // 1 - CPU data in input buffer
100 #define KBC_OUTB 0x01 // Output Buffer Status :
101 // 0 - output buffer empty
102 // 1 - keyboard controller data in output buffer
106 Issue self test command via IsaIo interface.
108 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
110 @return EFI_SUCCESS Success to do keyboard self testing.
111 @return others Fail to do keyboard self testing.
115 IN EFI_ISA_IO_PROTOCOL
*IsaIo
120 Issue command to enable keyboard AUX functionality.
122 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
124 @return Status of command issuing.
128 IN EFI_ISA_IO_PROTOCOL
*IsaIo
133 Issue command to disable keyboard AUX functionality.
135 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
137 @return Status of command issuing.
141 IN EFI_ISA_IO_PROTOCOL
*IsaIo
146 Issue command to enable keyboard.
148 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
150 @return Status of command issuing.
154 IN EFI_ISA_IO_PROTOCOL
*IsaIo
159 Issue command to disable keyboard.
161 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
163 @return Status of command issuing.
167 IN EFI_ISA_IO_PROTOCOL
*IsaIo
172 Issue command to check keyboard status.
174 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
175 @param KeyboardEnable return whether keyboard is enable.
177 @return Status of command issuing.
181 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
182 OUT BOOLEAN
*KeyboardEnable
187 Issue command to reset keyboard.
189 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
191 @return Status of command issuing.
195 IN EFI_ISA_IO_PROTOCOL
*IsaIo
200 Issue command to set mouse's sample rate
202 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
203 @param SampleRate value of sample rate
205 @return Status of command issuing.
208 PS2MouseSetSampleRate (
209 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
210 IN MOUSE_SR SampleRate
215 Issue command to set mouse's resolution.
217 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
218 @param Resolution value of resolution
220 @return Status of command issuing.
223 PS2MouseSetResolution (
224 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
225 IN MOUSE_RE Resolution
230 Issue command to set mouse's scaling.
232 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
233 @param Scaling value of scaling
235 @return Status of command issuing.
239 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
245 Issue command to enable Ps2 mouse.
247 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
249 @return Status of command issuing.
253 IN EFI_ISA_IO_PROTOCOL
*IsaIo
258 Get mouse packet . Only care first 3 bytes
260 @param MouseDev Pointer of PS2 Mouse Private Data Structure
262 @retval EFI_NOT_READY Mouse Device not ready to input data packet, or some error happened during getting the packet
263 @retval EFI_SUCCESS The data packet is gotten successfully.
268 PS2_MOUSE_ABSOLUTE_POINTER_DEV
*MouseAbsolutePointerDev
273 Read data via IsaIo protocol with given number.
275 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
276 @param Buffer Buffer receive data of mouse
277 @param BufSize The size of buffer
278 @param State Check input or read data
280 @return status of reading mouse data.
284 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
286 IN OUT UINTN
*BufSize
,
294 I/O work flow of outing 8042 command.
296 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
297 @param Command I/O command.
299 @retval EFI_SUCCESS Success to excute I/O work flow
300 @retval EFI_TIMEOUT Keyboard controller time out.
304 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
309 I/O work flow of in 8042 data.
311 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
312 @param Data Data value
314 @retval EFI_SUCCESS Success to excute I/O work flow
315 @retval EFI_TIMEOUT Keyboard controller time out.
319 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
324 I/O work flow of outing 8042 data.
326 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
327 @param Data Data value
329 @retval EFI_SUCCESS Success to excute I/O work flow
330 @retval EFI_TIMEOUT Keyboard controller time out.
334 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
339 I/O work flow of outing 8042 Aux command.
341 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
342 @param Command Aux I/O command
343 @param Resend Whether need resend the Aux command.
345 @retval EFI_SUCCESS Success to excute I/O work flow
346 @retval EFI_TIMEOUT Keyboard controller time out.
350 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
356 I/O work flow of in 8042 Aux data.
358 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
359 @param Data Buffer holding return value.
361 @retval EFI_SUCCESS Success to excute I/O work flow
362 @retval EFI_TIMEOUT Keyboard controller time out.
366 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
371 I/O work flow of outing 8042 Aux data.
373 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
374 @param Command Aux I/O command
376 @retval EFI_SUCCESS Success to excute I/O work flow
377 @retval EFI_TIMEOUT Keyboard controller time out.
381 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
386 Check keyboard controller status, if it is output buffer full and for auxiliary device
388 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
390 @retval EFI_SUCCESS Keyboard controller is ready
391 @retval EFI_NOT_READY Keyboard controller is not ready
395 IN EFI_ISA_IO_PROTOCOL
*IsaIo
399 I/O work flow to wait input buffer empty in given time.
401 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
402 @param Timeout Wating time.
404 @retval EFI_TIMEOUT if input is still not empty in given time.
405 @retval EFI_SUCCESS input is empty.
409 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
414 I/O work flow to wait output buffer full in given time.
416 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
417 @param Timeout given time
419 @retval EFI_TIMEOUT output is not full in given time
420 @retval EFI_SUCCESS output is full in given time.
424 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
428 #endif // _COMMPS2_H_