From: Michael Brown Date: Tue, 19 Jun 2012 17:54:22 +0000 (+0100) Subject: [romprefix] Treat 0xffffffff as an error return from PMM X-Git-Tag: v1.20.1~1752 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9ef880c8d50ccb89aef7e820aa737f66b63fd90;p=thirdparty%2Fipxe.git [romprefix] Treat 0xffffffff as an error return from PMM PMM defines the return code 0xffffffff as meaning "unsupported function". It's hard to imagine a PMM BIOS that doesn't support pmmAllocate(), but apparently such things do exist. Signed-off-by: Michael Brown --- diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S index 950e08452..2719a70aa 100644 --- a/src/arch/i386/prefix/romprefix.S +++ b/src/arch/i386/prefix/romprefix.S @@ -342,7 +342,7 @@ pmm_scan: movw $get_pmm_image_source, %bp call get_pmm movl %esi, image_source - jc 1f + jz 1f /* Copy ROM to image source PMM block */ pushw %es xorw %ax, %ax @@ -448,7 +448,7 @@ no_pmm: * %es:0000 : PMM structure * Returns: * %ebx : PMM handle - * %esi : allocated block address, or zero (with CF set) if allocation failed + * %esi : allocated block address, or zero (with ZF set) if allocation failed */ get_pmm: /* Preserve registers */ @@ -464,7 +464,10 @@ get_pmm_find: pushw %dx pushw %ax popl %esi - testl %esi, %esi + /* Treat 0xffffffff (not supported) as 0x00000000 (not found) */ + incl %esi + jz get_pmm_allocate + decl %esi jz get_pmm_allocate /* Block found - check acceptability */ call *%bp @@ -484,19 +487,20 @@ get_pmm_allocate: pushw %ax popl %esi movw $( '+' ), %di /* Indicate allocation attempt */ - testl %esi, %esi - jnz get_pmm_done - stc get_pmm_done: /* Print block address */ - pushfw movw %di, %ax xorw %di, %di call print_character movl %esi, %eax call print_hex_dword - popfw - /* Restore registers and return */ + /* Treat 0xffffffff (not supported) as 0x00000000 (allocation + * failed), and set ZF to indicate a zero result. + */ + incl %esi + jz 1f + decl %esi +1: /* Restore registers and return */ popw %di popl %eax ret