/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2020-2020. All rights reserved. * Description: flash.h * Author: SmartMedia_BSP * Create: 2020-06-23 */ #ifndef FLASHH #define FLASHH #include enum flash_type_t { FT_SPIFLASH = 0, FT_NAND = 1, FT_EMMC = 2, FT_NONE = 3, }; struct flash_info_t { enum flash_type_t type; char name[32]; u_char ids[8]; int nr_ids; uint32 pagesize; /* page size */ uint32 blocksize; /* block size */ uint32 oobsize; /* controller used oobsize */ uint32 oobused; /* yaffs2 oobsize used */ uint32 chipsize; // uint64 chipsize; uint32 nr_chips; }; struct flash_ops_t; struct flash_intf_t { uint64 from; uint64 length; const struct flash_info_t *info; struct flash_ops_t *ops; }; /* * parameter: * from : offset by flash start address "0"; * length : open flash size, or real operation size; * offset : offset by partition start address "from" * if read partition start address, this parameter is "0"; * return: * <= 0 : fail; * > 0 : return real erase/write/read length; */ struct flash_ops_t { const char *devname; int (*open)(uint64 from, uint64 length); void (*close)(struct flash_intf_t *intf); int64 (*erase)(struct flash_intf_t *intf, uint64 offset, uint64 length); int64 (*write)(struct flash_intf_t *intf, uint64 offset, uint64 length, char *buf, int withoob); int64 (*read)(struct flash_intf_t *intf, uint64 offset, uint64 length, char *buf, int withoob); struct flash_info_t *(*get_info)(void); }; int flash_register(enum flash_type_t type, struct flash_ops_t *ops); void *flash_open_range(uint32 flash, uint64 from, uint64 length); void *flash_open_part(uint32 flash, const char *partname); void flash_close(void *intf); int64 flash_erase(void *intf, uint64 offset, uint64 length); int64 flash_write(void *intf, uint64 offset, uint64 length, char *buf, int withoob); int64 flash_read(void *intf, uint64 offset, uint64 length, char *buf, int withoob); const char *flash_get_name(uint32 type); void flash_show_info(const struct flash_info_t *info); const void *flash_get_info(uint32 flash); /* *************************************************************************** */ #endif