Rev 3659 | Rev 3763 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3659 | Rev 3661 | ||
---|---|---|---|
Line 117... | Line 117... | ||
117 | { |
117 | { |
118 | 118 | ||
119 | uint64_t IOSAPIC = PA2KA((unative_t)(iosapic_base))|FW_OFFSET; |
119 | uint64_t IOSAPIC = PA2KA((unative_t)(iosapic_base))|FW_OFFSET; |
120 | int i; |
120 | int i; |
121 | 121 | ||
- | 122 | int myid,myeid; |
|
122 | 123 | ||
- | 124 | myid=ia64_get_cpu_id(); |
|
- | 125 | myeid=ia64_get_cpu_eid(); |
|
- | 126 | ||
123 | for(i=0;i<16;i++) |
127 | for(i=0;i<16;i++) |
124 | { |
128 | { |
125 | 129 | ||
126 | if(i==2) continue; //Disable Cascade interrupt |
130 | if(i==2) continue; //Disable Cascade interrupt |
127 | ((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i; |
131 | ((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i; |
128 | srlz_d(); |
132 | srlz_d(); |
129 | ((uint32_t*)(IOSAPIC+0x10))[0]=LAGACY_INTERRUPT_BASE+i; |
133 | ((uint32_t*)(IOSAPIC+0x10))[0]=LAGACY_INTERRUPT_BASE+i; |
130 | srlz_d(); |
134 | srlz_d(); |
131 | ((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i+1; |
135 | ((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i+1; |
132 | srlz_d(); |
136 | srlz_d(); |
133 | ((uint32_t*)(IOSAPIC+0x10))[0]=1<<(56-32); |
137 | ((uint32_t*)(IOSAPIC+0x10))[0]=myid<<(56-32) | myeid<<(48-32); |
134 | srlz_d(); |
138 | srlz_d(); |
135 | } |
139 | } |
136 | 140 | ||
137 | } |
141 | } |
138 | 142 | ||
Line 167... | Line 171... | ||
167 | #define POLL_INTERVAL 50000 /* 50 ms */ |
171 | #define POLL_INTERVAL 50000 /* 50 ms */ |
168 | /** Kernel thread for polling keyboard. */ |
172 | /** Kernel thread for polling keyboard. */ |
169 | static void i8042_kkbdpoll(void *arg) |
173 | static void i8042_kkbdpoll(void *arg) |
170 | { |
174 | { |
171 | while (1) { |
175 | while (1) { |
172 | i8042_poll(); |
- | |
173 | #ifdef CONFIG_NS16550 |
176 | #ifdef CONFIG_NS16550 |
174 | #ifndef CONFIG_NS16550_INTERRUPT_DRIVEN |
177 | #ifndef CONFIG_NS16550_INTERRUPT_DRIVEN |
175 | ns16550_poll(); |
178 | ns16550_poll(); |
176 | #endif |
179 | #endif |
- | 180 | #else |
|
- | 181 | #ifndef CONFIG_I8042_INTERRUPT_DRIVEN |
|
- | 182 | i8042_poll(); |
|
- | 183 | #endif |
|
177 | #endif |
184 | #endif |
178 | thread_usleep(POLL_INTERVAL); |
185 | thread_usleep(POLL_INTERVAL); |
179 | } |
186 | } |
180 | } |
187 | } |
181 | #endif |
188 | #endif |
182 | 189 | ||
183 | 190 | ||
- | 191 | void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused))); |
|
184 | static void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused))) |
192 | void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused))) |
185 | { |
193 | { |
186 | return; |
194 | return; |
187 | } |
195 | } |
188 | 196 | ||
189 | 197 | ||
Line 202... | Line 210... | ||
202 | thread_ready(t); |
210 | thread_ready(t); |
203 | #endif |
211 | #endif |
204 | 212 | ||
205 | #ifdef I460GX |
213 | #ifdef I460GX |
206 | devno_t kbd = device_assign_devno(); |
214 | devno_t kbd = device_assign_devno(); |
207 | devno_t mouse = device_assign_devno(); |
- | |
208 | /* keyboard controller */ |
215 | /* keyboard controller */ |
209 | i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE); |
- | |
210 | 216 | ||
211 | #ifdef CONFIG_NS16550 |
217 | #ifdef CONFIG_NS16550 |
212 | ns16550_init(kbd, NS16550_PORT, NS16550_IRQ,end_of_irq_void,NULL); // as a COM 1 |
218 | ns16550_init(kbd, NS16550_PORT, NS16550_IRQ,end_of_irq_void,NULL); // as a COM 1 |
213 | #else |
219 | #else |
- | 220 | devno_t mouse = device_assign_devno(); |
|
- | 221 | i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE); |
|
214 | #endif |
222 | #endif |
215 | thread_t *t; |
223 | thread_t *t; |
216 | t = thread_create(i8042_kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); |
224 | t = thread_create(i8042_kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); |
217 | if (!t) |
225 | if (!t) |
218 | panic("cannot create kkbdpoll\n"); |
226 | panic("cannot create kkbdpoll\n"); |
Line 278... | Line 286... | ||
278 | void arch_grab_console(void) |
286 | void arch_grab_console(void) |
279 | { |
287 | { |
280 | #ifdef SKI |
288 | #ifdef SKI |
281 | ski_kbd_grab(); |
289 | ski_kbd_grab(); |
282 | #else |
290 | #else |
283 | i8042_grab(); |
- | |
284 | #ifdef CONFIG_NS16550 |
291 | #ifdef CONFIG_NS16550 |
285 | ns16550_grab(); |
292 | ns16550_grab(); |
- | 293 | #else |
|
- | 294 | i8042_grab(); |
|
286 | #endif |
295 | #endif |
287 | - | ||
288 | #endif |
296 | #endif |
289 | } |
297 | } |
290 | /** Return console to userspace |
298 | /** Return console to userspace |
291 | * |
299 | * |
292 | */ |
300 | */ |
293 | void arch_release_console(void) |
301 | void arch_release_console(void) |
294 | { |
302 | { |
295 | #ifdef SKI |
303 | #ifdef SKI |
296 | ski_kbd_release(); |
304 | ski_kbd_release(); |
297 | i8042_release(); |
- | |
298 | #else |
305 | #else |
299 | #ifdef CONFIG_NS16550 |
306 | #ifdef CONFIG_NS16550 |
300 | ns16550_release(); |
307 | ns16550_release(); |
- | 308 | #else |
|
- | 309 | i8042_release(); |
|
301 | #endif |
310 | #endif |
302 | 311 | ||
303 | #endif |
312 | #endif |
304 | } |
313 | } |
305 | 314 |