1 #define PXENV_UNDI_ISR 0x0014
2 #define PXENV_UNDI_ISR_IN_START 1
3 #define PXENV_UNDI_ISR_OUT_OURS 0
4 #define PXENV_UNDI_ISR_OUT_NOT_OURS 1
6 #define IRQ_PIC_CUTOFF 8
7 #define ICR_EOI_NON_SPECIFIC 0x20
13 .section ".text16", "ax", @progbits
14 .section ".data16", "aw", @progbits
21 /* Preserve registers */
28 /* Set up our segment registers */
32 /* Check that we have an UNDI entry point */
33 cmpw $0, undinet_entry_point
36 /* Issue UNDI API call */
38 movw $undinet_params, %di
39 movw $PXENV_UNDI_ISR, %bx
40 movw $PXENV_UNDI_ISR_IN_START, funcflag
44 lcall *undinet_entry_point
45 cli /* Just in case */
47 cmpw $PXENV_UNDI_ISR_OUT_OURS, funcflag
50 trig: /* Record interrupt occurence */
51 incb undiisr_trigger_count
54 movb $ICR_EOI_NON_SPECIFIC, %al
55 cmpb $IRQ_PIC_CUTOFF, undiisr_irq
58 1: outb %al, $PIC1_ICR
61 chain: /* Chain to next handler */
63 lcall *undiisr_next_handler
65 exit: /* Restore registers and return */
79 frameheaderlength: .word 0