From ac69b85adb8f3f58e2b9eb70bedf69de5c820934 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 4 Jul 2007 03:23:02 +0100 Subject: [PATCH] UNDI loader entry point implemented; seems to work. --- src/arch/i386/prefix/romprefix.S | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S index 52001699..f68c14e0 100644 --- a/src/arch/i386/prefix/romprefix.S +++ b/src/arch/i386/prefix/romprefix.S @@ -167,6 +167,34 @@ exec_message: * Called by an external program to load our PXE stack. */ undiloader: + /* Save registers */ + pushl %edi + pushw %es + pushw %bx + /* UNDI loader parameter structure address into %es:%di */ + movw %sp, %bx + movw %ss:12(%bx), %di + movw %ss:14(%bx), %es + /* Install to specified real-mode addresses */ + pushw %di + movw %es:12(%di), %bx + movw %es:14(%di), %ax + call install_prealloc + popw %di + /* Call UNDI loader C code */ + pushl $pxe_loader_call + pushw %cs + pushw $1f + pushw %ax + pushw $prot_call + lret +1: popw %bx /* discard */ + popw %bx /* discard */ + /* Restore registers and return */ + popw %bx + popw %es + popl %edi + lret .size undiloader, . - undiloader /* Utility function: print string