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