git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Kernel/x86 - Disabled task tracing
[tpg/acess2.git]
/
Kernel
/
arch
/
x86
/
irq.c
diff --git
a/Kernel/arch/x86/irq.c
b/Kernel/arch/x86/irq.c
index
7e56597
..
381b157
100644
(file)
--- a/
Kernel/arch/x86/irq.c
+++ b/
Kernel/arch/x86/irq.c
@@
-2,14
+2,18
@@
* AcessOS Microkernel Version
* irq.c
*/
* AcessOS Microkernel Version
* irq.c
*/
-#include <
common
.h>
+#include <
acess
.h>
// === CONSTANTS ===
#define MAX_CALLBACKS_PER_IRQ 4
// === CONSTANTS ===
#define MAX_CALLBACKS_PER_IRQ 4
+#define TRACE_IRQS 0
// === TYPES ===
typedef void (*tIRQ_Callback)(int);
// === TYPES ===
typedef void (*tIRQ_Callback)(int);
+// === PROTOTYPES ===
+void IRQ_Handler(tRegs *Regs);
+
// === GLOBALS ===
tIRQ_Callback gIRQ_Handlers[16][MAX_CALLBACKS_PER_IRQ];
// === GLOBALS ===
tIRQ_Callback gIRQ_Handlers[16][MAX_CALLBACKS_PER_IRQ];
@@
-21,18
+25,22
@@
tIRQ_Callback gIRQ_Handlers[16][MAX_CALLBACKS_PER_IRQ];
void IRQ_Handler(tRegs *Regs)
{
int i;
void IRQ_Handler(tRegs *Regs)
{
int i;
-
+
Regs->int_num -= 0xF0; // Adjust
Regs->int_num -= 0xF0; // Adjust
-
+
//Log("IRQ_Handler: (Regs={int_num:%i})", Regs->int_num);
//Log("IRQ_Handler: (Regs={int_num:%i})", Regs->int_num);
-
+
for( i = 0; i < MAX_CALLBACKS_PER_IRQ; i++ )
{
for( i = 0; i < MAX_CALLBACKS_PER_IRQ; i++ )
{
- //Log(" IRQ_Handler: Call %p", gIRQ_Handlers[Regs->int_num][i]);
- if( gIRQ_Handlers[Regs->int_num][i] )
+ if( gIRQ_Handlers[Regs->int_num][i] ) {
gIRQ_Handlers[Regs->int_num][i](Regs->int_num);
gIRQ_Handlers[Regs->int_num][i](Regs->int_num);
+ #if TRACE_IRQS
+ if( Regs->int_num != 8 )
+ Log("IRQ %i: Call %p", Regs->int_num, gIRQ_Handlers[Regs->int_num][i]);
+ #endif
+ }
}
}
-
+
//Log(" IRQ_Handler: Resetting");
if(Regs->int_num >= 8)
outb(0xA0, 0x20); // ACK IRQ (Secondary PIC)
//Log(" IRQ_Handler: Resetting");
if(Regs->int_num >= 8)
outb(0xA0, 0x20); // ACK IRQ (Secondary PIC)
@@
-49,10
+57,12
@@
int IRQ_AddHandler( int Num, void (*Callback)(int) )
for( i = 0; i < MAX_CALLBACKS_PER_IRQ; i++ )
{
if( gIRQ_Handlers[Num][i] == NULL ) {
for( i = 0; i < MAX_CALLBACKS_PER_IRQ; i++ )
{
if( gIRQ_Handlers[Num][i] == NULL ) {
+ Log_Log("IRQ", "Added IRQ%i Cb#%i %p", Num, i, Callback);
gIRQ_Handlers[Num][i] = Callback;
return 1;
}
}
gIRQ_Handlers[Num][i] = Callback;
return 1;
}
}
-
+
+ Log_Warning("IRQ", "No free callbacks on IRQ%i", Num);
return 0;
}
return 0;
}
UCC
git Repository :: git.ucc.asn.au