Rev 4347 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4347 | Rev 4348 | ||
---|---|---|---|
Line 78... | Line 78... | ||
78 | * @param mi Pointer to the multiboot information structure. |
78 | * @param mi Pointer to the multiboot information structure. |
79 | */ |
79 | */ |
80 | void arch_pre_main(uint32_t signature, const multiboot_info_t *mi) |
80 | void arch_pre_main(uint32_t signature, const multiboot_info_t *mi) |
81 | { |
81 | { |
82 | /* Parse multiboot information obtained from the bootloader. */ |
82 | /* Parse multiboot information obtained from the bootloader. */ |
83 | multiboot_info_parse(signature, mi); |
83 | multiboot_info_parse(signature, mi); |
84 | 84 | ||
85 | #ifdef CONFIG_SMP |
85 | #ifdef CONFIG_SMP |
86 | /* Copy AP bootstrap routines below 1 MB. */ |
86 | /* Copy AP bootstrap routines below 1 MB. */ |
87 | memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET, |
87 | memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET, |
88 | (size_t) &_hardcoded_unmapped_size); |
88 | (size_t) &_hardcoded_unmapped_size); |
Line 153... | Line 153... | ||
153 | #ifdef CONFIG_PC_KBD |
153 | #ifdef CONFIG_PC_KBD |
154 | /* |
154 | /* |
155 | * Initialize the i8042 controller. Then initialize the keyboard |
155 | * Initialize the i8042 controller. Then initialize the keyboard |
156 | * module and connect it to i8042. Enable keyboard interrupts. |
156 | * module and connect it to i8042. Enable keyboard interrupts. |
157 | */ |
157 | */ |
158 | indev_t *kbrdin = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD); |
158 | i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD); |
- | 159 | if (i8042_instance) { |
|
- | 160 | kbrd_instance_t *kbrd_instance = kbrd_init(); |
|
159 | if (kbrdin) { |
161 | if (kbrd_instance) { |
160 | kbrd_init(kbrdin); |
162 | indev_t *sink = stdin_wire(); |
- | 163 | indev_t *kbrd = kbrd_wire(kbrd_instance, sink); |
|
- | 164 | i8042_wire(i8042_instance, kbrd); |
|
161 | trap_virtual_enable_irqs(1 << IRQ_KBD); |
165 | trap_virtual_enable_irqs(1 << IRQ_KBD); |
- | 166 | } |
|
162 | } |
167 | } |
163 | 168 | ||
164 | /* |
169 | /* |
165 | * This is the necessary evil until the userspace driver is entirely |
170 | * This is the necessary evil until the userspace driver is entirely |
166 | * self-sufficient. |
171 | * self-sufficient. |
Line 235... | Line 240... | ||
235 | void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
240 | void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
236 | { |
241 | { |
237 | return addr; |
242 | return addr; |
238 | } |
243 | } |
239 | 244 | ||
- | 245 | void arch_reboot(void) |
|
- | 246 | { |
|
- | 247 | #ifdef CONFIG_PC_KBD |
|
- | 248 | i8042_cpu_reset((i8042_t *) I8042_BASE); |
|
- | 249 | #endif |
|
- | 250 | } |
|
- | 251 | ||
240 | /** @} |
252 | /** @} |
241 | */ |
253 | */ |