aboutsummaryrefslogtreecommitdiffstats
path: root/gpxe/src/arch/i386/interface/pxe
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-09-07 22:41:29 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-09-07 22:41:29 -0700
commitc14f98ab23dbc912aa9db26d86434a4d2bd80a5f (patch)
treea0b1d6fd48ad30f8af19a88d11a8f4e61cebf52f /gpxe/src/arch/i386/interface/pxe
parent3506d7fb195922b04c941650b1512440bdcc89e4 (diff)
downloadsyslinux.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.c7
-rw-r--r--gpxe/src/arch/i386/interface/pxe/pxe_entry.S17
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 ( &params, 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: