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

📄 blockdev.c

📁 M-System DOC(Disk on a Chip) Flash芯片映像读写工具, 可以进行二片Flash芯片的内容互相拷贝, 提高烧录程序的效率.
💻 C
📖 第 1 页 / 共 5 页
字号:
   /*
    * Set default values to per platform variables
    */

#ifdef ENVIRONMENT_VARS
#ifdef VERIFY_WRITE
/* Max sectors verified per write operation (must be even number) */
   flSectorsVerifiedPerFolding = 64;
#endif /* VERIFY_WRITE */
#ifdef MULTI_DOC
/* No multi-doc (MTL)                        */
   flUseMultiDoc               = FL_OFF;
/* MTL defragmentaion mode (0 - standard)    */
   flMTLdefragMode             = FL_MTL_DEFRAGMENT_ALL_DEVICES;
#endif /* MULTI_DOC */
/* Maximum chain length                      */
   flMaxUnitChain              = 7;
/* Mark the delete sector on the flash       */
   flMarkDeleteOnFlash         = FL_ON;
#endif /* ENVIRONMENT_VARS */
}

#ifdef ENVIRONMENT_VARS

/*----------------------------------------------------------------------*/
/*                   f l S e t E n v V o l u m e                        */
/*                                                                      */
/* Change one of TrueFFS environment variables for a specific partition */
/*                                                                      */
/* Note : This routine is used by all other flSetEnv routines.          */
/*        In order to effect variables that are common to several       */
/*        sockets or volumes use INVALID_VOLUME_NUMBER                  */
/*                                                                      */
/* Parameters:                                                          */
/*      variableType    : variable type to cahnge                       */
/*      socket          : Associated socket                             */
/*      volume          : Associated volume (partition)                 */
/*      value           : varaible value                                */
/*                                                                      */
/* Note: Variables common to all sockets must be addressed using socket */
/*       0 and volume 0.                                                */
/*                                                                      */
/* Returns:                                                             */
/*      FLStatus        : 0 on success, otherwise failed                */
/*      prevValue       : The previous value of the variable            */
/*----------------------------------------------------------------------*/

TFFS_DLL_API FLStatus NAMING_CONVENTION flSetEnvVolume(FLEnvVars variableType ,
                  FLByte  socket,FLByte  volume ,
                  FLDword value, FLDword FAR2 *prevValue)
{
   /* Arg sanity check */
   if(prevValue == NULL)
   {
      DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: prevValue argument should not be NULL.\r\n");
      return flBadParameter;
   }
   switch (variableType) /* Check value argument is a valid mode */
   {
      case FL_SET_MAX_CHAIN:
         if ((value > 14) || (value < 1))
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: Chains length must between 1 and 14.\r\n");
            return flBadParameter;
         }
         break;
#ifdef VERIFY_WRITE
      case FL_SECTORS_VERIFIED_PER_FOLDING:
         if (value & 1) /* odd number */
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: sector verification numbr must be even.\r\n");
            return flBadParameter;
         }
         break;
      case FL_VERIFY_WRITE_BDTL:
         if ((value != FL_UPS) && (value != FL_OFF) && (value != FL_ON))
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: verify write of BDTL can not accept this value.\r\n");
            return flBadParameter;
         }
         break;
#endif /* VERIFY_WRITE */
      case FL_SUSPEND_MODE:
         if( (value != FL_OFF          ) && 
            ((value & (FL_SUSPEND_WRITE | FL_SUSPEND_IO | FL_IGNORE_ERASE | FL_IGNORE_WRITE)) == 0))
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: No such suspention value.\r\n");
            return flBadParameter;
         }
         break;
#ifndef FL_NO_USE_FUNC
      case FL_MTD_BUS_ACCESS_TYPE:
         break;
#endif /* FL_NO_USE_FUNC */
#ifdef FL_FAR_MALLOC
      case FL_MAX_CACHE_SIZE:
         if(value > 0xfff)
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: Max cache size is limited to 0xfff.\r\n");
            return flBadParameter;
         }
         break;
#endif /* FL_FAR_MALLOC */

      default:
         if ((value != FL_ON)&&(value!=FL_OFF))
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: Value must be either FL_ON (1) or FL_OFF(0).\r\n");
            return flBadParameter;
         }
   }

   switch (variableType) /* Check volume and socket sanity */
   {
      /* Volume specfic variables */
      case FL_DO_NOT_WAIT_FOR_READY:
      case FL_NO_STATIC_FILES_WEAR_LEVELING:
#ifdef FL_FAR_MALLOC
      case FL_MAX_CACHE_SIZE:
#endif /* FL_FAR_MALLOC */
      case FL_SET_POLICY:
#ifdef VERIFY_WRITE
      case FL_VERIFY_WRITE_BDTL:
#endif /* VERIFY_WRITE */
#ifdef VERIFY_WRITE
      case FL_VERIFY_WRITE_BINARY:
#endif /* VERIFY_WRITE */
         if (( volume       >= FL_MAX_TL_PARTITIONS          ) ||
             ((variableType == FL_VERIFY_WRITE_BINARY) &&
              (volume       == FL_MAX_TL_PARTITIONS - 1 )    )   )
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: No such volume, therefore can not change environment variable.\r\n");
            return flBadParameter;
         }
         if (socket>=SOCKETS)
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: No such socket, therefore can not change environment variable.\r\n");
            return flBadParameter;
         }
         break;

      /* Socket specfic variables */
      case FL_SUSPEND_MODE:
#ifdef VERIFY_WRITE
      case FL_VERIFY_WRITE_OTHER:
#endif /* VERIFY_WRITE */
      case FL_MTD_BUS_ACCESS_TYPE:
         if (socket>=SOCKETS)
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: No such socket, therefore can not change environment variable.\r\n");
            return flBadParameter;
         }
         if (volume!=INVALID_VOLUME_NUMBER)
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: This global variable is common to all volumes.\r\n");
            return flBadParameter;
         }
         break;

      /* Global variables for all sockets and volumes */
#ifdef VERIFY_WRITE
      case FL_SECTORS_VERIFIED_PER_FOLDING:
#endif /* VERIFY_WRITE */
      case FL_TL_CACHE_ENABLED:
      case FL_DOC_8BIT_ACCESS:
      case FL_MULTI_DOC_ENABLED:
      case FL_SET_MAX_CHAIN:
      case FL_MARK_DELETE_ON_FLASH:      
      case FL_MTL_POLICY:
         if ((socket!=INVALID_VOLUME_NUMBER) || (volume!=INVALID_VOLUME_NUMBER))
         {
            DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: This global variable is common to all sockets and volumes.\r\n");
            return flBadParameter;
         }
         break;

      default:
         DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - flSetEnvVolume: Unknown variable type.\r\n");
         return flFeatureNotSupported;
   }

   /* Make sure environement variables are */
   /* initialized to their default values  */
   flInitGlobalVars();


   /***************************************************/
   /* Arguments have been checked now change variable */
   /* and report the previous value.                  */
   /***************************************************/

   switch (variableType)
   {
      case FL_TL_CACHE_ENABLED:
         *prevValue                  = (FLDword)flUseNFTLCache;
         flUseNFTLCache              = (FLByte )value;
         break;
      case FL_DOC_8BIT_ACCESS:
         *prevValue                  = (FLDword)flUse8Bit;
         flUse8Bit                   = (FLByte )value;
         break;
      case FL_SET_MAX_CHAIN:
         *prevValue                  = (FLDword)flMaxUnitChain;
         flMaxUnitChain              = (FLByte )value;
         break;
      case FL_MARK_DELETE_ON_FLASH:
         *prevValue                  = (FLDword)flMarkDeleteOnFlash;
         flMarkDeleteOnFlash         = (FLByte )value;
         break;
#ifdef MULTI_DOC
      case FL_MULTI_DOC_ENABLED:
         *prevValue                  = (FLDword)flUseMultiDoc;
         flUseMultiDoc               = (FLByte )value;
         break;
      case FL_MTL_POLICY:
         *prevValue                  = (FLDword)flMTLdefragMode;
         flMTLdefragMode             = (FLByte )value;
         break;
#endif /* MULTI_DOC */
      case FL_SET_POLICY:
         *prevValue                  = (FLDword)flPolicy[socket][volume];
/*       flPolicy[socket][volume]    = (FLByte )value; */
         break;
#ifdef VERIFY_WRITE
      case FL_SECTORS_VERIFIED_PER_FOLDING:
         *prevValue                  = flSectorsVerifiedPerFolding;
         flSectorsVerifiedPerFolding = value;
         break;
      case FL_VERIFY_WRITE_BDTL:
         *prevValue                    = (FLDword)flVerifyWrite[socket][volume];
         flVerifyWrite[socket][volume] = (FLByte )value;
         break;
#endif /* VERIFY_WRITE */
#ifdef VERIFY_WRITE
      case FL_VERIFY_WRITE_BINARY:
         *prevValue      = (FLDword)flVerifyWrite[socket][volume+FL_MAX_TL_PARTITIONS];
         flVerifyWrite[socket][volume+FL_MAX_TL_PARTITIONS] = (FLByte )value;
         break;
      case FL_VERIFY_WRITE_OTHER:
         *prevValue      = (FLDword)flVerifyWrite[socket][(FL_MAX_TL_PARTITIONS<<1)-1];
         flVerifyWrite[socket][(FL_MAX_TL_PARTITIONS<<1)-1] = (FLByte )value;
         break;
#endif /* VERIFY_WRITE */
      case FL_SUSPEND_MODE:
         *prevValue                  = (FLDword)flSuspendMode[socket];
         flSuspendMode[socket]       = (FLByte )value;
         break;
#ifdef FL_FAR_MALLOC
      case FL_MAX_CACHE_SIZE:
         *prevValue                  = (FLDword)flCacheSize[socket][volume];
         flCacheSize[socket][volume] = (FLWord)value;
         break;
#endif /* FL_FAR_MALLOC */
      case FL_DO_NOT_WAIT_FOR_READY:
         *prevValue                          = (FLDword)flDoNotWaitForReady[socket][volume];
         flDoNotWaitForReady[socket][volume] = (FLByte)value;
         break;
	  case FL_NO_STATIC_FILES_WEAR_LEVELING:
         *prevValue                                    = (FLDword)flSkipStaticFilesWearLeveling[socket][volume];
         flSkipStaticFilesWearLeveling[socket][volume] = (FLByte)value;
		 break;

      default: /* FL_MTD_BUS_ACCESS_TYPE */
#ifndef FL_NO_USE_FUNC
         *prevValue          = flBusConfig[socket];
         flBusConfig[socket] = (FLDword)value;
#endif /* FL_NO_USE_FUNC */
         break;
   }

   return flOK;
}

/*----------------------------------------------------------------------*/
/*                       f l S e t E n v S o c k e t                    */
/*                                                                      */
/* Change one of TrueFFS environment variables for a specific sockets.  */
/*                                                                      */
/* Parameters:                                                          */
/*      variableType    : variable type to cahnge                       */
/*      socket          : socket number                                 */
/*      value           : varaible value                                */
/*                                                                      */
/* Returns:                                                             */
/*      FLStatus        : 0 on success, otherwise failed                */
/*      prevValue       : The previous value of the variable            */
/*                        if there are more then 1 partition in that    */
/*                        socket , the first partition value is returned*/
/*----------------------------------------------------------------------*/

TFFS_DLL_API FLStatus NAMING_CONVENTION flSetEnvSocket(FLEnvVars variableType , FLByte  socket , FLDword value, FLDword FAR2 *prevValue)
{
   FLStatus status = flOK;
   FLByte      volume = 0;

   switch (variableType) /* Check volume and socket sanity */
   {
      /* Volume specific variables */
	  case FL_DO_NOT_WAIT_FOR_READY:
      case FL_NO_STATIC_FILES_WEAR_LEVELING:
#ifdef FL_FAR_MALLOC
      case FL_MAX_CACHE_SIZE:
#endif /* FL_FAR_MALLOC */
      case FL_SET_POLICY:

⌨️ 快捷键说明

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