UNDI loader entry point implemented; seems to work.
authorMichael Brown <mcb30@etherboot.org>
Wed, 4 Jul 2007 02:23:02 +0000 (03:23 +0100)
committerMichael Brown <mcb30@etherboot.org>
Wed, 4 Jul 2007 02:23:02 +0000 (03:23 +0100)
src/arch/i386/prefix/romprefix.S

index 5200169..f68c14e 100644 (file)
@@ -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