Rev 2787 | Rev 3675 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2787 | Rev 3597 | ||
---|---|---|---|
Line 52... | Line 52... | ||
52 | #include <ddi/irq.h> |
52 | #include <ddi/irq.h> |
53 | #include <ddi/device.h> |
53 | #include <ddi/device.h> |
54 | #include <arch/drivers/ega.h> |
54 | #include <arch/drivers/ega.h> |
55 | #include <arch/bootinfo.h> |
55 | #include <arch/bootinfo.h> |
56 | #include <genarch/kbd/i8042.h> |
56 | #include <genarch/kbd/i8042.h> |
- | 57 | #include <genarch/kbd/ns16550.h> |
|
- | 58 | #include <smp/smp.h> |
|
- | 59 | #include <smp/ipi.h> |
|
- | 60 | #include <arch/atomic.h> |
|
- | 61 | #include <panic.h> |
|
- | 62 | #include <print.h> |
|
- | 63 | ||
- | 64 | /*NS16550 as a COM 1*/ |
|
- | 65 | #define NS16550_IRQ 4 |
|
- | 66 | #define NS16550_PORT 0x3f8 |
|
57 | 67 | ||
58 | bootinfo_t *bootinfo; |
68 | bootinfo_t *bootinfo; |
59 | 69 | ||
60 | void arch_pre_main(void) |
70 | void arch_pre_main(void) |
61 | { |
71 | { |
Line 100... | Line 110... | ||
100 | 110 | ||
101 | } |
111 | } |
102 | 112 | ||
103 | void arch_post_mm_init(void) |
113 | void arch_post_mm_init(void) |
104 | { |
114 | { |
- | 115 | if(config.cpu_active==1) |
|
- | 116 | { |
|
105 | irq_init(INR_COUNT, INR_COUNT); |
117 | irq_init(INR_COUNT, INR_COUNT); |
106 | #ifdef SKI |
118 | #ifdef SKI |
107 | ski_init_console(); |
119 | ski_init_console(); |
108 | #else |
120 | #else |
109 | ega_init(); |
121 | ega_init(); |
110 | #endif |
122 | #endif |
- | 123 | } |
|
111 | it_init(); |
124 | it_init(); |
112 | } |
125 | } |
113 | 126 | ||
114 | void arch_post_cpu_init(void) |
127 | void arch_post_cpu_init(void) |
115 | { |
128 | { |
Line 125... | Line 138... | ||
125 | /** Kernel thread for polling keyboard. */ |
138 | /** Kernel thread for polling keyboard. */ |
126 | static void i8042_kkbdpoll(void *arg) |
139 | static void i8042_kkbdpoll(void *arg) |
127 | { |
140 | { |
128 | while (1) { |
141 | while (1) { |
129 | i8042_poll(); |
142 | i8042_poll(); |
- | 143 | #ifdef CONFIG_NS16550 |
|
- | 144 | ns16550_poll(); |
|
- | 145 | #endif |
|
130 | thread_usleep(POLL_INTERVAL); |
146 | thread_usleep(POLL_INTERVAL); |
131 | } |
147 | } |
132 | } |
148 | } |
133 | #endif |
149 | #endif |
134 | 150 | ||
135 | void arch_post_smp_init(void) |
151 | void arch_post_smp_init(void) |
136 | { |
152 | { |
137 | 153 | ||
138 | if (config.cpu_active == 1) { |
154 | { |
139 | /* |
155 | /* |
140 | * Create thread that polls keyboard. |
156 | * Create thread that polls keyboard. |
141 | */ |
157 | */ |
142 | #ifdef SKI |
158 | #ifdef SKI |
143 | thread_t *t; |
159 | thread_t *t; |
Line 151... | Line 167... | ||
151 | devno_t kbd = device_assign_devno(); |
167 | devno_t kbd = device_assign_devno(); |
152 | devno_t mouse = device_assign_devno(); |
168 | devno_t mouse = device_assign_devno(); |
153 | /* keyboard controller */ |
169 | /* keyboard controller */ |
154 | i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE); |
170 | i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE); |
155 | 171 | ||
- | 172 | #ifdef CONFIG_NS16550 |
|
- | 173 | ns16550_init(kbd, NS16550_IRQ, NS16550_PORT); // as a COM 1 |
|
- | 174 | #else |
|
- | 175 | #endif |
|
156 | thread_t *t; |
176 | thread_t *t; |
157 | t = thread_create(i8042_kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); |
177 | t = thread_create(i8042_kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); |
158 | if (!t) |
178 | if (!t) |
159 | panic("cannot create kkbdpoll\n"); |
179 | panic("cannot create kkbdpoll\n"); |
160 | thread_ready(t); |
180 | thread_ready(t); |
Line 162... | Line 182... | ||
162 | #endif |
182 | #endif |
163 | 183 | ||
164 | } |
184 | } |
165 | } |
185 | } |
166 | 186 | ||
- | 187 | ||
167 | /** Enter userspace and never return. */ |
188 | /** Enter userspace and never return. */ |
168 | void userspace(uspace_arg_t *kernel_uarg) |
189 | void userspace(uspace_arg_t *kernel_uarg) |
169 | { |
190 | { |
170 | psr_t psr; |
191 | psr_t psr; |
171 | rsc_t rsc; |
192 | rsc_t rsc; |
Line 222... | Line 243... | ||
222 | #endif |
243 | #endif |
223 | } |
244 | } |
224 | 245 | ||
225 | void arch_reboot(void) |
246 | void arch_reboot(void) |
226 | { |
247 | { |
227 | // TODO |
248 | outb(0x64,0xfe); |
228 | while (1); |
249 | while (1); |
229 | } |
250 | } |
230 | 251 | ||
231 | /** @} |
252 | /** @} |
232 | */ |
253 | */ |