Renamed config -> cfg
Note this includes both the lfs3_config -> lfs3_cfg structs as well as the LFS3_CONFIG -> LFS3_CFG include define: - LFS3_CONFIG -> LFS3_CFG - struct lfs3_config -> struct lfs3_cfg - struct lfs3_file_config -> struct lfs3_file_cfg - struct lfs3_*bd_config -> struct lfs3_*bd_cfg - cfg -> cfg We were already using cfg as the variable name everywhere. The fact that these names were different was an inconsistency that should be fixed since we're committing to an API break. LFS3_CFG is already out-of-date from upstream, and there's plans for a config rework, but I figured I'd go ahead and change it as well to lower the chances it gets overlooked. --- Note this does _not_ affect LFS3_TAG_CONFIG. Having the on-disk vs driver-level config take slightly different names is not a bad thing.
This commit is contained in:
+32
-32
@@ -46,7 +46,7 @@ static void lfs3_emubd_decblock(lfs3_emubd_block_t *block) {
|
||||
}
|
||||
|
||||
static lfs3_emubd_block_t *lfs3_emubd_mutblock(
|
||||
const struct lfs3_config *cfg,
|
||||
const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_block_t *block) {
|
||||
if (block && block->rc == 1) {
|
||||
// rc == 1? can modify
|
||||
@@ -111,8 +111,8 @@ static uint32_t lfs3_emubd_prng_(uint32_t *state) {
|
||||
|
||||
// emubd create/destroy
|
||||
|
||||
int lfs3_emubd_createcfg(const struct lfs3_config *cfg, const char *path,
|
||||
const struct lfs3_emubd_config *bdcfg) {
|
||||
int lfs3_emubd_createcfg(const struct lfs3_cfg *cfg, const char *path,
|
||||
const struct lfs3_emubd_cfg *bdcfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_createcfg(%p {.context=%p, "
|
||||
".read=%p, .prog=%p, .erase=%p, .sync=%p, "
|
||||
".read_size=%"PRIu32", .prog_size=%"PRIu32", "
|
||||
@@ -241,7 +241,7 @@ failed:;
|
||||
return err;
|
||||
}
|
||||
|
||||
int lfs3_emubd_create(const struct lfs3_config *cfg, const char *path) {
|
||||
int lfs3_emubd_create(const struct lfs3_cfg *cfg, const char *path) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_create(%p {.context=%p, "
|
||||
".read=%p, .prog=%p, .erase=%p, .sync=%p, "
|
||||
".read_size=%"PRIu32", .prog_size=%"PRIu32", "
|
||||
@@ -252,13 +252,13 @@ int lfs3_emubd_create(const struct lfs3_config *cfg, const char *path) {
|
||||
(void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
|
||||
cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count,
|
||||
path);
|
||||
static const struct lfs3_emubd_config defaults = {.erase_value=-1};
|
||||
static const struct lfs3_emubd_cfg defaults = {.erase_value=-1};
|
||||
int err = lfs3_emubd_createcfg(cfg, path, &defaults);
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_create -> %d", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
int lfs3_emubd_destroy(const struct lfs3_config *cfg) {
|
||||
int lfs3_emubd_destroy(const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_destroy(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
|
||||
@@ -297,7 +297,7 @@ int lfs3_emubd_destroy(const struct lfs3_config *cfg) {
|
||||
|
||||
// block device API
|
||||
|
||||
int lfs3_emubd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_emubd_read(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, void *buffer, lfs3_size_t size) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_read(%p, "
|
||||
"0x%"PRIx32", %"PRIu32", %p, %"PRIu32")",
|
||||
@@ -362,7 +362,7 @@ int lfs3_emubd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_emubd_prog(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, const void *buffer, lfs3_size_t size) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_prog(%p, "
|
||||
"0x%"PRIx32", %"PRIu32", %p, %"PRIu32")",
|
||||
@@ -671,7 +671,7 @@ progged:;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_erase(const struct lfs3_config *cfg, lfs3_block_t block) {
|
||||
int lfs3_emubd_erase(const struct lfs3_cfg *cfg, lfs3_block_t block) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_erase(%p, 0x%"PRIx32" (%"PRIu32"))",
|
||||
(void*)cfg, block, cfg->block_size);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
@@ -966,7 +966,7 @@ erased:;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_sync(const struct lfs3_config *cfg) {
|
||||
int lfs3_emubd_sync(const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_sync(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
|
||||
@@ -985,7 +985,7 @@ int lfs3_emubd_sync(const struct lfs3_config *cfg) {
|
||||
|
||||
/// Additional extended API for driving test features ///
|
||||
|
||||
void lfs3_emubd_seed(const struct lfs3_config *cfg, uint32_t seed) {
|
||||
void lfs3_emubd_seed(const struct lfs3_cfg *cfg, uint32_t seed) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_seed(%p, 0x%08"PRIx32")",
|
||||
(void*)cfg, seed);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
@@ -995,7 +995,7 @@ void lfs3_emubd_seed(const struct lfs3_config *cfg, uint32_t seed) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_seed -> _");
|
||||
}
|
||||
|
||||
uint32_t lfs3_emubd_prng(const struct lfs3_config *cfg) {
|
||||
uint32_t lfs3_emubd_prng(const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_prng(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
|
||||
@@ -1005,28 +1005,28 @@ uint32_t lfs3_emubd_prng(const struct lfs3_config *cfg) {
|
||||
return x;
|
||||
}
|
||||
|
||||
lfs3_emubd_sio_t lfs3_emubd_readed(const struct lfs3_config *cfg) {
|
||||
lfs3_emubd_sio_t lfs3_emubd_readed(const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_readed(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_readed -> %"PRIu64, bd->readed);
|
||||
return bd->readed;
|
||||
}
|
||||
|
||||
lfs3_emubd_sio_t lfs3_emubd_proged(const struct lfs3_config *cfg) {
|
||||
lfs3_emubd_sio_t lfs3_emubd_proged(const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_proged(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_proged -> %"PRIu64, bd->proged);
|
||||
return bd->proged;
|
||||
}
|
||||
|
||||
lfs3_emubd_sio_t lfs3_emubd_erased(const struct lfs3_config *cfg) {
|
||||
lfs3_emubd_sio_t lfs3_emubd_erased(const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_erased(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_erased -> %"PRIu64, bd->erased);
|
||||
return bd->erased;
|
||||
}
|
||||
|
||||
int lfs3_emubd_setreaded(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setreaded(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_io_t readed) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_setreaded(%p, %"PRIu64")", (void*)cfg, readed);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
@@ -1035,7 +1035,7 @@ int lfs3_emubd_setreaded(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_setproged(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setproged(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_io_t proged) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_setproged(%p, %"PRIu64")", (void*)cfg, proged);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
@@ -1044,7 +1044,7 @@ int lfs3_emubd_setproged(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_seterased(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_seterased(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_io_t erased) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_seterased(%p, %"PRIu64")", (void*)cfg, erased);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
@@ -1053,7 +1053,7 @@ int lfs3_emubd_seterased(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
lfs3_emubd_swear_t lfs3_emubd_wear(const struct lfs3_config *cfg,
|
||||
lfs3_emubd_swear_t lfs3_emubd_wear(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_wear(%p, %"PRIu32")", (void*)cfg, block);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
@@ -1074,7 +1074,7 @@ lfs3_emubd_swear_t lfs3_emubd_wear(const struct lfs3_config *cfg,
|
||||
return wear;
|
||||
}
|
||||
|
||||
int lfs3_emubd_setwear(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setwear(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_emubd_wear_t wear) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_setwear(%p, %"PRIu32", %"PRIi32")",
|
||||
(void*)cfg, block, wear);
|
||||
@@ -1098,7 +1098,7 @@ int lfs3_emubd_setwear(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_markbad(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_markbad(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_markbad(%p, %"PRIu32")",
|
||||
(void*)cfg, block);
|
||||
@@ -1128,7 +1128,7 @@ int lfs3_emubd_markbad(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_markgood(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_markgood(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_markgood(%p, %"PRIu32")",
|
||||
(void*)cfg, block);
|
||||
@@ -1152,7 +1152,7 @@ int lfs3_emubd_markgood(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
lfs3_ssize_t lfs3_emubd_badbit(const struct lfs3_config *cfg,
|
||||
lfs3_ssize_t lfs3_emubd_badbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_badbit(%p, %"PRIu32")", (void*)cfg, block);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
@@ -1173,7 +1173,7 @@ lfs3_ssize_t lfs3_emubd_badbit(const struct lfs3_config *cfg,
|
||||
return bad_bit;
|
||||
}
|
||||
|
||||
int lfs3_emubd_setbadbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setbadbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_size_t bit) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_setbadbit(%p, %"PRIu32", %"PRIu32")",
|
||||
(void*)cfg, block, bit);
|
||||
@@ -1197,7 +1197,7 @@ int lfs3_emubd_setbadbit(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_randomizebadbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_randomizebadbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_randomizebadbit(%p, %"PRIu32")",
|
||||
(void*)cfg, block);
|
||||
@@ -1221,7 +1221,7 @@ int lfs3_emubd_randomizebadbit(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_markbadbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_markbadbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_size_t bit) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_markbadbit(%p, %"PRIu32", %"PRIu32")",
|
||||
(void*)cfg, block, bit);
|
||||
@@ -1247,7 +1247,7 @@ int lfs3_emubd_markbadbit(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_flipbit_(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_flipbit_(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_size_t bit) {
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
|
||||
@@ -1285,7 +1285,7 @@ int lfs3_emubd_flipbit_(const struct lfs3_config *cfg,
|
||||
}
|
||||
|
||||
|
||||
int lfs3_emubd_flipbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_flipbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_size_t bit) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_flipbit(%p, %"PRIu32", %"PRIu32")",
|
||||
(void*)cfg, block, bit);
|
||||
@@ -1301,7 +1301,7 @@ int lfs3_emubd_flipbit(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_flip(const struct lfs3_config *cfg) {
|
||||
int lfs3_emubd_flip(const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_flip(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
|
||||
@@ -1323,7 +1323,7 @@ int lfs3_emubd_flip(const struct lfs3_config *cfg) {
|
||||
}
|
||||
|
||||
lfs3_emubd_spowercycles_t lfs3_emubd_powercycles(
|
||||
const struct lfs3_config *cfg) {
|
||||
const struct lfs3_cfg *cfg) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_powercycles(%p)", (void*)cfg);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
|
||||
@@ -1331,7 +1331,7 @@ lfs3_emubd_spowercycles_t lfs3_emubd_powercycles(
|
||||
return bd->power_cycles;
|
||||
}
|
||||
|
||||
int lfs3_emubd_setpowercycles(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setpowercycles(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_powercycles_t power_cycles) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_setpowercycles(%p, %"PRIi32")",
|
||||
(void*)cfg, power_cycles);
|
||||
@@ -1343,7 +1343,7 @@ int lfs3_emubd_setpowercycles(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_emubd_cpy(const struct lfs3_config *cfg, lfs3_emubd_t *copy) {
|
||||
int lfs3_emubd_cpy(const struct lfs3_cfg *cfg, lfs3_emubd_t *copy) {
|
||||
LFS3_EMUBD_TRACE("lfs3_emubd_cpy(%p, %p)", (void*)cfg, (void*)copy);
|
||||
lfs3_emubd_t *bd = cfg->context;
|
||||
|
||||
|
||||
+32
-32
@@ -65,7 +65,7 @@ typedef uint64_t lfs3_emubd_sleep_t;
|
||||
typedef int64_t lfs3_emubd_ssleep_t;
|
||||
|
||||
// emubd config, this is required for testing
|
||||
struct lfs3_emubd_config {
|
||||
struct lfs3_emubd_cfg {
|
||||
// 8-bit erase value to use for simulating erases. -1 simulates a noop
|
||||
// erase, which is faster than simulating a fixed erase value.
|
||||
int32_t erase_value;
|
||||
@@ -147,119 +147,119 @@ typedef struct lfs3_emubd {
|
||||
lfs3_emubd_block_t **ooo_after;
|
||||
lfs3_emubd_disk_t *disk;
|
||||
|
||||
const struct lfs3_emubd_config *cfg;
|
||||
const struct lfs3_emubd_cfg *cfg;
|
||||
} lfs3_emubd_t;
|
||||
|
||||
|
||||
/// Block device API ///
|
||||
|
||||
// Create an emulating block device using the geometry in lfs3_config
|
||||
// Create an emulating block device using the geometry in lfs3_cfg
|
||||
//
|
||||
// Note that filebd is used if a path is provided, if path is NULL
|
||||
// emubd will use rambd which can be much faster.
|
||||
int lfs3_emubd_create(const struct lfs3_config *cfg, const char *path);
|
||||
int lfs3_emubd_createcfg(const struct lfs3_config *cfg, const char *path,
|
||||
const struct lfs3_emubd_config *bdcfg);
|
||||
int lfs3_emubd_create(const struct lfs3_cfg *cfg, const char *path);
|
||||
int lfs3_emubd_createcfg(const struct lfs3_cfg *cfg, const char *path,
|
||||
const struct lfs3_emubd_cfg *bdcfg);
|
||||
|
||||
// Clean up memory associated with block device
|
||||
int lfs3_emubd_destroy(const struct lfs3_config *cfg);
|
||||
int lfs3_emubd_destroy(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Read a block
|
||||
int lfs3_emubd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_emubd_read(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, void *buffer, lfs3_size_t size);
|
||||
|
||||
// Program a block
|
||||
//
|
||||
// The block must have previously been erased.
|
||||
int lfs3_emubd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_emubd_prog(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, const void *buffer, lfs3_size_t size);
|
||||
|
||||
// Erase a block
|
||||
//
|
||||
// A block must be erased before being programmed. The
|
||||
// state of an erased block is undefined.
|
||||
int lfs3_emubd_erase(const struct lfs3_config *cfg, lfs3_block_t block);
|
||||
int lfs3_emubd_erase(const struct lfs3_cfg *cfg, lfs3_block_t block);
|
||||
|
||||
// Sync the block device
|
||||
int lfs3_emubd_sync(const struct lfs3_config *cfg);
|
||||
int lfs3_emubd_sync(const struct lfs3_cfg *cfg);
|
||||
|
||||
|
||||
/// Additional extended API for driving test features ///
|
||||
|
||||
// Set the current prng state
|
||||
void lfs3_emubd_seed(const struct lfs3_config *cfg, uint32_t seed);
|
||||
void lfs3_emubd_seed(const struct lfs3_cfg *cfg, uint32_t seed);
|
||||
|
||||
// Get a pseudo-random number from emubd's internal prng
|
||||
uint32_t lfs3_emubd_prng(const struct lfs3_config *cfg);
|
||||
uint32_t lfs3_emubd_prng(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Get total amount of bytes read
|
||||
lfs3_emubd_sio_t lfs3_emubd_readed(const struct lfs3_config *cfg);
|
||||
lfs3_emubd_sio_t lfs3_emubd_readed(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Get total amount of bytes programmed
|
||||
lfs3_emubd_sio_t lfs3_emubd_proged(const struct lfs3_config *cfg);
|
||||
lfs3_emubd_sio_t lfs3_emubd_proged(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Get total amount of bytes erased
|
||||
lfs3_emubd_sio_t lfs3_emubd_erased(const struct lfs3_config *cfg);
|
||||
lfs3_emubd_sio_t lfs3_emubd_erased(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Manually set amount of bytes read
|
||||
int lfs3_emubd_setreaded(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setreaded(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_io_t readed);
|
||||
|
||||
// Manually set amount of bytes programmed
|
||||
int lfs3_emubd_setproged(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setproged(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_io_t proged);
|
||||
|
||||
// Manually set amount of bytes erased
|
||||
int lfs3_emubd_seterased(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_seterased(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_io_t erased);
|
||||
|
||||
// Get simulated wear on a given block
|
||||
lfs3_emubd_swear_t lfs3_emubd_wear(const struct lfs3_config *cfg,
|
||||
lfs3_emubd_swear_t lfs3_emubd_wear(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block);
|
||||
|
||||
// Manually set simulated wear on a given block
|
||||
int lfs3_emubd_setwear(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setwear(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_emubd_wear_t wear);
|
||||
|
||||
// Mark a block as bad, this is equivalent to setting wear to maximum
|
||||
int lfs3_emubd_markbad(const struct lfs3_config *cfg, lfs3_block_t block);
|
||||
int lfs3_emubd_markbad(const struct lfs3_cfg *cfg, lfs3_block_t block);
|
||||
|
||||
// Clear any simulated wear on a given block
|
||||
int lfs3_emubd_markgood(const struct lfs3_config *cfg, lfs3_block_t block);
|
||||
int lfs3_emubd_markgood(const struct lfs3_cfg *cfg, lfs3_block_t block);
|
||||
|
||||
// Get which bit failed, this changes on erase/power-loss unless manually set
|
||||
lfs3_ssize_t lfs3_emubd_badbit(const struct lfs3_config *cfg,
|
||||
lfs3_ssize_t lfs3_emubd_badbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block);
|
||||
|
||||
// Set which bit should fail in a given block
|
||||
int lfs3_emubd_setbadbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setbadbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_size_t bit);
|
||||
|
||||
// Randomize the bad bit on erase (the default)
|
||||
int lfs3_emubd_randomizebadbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_randomizebadbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block);
|
||||
|
||||
// Mark a block as bad and which bit should fail
|
||||
int lfs3_emubd_markbadbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_markbadbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_size_t bit);
|
||||
|
||||
// Flip a bit in a given block, intended for emulating bit errors
|
||||
int lfs3_emubd_flipbit(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_flipbit(const struct lfs3_cfg *cfg,
|
||||
lfs3_block_t block, lfs3_size_t bit);
|
||||
|
||||
// Flip all bits marked as bad
|
||||
int lfs3_emubd_flip(const struct lfs3_config *cfg);
|
||||
int lfs3_emubd_flip(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Get the remaining power-cycles
|
||||
lfs3_emubd_spowercycles_t lfs3_emubd_powercycles(
|
||||
const struct lfs3_config *cfg);
|
||||
const struct lfs3_cfg *cfg);
|
||||
|
||||
// Manually set the remaining power-cycles
|
||||
int lfs3_emubd_setpowercycles(const struct lfs3_config *cfg,
|
||||
int lfs3_emubd_setpowercycles(const struct lfs3_cfg *cfg,
|
||||
lfs3_emubd_powercycles_t power_cycles);
|
||||
|
||||
// Create a copy-on-write copy of the state of this block device
|
||||
int lfs3_emubd_cpy(const struct lfs3_config *cfg, lfs3_emubd_t *copy);
|
||||
int lfs3_emubd_cpy(const struct lfs3_cfg *cfg, lfs3_emubd_t *copy);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
+6
-6
@@ -15,7 +15,7 @@
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
int lfs3_filebd_create(const struct lfs3_config *cfg, const char *path) {
|
||||
int lfs3_filebd_create(const struct lfs3_cfg *cfg, const char *path) {
|
||||
LFS3_FILEBD_TRACE("lfs3_filebd_create(%p {.context=%p, "
|
||||
".read=%p, .prog=%p, .erase=%p, .sync=%p, "
|
||||
".read_size=%"PRIu32", .prog_size=%"PRIu32", "
|
||||
@@ -45,7 +45,7 @@ int lfs3_filebd_create(const struct lfs3_config *cfg, const char *path) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_filebd_destroy(const struct lfs3_config *cfg) {
|
||||
int lfs3_filebd_destroy(const struct lfs3_cfg *cfg) {
|
||||
LFS3_FILEBD_TRACE("lfs3_filebd_destroy(%p)", (void*)cfg);
|
||||
lfs3_filebd_t *bd = cfg->context;
|
||||
int err = close(bd->fd);
|
||||
@@ -58,7 +58,7 @@ int lfs3_filebd_destroy(const struct lfs3_config *cfg) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_filebd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_filebd_read(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, void *buffer, lfs3_size_t size) {
|
||||
LFS3_FILEBD_TRACE("lfs3_filebd_read(%p, "
|
||||
"0x%"PRIx32", %"PRIu32", %p, %"PRIu32")",
|
||||
@@ -94,7 +94,7 @@ int lfs3_filebd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_filebd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_filebd_prog(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, const void *buffer, lfs3_size_t size) {
|
||||
LFS3_FILEBD_TRACE("lfs3_filebd_prog(%p, "
|
||||
"0x%"PRIx32", %"PRIu32", %p, %"PRIu32")",
|
||||
@@ -127,7 +127,7 @@ int lfs3_filebd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_filebd_erase(const struct lfs3_config *cfg, lfs3_block_t block) {
|
||||
int lfs3_filebd_erase(const struct lfs3_cfg *cfg, lfs3_block_t block) {
|
||||
LFS3_FILEBD_TRACE("lfs3_filebd_erase(%p, 0x%"PRIx32" (%"PRIu32"))",
|
||||
(void*)cfg, block, cfg->block_size);
|
||||
|
||||
@@ -141,7 +141,7 @@ int lfs3_filebd_erase(const struct lfs3_config *cfg, lfs3_block_t block) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_filebd_sync(const struct lfs3_config *cfg) {
|
||||
int lfs3_filebd_sync(const struct lfs3_cfg *cfg) {
|
||||
LFS3_FILEBD_TRACE("lfs3_filebd_sync(%p)", (void*)cfg);
|
||||
|
||||
// file sync
|
||||
|
||||
+7
-7
@@ -27,30 +27,30 @@ typedef struct lfs3_filebd {
|
||||
} lfs3_filebd_t;
|
||||
|
||||
|
||||
// Create a file block device using the geometry in lfs3_config
|
||||
int lfs3_filebd_create(const struct lfs3_config *cfg, const char *path);
|
||||
// Create a file block device using the geometry in lfs3_cfg
|
||||
int lfs3_filebd_create(const struct lfs3_cfg *cfg, const char *path);
|
||||
|
||||
// Clean up memory associated with block device
|
||||
int lfs3_filebd_destroy(const struct lfs3_config *cfg);
|
||||
int lfs3_filebd_destroy(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Read a block
|
||||
int lfs3_filebd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_filebd_read(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, void *buffer, lfs3_size_t size);
|
||||
|
||||
// Program a block
|
||||
//
|
||||
// The block must have previously been erased.
|
||||
int lfs3_filebd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_filebd_prog(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, const void *buffer, lfs3_size_t size);
|
||||
|
||||
// Erase a block
|
||||
//
|
||||
// A block must be erased before being programmed. The
|
||||
// state of an erased block is undefined.
|
||||
int lfs3_filebd_erase(const struct lfs3_config *cfg, lfs3_block_t block);
|
||||
int lfs3_filebd_erase(const struct lfs3_cfg *cfg, lfs3_block_t block);
|
||||
|
||||
// Sync the block device
|
||||
int lfs3_filebd_sync(const struct lfs3_config *cfg);
|
||||
int lfs3_filebd_sync(const struct lfs3_cfg *cfg);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
+9
-9
@@ -7,8 +7,8 @@
|
||||
*/
|
||||
#include "bd/lfs3_rambd.h"
|
||||
|
||||
int lfs3_rambd_createcfg(const struct lfs3_config *cfg,
|
||||
const struct lfs3_rambd_config *bdcfg) {
|
||||
int lfs3_rambd_createcfg(const struct lfs3_cfg *cfg,
|
||||
const struct lfs3_rambd_cfg *bdcfg) {
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_createcfg(%p {.context=%p, "
|
||||
".read=%p, .prog=%p, .erase=%p, .sync=%p, "
|
||||
".read_size=%"PRIu32", .prog_size=%"PRIu32", "
|
||||
@@ -40,7 +40,7 @@ int lfs3_rambd_createcfg(const struct lfs3_config *cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_rambd_create(const struct lfs3_config *cfg) {
|
||||
int lfs3_rambd_create(const struct lfs3_cfg *cfg) {
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_create(%p {.context=%p, "
|
||||
".read=%p, .prog=%p, .erase=%p, .sync=%p, "
|
||||
".read_size=%"PRIu32", .prog_size=%"PRIu32", "
|
||||
@@ -49,13 +49,13 @@ int lfs3_rambd_create(const struct lfs3_config *cfg) {
|
||||
(void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog,
|
||||
(void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
|
||||
cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count);
|
||||
static const struct lfs3_rambd_config defaults = {0};
|
||||
static const struct lfs3_rambd_cfg defaults = {0};
|
||||
int err = lfs3_rambd_createcfg(cfg, &defaults);
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_create -> %d", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
int lfs3_rambd_destroy(const struct lfs3_config *cfg) {
|
||||
int lfs3_rambd_destroy(const struct lfs3_cfg *cfg) {
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_destroy(%p)", (void*)cfg);
|
||||
// clean up memory
|
||||
lfs3_rambd_t *bd = cfg->context;
|
||||
@@ -66,7 +66,7 @@ int lfs3_rambd_destroy(const struct lfs3_config *cfg) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_rambd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_rambd_read(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, void *buffer, lfs3_size_t size) {
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_read(%p, "
|
||||
"0x%"PRIx32", %"PRIu32", %p, %"PRIu32")",
|
||||
@@ -86,7 +86,7 @@ int lfs3_rambd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_rambd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_rambd_prog(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, const void *buffer, lfs3_size_t size) {
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_prog(%p, "
|
||||
"0x%"PRIx32", %"PRIu32", %p, %"PRIu32")",
|
||||
@@ -106,7 +106,7 @@ int lfs3_rambd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_rambd_erase(const struct lfs3_config *cfg, lfs3_block_t block) {
|
||||
int lfs3_rambd_erase(const struct lfs3_cfg *cfg, lfs3_block_t block) {
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_erase(%p, 0x%"PRIx32" (%"PRIu32"))",
|
||||
(void*)cfg, block, cfg->block_size);
|
||||
|
||||
@@ -120,7 +120,7 @@ int lfs3_rambd_erase(const struct lfs3_config *cfg, lfs3_block_t block) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_rambd_sync(const struct lfs3_config *cfg) {
|
||||
int lfs3_rambd_sync(const struct lfs3_cfg *cfg) {
|
||||
LFS3_RAMBD_TRACE("lfs3_rambd_sync(%p)", (void*)cfg);
|
||||
|
||||
// sync is a noop
|
||||
|
||||
+11
-11
@@ -22,7 +22,7 @@
|
||||
#endif
|
||||
|
||||
// rambd config (optional)
|
||||
struct lfs3_rambd_config {
|
||||
struct lfs3_rambd_cfg {
|
||||
// Optional statically allocated buffer for the block device.
|
||||
void *buffer;
|
||||
};
|
||||
@@ -30,36 +30,36 @@ struct lfs3_rambd_config {
|
||||
// rambd state
|
||||
typedef struct lfs3_rambd {
|
||||
uint8_t *buffer;
|
||||
const struct lfs3_rambd_config *cfg;
|
||||
const struct lfs3_rambd_cfg *cfg;
|
||||
} lfs3_rambd_t;
|
||||
|
||||
|
||||
// Create a RAM block device using the geometry in lfs3_config
|
||||
int lfs3_rambd_create(const struct lfs3_config *cfg);
|
||||
int lfs3_rambd_createcfg(const struct lfs3_config *cfg,
|
||||
const struct lfs3_rambd_config *bdcfg);
|
||||
// Create a RAM block device using the geometry in lfs3_cfg
|
||||
int lfs3_rambd_create(const struct lfs3_cfg *cfg);
|
||||
int lfs3_rambd_createcfg(const struct lfs3_cfg *cfg,
|
||||
const struct lfs3_rambd_cfg *bdcfg);
|
||||
|
||||
// Clean up memory associated with block device
|
||||
int lfs3_rambd_destroy(const struct lfs3_config *cfg);
|
||||
int lfs3_rambd_destroy(const struct lfs3_cfg *cfg);
|
||||
|
||||
// Read a block
|
||||
int lfs3_rambd_read(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_rambd_read(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, void *buffer, lfs3_size_t size);
|
||||
|
||||
// Program a block
|
||||
//
|
||||
// The block must have previously been erased.
|
||||
int lfs3_rambd_prog(const struct lfs3_config *cfg, lfs3_block_t block,
|
||||
int lfs3_rambd_prog(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
lfs3_off_t off, const void *buffer, lfs3_size_t size);
|
||||
|
||||
// Erase a block
|
||||
//
|
||||
// A block must be erased before being programmed. The
|
||||
// state of an erased block is undefined.
|
||||
int lfs3_rambd_erase(const struct lfs3_config *cfg, lfs3_block_t block);
|
||||
int lfs3_rambd_erase(const struct lfs3_cfg *cfg, lfs3_block_t block);
|
||||
|
||||
// Sync the block device
|
||||
int lfs3_rambd_sync(const struct lfs3_config *cfg);
|
||||
int lfs3_rambd_sync(const struct lfs3_cfg *cfg);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user