source: bootcd/isolinux/syslinux-6.03/gpxe/src/arch/i386/drivers/net/undiisr.S

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 1.6 KB
Line 
1FILE_LICENCE ( GPL2_OR_LATER )
2
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
7
8#define IRQ_PIC_CUTOFF 8
9#define ICR_EOI_NON_SPECIFIC 0x20
10#define PIC1_ICR 0x20
11#define PIC2_ICR 0xa0
12       
13        .text
14        .arch i386
15        .code16
16
17        .section ".text16", "ax", @progbits
18        .globl undiisr
19undiisr:
20       
21        /* Preserve registers */
22        pushw   %ds
23        pushw   %es
24        pushw   %fs
25        pushw   %gs
26        pushfl
27        pushal
28
29        /* Set up our segment registers */
30        movw    %cs:rm_ds, %ax
31        movw    %ax, %ds
32
33        /* Check that we have an UNDI entry point */
34        cmpw    $0, pxeparent_entry_point
35        je      chain
36       
37        /* Issue UNDI API call */
38        movw    %ax, %es
39        movw    $undinet_params, %di
40        movw    $PXENV_UNDI_ISR, %bx
41        movw    $PXENV_UNDI_ISR_IN_START, funcflag
42        pushw   %es
43        pushw   %di
44        pushw   %bx
45        lcall   *pxeparent_entry_point
46        cli     /* Just in case */
47        addw    $6, %sp
48        cmpw    $PXENV_UNDI_ISR_OUT_OURS, funcflag
49        jne     eoi
50       
51trig:   /* Record interrupt occurence */
52        incb    undiisr_trigger_count
53
54eoi:    /* Send EOI */
55        movb    $ICR_EOI_NON_SPECIFIC, %al
56        cmpb    $IRQ_PIC_CUTOFF, undiisr_irq
57        jb      1f
58        outb    %al, $PIC2_ICR
591:      outb    %al, $PIC1_ICR
60        jmp     exit
61       
62chain:  /* Chain to next handler */
63        pushfw
64        lcall   *undiisr_next_handler
65       
66exit:   /* Restore registers and return */
67        cli
68        popal
69        movzwl  %sp, %esp
70        addr32  movl -20(%esp), %esp    /* %esp isn't restored by popal */
71        popfl
72        popw    %gs
73        popw    %fs
74        popw    %es
75        popw    %ds
76        iret
77
78        .section ".data16", "aw", @progbits
79undinet_params:
80status:                 .word   0
81funcflag:               .word   0
82bufferlength:           .word   0
83framelength:            .word   0
84frameheaderlength:      .word   0
85frame:                  .word   0, 0
86prottype:               .byte   0
87pkttype:                .byte   0
Note: See TracBrowser for help on using the repository browser.