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

📄 systffs.c

📁 VxWOrks中bspMCF5200下的Nand Flash TFFS的驱动程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
/* sysTffsStub.c - BSP stub for TrueFFS Socket Component Driver *//* Copyright 1984-2000 Wind River Systems, Inc. *///#include "copyright_wrs.h"/*modification history--------------------01e,22may02,nrv  Adding INCLUDE_MTD_CFIAMD01d,13nov01,nrv  made use of PRJ_BUILD01c,09nov01,nrv  merging in T3 version with some cleanup01b,14dec00,yp   Documentation cleanup01a,29nov00,yp   derived from ads860 sysTffs.c 01j.*//*This stub file provides the user with the means to create a TrueFFS compliant socket component driver for use with any BSP. This is sample code and it isexpected, even required, to be modified after it is added to a BSP by the project facility when the component INCLUDE_TFFS is added to a kernel project.Look for #error and TODO statements in the sample code.This stub does not provides code, just some procedural macros that thegeneric driver code will use.DESCRIPTIONThis library must provide board-specific hardware access routines for TrueFFS.In effect, these routines comprise the socket component driver (or drivers)for your flash device.  At socket registration time, TrueFFS storesthe functions provided by this socket component driver in an 'FLSocket'structure.  When TrueFFS needs to access the flash device, it uses thesefunctions.  Because this file is, for the most part, a device driver that exports itsfunctionality by registering function pointers with TrueFFS, very few of thefunctions defined here are externally callable.  For the record, the onlyexternal functions are flFitInSocketWindow() and flDelayLoop(), and you shouldnever have to call them. However, one of the most important functions defined in this file is neitherreferenced in an 'FLSocket' structure, nor is it externally callable.  Thisfunction is sysTffsInit() and it should only be called by TrueFFS.  TrueFFS calls this function at initialization time to register socket component drivers for all the flash devices attached to your target.  It is this call to sysTffs() that results in assigning drive numbers to the flash devices on your target hardware.  Drive numbers are assigned by the order in which the socket component drivers are registered. The first to be registered is drive 0, the second is drive 1, and so on up to 4.  As shipped, TrueFFS supports up to five flash drives. After registering socket component drivers for a flash device, you mayformat the flash medium even though there is not yet a block device driverassociated with the flash (see the reference entry for the tffsDevCreate()routine).  To format the flash medium for use with TrueFFS,call tffsDevFormat() or, for some BSPs, sysTffsFormat(). The sysTffsFormat() routine is an optional,BSP-specific helper routine thatcan be called externally. Internally, sysTffsFormat() calls tffsDevFormat() with a pointer to a 'FormatParams' structure that is initialized to values that leave a space on the flash device for a boot image. This space is outside the region managed by TrueFFS.  This special region is necessary for bootimages because the normal translation and wear-leveling services of TrueFFSare incompatible with the needs of the boot program and the boot image itrelies upon.  To write a boot image (or any other data) into this area,use tffsBootImagePut().  The function sysTffsFormat() is only provided when a Flash SIMM has to have the TrueFFS file system in some desired fraction of it. It is provided only for the purpose of simplifying the process of formatting a Flash part that that should be subdivided.The Flash SIMM might also be referred to as RFA (Resident Flash Array) in the following text.Example implentations of sysTffs.c can be found in the directory    $(WIND_BASE)/target/src/drv/tffs/socketsThe files sds860-sysTffs.c and pc386-sysTffs.c have support for single and dual socketed PCMCIA devices as well if that might be useful to you. They both support multiple sockets.Finally, this file also contains define statements for symbolic constantsthat determine which MTDs, translation layer modules, and other utilitiesare ultimately included in TrueFFS.  These defines are as follows:.IP "INCLUDE_TL_FTL"To include the NOR-based translation layer module..IP "INCLUDE_TL_SSFDC"To include the SSFDC-appropriate translation layer module..IP "INCLUDE_MTD_I28F016"For Intel 28f016 flash devices..IP "INCLUDE_MTD_I28F008"For Intel 28f008 flash devices..IP "INCLUDE_MTD_I28F008_BAJA"For Intel 28f008 flash devices on the Heurikon Baja 4700..IP "INCLUDE_MTD_AMD"For AMD, Fujitsu: 29F0{40,80,16} 8-bit flash devices..IP "INCLUDE_MTD_CFIAMD"For CFI compliant AMD, Fujitsu flash devices..IP "INCLUDE_MTD_CFISCS"For CFI/SCS flash devices..IP "INCLUDE_MTD_WAMD"For AMD, Fujitsu 29F0{40,80,16} 16-bit flash devices..IP "INCLUDE_TFFS_BOOT_IMAGE"To include tffsBootImagePut() in TrueFFS for Tornado..LPTo exclude any of the modules mentioned above, edit sysTffs.c and undefineits associated symbolic constant.INCLUDE FILES: flsocket.h, tffsDrv.h*///#error "sysTffs : Verify system macros and function before first use"/* includes */#include "vxWorks.h"#include "taskLib.h"//#include "config.h"/*mengjun 2007-4-5*/#include "tffs\flsocket.h"#include "tffs\tffsDrv.h"/* defines *///#ifndef PRJ_BUILD/*2007-4-12 19:27 mengjun*/#undef INCLUDE_MTD_I28F016             /* Intel: 28f016 */#define INCLUDE_MTD_K9F4G080UA          /*20070202 mengjun 增加,samsung:K9F4G080UA*/#undef INCLUDE_MTD_I28F008             /* Intel: 28f008 */#undef INCLUDE_MTD_AMD                 /* AMD, Fujitsu: 29f0{40,80,16} 8bit */#undef  INCLUDE_MTD_CFIAMD              /* CFI driver for AMD Flash Part */#undef  INCLUDE_MTD_CFISCS              /* CFI/SCS */#undef  INCLUDE_MTD_WAMD                /* AMD, Fujitsu: 29f0{40,80,16} 16bit */#define INCLUDE_TL_FTL                  /* FTL translation layer */#undef  INCLUDE_TL_SSFDC                /* SSFDC translation layer */#define INCLUDE_SOCKET_SIMM             /* SIMM socket interface */#define INCLUDE_SOCKET_PCMCIA           /* PCMCIA socket interface *///#endif  /* PRJ_BUILD *//* TODO :  * If you don't use TrueFFS to write your boot image you might want * to undefine this. *//*mj-20070202 define->undef*/#undef INCLUDE_TFFS_BOOT_IMAGE		/* include tffsBootImagePut() *//* TODO :  * set these to board specific values. * The values used here are fictional. *//*2007-4-12 15:50 mengjun*/#define	FLASH_BASE_ADRS		0	/* Flash memory base address *//*2007-4-12 15:54 mengjun*/#define	FLASH_SIZE		0x1F400000L//2007-5-16 12:09 0x20000000->0x2000000L	/* Flash memory size */#define VCC_DELAY_MSEC		100	/* Millisecs to wait for Vcc ramp up */#define VPP_DELAY_MSEC		100	/* Millisecs to wait for Vpp ramp up */#define KILL_TIME_FUNC	 ((iz * iz) / (iz + iz)) / ((iy + iz) / (iy * iz))/* locals */LOCAL UINT32 sysTffsMsecLoopCount = 0;/* forward declarations */LOCAL FLBoolean		rfaCardDetected (FLSocket vol);LOCAL void		rfaVccOn (FLSocket vol);LOCAL void		rfaVccOff (FLSocket vol);#ifdef	SOCKET_12_VOLTSLOCAL FLStatus		rfaVppOn (FLSocket vol);LOCAL void		rfaVppOff (FLSocket vol);#endif	/* SOCKET_12_VOLTS */LOCAL FLStatus		rfaInitSocket (FLSocket vol);LOCAL void		rfaSetWindow (FLSocket vol);LOCAL void		rfaSetMappingContext (FLSocket vol, unsigned page);LOCAL FLBoolean		rfaGetAndClearCardChangeIndicator (FLSocket vol);LOCAL FLBoolean		rfaWriteProtected (FLSocket vol);LOCAL void		rfaRegister (void);STATUS sysTffsFormat (void);#ifndef DOC#include "tffsConfig.c"/*mengjun 20070402*/#endif /* DOC *//********************************************************************************* sysTffsInit - board level initialization for TFFS** This routine calls the socket registration routines for the socket component* drivers that will be used with this BSP. The order of registration signifies* the logical drive number assigned to the drive associated with the socket.** RETURNS: N/A*/LOCAL void sysTffsInit (void)    {    UINT32 ix = 0;    UINT32 iy = 1;    UINT32 iz = 2;    int status;    int oldTick;    /* we assume followings:     *   - no interrupts except timer is happening.     *   - the loop count that consumes 1 msec is in 32 bit.     * it is done in the early stage of usrRoot() in tffsDrv().  */    oldTick = tickGet();    while (oldTick == tickGet())	/* wait for next clock interrupt */	;    oldTick = tickGet();    while (oldTick == tickGet())	/* loop one clock tick */	{	iy = KILL_TIME_FUNC;		/* consume time */	ix++;				/* increment the counter */	}        sysTffsMsecLoopCount = ix * sysClkRateGet() / 1000;    /* TODO:     * Call each sockets register routine here     *///2007-6-29 18:03   rfaRegister ();			/* RFA(Resident Flash Array) socket interface register */    }/********************************************************************************* rfaRegister - install routines for the Flash RFA** This routine installs necessary functions for the Resident Flash Array(RFA).** RETURNS: N/A*/LOCAL void rfaRegister (void)    {    FLSocket vol = flSocketOf (noOfDrives);    tffsSocket[noOfDrives] =	"RFA";    vol.window.baseAddress =	FLASH_BASE_ADRS >> 12;    vol.cardDetected =		rfaCardDetected;    vol.VccOn =			rfaVccOn;    vol.VccOff =		rfaVccOff;#ifdef SOCKET_12_VOLTS    vol.VppOn =			rfaVppOn;    vol.VppOff =		rfaVppOff;#endif    vol.initSocket =		rfaInitSocket;    vol.setWindow =		rfaSetWindow;    vol.setMappingContext =	rfaSetMappingContext;    vol.getAndClearCardChangeIndicator = rfaGetAndClearCardChangeIndicator;    vol.writeProtected =	rfaWriteProtected;    noOfDrives++;    }/********************************************************************************* rfaCardDetected - detect if a card is present (inserted)** This routine detects if a card is present (inserted).* Always return TRUE in RFA environments since device is not removable.** RETURNS: TRUE, or FALSE if the card is not present.*/LOCAL FLBoolean rfaCardDetected    (    FLSocket vol		/* pointer identifying drive */    )    {    return (TRUE);    }/********************************************************************************* rfaVccOn - turn on Vcc (3.3/5 Volts)** This routine turns on Vcc (3.3/5 Volts).  Vcc must be known to be good* on exit. Assumed to be ON constantly in RFA environment.** RETURNS: N/A*/LOCAL void rfaVccOn    (

⌨️ 快捷键说明

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