Rev 4346 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4346 | Rev 4347 | ||
|---|---|---|---|
| Line 63... | Line 63... | ||
| 63 | #include <arch/syscall.h> |
63 | #include <arch/syscall.h> |
| 64 | #include <arch/debugger.h> |
64 | #include <arch/debugger.h> |
| 65 | #include <syscall/syscall.h> |
65 | #include <syscall/syscall.h> |
| 66 | #include <console/console.h> |
66 | #include <console/console.h> |
| 67 | #include <ddi/irq.h> |
67 | #include <ddi/irq.h> |
| 68 | #include <ddi/device.h> |
- | |
| 69 | #include <sysinfo/sysinfo.h> |
68 | #include <sysinfo/sysinfo.h> |
| 70 | 69 | ||
| 71 | /** Disable I/O on non-privileged levels |
70 | /** Disable I/O on non-privileged levels |
| 72 | * |
71 | * |
| 73 | * Clean IOPL(12,13) and NT(14) flags in EFLAGS register |
72 | * Clean IOPL(12,13) and NT(14) flags in EFLAGS register |
| Line 192... | Line 191... | ||
| 192 | } |
191 | } |
| 193 | 192 | ||
| 194 | void arch_post_smp_init(void) |
193 | void arch_post_smp_init(void) |
| 195 | { |
194 | { |
| 196 | #ifdef CONFIG_PC_KBD |
195 | #ifdef CONFIG_PC_KBD |
| 197 | devno_t devno = device_assign_devno(); |
- | |
| 198 | - | ||
| 199 | /* |
196 | /* |
| 200 | * Initialize the i8042 controller. Then initialize the keyboard |
197 | * Initialize the i8042 controller. Then initialize the keyboard |
| 201 | * module and connect it to i8042. Enable keyboard interrupts. |
198 | * module and connect it to i8042. Enable keyboard interrupts. |
| 202 | */ |
199 | */ |
| 203 | indev_t *kbrdin = i8042_init((i8042_t *) I8042_BASE, devno, IRQ_KBD); |
200 | indev_t *kbrdin = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD); |
| 204 | if (kbrdin) { |
201 | if (kbrdin) { |
| 205 | kbrd_init(kbrdin); |
202 | kbrd_init(kbrdin); |
| 206 | trap_virtual_enable_irqs(1 << IRQ_KBD); |
203 | trap_virtual_enable_irqs(1 << IRQ_KBD); |
| 207 | } |
204 | } |
| 208 | 205 | ||
| 209 | /* |
206 | /* |
| 210 | * This is the necessary evil until the userspace driver is entirely |
207 | * This is the necessary evil until the userspace driver is entirely |
| 211 | * self-sufficient. |
208 | * self-sufficient. |
| 212 | */ |
209 | */ |
| 213 | sysinfo_set_item_val("kbd", NULL, true); |
210 | sysinfo_set_item_val("kbd", NULL, true); |
| 214 | sysinfo_set_item_val("kbd.devno", NULL, devno); |
- | |
| 215 | sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD); |
211 | sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD); |
| 216 | sysinfo_set_item_val("kbd.address.physical", NULL, |
212 | sysinfo_set_item_val("kbd.address.physical", NULL, |
| 217 | (uintptr_t) I8042_BASE); |
213 | (uintptr_t) I8042_BASE); |
| 218 | sysinfo_set_item_val("kbd.address.kernel", NULL, |
214 | sysinfo_set_item_val("kbd.address.kernel", NULL, |
| 219 | (uintptr_t) I8042_BASE); |
215 | (uintptr_t) I8042_BASE); |