[OpenBIOS] [commit] r707 - in trunk/openbios-devel/arch: amd64 sparc32 sparc64 x86

repository service svn at openbios.org
Fri Mar 26 21:25:04 CET 2010


Author: mcayland
Date: Fri Mar 26 21:25:04 2010
New Revision: 707
URL: http://tracker.coreboot.org/trac/openbios/changeset/707

Log:
Remove loadfs.c and loadfs.h from all of the various architectures. They appear to be almost non-existent wrappers which add an 
extra layer of indirection without much benefit.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>

Deleted:
   trunk/openbios-devel/arch/amd64/loadfs.c
   trunk/openbios-devel/arch/amd64/loadfs.h
   trunk/openbios-devel/arch/sparc32/loadfs.c
   trunk/openbios-devel/arch/sparc32/loadfs.h
   trunk/openbios-devel/arch/sparc64/loadfs.c
   trunk/openbios-devel/arch/sparc64/loadfs.h
   trunk/openbios-devel/arch/x86/loadfs.c
   trunk/openbios-devel/arch/x86/loadfs.h
Modified:
   trunk/openbios-devel/arch/sparc32/aoutload.c
   trunk/openbios-devel/arch/sparc32/build.xml
   trunk/openbios-devel/arch/sparc32/elfload.c
   trunk/openbios-devel/arch/sparc32/forthload.c
   trunk/openbios-devel/arch/sparc32/linux_load.c
   trunk/openbios-devel/arch/sparc64/aoutload.c
   trunk/openbios-devel/arch/sparc64/build.xml
   trunk/openbios-devel/arch/sparc64/elfload.c
   trunk/openbios-devel/arch/sparc64/fcodeload.c
   trunk/openbios-devel/arch/sparc64/forthload.c
   trunk/openbios-devel/arch/sparc64/linux_load.c
   trunk/openbios-devel/arch/x86/build.xml
   trunk/openbios-devel/arch/x86/elfload.c
   trunk/openbios-devel/arch/x86/forthload.c
   trunk/openbios-devel/arch/x86/linux_load.c

Modified: trunk/openbios-devel/arch/sparc32/aoutload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/aoutload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc32/aoutload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -7,7 +7,7 @@
 #include "kernel/kernel.h"
 #include "arch/common/a.out.h"
 #include "libopenbios/sys_info.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printf printk
 #define debug printk
@@ -15,6 +15,7 @@
 #define addr_fixup(addr) ((addr) & 0x00ffffff)
 
 static char *image_name, *image_version;
+static int fd;
 
 static int check_mem_ranges(struct sys_info *info,
                             unsigned long start,
@@ -61,12 +62,13 @@
 
     image_name = image_version = NULL;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
-    file_seek(offset);
+    seek_io(fd, offset);
 
-    if (lfile_read(&ehdr, sizeof ehdr) != sizeof ehdr) {
+    if (read_io(fd, &ehdr, sizeof ehdr) != sizeof ehdr) {
         debug("Can't read a.out header\n");
         retval = LOADER_NOT_SUPPORT;
         goto out;
@@ -98,19 +100,19 @@
 
     printf("Loading a.out %s...\n", image_name ? image_name : "image");
 
-    file_seek(offset + N_TXTOFF(ehdr));
+    seek_io(fd, offset + N_TXTOFF(ehdr));
 
     if (N_MAGIC(ehdr) == NMAGIC) {
-        if ((unsigned long)lfile_read((void *)start, ehdr.a_text) != ehdr.a_text) {
+        if ((unsigned long)read_io(fd, (void *)start, ehdr.a_text) != ehdr.a_text) {
             printf("Can't read program text segment (size 0x%lx)\n", ehdr.a_text);
             goto out;
         }
-        if ((unsigned long)lfile_read((void *)(start + N_DATADDR(ehdr)), ehdr.a_data) != ehdr.a_data) {
+        if ((unsigned long)read_io(fd, (void *)(start + N_DATADDR(ehdr)), ehdr.a_data) != ehdr.a_data) {
             printf("Can't read program data segment (size 0x%lx)\n", ehdr.a_data);
             goto out;
         }
     } else {
-        if ((unsigned long)lfile_read((void *)start, size) != size) {
+        if ((unsigned long)read_io(fd, (void *)start, size) != size) {
             printf("Can't read program (size 0x%lx)\n", size);
             goto out;
         }
@@ -134,6 +136,6 @@
     retval = 0;
 
 out:
-    file_close();
+    close_io(fd);
     return retval;
 }

Modified: trunk/openbios-devel/arch/sparc32/build.xml
==============================================================================
--- trunk/openbios-devel/arch/sparc32/build.xml	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc32/build.xml	Fri Mar 26 21:25:04 2010	(r707)
@@ -18,7 +18,6 @@
   <object source="elfload.c"/>
   <object source="aoutload.c"/>
   <object source="forthload.c"/>
-  <object source="loadfs.c"/>
   <object source="romvec.c"/>
   <object source="entry.S"/>
   <object source="vectors.S"/>

Modified: trunk/openbios-devel/arch/sparc32/elfload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/elfload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc32/elfload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -10,7 +10,7 @@
 #include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "libopenbios/ipchecksum.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printf printk
 #define debug printk
@@ -18,6 +18,7 @@
 #define addr_fixup(addr) ((addr) & 0x00ffffff)
 
 static char *image_name, *image_version;
+static int fd;
 
 static void *calloc(size_t nmemb, size_t size)
 {
@@ -90,8 +91,8 @@
 	if (phdr[i].p_type != PT_NOTE)
 	    continue;
 	buf = malloc(phdr[i].p_filesz);
-	file_seek(offset + phdr[i].p_offset);
-	if ((uint32_t)lfile_read(buf, phdr[i].p_filesz) != phdr[i].p_filesz) {
+	seek_io(fd, offset + phdr[i].p_offset);
+	if ((uint32_t)read_io(fd, buf, phdr[i].p_filesz) != phdr[i].p_filesz) {
 	    printf("Can't read note segment\n");
 	    goto out;
 	}
@@ -126,7 +127,7 @@
 	}
     }
 out:
-    file_close();
+    close_io(fd);
     if (buf)
 	free(buf);
     return retval;
@@ -147,9 +148,9 @@
 	    continue;
 	debug("segment %d addr:%#x file:%#x mem:%#x ",
               i, addr_fixup(phdr[i].p_paddr), phdr[i].p_filesz, phdr[i].p_memsz);
-	file_seek(offset + phdr[i].p_offset);
+	seek_io(fd, offset + phdr[i].p_offset);
 	debug("loading... ");
-	if ((uint32_t)lfile_read(phys_to_virt(addr_fixup(phdr[i].p_paddr)), phdr[i].p_filesz)
+	if ((uint32_t)read_io(fd, phys_to_virt(addr_fixup(phdr[i].p_paddr)), phdr[i].p_filesz)
 		!= phdr[i].p_filesz) {
 	    printf("Can't read program segment %d\n", i);
 	    return 0;
@@ -316,11 +317,12 @@
 
     image_name = image_version = NULL;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
     for (offset = 0; offset < 16 * 512; offset += 512) {
-        if (lfile_read(&ehdr, sizeof ehdr) != sizeof ehdr) {
+        if (read_io(fd, &ehdr, sizeof ehdr) != sizeof ehdr) {
             debug("Can't read ELF header\n");
             retval = LOADER_NOT_SUPPORT;
             goto out;
@@ -329,7 +331,7 @@
         if (ehdr.e_ident[EI_MAG0] == ELFMAG0)
             break;
 
-        file_seek(offset);
+        seek_io(fd, offset);
     }
 
     if (ehdr.e_ident[EI_MAG0] != ELFMAG0
@@ -350,8 +352,8 @@
 
     phdr_size = ehdr.e_phnum * sizeof *phdr;
     phdr = malloc(phdr_size);
-    file_seek(offset + ehdr.e_phoff);
-    if ((uint32_t)lfile_read(phdr, phdr_size) != phdr_size) {
+    seek_io(fd, offset + ehdr.e_phoff);
+    if ((uint32_t)read_io(fd, phdr, phdr_size) != phdr_size) {
 	printf("Can't read program header\n");
 	goto out;
     }
@@ -397,7 +399,7 @@
     retval = 0;
 
 out:
-    file_close();
+    close_io(fd);
     if (phdr)
 	free(phdr);
     if (boot_notes)

Modified: trunk/openbios-devel/arch/sparc32/forthload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/forthload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc32/forthload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -10,12 +10,13 @@
 #include "kernel/kernel.h"
 #include "libopenbios/bindings.h"
 #include "libopenbios/sys_info.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printk printk
 #define debug printk
 
 static char *forthtext=NULL;
+static int fd;
 
 int forth_load(const char *filename)
 {
@@ -23,10 +24,11 @@
     unsigned long forthsize;
     int retval = -1;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
-    if (lfile_read(magic, 2) != 2) {
+    if (read_io(fd, magic, 2) != 2) {
 	debug("Can't read magic header\n");
 	retval = LOADER_NOT_SUPPORT;
 	goto out;
@@ -38,13 +40,14 @@
 	goto out;
     }
 
-    forthsize = file_size();
-
+    /* Calculate the file size by seeking to the end of the file */
+    seek_io(fd, -1);
+    forthsize = tell(fd);
     forthtext = malloc(forthsize+1);
-    file_seek(0);
+    seek_io(fd, 0);
 
     printk("Loading forth source ...");
-    if ((unsigned long)lfile_read(forthtext, forthsize) != forthsize) {
+    if ((unsigned long)read_io(fd, forthtext, forthsize) != forthsize) {
 	printk("Can't read forth text\n");
 	goto out;
     }

Modified: trunk/openbios-devel/arch/sparc32/linux_load.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/linux_load.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc32/linux_load.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -13,7 +13,7 @@
 #include "libopenbios/bindings.h"
 #include "libopenbios/sys_info.h"
 #include "context.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 
 #define printf printk
@@ -157,6 +157,25 @@
 };
 
 static uint64_t forced_memsize;
+static int fd;
+
+static unsigned long file_size(void)
+{
+	llong fpos, fsize;
+
+	/* Save current position */
+	fpos = tell(fd);
+
+	/* Go to end of file and get position */
+	seek_io(fd, -1);
+	fsize = tell(fd);
+
+	/* Go back to old position */
+	seek_io(fd, 0);
+	seek_io(fd, fpos);
+
+	return fsize;
+}
 
 /* Load the first part the file and check if it's Linux */
 static uint32_t load_linux_header(struct linux_header *hdr)
@@ -164,7 +183,7 @@
     int load_high;
     uint32_t kern_addr;
 
-    if (lfile_read(hdr, sizeof *hdr) != sizeof *hdr) {
+    if (read_io(fd, hdr, sizeof *hdr) != sizeof *hdr) {
 	debug("Can't read Linux header\n");
 	return 0;
     }
@@ -191,8 +210,8 @@
 	printf("Found Linux");
     if (hdr->protocol_version >= 0x200 && hdr->kver_addr) {
 	char kver[256];
-	file_seek(hdr->kver_addr + 0x200);
-	if (lfile_read(kver, sizeof kver) != 0) {
+	seek_io(fd, hdr->kver_addr + 0x200);
+	if (read_io(fd, kver, sizeof kver) != 0) {
 	    kver[255] = 0;
 	    printf(" version %s", kver);
 	}
@@ -412,7 +431,7 @@
     if (hdr->setup_sects == 0)
 	hdr->setup_sects = 4;
     kern_offset = (hdr->setup_sects + 1) * 512;
-    file_seek(kern_offset);
+    seek_io(fd, kern_offset);
     kern_size = file_size() - kern_offset;
     debug("offset=%#x addr=%#x size=%#x\n", kern_offset, kern_addr, kern_size);
 
@@ -425,7 +444,7 @@
 #endif
 
     printf("Loading kernel... ");
-    if ((uint32_t)lfile_read(phys_to_virt(kern_addr), kern_size) != kern_size) {
+    if ((uint32_t)read_io(fd, phys_to_virt(kern_addr), kern_size) != kern_size) {
 	printf("Can't read kernel\n");
 	return 0;
     }
@@ -441,7 +460,8 @@
     uint32_t start, end, size;
     uint64_t forced;
 
-    if (!file_open(initrd_file)) {
+    fd = open_io(initrd_file);
+    if (!fd) {
 	printf("Can't open initrd: %s\n", initrd_file);
 	return -1;
     }
@@ -498,7 +518,7 @@
     }
 
     printf("Loading initrd... ");
-    if ((uint32_t)lfile_read(phys_to_virt(start), size) != size) {
+    if ((uint32_t)read_io(fd, phys_to_virt(start), size) != size) {
 	printf("Can't read initrd\n");
 	return -1;
     }
@@ -507,6 +527,8 @@
     params->initrd_start = start;
     params->initrd_size = size;
 
+    close_io(fd);
+
     return 0;
 }
 
@@ -586,12 +608,13 @@
     uint32_t kern_addr, kern_size;
     char *initrd_file = NULL;
 
-    if (!file_open(file))
+    fd = open_io(file);
+    if (!fd)
 	return -1;
 
     kern_addr = load_linux_header(&hdr);
     if (kern_addr == 0) {
-	file_close();
+	close_io(fd);
 	return LOADER_NOT_SUPPORT;
     }
 

Modified: trunk/openbios-devel/arch/sparc64/aoutload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/aoutload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc64/aoutload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -8,7 +8,7 @@
 #define CONFIG_SPARC64_PAGE_SIZE_8KB
 #include "arch/common/a.out.h"
 #include "libopenbios/sys_info.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printf printk
 #define debug printk
@@ -16,6 +16,7 @@
 #define addr_fixup(addr) ((addr) & 0x00ffffff)
 
 static char *image_name, *image_version;
+static int fd;
 
 static int check_mem_ranges(struct sys_info *info,
                             unsigned long start,
@@ -62,12 +63,13 @@
 
     image_name = image_version = NULL;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
     for (offset = 0; offset < 16 * 512; offset += 512) {
-        file_seek(offset);
-        if (lfile_read(&ehdr, sizeof ehdr) != sizeof ehdr) {
+        seek_io(fd, offset);
+        if (read_io(fd, &ehdr, sizeof ehdr) != sizeof ehdr) {
             debug("Can't read a.out header\n");
             retval = LOADER_NOT_SUPPORT;
             goto out;
@@ -102,19 +104,19 @@
 
     printf("Loading a.out %s...\n", image_name ? image_name : "image");
 
-    file_seek(offset + N_TXTOFF(ehdr));
+    seek_io(fd, offset + N_TXTOFF(ehdr));
 
     if (N_MAGIC(ehdr) == NMAGIC) {
-        if ((unsigned long)lfile_read((void *)start, ehdr.a_text) != ehdr.a_text) {
+        if ((unsigned long)read_io(fd, (void *)start, ehdr.a_text) != ehdr.a_text) {
             printf("Can't read program text segment (size 0x%x)\n", ehdr.a_text);
             goto out;
         }
-        if ((unsigned long)lfile_read((void *)(start + N_DATADDR(ehdr)), ehdr.a_data) != ehdr.a_data) {
+        if ((unsigned long)read_io(fd, (void *)(start + N_DATADDR(ehdr)), ehdr.a_data) != ehdr.a_data) {
             printf("Can't read program data segment (size 0x%x)\n", ehdr.a_data);
             goto out;
         }
     } else {
-        if ((unsigned long)lfile_read((void *)start, size) != size) {
+        if ((unsigned long)read_io(fd, (void *)start, size) != size) {
             printf("Can't read program (size 0x%lx)\n", size);
             goto out;
         }
@@ -134,6 +136,6 @@
     retval = 0;
 
 out:
-    file_close();
+    close_io(fd);
     return retval;
 }

Modified: trunk/openbios-devel/arch/sparc64/build.xml
==============================================================================
--- trunk/openbios-devel/arch/sparc64/build.xml	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc64/build.xml	Fri Mar 26 21:25:04 2010	(r707)
@@ -18,7 +18,6 @@
   <object source="aoutload.c"/>
   <object source="forthload.c"/>
   <object source="fcodeload.c"/>
-  <object source="loadfs.c"/>
   <object source="ofmem_sparc64.c"/>
   <object source="entry.S"/>
   <object source="vectors.S"/>

Modified: trunk/openbios-devel/arch/sparc64/elfload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/elfload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc64/elfload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -10,7 +10,7 @@
 #include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "libopenbios/ipchecksum.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printf printk
 #define debug printk
@@ -18,6 +18,7 @@
 #define addr_fixup(addr) ((addr) & 0x00ffffff)
 
 static char *image_name, *image_version;
+static int fd;
 
 static void *calloc(size_t nmemb, size_t size)
 {
@@ -90,8 +91,8 @@
 	if (phdr[i].p_type != PT_NOTE)
 	    continue;
 	buf = malloc(phdr[i].p_filesz);
-	file_seek(offset + phdr[i].p_offset);
-	if ((uint64_t)lfile_read(buf, phdr[i].p_filesz) != phdr[i].p_filesz) {
+	seek_io(fd, offset + phdr[i].p_offset);
+	if ((uint64_t)read_io(fd, buf, phdr[i].p_filesz) != phdr[i].p_filesz) {
 	    printf("Can't read note segment\n");
 	    goto out;
 	}
@@ -126,7 +127,7 @@
 	}
     }
 out:
-    file_close();
+    close_io(fd);
     if (buf)
 	free(buf);
     return retval;
@@ -147,9 +148,9 @@
 	    continue;
 	debug("segment %d addr:%#llx file:%#llx mem:%#llx ",
               i, addr_fixup(phdr[i].p_paddr), phdr[i].p_filesz, phdr[i].p_memsz);
-	file_seek(offset + phdr[i].p_offset);
+	seek_io(fd, offset + phdr[i].p_offset);
 	debug("loading... ");
-	if ((uint64_t)lfile_read(phys_to_virt(addr_fixup(phdr[i].p_paddr)), phdr[i].p_filesz)
+	if ((uint64_t)read_io(fd, phys_to_virt(addr_fixup(phdr[i].p_paddr)), phdr[i].p_filesz)
 		!= phdr[i].p_filesz) {
 	    printf("Can't read program segment %d\n", i);
 	    return 0;
@@ -315,11 +316,12 @@
 
     image_name = image_version = NULL;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
     for (offset = 0; offset < 16 * 512; offset += 512) {
-        if ((size_t)lfile_read(&ehdr, sizeof ehdr) != sizeof ehdr) {
+        if ((size_t)read_io(fd, &ehdr, sizeof ehdr) != sizeof ehdr) {
             debug("Can't read ELF header\n");
             retval = LOADER_NOT_SUPPORT;
             goto out;
@@ -328,7 +330,7 @@
         if (ehdr.e_ident[EI_MAG0] == ELFMAG0)
             break;
 
-        file_seek(offset);
+        seek_io(fd, offset);
     }
 
     if (ehdr.e_ident[EI_MAG0] != ELFMAG0
@@ -349,8 +351,8 @@
 
     phdr_size = ehdr.e_phnum * sizeof *phdr;
     phdr = malloc(phdr_size);
-    file_seek(offset + ehdr.e_phoff);
-    if ((unsigned long)lfile_read(phdr, phdr_size) != phdr_size) {
+    seek_io(fd, offset + ehdr.e_phoff);
+    if ((unsigned long)read_io(fd, phdr, phdr_size) != phdr_size) {
 	printf("Can't read program header\n");
 	goto out;
     }
@@ -402,7 +404,7 @@
     retval = 0;
 
 out:
-    file_close();
+    close_io(fd);
     if (phdr)
 	free(phdr);
     if (boot_notes)

Modified: trunk/openbios-devel/arch/sparc64/fcodeload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/fcodeload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc64/fcodeload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -6,11 +6,13 @@
 #include "kernel/kernel.h"
 #include "libopenbios/bindings.h"
 #include "libopenbios/sys_info.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printf printk
 #define debug printk
 
+static int fd;
+
 int fcode_load(const char *filename)
 {
     int retval = -1;
@@ -18,12 +20,13 @@
     unsigned long start, size;
     unsigned int offset;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
         goto out;
 
     for (offset = 0; offset < 16 * 512; offset += 512) {
-        file_seek(offset);
-        if (lfile_read(&fcode_header, sizeof(fcode_header))
+        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;
@@ -51,9 +54,9 @@
 
     printf("Loading FCode image...\n");
 
-    file_seek(offset + sizeof(fcode_header));
+    seek_io(fd, offset + sizeof(fcode_header));
 
-    if ((unsigned long)lfile_read((void *)start, size) != size) {
+    if ((unsigned long)read_io(fd, (void *)start, size) != size) {
         printf("Can't read file (size 0x%lx)\n", size);
         goto out;
     }
@@ -70,6 +73,6 @@
     retval = 0;
 
 out:
-    file_close();
+    close_io(fd);
     return retval;
 }

Modified: trunk/openbios-devel/arch/sparc64/forthload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/forthload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc64/forthload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -10,22 +10,25 @@
 #include "kernel/kernel.h"
 #include "libopenbios/bindings.h"
 #include "libopenbios/sys_info.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printk printk
 #define debug printk
 
 static char *forthtext=NULL;
+static int fd;
+
 int forth_load(const char *filename)
 {
     char magic[2];
     unsigned long forthsize;
     int retval = -1;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
-    if (lfile_read(magic, 2) != 2) {
+    if (read_io(fd, magic, 2) != 2) {
 	debug("Can't read magic header\n");
 	retval = LOADER_NOT_SUPPORT;
 	goto out;
@@ -37,19 +40,22 @@
 	goto out;
     }
 
-    forthsize = file_size();
-
+    /* Calculate the file size by seeking to the end of the file */
+    seek_io(fd, -1);
+    forthsize = tell(fd);
     forthtext = malloc(forthsize+1);
-    file_seek(0);
+    seek_io(fd, 0);
 
     printk("Loading forth source ...");
-    if ((unsigned long)lfile_read(forthtext, forthsize) != forthsize) {
+    if ((unsigned long)read_io(fd, forthtext, forthsize) != forthsize) {
 	printk("Can't read forth text\n");
 	goto out;
     }
     forthtext[forthsize]=0;
     printk("ok\n");
 
+    close_io(fd);
+
     PUSH ( (ucell)forthtext );
     PUSH ( (ucell)forthsize );
     fword("eval2");

Modified: trunk/openbios-devel/arch/sparc64/linux_load.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/linux_load.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/sparc64/linux_load.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -13,7 +13,7 @@
 #include "libopenbios/bindings.h"
 #include "libopenbios/sys_info.h"
 #include "context.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 
 #define printf printk
@@ -157,6 +157,25 @@
 };
 
 static uint64_t forced_memsize;
+static int fd;
+
+static unsigned long file_size(void)
+{
+	llong fpos, fsize;
+
+	/* Save current position */
+	fpos = tell(fd);
+
+	/* Go to end of file and get position */
+	seek_io(fd, -1);
+	fsize = tell(fd);
+
+	/* Go back to old position */
+	seek_io(fd, 0);
+	seek_io(fd, fpos);
+
+	return fsize;
+}
 
 /* Load the first part the file and check if it's Linux */
 static uint32_t load_linux_header(struct linux_header *hdr)
@@ -164,7 +183,7 @@
     int load_high;
     uint32_t kern_addr;
 
-    if (lfile_read(hdr, sizeof *hdr) != sizeof *hdr) {
+    if (read_io(fd, hdr, sizeof *hdr) != sizeof *hdr) {
 	debug("Can't read Linux header\n");
 	return 0;
     }
@@ -191,8 +210,8 @@
 	printf("Found Linux");
     if (hdr->protocol_version >= 0x200 && hdr->kver_addr) {
 	char kver[256];
-	file_seek(hdr->kver_addr + 0x200);
-	if (lfile_read(kver, sizeof kver) != 0) {
+	seek_io(fd, hdr->kver_addr + 0x200);
+	if (read_io(fd, kver, sizeof kver) != 0) {
 	    kver[255] = 0;
 	    printf(" version %s", kver);
 	}
@@ -412,7 +431,7 @@
     if (hdr->setup_sects == 0)
 	hdr->setup_sects = 4;
     kern_offset = (hdr->setup_sects + 1) * 512;
-    file_seek(kern_offset);
+    seek_io(fd, kern_offset);
     kern_size = file_size() - kern_offset;
     debug("offset=%#x addr=%#x size=%#x\n", kern_offset, kern_addr, kern_size);
 
@@ -425,7 +444,7 @@
 #endif
 
     printf("Loading kernel... ");
-    if ((uint32_t)lfile_read(phys_to_virt(kern_addr), kern_size) != kern_size) {
+    if ((uint32_t)read_io(fd, phys_to_virt(kern_addr), kern_size) != kern_size) {
 	printf("Can't read kernel\n");
 	return 0;
     }
@@ -441,7 +460,8 @@
     uint32_t start, end, size;
     uint64_t forced;
 
-    if (!file_open(initrd_file)) {
+    fd = open_io(initrd_file);
+    if (!fd) {
 	printf("Can't open initrd: %s\n", initrd_file);
 	return -1;
     }
@@ -498,7 +518,7 @@
     }
 
     printf("Loading initrd... ");
-    if ((uint32_t)lfile_read(phys_to_virt(start), size) != size) {
+    if ((uint32_t)read_io(fd, phys_to_virt(start), size) != size) {
 	printf("Can't read initrd\n");
 	return -1;
     }
@@ -507,6 +527,8 @@
     params->initrd_start = start;
     params->initrd_size = size;
 
+    close_io(fd);
+
     return 0;
 }
 
@@ -586,12 +608,13 @@
     uint32_t kern_addr, kern_size;
     char *initrd_file = NULL;
 
-    if (!file_open(file))
+    fd = open_io(file);
+    if (!fd)
 	return -1;
 
     kern_addr = load_linux_header(&hdr);
     if (kern_addr == 0) {
-	file_close();
+	close_io(fd);
 	return LOADER_NOT_SUPPORT;
     }
 

Modified: trunk/openbios-devel/arch/x86/build.xml
==============================================================================
--- trunk/openbios-devel/arch/x86/build.xml	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/x86/build.xml	Fri Mar 26 21:25:04 2010	(r707)
@@ -16,7 +16,6 @@
   <object source="sys_info.c"/>
   <object source="elfload.c"/>
   <object source="forthload.c"/>
-  <object source="loadfs.c"/>
   <object source="entry.S"/>
   <object source="xbox/console.c" condition="XBOX"/>
   <object source="xbox/methods.c" condition="XBOX"/>

Modified: trunk/openbios-devel/arch/x86/elfload.c
==============================================================================
--- trunk/openbios-devel/arch/x86/elfload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/x86/elfload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -10,7 +10,7 @@
 #include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "libopenbios/ipchecksum.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 
 #define debug printk
@@ -22,6 +22,7 @@
 extern char _start, _end;
 
 static char *image_name, *image_version;
+static int fd;
 
 static void *calloc(size_t nmemb, size_t size)
 {
@@ -94,8 +95,8 @@
 	if (phdr[i].p_type != PT_NOTE)
 	    continue;
 	buf = malloc(phdr[i].p_filesz);
-	file_seek(phdr[i].p_offset);
-	if (lfile_read(buf, phdr[i].p_filesz) != phdr[i].p_filesz) {
+	seek_io(fd, phdr[i].p_offset);
+	if (read_io(fd, buf, phdr[i].p_filesz) != phdr[i].p_filesz) {
 	    printk("Can't read note segment\n");
 	    goto out;
 	}
@@ -149,9 +150,9 @@
 	    continue;
 	debug("segment %d addr:%#x file:%#x mem:%#x ",
 		i, phdr[i].p_paddr, phdr[i].p_filesz, phdr[i].p_memsz);
-	file_seek(phdr[i].p_offset);
+	seek_io(fd, phdr[i].p_offset);
 	debug("loading... ");
-	if (lfile_read(phys_to_virt(phdr[i].p_paddr & ADDRMASK), phdr[i].p_filesz)
+	if (read_io(fd, phys_to_virt(phdr[i].p_paddr & ADDRMASK), phdr[i].p_filesz)
 		!= phdr[i].p_filesz) {
 	    printk("Can't read program segment %d\n", i);
 	    return 0;
@@ -316,10 +317,11 @@
 
     image_name = image_version = NULL;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
-    if (lfile_read(&ehdr, sizeof ehdr) != sizeof ehdr) {
+    if (read_io(fd, &ehdr, sizeof ehdr) != sizeof ehdr) {
 	debug("Can't read ELF header\n");
 	retval = LOADER_NOT_SUPPORT;
 	goto out;
@@ -343,8 +345,8 @@
 
     phdr_size = ehdr.e_phnum * sizeof *phdr;
     phdr = malloc(phdr_size);
-    file_seek(ehdr.e_phoff);
-    if (lfile_read(phdr, phdr_size) != phdr_size) {
+    seek_io(fd, ehdr.e_phoff);
+    if (read_io(fd, phdr, phdr_size) != phdr_size) {
 	printk("Can't read program header\n");
 	goto out;
     }

Modified: trunk/openbios-devel/arch/x86/forthload.c
==============================================================================
--- trunk/openbios-devel/arch/x86/forthload.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/x86/forthload.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -10,22 +10,25 @@
 #include "kernel/kernel.h"
 #include "libopenbios/bindings.h"
 #include "libopenbios/sys_info.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 #define printk printk
 #define debug printk
 
 static char *forthtext=NULL;
+static int fd;
+
 int forth_load(struct sys_info *info, const char *filename, const char *cmdline)
 {
     char magic[2];
     unsigned long forthsize;
     int retval = -1;
 
-    if (!file_open(filename))
+    fd = open_io(filename);
+    if (!fd)
 	goto out;
 
-    if (lfile_read(magic, 2) != 2) {
+    if (read_io(fd, magic, 2) != 2) {
 	debug("Can't read magic header\n");
 	retval = LOADER_NOT_SUPPORT;
 	goto out;
@@ -37,13 +40,14 @@
 	goto out;
     }
 
-    forthsize = file_size();
-
+    /* Calculate the file size by seeking to the end of the file */
+    seek_io(fd, -1);
+    forthsize = tell(fd);
     forthtext = malloc(forthsize+1);
-    file_seek(0);
+    seek_io(fd, 0);
 
     printk("Loading forth source ...");
-    if (lfile_read(forthtext, forthsize) != forthsize) {
+    if (read_io(fd, forthtext, forthsize) != forthsize) {
 	printk("Can't read forth text\n");
 	goto out;
     }

Modified: trunk/openbios-devel/arch/x86/linux_load.c
==============================================================================
--- trunk/openbios-devel/arch/x86/linux_load.c	Thu Mar 25 22:14:00 2010	(r706)
+++ trunk/openbios-devel/arch/x86/linux_load.c	Fri Mar 26 21:25:04 2010	(r707)
@@ -14,7 +14,7 @@
 #include "libopenbios/sys_info.h"
 #include "context.h"
 #include "segment.h"
-#include "loadfs.h"
+#include "libc/diskio.h"
 #include "boot.h"
 
 #define printf printk
@@ -158,6 +158,25 @@
 };
 
 static uint64_t forced_memsize;
+static int fd;
+
+static unsigned long file_size(void)
+{
+	llong fpos, fsize;
+
+	/* Save current position */
+	fpos = tell(fd);
+
+	/* Go to end of file and get position */
+	seek_io(fd, -1);
+	fsize = tell(fd);
+
+	/* Go back to old position */
+	seek_io(fd, 0);
+	seek_io(fd, fpos);
+
+	return fsize;
+}
 
 /* Load the first part the file and check if it's Linux */
 static uint32_t load_linux_header(struct linux_header *hdr)
@@ -165,7 +184,7 @@
     int load_high;
     uint32_t kern_addr;
 
-    if (lfile_read(hdr, sizeof *hdr) != sizeof *hdr) {
+    if (read_io(fd, hdr, sizeof *hdr) != sizeof *hdr) {
 	debug("Can't read Linux header\n");
 	return 0;
     }
@@ -192,8 +211,8 @@
 	printf("Found Linux");
     if (hdr->protocol_version >= 0x200 && hdr->kver_addr) {
 	char kver[256];
-	file_seek(hdr->kver_addr + 0x200);
-	if (lfile_read(kver, sizeof kver) != 0) {
+	seek_io(fd, hdr->kver_addr + 0x200);
+	if (read_io(fd, kver, sizeof kver) != 0) {
 	    kver[255] = 0;
 	    printf(" version %s", kver);
 	}
@@ -413,7 +432,7 @@
     if (hdr->setup_sects == 0)
 	hdr->setup_sects = 4;
     kern_offset = (hdr->setup_sects + 1) * 512;
-    file_seek(kern_offset);
+    seek_io(fd, kern_offset);
     kern_size = file_size() - kern_offset;
     debug("offset=%#x addr=%#x size=%#x\n", kern_offset, kern_addr, kern_size);
 
@@ -426,7 +445,7 @@
 #endif
 
     printf("Loading kernel... ");
-    if (lfile_read(phys_to_virt(kern_addr), kern_size) != kern_size) {
+    if (read_io(fd, phys_to_virt(kern_addr), kern_size) != kern_size) {
 	printf("Can't read kernel\n");
 	return 0;
     }
@@ -443,7 +462,8 @@
     uint64_t forced;
     extern char _start[], _end[];
 
-    if (!file_open(initrd_file)) {
+    fd = open_io(initrd_file);
+    if (!fd) {
 	printf("Can't open initrd: %s\n", initrd_file);
 	return -1;
     }
@@ -500,7 +520,7 @@
     }
 
     printf("Loading initrd... ");
-    if (lfile_read(phys_to_virt(start), size) != size) {
+    if (read_io(fd, phys_to_virt(start), size) != size) {
 	printf("Can't read initrd\n");
 	return -1;
     }
@@ -509,6 +529,8 @@
     params->initrd_start = start;
     params->initrd_size = size;
 
+    close_io(fd);
+
     return 0;
 }
 
@@ -612,7 +634,8 @@
     uint32_t kern_addr, kern_size;
     char *initrd_file = NULL;
 
-    if (!file_open(file))
+    fd = open_io(file);
+    if (!fd)
 	return -1;
 
     kern_addr = load_linux_header(&hdr);



More information about the OpenBIOS mailing list