rendered paste body#define ASM 1
/* You observent readers may notice that this is very similar to the ISR
* code. That's because it is. :-) */
/* Export to C-land. I hate repetition. I hate repetition. */
.global irq0
.global irq1
.global irq2
.global irq3
.global irq4
.global irq5
.global irq6
.global irq7
.global irq8
.global irq9
.global irq10
.global irq11
.global irq12
.global irq13
.global irq14
.global irq15
/* Handlers. */
irq0:
cli
push $0
push $32
jmp i8259_common
irq1:
cli
push $0
push $33
jmp i8259_common
irq2:
cli
push $0
push $34
jmp i8259_common
irq3:
cli
push $0
push $35
jmp i8259_common
irq4:
cli
push $0
push $36
jmp i8259_common
irq5:
cli
push $0
push $37
jmp i8259_common
irq6:
cli
push $0
push $38
jmp i8259_common
irq7:
cli
push $0
push $39
jmp i8259_common
irq8:
cli
push $0
push $40
jmp i8259_common
irq9:
cli
push $0
push $41
jmp i8259_common
irq10:
cli
push $0
push $42
jmp i8259_common
irq11:
cli
push $0
push $43
jmp i8259_common
irq12:
cli
push $0
push $44
jmp i8259_common
irq13:
cli
push $0
push $45
jmp i8259_common
irq14:
cli
push $0
push $46
jmp i8259_common
irq15:
cli
push $0
push $47
jmp i8259_common
/* Common IRQ code. Calls the interrupt handler */
i8259_common:
pusha
push %gs
push %fs
push %ds
push %es
mov $0x10, %ax
mov %ax, %gs
mov %ax, %fs
mov %ax, %ds
mov %ax, %es
.extern handle_irq
push %esp
call handle_irq
pop %esp
pop %es
pop %ds
pop %fs
pop %gs
popa
add $8, %esp
iret