/******************************************************************************** ********************************************************************************* COPYRIGHT (c) 2004 BY ROCK-CHIP FUZHOU -- ALL RIGHTS RESERVED -- File Name: ftl.h Author: XUESHAN LIN Created: 1st Dec 2008 Modified: Revision: 1.00 ******************************************************************************** ********************************************************************************/ #ifndef _FTL_H #define _FTL_H //1¿ÉÅäÖòÎÊý //#define IN_LOADER //¶¨Òå±àÒëloaderʱºê¿ª¹Ø, û¶¨ÒåÊÇϵͳÇý¶¯ #ifndef IN_LOADER #define SYS_PROTECT //¶¨ÒåϵͳÇøд±£»¤Ê¹ÄÜ #endif #define MALLOC_DISABLE #define FTL_VERSION 0x0200 //FTL°æ±¾ºÅ, 0x100±íʾver1.00, ÐèÒªµÍ¸ñʱÐÞ¸ÄÖ÷°æ±¾ºÅ, ·ñÔòÖ»ÐèÐ޸Ĵΰ汾ºÅ #define MAX_REMAP_TBL (32768*2)//×î´óµÄÓ³Éä±í, ×Ö½Úµ¥Î», ±ØÐë>=1024 #define MAX_BAD_BLK_NUM 256 //×î´óµÄµÄ»µ¿é½»Ìæ¿éÊý #define MAX_CACHE_BLK_NUM 16 //ÓÃÀ´×÷CACHEµÄ¿éÊý #define MAX_EXCH_BLK_NUM 8 //½»»»¿éÊý #define MAX_FREE_BLK_NUM 1024 //ÓÃÀ´×÷À©Õ¹¿éµÄÊýÁ¿×î´óÏÞÖÆ #define MIN_FREE_BLK_NUM 64 //ÓÃÀ´×÷À©Õ¹¿éµÄÊýÁ¿×îСÏÞÖÆ #define MAX_RSVD_BLK_NUM 4 //±£Áô¿éÊý(°üº¬2¸ö»µ¿é±í¼Ç¼¿é) #define DISK_NAND_CODE 0 #define DISK_NAND_DATA 1 #define DISK_NAND_USER 2 #define DISK_NAND_TOTAL 0xff #define MAX_CACHE 16 //ÖÁÉÙÒª6Ìõ #define MAX_CACHE_CONTINUE_LEN 3 #define FLASH_PROT_MAGIC 0x444e414e //NAND /******************************************************************* ºê³£Êý¶¨Òå *******************************************************************/ #define FTL_OK 0 #define FTL_ERROR -1 #define SIGN_BAD_BLK 0xf000 #define SIGN_CACHE_BLK 0xf100 #define SIGN_DATA_BLK 0xf200 #define SIGN_RCV_BLK 0xf300 //1½á¹¹¶¨Òå typedef struct tagEXCH_BLK_INFO { uint32 Start; uint32 End; uint32 SrcAddr; //Ô´BLOCKµØÖ·, ÓÃÓڹرջò»Ö¸´ uint16 ver; //°æ±¾ºÅ, ±íʾ×îÐÂÊý¾Ý uint8 Count; uint8 Valid; }EXCH_BLK_INFO, *pEXCH_BLK_INFO; typedef struct tagFTL_CACHE { uint32 LBA; uint32 Mask; uint8 count; uint8 Valid; uint32 *Buf; }FTL_CACHE, *pFTL_CACHE; typedef struct tagREMAP_INFO { uint8 num[64]; uint32 write[2]; uint16 max; uint16 blkAddr; uint16 pageAddr; uint16 tbl[MAX_REMAP_TBL/2]; }REMAP_INFO, *pREMAP_INFO; typedef struct tagBAD_BLK_INFO { uint16 max; uint16 cnt; uint16 offset; uint16 blkAddr[4]; uint16 tbl[MAX_BAD_BLK_NUM]; }BAD_BLK_INFO, *pBAD_BLK_INFO; typedef struct tagCACHE_BLK_INFO { uint32 curPageAddr; uint32 curBlkAddr; uint16 ver; uint16 tbl[MAX_CACHE_BLK_NUM]; }CACHE_BLK_INFO, *pCACHE_BLK_INFO; typedef struct tagCIR_QUEUE { uint16 max; uint16 front; uint16 rear; uint16 count; uint16 arr[MAX_FREE_BLK_NUM]; }CIR_QUEUE, *pCIR_QUEUE; typedef struct tagFTL_INFO { uint8 valid; //FTLÓÐЧ uint16 ftlVer; //FTL°æ±¾ºÅ uint8 secPerPage; //FLASHµÄpage size uint16 secPerBlk; //FLASHµÄblock size uint16 startPhyBlk; //FLASH×÷ΪÊý¾ÝÇøµÄÆðʼ¿é uint32 maxPhyBlk; //FLASH×÷ΪÊý¾ÝÇøµÄ×î´ó¿é uint16 totalLogicBlk; REMAP_INFO remapInfo; //¿éÓ³Éä±í, ËæÈÝÁ¿´óС¶ø±ä, e.g. 32GB/(1MB/blk)=64KB BAD_BLK_INFO badBlkInfo; //»µ¿éÐÅÏ¢ CACHE_BLK_INFO cacheBlkInfo; //CACHE¿éÐÅÏ¢ CIR_QUEUE freeBlkInfo; //¿Õ¿é±í, µ±´ÅÅÌ¿Õ¼äÂúʱÖÁÉÙ±£Ö¤ÓÐ64¿é¿ÉÒÔ¹ö¶¯ EXCH_BLK_INFO exchBlk[MAX_EXCH_BLK_NUM];//½»»»¿é uint8 cacheSortList[MAX_CACHE+1]; pFTL_CACHE curCache; FTL_CACHE cache[MAX_CACHE]; }FTL_INFO, *pFTL_INFO; //1È«¾Ö±äÁ¿ #undef EXT #ifdef IN_FTL #define EXT #else #define EXT extern #endif EXT FTL_INFO gFtlInfo; EXT uint32 gCacheBuf[MAX_CACHE][PAGE_SIZE]; EXT uint32 CurEraseBlock; //1º¯ÊýÔ­ÐÍÉùÃ÷ //FTL.c extern int32 FTLInit(void); extern uint16 GetRemapBlk(uint16 LBA, uint16 PBA); extern uint32 GetRemap(uint32 LBA, uint8 mod); extern uint32 GetUnremap(uint32 PBA); extern uint32 FlashProgError(uint32 secAddr, void *DataBuf, uint16 nSec); extern void FtlCacheDelayHook(void); extern uint32 FtlGetCapacity(uint8 LUN); extern int32 FtlRead(uint8 LUN, uint32 Index, uint32 nSec, void *buf); extern uint32 FtlWritePage(uint32 Index, void *pData); extern int32 FtlWrite(uint8 LUN, uint32 Index, uint32 nSec, void *buf); extern void FtlFlashSysProtSetOn(void); extern void FtlFlashSysProtSetOff(void); extern void FtlLowFormatSysDisk(void); //1±í¸ñ¶¨Òå #ifdef IN_FTL #else #endif #endif