[config] Make PXE stack a compile-time option
[people/cooldavid/gpxe.git] / src / arch / i386 / prefix / undiloader.S
1         .text
2         .code16
3         .arch i386
4         .section ".prefix", "ax", @progbits
5
6 /* UNDI loader
7  *
8  * Called by an external program to load our PXE stack.
9  */
10         .globl  undiloader
11 undiloader:
12         /* Save registers */
13         pushl   %esi
14         pushl   %edi
15         pushw   %ds
16         pushw   %es
17         pushw   %bx
18         /* ROM segment address to %ds */
19         pushw   %cs
20         popw    %ds
21         /* UNDI loader parameter structure address into %es:%di */
22         movw    %sp, %bx
23         movw    %ss:18(%bx), %di
24         movw    %ss:20(%bx), %es
25         /* Install to specified real-mode addresses */
26         pushw   %di
27         movw    %es:12(%di), %bx
28         movw    %es:14(%di), %ax
29         movl    image_source, %esi
30         movl    decompress_to, %edi
31         call    install_prealloc
32         popw    %di
33         /* Call UNDI loader C code */
34         pushl   $pxe_loader_call
35         pushw   %cs
36         pushw   $1f
37         pushw   %ax
38         pushw   $prot_call
39         lret
40 1:      popw    %bx     /* discard */
41         popw    %bx     /* discard */
42         /* Restore registers and return */
43         popw    %bx
44         popw    %es
45         popw    %ds
46         popl    %edi
47         popl    %esi
48         lret
49         .size undiloader, . - undiloader