X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86%2Firq.c;h=5230f214dff3736d77e5bf5268d513a797be8dd3;hb=4d3dd7c8db773338df6cb33ebdd5113193a2a032;hp=0a195104c8a7dd094020ef9761d805baf9037171;hpb=759315c5321e354458086e0fc28335c4c12ed194;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86/irq.c b/KernelLand/Kernel/arch/x86/irq.c index 0a195104..5230f214 100644 --- a/KernelLand/Kernel/arch/x86/irq.c +++ b/KernelLand/Kernel/arch/x86/irq.c @@ -25,12 +25,12 @@ void *gaIRQ_DataPointers[16][MAX_CALLBACKS_PER_IRQ]; */ void IRQ_Handler(tRegs *Regs) { - int i, irq = Regs->int_num - 0xF0; + int irq = Regs->int_num - 0xF0; int bHandled = 0; //Log("IRQ_Handler: (Regs={int_num:%i})", Regs->int_num); - for( i = 0; i < MAX_CALLBACKS_PER_IRQ; i++ ) + for( int i = 0; i < MAX_CALLBACKS_PER_IRQ; i++ ) { if( gIRQ_Handlers[irq][i] ) { gIRQ_Handlers[irq][i](irq, gaIRQ_DataPointers[irq][i]); @@ -63,13 +63,20 @@ int IRQ_AddHandler( int Num, void (*Callback)(int, void*), void *Ptr ) { if( gIRQ_Handlers[Num][i] == NULL ) { - Log_Log("IRQ", "Added IRQ%i Cb#%i %p", Num, i, Callback); + //Log_Log("IRQ", "Added IRQ%i Cb#%i %p", Num, i, Callback); gIRQ_Handlers[Num][i] = Callback; gaIRQ_DataPointers[Num][i] = Ptr; - return 1; + return Num * MAX_CALLBACKS_PER_IRQ + i; } } Log_Warning("IRQ", "No free callbacks on IRQ%i", Num); - return 0; + return -1; +} + +void IRQ_RemHandler(int Handle) +{ + int Num = Handle / MAX_CALLBACKS_PER_IRQ; + int id = Handle % MAX_CALLBACKS_PER_IRQ; + gIRQ_Handlers[Num][id] = NULL; }