diff gsm-fw/services/ffs/drv.c @ 226:4d706a4134b0

FFS in gsm-fw: generate the legacy block info table at run time
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 13 Jan 2014 10:15:59 +0000
parents fee45482aa2a
children 0fb9b7f2ef87
line wrap: on
line diff
--- a/gsm-fw/services/ffs/drv.c	Mon Jan 13 09:05:01 2014 +0000
+++ b/gsm-fw/services/ffs/drv.c	Mon Jan 13 10:15:59 2014 +0000
@@ -11,6 +11,7 @@
 #include "../../include/config.h"
 #include "ffs.h"
 #include "drv.h"
+#include "core.h"	/* for FFS_BLOCKS_MAX */
 #include "ffstrace.h"
 #include "intctl.h"
 #include "ramffs.h"
@@ -18,6 +19,13 @@
 
 
 /******************************************************************************
+ * "Block info" stupidity
+ ******************************************************************************/
+
+static struct block_info_s block_info[FFS_BLOCKS_MAX];
+
+
+/******************************************************************************
  * Macros
  ******************************************************************************/
 
@@ -125,24 +133,6 @@
  * RAM Family Functions
  ******************************************************************************/
 
-struct block_info_s ramffs_block_info[RAMFFS_NBLOCKS];
-
-int ffsdrv_ram_init(void)
-{
-    unsigned i;
-    uint32 offset;
-
-    ttw(ttr(TTrDrvOther, "ffsdrv_ram_init()" NL));
-    memset(_RAMFFS_area, 0xFF, RAMFFS_TOTAL_SIZE);
-    offset = 0;
-    for (i = 0; i < RAMFFS_NBLOCKS; i++) {
-	ramffs_block_info[i].offset = offset;
-	ramffs_block_info[i].size_ld = RAMFFS_BLKSIZE_LOG2;
-	offset += RAMFFS_BLKSIZE_BYTES;
-    }
-    return 0;
-}
-
 void ffsdrv_ram_write_halfword(volatile uint16 *dst, uint16 value)
 {
   *dst = value;
@@ -399,6 +389,8 @@
 effs_t ffsdrv_init(void)
 {
     int error;
+    unsigned i;
+    uint32 offset;
 
     tw(tr(TR_BEGIN, TrDrvInit, "drv_init() {\n"));
     ttw(str(TTrDrvOther, "ffsdrv_init() {" NL));
@@ -408,6 +400,14 @@
     dev.atomsize = 1 << dev.atomlog2;
     dev.atomnotmask = dev.atomsize - 1;
 
+    offset = 0;
+    for (i = 0; i < dev.numblocks; i++) {
+	block_info[i].offset = offset;
+	block_info[i].size_ld = dev.blocksize_ld;
+	offset += dev.blocksize;
+    }
+    dev.binfo = block_info;
+
     error = ffsdrv.init();
 
     tw(tr(TR_FUNC, TrDrvInit, "dev.binfo     = 0x%x\n", (unsigned int) dev.binfo));