[OpenBIOS] [commit] r714 - in trunk/openbios-devel: arch/sparc64 include/libopenbios libopenbios
repository service
svn at openbios.org
Sat Mar 27 13:09:17 CET 2010
Author: mcayland
Date: Sat Mar 27 13:09:16 2010
New Revision: 714
URL: http://tracker.coreboot.org/trac/openbios/changeset/714
Log:
Move the Fcode loader from arch/*/fcodeload.c to libopenbios/fcode_load.c.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>
Added:
trunk/openbios-devel/include/libopenbios/fcode_load.h
trunk/openbios-devel/libopenbios/fcode_load.c
Deleted:
trunk/openbios-devel/arch/sparc64/fcodeload.c
Modified:
trunk/openbios-devel/arch/sparc64/boot.c
trunk/openbios-devel/arch/sparc64/boot.h
trunk/openbios-devel/arch/sparc64/build.xml
trunk/openbios-devel/libopenbios/build.xml
Modified: trunk/openbios-devel/arch/sparc64/boot.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/boot.c Sat Mar 27 12:59:43 2010 (r713)
+++ trunk/openbios-devel/arch/sparc64/boot.c Sat Mar 27 13:09:16 2010 (r714)
@@ -10,6 +10,7 @@
#include "libopenbios/sys_info.h"
#include "libopenbios/elf_load.h"
#include "libopenbios/aout_load.h"
+#include "libopenbios/fcode_load.h"
#include "boot.h"
struct sys_info sys_info;
Modified: trunk/openbios-devel/arch/sparc64/boot.h
==============================================================================
--- trunk/openbios-devel/arch/sparc64/boot.h Sat Mar 27 12:59:43 2010 (r713)
+++ trunk/openbios-devel/arch/sparc64/boot.h Sat Mar 27 13:09:16 2010 (r714)
@@ -9,9 +9,6 @@
// linux_load.c
int linux_load(struct sys_info *info, const char *file, const char *cmdline);
-// fcodeload.c
-int fcode_load(const char *filename);
-
// context.c
extern struct context * volatile __context;
uint64_t start_elf(uint64_t entry_point, uint64_t param);
Modified: trunk/openbios-devel/arch/sparc64/build.xml
==============================================================================
--- trunk/openbios-devel/arch/sparc64/build.xml Sat Mar 27 12:59:43 2010 (r713)
+++ trunk/openbios-devel/arch/sparc64/build.xml Sat Mar 27 13:09:16 2010 (r714)
@@ -14,7 +14,6 @@
<object source="switch.S"/>
<object source="linux_load.c"/>
<object source="sys_info.c"/>
- <object source="fcodeload.c"/>
<object source="ofmem_sparc64.c"/>
<object source="entry.S"/>
<object source="vectors.S"/>
Added: trunk/openbios-devel/include/libopenbios/fcode_load.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/openbios-devel/include/libopenbios/fcode_load.h Sat Mar 27 13:09:16 2010 (r714)
@@ -0,0 +1,22 @@
+/*
+ * Creation Date: <2010/03/22 18:00:00 mcayland>
+ * Time-stamp: <2010/03/22 18:00:00 mcayland>
+ *
+ * <fcode_load.h>
+ *
+ * Fcode loader
+ *
+ * Copyright (C) 2010 Mark Cave-Ayland (mark.cave-ayland at siriusit.co.uk)
+ *
+ * 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
+ *
+ */
+
+#ifndef _H_FCODELOAD
+#define _H_FCODELOAD
+
+extern int fcode_load(const char *filename);
+
+#endif /* _H_FCODELOAD */
\ No newline at end of file
Modified: trunk/openbios-devel/libopenbios/build.xml
==============================================================================
--- trunk/openbios-devel/libopenbios/build.xml Sat Mar 27 12:59:43 2010 (r713)
+++ trunk/openbios-devel/libopenbios/build.xml Sat Mar 27 13:09:16 2010 (r714)
@@ -17,6 +17,7 @@
<object source="elf_load.c" condition="AMD64"/>
<object source="font_8x8.c" condition="FONT_8X8"/>
<object source="font_8x16.c" condition="FONT_8X16"/>
+ <object source="fcode_load.c" condition="SPARC64"/>
<object source="forth_load.c" condition="X86"/>
<object source="ipchecksum.c"/>
<object source="linuxbios_info.c" condition="LINUXBIOS"/>
Added: trunk/openbios-devel/libopenbios/fcode_load.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/openbios-devel/libopenbios/fcode_load.c Sat Mar 27 13:09:16 2010 (r714)
@@ -0,0 +1,82 @@
+/*
+ * FCode boot loader
+ */
+
+#include "config.h"
+#include "kernel/kernel.h"
+#include "libopenbios/bindings.h"
+#include "libopenbios/fcode_load.h"
+#include "libopenbios/sys_info.h"
+#include "libc/diskio.h"
+#define printf printk
+#define debug printk
+
+static int fd;
+
+int fcode_load(const char *filename)
+{
+ int retval = -1;
+ uint8_t fcode_header[8];
+ unsigned long start, size;
+ unsigned int offset;
+
+ /* Mark the saved-program-state as invalid */
+ feval("0 state-valid !");
+
+ fd = open_io(filename);
+ if (!fd)
+ goto out;
+
+ for (offset = 0; offset < 16 * 512; offset += 512) {
+ seek_io(fd, offset);
+ if (read_io(fd, &fcode_header, sizeof(fcode_header))
+ != sizeof(fcode_header)) {
+ debug("Can't read FCode header from file %s\n", filename);
+ retval = LOADER_NOT_SUPPORT;
+ goto out;
+ }
+ switch (fcode_header[0]) {
+ case 0xf0: // start0
+ case 0xf1: // start1
+ case 0xf2: // start2
+ case 0xf3: // start4
+ case 0xfd: // version1
+ goto found;
+ }
+ }
+
+ debug("Not a bootable FCode image\n");
+ retval = LOADER_NOT_SUPPORT;
+ goto out;
+
+ found:
+ size = (fcode_header[4] << 24) | (fcode_header[5] << 16) |
+ (fcode_header[6] << 8) | fcode_header[7];
+
+ start = 0x4000;
+
+ printf("Loading FCode image...\n");
+
+ seek_io(fd, offset + sizeof(fcode_header));
+
+ if ((size_t)read_io(fd, (void *)start, size) != size) {
+ printf("Can't read file (size 0x%lx)\n", size);
+ goto out;
+ }
+
+ debug("Loaded %lu bytes\n", size);
+ debug("entry point is %#lx\n", start);
+
+ // Initialise saved-program-state
+ PUSH(start);
+ feval("saved-program-state >sps.entry !");
+ PUSH(size);
+ feval("saved-program-state >sps.file-size !");
+ feval("fcode saved-program-state >sps.file-type !");
+
+ feval("-1 state-valid !");
+
+out:
+ close_io(fd);
+ return retval;
+}
More information about the OpenBIOS
mailing list