/* * Copyright (c) 2017 Nordic Semiconductor ASA * Copyright (c) 2015 Runtime Inc * * SPDX-License-Identifier: Apache-2.0 */ #include #include "fcb_priv.h" /* * Call 'cb' for every element in flash circular buffer. If sector is specified, * only elements with that flash_sector are reported. */ int fcb_walk(struct fcb *fcb, struct flash_sector *sector, fcb_walk_cb cb, void *cb_arg) { struct fcb_entry_ctx entry_ctx; int rc; entry_ctx.loc.fe_sector = sector; entry_ctx.loc.fe_elem_off = 0U; rc = k_mutex_lock(&fcb->f_mtx, K_FOREVER); if (rc < 0) { return -EINVAL; } while ((rc = fcb_getnext_nolock(fcb, &entry_ctx.loc)) != -ENOTSUP) { k_mutex_unlock(&fcb->f_mtx); if (sector && entry_ctx.loc.fe_sector != sector) { return 0; } entry_ctx.fap = fcb->fap; rc = cb(&entry_ctx, cb_arg); if (rc) { return rc; } rc = k_mutex_lock(&fcb->f_mtx, K_FOREVER); if (rc < 0) { return -EINVAL; } } k_mutex_unlock(&fcb->f_mtx); return 0; }