mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	This is primarily to get better test coverage over devices with very large erase/prog/read sizes. The unfortunate state of the tests is that most of them rely on a specific block device size, so that ENOSPC and ECORRUPT errors occur in specific situations. This should be improved in the future, but at least for now we can open up some of the simpler tests to run on these different configurations. Also added testing over both 0x00 and 0xff erase values in emubd. Also added a number of small file tests that expose issues prevalent on NAND devices.
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Block device emulated on standard files
 | |
|  *
 | |
|  * Copyright (c) 2017, Arm Limited. All rights reserved.
 | |
|  * SPDX-License-Identifier: BSD-3-Clause
 | |
|  */
 | |
| #ifndef LFS_EMUBD_H
 | |
| #define LFS_EMUBD_H
 | |
| 
 | |
| #include "lfs.h"
 | |
| #include "lfs_util.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C"
 | |
| {
 | |
| #endif
 | |
| 
 | |
| 
 | |
| // Config options
 | |
| #ifndef LFS_EMUBD_ERASE_VALUE
 | |
| #define LFS_EMUBD_ERASE_VALUE 0x00
 | |
| #endif
 | |
| 
 | |
| 
 | |
| // The emu bd state
 | |
| typedef struct lfs_emubd {
 | |
|     char *path;
 | |
|     char *child;
 | |
| 
 | |
|     struct {
 | |
|         uint64_t read_count;
 | |
|         uint64_t prog_count;
 | |
|         uint64_t erase_count;
 | |
|     } stats;
 | |
| 
 | |
|     struct {
 | |
|         lfs_block_t blocks[4];
 | |
|     } history;
 | |
| 
 | |
|     struct {
 | |
|         uint32_t read_size;
 | |
|         uint32_t prog_size;
 | |
|         uint32_t block_size;
 | |
|         uint32_t block_count;
 | |
|     } cfg;
 | |
| } lfs_emubd_t;
 | |
| 
 | |
| 
 | |
| // Create a block device using path for the directory to store blocks
 | |
| int lfs_emubd_create(const struct lfs_config *cfg, const char *path);
 | |
| 
 | |
| // Clean up memory associated with emu block device
 | |
| void lfs_emubd_destroy(const struct lfs_config *cfg);
 | |
| 
 | |
| // Read a block
 | |
| int lfs_emubd_read(const struct lfs_config *cfg, lfs_block_t block,
 | |
|         lfs_off_t off, void *buffer, lfs_size_t size);
 | |
| 
 | |
| // Program a block
 | |
| //
 | |
| // The block must have previously been erased.
 | |
| int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block,
 | |
|         lfs_off_t off, const void *buffer, lfs_size_t size);
 | |
| 
 | |
| // Erase a block
 | |
| //
 | |
| // A block must be erased before being programmed. The
 | |
| // state of an erased block is undefined.
 | |
| int lfs_emubd_erase(const struct lfs_config *cfg, lfs_block_t block);
 | |
| 
 | |
| // Sync the block device
 | |
| int lfs_emubd_sync(const struct lfs_config *cfg);
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| } /* extern "C" */
 | |
| #endif
 | |
| 
 | |
| #endif
 |