107 lines
3.5 KiB
C
107 lines
3.5 KiB
C
/*
|
|
* Copyright (c) 2019 Bolt Innovation Management, LLC
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_INCLUDE_FS_LITTLEFS_H_
|
|
#define ZEPHYR_INCLUDE_FS_LITTLEFS_H_
|
|
|
|
#include <zephyr/types.h>
|
|
#include <kernel.h>
|
|
#include <storage/flash_map.h>
|
|
|
|
#include <lfs.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** @brief Filesystem info structure for LittleFS mount */
|
|
struct fs_littlefs {
|
|
/* Defaulted in driver, customizable before mount. */
|
|
struct lfs_config cfg;
|
|
|
|
/* Must be cfg.cache_size */
|
|
uint8_t *read_buffer;
|
|
|
|
/* Must be cfg.cache_size */
|
|
uint8_t *prog_buffer;
|
|
|
|
/* Mustbe cfg.lookahead_size/4 elements, and
|
|
* cfg.lookahead_size must be a multiple of 8.
|
|
*/
|
|
uint32_t *lookahead_buffer[CONFIG_FS_LITTLEFS_LOOKAHEAD_SIZE / sizeof(uint32_t)];
|
|
|
|
/* These structures are filled automatically at mount. */
|
|
struct lfs lfs;
|
|
const struct flash_area *area;
|
|
struct k_mutex mutex;
|
|
};
|
|
|
|
/** @brief Define a littlefs configuration with customized size
|
|
* characteristics.
|
|
*
|
|
* This defines static arrays required for caches, and initializes the
|
|
* littlefs configuration structure to use the provided values instead
|
|
* of the global Kconfig defaults. A pointer to the named object must
|
|
* be stored in the ``.fs_data`` field of a :c:type:`struct fs_mount`
|
|
* object.
|
|
*
|
|
* To define an instance for the Kconfig defaults, use
|
|
* :c:macro:`FS_LITTLEFS_DECLARE_DEFAULT_CONFIG`.
|
|
*
|
|
* To completely control file system configuration the application can
|
|
* directly define and initialize a :c:type:`struct fs_littlefs`
|
|
* object. The application is responsible for ensuring the configured
|
|
* values are consistent with littlefs requirements.
|
|
*
|
|
* @note If you use a non-default configuration for cache size, you
|
|
* must also select @kconfig{CONFIG_FS_LITTLEFS_FC_HEAP_SIZE} to relax
|
|
* the size constraints on per-file cache allocations.
|
|
*
|
|
* @param name the name for the structure. The defined object has
|
|
* file scope.
|
|
* @param read_sz see @kconfig{CONFIG_FS_LITTLEFS_READ_SIZE}
|
|
* @param prog_sz see @kconfig{CONFIG_FS_LITTLEFS_PROG_SIZE}
|
|
* @param cache_sz see @kconfig{CONFIG_FS_LITTLEFS_CACHE_SIZE}
|
|
* @param lookahead_sz see @kconfig{CONFIG_FS_LITTLEFS_LOOKAHEAD_SIZE}
|
|
*/
|
|
#define FS_LITTLEFS_DECLARE_CUSTOM_CONFIG(name, read_sz, prog_sz, cache_sz, lookahead_sz) \
|
|
static uint8_t __aligned(4) name ## _read_buffer[cache_sz]; \
|
|
static uint8_t __aligned(4) name ## _prog_buffer[cache_sz]; \
|
|
static uint32_t name ## _lookahead_buffer[(lookahead_sz) / sizeof(uint32_t)]; \
|
|
static struct fs_littlefs name = { \
|
|
.cfg = { \
|
|
.read_size = (read_sz), \
|
|
.prog_size = (prog_sz), \
|
|
.cache_size = (cache_sz), \
|
|
.lookahead_size = (lookahead_sz), \
|
|
.read_buffer = name ## _read_buffer, \
|
|
.prog_buffer = name ## _prog_buffer, \
|
|
.lookahead_buffer = name ## _lookahead_buffer, \
|
|
}, \
|
|
}
|
|
|
|
/** @brief Define a littlefs configuration with default characteristics.
|
|
*
|
|
* This defines static arrays and initializes the littlefs
|
|
* configuration structure to use the default size configuration
|
|
* provided by Kconfig.
|
|
*
|
|
* @param name the name for the structure. The defined object has
|
|
* file scope.
|
|
*/
|
|
#define FS_LITTLEFS_DECLARE_DEFAULT_CONFIG(name) \
|
|
FS_LITTLEFS_DECLARE_CUSTOM_CONFIG(name, \
|
|
CONFIG_FS_LITTLEFS_READ_SIZE, \
|
|
CONFIG_FS_LITTLEFS_PROG_SIZE, \
|
|
CONFIG_FS_LITTLEFS_CACHE_SIZE, \
|
|
CONFIG_FS_LITTLEFS_LOOKAHEAD_SIZE)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ZEPHYR_INCLUDE_FS_LITTLEFS_H_ */
|