]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Bus/Isa/Ps2MouseAbsolutePointerDxe/CommPs2.h
clean up the un-suitable ';' location when declaring the functions.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Isa / Ps2MouseAbsolutePointerDxe / CommPs2.h
1 /**@file
2 PS2 Mouse Communication Interface
3
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
9
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.
12
13 **/
14
15 #ifndef _COMMPS2_H_
16 #define _COMMPS2_H_
17
18 #define PS2_PACKET_LENGTH 3
19 #define PS2_SYNC_MASK 0xc
20 #define PS2_SYNC_BYTE 0x8
21
22 #define IS_PS2_SYNC_BYTE(byte) ((byte & PS2_SYNC_MASK) == PS2_SYNC_BYTE)
23
24 #define PS2_READ_BYTE_ONE 0
25 #define PS2_READ_DATA_BYTE 1
26 #define PS2_PROCESS_PACKET 2
27
28 #define TIMEOUT 50000
29 #define BAT_TIMEOUT 500000
30
31 //
32 // 8042 I/O Port
33 //
34 #define KBC_DATA_PORT 0x60
35 #define KBC_CMD_STS_PORT 0x64
36
37 //
38 // 8042 Command
39 //
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
48
49 #define CMD_SYS_FLAG 0x04
50 #define CMD_KB_STS 0x10
51 #define CMD_KB_DIS 0x10
52 #define CMD_KB_EN 0x0
53
54 //
55 // 8042 Auxiliary Device Command
56 //
57 #define SETSF1_CMD 0xe6
58 #define SETSF2_CMD 0xe7
59 #define SETRE_CMD 0xe8
60 #define READ_CMD 0xeb
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
66
67 //
68 // return code
69 //
70 #define PS2_ACK 0xfa
71 #define PS2_RESEND 0xfe
72 #define PS2MOUSE_BAT1 0xaa
73 #define PS2MOUSE_BAT2 0x0
74
75 //
76 // Keyboard Controller Status
77 //
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
83 //
84 #define KBC_KEYL 0x10 // Keyboard lock status:
85 // 0 - keyboard locked
86 // 1 - keyboard free
87 //
88 #define KBC_CD 0x08 // Command/Data:
89 // 0 - data byte written via port 60h
90 // 1 - command byte written via port 64h
91 //
92 #define KBC_SYSF 0x04 // System Flag:
93 // 0 - power-on reset
94 // 1 - self-test successful
95 //
96 #define KBC_INPB 0x02 // Input Buffer Status :
97 // 0 - input buffer empty
98 // 1 - CPU data in input buffer
99 //
100 #define KBC_OUTB 0x01 // Output Buffer Status :
101 // 0 - output buffer empty
102 // 1 - keyboard controller data in output buffer
103 //
104
105 /**
106 Issue self test command via IsaIo interface.
107
108 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
109
110 @return EFI_SUCCESS Success to do keyboard self testing.
111 @return others Fail to do keyboard self testing.
112 **/
113 EFI_STATUS
114 KbcSelfTest (
115 IN EFI_ISA_IO_PROTOCOL *IsaIo
116 );
117
118 /**
119 Issue command to enable keyboard AUX functionality.
120
121 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
122
123 @return Status of command issuing.
124 **/
125 EFI_STATUS
126 KbcEnableAux (
127 IN EFI_ISA_IO_PROTOCOL *IsaIo
128 );
129
130 /**
131 Issue command to disable keyboard AUX functionality.
132
133 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
134
135 @return Status of command issuing.
136 **/
137 EFI_STATUS
138 KbcDisableAux (
139 IN EFI_ISA_IO_PROTOCOL *IsaIo
140 );
141
142 /**
143 Issue command to enable keyboard.
144
145 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
146
147 @return Status of command issuing.
148 **/
149 EFI_STATUS
150 KbcEnableKb (
151 IN EFI_ISA_IO_PROTOCOL *IsaIo
152 );
153
154 /**
155 Issue command to disable keyboard.
156
157 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
158
159 @return Status of command issuing.
160 **/
161 EFI_STATUS
162 KbcDisableKb (
163 IN EFI_ISA_IO_PROTOCOL *IsaIo
164 );
165
166 /**
167 Issue command to check keyboard status.
168
169 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
170 @param KeyboardEnable return whether keyboard is enable.
171
172 @return Status of command issuing.
173 **/
174 EFI_STATUS
175 CheckKbStatus (
176 IN EFI_ISA_IO_PROTOCOL *IsaIo,
177 OUT BOOLEAN *KeyboardEnable
178 );
179
180 /**
181 Issue command to reset keyboard.
182
183 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
184
185 @return Status of command issuing.
186 **/
187 EFI_STATUS
188 PS2MouseReset (
189 IN EFI_ISA_IO_PROTOCOL *IsaIo
190 );
191
192 /**
193 Issue command to set mouse's sample rate
194
195 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
196 @param SampleRate value of sample rate
197
198 @return Status of command issuing.
199 **/
200 EFI_STATUS
201 PS2MouseSetSampleRate (
202 IN EFI_ISA_IO_PROTOCOL *IsaIo,
203 IN MOUSE_SR SampleRate
204 );
205
206 /**
207 Issue command to set mouse's resolution.
208
209 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
210 @param Resolution value of resolution
211
212 @return Status of command issuing.
213 **/
214 EFI_STATUS
215 PS2MouseSetResolution (
216 IN EFI_ISA_IO_PROTOCOL *IsaIo,
217 IN MOUSE_RE Resolution
218 );
219
220 /**
221 Issue command to set mouse's scaling.
222
223 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
224 @param Scaling value of scaling
225
226 @return Status of command issuing.
227 **/
228 EFI_STATUS
229 PS2MouseSetScaling (
230 IN EFI_ISA_IO_PROTOCOL *IsaIo,
231 IN MOUSE_SF Scaling
232 );
233
234 /**
235 Issue command to enable Ps2 mouse.
236
237 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
238
239 @return Status of command issuing.
240 **/
241 EFI_STATUS
242 PS2MouseEnable (
243 IN EFI_ISA_IO_PROTOCOL *IsaIo
244 );
245
246 /**
247 Get mouse packet . Only care first 3 bytes
248
249 @param MouseDev Pointer of PS2 Mouse Private Data Structure
250
251 @retval EFI_NOT_READY Mouse Device not ready to input data packet, or some error happened during getting the packet
252 @retval EFI_SUCCESS The data packet is gotten successfully.
253
254 **/
255 EFI_STATUS
256 PS2MouseGetPacket (
257 PS2_MOUSE_ABSOLUTE_POINTER_DEV *MouseAbsolutePointerDev
258 );
259
260 /**
261 Read data via IsaIo protocol with given number.
262
263 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
264 @param Buffer Buffer receive data of mouse
265 @param BufSize The size of buffer
266 @param State Check input or read data
267
268 @return status of reading mouse data.
269 **/
270 EFI_STATUS
271 PS2MouseRead (
272 IN EFI_ISA_IO_PROTOCOL *IsaIo,
273 OUT VOID *Buffer,
274 IN OUT UINTN *BufSize,
275 IN UINTN State
276 );
277
278 //
279 // 8042 I/O function
280 //
281 /**
282 I/O work flow of outing 8042 command.
283
284 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
285 @param Command I/O command.
286
287 @retval EFI_SUCCESS Success to excute I/O work flow
288 @retval EFI_TIMEOUT Keyboard controller time out.
289 **/
290 EFI_STATUS
291 Out8042Command (
292 IN EFI_ISA_IO_PROTOCOL *IsaIo,
293 IN UINT8 Command
294 );
295
296 /**
297 I/O work flow of in 8042 data.
298
299 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
300 @param Data Data value
301
302 @retval EFI_SUCCESS Success to excute I/O work flow
303 @retval EFI_TIMEOUT Keyboard controller time out.
304 **/
305 EFI_STATUS
306 In8042Data (
307 IN EFI_ISA_IO_PROTOCOL *IsaIo,
308 IN OUT UINT8 *Data
309 );
310
311 /**
312 I/O work flow of outing 8042 data.
313
314 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
315 @param Data Data value
316
317 @retval EFI_SUCCESS Success to excute I/O work flow
318 @retval EFI_TIMEOUT Keyboard controller time out.
319 **/
320 EFI_STATUS
321 Out8042Data (
322 IN EFI_ISA_IO_PROTOCOL *IsaIo,
323 IN UINT8 Data
324 );
325
326 /**
327 I/O work flow of outing 8042 Aux command.
328
329 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
330 @param Command Aux I/O command
331 @param Resend Whether need resend the Aux command.
332
333 @retval EFI_SUCCESS Success to excute I/O work flow
334 @retval EFI_TIMEOUT Keyboard controller time out.
335 **/
336 EFI_STATUS
337 Out8042AuxCommand (
338 IN EFI_ISA_IO_PROTOCOL *IsaIo,
339 IN UINT8 Command,
340 IN BOOLEAN Resend
341 );
342
343 /**
344 I/O work flow of in 8042 Aux data.
345
346 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
347 @param Data Buffer holding return value.
348
349 @retval EFI_SUCCESS Success to excute I/O work flow
350 @retval EFI_TIMEOUT Keyboard controller time out.
351 **/
352 EFI_STATUS
353 In8042AuxData (
354 IN EFI_ISA_IO_PROTOCOL *IsaIo,
355 IN OUT UINT8 *Data
356 );
357
358 /**
359 I/O work flow of outing 8042 Aux data.
360
361 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
362 @param Command Aux I/O command
363
364 @retval EFI_SUCCESS Success to excute I/O work flow
365 @retval EFI_TIMEOUT Keyboard controller time out.
366 **/
367 EFI_STATUS
368 Out8042AuxData (
369 IN EFI_ISA_IO_PROTOCOL *IsaIo,
370 IN UINT8 Data
371 );
372
373 /**
374 Check keyboard controller status, if it is output buffer full and for auxiliary device
375
376 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
377
378 @retval EFI_SUCCESS Keyboard controller is ready
379 @retval EFI_NOT_READY Keyboard controller is not ready
380 **/
381 EFI_STATUS
382 CheckForInput (
383 IN EFI_ISA_IO_PROTOCOL *IsaIo
384 );
385
386 /**
387 I/O work flow to wait input buffer empty in given time.
388
389 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
390 @param Timeout Wating time.
391
392 @retval EFI_TIMEOUT if input is still not empty in given time.
393 @retval EFI_SUCCESS input is empty.
394 **/
395 EFI_STATUS
396 WaitInputEmpty (
397 IN EFI_ISA_IO_PROTOCOL *IsaIo,
398 IN UINTN Timeout
399 );
400
401 /**
402 I/O work flow to wait output buffer full in given time.
403
404 @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL
405 @param Timeout given time
406
407 @retval EFI_TIMEOUT output is not full in given time
408 @retval EFI_SUCCESS output is full in given time.
409 **/
410 EFI_STATUS
411 WaitOutputFull (
412 IN EFI_ISA_IO_PROTOCOL *IsaIo,
413 IN UINTN Timeout
414 );
415
416 #endif // _COMMPS2_H_