]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[romprefix] Store boot bus:dev.fn address as autoboot device location
authorAlex Williamson <alex.williamson@redhat.com>
Tue, 25 Feb 2014 23:00:44 +0000 (16:00 -0700)
committerMichael Brown <mcb30@ipxe.org>
Mon, 3 Mar 2014 15:35:08 +0000 (15:35 +0000)
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>
src/arch/i386/prefix/romprefix.S

index e061932d763138f83ccaa8eaec46bf6228428573..d606006e89ade2d3244ed5c4580c67ae9541ef0f 100644 (file)
@@ -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