Files
banban/ql-kernel/threadx/common/include/lfs_api.h

1085 lines
66 KiB
C

/*
* The little filesystem
*
* Copyright (c) 2022, ASR Limited. All rights reserved.
*
*/
#ifndef LFS_API_H
#define LFS_API_H
#include "lfs.h"
#include "lfs_cache.h"
#ifdef __cplusplus
extern "C"
{
#endif
#ifndef RT_DEF_LFS_DRIVERS
#define RT_DEF_LFS_DRIVERS 1
#endif
#if (RT_DEF_LFS_DRIVERS < 1)
#error "#define RT_DEF_LFS_DRIVERS must > 0"
#endif
#ifndef LFS_READ_SIZE
#define LFS_READ_SIZE 4096
#endif
#ifndef LFS_PROG_SIZE
#define LFS_PROG_SIZE 4096
#endif
#ifndef LFS_CACHE_SIZE
#define LFS_CACHE_SIZE 4096
#endif
#ifndef LFS_BLOCK_SIZE
#define LFS_BLOCK_SIZE 4096
#endif
#ifndef LFS_LOOKAHEAD
#define LFS_LOOKAHEAD 512
#endif
#ifndef LFS_HEAD_ID
#define LFS_HEAD_ID 0x4853464C
#endif
#ifndef LFS_TAIL_ID
#define LFS_TAIL_ID 0x5453464C
#endif
#ifndef LFS_FILE_ID
#define LFS_FILE_ID 0x454C4946
#endif
#ifndef LFS_DIR_ID
#define LFS_DIR_ID 0x44524944
#endif
#ifndef LFS_CKSUM_ID
#define LFS_CKSUM_ID 0x4D534B43
#endif
#ifndef LFS_BLOCK_CYCLES
#define LFS_BLOCK_CYCLES 999
#endif
/* Wildcard for single character */
#define LFS_SCWILDCARD '?'
/* Wildcard for multiple characters */
#define LFS_MCWILDCARD '*'
/* Terminating character marks end of string */
#define LFS_EOS '\0'
/* LFS white list max length */
#define LFS_WHITE_LIST_LEN 8
/* Updater check version */
#define UPDATER_CK_VER "20190911"
/* Updater version size */
#define UPDATER_VER_SIZE 8
/* Updater version offset */
#define UPDATER_VER_OFFSET 0x280
/*
* Description:
* Maximum number of open files
*
* Remarks:
* Each handle takes 36 bytes
*
*/
#define LFS_NUM_HANDLES 8
#define LFS_FREE_HANDLE 0x00
#define LFS_BAD_HANDLE -1
#ifdef QUEC_NVM_IN_EXT_FLASH
//#define LFS_DUAL_PARTITON //defined for dual nvm (system nvm and customer nvm)
#define LFS_EXT_NVM //defined for system NVM placed external spi nor instead of internal qspi nor
#ifdef LFS_DUAL_PARTITON
#define NUM_OF_PARTITION 2
#else
#define NUM_OF_PARTITION 1
#endif
#else
#define NUM_OF_PARTITION 1
#endif
/* LFS align. */
#define LFS_ALIGN(size, align) ((size + align - 1) & ~(align - 1))
/* remove or add base according to NUM_OF_PARTITION,
file handle for partition 0 is : 0*PARTITION_HANDLE,0*PARTITION_HANDLE+1,...0*PARTITION_HANDLE+LFS_NUM_HANDLES
file handle for partition 1 is : 1*PARTITION_HANDLE,1*PARTITION_HANDLE+1,...1*PARTITION_HANDLE+LFS_NUM_HANDLES
file handle for partition 2 is : 2*PARTITION_HANDLE,2*PARTITION_HANDLE+1,...2*PARTITION_HANDLE+LFS_NUM_HANDLES
etc..
*/
#define PARTITION_HANDLE 100
/* Translate Handle to partition */
#define Get_Partition_From_Handle(Handle) (Handle / PARTITION_HANDLE)
/* Translate Internal Partition handle to external file handle*/
#define EXT_FILE_HANDLE(Handle, Partition) (Handle + Partition * PARTITION_HANDLE)
/* Translate external File handle to Internal Partition handle*/
#define INT_PARTITION_HANDLE(Handle, Partition) (Handle - Partition * PARTITION_HANDLE)
/* Check the validity of Head ID and Tail ID. */
#define lfs_check_handle_validity(l, p, h) ASSERT((l[p][h].HeadID == LFS_HEAD_ID) &&(l[p][h].TailID == LFS_TAIL_ID))
/* Check the validity of partition. */
#define lfs_check_partition_validity(Partition, status) \
{ \
if(Partition < 0 || Partition >= NUM_OF_PARTITION) \
{ \
LFSLogPrintf("%s: invalid partition: %d", __FUNCTION__, Partition); \
return status; \
} \
}
typedef enum
{
PARTITION_0 = 0,
PARTITION_1,
} Partition_num;
typedef struct _dfs_lfs_s
{
struct lfs lfs;
struct lfs_config cfg;
} dfs_lfs_t;
typedef struct _dfs_lfs_fd_s
{
struct lfs_file file;
UINT32 ErrCode;
} dfs_lfs_fd_t;
typedef struct _dfs_lfs_dir_s
{
struct lfs_dir dir;
} dfs_lfs_dir_t;
typedef struct lfs_flash_info
{
lfsBlockInfo lfsBlkInfo;
lfsBlkMapType lfsBlkMap;
int partition;
BOOL useCache;
} lfs_flash_info;
typedef struct
{
UINT32 HeadID;
UINT32 oflag;
union
{
dfs_lfs_fd_t LfsFd;
dfs_lfs_dir_t DirFd;
} u;
UINT32 CkSum;
char *Name;
UINT32 TailID;
} lfs_sHandle;
typedef enum
{
LFS_CKSM_ATTR = 0x001,
LFS_MAX_ATTR = 0x0FF
} lfs_user_attr;
/*===========================================================================
EXTERN DEFINITIONS AND DECLARATIONS FOR MODULE
===========================================================================*/
/*===========================================================================
INTERNAL FUNCTION DECLARATIONS
===========================================================================*/
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_load_config */
/* */
/* DESCRIPTION */
/* */
/* The function load LFS configuration */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
void lfs_load_config(struct lfs_config* lfs_cfg, int partition);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_root_is_valid */
/* */
/* DESCRIPTION */
/* */
/* The function check whether root directory is valid or not. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_root_is_valid(const char *path);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_sys_init */
/* */
/* DESCRIPTION */
/* */
/* The function initialize LFS system */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_sys_init(void);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_open */
/* */
/* DESCRIPTION */
/* */
/* The function Open or create a file for read/write. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_open(CONST char *filename, UINT32 oflag, UINT32 pmode);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_close */
/* */
/* DESCRIPTION */
/* */
/* The function close a lfs file. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_close(int Handle);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_read */
/* */
/* DESCRIPTION */
/* */
/* The function read data from file. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_read(int Handle, void* buf, UINT32 len);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_readEx */
/* */
/* DESCRIPTION */
/* */
/* The function read data from file. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_readEx(int Handle, void* buf, UINT32 len, UINT32 filepostoread);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_write */
/* */
/* DESCRIPTION */
/* */
/* The function write data to file. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_write(int Handle, const void* buf, UINT32 len);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_ftell */
/* */
/* DESCRIPTION */
/* */
/* The function get the file position. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_ftell(int Handle);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_writeEx */
/* */
/* DESCRIPTION */
/* */
/* The function write data to file. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_writeEx(int Handle, const void* buf, UINT32 len, UINT32 filePostowrite);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_lseek */
/* */
/* DESCRIPTION */
/* */
/* The function Move file pointer to specified location. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_lseek(int Handle, UINT32 offset, int whence);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_size */
/* */
/* DESCRIPTION */
/* */
/* The function get file size. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
UINT32 lfs_io_size(int Handle);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_eof */
/* */
/* DESCRIPTION */
/* */
/* The function to judge if it is the end of file */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_eof(int Handle);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_remove */
/* */
/* DESCRIPTION */
/* */
/* The function remove a file from file system. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_remove(const char* path);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_rename */
/* */
/* DESCRIPTION */
/* */
/* The function rename a file in file system. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_rename(const char* from, const char* to);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_Access */
/* */
/* DESCRIPTION */
/* */
/* The function access a LFS file. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_Access(const char *path, UINT32 mode);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_statfs */
/* */
/* DESCRIPTION */
/* */
/* The function get file statfs. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_statfs(const char *path, UINT32 *Bytes);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_used */
/* */
/* DESCRIPTION */
/* */
/* The function get the used bytes of LFS. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_used(const char *path, UINT32 *Bytes);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_sys_traverse */
/* */
/* DESCRIPTION */
/* */
/* The function do lfs system traverse. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_sys_traverse(const char *path);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_dir_open */
/* */
/* DESCRIPTION */
/* */
/* The function Open or create a directory. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_dir_open(const char *path);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_dir_read */
/* */
/* DESCRIPTION */
/* */
/* The function read file from a directory. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_dir_read(int Handle, struct lfs_info *info);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_io_dir_close */
/* */
/* DESCRIPTION */
/* */
/* The function close a directory. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_dir_close(int Handle);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_dir_make */
/* */
/* DESCRIPTION */
/* */
/* The function create a directory. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_io_dir_make(const char *path);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_fname_match */
/* */
/* DESCRIPTION */
/* */
/* The function Checks to see if filenames match, including */
/* wildcards. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_fname_match(const char *src, const char *dest);
/*****************************************************************************
* Function Name: lfs_io_findall()
*
* DESCRIPTION:
* None.
*
* USAGE:
* void lfs_io_findall(void)
*
* PARAMETERS:
*
* INPUTS:
* None.
*
*
* OUTPUTS:
*
* RETURNS:
* Returns TRUE if filename is valid; otherwise, it returns FALSE.
*
* HISTORY:
* 20.05.05 dmp Took from FDI5 from FDI_FILE.c:3875; and simplifyed.
*
***************************************************************************/
void lfs_io_findall(const char *file);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_file_verify */
/* */
/* DESCRIPTION */
/* */
/* The function verify file validity */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
BOOL lfs_file_verify(int Handle, BOOL set, int partition);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_partition_init */
/* */
/* DESCRIPTION */
/* */
/* The function initialize LFS system in partition */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_partition_init(int partition);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_get_prefixlen */
/* */
/* DESCRIPTION */
/* */
/* The function get the file name's prefix length. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
int lfs_get_prefixlen(const char *filename);
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* lfs_get_prefix */
/* */
/* DESCRIPTION */
/* */
/* The function get the prefix of file name. */
/* */
/* CALLED BY */
/* */
/* Application */
/* */
/* CALLS */
/* */
/* Application The application function */
/* */
/* INPUTS */
/* */
/* block */
/* buffer */
/* */
/* OUTPUTS */
/* */
/* None N/A */
/* */
/*************************************************************************/
const char *lfs_get_prefix(const char *filename);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif