#ifndef H_PM_FLASH_H #define H_PM_FLASH_H #include "common.h" #include "xmedia_debug.h" #include "xmedia_type.h" #include "xmedia_errcode.h" #define PM_USR_TRACE(level, fmt, ...) \ do { \ MODULE_TRACE(level, MOD_ID_PM, "[Func]:%s [Line]:%d [Info]:" fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ } while (0) #define FLASH_NAME_LEN 32 /** Flash Name max length */ /** Flash partition access permission type */ typedef enum access_perm { ACCESS_NONE = 0, ACCESS_RD = (1 << 1), ACCESS_WR = (1 << 2), ACCESS_RDWR = (ACCESS_RD | ACCESS_WR), ACCESS_BUTT } xmedia_access_perm; /** flash type */ typedef enum flash_type { PM_FLASH_TYPE_SPI, /**< SPI flash type */ PM_FLASH_TYPE_NAND, /**< NAND flash type */ PM_FLASH_TYPE_EMMC, /**< eMMC flash type */ PM_FLASH_TYPE_MAX /**< Invalid flash type */ } xmedia_flash_type; typedef struct flash_part_dev flash_part_device; struct flash_opt { int (*read)(struct flash_part_dev *part_dev, xmedia_u32 addr, xmedia_u32 size, xmedia_char *buf); int (*write)(struct flash_part_dev *part_dev, xmedia_u32 addr, xmedia_u32 size, xmedia_char *buf); int (*erase)(struct flash_part_dev *part_dev, xmedia_u32 addr, xmedia_u32 size); int (*init)(struct flash_part_dev *part_dev); int (*open)(struct flash_part_dev *part_dev, xmedia_u32 flag); int (*close)(struct flash_part_dev *part_dev); int (*get_info)(struct flash_part_dev *part_dev); }; /** Flash partition descriptions */ struct part_info { xmedia_u64 start; /**< Partiton start address */ xmedia_u64 size; /**< Partition size */ xmedia_u32 block_size; /**< The Block size of the flash where this partition at */ xmedia_flash_type flash_type; /**< The flash type where this partition at */ xmedia_char devname[FLASH_NAME_LEN]; /**< The device node name where this partition relate to */ xmedia_char partname[FLASH_NAME_LEN]; /**< The partition name of this partition */ xmedia_access_perm perm; /**< The partition access permission type */ }; /** Flash Infomation */ struct flash_info { xmedia_u64 total_size; /**< flash total size */ xmedia_u64 part_size; /**< flash partition size */ xmedia_u32 block_size; /**< flash block size */ xmedia_u32 page_size; /**< flash page size */ xmedia_u32 oob_size; /**< flash OOB size */ xmedia_s32 fd; /**< file handle */ /**