summaryrefslogtreecommitdiffstats
path: root/arch/x86/lib/linux_start.S
diff options
context:
space:
mode:
authorJuergen Beisert <jbe@pengutronix.de>2010-01-12 11:15:47 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2010-01-14 10:06:16 +0100
commit70810935313bfb073c942f9a96bdd8502a05f6c1 (patch)
tree49b01f23fc0ef19059dd5d2f2a69be230d4ebc2f /arch/x86/lib/linux_start.S
parent835aa6b59948817f094c7e55e530a7e426c79161 (diff)
downloadbarebox-70810935313bfb073c942f9a96bdd8502a05f6c1.tar.gz
barebox-70810935313bfb073c942f9a96bdd8502a05f6c1.tar.xz
Add a special command to load and start a bzImage on x86
Other architectures are supporting the uImage format used by barebox's 'bootm' command. x86 does'nt. So, we need a special command to be able to boot the x86 specific bzImage format. Signed-off-by: Juergen Beisert <jbe@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/x86/lib/linux_start.S')
-rw-r--r--arch/x86/lib/linux_start.S75
1 files changed, 75 insertions, 0 deletions
diff --git a/arch/x86/lib/linux_start.S b/arch/x86/lib/linux_start.S
new file mode 100644
index 0000000000..fac2510d1c
--- /dev/null
+++ b/arch/x86/lib/linux_start.S
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2009 Juergen Beisert, Pengutronix
+ *
+ * Mostly stolen from the GRUB2 project
+ * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+/**
+ * @file
+ * @brief Start the Linux real mode setup code
+ *
+ * Note: These functions are running in flat and real mode. Due to some
+ * other restrictions these routines must running from an address
+ * space below 0x10000
+ */
+
+/*
+ * void bios_start_linux(unsigned segment)
+ *
+ */
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+ .section .boot.text.bios_start_linux, "ax"
+ .code32
+ .globl bios_start_linux
+ .type bios_start_linux, @function
+
+ .extern prot_to_real
+
+bios_start_linux:
+ /* 'prot_to_real' eats our eax content */
+ movl %eax, %ebx
+ addl $0x20, %eax
+ movw %ax, setup_seg
+
+ call prot_to_real
+
+ .code16
+
+ cli
+ /* all segment registers are using the same segment */
+ movw %bx, %ss
+ movw %bx, %ds
+ movw %bx, %es
+ movw %bx, %fs
+ movw %bx, %gs
+
+ /* stack for the setup code (end of heap) */
+ movw $0x9000, %sp
+
+ /* do an 'ljmp' and never return */
+ .byte 0xea
+ .word 0
+setup_seg:
+ .word 0
+
+ .code32
+
+#endif