Lines Matching refs:cfg
49 const struct lfs_config *cfg,
51 lfs_emubd_t *bd = cfg->context;
60 sizeof(lfs_emubd_block_t) + bd->cfg->erase_size);
66 sizeof(lfs_emubd_block_t) + bd->cfg->erase_size);
76 sizeof(lfs_emubd_block_t) + bd->cfg->erase_size);
86 (bd->cfg->erase_value != -1) ? bd->cfg->erase_value : 0,
87 bd->cfg->erase_size);
97 int lfs_emubd_create(const struct lfs_config *cfg,
107 (void*)cfg, cfg->context,
108 (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog,
109 (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
116 lfs_emubd_t *bd = cfg->context;
117 bd->cfg = bdcfg;
120 bd->blocks = malloc(bd->cfg->erase_count * sizeof(lfs_emubd_block_t*));
125 memset(bd->blocks, 0, bd->cfg->erase_count * sizeof(lfs_emubd_block_t*));
131 bd->power_cycles = bd->cfg->power_cycles;
134 if (bd->cfg->disk_path) {
144 bd->disk->fd = open(bd->cfg->disk_path,
147 bd->disk->fd = open(bd->cfg->disk_path,
158 if (bd->cfg->erase_value != -1) {
159 bd->disk->scratch = malloc(bd->cfg->erase_size);
165 bd->cfg->erase_value,
166 bd->cfg->erase_size);
170 for (size_t i = 0; i < bd->cfg->erase_count; i++) {
173 bd->cfg->erase_size);
187 int lfs_emubd_destroy(const struct lfs_config *cfg) {
188 LFS_EMUBD_TRACE("lfs_emubd_destroy(%p)", (void*)cfg);
189 lfs_emubd_t *bd = cfg->context;
192 for (lfs_block_t i = 0; i < bd->cfg->erase_count; i++) {
215 int lfs_emubd_read(const struct lfs_config *cfg, lfs_block_t block,
219 (void*)cfg, block, off, buffer, size);
220 lfs_emubd_t *bd = cfg->context;
223 LFS_ASSERT(block < bd->cfg->erase_count);
224 LFS_ASSERT(off % bd->cfg->read_size == 0);
225 LFS_ASSERT(size % bd->cfg->read_size == 0);
226 LFS_ASSERT(off+size <= bd->cfg->erase_size);
232 if (bd->cfg->erase_cycles && b->wear >= bd->cfg->erase_cycles &&
233 bd->cfg->badblock_behavior == LFS_EMUBD_BADBLOCK_READERROR) {
243 (bd->cfg->erase_value != -1) ? bd->cfg->erase_value : 0,
249 if (bd->cfg->read_sleep) {
251 .tv_sec=bd->cfg->read_sleep/1000000000,
252 .tv_nsec=bd->cfg->read_sleep%1000000000},
265 int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block,
269 (void*)cfg, block, off, buffer, size);
270 lfs_emubd_t *bd = cfg->context;
273 LFS_ASSERT(block < bd->cfg->erase_count);
274 LFS_ASSERT(off % bd->cfg->prog_size == 0);
275 LFS_ASSERT(size % bd->cfg->prog_size == 0);
276 LFS_ASSERT(off+size <= bd->cfg->erase_size);
279 lfs_emubd_block_t *b = lfs_emubd_mutblock(cfg, &bd->blocks[block]);
286 if (bd->cfg->erase_cycles && b->wear >= bd->cfg->erase_cycles) {
287 if (bd->cfg->badblock_behavior ==
291 } else if (bd->cfg->badblock_behavior ==
293 bd->cfg->badblock_behavior ==
301 if (bd->cfg->erase_value != -1) {
303 LFS_ASSERT(b->data[off+i] == bd->cfg->erase_value);
313 (off_t)block*bd->cfg->erase_size + (off_t)off,
331 if (bd->cfg->prog_sleep) {
333 .tv_sec=bd->cfg->prog_sleep/1000000000,
334 .tv_nsec=bd->cfg->prog_sleep%1000000000},
348 bd->cfg->powerloss_cb(bd->cfg->powerloss_data);
356 int lfs_emubd_erase(const struct lfs_config *cfg, lfs_block_t block) {
358 (void*)cfg, block, ((lfs_emubd_t*)cfg->context)->cfg->erase_size);
359 lfs_emubd_t *bd = cfg->context;
362 LFS_ASSERT(block < bd->cfg->erase_count);
365 lfs_emubd_block_t *b = lfs_emubd_mutblock(cfg, &bd->blocks[block]);
372 if (bd->cfg->erase_cycles) {
373 if (b->wear >= bd->cfg->erase_cycles) {
374 if (bd->cfg->badblock_behavior ==
378 } else if (bd->cfg->badblock_behavior ==
390 if (bd->cfg->erase_value != -1) {
391 memset(b->data, bd->cfg->erase_value, bd->cfg->erase_size);
396 (off_t)block*bd->cfg->erase_size,
406 bd->cfg->erase_size);
416 bd->erased += bd->cfg->erase_size;
417 if (bd->cfg->erase_sleep) {
419 .tv_sec=bd->cfg->erase_sleep/1000000000,
420 .tv_nsec=bd->cfg->erase_sleep%1000000000},
434 bd->cfg->powerloss_cb(bd->cfg->powerloss_data);
442 int lfs_emubd_sync(const struct lfs_config *cfg) {
443 LFS_EMUBD_TRACE("lfs_emubd_sync(%p)", (void*)cfg);
446 (void)cfg;
454 static int lfs_emubd_rawcrc(const struct lfs_config *cfg,
456 lfs_emubd_t *bd = cfg->context;
459 LFS_ASSERT(block < cfg->block_count);
465 crc_ = lfs_crc(crc_, b->data, cfg->block_size);
467 uint8_t erase_value = (bd->cfg->erase_value != -1)
468 ? bd->cfg->erase_value
470 for (lfs_size_t i = 0; i < cfg->block_size; i++) {
479 int lfs_emubd_crc(const struct lfs_config *cfg,
482 (void*)cfg, block, crc);
483 int err = lfs_emubd_rawcrc(cfg, block, crc);
488 int lfs_emubd_bdcrc(const struct lfs_config *cfg, uint32_t *crc) {
489 LFS_EMUBD_TRACE("lfs_emubd_bdcrc(%p, %p)", (void*)cfg, crc);
492 for (lfs_block_t i = 0; i < cfg->block_count; i++) {
494 int err = lfs_emubd_rawcrc(cfg, i, &i_crc);
508 lfs_emubd_sio_t lfs_emubd_readed(const struct lfs_config *cfg) {
509 LFS_EMUBD_TRACE("lfs_emubd_readed(%p)", (void*)cfg);
510 lfs_emubd_t *bd = cfg->context;
515 lfs_emubd_sio_t lfs_emubd_proged(const struct lfs_config *cfg) {
516 LFS_EMUBD_TRACE("lfs_emubd_proged(%p)", (void*)cfg);
517 lfs_emubd_t *bd = cfg->context;
522 lfs_emubd_sio_t lfs_emubd_erased(const struct lfs_config *cfg) {
523 LFS_EMUBD_TRACE("lfs_emubd_erased(%p)", (void*)cfg);
524 lfs_emubd_t *bd = cfg->context;
529 int lfs_emubd_setreaded(const struct lfs_config *cfg, lfs_emubd_io_t readed) {
530 LFS_EMUBD_TRACE("lfs_emubd_setreaded(%p, %"PRIu64")", (void*)cfg, readed);
531 lfs_emubd_t *bd = cfg->context;
537 int lfs_emubd_setproged(const struct lfs_config *cfg, lfs_emubd_io_t proged) {
538 LFS_EMUBD_TRACE("lfs_emubd_setproged(%p, %"PRIu64")", (void*)cfg, proged);
539 lfs_emubd_t *bd = cfg->context;
545 int lfs_emubd_seterased(const struct lfs_config *cfg, lfs_emubd_io_t erased) {
546 LFS_EMUBD_TRACE("lfs_emubd_seterased(%p, %"PRIu64")", (void*)cfg, erased);
547 lfs_emubd_t *bd = cfg->context;
553 lfs_emubd_swear_t lfs_emubd_wear(const struct lfs_config *cfg,
555 LFS_EMUBD_TRACE("lfs_emubd_wear(%p, %"PRIu32")", (void*)cfg, block);
556 lfs_emubd_t *bd = cfg->context;
559 LFS_ASSERT(block < bd->cfg->erase_count);
574 int lfs_emubd_setwear(const struct lfs_config *cfg,
577 (void*)cfg, block, wear);
578 lfs_emubd_t *bd = cfg->context;
581 LFS_ASSERT(block < bd->cfg->erase_count);
584 lfs_emubd_block_t *b = lfs_emubd_mutblock(cfg, &bd->blocks[block]);
596 const struct lfs_config *cfg) {
597 LFS_EMUBD_TRACE("lfs_emubd_powercycles(%p)", (void*)cfg);
598 lfs_emubd_t *bd = cfg->context;
604 int lfs_emubd_setpowercycles(const struct lfs_config *cfg,
607 (void*)cfg, power_cycles);
608 lfs_emubd_t *bd = cfg->context;
616 int lfs_emubd_copy(const struct lfs_config *cfg, lfs_emubd_t *copy) {
617 LFS_EMUBD_TRACE("lfs_emubd_copy(%p, %p)", (void*)cfg, (void*)copy);
618 lfs_emubd_t *bd = cfg->context;
621 copy->blocks = malloc(bd->cfg->erase_count * sizeof(lfs_emubd_block_t*));
627 for (size_t i = 0; i < bd->cfg->erase_count; i++) {
640 copy->cfg = bd->cfg;