FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ) #include .text .code16 .arch i386 .section ".prefix", "ax", @progbits /* UNDI loader * * Called by an external program to load our PXE stack. */ .globl undiloader undiloader: /* Save registers */ pushl %esi pushl %edi pushl %ebp pushw %ds pushw %es pushw %bx /* ROM segment address to %ds */ pushw %cs popw %ds /* UNDI loader parameter structure address into %es:%di */ movw %sp, %bx movw %ss:22(%bx), %di movw %ss:24(%bx), %es /* Install to specified real-mode addresses */ pushw %di movw %es:12(%di), %bx movw %es:14(%di), %ax movl image_source, %esi call undiloader_source xorl %edi, %edi orl $0xffffffff, %ebp /* Allow arbitrary relocation */ call install_prealloc popw %di /* Jump to .text16 segment */ pushw %ax pushw $1f lret .section ".text16", "ax", @progbits 1: /* Call UNDI loader C code */ virtcall pxe_loader_call 1: /* Restore registers and return */ popw %bx popw %es popw %ds popl %ebp popl %edi popl %esi lret /* Update image source address for UNDI loader * * Parameters: * %esi : Image source address * Returns: * %esi : Image source address */ .section ".prefix", "ax", @progbits .globl undiloader_source .weak undiloader_source undiloader_source: ret