diff options
author | Michael Brown <mcb30@etherboot.org> | 2008-08-27 23:45:59 +0100 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2008-08-28 00:11:45 +0100 |
commit | fc0c40a5b0833e215b596268e51c8a38076c8f19 (patch) | |
tree | 05615189d289c42c58d807090cea739ec57e46b5 /src/arch/i386/prefix | |
parent | 32e34683c0d5f97727555adffddae77f81fb95f7 (diff) | |
download | ipxe-fc0c40a5b0833e215b596268e51c8a38076c8f19.tar.gz |
[pxe] Fill in UNDIROMID pointer in !PXE structure
IBM's iSCSI Firmware Initiator checks the UNDIROMID pointer in the
!PXE structure that gets created by the UNDI loader. We didn't
previously fill this value in.
Diffstat (limited to 'src/arch/i386/prefix')
-rw-r--r-- | src/arch/i386/prefix/romprefix.S | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S index 90ddd106..f9b9e169 100644 --- a/src/arch/i386/prefix/romprefix.S +++ b/src/arch/i386/prefix/romprefix.S @@ -112,7 +112,8 @@ prodstr_separator: prodstr_pci_id: .asciz "xx:xx.x)" /* Filled in by init code */ .size prodstr, . - prodstr - + + .globl undiheader undiheader: .ascii "UNDI" /* Signature */ .byte undiheader_len /* Length of structure */ @@ -524,18 +525,22 @@ undiloader: /* Save registers */ pushl %esi pushl %edi + pushw %ds pushw %es pushw %bx + /* ROM segment address to %ds */ + pushw %cs + popw %ds /* UNDI loader parameter structure address into %es:%di */ movw %sp, %bx - movw %ss:16(%bx), %di - movw %ss:18(%bx), %es + movw %ss:18(%bx), %di + movw %ss:20(%bx), %es /* Install to specified real-mode addresses */ pushw %di movw %es:12(%di), %bx movw %es:14(%di), %ax - movl %cs:image_source, %esi - movl %cs:decompress_to, %edi + movl image_source, %esi + movl decompress_to, %edi call install_prealloc popw %di /* Call UNDI loader C code */ @@ -550,6 +555,7 @@ undiloader: /* Restore registers and return */ popw %bx popw %es + popw %ds popl %edi popl %esi lret |