]>
git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/CommPs2.h
2 PS2 Mouse Communication Interface
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
12 #define PS2_PACKET_LENGTH 3
13 #define PS2_SYNC_MASK 0xc
14 #define PS2_SYNC_BYTE 0x8
16 #define IS_PS2_SYNC_BYTE(byte) ((byte & PS2_SYNC_MASK) == PS2_SYNC_BYTE)
18 #define PS2_READ_BYTE_ONE 0
19 #define PS2_READ_DATA_BYTE 1
20 #define PS2_PROCESS_PACKET 2
23 #define BAT_TIMEOUT 500000
28 #define KBC_DATA_PORT 0x60
29 #define KBC_CMD_STS_PORT 0x64
34 #define READ_CMD_BYTE 0x20
35 #define WRITE_CMD_BYTE 0x60
36 #define DISABLE_AUX 0xa7
37 #define ENABLE_AUX 0xa8
38 #define SELF_TEST 0xaa
39 #define DISABLE_KB 0xad
40 #define ENABLE_KB 0xae
41 #define WRITE_AUX_DEV 0xd4
43 #define CMD_SYS_FLAG 0x04
44 #define CMD_KB_STS 0x10
45 #define CMD_KB_DIS 0x10
49 // 8042 Auxiliary Device Command
51 #define SETSF1_CMD 0xe6
52 #define SETSF2_CMD 0xe7
53 #define SETRE_CMD 0xe8
55 #define SETRM_CMD 0xf0
56 #define SETSR_CMD 0xf3
57 #define ENABLE_CMD 0xf4
58 #define DISABLE_CMD 0xf5
59 #define RESET_CMD 0xff
65 #define PS2_RESEND 0xfe
66 #define PS2MOUSE_BAT1 0xaa
67 #define PS2MOUSE_BAT2 0x0
70 // Keyboard Controller Status
81 /// Output buffer for auxiliary device (PS/2):
82 /// 0 - Holds keyboard data
83 /// 1 - Holds data for auxiliary device
87 /// Keyboard lock status:
88 /// 0 - keyboard locked
94 /// 0 - data byte written via port 60h
95 /// 1 - command byte written via port 64h
100 /// 0 - power-on reset
101 /// 1 - self-test successful
103 #define KBC_SYSF 0x04
105 /// Input Buffer Status :
106 /// 0 - input buffer empty
107 /// 1 - CPU data in input buffer
109 #define KBC_INPB 0x02
111 /// Output Buffer Status :
112 /// 0 - output buffer empty
113 /// 1 - keyboard controller data in output buffer
115 #define KBC_OUTB 0x01
118 Issue self test command via IsaIo interface.
120 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
122 @return EFI_SUCCESS Success to do keyboard self testing.
123 @return others Fail to do keyboard self testing.
127 IN EFI_ISA_IO_PROTOCOL
*IsaIo
131 Issue command to enable keyboard AUX functionality.
133 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
135 @return Status of command issuing.
139 IN EFI_ISA_IO_PROTOCOL
*IsaIo
143 Issue command to disable keyboard AUX functionality.
145 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
147 @return Status of command issuing.
151 IN EFI_ISA_IO_PROTOCOL
*IsaIo
155 Issue command to enable keyboard.
157 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
159 @return Status of command issuing.
163 IN EFI_ISA_IO_PROTOCOL
*IsaIo
167 Issue command to disable keyboard.
169 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
171 @return Status of command issuing.
175 IN EFI_ISA_IO_PROTOCOL
*IsaIo
179 Issue command to check keyboard status.
181 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
182 @param KeyboardEnable return whether keyboard is enable.
184 @return Status of command issuing.
188 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
189 OUT BOOLEAN
*KeyboardEnable
193 Issue command to reset keyboard.
195 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
197 @return Status of command issuing.
201 IN EFI_ISA_IO_PROTOCOL
*IsaIo
205 Issue command to set mouse's sample rate
207 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
208 @param SampleRate value of sample rate
210 @return Status of command issuing.
213 PS2MouseSetSampleRate (
214 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
215 IN MOUSE_SR SampleRate
219 Issue command to set mouse's resolution.
221 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
222 @param Resolution value of resolution
224 @return Status of command issuing.
227 PS2MouseSetResolution (
228 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
229 IN MOUSE_RE Resolution
233 Issue command to set mouse's scaling.
235 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
236 @param Scaling value of scaling
238 @return Status of command issuing.
242 IN EFI_ISA_IO_PROTOCOL
*IsaIo
,
247 Issue command to enable Ps2 mouse.
249 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
251 @return Status of command issuing.
255 IN EFI_ISA_IO_PROTOCOL
*IsaIo
259 Get mouse packet . Only care first 3 bytes
261 @param MouseDev Pointer of PS2 Mouse Private Data Structure
263 @retval EFI_NOT_READY Mouse Device not ready to input data packet, or some error happened during getting the packet
264 @retval EFI_SUCCESS The data packet is gotten successfully.
269 PS2_MOUSE_DEV
*MouseDev
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 execute 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 execute 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 execute 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 execute 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 execute 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 Data Buffer holding return value
376 @retval EFI_SUCCESS Success to execute 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
,