diff options
author | H. Peter Anvin <hpa@zytor.com> | 2008-09-07 22:41:29 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2008-09-07 22:41:29 -0700 |
commit | c14f98ab23dbc912aa9db26d86434a4d2bd80a5f (patch) | |
tree | a0b1d6fd48ad30f8af19a88d11a8f4e61cebf52f /gpxe/src/arch/i386/interface/pxe | |
parent | 3506d7fb195922b04c941650b1512440bdcc89e4 (diff) | |
download | syslinux.git-c14f98ab23dbc912aa9db26d86434a4d2bd80a5f.tar.gz syslinux.git-c14f98ab23dbc912aa9db26d86434a4d2bd80a5f.tar.xz syslinux.git-c14f98ab23dbc912aa9db26d86434a4d2bd80a5f.zip |
gPXE: update gPXE to current git
Update gPXE to current git.
gpxe-for-syslinux e3ef2094cfa26f874c5f8dbd687eb311830efcf0
gpxe main tree 8223084afc206000312611a3fcfa30a28500d1a3
Diffstat (limited to 'gpxe/src/arch/i386/interface/pxe')
-rw-r--r-- | gpxe/src/arch/i386/interface/pxe/pxe_call.c | 7 | ||||
-rw-r--r-- | gpxe/src/arch/i386/interface/pxe/pxe_entry.S | 17 |
2 files changed, 21 insertions, 3 deletions
diff --git a/gpxe/src/arch/i386/interface/pxe/pxe_call.c b/gpxe/src/arch/i386/interface/pxe/pxe_call.c index 5b307d40..3ccb7fb5 100644 --- a/gpxe/src/arch/i386/interface/pxe/pxe_call.c +++ b/gpxe/src/arch/i386/interface/pxe/pxe_call.c @@ -347,6 +347,9 @@ __cdecl void pxe_loader_call ( struct i386_all_regs *ix86 ) { /* Copy parameter block from caller */ copy_from_user ( ¶ms, uparams, 0, sizeof ( params ) ); + /* Fill in ROM segment address */ + ppxe.UNDIROMID.segment = ix86->segs.ds; + /* Set default status in case child routine fails to do so */ params.Status = PXENV_STATUS_FAILURE; @@ -441,8 +444,8 @@ int pxe_start_nbp ( void ) { "addw $4, %%sp\n\t" ) : "=a" ( rc ), "=b" ( discard_b ), "=c" ( discard_c ) - : "a" ( & __from_text16 ( ppxe ) ), - "b" ( & __from_text16 ( pxenv ) ), + : "a" ( __from_text16 ( &ppxe ) ), + "b" ( __from_text16 ( &pxenv ) ), "c" ( rm_cs ) : "edx", "esi", "edi", "ebp", "memory" ); diff --git a/gpxe/src/arch/i386/interface/pxe/pxe_entry.S b/gpxe/src/arch/i386/interface/pxe/pxe_entry.S index 204894ef..e5d327a5 100644 --- a/gpxe/src/arch/i386/interface/pxe/pxe_entry.S +++ b/gpxe/src/arch/i386/interface/pxe/pxe_entry.S @@ -35,7 +35,7 @@ ppxe: .byte 0 /* StructCksum */ .byte 0 /* StructRev */ .byte 0 /* reserved_1 */ - .word 0, 0 /* UNDIROMID */ + .word undiheader, 0 /* UNDIROMID */ .word 0, 0 /* BaseROMID */ .word pxe_entry_sp, 0 /* EntryPointSP */ .word pxe_entry_esp, 0 /* EntryPointESP */ @@ -55,6 +55,11 @@ pxe_segments: .equ pxe_length, . - ppxe .size ppxe, . - ppxe + /* Define undiheader=0 as a weak symbol for non-ROM builds */ + .section ".weak" + .weak undiheader +undiheader: + /**************************************************************************** * PXENV+ structure **************************************************************************** @@ -98,6 +103,16 @@ pxenv: * none **************************************************************************** */ + /* Wyse Streaming Manager server (WLDRM13.BIN) assumes that + * the PXENV+ entry point is at UNDI_CS:0000; apparently, + * somebody at Wyse has difficulty distinguishing between the + * words "may" and "must"... + */ + .section ".text16.null" + .code16 +pxenv_null_entry: + jmp pxenv_entry + .section ".text16" .code16 pxenv_entry: |