87 lines
3.7 KiB
C
87 lines
3.7 KiB
C
#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 */ /**<CNcomment:�ļ����(����ַ���ܵõ���ʵ���)*/
|
|
xmedia_u64 open_addr; /**< flash open address */
|
|
xmedia_u64 open_leng; /**< flash open length */
|
|
xmedia_flash_type flash_type; /**< flash type */
|
|
};
|
|
|
|
struct flash_part_dev {
|
|
xmedia_s32 part_fd;
|
|
struct flash_opt *part_opt;
|
|
struct part_info part;
|
|
struct flash_info flash;
|
|
};
|
|
|
|
struct flash_part_dev *alloc_flash_part(void);
|
|
void free_flash_part(struct flash_part_dev *part_dev);
|
|
xmedia_s32 flash_open(struct flash_part_dev *part_dev, xmedia_u32 flag);
|
|
xmedia_s32 flash_close(struct flash_part_dev *part_dev);
|
|
xmedia_s32 flash_get_info(struct flash_part_dev *part_dev);
|
|
xmedia_s32 flash_read(struct flash_part_dev *part_dev, xmedia_u32 addr, xmedia_u32 size, xmedia_char *buf);
|
|
xmedia_s32 flash_write(struct flash_part_dev *part_dev, xmedia_u32 addr, xmedia_u32 size, xmedia_char *buf);
|
|
xmedia_s32 flash_erase(struct flash_part_dev *part_dev, xmedia_u32 addr, xmedia_u32 size);
|
|
xmedia_s32 flash_init(struct flash_part_dev *part_dev);
|
|
|
|
#endif
|