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 */
26 /* Set up our segment registers */
30 /* Check that we have an UNDI entry point */
31 cmpw $0, undinet_entry_point
34 /* Issue UNDI API call */
37 movw $undinet_params, %di
38 movw $PXENV_UNDI_ISR, %bx
39 movw $PXENV_UNDI_ISR_IN_START, funcflag
43 lcall *undinet_entry_point
44 cli /* Just in case */
46 cmpw $PXENV_UNDI_ISR_OUT_OURS, funcflag
49 trig: /* Record interrupt occurence */
50 incb undiisr_trigger_count
53 movb $ICR_EOI_NON_SPECIFIC, %al
54 cmpb $IRQ_PIC_CUTOFF, undiisr_irq
57 1: outb %al, $PIC1_ICR
60 chain: /* Chain to next handler */
62 lcall *undiisr_next_handler
64 exit: /* Restore registers and return */
76 frameheaderlength: .word 0