1 FILE_LICENCE ( GPL2_OR_LATER )
3 #define PXENV_UNDI_ISR 0x0014
4 #define PXENV_UNDI_ISR_IN_START 1
5 #define PXENV_UNDI_ISR_OUT_OURS 0
6 #define PXENV_UNDI_ISR_OUT_NOT_OURS 1
8 #define IRQ_PIC_CUTOFF 8
9 #define ICR_EOI_NON_SPECIFIC 0x20
17 .section ".text16", "ax", @progbits
21 /* Preserve registers */
29 /* Set up our segment registers */
33 /* Check that we have an UNDI entry point */
34 cmpw $0, pxeparent_entry_point
37 /* Issue UNDI API call */
39 movw $undinet_params, %di
40 movw $PXENV_UNDI_ISR, %bx
41 movw $PXENV_UNDI_ISR_IN_START, funcflag
45 lcall *pxeparent_entry_point
46 cli /* Just in case */
48 cmpw $PXENV_UNDI_ISR_OUT_OURS, funcflag
51 trig: /* Record interrupt occurence */
52 incb undiisr_trigger_count
55 movb $ICR_EOI_NON_SPECIFIC, %al
56 cmpb $IRQ_PIC_CUTOFF, undiisr_irq
59 1: outb %al, $PIC1_ICR
62 chain: /* Chain to next handler */
64 lcall *undiisr_next_handler
66 exit: /* Restore registers and return */
70 addr32 movl -20(%esp), %esp /* %esp isn't restored by popal */
78 .section ".data16", "aw", @progbits
84 frameheaderlength: .word 0