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

📄 blockdev.c

📁 DOC文件系统驱动源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
         *prevValue                  = (dword)flUseMultiDoc;
         flUseMultiDoc               = (byte)value;
         break;
      case FL_MTL_POLICY:
         *prevValue                  = (dword)flMTLdefragMode;
         flMTLdefragMode             = (byte)value;
         break;
#endif /* MULTI_DOC */
      case FL_SUSPEND_MODE:
         if((value == FL_OFF) && (flSuspendMode != FL_OFF))
#ifdef EXIT
            flExit();
#endif /* EXIT */
         *prevValue                  = (dword)flSuspendMode;
         flSuspendMode               = (byte)value;
         break;
      case FL_SET_POLICY:
         *prevValue                  = (dword)flPolicy[socket][volume];
/*       flPolicy[socket][volume]    = (byte)value; */
         break;
#if (defined(VERIFY_WRITE) || defined(VERIFY_ERASED_SECTOR))
      case FL_SECTORS_VERIFIED_PER_FOLDING:
         *prevValue                  = flSectorsVerifiedPerFolding;
         flSectorsVerifiedPerFolding = value;
         break;
      case FL_VERIFY_WRITE_BDTL:
         *prevValue                    = (dword)flVerifyWrite[socket][volume];
         flVerifyWrite[socket][volume] = (byte)value;
         break;
#endif /* VERIFY_WRITE || VERIFY_ERASED_SECTOR */
#ifdef VERIFY_WRITE
      case FL_VERIFY_WRITE_BINARY:
         *prevValue      = (dword)flVerifyWrite[socket][volume+MAX_TL_PARTITIONS];
         flVerifyWrite[socket][volume+MAX_TL_PARTITIONS] = (byte)value;
         break;
      case FL_VERIFY_WRITE_OTHER:
         *prevValue      = (dword)flVerifyWrite[socket][(MAX_TL_PARTITIONS<<1)-1];
         flVerifyWrite[socket][(MAX_TL_PARTITIONS<<1)-1] = (byte)value;
         break;
#endif /* VERIFY_WRITE */

      default: /* FL_MTD_BUS_ACCESS_TYPE */
#ifndef FL_NO_USE_FUNC
         *prevValue          = flBusConfig[socket];
         flBusConfig[socket] = (dword)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*/
/*----------------------------------------------------------------------*/

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

   switch (variableType) /* Check volume and socket sanity */
   {
      /* Volume specific variables */

      case FL_SET_POLICY:
#if (defined(VERIFY_WRITE) || defined(VERIFY_ERASED_SECTOR))
      case FL_VERIFY_WRITE_BDTL:
#endif /* VERIFY_WRITE || VERIFY_ERASED_SECTOR */
         status = flSetEnvVolume(variableType,socket,MAX_TL_PARTITIONS-1,value,prevValue);
#ifdef VERIFY_WRITE
      case FL_VERIFY_WRITE_BINARY:
#endif /* VERIFY_WRITE */
         for (;(volume<MAX_TL_PARTITIONS-1)&&(status == flOK);volume++)
            status = flSetEnvVolume(variableType,socket,volume,value,prevValue);
         break;

      /* Socket specific variables */

#ifdef VERIFY_WRITE
      case FL_VERIFY_WRITE_OTHER:
#endif /* VERIFY_WRITE */
#ifndef FL_NO_USE_FUNC
      case FL_MTD_BUS_ACCESS_TYPE:
#endif /* FL_NO_USE_FUNC */
#if (defined(VERIFY_WRITE) || !defined(FL_NO_USE_FUNC))
         status = flSetEnvVolume(variableType,socket,INVALID_VOLUME_NUMBER,value,prevValue);
         break; 
#endif /* not FL_NO_USE_FUNC || VERIFY_WRITE */

      /* Either global variables , or unknown */

      default:
         if(socket != INVALID_VOLUME_NUMBER) /* Was not called from flSetEnv */
         {
            DEBUG_PRINT(("Debug: Variable type is either unknown or not socket related.\r\n"));
            return flBadParameter;
         }
         status = flSetEnvVolume(variableType,INVALID_VOLUME_NUMBER,INVALID_VOLUME_NUMBER,value,prevValue);
         break; 
   }
   return status;
}

/*----------------------------------------------------------------------*/
/*                       f l S e t E n v All                            */
/*                                                                      */
/* Change one of TrueFFS environment variables for all systems, sockets */
/* and partitions.                                                      */
/*                                                                      */
/* Parameters:                                                          */
/*      variableType    : variable type to cahnge                       */
/*      value           : varaible value                                */
/*                                                                      */
/* Returns:                                                             */
/*      FLStatus        : 0 on success, otherwise failed                */
/*      prevValue       : The previous value of the variable            */
/*----------------------------------------------------------------------*/

FLStatus NAMING_CONVENTION flSetEnvAll(FLEnvVars variableType , dword value, dword FAR2 *prevValue)
{
   FLStatus status = flOK;
   byte     socket;

   switch (variableType) /* Check volume and socket sanity */
   {
      case FL_SET_POLICY:           /* Per volume */
      case FL_VERIFY_WRITE_BDTL:    /* Per volume */
      case FL_VERIFY_WRITE_BINARY:  /* Per volume */
      case FL_VERIFY_WRITE_OTHER:   /* Per socket */
      case FL_MTD_BUS_ACCESS_TYPE:  /* Per socket */
         for (socket=0;(socket<SOCKETS)&&(status == flOK);socket++)
            status = flSetEnvSocket(variableType,socket,value,prevValue);
         return status;
      default:
         return flSetEnvVolume(variableType,INVALID_VOLUME_NUMBER,INVALID_VOLUME_NUMBER,value,prevValue);
   }
}

#endif /* ENVIRONMENT_VARS */

#ifndef FL_NO_USE_FUNC
/*----------------------------------------------------------------------*/
/*                  f l S e t D o c B u s R o u t i n e                 */
/*                                                                      */
/* Set user defined memory acces routines for DiskOnChip.               */
/*                                                                      */
/* Parameters:                                                          */
/*      socket      : Socket number to install routine for.             */
/*      structPtr   : Pointer to function structure.                    */
/*                                                                      */
/* Returns:                                                             */
/*      FLStatus        : 0 on success, otherwise failed                */
/*----------------------------------------------------------------------*/

FLStatus NAMING_CONVENTION flSetDocBusRoutine(byte socket, FLAccessStruct FAR1 * structPtr)
{
   FLFlash* flash;

   /* Arg sanity check */
   if (socket >= SOCKETS)
   {
      DEBUG_PRINT(("Error : change SOCKETS definition in flcustom.h to support that many sockets.\r\n"));
      return flFeatureNotSupported;
   }
   if(structPtr == NULL)
   {
      DEBUG_PRINT(("ERROR - structPtr argument is NULL.\r\n"));
      return flBadParameter;
   }

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

   flash = flFlashOf(socket);

   flash->memWindowSize = structPtr->memWindowSize;
   flash->memRead       = structPtr->memRead;
   flash->memWrite      = structPtr->memWrite;
   flash->memSet        = structPtr->memSet;
   flash->memRead8bit   = structPtr->memRead8bit;
   flash->memRead16bit  = structPtr->memRead16bit;
   flash->memWrite8bit  = structPtr->memWrite8bit;
   flash->memWrite16bit = structPtr->memWrite16bit;
   flash->memSetGetMode = structPtr->memSetGetMode;
   flBusConfig[socket]  = FL_ACCESS_USER_DEFINED;
   return flOK;
}

/*----------------------------------------------------------------------*/
/*                  f l G e t D o c B u s R o u t i n e                 */
/*                                                                      */
/* Get currently installed memory access routines for DiskOnChip.       */
/*                                                                      */
/* Parameters:                                                          */
/*      socket      : Socket number to install routine for.             */
/*      structPtr   : Pointer to function structure.                    */
/*                                                                      */
/* Returns:                                                             */
/*      FLStatus        : 0 on success, otherwise failed                */
/*----------------------------------------------------------------------*/

FLStatus NAMING_CONVENTION flGetDocBusRoutine(byte socket, FLAccessStruct FAR1 * structPtr)
{
   FLFlash* flash;

   /* Arg sanity check */
   if (socket >= SOCKETS)
   {
      DEBUG_PRINT(("Error : change SOCKETS definition in flcustom.h to support that many sockets.\r\n"));
      return flFeatureNotSupported;
   }
   if(structPtr == NULL)
   {
      DEBUG_PRINT(("ERROR - structPtr argument is NULL.\r\n"));
      return flBadParameter;
   }

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

   flash = flFlashOf(socket);

   structPtr->memWindowSize = flash->memWindowSize;
   structPtr->memRead       = flash->memRead;
   structPtr->memWrite      = flash->memWrite;
   structPtr->memSet        = flash->memSet;
   structPtr->memRead8bit   = flash->memRead8bit;
   structPtr->memRead16bit  = flash->memRead16bit;
   structPtr->memWrite8bit  = flash->memWrite8bit;
   structPtr->memWrite16bit = flash->memWrite16bit;
   structPtr->memSetGetMode = flash->memSetGetMode;
   structPtr->access        = flBusConfig[socket];

   return flOK;
}

#endif /* FL_NO_USE_FUNC */

/*----------------------------------------------------------------------*/
/*                     f l I n i t G l o b a l V a r s                  */
/*                                                                      */
/* Initializes the FLite system, environment and access type variables. */
/*                                                                      */
/* Parameters:                                                          */
/*      None                                                            */
/*                                                                      */
/* Returns:                                                             */
/*      None                                                            */
/*----------------------------------------------------------------------*/

void flInitGlobalVars(void)
{
   FLFlash * flash;
   int i;
   word j;

   if(initGlobalVarsDone == TRUE)
     return;

   /* Do not initialize variables on next call */
   initGlobalVarsDone     = TRUE;

   /*
    * Set default values to per socket/volume variables
    */

   for(i=0;i<SOCKETS;i++)
   {
      flash = flFlashOf(i);
      /* tffsset is not yet initialized */
      for(j=0;j<sizeof(FLFlash);j++)
      {
         ((byte *)flash)[j] = 0;
      }
#ifndef FL_NO_USE_FUNC
      flBusConfig[i] = FL_NO_ADDR_SHIFT        |
                       FL_BUS_HAS_8BIT_ACCESS  |
                       FL_BUS_HAS_16BIT_ACCESS |
                       FL_BUS_HAS_32BIT_ACCESS;
#endif /* FL_NO_USE_FUNC */
#ifdef ENVIRONMENT_VARS
      for (j=0;j<MAX_TL_PARTITIONS;j++)
      {
         flPolicy[i][j]   = FL_DEFAULT_POLICY; /* FL_COMPLETE_ASAP */

⌨️ 快捷键说明

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