pxenv: save away the PXE return code so COMBOOT can return it syslinux-3.70-pre10
authorH. Peter Anvin <hpa@zytor.com>
Wed, 28 May 2008 16:47:44 +0000 (09:47 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Wed, 28 May 2008 16:47:44 +0000 (09:47 -0700)
PXELINUX itself doesn't actually use the PXE return code, but the
COMBOOT interface is supposed to return it.  Accordingly, make sure it
is stashed away so we can return it; for code that doesn't care, it
just writes a dedicated status variable which can be safely ignored.

comboot.inc
pxelinux.asm

index 35cc7f9..df9bb00 100644 (file)
@@ -446,8 +446,8 @@ comapi_pxecall:
                mov es,P_ES
                mov di,P_DI
                call pxenv
+               mov ax,[PXEStatus]
                mov P_AX,ax
-               clc
                ret
 %else
 comapi_pxecall equ comapi_err                  ; Not available
index 8be844f..c4feee2 100644 (file)
@@ -1712,6 +1712,7 @@ pxenv:
                push bx
 .jump:         call 0:0
                add sp,6
+               mov [cs:PXEStatus],ax
                add ax,-1                       ; Set CF unless AX was 0
 
 %if USE_PXE_PROVIDED_STACK == 0
@@ -1722,6 +1723,8 @@ pxenv:
                ; except for testing it against zero (and setting CF),
                ; which we did above.  For anything else,
                ; use the Status field in the reply.
+               ; For the COMBOOT function, the value is saved in
+               ; the PXEStatus variable.
                popad
                cld                             ; Make sure DF <- 0
                ret
@@ -1729,6 +1732,12 @@ pxenv:
 ; Must be after function def due to NASM bug
 PXEEntry       equ pxenv.jump+1
 
+               section .bss
+               alignb 2
+PXEStatus      resb 2
+               
+               section .text
+
 ;
 ; getfssec: Get multiple clusters from a file, given the starting cluster.
 ;