Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/littlefs-project/littlefs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Haster <chaster@utexas.edu>2020-11-26 20:24:19 +0300
committerChristopher Haster <chaster@utexas.edu>2020-11-29 05:11:36 +0300
commit30ed816febdedd71fecbe925e2c157ce6cb003ce (patch)
tree9bc72cca5edd0f23d11b593ff7dd780ae438b6ae /bd/lfs_rambd.c
parenta7cdd563f650337ba4dd24b3be94d644f221cb57 (diff)
Standardized on externally provided config structs in the block devices
I have another branch where I tried exploring inlined config structs backed by RAM, but this did not work out due to additional RAM and ROM costs. Changing the bds to follow this was surprisingly annoying, as they had a lot of shared geometry that was previously in a single shared config object, and the way that testbd contains either of rambd and filebd made configuring all three of these a bit complicated. Ended up settling on a lfs_testbd_cfg that contains optional pointers to lfs_rambd_cfg and lfs_filebd_cfg. These can be NULL, but only if that bd goes unused.
Diffstat (limited to 'bd/lfs_rambd.c')
-rw-r--r--bd/lfs_rambd.c48
1 files changed, 23 insertions, 25 deletions
diff --git a/bd/lfs_rambd.c b/bd/lfs_rambd.c
index c9e78ad..3a443f4 100644
--- a/bd/lfs_rambd.c
+++ b/bd/lfs_rambd.c
@@ -15,15 +15,13 @@ int lfs_rambd_createcfg(lfs_rambd_t *bd,
(void*)bd, (void*)cfg,
cfg->read_size, cfg->prog_size, cfg->erase_size, cfg->erase_count,
cfg->erase_value, cfg->buffer);
-
- // copy over config
- bd->cfg = *cfg;
+ bd->cfg = cfg;
// allocate buffer?
- if (bd->cfg.buffer) {
- bd->buffer = bd->cfg.buffer;
+ if (bd->cfg->buffer) {
+ bd->buffer = bd->cfg->buffer;
} else {
- bd->buffer = lfs_malloc(bd->cfg.erase_size * bd->cfg.erase_count);
+ bd->buffer = lfs_malloc(bd->cfg->erase_size * bd->cfg->erase_count);
if (!bd->buffer) {
LFS_RAMBD_TRACE("lfs_rambd_createcfg -> %d", LFS_ERR_NOMEM);
return LFS_ERR_NOMEM;
@@ -31,9 +29,9 @@ int lfs_rambd_createcfg(lfs_rambd_t *bd,
}
// zero for reproducability?
- if (bd->cfg.erase_value != -1) {
- memset(bd->buffer, bd->cfg.erase_value,
- bd->cfg.erase_size * bd->cfg.erase_count);
+ if (bd->cfg->erase_value != -1) {
+ memset(bd->buffer, bd->cfg->erase_value,
+ bd->cfg->erase_size * bd->cfg->erase_count);
}
LFS_RAMBD_TRACE("lfs_rambd_createcfg -> %d", 0);
@@ -43,7 +41,7 @@ int lfs_rambd_createcfg(lfs_rambd_t *bd,
int lfs_rambd_destroy(lfs_rambd_t *bd) {
LFS_RAMBD_TRACE("lfs_rambd_destroy(%p)", (void*)bd);
// clean up memory
- if (!bd->cfg.buffer) {
+ if (!bd->cfg->buffer) {
lfs_free(bd->buffer);
}
LFS_RAMBD_TRACE("lfs_rambd_destroy -> %d", 0);
@@ -57,12 +55,12 @@ int lfs_rambd_read(lfs_rambd_t *bd, lfs_block_t block,
(void*)bd, block, off, buffer, size);
// check if read is valid
- LFS_ASSERT(off % bd->cfg.read_size == 0);
- LFS_ASSERT(size % bd->cfg.read_size == 0);
- LFS_ASSERT(block < bd->cfg.erase_count);
+ LFS_ASSERT(off % bd->cfg->read_size == 0);
+ LFS_ASSERT(size % bd->cfg->read_size == 0);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// read data
- memcpy(buffer, &bd->buffer[block*bd->cfg.erase_size + off], size);
+ memcpy(buffer, &bd->buffer[block*bd->cfg->erase_size + off], size);
LFS_RAMBD_TRACE("lfs_rambd_read -> %d", 0);
return 0;
@@ -75,20 +73,20 @@ int lfs_rambd_prog(lfs_rambd_t *bd, lfs_block_t block,
(void*)bd, block, off, buffer, size);
// check if write is valid
- LFS_ASSERT(off % bd->cfg.prog_size == 0);
- LFS_ASSERT(size % bd->cfg.prog_size == 0);
- LFS_ASSERT(block < bd->cfg.erase_count);
+ LFS_ASSERT(off % bd->cfg->prog_size == 0);
+ LFS_ASSERT(size % bd->cfg->prog_size == 0);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// check that data was erased? only needed for testing
- if (bd->cfg.erase_value != -1) {
+ if (bd->cfg->erase_value != -1) {
for (lfs_off_t i = 0; i < size; i++) {
- LFS_ASSERT(bd->buffer[block*bd->cfg.erase_size + off + i] ==
- bd->cfg.erase_value);
+ LFS_ASSERT(bd->buffer[block*bd->cfg->erase_size + off + i] ==
+ bd->cfg->erase_value);
}
}
// program data
- memcpy(&bd->buffer[block*bd->cfg.erase_size + off], buffer, size);
+ memcpy(&bd->buffer[block*bd->cfg->erase_size + off], buffer, size);
LFS_RAMBD_TRACE("lfs_rambd_prog -> %d", 0);
return 0;
@@ -98,12 +96,12 @@ int lfs_rambd_erase(lfs_rambd_t *bd, lfs_block_t block) {
LFS_RAMBD_TRACE("lfs_rambd_erase(%p, 0x%"PRIx32")", (void*)bd, block);
// check if erase is valid
- LFS_ASSERT(block < bd->cfg.erase_count);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// erase, only needed for testing
- if (bd->cfg.erase_value != -1) {
- memset(&bd->buffer[block*bd->cfg.erase_size],
- bd->cfg.erase_value, bd->cfg.erase_size);
+ if (bd->cfg->erase_value != -1) {
+ memset(&bd->buffer[block*bd->cfg->erase_size],
+ bd->cfg->erase_value, bd->cfg->erase_size);
}
LFS_RAMBD_TRACE("lfs_rambd_erase -> %d", 0);