Rev 575 | Rev 588 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 575 | Rev 576 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | #include <synch/spinlock.h> |
36 | #include <synch/spinlock.h> |
37 | #include <typedefs.h> |
37 | #include <typedefs.h> |
38 | #include <console/chardev.h> |
38 | #include <console/chardev.h> |
39 | #include <console/console.h> |
39 | #include <console/console.h> |
40 | #include <macros.h> |
40 | #include <macros.h> |
- | 41 | #include <interrupt.h> |
|
41 | 42 | ||
42 | /** |
43 | /** |
43 | * i8042 processor driver. |
44 | * i8042 processor driver. |
44 | * It takes care of low-level keyboard functions. |
45 | * It takes care of low-level keyboard functions. |
45 | */ |
46 | */ |
Line 233... | Line 234... | ||
233 | SPECIAL, /* 0x7d */ |
234 | SPECIAL, /* 0x7d */ |
234 | SPECIAL, /* 0x7e */ |
235 | SPECIAL, /* 0x7e */ |
235 | SPECIAL, /* 0x7f */ |
236 | SPECIAL, /* 0x7f */ |
236 | }; |
237 | }; |
237 | 238 | ||
- | 239 | static void i8042_interrupt(int n, void *stack); |
|
- | 240 | ||
238 | /** Initialize i8042. */ |
241 | /** Initialize i8042. */ |
239 | void i8042_init(void) |
242 | void i8042_init(void) |
240 | { |
243 | { |
241 | trap_register(VECTOR_KBD, i8042_interrupt); |
244 | exc_register(VECTOR_KBD, "i8042_interrupt", i8042_interrupt); |
242 | trap_virtual_enable_irqs(1<<IRQ_KBD); |
245 | trap_virtual_enable_irqs(1<<IRQ_KBD); |
243 | spinlock_initialize(&keylock, "i8042_lock"); |
246 | spinlock_initialize(&keylock, "i8042_lock"); |
244 | chardev_initialize("i8042_kbd", &kbrd, &ops); |
247 | chardev_initialize("i8042_kbd", &kbrd, &ops); |
245 | stdin = &kbrd; |
248 | stdin = &kbrd; |
246 | } |
249 | } |
Line 248... | Line 251... | ||
248 | /** Process i8042 interrupt. |
251 | /** Process i8042 interrupt. |
249 | * |
252 | * |
250 | * @param n Interrupt vector. |
253 | * @param n Interrupt vector. |
251 | * @param stack Interrupted stack. |
254 | * @param stack Interrupted stack. |
252 | */ |
255 | */ |
253 | void i8042_interrupt(__u8 n, __native stack[]) |
256 | void i8042_interrupt(int n, void *stack) |
254 | { |
257 | { |
255 | __u8 x; |
258 | __u8 x; |
256 | 259 | ||
257 | trap_virtual_eoi(); |
260 | trap_virtual_eoi(); |
258 | x = inb(i8042_DATA); |
261 | x = inb(i8042_DATA); |