#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <sys/kassert.h>
#include <sys/kdebug.h>
#include <sys/irq.h>
#include <machine/amd64.h>
#include <machine/amd64op.h>
#include "../console.h"
#include "ps2.h"
Go to the source code of this file.
◆ KS_ALT
Definition at line 44 of file ps2.c.
◆ KS_CAPSLOCK
Definition at line 46 of file ps2.c.
◆ KS_CONTROL
Definition at line 45 of file ps2.c.
◆ KS_E0ESCAPE
Definition at line 49 of file ps2.c.
◆ KS_NUMLOCK
Definition at line 47 of file ps2.c.
◆ KS_SCROLLLOCK
#define KS_SCROLLLOCK 0x20 |
Definition at line 48 of file ps2.c.
◆ KS_SHIFT
Definition at line 43 of file ps2.c.
◆ PS2_COMMAND_AUXDISABLE
#define PS2_COMMAND_AUXDISABLE 0xA7 /* Disable Auxiliary */ |
Definition at line 26 of file ps2.c.
◆ PS2_COMMAND_AUXENABLE
#define PS2_COMMAND_AUXENABLE 0xA8 /* Enable Auxiliary */ |
Definition at line 27 of file ps2.c.
◆ PS2_COMMAND_KBDDISABLE
#define PS2_COMMAND_KBDDISABLE 0xAD /* Disable Keyboard */ |
Definition at line 29 of file ps2.c.
◆ PS2_COMMAND_KBDENABLE
#define PS2_COMMAND_KBDENABLE 0xAE /* Enable Keyboard */ |
Definition at line 30 of file ps2.c.
◆ PS2_COMMAND_PORT
#define PS2_COMMAND_PORT 0x64 |
Definition at line 18 of file ps2.c.
◆ PS2_COMMAND_SELFTEST
#define PS2_COMMAND_SELFTEST 0xAA /* Test Controller */ |
Definition at line 28 of file ps2.c.
◆ PS2_DATA_PORT
#define PS2_DATA_PORT 0x60 |
Definition at line 19 of file ps2.c.
◆ PS2_KBD_RESET
#define PS2_KBD_RESET 0xFF /* Reset */ |
Definition at line 33 of file ps2.c.
◆ PS2_KBD_RESETDONE
#define PS2_KBD_RESETDONE 0xAA /* Reset Done */ |
Definition at line 37 of file ps2.c.
◆ PS2_KBD_SETLED
#define PS2_KBD_SETLED 0xED /* Set LED */ |
Definition at line 34 of file ps2.c.
◆ PS2_STATUS_IBS
#define PS2_STATUS_IBS 0x02 /* Output Buffer Full */ |
Definition at line 23 of file ps2.c.
◆ PS2_STATUS_OBS
#define PS2_STATUS_OBS 0x01 /* Input Buffer Ready */ |
Definition at line 22 of file ps2.c.
◆ PS2_STATUS_PORT
#define PS2_STATUS_PORT 0x64 |
Definition at line 17 of file ps2.c.
◆ PS2_Init()
Definition at line 274 of file ps2.c.
275{
277
279
281
282 while (1) {
285 break;
286
288 }
289
290
294 if (data != 0x55)
295 kprintf(
"PS2: Controller test failed\n");
296
298
305
308}
static INLINE uint8_t inb(uint16_t port)
static INLINE void outb(uint16_t port, uint8_t data)
void IRQ_Register(int irq, struct IRQHandler *h)
int kprintf(const char *fmt,...)
#define PS2_COMMAND_KBDDISABLE
static void PS2_MouseIntr(void *arg)
static IRQHandler psmHandler
#define PS2_COMMAND_KBDENABLE
#define PS2_COMMAND_SELFTEST
static IRQHandler kbdHandler
static void PS2_KeyboardIntr(void *arg)
◆ PS2_KeyboardIntr()
static void PS2_KeyboardIntr |
( |
void * |
arg | ) |
|
|
static |
Definition at line 167 of file ps2.c.
168{
172
173 while (1) {
176 return;
177
179
180
181 if (data == 0xE0) {
183 continue;
184 }
185
186
187 if (data & 0x80) {
188 if (data == 0xAA || data == 0xB6)
190 if (data == 0x9D)
192 if (data == 0x38)
194
195
196 continue;
197 }
198
199
200 if (data == 0x2A || data == 0x36)
202 if (data == 0x1D)
204 if (data == 0x38)
206
207
208 if (data == 0x3A)
210 if (data == 0x45)
212 if (data == 0x46)
214
215
218
219
220 continue;
221 }
222
223
225
226 if (data == 0x0E)
228
229
230 }
231
232 int isShift = 0;
234 isShift = 1;
236 isShift ^= 1;
237
240 } else if (isShift) {
242 } else {
244 }
245
246 if (key == 0x00)
247 continue;
248
249
251
252 continue;
253 }
254}
static INLINE void breakpoint()
void Console_EnqueueKey(char key)
static uint8_t controlKeyMap[256]
static uint8_t shiftKeyMap[256]
static uint8_t keyMap[256]
◆ PS2_MouseIntr()
static void PS2_MouseIntr |
( |
void * |
arg | ) |
|
|
static |
◆ PS2Wait()
Definition at line 262 of file ps2.c.
263{
265
266 while (1) {
269 return;
270 }
271}
◆ controlKeyMap
◆ kbdHandler
Definition at line 39 of file ps2.c.
◆ keyMap
Definition at line 52 of file ps2.c.
◆ keyState
Definition at line 50 of file ps2.c.
◆ psmHandler
Definition at line 40 of file ps2.c.
◆ shiftKeyMap
Definition at line 90 of file ps2.c.