| plan 9 kernel history: overview | file list | diff list |
1995/0223/pc/trap.c (diff list | history)
| 1995/0222/sys/src/9/pc/trap.c:259,265 – 1995/0223/sys/src/9/pc/trap.c:259,265 (short | long | prev | next) | ||
| 1991/1113 | char buf[ERRLEN]; | |
| 1993/0217 | Handler *h; | |
| 1993/1116 | static int iret_traps; | |
| 1995/0222 |
| |
| 1995/0223 | ushort isr; | |
| 1991/0703 | ||
| 1991/0731 | v = ur->trap; | |
| 1995/0222/sys/src/9/pc/trap.c:279,290 – 1995/0223/sys/src/9/pc/trap.c:279,290 | ||
| 1991/0801 | * off at this point) | |
| 1991/0709 | */ | |
| 1991/0731 | c = v&~0x7; | |
| 1995/0222 |
| |
| 1995/0223 | isr = 0; | |
| 1991/0731 | if(c==Int0vec || c==Int1vec){ | |
| 1995/0222 |
| |
| 1995/0223 | isr = inb(Int0ctl); | |
| 1993/0225 | outb(Int0ctl, EOI); | |
| 1995/0222 | if(c == Int1vec){ | |
| 1995/0223 | isr |= inb(Int1ctl)<<8; | |
| 1991/0731 | outb(Int1ctl, EOI); | |
| 1995/0222 | } | |
| 1991/1113 | } | |
| 1995/0222/sys/src/9/pc/trap.c:308,314 – 1995/0223/sys/src/9/pc/trap.c:308,314 | ||
| 1991/1113 | } } | |
| 1993/0224 |
| |
| 1995/0223 | if(v >= Int0vec && v < Int0vec+16){ | |
| 1994/0722 | /* an unknown interrupt */ | |
| 1993/0224 | v -= Int0vec; | |
| 1995/0222 | /* | |
| 1995/0222/sys/src/9/pc/trap.c:316,328 – 1995/0223/sys/src/9/pc/trap.c:316,329 | ||
| 1995/0222 | * the IRQ input goes away before the acknowledge. * In this case, a 'default IRQ7' is generated, but * the corresponding bit in the ISR isn't set. | |
| 1995/0223 | * In fact, just ignore all such interrupts. | |
| 1995/0222 | */ | |
| 1995/0223 | if((isr & (1<<v)) == 0) | |
| 1995/0222 | goto out; if(badintr[v]++ == 0 || (badintr[v]%100000) == 0){ | |
| 1993/0224 | print("unknown interrupt %d pc=0x%lux: total %d\n", v, ur->pc, badintr[v]); | |
| 1995/0222 |
| |
| 1995/0223 | print("isr = 0x%4.4ux\n", isr); | |
| 1995/0222 | } | |
| 1993/0224 | } else { /* unimplemented traps */ | |