Rev 1196 | Rev 1708 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1196 | Rev 1474 | ||
---|---|---|---|
Line 265... | Line 265... | ||
265 | }; |
265 | }; |
266 | 266 | ||
267 | static void i8042_interrupt(int n, istate_t *istate); |
267 | static void i8042_interrupt(int n, istate_t *istate); |
268 | static void i8042_wait(void); |
268 | static void i8042_wait(void); |
269 | 269 | ||
270 | /** Initialize i8042. */ |
270 | static iroutine oldvector; |
- | 271 | /** Initialize keyboard and service interrupts using kernel routine */ |
|
271 | void i8042_init(void) |
272 | void i8042_grab(void) |
272 | { |
273 | { |
273 | int i; |
- | |
274 | - | ||
275 | exc_register(VECTOR_KBD, "i8042_interrupt", (iroutine) i8042_interrupt); |
274 | oldvector = exc_register(VECTOR_KBD, "i8042_interrupt", (iroutine) i8042_interrupt); |
276 | i8042_wait(); |
275 | i8042_wait(); |
277 | i8042_command_write(i8042_SET_COMMAND); |
276 | i8042_command_write(i8042_SET_COMMAND); |
278 | i8042_wait(); |
277 | i8042_wait(); |
279 | i8042_data_write(i8042_COMMAND); |
278 | i8042_data_write(i8042_COMMAND); |
280 | i8042_wait(); |
279 | i8042_wait(); |
- | 280 | } |
|
- | 281 | /** Resume the former interrupt vector */ |
|
- | 282 | void i8042_release(void) |
|
- | 283 | { |
|
- | 284 | if (oldvector) |
|
- | 285 | exc_register(VECTOR_KBD, "user_interrupt", oldvector); |
|
- | 286 | } |
|
- | 287 | ||
- | 288 | /** Initialize i8042. */ |
|
- | 289 | void i8042_init(void) |
|
- | 290 | { |
|
- | 291 | int i; |
|
- | 292 | ||
- | 293 | i8042_grab(); |
|
- | 294 | /* Prevent user from accidentaly releasing calling i8042_resume |
|
- | 295 | * and disabling keyboard |
|
- | 296 | */ |
|
- | 297 | oldvector = NULL; |
|
281 | 298 | ||
282 | trap_virtual_enable_irqs(1<<IRQ_KBD); |
299 | trap_virtual_enable_irqs(1<<IRQ_KBD); |
283 | chardev_initialize("i8042_kbd", &kbrd, &ops); |
300 | chardev_initialize("i8042_kbd", &kbrd, &ops); |
284 | stdin = &kbrd; |
301 | stdin = &kbrd; |
285 | 302 |