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