亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tffsconfig.c

?? 440bx vxworks bsp
?? C
字號:
/* tffsConfig.c - TrueFFS configuration file for VxWorks */


/* Copyright 1984-2001 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/* FAT-FTL Lite Software Development Kit
 * Copyright (C) M-Systems Ltd. 1995-2001	*/

/*
modification history
--------------------
01o,29jul04,a_m  BSP定制 for 多刃劍開發板
01v,28mar02,nrv  adding INCLUDE_MTD_CFIAMD
01u,12dec01,nrv  supressing the compiler warning on tffsVersion
01t,07nov01,yp  fixing SPR #63838
01s,02nov01,nrv  changing the version number to 2.2
01r,17sep01,yp  merging code changes from T3. Preserving T2 specifics that
                 were removed in T3
01q,25apr01,mem  Remove NFTL, CDSN and DOC2.
01p,20dec00,tlc  Add user-defined "Identify" routine to MTD table.
01t,23apr01,yp  Incrementing version number to 2.1
01s,29nov00,tlc  Added MTD_USR_IDENTIFY to the mtdTable. This allows
                 user-defined identify routines to be used for trueFFS
		                  support.
01r,06Sep00,csh  Added code to free pBuf on error SPR #34246
01q,06Sep00,csh  Added check for pBuf == NULL SPR #34246
01p,01Sep00,csh  Removed MACRO for INCLUDE_SHOW_ROUTINES
01o,04feb99,yp   added MACRO INCLUDE_TFFS_SHOW for better scalability.
01m,21apr98,yp   added tffs subdir to include path
01n,28feb98,kbw  made man page edits to fix problems found by QE
01m,28feb98,kbw  made man page edits
01l,19jan98,hdn  added new function tffsShowAll().
01k,08jan98,hdn  added new MTD for Heurikon Baja4700.
01j,06jan98,hdn  cleaned up tffsShow() and tffsBootImagePut().
01i,18dec97,yp   added documentation on sharing bootrom with TFFS
01h,15dec97,yp   doc cleanup
01g,11dec97,hdn  added tffsRawio()'s return value check in tffsShow().
01f,08dec97,hdn  renamed mkbootTffs() to tffsCopy().
01e,05dec97,hdn  changed tffsSocket[] to LOCAL variable.
01d,05dec97,hdn  added tffsShow() and mkbootTffs().
01c,11nov97,hdn  fixed documentation of flRegisterComponents().
01b,07nov97,hdn  cleaned up.
01a,07jul97,ami  written by Amirban at M-Systems
*/

/*
DESCRIPTION
This source file, with the help of sysTffs.c, configures TrueFFS for VxWorks.  
The functions defined here are generic to all BSPs.  To include these functions
in the BSP-specific module, the BSP's sysTffs.c file includes this file.  
Within the sysTffs.c file, define statements determine which functions from 
the tffsConfig.c file are ultimately included in TrueFFS.

The only externally callable routines defined in this file 
are tffsShow(), tffsShowAll(), and tffsBootImagePut().  You can
exclude the show utilities if you edit config.h and 
undefine INCLUDE_SHOW_ROUTINES.  You can exclude tffsBootImagePut() if you
edit sysTffs.c and undefine INCLUDE_TFFS_BOOT_IMAGE.  (If you find these
utilities are missing and you want them included, edit config.h and 
define INCLUDE_SHOW_ROUTINES and INCLUDE_TFFS_BOOT_IMAGE.)

If you wish to include only the TrueFFS specific show routines you could
define INCLUDE_TFFS_SHOW instead of INCLUDE_SHOW_ROUTINES in config.h.

However, for the most part, these externally callable routines are only 
a small part of the TrueFFS configuration needs handled by this file.  
The routines internal to this file make calls into the MTDs and translation 
layer modules of TrueFFS.  At link time, resolving the symbols associated 
with these calls pulls MTD and translation layer modules into VxWorks. 

However, each of these calls to the MTDs and the translation layer modules
is only conditionally included.  The constants that control the includes
are defined in sysTffs.c.  To exclude an MTD or translation layer module,
you edit sysTffs.c, undefine the appropriate constant, and rebuild sysTffs.o.
These constants are described in the reference entry for 'sysTffs'. 

INCLUDE FILES: stdcomp.h
*/


/* includes */

#include "tffs/stdcomp.h"
#include "tffs/tffsDrv.h"
#include "tffs/fatlite.h"
#include "stdio.h"


/* defines */

#ifdef INCLUDE_SHOW_ROUTINES
#define INCLUDE_TFFS_SHOW
#endif /* INCLUDE_SHOW_ROUTINES */

/* externs */

/*  : added */
#ifdef INCLUDE_MTD_SST39VF160	
FLStatus  sst39vf160Identify (FLFlash vol);
#endif /* INCLUDE_MTD_SST39VF160 */

#ifdef INCLUDE_MTD_USR
FLStatus  MTD_USR_IDENTIFY (FLFlash vol);
#endif /* INCLUDE_MTD_USR */

/* globals */

MTDidentifyRoutine mtdTable[] = 	/* MTD tables */
    {
#ifdef  INCLUDE_MTD_CFIAMD
    cfiAmdIdentify,
#endif  /* INCLUDE_MTD_CFIAMD */

#ifdef	INCLUDE_MTD_CFISCS
    cfiscsIdentify,
#endif	/* INCLUDE_MTD_CFISCS */

#ifdef	INCLUDE_MTD_I28F016
    i28f016Identify,
#endif	/* INCLUDE_MTD_I28F016 */

#ifdef	INCLUDE_MTD_I28F008
    i28f008Identify,
#endif	/* INCLUDE_MTD_I28F008 */

#ifdef	INCLUDE_MTD_I28F008_BAJA
    i28f008BajaIdentify,
#endif	/* INCLUDE_MTD_I28F008_BAJA */

#ifdef	INCLUDE_MTD_AMD
    amdMTDIdentify,
#endif	/* INCLUDE_MTD_AMD */

#ifdef INCLUDE_MTD_USR
    MTD_USR_IDENTIFY,
#endif  /* INCLUDE_MTD_USR */

#ifdef	INCLUDE_MTD_WAMD
    flwAmdMTDIdentify,
#endif	/* INCLUDE_MTD_WAMD */

/*  : added */
#ifdef	INCLUDE_MTD_SST39VF160
    sst39vf160Identify,
#endif	/* INCLUDE_MTD_SST39VF160 */

    };
int noOfMTDs = NELEMENTS (mtdTable);	/* number of MTDs */

TLentry tlTable[] = 			/* TL tables */
    {
#ifdef	INCLUDE_TL_FTL
#ifdef	FORMAT_VOLUME
    {mountFTL, formatFTL},
#else
    mountFTL,
#endif	/* FORMAT_VOLUME */
#endif	/* INCLUDE_TL_FTL */

#ifdef	INCLUDE_TL_SSFDC
#ifdef	FORMAT_VOLUME
    {mountSSFDC, formatSSFDC},
#else
    mountSSFDC,
#endif	/* FORMAT_VOLUME */
#endif	/* INCLUDE_TL_SSFDC */
    };
int noOfTLs = NELEMENTS (tlTable);	/* number of TLs */


/* locals */

LOCAL char * tffsSocket[DRIVES] = {NULL}; /* name of the socket interface */

#ifdef INCLUDE_TFFS_SHOW 
LOCAL char * tffsVersion = "2.2";	/* WRS version number of TFFS */
#endif /* INCLUDE_TFFS_SHOW */

/* forward declarations */

LOCAL VOID sysTffsInit (void);		/* BSP dependent init routine */


/*******************************************************************************
*
* flRegisterComponents - register MTD and translation layer components for use
*
* This routine registers MTD and translation layer components for use.
* This function is called by FLite once only, at initialization of the
* FLite system.
*
* NOMANUAL
*
* RETURNS: N/A
*/

void flRegisterComponents (void)
    {
    sysTffsInit ();
    }

#ifdef	INCLUDE_TFFS_SHOW
/*******************************************************************************
*
* tffsShowAll - show device information on all socket interfaces 
*
* This routine prints device information on all socket interfaces. 
*
* RETURNS: N/A
*/

void tffsShowAll (void)
    {
    int ix;

    printf ("TFFS Version %s\n", tffsVersion);
    for (ix = 0; ix < noOfDrives; ix++)
	tffsShow (ix);
    }

/*******************************************************************************
*
* tffsShow - show device information on a specific socket interface 
*
* This routine prints device information on the specified socket interface. 
* This information is particularly useful when trying to determine the 
* number of Erase Units required to contain a boot image.  The field called
* unitSize reports the size of an Erase Unit.
*
* If the process of getting physical information fails, an error code is 
* printed. The error codes can be found in flbase.h.
*
* RETURNS: N/A
*/

void tffsShow 
    (
    int driveNo			/* TFFS drive number */
    )
    {
    PhysicalInfo info;
    FLStatus status;

    if (tffsSocket[driveNo] == NULL)
	{
        printf ("%d: ---- no socket interface installed ----\n", driveNo);
	return;
	}
    status = tffsRawio (driveNo, TFFS_GET_PHYSICAL_INFO, (int)&info, 0, 0);
    if (status != OK)
	{
        printf ("%d: **** communication failed with error %d ****\n",
                driveNo, status);
	return;
	}
    printf ("%d: socket=%s: ", driveNo, tffsSocket[driveNo]);
    printf ("type=0x%x, unitSize=0x%x, mediaSize=0x%x\n", info.type, 
	    (UINT)info.unitSize, (UINT)info.mediaSize);
    }

#endif	/* INCLUDE_TFFS_SHOW */

#ifdef	INCLUDE_TFFS_BOOT_IMAGE
/*******************************************************************************
*
* tffsBootImagePut - write to the boot-image region of the flash device
*
* This routine writes an input stream to the boot-image region (if any) of 
* a flash memory device.  Typically, the input stream contains a boot image, 
* such as the VxWorks boot image, but you are free to use this function to 
* write any data needed. The size of the boot-image region is set by 
* the tffsDevFormat() call (or the sysTffsFormat() call, a BSP-specific helper 
* function that calls tffsDevFormat() internally) that formats the flash 
* device for use with TrueFFS.  
* 
* If tffsBootImagePut() is used to put a VxWorks boot image in flash, you 
* should not use the s-record version of the boot image typically produced 
* by make.  Instead, you should take the pre s-record version (usually 
* called 'bootrom' instead of 'bootrom.hex'), and filter out its loader 
* header information using an <xxx>'ToBin' utility.  For example: 
* .CS
* elfToBin < bootrom > bootrom.bin
* .CE
* 
* Use the resulting 'bootrom.bin' as input to tffsBootImagePut(). 
* 
* The discussion above assumes that you want only to use the flash device to
* store a VxWorks image that is retrieved from the flash device and then run 
* out of RAM. However, because it is possible to map many flash devices 
* directly into the target's memory, it is also possible run the VxWorks 
* image from flash memory, although there are some restrictions:
* .IP "-"
* The flash device must be non-NAND. 
* .IP "-"
* Only the text segment of the VxWorks image ('vxWorks.res_rom') may run out 
* of flash memory. The data segment of the image must reside in standard RAM. 
* .IP "-"
* No part of the flash device may be erased while the VxWorks image is running 
* from flash memory. 
* .LP
* Because TrueFFS garbage collection triggers an erase, this last restriction 
* means that you cannot run a VxWorks boot image out of a flash device that 
* must also support a writable file system (although a read-only file system 
* is OK). 
* 
* This last restriction arises from the way in which flash devices are
* constructed. The current physical construction of flash memory devices does 
* not allow access to the device while an erase is in 
* progress anywhere on the flash device. As a result, if TrueFFS tries to 
* erase a portion of the flash device, the entire device becomes inaccessible 
* to all other users.  If that other user happens to be the VxWorks image 
* looking for its next instruction, the VxWorks image crashes.
*
*RETURNS: OK or ERROR
*/

STATUS tffsBootImagePut 
    (
    int driveNo,		/* TFFS drive number */
    int offset,			/* offset in the flash chip/card */
    char * filename		/* binary format of the bootimage */
    )
    {
    PhysicalInfo info;
    UINT unitNo;
    UINT unitSize;
    UINT addr;
    char * pBuf;
    int fd;
    int ix;

    if (tffsSocket[driveNo] == NULL)
	return (ERROR);

    if (tffsRawio (driveNo, TFFS_GET_PHYSICAL_INFO, (int)&info, 0, 0) != OK)
        {
        printErr ("Unable to get physical info from drive\n");
	return (ERROR);
	}

    if ((pBuf = (char *)malloc (info.unitSize)) == NULL)
	{
       	printErr ("Can't allocate %d bytes of memory\n", info.unitSize);
	return( ERROR ) ;
	}

    if ((fd = open (filename, O_RDONLY, 0644)) == ERROR)
        {
        printErr ("Can't open \"%s\"\n", filename);
	free( pBuf ) ;
        return (ERROR);
	}

    addr = offset;
    unitNo = offset / info.unitSize;
    unitSize = info.unitSize - (offset % info.unitSize);

    /* If the offset is not Erase Unit aligned we need to save the the
     * contents of the region begining at the start of this erase unit 
     * and ending at the specified address so we can restore it after
     * we erase the Erase Unit
     */
    if (tffsRawio (driveNo, TFFS_PHYSICAL_READ, unitNo * info.unitSize,
	           offset % info.unitSize, (int)pBuf) != OK)
        {
	printErr ("Failed attempting to save Erase Unit %d\n", unitNo);
	close (fd);
	free( pBuf ) ;
	return (ERROR);
	}
        
    if (tffsRawio (driveNo, TFFS_PHYSICAL_ERASE, unitNo, 1, 0) != OK)
	{
	printErr ("Failed attempting to erase Erase Unit %d\n", unitNo);
	close (fd);
	free( pBuf ) ;
	return (ERROR);
	}

    if (tffsRawio (driveNo, TFFS_PHYSICAL_WRITE, unitNo * info.unitSize,
	           offset % info.unitSize, (int)pBuf) != OK)
        {
	printErr ("Failed attempting to restore Erase Unit %d\n", unitNo);
	close (fd);
	free( pBuf ) ;
	return (ERROR);
	}

    while (unitSize)
	{
        if ((ix = read (fd, pBuf, unitSize)) == ERROR)
            {
            printErr ("Error reading inputfile: 0x%x\n", errno);
	    free( pBuf ) ;
            return (ERROR);
            }

        if (ix == 0)
	    break;

        if ((addr + ix) > info.mediaSize)
	    {
	    printErr ("Error : Attempting to write beyond Flash boundary\n");
	    close (fd);
	    free( pBuf ) ;
	    return (ERROR);
	    }

        if (tffsRawio (driveNo, TFFS_PHYSICAL_WRITE, addr, ix, (int)pBuf) != OK)
	    {
	    printErr ("Physical write failed at address 0x%x\n", addr);
	    close (fd);
	    free( pBuf ) ;
	    return (ERROR);
	    }

	addr += ix;
	unitSize -= ix;
	if (unitSize == 0)
	    {
            unitSize = info.unitSize;
            unitNo++;
            if (tffsRawio (driveNo, TFFS_PHYSICAL_ERASE, unitNo, 1, 0) != OK)
	        {
		printErr ("Failed attempting to erase Erase Unit %d\n", unitNo);
	        close (fd);
	        free( pBuf ) ;
	        return (ERROR);
	        }
	    }
	}

    close (fd);
    free( pBuf ) ;
    return (OK);
    }
    
#endif	/* INCLUDE_TFFS_BOOT_IMAGE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区的国产在线播放| 日韩一区二区三免费高清| 美国一区二区三区在线播放| 亚洲精品免费在线| 亚洲激情在线激情| 亚洲日本乱码在线观看| 亚洲男人都懂的| 一区二区三区欧美在线观看| 亚洲一卡二卡三卡四卡| 亚洲色图欧美激情| 尤物在线观看一区| 天天影视网天天综合色在线播放| 亚洲成av人片一区二区三区| 天天色天天操综合| 强制捆绑调教一区二区| 狠狠色丁香久久婷婷综合丁香| 极品瑜伽女神91| 国产91丝袜在线18| 91免费国产在线观看| 欧美最猛性xxxxx直播| 欧美日韩国产成人在线免费| 日韩亚洲欧美中文三级| 欧美一级电影网站| 国产丝袜欧美中文另类| 国产精品九色蝌蚪自拍| 日韩一区二区三区三四区视频在线观看 | 国产一区二区三区久久久| 国产99精品在线观看| 91麻豆高清视频| 日韩视频一区二区在线观看| 国产无一区二区| 亚洲一区二区视频| 国产在线精品不卡| 色综合中文综合网| 欧美性感一区二区三区| 日韩欧美国产麻豆| 1024精品合集| 伦理电影国产精品| 色综合久久综合网欧美综合网| 欧美欧美午夜aⅴ在线观看| 国产日韩欧美综合在线| 午夜影院久久久| 成人av电影在线播放| 欧美一区永久视频免费观看| 国产精品国产三级国产普通话99 | 成人一区在线观看| 欧美日韩一区二区三区免费看 | 亚洲你懂的在线视频| 久久国产精品区| 欧美日精品一区视频| 久久精品综合网| 五月婷婷久久丁香| 91蝌蚪国产九色| 国产亚洲欧美激情| 美国三级日本三级久久99| 欧美综合一区二区| 国产精品久99| 国产精品综合视频| 制服丝袜国产精品| 午夜影院在线观看欧美| 日本道精品一区二区三区| 国产精品国产自产拍高清av王其| 蜜桃视频免费观看一区| 欧美肥妇bbw| 亚洲一区二区三区自拍| 色94色欧美sute亚洲线路一久| 国产日韩精品一区二区三区 | 美日韩一级片在线观看| 欧美日韩亚洲不卡| 天天综合色天天综合色h| 欧美性猛交xxxx黑人交| 一区二区三区日韩精品视频| 99re热视频精品| 亚洲三级在线观看| 99riav久久精品riav| 国产精品久久久久aaaa| 91亚洲国产成人精品一区二区三| 亚洲欧美一区二区在线观看| 9久草视频在线视频精品| 国产精品美女久久久久久2018| 粉嫩蜜臀av国产精品网站| 国产亚洲精久久久久久| 成人国产精品免费观看| 亚洲天堂福利av| 在线一区二区三区四区| 偷拍日韩校园综合在线| 日韩欧美一级二级三级久久久| 久久超碰97人人做人人爱| 久久夜色精品一区| 国产经典欧美精品| 中文子幕无线码一区tr| 精品系列免费在线观看| 日本一二三不卡| 一本色道久久综合精品竹菊| 亚洲成人免费视频| 精品入口麻豆88视频| 成人一区二区三区视频在线观看| 国产精品网站一区| 欧美亚洲国产一区二区三区va | 欧美午夜宅男影院| 天天色 色综合| 久久欧美一区二区| 99久久精品情趣| 婷婷丁香激情综合| 中文字幕乱码日本亚洲一区二区 | 精品国产免费久久| 97国产精品videossex| 秋霞电影一区二区| 国产精品欧美一级免费| 欧美日韩一卡二卡| 国产精品1区2区3区在线观看| 亚洲丝袜自拍清纯另类| 8x8x8国产精品| 成人v精品蜜桃久久一区| 日韩综合小视频| 国产精品久久久久久久久快鸭 | 亚洲一区二区精品久久av| 精品国产一区二区三区四区四| 91丨porny丨首页| 久久99国产精品成人| 一区二区三区不卡视频 | 欧美在线观看一区| 国产成人精品午夜视频免费| 同产精品九九九| ...av二区三区久久精品| 日韩午夜激情视频| 色伊人久久综合中文字幕| 国产黑丝在线一区二区三区| 日本中文一区二区三区| 亚洲精品中文字幕乱码三区| 国产香蕉久久精品综合网| 99r国产精品| 欧美日韩精品免费| av一区二区三区四区| 日韩中文字幕一区二区三区| 国产精品电影一区二区| 久久午夜国产精品| 在线电影国产精品| 在线观看免费一区| 色综合色狠狠综合色| 成人性生交大片免费看中文| 精品无码三级在线观看视频| 午夜精品久久久久久久99水蜜桃| 一区二区三区四区在线免费观看| 中文字幕av一区 二区| 337p日本欧洲亚洲大胆精品| 日韩欧美一级二级三级久久久| 69精品人人人人| 欧美视频在线一区| 91福利社在线观看| 欧美午夜精品电影| 欧美亚洲动漫另类| 欧美日免费三级在线| 欧美性猛交xxxx乱大交退制版| 在线亚洲免费视频| 91国产视频在线观看| 欧美在线观看一区| 欧美精品99久久久**| 欧美一区二区视频免费观看| 日韩亚洲欧美高清| 久久综合久久综合亚洲| 国产欧美一二三区| 国产精品你懂的在线| 亚洲免费av在线| 亚洲小说春色综合另类电影| 午夜精品福利一区二区三区av | 精品对白一区国产伦| 亚洲精品在线电影| 欧美国产日韩一二三区| 最新热久久免费视频| 亚洲午夜免费电影| 日韩av一级片| 国产麻豆91精品| 色综合色综合色综合 | 国产999精品久久久久久绿帽| 国产91高潮流白浆在线麻豆| 91视频免费播放| 91精品国产高清一区二区三区| 久久亚洲私人国产精品va媚药| 国产精品入口麻豆九色| 亚洲国产婷婷综合在线精品| 久久精品国产精品亚洲综合| 国产a区久久久| 欧美在线观看视频在线| 久久夜色精品一区| 亚洲一区二区在线免费观看视频| 日韩综合在线视频| 成人动漫视频在线| 欧美一级国产精品| 国产精品传媒在线| 日韩av一级片| 91视频观看免费| 精品国产免费视频| 亚洲图片自拍偷拍| 成人av片在线观看| 日韩美一区二区三区| 亚洲免费观看视频| 国产乱码精品一区二区三区忘忧草| 色偷偷成人一区二区三区91| 精品福利av导航|