Simplified the definition of the interrupt handlers for non smp
machines.
Modified: trunk/reactos/ntoskrnl/ke/i386/irqhand.s
_____
Modified: trunk/reactos/ntoskrnl/ke/i386/irqhand.s
--- trunk/reactos/ntoskrnl/ke/i386/irqhand.s 2006-01-02 18:03:19 UTC
(rev 20531)
+++ trunk/reactos/ntoskrnl/ke/i386/irqhand.s 2006-01-02 18:34:31 UTC
(rev 20532)
@@ -1,6 +1,31 @@
#include <ndk/asm.h>
#include <../hal/halx86/include/halirq.h>
+_KiCommonInterrupt:
+ cld
+ pushl %ds
+ pushl %es
+ pushl %fs
+ pushl %gs
+ pushl $0xceafbeef
+ movl $KGDT_R0_DATA,%eax
+ movl %eax,%ds
+ movl %eax,%es
+ movl %eax,%gs
+ movl $KGDT_R0_PCR,%eax
+ movl %eax,%fs
+ pushl %esp
+ pushl %ebx
+ call _KiInterruptDispatch
+ addl $0xC, %esp
+ popl %gs
+ popl %fs
+ popl %es
+ popl %ds
+ popa
+ iret
+
+
#ifdef CONFIG_SMP
#define BUILD_INTERRUPT_HANDLER(intnum) \
@@ -21,31 +46,6 @@
B(x,8) B(x,9) B(x,A) B(x,B) \
B(x,C) B(x,D) B(x,E) B(x,F)
-_KiCommonInterrupt:
- cld
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movl $KGDT_R0_DATA,%eax
- movl %eax,%ds
- movl %eax,%es
- movl %eax,%gs
- movl $KGDT_R0_PCR,%eax
- movl %eax,%fs
- pushl %esp
- pushl %ebx
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
B16(3) B16(4) B16(5) B16(6)
B16(7) B16(8) B16(9) B16(A)
B16(B) B16(C) B16(D) B16(E)
@@ -53,441 +53,30 @@
#undef B
#undef B16
+#undef BUILD_INTERRUPT_HANDLER
#else /* CONFIG_SMP */
-.global _irq_handler_0
-_irq_handler_0:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 0)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
+#define BUILD_INTERRUPT_HANDLER(intnum) \
+ .global _irq_handler_##intnum; \
+ _irq_handler_##intnum:; \
+ pusha; \
+ movl $(##intnum + IRQ_BASE), %ebx; \
+ jmp _KiCommonInterrupt;
-.global _irq_handler_1
-_irq_handler_1:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 1)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
+/* Interrupt handlers and declarations */
-.global _irq_handler_2
-_irq_handler_2:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 2)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
+#define B(x) \
+ BUILD_INTERRUPT_HANDLER(x)
-.global _irq_handler_3
-_irq_handler_3:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 3)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
+B(0) B(1) B(2) B(3)
+B(4) B(5) B(6) B(7)
+B(8) B(9) B(10) B(11)
+B(12) B(13) B(14) B(15)
-.global _irq_handler_4
-_irq_handler_4:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 4)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
+#undef B
+#undef BUILD_INTERRUPT_HANDLER
-.global _irq_handler_5
-_irq_handler_5:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 5)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_6
-_irq_handler_6:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 6)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_7
-_irq_handler_7:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 7)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_8
-_irq_handler_8:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 8)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_9
-_irq_handler_9:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 9)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_10
-_irq_handler_10:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 10)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_11
-_irq_handler_11:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 11)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_12
-_irq_handler_12:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 12)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_13
-_irq_handler_13:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 13)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_14
-_irq_handler_14:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 14)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
-.global _irq_handler_15
-_irq_handler_15:
- cld
- pusha
- pushl %ds
- pushl %es
- pushl %fs
- pushl %gs
- movl $0xceafbeef,%eax
- pushl %eax
- movw $KGDT_R0_DATA,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movl $KGDT_R0_PCR, %eax
- movl %eax, %fs
- pushl %esp
- pushl $(IRQ_BASE + 15)
- call _KiInterruptDispatch
- addl $0xC, %esp
- popl %gs
- popl %fs
- popl %es
- popl %ds
- popa
- iret
-
#endif /* CONFIG_SMP */
.intel_syntax noprefix