/** **************************************************************************************************** * Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved. **************************************************************************************************** * @file ftl.h * @brief flash transport layer is used as abstraction layer for user application to save read/write * parameters in flash. * @note ftl is dedicate block in flash, only used for save read/write value, and offset here is * logical offset which is defined for whole ftl section.If value is only for one time read, * refer to fs_load_app_data_8 or other APIs in flash_device.h * @author Brenda_li * @date 2016-12-27 * @version v1.0 * ************************************************************************************************** */ #ifndef _FTL_H_ #define _FTL_H_ #include #ifdef __cplusplus extern "C" { #endif // __cplusplus /** @defgroup FTL Flash Transport Layer * @brief simple implementation of file system for flash * @{ */ /*============================================================================* * Macros *============================================================================*/ /** @defgroup FTL_Exported_Macros Flash Transport Layer Exported Macros * @brief * @{ */ /** @defgroup FTL_WRITE_ERROR_CODE FTL Write Error Code * @{ */ #define FTL_WRITE_SUCCESS (0x00) #define FTL_WRITE_ERROR_IN_INTR (0x01) /**< can't write ftl in a interrupt */ #define FTL_WRITE_ERROR_INVALID_ADDR (0x02) /**< logical addr is not 4byte align or exceed the max logical address */ #define FTL_WRITE_ERROR_OUT_OF_SPACE (0x03) /**< ftl have no space for store new data */ #define FTL_WRITE_ERROR_READ_BACK (0x04) /**< ftl write to flash error */ #define FTL_WRITE_ERROR_VERIFY (0x05) #define FTL_WRITE_ERROR_INVALID_SIZE (0x06) /**< write length is not 4byte align */ #define FTL_WRITE_ERROR_ERASE_FAIL (0x07) /**< flash erase fail result in ftl write fail */ #define FTL_WRITE_ERROR_NOT_INIT (0x08) /**< write ftl too early before ftl init */ #define FTL_WRITE_ERROR_NEED_GC (0x09) /**< ftl_only_gc_in_idle is opened */ /** * @} */ /** @defgroup FTL_READ_ERROR_CODE FTL Read Error Code * @{ */ #define FTL_READ_SUCCESS (0x00) #define FTL_READ_ERROR_INVALID_LOGICAL_ADDR (0x01) /**< logical addr is not 4byte align or exceed the max logical address */ #define FTL_READ_ERROR_READ_NOT_FOUND (0x02) /**< logical addr never be writed so that can't found */ #define FTL_READ_ERROR_PARSE_ERROR (0x03) /**< recorded logical addr is changed even though crc check pass*/ #define FTL_READ_ERROR_INVALID_SIZE (0x04) /**< read length is not 4byte align */ #define FTL_READ_ERROR_NOT_INIT (0x05) /**< read ftl too early before ftl init */ #define FTL_READ_ERROR_CRC_CHECK_FAIL (0x06) /**< crc check fail */ /** * @} */ #define FTL_INIT_ERROR_ERASE_FAIL (0x01) /**< flash erase fail result in ftl init fail */ #define FTL_INIT_ERROR_NOT_INIT (0x02) /**< ftl init fail because of empty function*/ #define FTL_IOCTL_ERROR_NOT_INIT (0x01) /**< ftl ioctl fail because of empty function*/ /** End of FTL_Exported_Macros * @} */ /*============================================================================* * Types *============================================================================*/ /** @defgroup FTL_Exported_Types Flash Transport Layer Exported Types * @brief * @{ */ typedef enum { FTL_IOCTL_DEBUG = 0, /**< IO code for ftl debug */ FTL_IOCTL_CLEAR_ALL = 2, /**< IO code for clear ftl section*/ FTL_IOCTL_ERASE_INVALID_PAGE = 3, /**< IO code to erase invalid page*/ FTL_IOCTL_ENABLE_GC_IN_IDLE = 4, /**< IO code to enable garbage collection in idle task*/ FTL_IOCTL_DISABLE_GC_IN_IDLE = 5, /**< IO code to disable garbage collection in idle task*/ FTL_IOCTL_DO_GC_IN_APP = 6, /**< IO code to do garbage collection in app*/ } T_FTL_IOCTL_CODE; /** End of FTL_Exported_Types * @} */ /*============================================================================* * Functions *============================================================================*/ /** @defgroup FTL_Exported_Functions Flash Transport Layer Exported Functions * @brief * @{ */ /** * @brief Save specified value to specified ftl offset * @param pdata specify data buffer * @param offset specify FTL offset to store * @arg Min: 0 * @arg Max: depend on configuried ftl size * @param size size to store * @arg Min: 4 * @arg Max: depend on configuried ftl size * @return status * @retval 0 status successful * @retval otherwise fail * @note FTL offset is pre-defined and no conflict */ uint32_t ftl_save(void *pdata, uint16_t offset, uint16_t size); /** * @brief Load specified ftl offset parameter to specified buffer * @param pdata specify data buffer * @param offset specify FTL offset to load * @arg Min: 0 * @arg Max: depend on configuried ftl size * @param size size to load * @arg Min: 4 * @arg Max: depend on configuried ftl size * @return status * @retval 0 status successful * @retval otherwise fail * @note FTL offset is pre-defined and no conflict */ uint32_t ftl_load(void *pdata, uint16_t offset, uint16_t size); /** * @brief Control function entry for ftl * @param cmd command code for different operation * @param p1 command parameter @ref T_FTL_IOCTL_CODE * @param p2 extended command parameters * @return results of control * @retval 0 status successful * @retval otherwise fail */ uint32_t ftl_ioctl(uint32_t cmd, uint32_t p1, uint32_t p2); /** @} */ /* End of group FTL_Exported_Functions */ /** @} */ /* End of group FTL */ #ifdef __cplusplus } #endif // __cplusplus #endif // _FTL_H_