commit c429bf0aa2428e6d12143285b29cbaf6a82f8d84
Author: Alex Williamson <alex.williamson@redhat.com>
Date:   Tue Feb 25 16:00:44 2014 -0700

    [romprefix] Store boot bus:dev.fn address as autoboot device location
    
    Per the BIOS Boot Specification, the initialization phase of the ROM
    is called with the PFA (PCI Function Address) in the %ax register.
    The intention is that the ROM code will store that device address
    somewhere and use it for booting from that device when the Boot Entry
    Vector (BEV) is called.  iPXE does store the PFA, but doesn't use it
    to select the boot network device.  This renders BIOS IPL lists fairly
    ineffective.
    
    Fix by using the BBS-specified bus:dev.fn address as the autoboot
    device location.
    
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Modified-by: Michael Brown <mcb30@ipxe.org>
    Signed-off-by: Michael Brown <mcb30@ipxe.org>

diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S
index e061932..d606006 100644
--- a/src/arch/i386/prefix/romprefix.S
+++ b/src/arch/i386/prefix/romprefix.S
@@ -738,7 +738,17 @@ exec:	/* Set %ds = %cs */
 	pushw	$1f
 	lret
 	.section ".text16", "awx", @progbits
-1:	/* Call main() */
+1:
+	/* Retrieve PCI bus:dev.fn */
+	movw	init_pci_busdevfn, %cx
+
+	/* Set up %ds for access to .data16 */
+	movw	%bx, %ds
+
+	/* Store PCI bus:dev.fn */
+	movw	%cx, autoboot_busdevfn
+
+	/* Call main() */
 	pushl	$main
 	pushw	%cs
 	call	prot_call
