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

📄 mtdsa.c

📁 M-System DOC(Disk on a Chip) Flash芯片的诊断工具, 可以从Flash芯片中获取特定的数据信息, 用于判断芯片当前的状态.
💻 C
字号:
/***********************************************************************************/
/*                        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/misc/mtdsa.c-arc  $
 * 
 *    Rev 1.3   Sep 01 2003 19:05:46   oris
 * - Changed noOfSockets to int instead of FLByte - removed compilation warnings.
 * - changed MTDS definition to FL_MTDS
 * 
 *    Rev 1.2   May 06 2003 11:56:14   OriS
 * Removed memory manipulation routine pointers.
 * 
 *    Rev 1.1   Apr 27 2003 14:12:14   Oris
 * Bug fix - added support for ENVIRONMENT_VARS compilation flag.
 * 
 *    Rev 1.0   Apr 09 2003 12:15:56   OriS
 * Initial revision.
 * 
 */

/************************************************************************/
/*                                                                      */
/* Standalone MTD Kit                                                   */
/*                                                                      */
/************************************************************************/

/************************************************************************/
/* File Header                                                          */
/* -----------                                                          */
/* Name : mtdsa.c                                                       */
/*                                                                      */
/* Description : This file contains auxiliary routines for the MTD      */
/*               standalone package, replacing TrueFFS routines.        */
/*                                                                      */
/* Note : This file should be added to the project only if the          */
/*        MTS_STANDALONE compilation flag is defined in FLCUSTOM.H      */
/*                                                                      */
/*        It is not a part of a TrueFFS project.                        */
/*                                                                      */
/************************************************************************/

#include "flbase.h"
#include "nanddefs.h"
#include "docsys.h"
#include "docbdk.h"

#ifdef MTD_STANDALONE

#include "flbuffer.h" /* defintion for READ_BACK_BUFFER_SIZE */

#ifndef FL_NO_USE_FUNC
FLDword      flBusConfig[SOCKETS] = {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 VERIFY_WRITE
FLByte      MTDSAReadBackBuffer[1024]; /* Ori - Should be moved to logical MTD */
#endif /* VERIFY_WRITE */

FLBuffer           MTDSABuffer ;
FLFlash            MTDSAFlash;  /* flash record for the stand alone version  */
FLSocket           MTDSASocket; /* socket record for the stand alone version */
FREEmtd            freeTable[FL_MTDS];
FLByte             noOfSockets;

/*----------------------------------------------------------------------*/
/*                    f l S e t W i n d o w S i z e                     */
/*                                                                      */
/* Requests to set the window size to a specified value (power of 2).   */
/* The window size is set to a size equal or greater than requested,    */
/* if possible in hardware.                                             */
/*                                                                      */
/* Parameters:                                                          */
/*        vol                : Pointer identifying drive                */
/*      sizeIn4KBUnits : Requested window size in 4 KByte units.        */
/*                         MUST be a power of 2.                        */
/*                                                                      */
/*----------------------------------------------------------------------*/
void flSetWindowSize(FLSocket * socketPtr, unsigned sizeIn4KBunits)
{
  socketPtr->window.size = (FLDword) sizeIn4KBunits << 12L;
  socketPtr->window.base = physicalToPointer((FLDword) socketPtr->window.baseAddress << 12,
                                      socketPtr->window.size,socketPtr->volNo);
}

#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(FLByte  socket, FLAccessStruct FAR1 * structPtr)
{
   FLFlash* flash;

   /* Arg sanity check */
#ifndef FL_SKIP_ARGS_CHECK
   if (socket >= SOCKETS)
   {
      DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - Change SOCKETS definition in flcustom.h to support that many sockets.\r\n");
      return flFeatureNotSupported;
   }
   if(structPtr == NULL)
   {
      DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - structPtr argument is NULL.\r\n");
      return flBadParameter;
   }
#endif /* FL_SKIP_ARGS_CHECK */

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

   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(FLByte  socket, FLAccessStruct FAR1 * structPtr)
{
   FLFlash* flash;

   /* Arg sanity check */
#ifndef FL_SKIP_ARGS_CHECK
   if (socket >= SOCKETS)
   {
      DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - Change SOCKETS definition in flcustom.h to support that many sockets.\r\n");
      return flFeatureNotSupported;
   }
   if(structPtr == NULL)
   {
      DBG_PRINT_ERR(FLZONE_BLKDEV,"ERROR - structPtr argument is NULL.\r\n");
      return flBadParameter;
   }
#endif /* FL_SKIP_ARGS_CHECK */

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

   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 */

#endif /* MTD_STANDALONE */

⌨️ 快捷键说明

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