Changeset 323a5aaf in mainline for kernel/arch/ia64/src
- Timestamp:
- 2008-11-30T12:17:56Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0ad9e47
- Parents:
- 57e76cb
- Location:
- kernel/arch/ia64/src
- Files:
-
- 4 edited
-
drivers/ega.c (modified) (1 diff)
-
ia64.c (modified) (9 diffs)
-
interrupt.c (modified) (4 diffs)
-
ski/ski.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/drivers/ega.c
r57e76cb r323a5aaf 95 95 sysinfo_set_item_val("fb.width", NULL, ROW); 96 96 sysinfo_set_item_val("fb.height", NULL, ROWS); 97 sysinfo_set_item_val("fb.blinking", NULL, true); 97 98 sysinfo_set_item_val("fb.address.physical", NULL, VIDEORAM & 0xffffffff); 98 99 -
kernel/arch/ia64/src/ia64.c
r57e76cb r323a5aaf 64 64 65 65 /*NS16550 as a COM 1*/ 66 #define NS16550_IRQ 466 #define NS16550_IRQ (4+LAGACY_INTERRUPT_BASE) 67 67 #define NS16550_PORT 0x3f8 68 68 69 69 bootinfo_t *bootinfo; 70 71 static uint64_t iosapic_base=0xfec00000; 70 72 71 73 void arch_pre_main(void) … … 112 114 } 113 115 116 static void iosapic_init(void) 117 { 118 119 uint64_t IOSAPIC = PA2KA((unative_t)(iosapic_base))|FW_OFFSET; 120 int i; 121 122 123 for(i=0;i<16;i++) 124 { 125 126 if(i==2) continue; //Disable Cascade interrupt 127 ((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i; 128 srlz_d(); 129 ((uint32_t*)(IOSAPIC+0x10))[0]=LAGACY_INTERRUPT_BASE+i; 130 srlz_d(); 131 ((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i+1; 132 srlz_d(); 133 ((uint32_t*)(IOSAPIC+0x10))[0]=1<<(56-32); 134 srlz_d(); 135 } 136 137 } 138 139 114 140 void arch_post_mm_init(void) 115 141 { 116 142 if(config.cpu_active==1) 117 143 { 144 iosapic_init(); 145 118 146 irq_init(INR_COUNT, INR_COUNT); 119 147 #ifdef SKI … … 123 151 #endif 124 152 } 125 it_init(); 153 it_init(); 154 126 155 } 127 156 … … 143 172 i8042_poll(); 144 173 #ifdef CONFIG_NS16550 174 #ifndef CONFIG_NS16550_INTERRUPT_DRIVEN 145 175 ns16550_poll(); 176 #endif 146 177 #endif 147 178 thread_usleep(POLL_INTERVAL); … … 149 180 } 150 181 #endif 182 183 184 static void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused))) 185 { 186 return; 187 } 188 151 189 152 190 void arch_post_smp_init(void) … … 172 210 173 211 #ifdef CONFIG_NS16550 174 ns16550_init(kbd, NS16550_IRQ, NS16550_PORT ); // as a COM 1212 ns16550_init(kbd, NS16550_IRQ, NS16550_PORT,end_of_irq_void,NULL); // as a COM 1 175 213 #else 176 214 #endif … … 188 226 sysinfo_set_item_val("ia64_iospace.address", NULL, true); 189 227 sysinfo_set_item_val("ia64_iospace.address.virtual", NULL, IO_OFFSET); 228 229 230 231 190 232 191 233 } … … 238 280 #ifdef SKI 239 281 ski_kbd_grab(); 282 #else 283 i8042_grab(); 284 #ifdef CONFIG_NS16550 285 ns16550_grab(); 286 #endif 287 240 288 #endif 241 289 } … … 247 295 #ifdef SKI 248 296 ski_kbd_release(); 297 i8042_release(); 298 #else 299 #ifdef CONFIG_NS16550 300 ns16550_release(); 301 #endif 302 249 303 #endif 250 304 } -
kernel/arch/ia64/src/interrupt.c
r57e76cb r323a5aaf 236 236 } 237 237 238 static void end_of_local_irq( )238 static void end_of_local_irq(void) 239 239 { 240 240 asm volatile ("mov cr.eoi=r0;;"); … … 244 244 void external_interrupt(uint64_t vector, istate_t *istate) 245 245 { 246 irq_t *irq;247 246 cr_ivr_t ivr; 248 247 … … 250 249 srlz_d(); 251 250 252 irq = irq_dispatch_and_lock(ivr.vector);253 if (irq) {254 irq->handler(irq, irq->arg);255 spinlock_unlock(&irq->lock);256 } else {257 251 switch (ivr.vector) { 258 252 case INTERRUPT_SPURIOUS: … … 271 265 272 266 default: 273 panic("\nUnhandled External Interrupt Vector %d\n", 274 ivr.vector); 267 { 268 269 int ack=false; 270 irq_t *irq = irq_dispatch_and_lock(ivr.vector); 271 if (irq) { 272 /* 273 * The IRQ handler was found. 274 */ 275 276 if (irq->preack) { 277 /* Send EOI before processing the interrupt */ 278 end_of_local_irq(); 279 ack=true; 280 } 281 irq->handler(irq, irq->arg); 282 spinlock_unlock(&irq->lock); 283 } else { 284 /* 285 * Unhandled interrupt. 286 */ 287 end_of_local_irq(); 288 ack=true; 289 #ifdef CONFIG_DEBUG 290 printf("\nUnhandled External Interrupt Vector %d\n",ivr.vector); 291 #endif 292 } 293 if(!ack) end_of_local_irq(); 294 295 } 296 297 275 298 break; 276 299 } 277 }278 300 } 279 301 -
kernel/arch/ia64/src/ski/ski.c
r57e76cb r323a5aaf 45 45 #include <synch/spinlock.h> 46 46 #include <arch/asm.h> 47 #include <drivers/kbd.h> 47 48 48 49 #define SKI_KBD_INR 0 … … 228 229 sysinfo_set_item_val("kbd.inr", NULL, SKI_KBD_INR); 229 230 sysinfo_set_item_val("kbd.devno", NULL, ski_kbd_devno); 231 sysinfo_set_item_val("kbd.type", NULL, KBD_SKI); 230 232 } 231 233
Note:
See TracChangeset
for help on using the changeset viewer.
