⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saftl.h

📁 M-System DOC(Disk on a Chip) Flash芯片映像读写工具, 可以进行二片Flash芯片的内容互相拷贝, 提高烧录程序的效率.
💻 H
📖 第 1 页 / 共 2 页
字号:
/***********************************************************************************/
/*                        M-Systems Confidential                                   */
/*           Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2003            */
/*                         All Rights Reserved                                     */
/***********************************************************************************/
/*                            NOTICE OF M-SYSTEMS OEM                              */
/*                           SOFTWARE LICENSE AGREEMENT                            */
/*                                                                                 */
/*      THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE                 */
/*      AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT           */
/*      FOR THE SPECIFIC TERMS AND CONDITIONS OF USE,                              */
/*      OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE:                               */
/*      E-MAIL = info@m-sys.com                                                    */
/***********************************************************************************/

/*
 * $Log:   V:/PVCSDB/DiskOnChip/archives/general storage/TrueFFS/src/tl/saftl.h-arc  $
 * 
 *    Rev 1.11   Jan 27 2004 08:14:00   oris
 * Changed comments
 * 
 *    Rev 1.10   Sep 30 2003 17:53:36   oris
 * Added FL prefix to SECTOR_SIZE and SECTOR_SIZE_BITS
 * 
 *    Rev 1.9   Sep 21 2003 10:18:46   OriS
 * Added noOfQuickMountUnits to TL private record.
 * 
 *    Rev 1.8   Sep 01 2003 19:03:26   oris
 * - Changed SAFTL_UNMOUNTED_UNIT from 0xf805 to 0xF810 - Unit not mounted yet
 * - Changed SAFTL_TO_BE_ERASED   from 0xf806 to 0xF811 - Unit should be erased
 * - Added SAFTL_FREE_NOT_ERASED_UNIT 0xf805 - Unused unit that wasa not erased yet
 * - Added 2 new fields to the media header: 
 *      ProgrammerName    - Programmer name
 *      ProgrammerVersion - Programmer version
 * 
 *    Rev 1.7   Jun 19 2003 13:35:52   OriS
 * Removed warnings
 * 
 *    Rev 1.6   Jun 16 2003 01:18:50   oris
 * Added GetSSC and GetVSO macros.
 * 
 *    Rev 1.5   May 16 2003 00:58:46   OriS
 * Bug fix - leave binary partition when disk partition is protected might cause media header to become corrupted.
 * 
 *    Rev 1.4   May 12 2003 22:53:50   oris
 * Added minimal TrueFFS version field in the media header to support future competability.
 * 
 *    Rev 1.3   May 11 2003 08:28:42   OriS
 * Changed static folding buffer size to 2KB instead of 4KB.
 * Added SAFTL_ALGORITHM_SWITCH_PEERCENTAGE definition for setting the percentage of the media to switch folding algorithms.
 * Improved cache size default algorithm.
 * 
 *    Rev 1.2   May 06 2003 11:55:46   OriS
 * Changed SAFTL_K_NUMBER_OF_CACHED_UNITS to FL_NUMBER_OF_CACHED_UNITS
 * 
 *    Rev 1.1   Apr 27 2003 09:04:18   Oris
 * changed static files wear leveling counter to 0x1000
 * Added MAX_BAD_UNIT_IN_FORMAT  which controllers the number of allowed dynamic bad blocks.
 * Added unused fields to the media header.
 * 
 *    Rev 1.0   Apr 09 2003 12:15:54   OriS
 * Initial revision.
 * 
 */


/*******************************************/
/* T r u e F F S   S o u r c e   F i l e s */
/* --------------------------------------- */
/*******************************************/

/*****************************************************************************
* File Header                                                                *
* -----------                                                                *
* Name : saftl.h                                                             *
*                                                                            *
* Description : Data strucute and genreal defintions for SAFTL flash         *
*               translation layer.                                           *
*                                                                            *
*****************************************************************************/


#ifndef SAFTL_H
#define SAFTL_H

#include "flbuffer.h"
#include "flflash.h"
#include "fltl.h"

/*********************************/
/* Private macro's Used by SAFTL */
/*********************************/

/* Produce sector number out of unit and sector offset */
#define UnitAndOffset(volPrmPtr,unitNo,sectorNo)     \
        (((FLDword)((unitNo) + (volPrmPtr)->firstUnit)     \
         << (volPrmPtr)->sectorsInUnitBits) + (sectorNo))
/* Failed erasing a unit, mark it as bad */
#define MarkUnitBad(volPrmPtr,wIUnit) \
        (volPrmPtr)->LUT[wIUnit] = SAFTL_UNAVAILABLE_UNIT
/* Check if the 2 ANAC are consecutive */
#define ConsecutiveANAC(A,B) \
        (((A+1) & SAFTL_CHAIN_LENGTH_MASK) == (B & SAFTL_CHAIN_LENGTH_MASK))
/* Get ANAC from Chain length table */
#define GetANAC(volPrmPtr,wLogicalUnit) \
        (((volPrmPtr)->CLT[wLogicalUnit] & SAFTL_ANAC_MASK) >> SAFTL_ANAC_SHIFT)
#define SetANAC(volPrmPtr,wLogicalUnit,val) \
        (volPrmPtr)->CLT[wLogicalUnit] &= ~SAFTL_ANAC_MASK; \
        (volPrmPtr)->CLT[wLogicalUnit] |= (val) << SAFTL_ANAC_SHIFT
/* Get Chains length from Chain length table */
#define GetChainLength(volPrmPtr,wVirtualUnit) \
        ((volPrmPtr)->CLT[wVirtualUnit] & SAFTL_CHAIN_LENGTH_MASK)
#define SetChainsLength(volPrmPtr,wVirtualUnit,val)               \
        (volPrmPtr)->CLT[wVirtualUnit] &= ~SAFTL_CHAIN_LENGTH_MASK; \
        (volPrmPtr)->CLT[wVirtualUnit] |= (val)
/* Check if virtual unit is cached */
#define IsUnitCached(volPrmPtr,virtualUnitNo)                    \
        (((volPrmPtr)->VUT[virtualUnitNo] >= SAFTL_CACHED_UNIT) && \
         ((volPrmPtr)->VUT[virtualUnitNo] != SAFTL_UNUSED_UNIT))  
/* Check if virtual unit is in use */
#define IsVirtualUnitFreeOrCached(volPrmPtr,wVirtualUnit) \
        (volPrmPtr->VUT[wVirtualUnit] >= SAFTL_CACHED_UNIT)
/* Check if a logical unit is in use */
#define IsLogicalUnitInUse(volPrmPtr,wLogicalUnit) \
        (volPrmPtr->LUT[wLogicalUnit] > SAFTL_UNUSED_UNIT_BOUNDARY)
/* Get virtual unit cache entry index */
#define GetCacheIndex(volPrmPtr,wVirtualUnit) \
        (((volPrmPtr)->VUT[wVirtualUnit]) & (~SAFTL_CACHED_UNIT))
/* Get pointer to unit cache entry using its index */
#define GetCachePtr(volPrmPtr,wCacheIndex)  \
        ((volPrmPtr)->CT + (wCacheIndex))
/* Get logical address offset in the unit */
#define ToUnitOffset(volPrmPtr,logicalSector) \
        (FLWord)((logicalSector) & ((volPrmPtr)->sectorsInUnitMask))
/* Get sector cache entry using the unit cache entry */
#define SectorCacheEntry(volPrmPtr,cachePtr)  \
          ((FLWord FAR1 *)((volPrmPtr)->sectors + \
           (((cachePtr) - (volPrmPtr)->CT) << (volPrmPtr)->sectorsInUnitBits)))
/* Change sector number to the begining of the next page */
#define SetToNextPageStart(volPrmPtr,target) \
        (((target) & (volPrmPtr)->pageMask) + (volPrmPtr)->minSectorsForNextWrite)
/* Round upwards to full sectors */
#define RoundToSectors(size) \
        ((((size) + FL_SECTOR_SIZE - 1)>>FL_SECTOR_SIZE_BITS)<<FL_SECTOR_SIZE_BITS)
/* Get VSO value */
#define GetVSO(VSO) \
        (LE2((VSO)) & SAFTL_VSO_SECTOR_OFFSET_MASK) 
/* Get SSC value */
#define GetSSC(offset,SSC) \
	    (((offset) == 0) ? 0 : LE2((SSC)) & SAFTL_VSO_SECTOR_OFFSET_MASK)

/* TL/Socket buffer */
#define saftlBuffer         volPrmPtr->buffer

/*************************/
/* Customization Section */
/*************************/

/* TL limits */
#if (defined(ENVIRONMENT_VARS) && defined(FL_MALLOC)) /* Set at run time */
#define FL_NUMBER_OF_CACHED_UNITS flCacheSize[flSocketNoOf(volPrmPtr->flash->socket)][partitionNo]
#else /* Set at compile time */
#ifndef FL_NUMBER_OF_CACHED_UNITS
#ifndef FL_MALLOC
#define FL_NUMBER_OF_CACHED_UNITS FL_DEFAULT_CACHE_SIZE_FOR_MINIMAL_CACHE
#else /* FL_MALLOC */
#ifdef FL_TL_CACHE
#define FL_NUMBER_OF_CACHED_UNITS 0xFFFL
#else /* FL_TL_CACHE */
#define FL_NUMBER_OF_CACHED_UNITS FL_DEFAULT_CACHE_SIZE_FOR_MINIMAL_CACHE
#endif /* FL_TL_CACHE */
#endif /* FL_MALLOC */
#endif /* FL_NUMBER_OF_CACHED_UNITS */
#endif /* ENVIRONMENT_VARS && FL_MALLOC */

#ifndef SAFTL_WEAR_LEVELING_LIMIT
#define SAFTL_WEAR_LEVELING_LIMIT  0x1000L /* Limit for wear leveling */
#endif /* SAFTL_WEAR_LEVELING_LIMIT */

#ifndef MAX_UNIT_CHAIN
#ifdef ENVIRONMENT_VARS
#define MAX_UNIT_CHAIN                 flMaxUnitChain
#else /* ENVIRONMENT_VARS not defined */
#define MAX_UNIT_CHAIN                 7
#endif /* ENVIRONMENT_VARS */
#endif /* MAX_UNIT_CHAIN */

#ifndef ASSUMED_FOLDING_BUFFER_SIZE
#define ASSUMED_FOLDING_BUFFER_SIZE    2048
#endif /* ASSUMED_FOLDING_BUFFER_SIZE */
#ifndef ASSUMED_LAST_WRITE_BUFFER_SIZE
#define ASSUMED_LAST_WRITE_BUFFER_SIZE 8192
#endif /* ASSUMED_LAST_WRITE_BUFFER_SIZE */

#ifndef SAFTL_MAX_PARTITIONING_TRIES
#define SAFTL_MAX_PARTITIONING_TRIES 5
#endif /* SAFTL_MAX_PARTITIONING_TRIES */

#ifndef SAFTL_ALGORITHM_SWITCH_PEERCENTAGE
#define SAFTL_ALGORITHM_SWITCH_PEERCENTAGE 65
#endif /* SAFTL_ALGORITHM_SWITCH_PEERCENTAGE */


/***********************/
/* General Definitions */
/***********************/

/* Media flags */

/* Partition flags */
#define SAFTL_RUGGEDIZED            0x01000000L
#define SAFTL_BINARY                0x02000000L
#define SAFTL_BDTL                  0x04000000L
#define SAFTL_LAST                  0x08000000L
#define SAFTL_QUICK_MOUNT           0x10000000L
#define SAFTL_ADVANCED_MATCHING     0x00100000L
#define SAFTL_REL_PARTITION         0x00200000L
#define SAFTL_FAST_PARTITION        0x00400000L
#define SAFTL_NO_MATCHING           0x00800000L

/* PROTECTABLE            defined in flflash.h as 1   */
/* READ_PROTECTED         defined in flflash.h as 2   */
/* WRITE_PROTECTED        defined in flflash.h as 4   */
/* LOCK_ENABLED           defined in flflash.h as 8   */
/* LOCK_ASSERTED          defined in flflash.h as 16  */
/* KEY_INSERTED           defined in flflash.h as 32  */
/* CHANGEABLE_PROTECTION  defined in flflash.h as 64  */
/* STICKY_LOCK_ASSERTED   defined in flflash.h as 128 */

/* VUT values */
#define SAFTL_CACHED_UNIT          0xF000 /* Indicates a unit is cached     */

/* Additional LUT values valid only during the mount proccess */
#define SAFTL_UNMOUNTED_UNIT       0xF810 /* Unit not mounted yet           */
#define SAFTL_TO_BE_ERASED         0xF811 /* Unit should be erased          */ 

/* LUT values */
#define SAFTL_UNINITIALIZED_OLDEST 0xF800 /* Oldest in chain unit with      */
                                          /* uninitialized last used sector */
#define SAFTL_FREE_UNIT            0xF801 /* Unused logical unit            */
#define SAFTL_BAD_UNIT             0xF802 /* Unsable unit marked by the MTD */
#define SAFTL_UNAVAILABLE_UNIT     0xF803 /* Unsable unit marked by the TL  */
#define SAFTL_FAILED_TO_ERASE      0xF804 /* Failed erasing this unit, try  */
#define SAFTL_FREE_NOT_ERASED_UNIT 0xF805 /* Unused unit that was not       */
                                          /* verified as an erased unit     */
#define SAFTL_UNUSED_UNIT_BOUNDARY 0xF800 /* Higher LUT value indicate the  */
                                          /* unit is not in use.            */
#define SAFTL_OLDER_UNIT_LIMIT     0xEFFF /* Largest LUT value that points  */
                                          /* to older logical unit          */
                                          /* not to use it                  */

/* Both LUT and VUT values */
#define SAFTL_UNUSED_UNIT          0xFFFF

/* Sector values */
#define SAFTL_INVALID_SECTOR_NO        0xFFFFFFFF /* ANAND_UNASSIGNED_ADDRESS */

/* Sector cache entrie values */
#define SAFTL_SECTOR_NOT_VALID         0x8001 /* Uninitialized            */
#define SAFTL_SECTOR_NOT_FOUND         0x8000 /* Deleted or never written */
#define SAFTL_NONE_USED_SECTOR_MASK    0x8000 /* Either of the above      */

/* Sector flash flags */
#define SAFTL_VSO_SECTOR_FREE_FLAG     0xC000 /* Sector is free : 14-15 LSB */
#define SAFTL_VSO_SECTOR_USED_FLAG     0x8000 /* Sector is used : 14-15 LSB */
#define SAFTL_VSO_SECTOR_TRANSACTION   0x3800 /* 11-13 LSB - transaction    */
#define SAFTL_SSC_SECTOR_RESERVED      0xC000 /* 14-15 LSB - SSC reserved   */
#define SAFTL_ANAC_SECTOR_RESERVED     0x70   /*  4-6  LSB - ANAC reserved  */

/* Sector flash masks */
#define SAFTL_VSO_SECTOR_OFFSET_MASK       0x7FF  /*  0-10 LSB - sector offset      */
#define SAFTL_VSO_SECTOR_TRANSACTION_MASK  0x3800 /* 11-13 LSB - sector transcation */
#define SAFTL_VSO_SECTOR_FLAGS_MASK        0xC000 /* 14-15 LSB - sector flags       */
#define SAFTL_SSC_RESERVED_MASK            0xC000 /* 14-15 LSB - SSC reserved       */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -