Change order of sending EOI to PIC, works with -enable-kvm now
This commit is contained in:
@ -19,14 +19,14 @@
|
||||
|
||||
typedef struct IntrHandler {
|
||||
struct IntrHandler *next;
|
||||
int (*fn)(IntrStackFrame *frame);
|
||||
void (*fn)(IntrStackFrame *frame);
|
||||
int irq;
|
||||
} IntrHandler;
|
||||
|
||||
IntrHandler *INTR_HANDLERS = NULL;
|
||||
SpinLock INTR_HANDLERS_SPINLOCK;
|
||||
|
||||
void intr_attchhandler(int (*fn)(IntrStackFrame *frame), int irq) {
|
||||
void intr_attchhandler(void (*fn)(IntrStackFrame *frame), int irq) {
|
||||
IntrHandler *ih = dlmalloc(sizeof(*ih));
|
||||
ih->fn = fn;
|
||||
ih->irq = irq;
|
||||
@ -246,13 +246,13 @@ void intr_handleintr(IntrStackFrame *frame) {
|
||||
cpu_hang();
|
||||
}
|
||||
} else if (frame->trapnum >= 32 && frame->trapnum <= 47) {
|
||||
intr_pic_eoi();
|
||||
IntrHandler *ih, *ihtmp;
|
||||
LL_FOREACH_SAFE(INTR_HANDLERS, ih, ihtmp) {
|
||||
if ((uint64_t)ih->irq == frame->trapnum) {
|
||||
ih->fn(frame);
|
||||
}
|
||||
}
|
||||
intr_pic_eoi();
|
||||
} else if (frame->trapnum == 0x80) {
|
||||
intr_syscalldispatch(frame);
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ typedef struct {
|
||||
uint64_t ss;
|
||||
} PACKED IntrStackFrame;
|
||||
|
||||
void intr_attchhandler(int (*fn)(IntrStackFrame *frame), int irq);
|
||||
void intr_attchhandler(void (*fn)(IntrStackFrame *frame), int irq);
|
||||
int32_t intr_dttchhandler(int irq);
|
||||
void intr_disable(void);
|
||||
void intr_enable(void);
|
||||
|
||||
@ -31,9 +31,8 @@ void intr_pit_wait(uint32_t ms) {
|
||||
while (PIT_TICKS - now < ms);
|
||||
}
|
||||
|
||||
int intr_pit_intr(IntrStackFrame *frame) {
|
||||
void intr_pit_intr(IntrStackFrame *frame) {
|
||||
PIT_TICKS++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void intr_pit_init(void) {
|
||||
|
||||
Reference in New Issue
Block a user