summaryrefslogtreecommitdiffstats
path: root/src/arch/i386
diff options
context:
space:
mode:
authorMichael Brown2007-06-30 15:56:35 +0200
committerMichael Brown2007-06-30 15:56:35 +0200
commit8130443f9ffd64f48a756d440e11d0265925765e (patch)
treeb92c33226b361b83513fbbc1af2dc4e3d1d8c727 /src/arch/i386
parentDon't build option-overloaded packets; they just confuse people (ISC (diff)
downloadipxe-8130443f9ffd64f48a756d440e11d0265925765e.tar.gz
ipxe-8130443f9ffd64f48a756d440e11d0265925765e.tar.xz
ipxe-8130443f9ffd64f48a756d440e11d0265925765e.zip
Separate out pxe_start_nbp() from pxe_image.c into pxe_call.c
Implement PXENV_RESTART_TFTP.
Diffstat (limited to 'src/arch/i386')
-rw-r--r--src/arch/i386/image/pxe_image.c23
-rw-r--r--src/arch/i386/include/pxe_call.h10
-rw-r--r--src/arch/i386/include/pxe_callbacks.h32
-rw-r--r--src/arch/i386/interface/pxe/pxe_call.c25
4 files changed, 36 insertions, 54 deletions
diff --git a/src/arch/i386/image/pxe_image.c b/src/arch/i386/image/pxe_image.c
index 60711edc0..9cf546916 100644
--- a/src/arch/i386/image/pxe_image.c
+++ b/src/arch/i386/image/pxe_image.c
@@ -30,12 +30,6 @@
#include <gpxe/segment.h>
#include <gpxe/netdevice.h>
-/** PXE load address segment */
-#define PXE_LOAD_SEGMENT 0
-
-/** PXE load address offset */
-#define PXE_LOAD_OFFSET 0x7c00
-
struct image_type pxe_image_type __image_type ( PROBE_PXE );
/**
@@ -46,8 +40,6 @@ struct image_type pxe_image_type __image_type ( PROBE_PXE );
*/
static int pxe_exec ( struct image *image __unused ) {
struct net_device *netdev;
- int discard_b, discard_c;
- uint16_t rc;
/* Ensure that PXE stack is ready to use */
pxe_init_structures();
@@ -59,20 +51,7 @@ static int pxe_exec ( struct image *image __unused ) {
break;
}
- /* Far call to PXE NBP */
- __asm__ __volatile__ ( REAL_CODE ( "pushw %%cx\n\t"
- "pushw %%ax\n\t"
- "movw %%cx, %%es\n\t"
- "lcall $0, $0x7c00\n\t"
- "addw $4, %%sp\n\t" )
- : "=a" ( rc ), "=b" ( discard_b ),
- "=c" ( discard_c )
- : "a" ( & __from_text16 ( ppxe ) ),
- "b" ( & __from_text16 ( pxenv ) ),
- "c" ( rm_cs )
- : "edx", "esi", "edi", "ebp", "memory" );
-
- return rc;
+ return pxe_start_nbp();
}
/**
diff --git a/src/arch/i386/include/pxe_call.h b/src/arch/i386/include/pxe_call.h
index c6c1c6d89..dc5853108 100644
--- a/src/arch/i386/include/pxe_call.h
+++ b/src/arch/i386/include/pxe_call.h
@@ -9,6 +9,15 @@
#include <pxe_api.h>
#include <realmode.h>
+/** PXE load address segment */
+#define PXE_LOAD_SEGMENT 0
+
+/** PXE load address offset */
+#define PXE_LOAD_OFFSET 0x7c00
+
+/** PXE physical load address */
+#define PXE_LOAD_PHYS ( ( PXE_LOAD_SEGMENT << 4 ) + PXE_LOAD_OFFSET )
+
/** !PXE structure */
extern struct s_PXE __text16 ( ppxe );
#define ppxe __use_text16 ( ppxe )
@@ -20,5 +29,6 @@ extern struct s_PXENV __text16 ( pxenv );
extern void pxe_hook_int1a ( void );
extern int pxe_unhook_int1a ( void );
extern void pxe_init_structures ( void );
+extern int pxe_start_nbp ( void );
#endif /* _PXE_CALL_H */
diff --git a/src/arch/i386/include/pxe_callbacks.h b/src/arch/i386/include/pxe_callbacks.h
deleted file mode 100644
index 974a3c30c..000000000
--- a/src/arch/i386/include/pxe_callbacks.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Header for pxe_callbacks.c.
- */
-
-#ifndef PXE_CALLBACKS_H
-#define PXE_CALLBACKS_H
-
-#include "etherboot.h"
-#include "pxe_types.h"
-
-typedef struct {
- SEGOFF16_t orig_retaddr;
- UINT16_t opcode;
- SEGOFF16_t segoff;
-} PACKED pxe_call_params_t;
-
-/*
- * These values are hard-coded into the PXE spec
- */
-#define PXE_LOAD_SEGMENT (0x0000)
-#define PXE_LOAD_OFFSET (0x7c00)
-#define PXE_LOAD_ADDRESS ( ( PXE_LOAD_SEGMENT << 4 ) + PXE_LOAD_OFFSET )
-
-/* Function prototypes
- */
-extern struct pxe_stack * install_pxe_stack ( void *base );
-extern void use_undi_ds_for_rm_stack ( uint16_t ds );
-extern int hook_pxe_stack ( void );
-extern int unhook_pxe_stack ( void );
-extern void remove_pxe_stack ( void );
-extern int xstartpxe ( void );
-
-#endif /* PXE_CALLBACKS_H */
diff --git a/src/arch/i386/interface/pxe/pxe_call.c b/src/arch/i386/interface/pxe/pxe_call.c
index 7a1851555..8ecacf1d1 100644
--- a/src/arch/i386/interface/pxe/pxe_call.c
+++ b/src/arch/i386/interface/pxe/pxe_call.c
@@ -363,3 +363,28 @@ void pxe_init_structures ( void ) {
ppxe.StructCksum -= pxe_checksum ( &ppxe, sizeof ( ppxe ) );
pxenv.Checksum -= pxe_checksum ( &pxenv, sizeof ( pxenv ) );
}
+
+/**
+ * Start PXE NBP at 0000:7c00
+ *
+ * @ret rc Return status code
+ */
+int pxe_start_nbp ( void ) {
+ int discard_b, discard_c;
+ uint16_t rc;
+
+ /* Far call to PXE NBP */
+ __asm__ __volatile__ ( REAL_CODE ( "pushw %%cx\n\t"
+ "pushw %%ax\n\t"
+ "movw %%cx, %%es\n\t"
+ "lcall $0, $0x7c00\n\t"
+ "addw $4, %%sp\n\t" )
+ : "=a" ( rc ), "=b" ( discard_b ),
+ "=c" ( discard_c )
+ : "a" ( & __from_text16 ( ppxe ) ),
+ "b" ( & __from_text16 ( pxenv ) ),
+ "c" ( rm_cs )
+ : "edx", "esi", "edi", "ebp", "memory" );
+
+ return rc;
+}