]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[romprefix] Allow .mrom image to be placed anywhere within the BAR
authorMichael Brown <mcb30@ipxe.org>
Sun, 10 Jun 2012 18:01:20 +0000 (19:01 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 12 Jun 2012 14:15:06 +0000 (15:15 +0100)
A .mrom image currently assumes that it is the first image within the
expansion ROM BAR, which may not be correct when multiple images are
present.

Fix by scanning through the BAR until we locate an image matching our
build ID.

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

index d7b7fc3f78381bd8a5ee0f4d680351949f5a69fb..abe1c9e30a2d20d7c576fa0097a2793017d04914 100644 (file)
@@ -154,6 +154,18 @@ find_mem_bar:
        movw    $PCI_BAR_EXPROM, %di
        call    pci_write_config_dword
 
+       /* Locate our ROM image */
+1:     addr32 es cmpw $0xaa55, (%eax)
+       stc
+       jne     99f
+       addr32 es cmpl $_build_id, build_id(%eax)
+       je      2f
+       addr32 es movzbl 2(%eax), %ecx
+       shll    $9, %ecx
+       addl    %ecx, %eax
+       jmp     1b
+2:
+
        /* Copy payload to buffer, or set buffer address to BAR address */
        testl   %esi, %esi
        jz      1f