david/ipxe
Archived
1
0

[romprefix] Display only one "Ctrl-B" prompt per PCI device during POST

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>
This commit is contained in:
Michael Brown 2013-03-11 01:43:12 +00:00
parent 2629b7e2cd
commit cb37d92ff6

View 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