[coreboot] [v2] r4234 - trunk/coreboot-v2/src/arch/i386/lib

svn at coreboot.org svn at coreboot.org
Thu Apr 30 09:23:15 CEST 2009


Author: oxygene
Date: 2009-04-30 09:23:15 +0200 (Thu, 30 Apr 2009)
New Revision: 4234

Added:
   trunk/coreboot-v2/src/arch/i386/lib/copy_and_run.c
Log:
And add the new file I forgot to "svn add" in the last commit.


Signed-off-by: Patrick Georgi <patrick.georgi at coresystems.de>
Acked-by: Patrick Georgi <patrick.georgi at coresystems.de>


Added: trunk/coreboot-v2/src/arch/i386/lib/copy_and_run.c
===================================================================
--- trunk/coreboot-v2/src/arch/i386/lib/copy_and_run.c	                        (rev 0)
+++ trunk/coreboot-v2/src/arch/i386/lib/copy_and_run.c	2009-04-30 07:23:15 UTC (rev 4234)
@@ -0,0 +1,54 @@
+/* by yhlu 6.2005
+	moved from nrv2v.c and some lines from crt0.S
+   2006/05/02 - stepan: move nrv2b to an extra file.
+*/
+
+#include <console/console.h>
+#include <stdint.h>
+#include <string.h>
+
+#if CONFIG_COMPRESS
+#define ENDIAN   0
+#define BITSIZE 32
+#include "../lib/nrv2b.c"
+#endif
+
+void copy_and_run_core(u8 *src, u8 *dst, unsigned long ilen, unsigned ebp)
+{
+        unsigned long olen;
+
+#if CONFIG_USE_INIT
+	printk_spew("src=%08x\r\n",src);
+	printk_spew("dst=%08x\r\n",dst);
+#else
+        print_spew("src="); print_spew_hex32((uint32_t)src); print_spew("\r\n");
+        print_spew("dst="); print_spew_hex32((uint32_t)dst); print_spew("\r\n");
+#endif
+
+#if !CONFIG_COMPRESS
+	print_debug("Copying image to RAM.\r\n");
+	memcpy(src, dst, ilen);
+	olen = ilen;
+#else
+	print_debug("Uncompressing image to RAM.\r\n");
+//	dump_mem(src, src+0x100);
+	olen = unrv2b(src, dst, &ilen);
+#endif
+
+//	dump_mem(dst, dst+0x100);
+#if CONFIG_USE_INIT
+	printk_spew("image length = %08x\r\n", olen);
+#else
+	print_spew("image length = "); print_spew_hex32(olen); print_spew("\r\n");
+#endif
+	print_debug("Jumping to image.\r\n");
+
+	__asm__ volatile (
+		"movl %0, %%ebp\n\t"
+		"cli\n\t"
+		"leal    _iseg, %%edi\n\t"
+		"jmp     *%%edi\n\t"
+		:: "a"(ebp)
+	);
+
+}





More information about the coreboot mailing list