diff options
author | Michael Brown | 2013-04-30 15:31:39 +0200 |
---|---|---|
committer | Michael Brown | 2013-04-30 15:56:19 +0200 |
commit | c6375a85be0573c12fc89d55009d2905521d78c4 (patch) | |
tree | 3f0d4c61e08ebec8ba57540195eddb1c898694da | |
parent | [realtek] Allow reaction time between writing RTL_CAPR and reading RTL_CR (diff) | |
download | ipxe-c6375a85be0573c12fc89d55009d2905521d78c4.tar.gz ipxe-c6375a85be0573c12fc89d55009d2905521d78c4.tar.xz ipxe-c6375a85be0573c12fc89d55009d2905521d78c4.zip |
[romprefix] Report failure cause when unable to open payload
Report the cause of the failure when we are unable to open the .mrom
payload. There are two possible failure cases:
- Unable to find a suitable memory BAR to borrow (e.g. if the NIC
doesn't have a memory BAR that is at least as large as the
expansion ROM BAR, or if the memory BAR has been assigned a 64-bit
address which won't fit into the 32-bit expansion ROM BAR). This
will be reported as "BABABABA".
- Unable to find correct ROM image within the BAR. This will be
reported as the address (within the borrowed BAR) at which we first
fail to find a valid 55AA signature.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/arch/i386/prefix/mromprefix.S | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/arch/i386/prefix/mromprefix.S b/src/arch/i386/prefix/mromprefix.S index 058663c4..0f0847e5 100644 --- a/src/arch/i386/prefix/mromprefix.S +++ b/src/arch/i386/prefix/mromprefix.S @@ -98,6 +98,7 @@ find_mem_bar: cmpw $PCI_BAR_5, %di jle 1f stc + movl $0xbabababa, %esi /* Report "No suitable BAR" */ jmp 99f 1: movw $4, %bp @@ -157,15 +158,17 @@ find_mem_bar: /* Locate our ROM image */ 1: addr32 es cmpw $0xaa55, (%eax) - stc - jne 99f - addr32 es cmpl $_build_id, build_id(%eax) je 2f + stc + movl %eax, %esi /* Report failure address */ + jmp 99f +2: addr32 es cmpl $_build_id, build_id(%eax) + je 3f addr32 es movzbl 2(%eax), %ecx shll $9, %ecx addl %ecx, %eax jmp 1b -2: +3: /* Copy payload to buffer, or set buffer address to BAR address */ testl %esi, %esi |