| /* |
| * Linux driver for NAND NV Flash Translation Layer |
| * Copyright (C) 2016, ZIXC Corporation. |
| */ |
| |
| |
| #ifndef __MTD_NV_FTL_H__ |
| #define __MTD_NV_FTL_H__ |
| |
| #include <linux/mtd/mtd.h> |
| #include <linux/mtd/zftl_ecc.h> |
| |
| |
| |
| /* error define */ |
| #define CAN_NOT_FIND_FREE_BLOCK 5 /* ÕÒ²»µ½¿ÕÏп飬½¨ÒéÔö¼ÓZFTL·ÖÇøµÄ´óС */ |
| #define NAND_READ_WRITE_ERROR 6 |
| |
| /* |
| * zftl partition |
| */ |
| |
| |
| /* these info are used in blockRepTable */ |
| #define BLOCK_NIL 0xFFFF /* ´Ë¿éûÓÐÓ³Éä¹ØÏµ */ |
| |
| |
| /* these info are used in BlockTable */ |
| #define BLOCK_FREE 0x00 |
| #define BLOCK_USED 0x55 |
| #define BLOCK_BAD 0xAA |
| #define BLOCK_DIRTY 0x11 |
| |
| |
| struct ZFTLrecord { |
| nand_info_t *nand; |
| unsigned char *blockbuf; /* ¿é»º´æ */ |
| unsigned char *oobbuf; /* OOB»º´æ */ |
| unsigned char *blockTable; |
| unsigned short *blockRepTable; |
| unsigned short *versionTable; /* Ö»ÓÃÔÚ¿ª»ú¹ÒÔØµÄʱºò */ |
| uint32_t erasesize; |
| uint32_t writesize; |
| unsigned int erasesize_shift; |
| unsigned int writesize_shift; |
| uint32_t oobsize; |
| uint32_t firstBlock; /* µÚÒ»¿éµÄ¿éºÅ */ |
| uint32_t numBlocks; /* ×ܵĿéÊý */ |
| uint32_t lastFreeBlock; |
| }; |
| |
| struct zftl_oob { |
| __u8 head[CONFIG_ZFLT_HEAD_BYTE]; /* zftlÍ· */ |
| __u8 used; |
| __u8 version; |
| __u16 logicBlockID; /* ·ÖÇøÄ򵀮«ÒÆ¿éºÅ */ |
| }__attribute__((packed)); |
| |
| |
| |
| |
| struct zftl_packed_tags { |
| struct zftl_oob t; |
| struct zftl_ecc_other ecc; |
| }; |
| |
| |
| void * zftl_get_ZFTLrecord(uint32_t offset); |
| int zftl_write(struct ZFTLrecord *zftl, uint32_t to, uint32_t len, u_char *buf); |
| int zftl_read(struct ZFTLrecord *zftl, uint32_t from, uint32_t len, u_char *buffer); |
| |
| #endif /* __MTD_NFTL_H__ */ |