FreeCalypso > hg > freecalypso-sw
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));