xref: /nrf52832-nimble/rt-thread/components/dfs/filesystems/uffs/dfs_uffs.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2012-03-30     prife        the first version
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #ifndef DFS_UFFS_H_
12*10465441SEvalZero #define DFS_UFFS_H_
13*10465441SEvalZero 
14*10465441SEvalZero #include "uffs_config.h"
15*10465441SEvalZero #include "uffs/uffs_public.h"
16*10465441SEvalZero 
17*10465441SEvalZero /* the UFFS ECC mode opitons  */
18*10465441SEvalZero #ifndef RT_UFFS_ECC_MODE
19*10465441SEvalZero #define RT_UFFS_ECC_MODE      1
20*10465441SEvalZero #endif
21*10465441SEvalZero 
22*10465441SEvalZero /*
23*10465441SEvalZero  * RT_UFFS_ECC_MODE:
24*10465441SEvalZero  * 0, Do not use ECC
25*10465441SEvalZero  * 1, UFFS calculate the ECC
26*10465441SEvalZero  * 2, Flash driver(or by hardware) calculate the ECC
27*10465441SEvalZero  * 3, Hardware calculate the ECC and automatically write to spare.
28*10465441SEvalZero  */
29*10465441SEvalZero #if RT_UFFS_ECC_MODE == 0
30*10465441SEvalZero #define RT_CONFIG_UFFS_ECC_MODE UFFS_ECC_NONE
31*10465441SEvalZero #elif RT_UFFS_ECC_MODE == 1
32*10465441SEvalZero #define RT_CONFIG_UFFS_ECC_MODE UFFS_ECC_SOFT
33*10465441SEvalZero #elif RT_UFFS_ECC_MODE == 2
34*10465441SEvalZero #define RT_CONFIG_UFFS_ECC_MODE UFFS_ECC_HW
35*10465441SEvalZero #elif RT_UFFS_ECC_MODE == 3
36*10465441SEvalZero #define RT_CONFIG_UFFS_ECC_MODE UFFS_ECC_HW_AUTO
37*10465441SEvalZero #endif
38*10465441SEvalZero 
39*10465441SEvalZero /* #define RT_CONFIG_UFFS_ECC_MODE  UFFS_ECC_HW_AUTO */
40*10465441SEvalZero /* #define RT_CONFIG_UFFS_ECC_MODE  UFFS_ECC_SOFT */
41*10465441SEvalZero /* #define RT_CONFIG_UFFS_ECC_MODE  UFFS_ECC_NONE */
42*10465441SEvalZero 
43*10465441SEvalZero /* enable this ,you need provide a mark_badblock/check_block funciton */
44*10465441SEvalZero /* #define RT_UFFS_USE_CHECK_MARK_FUNCITON */
45*10465441SEvalZero 
46*10465441SEvalZero #if RT_CONFIG_UFFS_ECC_MODE == UFFS_ECC_SOFT      /* let uffs do soft ecc */
47*10465441SEvalZero #define RT_CONFIG_UFFS_LAYOUT    UFFS_LAYOUT_UFFS /* UFFS_LAYOUT_FLASH */
48*10465441SEvalZero 
49*10465441SEvalZero #elif RT_CONFIG_UFFS_ECC_MODE == UFFS_ECC_HW_AUTO /* nand driver make ecc and do ecc correct */
50*10465441SEvalZero #define RT_CONFIG_UFFS_LAYOUT    UFFS_LAYOUT_FLASH
51*10465441SEvalZero 
52*10465441SEvalZero #elif RT_CONFIG_UFFS_ECC_MODE == UFFS_ECC_NONE
53*10465441SEvalZero #define RT_CONFIG_UFFS_LAYOUT    UFFS_LAYOUT_UFFS /* UFFS_LAYOUT_FLASH */
54*10465441SEvalZero 
55*10465441SEvalZero #else
56*10465441SEvalZero #error "uffs under rt-thread do not support this ECC mode"
57*10465441SEvalZero #endif /* RT_CONFIG_UFFS_ECC_MODE */
58*10465441SEvalZero 
59*10465441SEvalZero #if (!CONFIG_USE_STATIC_MEMORY_ALLOCATOR)  && (CONFIG_USE_SYSTEM_MEMORY_ALLOCATOR)
60*10465441SEvalZero #define RT_UFFS_MEMORY_ALLOCATOR  1  /* use system memory allocator */
61*10465441SEvalZero #elif (CONFIG_USE_STATIC_MEMORY_ALLOCATOR) && (!CONFIG_USE_SYSTEM_MEMORY_ALLOCATOR)
62*10465441SEvalZero #define RT_UFFS_MEMORY_ALLOCATOR  0  /* use static memory allocator */
63*10465441SEvalZero #else
64*10465441SEvalZero #error "UFFS: CONFIG_USE_STATIC_MEMORY_ALLOCATOR ,CONFIG_USE_SYSTEM_MEMORY_ALLOCATOR are invalid!"
65*10465441SEvalZero #endif
66*10465441SEvalZero 
67*10465441SEvalZero #if CONFIG_USE_STATIC_MEMORY_ALLOCATOR > 0
68*10465441SEvalZero #error "dfs_uffs only support CONFIG_USE_SYSTEM_MEMORY_ALLOCATOR"
69*10465441SEvalZero #endif
70*10465441SEvalZero 
71*10465441SEvalZero #if defined(CONFIG_UFFS_AUTO_LAYOUT_USE_MTD_SCHEME)
72*10465441SEvalZero #error "dfs_uffs not support CONFIG_UFFS_AUTO_LAYOUT_USE_MTD_SCHEME"
73*10465441SEvalZero #endif
74*10465441SEvalZero 
75*10465441SEvalZero #if (RT_CONFIG_UFFS_ECC_MODE == UFFS_ECC_HW_AUTO) && (RT_CONFIG_UFFS_LAYOUT != UFFS_LAYOUT_FLASH)
76*10465441SEvalZero #error "when use UFFS_ECC_HW_AUTO, you must use UFFS_LAYOUT_FLASH"
77*10465441SEvalZero 
78*10465441SEvalZero #elif (RT_CONFIG_UFFS_ECC_MODE == UFFS_ECC_SOFT) && (RT_CONFIG_UFFS_LAYOUT != UFFS_LAYOUT_UFFS)
79*10465441SEvalZero #warning "when use UFFS_ECC_SOFT, it is recommended to use UFFS_LAYOUT_UFFS"
80*10465441SEvalZero #endif
81*10465441SEvalZero 
82*10465441SEvalZero extern const uffs_FlashOps nand_ops;
83*10465441SEvalZero 
84*10465441SEvalZero extern void uffs_setup_storage(
85*10465441SEvalZero     struct uffs_StorageAttrSt *attr,
86*10465441SEvalZero     struct rt_mtd_nand_device * nand);
87*10465441SEvalZero 
88*10465441SEvalZero extern int dfs_uffs_init(void);
89*10465441SEvalZero #endif /* DFS_UFFS_H_ */
90