aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2011-08-18 18:35:16 +0100
committerMatt Fleming <matt.fleming@intel.com>2011-08-18 20:59:56 +0100
commit262083901cb8b7472548cea6f1ed12d8107dc067 (patch)
treef877a5f57761ce18cfa0039a50ace2df2ea0844b
parent6123091071753417bcc89274964683d470f05eb8 (diff)
downloadefilinux-262083901cb8b7472548cea6f1ed12d8107dc067.tar.gz
efilinux: i386 kernel_jump()
Add an implementation of kernel_jump() for i386. This was all the architecture specific code that was needed to get efilinux booting on i386. Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r--loaders/bzimage/i386.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/loaders/bzimage/i386.h b/loaders/bzimage/i386.h
index 367f426..3199a02 100644
--- a/loaders/bzimage/i386.h
+++ b/loaders/bzimage/i386.h
@@ -36,4 +36,14 @@
#define EFI_LOADER_SIGNATURE "EL32"
+static inline void kernel_jump(EFI_PHYSICAL_ADDRESS kernel_start,
+ struct boot_params *boot_params)
+{
+ asm volatile ("cli \n"
+ "movl %0, %%esi \n"
+ "movl %1, %%ecx \n"
+ "jmp *%%ecx \n"
+ :: "m" (boot_params), "m" (kernel_start));
+}
+
#endif /* __I386_H__ */