summaryrefslogtreecommitdiffstats
path: root/src/arch/x86/prefix
diff options
context:
space:
mode:
authorMichael Brown2016-02-19 00:23:38 +0100
committerMichael Brown2016-02-19 00:23:38 +0100
commit31b5c2e753dbcb3d5023bccc8e644d0bcb56b2ad (patch)
tree536967f3f34fba94970a31cbde3fe1d2cf657cce /src/arch/x86/prefix
parent[librm] Convert prot_call() to a real-mode near call (diff)
downloadipxe-31b5c2e753dbcb3d5023bccc8e644d0bcb56b2ad.tar.gz
ipxe-31b5c2e753dbcb3d5023bccc8e644d0bcb56b2ad.tar.xz
ipxe-31b5c2e753dbcb3d5023bccc8e644d0bcb56b2ad.zip
[librm] Provide an abstraction wrapper for prot_call
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/arch/x86/prefix')
-rw-r--r--src/arch/x86/prefix/dskprefix.S6
-rw-r--r--src/arch/x86/prefix/exeprefix.S5
-rw-r--r--src/arch/x86/prefix/hdprefix.S6
-rw-r--r--src/arch/x86/prefix/libprefix.S5
-rw-r--r--src/arch/x86/prefix/lkrnprefix.S5
-rw-r--r--src/arch/x86/prefix/nbiprefix.S6
-rw-r--r--src/arch/x86/prefix/pxeprefix.S4
-rw-r--r--src/arch/x86/prefix/romprefix.S6
-rw-r--r--src/arch/x86/prefix/undiloader.S5
9 files changed, 29 insertions, 19 deletions
diff --git a/src/arch/x86/prefix/dskprefix.S b/src/arch/x86/prefix/dskprefix.S
index 041ec4c4c..0503f113d 100644
--- a/src/arch/x86/prefix/dskprefix.S
+++ b/src/arch/x86/prefix/dskprefix.S
@@ -18,6 +18,8 @@
FILE_LICENCE ( GPL2_ONLY )
+#include <librm.h>
+
.equ BOOTSEG, 0x07C0 /* original address of boot-sector */
.equ SYSSEG, 0x1000 /* system loaded at SYSSEG<<4 */
@@ -370,8 +372,8 @@ start_runtime:
lret
.section ".text16", "awx", @progbits
1:
- pushl $main
- call prot_call
+ /* Run iPXE */
+ virtcall main
/* Uninstall iPXE */
call uninstall
diff --git a/src/arch/x86/prefix/exeprefix.S b/src/arch/x86/prefix/exeprefix.S
index 9598122bc..c351456e2 100644
--- a/src/arch/x86/prefix/exeprefix.S
+++ b/src/arch/x86/prefix/exeprefix.S
@@ -24,6 +24,8 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+#include <librm.h>
+
/* Initial temporary stack size */
#define EXE_STACK_SIZE 0x400
@@ -148,8 +150,7 @@ _exe_start:
movl %esi, cmdline_phys
/* Run iPXE */
- pushl $main
- call prot_call
+ virtcall main
/* Uninstall iPXE */
call uninstall
diff --git a/src/arch/x86/prefix/hdprefix.S b/src/arch/x86/prefix/hdprefix.S
index 6caf12fc0..24f5d3850 100644
--- a/src/arch/x86/prefix/hdprefix.S
+++ b/src/arch/x86/prefix/hdprefix.S
@@ -1,5 +1,7 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+#include <librm.h>
+
.text
.arch i386
.section ".prefix", "awx", @progbits
@@ -99,8 +101,8 @@ start_image:
lret
.section ".text16", "awx", @progbits
1:
- pushl $main
- call prot_call
+ /* Run iPXE */
+ virtcall main
/* Uninstall iPXE */
call uninstall
diff --git a/src/arch/x86/prefix/libprefix.S b/src/arch/x86/prefix/libprefix.S
index 7eb1e501f..425f51484 100644
--- a/src/arch/x86/prefix/libprefix.S
+++ b/src/arch/x86/prefix/libprefix.S
@@ -24,6 +24,8 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+#include <librm.h>
+
.arch i386
/* Image compression enabled */
@@ -887,8 +889,7 @@ payload_death_message:
* ready for the copy to the new location.
*/
progress " relocate\n"
- pushl $relocate
- call prot_call
+ virtcall relocate
/* Jump back to .prefix segment */
pushw $1f
diff --git a/src/arch/x86/prefix/lkrnprefix.S b/src/arch/x86/prefix/lkrnprefix.S
index 41a5b4678..922181f0e 100644
--- a/src/arch/x86/prefix/lkrnprefix.S
+++ b/src/arch/x86/prefix/lkrnprefix.S
@@ -1,5 +1,7 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+#include <librm.h>
+
#define BZI_LOAD_HIGH_ADDR 0x100000
.text
@@ -197,8 +199,7 @@ no_cmd_line:
movl %ecx, initrd_len
/* Run iPXE */
- pushl $main
- call prot_call
+ virtcall main
/* Uninstall iPXE */
call uninstall
diff --git a/src/arch/x86/prefix/nbiprefix.S b/src/arch/x86/prefix/nbiprefix.S
index c25c254e5..de38e4af6 100644
--- a/src/arch/x86/prefix/nbiprefix.S
+++ b/src/arch/x86/prefix/nbiprefix.S
@@ -1,5 +1,7 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+#include <librm.h>
+
.text
.arch i386
.code16
@@ -66,8 +68,8 @@ _nbi_start:
lret
.section ".text16", "awx", @progbits
1:
- pushl $main
- call prot_call
+ /* Run iPXE */
+ virtcall main
/* Uninstall iPXE */
call uninstall
diff --git a/src/arch/x86/prefix/pxeprefix.S b/src/arch/x86/prefix/pxeprefix.S
index 2c6d7abb7..52ea18039 100644
--- a/src/arch/x86/prefix/pxeprefix.S
+++ b/src/arch/x86/prefix/pxeprefix.S
@@ -16,6 +16,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
.org 0
.code16
+#include <librm.h>
#include <undi.h>
#define STACK_MAGIC ( 'L' + ( 'R' << 8 ) + ( 'E' << 16 ) + ( 'T' << 24 ) )
@@ -820,8 +821,7 @@ run_ipxe:
movl %ecx, cached_dhcpack_phys
/* Run main program */
- pushl $main
- call prot_call
+ virtcall main
/* Uninstall iPXE */
call uninstall
diff --git a/src/arch/x86/prefix/romprefix.S b/src/arch/x86/prefix/romprefix.S
index 941e2ce6b..f4ca20677 100644
--- a/src/arch/x86/prefix/romprefix.S
+++ b/src/arch/x86/prefix/romprefix.S
@@ -8,6 +8,7 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+#include <librm.h>
#include <config/general.h>
#include <config/branding.h>
@@ -806,9 +807,8 @@ exec: /* Set %ds = %cs */
#endif /* AUTOBOOT_ROM_FILTER */
.endif
- /* Call main() */
- pushl $main
- call prot_call
+ /* Run iPXE */
+ virtcall main
/* Set up flat real mode for return to BIOS */
call flatten_real_mode
diff --git a/src/arch/x86/prefix/undiloader.S b/src/arch/x86/prefix/undiloader.S
index fb42637c8..530b48e8a 100644
--- a/src/arch/x86/prefix/undiloader.S
+++ b/src/arch/x86/prefix/undiloader.S
@@ -1,5 +1,7 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+#include <librm.h>
+
.text
.code16
.arch i386
@@ -45,8 +47,7 @@ undiloader:
.section ".text16", "ax", @progbits
1:
/* Call UNDI loader C code */
- pushl $pxe_loader_call
- call prot_call
+ virtcall pxe_loader_call
1: /* Restore registers and return */
popw %bx