blob: 30f2ed78f8b925161d44b468ef3b2b32be39d28c [file] [log] [blame]
/*
* 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__ */