Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********************************************************************************
- *********************************************************************************
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement