1
// irq test program. assumes outb $irq, $0xff generates an interrupt $irq.
12
mov %ax, %ds // check ds descriptor is okay
14
mov $irq_handler, %rdx
20
PRINT "software interrupt"
26
PRINT "injecting interrupt with interrupts enabled"
29
outb %al, $0xff // inject interrupt
34
PRINT "after injection"
38
PRINT "injecting interrupt with interrupts disabled"
41
outb %al, $0xff // inject interrupt
43
// no interrupt here (disabled)
46
PRINT "enabling interrupts"
50
out %al, $0x80 // blocked by sti
54
PRINT "after injection"
61
PRINT "interrupt handler"
64
setup_idt_entry: // %rax: irq %rdx: handler
72
movw $0x8e00, 4+idt(%rax)
79
movl $0xffff, gdt(%rax)
80
movl $0xaf9b00, 4+gdt(%rax)
85
movl $0xffff, gdt(%rax)
86
movl $0x8f9300, 4+gdt(%rax)