aboutsummaryrefslogtreecommitdiffstats
path: root/src/arch/i386/prefix/romprefix.S
diff options
context:
space:
mode:
authorMichael Brown <mcb30@etherboot.org>2008-05-21 18:43:58 +0100
committerMichael Brown <mcb30@etherboot.org>2008-05-21 18:43:58 +0100
commitfd0aef9ee1df2e979993b05036c8330885fbccc1 (patch)
tree11d0c63c698d0af944195bfbbe0f56343792b55d /src/arch/i386/prefix/romprefix.S
parentf3aef4d98dc962e14d5fa1b4adee73168042a468 (diff)
downloadipxe-fd0aef9ee1df2e979993b05036c8330885fbccc1.tar.gz
[prefix] Add PCI bus:dev.fn to ROM product string
This allows multiple gPXE ROMs in a system to be disambiguated at boot time; the PCI ID will show up in the boot menu for a BBS-compliant BIOS.
Diffstat (limited to 'src/arch/i386/prefix/romprefix.S')
-rw-r--r--src/arch/i386/prefix/romprefix.S45
1 files changed, 33 insertions, 12 deletions
diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S
index d37cce94..882da18b 100644
--- a/src/arch/i386/prefix/romprefix.S
+++ b/src/arch/i386/prefix/romprefix.S
@@ -85,11 +85,24 @@ pnpheader:
.equ pnpheader_len, . - pnpheader
.size pnpheader, . - pnpheader
+/* Manufacturer string */
mfgstr:
.asciz "http://etherboot.org"
.size mfgstr, . - mfgstr
+
+/* Product string
+ *
+ * Defaults to "gPXE". If the ROM image is writable at initialisation
+ * time, it will be filled in to include the PCI bus:dev.fn number of
+ * the card as well.
+ */
prodstr:
- .asciz "gPXE"
+ .ascii "gPXE"
+prodstr_separator:
+ .byte 0
+ .ascii "(PCI "
+prodstr_pci_id:
+ .asciz "xx:xx.x)" /* Filled in by init code */
.size prodstr, . - prodstr
undiheader:
@@ -120,24 +133,31 @@ init:
cld
pushw %cs
popw %ds
+ movw %di, %bx
+ xorw %di, %di
/* Print message as early as possible */
movw $init_message, %si
call print_message
+ call print_pci_busdevfn
+ /* Fill in product name string, if possible */
+ movw $prodstr_pci_id, %di
+ call print_pci_busdevfn
+ movb $' ', prodstr_separator
+ xorw %di, %di
/* Check for PnP BIOS */
- testw $0x0f, %di /* PnP signature must be aligned - bochs */
+ testw $0x0f, %bx /* PnP signature must be aligned - bochs */
jnz hook_int19 /* uses unalignment to indicate 'fake' PnP. */
- cmpl $PNP_SIGNATURE, %es:0(%di)
+ cmpl $PNP_SIGNATURE, %es:0(%bx)
jne hook_int19
/* Is PnP: print PnP message */
movw $init_message_pnp, %si
call print_message
- xchgw %bx, %bx
/* Check for BBS */
- pushw %es:0x1b(%di) /* Real-mode data segment */
+ pushw %es:0x1b(%bx) /* Real-mode data segment */
pushw %ds /* &(bbs_version) */
pushw $bbs_version
pushw $PNP_GET_BBS_VERSION
- lcall *%es:0xd(%di)
+ lcall *%es:0xd(%bx)
addw $8, %sp
testw %ax, %ax
jne hook_int19
@@ -155,18 +175,18 @@ hook_int19:
popl %es:( 0x19 * 4 )
hook_bbs:
/* Check for PMM */
- movw $( 0xe000 - 1 ), %di
+ movw $( 0xe00 - 1 ), %bx
pmm_scan:
- incw %di
+ incw %bx
jz no_pmm
- movw %di, %es
+ movw %bx, %es
cmpl $PMM_SIGNATURE, %es:0
jne pmm_scan
- xorw %bx, %bx
+ xorw %dx, %dx
xorw %si, %si
movzbw %es:5, %cx
1: es lodsb
- addb %al, %bl
+ addb %al, %dl
loop 1b
jnz pmm_scan
/* PMM found: print PMM message */
@@ -221,7 +241,7 @@ no_pmm:
.size init, . - init
init_message:
- .asciz "gPXE (http://etherboot.org) -"
+ .asciz "gPXE (http://etherboot.org) - PCI "
.size init_message, . - init_message
init_message_pnp:
.asciz " PnP"
@@ -292,6 +312,7 @@ exec: /* Set %ds = %cs */
/* Print message as soon as possible */
movw $exec_message, %si
+ xorw %di, %di
call print_message
/* Store magic word on BIOS stack and remember BIOS %ss:sp */