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