]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[romprefix] Display only one "Ctrl-B" prompt per PCI device during POST
authorMichael Brown <mcb30@ipxe.org>
Mon, 11 Mar 2013 01:43:12 +0000 (01:43 +0000)
committerMichael Brown <mcb30@ipxe.org>
Mon, 11 Mar 2013 01:48:00 +0000 (01:48 +0000)
If a multifunction PCI device exposes an iPXE ROM via each function,
then each function will display a "Press Ctrl-B to configure iPXE"
prompt, and delay for two seconds.  Since a single instance of iPXE
can drive all functions on the multifunction device, this simply adds
unnecessary delay to the boot process.

Fix by inhibiting the "Press Ctrl-B" prompt for all except the first
function on a PCI device.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/prefix/romprefix.S

index 18fef75e49b18b05da659eaec2e0c23a64646b3d..091673d3c885e9301b0ab47baa438f5b47e1d39e 100644 (file)
@@ -23,6 +23,7 @@ FILE_LICENCE ( GPL2_OR_LATER )
        ( PMM_HANDLE_BASE | 0x00001000 )
 #define PMM_HANDLE_BASE_DECOMPRESS_TO \
        ( PMM_HANDLE_BASE | 0x00002000 )
+#define PCI_FUNC_MASK 0x07
 
 /* ROM banner timeout.  Based on the configurable BANNER_TIMEOUT in
  * config.h, but converted to a number of (18Hz) timer ticks, and
@@ -422,6 +423,9 @@ no_pmm:
        xorw    %di, %di
        cs rep  movsb
 
+       /* Skip prompt if this is not the first PCI function */
+       testb   $PCI_FUNC_MASK, init_pci_busdevfn
+       jnz     no_shell
        /* Prompt for POST-time shell */
        movw    $init_message_prompt, %si
        xorw    %di, %di
@@ -440,7 +444,7 @@ no_pmm:
        movw    $init_message_done, %si
        call    print_message
        popf
-       jnz     2f
+       jnz     no_shell
        /* Ctrl-B was pressed: invoke iPXE.  The keypress will be
         * picked up by the initial shell prompt, and we will drop
         * into a shell.
@@ -448,7 +452,11 @@ no_pmm:
        xorl    %ebp, %ebp      /* Inhibit use of INT 15,e820 and INT 15,e801 */
        pushw   %cs
        call    exec
-2:
+no_shell:
+       movb    $( '\n' ), %al
+       xorw    %di, %di
+       call    print_character
+
        /* Restore registers */
        popw    %gs
        popw    %fs
@@ -595,7 +603,7 @@ init_message_done:
  *
  */
 init_pci_busdevfn:
-       .word   0xffff
+       .word   0
        .size   init_pci_busdevfn, . - init_pci_busdevfn
 
 /* Image source area