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

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

?? tffsdrv.c

?? This is a source code of VxWorks
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* tffsDrv.c - TrueFFS interface for VxWorks *//* Copyright 1984-2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/*  * FAT-FTL Lite Software Development Kit * Copyright (C) M-Systems Ltd. 1995-1997	 *//*modification history--------------------01l,19jun02,nrv  SPR#78569/35046, only set readyChanged bit if R/W error.                 Added NULL check to Rd/Wrt, corrected formatting.01k,15oct01,nrv  documenting PHYSICAL_WRITE and PHYSICAL_ERASE as per SPR                 2320001j,22aug01,dgp  correct typo in library description per SPR 2871301i,11dec98,yp   added function tffsDevOptionsSet() to disable FAT monitoring01h,09mar98,kbw  making man page edits to fix problems found by QE01h,26jan98,kbw  making man page edits01g,18dec97,yp   more doc fixups01f,16dec97,yp   documentation and cleanup.01e,16dec97,hdn  supported a return value of DEFRAGMENT_VOLUME.01d,15dec97,hdn  added four new functions to tffsRawio().01c,05dec97,hdn  added tffsRawio().01b,07nov97,hdn  cleaned up.01a,25aug97,and  written by Andray in M-Systems*//*DESCRIPTIONThis module defines the routines that VxWorks uses to create a TrueFFSblock device.  Using this block device, dosFs can access a board-residentflash memory array or a flash memory card (in the PCMCIA slot) just as if it was a standard disk drive.  Also defined in this file are functions that you can use to format the flash medium, as well as well as functions that handle the low-level I/O to the device.To include TrueFFS for Tornado in a VxWorks image, you must edit your BSP'sconfig.h and define INCLUDE_TFFS, or, for some hardware, INCLUDE_PCMCIA. Ifyou define INCLUDE_TFFS, this configures usrRoot() to call tffsDrv().  If youdefined INCLUDE_PCMCIA, the call to tffsDrv() is made from pccardTffsEnabler().The call to tffsDrv() sets up the structures, global variables, and mutual exclusion semaphore needed to manage TrueFFS.  This call to tffsDrv() also registers socket component drivers for each flash device found attached to the target. These socket component drivers are not quite block devices, but they are an essential layer within TrueFFS.  Their function is to manage the hardwareinterface to the flash device, and they are intelligent enough to handle formatting and raw I/O requests to the flash device.  The other two layers within TrueFFS are known as the translation layer and the MTD (the Memory Technology Driver).  The translation layer of TrueFFS implements the error recover and wear-leveling features of TrueFFS.  The MTD implements the low-level programming (map, read, write, and erase) of the flash medium.  To implement the socket layer, each BSP that supports TrueFFS includes a sysTffs.c file.  This file contains the code that defines the socket component driver.  This file also contains a set of defines that you can use to configure which translation layer modules and MTDs are included in TrueFFS.Which translation layer modules and MTDs you should include depends onwhich types of flash devices you need to support.  Currently, there are three basic flash memory technologies, NAND-based, NOR-based, and SSFDC.Within sysTffs.c, define:.IP "INCLUDE_TL_NFTL" To include the NAND-based translation layer module..IP "INCLUDE_TL_FTL"To include the NOR-based translation layer module..IP "INCLUDE_TL_SSFDC" To include the SSFDC-appropriate translation layer module. .LPTo support these different technologies, TrueFFS ships with three differentimplementations of the translation layer.  Optionally, TrueFFS can includeall three modules.  TrueFFS later binds the appropriate translation layer module to the flash device when it registers a socket component driver forthe device.  Within these three basic flash device categories there are still other differences (largely manufacturer-specific).  These differences have no impact on the translation layer.  However, they do make a difference for the MTD.  Thus, TrueFFS ships with eight different MTDs that can support a variety of flash devices from Intel, Sharp, Samsung, National, Toshiba, AMD, and Fujitsu.  Within sysTffs.c, define:.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 4000..IP "INCLUDE_MTD_AMD"For AMD, Fujitsu: 29F0{40,80,16} 8-bit flash devices..IP "INCLUDE_MTD_CDSN"For Toshiba, Samsung: NAND CDSN flash devices..IP "INCLUDE_MTD_DOC2"For Toshiba, Samsung: NAND DOC 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..LPThe socket component driver and the MTDs are provided in source form.  If you need to write your own socket driver or MTD, use these working driversas a model for your own.EXTERNALLY CALLABLE ROUTINESMost of the routines defined in this file are accessible through the I/Osystem only.  However, four routines are callable externally.  Theseare: tffsDrv(), tffsDevCreate(), tffsDevFormat(), and tffsRawio().The first routine called from this library must be tffsDrv().  Call this routine exactly once.  Normally, this is handled automatically for you from within usrRoot(), if INCLUDE_TFFS is defined, or from within pccardTffsEnabler(), if INCLUDE_PCMCIA is defined.  Internally, this call to tffsDrv() registers socket component drivers for all the flash devices connected to your system.  After registering a socketcomponent driver for the device, TrueFFS can support calls to tffsDevFormat() or tffsRawio().  However, before you can mount dosFs on the flash device, you must call tffsDevCreate().  This call creates a block device on top of the socket component driver, but does not mount dosFs on the device.  Because mounting dosFs on the device is what you will want to do most of the time, the sysTffs.c file defines a helper function, usrTffsConfig().  Internally, this function calls tffsDevCreate() and then does everything necessary (such as calling the dosFsDevInit() routine) to mount dosFs on the resulting block device.LOW LEVEL I/ONormally, you should handle your I/O to the flash device using dosFs.  However, there are situations when that level of indirection is a problem.To handle such situations, this library defines tffsRawio().  Using this function, you can bypass both dosFs and the TrueFFS translation servicesto program the flash medium directly.  However, you should not try to program the flash device directly unless you are intimately familiar with the physical limits of your flash device as well as with how TrueFFS formats the flash medium.  Otherwise you risk not only corrupting the medium entirely but permanently damaging the flash device.If all you need to do is write a boot image to the flash device, usethe tffsBootImagePut() utility instead of tffsRawio().  This function provides safer access to the flash medium.  IOCTLThis driver responds to all ioctl codes by setting a global error flag.Do not attempt to format a flash drive using ioctl calls. INCLUDE FILES: tffsDrv.h, fatlite.h*//* includes */#include "tffsDrv.h"#include "fatlite.h"/* defines *//* externs *//* globals */#if     (POLLING_INTERVAL > 0)SEM_ID    flPollSemId;#endif  /* (POLLING_INTERVAL > 0) *//* locals */LOCAL BOOL tffsDrvInstalled = FALSE;		/* TRUE, if installed */LOCAL BOOL tffsDrvStatus = ERROR;		/* OK, if succeeded */LOCAL TFFS_DEV * tffsBlkDevs[DRIVES] = {NULL};	/* FLite block Devices *//* forward declarations */LOCAL void   tffsSetFromBPB	(BLK_DEV *pBlkDev, BPB *pBPB);LOCAL STATUS tffsIoctl		(TFFS_DEV * pTffsDev, int function, int arg);LOCAL STATUS tffsBlkRd		(TFFS_DEV * pTffsDev, int startBlk, 				 int numBlks, char * pBuffer);LOCAL STATUS tffsBlkWrt		(TFFS_DEV * pTffsDev, int startBlk, 				 int numBlks, char * pBuffer);#if     (POLLING_INTERVAL > 0)LOCAL FLStatus flPollSemCreate (void);#endif /* (POLLING_INTERVAL > 0) *//********************************************************************************* tffsDrv - initialize the TrueFFS system** This routine sets up the structures, the global variables, and the mutual * exclusion semaphore needed to manage TrueFFS. This call also registers * socket component drivers for all the flash devices attached to your target.  ** Because tffsDrv() is the call that initializes the TrueFFS system, this* function must be called (exactly once) before calling any other TrueFFS* utilities, such as tffsDevFormat() or tffsDevCreate().  Typically, the call* to tffsDrv() is handled for you automatically.  If you defined INCLUDE_TFFS* in your BSP's config.h, the call to tffsDrv() is made from usrRoot().  If* your BSP's config.h defines INCLUDE_PCMCIA, the call to tffsDrv() is made* from pccardTffsEnabler().* * RETURNS: OK, or ERROR if it fails.*/STATUS tffsDrv (void)    {    if (!tffsDrvInstalled)	{        /* FLite initialization:                                  */        /*      - register all the components and initialize them */        /*      - create socket polling task                      */        /*      - create task for background FLite operations      */#if     (POLLING_INTERVAL > 0)        /* Create Synchronisation semaphore */        if (flPollSemCreate() != flOK)            return (ERROR);#endif /* (POLLING_INTERVAL > 0) */        tffsDrvStatus = (flInit() == flOK) ? OK : ERROR;	tffsDrvInstalled = TRUE;#if     (POLLING_INTERVAL > 0)	if (tffsDrvStatus == flOK)	    semGive (flPollSemId);#endif /* (POLLING_INTERVAL > 0) */	}    return (tffsDrvStatus);    }/********************************************************************************* tffsDevCreate - create a TrueFFS block device suitable for use with dosFs** This routine creates a TFFS block device on top of a flash device. It takes * as arguments a drive number, determined from the order in which the socket* components were registered, and a flag integer that indicates whether the * medium is removable or not. A zero indicates a non removable medium. A one * indicates a removable medium.  If you intend to mount dosFs on this block * device, you probably do not want to call tffsDevCreate(), but should * call usrTffsConfig() instead.  Internally, usrTffsConfig() * calls tffsDevCreate() for you.  It then does everything necessary (such as * calling the dosFsDevInit() routine) to mount dosFs on the just created * block device.  ** RETURNS: BLK_DEV pointer, or NULL if it failed.*/BLK_DEV * tffsDevCreate     (    int tffsDriveNo,			/* TFFS drive number (0 - DRIVES-1) */    int removableMediaFlag		/* 0 - nonremovable flash media */    )    {    FAST TFFS_DEV  *pTffsDev;           /* ptr to created TFFS_DEV struct */    FAST BLK_DEV   *pBlkDev;            /* ptr to BLK_DEV struct          */    FLStatus        status = flOK;    BPB             bpb;    IOreq           ioreq;    if (tffsDriveNo >= DRIVES)        return (NULL);    ioreq.irHandle = tffsDriveNo;    /* create and initialize BLK_DEV structure */    pTffsDev = (TFFS_DEV *) malloc (sizeof (TFFS_DEV));    if (pTffsDev == NULL)        return (NULL);    status = flMountVolume(&ioreq);    if (status == flOK)        {        ioreq.irData = &bpb;        status = flGetBPB(&ioreq);        if (status == flOK)            {            pBlkDev = &pTffsDev->tffsBlkdev;            tffsSetFromBPB (pBlkDev, &bpb);            if (removableMediaFlag)                pBlkDev->bd_removable  = TRUE;    /* removable                */            else                pBlkDev->bd_removable  = FALSE;   /* not removable            */            pBlkDev->bd_retry        = 1;         /* retry count              */            pBlkDev->bd_mode         = O_RDWR;    /* initial mode for device  */            pBlkDev->bd_readyChanged = TRUE;      /* new ready status         */            pBlkDev->bd_blkRd        = tffsBlkRd; /* read block function      */            pBlkDev->bd_blkWrt       = tffsBlkWrt;/* write block function     */            pBlkDev->bd_ioctl        = tffsIoctl; /* ioctl function           */            pBlkDev->bd_reset        = NULL;      /* no reset function        */            pBlkDev->bd_statusChk    = NULL;      /* no check-status function */            pTffsDev->tffsDriveNo    = tffsDriveNo;            }        else	    ;        }    if (status != flOK)        return (NULL);    /* remember that we have created FLite device */    tffsBlkDevs[tffsDriveNo] = pTffsDev;    return (&pTffsDev->tffsBlkdev);    }/********************************************************************************* tffsDevOptionsSet - set TrueFFS volume options** This routine is intended to set various TrueFFS volume options. At present* it only disables FAT monitoring. If VxWorks long file names are to be used* with TrueFFS, FAT monitoring must be turned off.** RETURNS: OK, or ERROR if it failed.*/STATUS tffsDevOptionsSet    (    TFFS_DEV * pTffsDev                /* pointer to device descriptor */    )    {    FLStatus        status;    IOreq           ioreq;    /* Note : it is expected that as more volume option that would      *        need to get set via this routine are detected a second     *        parameter will be added to indicate the option that needs     *        to get set.     */    if ((pTffsDev == NULL) || (pTffsDev->tffsDriveNo >= DRIVES))        return (ERROR);    ioreq.irHandle = pTffsDev->tffsDriveNo;    /* disable FAT monitoring for TrueFFS volumes */    status = flDontMonitorFAT(&ioreq);    return ((status == flOK) ? OK : ERROR);    }/********************************************************************************* tffsIoctl - handle IOCTL calls to TFFS driver** This routine handles IOCTL calls to TrueFFS driver. Currently it sets a global* error flag and exits. The ioctl FIODISKFORMAT should not be used with TrueFFS* devices. Use tffsDevFormat() to format TrueFFS drives.** RETURNS: ERROR always.** ERRNO: S_ioLib_UNKNOWN_REQUEST**/LOCAL STATUS tffsIoctl     (    TFFS_DEV * pTffsDev,		/* pointer to device descriptor */    int function,			/* function code */    int arg				/* some argument */    )    {    errnoSet (S_ioLib_UNKNOWN_REQUEST);    return (ERROR);    }/********************************************************************************* tffsBlkRd - reads sequence of blocks from TFFS device** This routine reads a sequence of blocks from TrueFFS formatted device.** RETURNS: OK, or ERROR if it failed.** NOMANUAL*/LOCAL STATUS tffsBlkRd     (    FAST TFFS_DEV * pTffsDev,		/* pointer to device descriptor */    int startBlk,			/* starting block number to read */    int numBlks,			/* number of blocks to read */    char * pBuffer			/* pointer to buffer to receive data */    )    {    FLStatus    status = flOK;    IOreq       ioreq;    BPB         bpb;    if ( (NULL == pTffsDev) || (NULL == pBuffer) ||         (pTffsDev->tffsDriveNo >= DRIVES) )        {        return (ERROR);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品高清| 五月激情六月综合| 亚洲黄色尤物视频| 日韩精品一卡二卡三卡四卡无卡 | 国v精品久久久网| 欧美视频在线一区| 国产亚洲污的网站| 亚洲欧洲精品一区二区三区| 理论片日本一区| av一区二区三区| 久久久午夜精品理论片中文字幕| 亚洲日本护士毛茸茸| 国产一区二区91| 欧美性猛片xxxx免费看久爱| 精品久久久久久久人人人人传媒| 日韩中文字幕91| 成人的网站免费观看| 日韩精品一区二区在线| 亚洲欧美一区二区三区极速播放| 国产一区二区在线观看免费| 91蜜桃网址入口| 精品免费国产二区三区| 亚洲成人一二三| 波波电影院一区二区三区| 欧美xingq一区二区| 亚洲一区免费在线观看| av激情成人网| 欧美视频在线不卡| 国产欧美1区2区3区| 偷窥少妇高潮呻吟av久久免费| 国产精品中文字幕欧美| 欧美日韩卡一卡二| 最近日韩中文字幕| 青青草97国产精品免费观看 | 亚洲毛片av在线| 亚洲h动漫在线| 成人短视频下载| 欧洲亚洲国产日韩| 亚洲视频你懂的| 91在线观看视频| 国产精品久久久久影院色老大| 韩国视频一区二区| 精品少妇一区二区三区在线视频| 一区二区三区91| 欧美视频日韩视频| 亚洲一区二区三区视频在线播放| 99视频一区二区| 国产精品高潮呻吟| 97se亚洲国产综合自在线| 久久久久久**毛片大全| 国产一区二区伦理片| 欧美xxxxx牲另类人与| 久久精品国产色蜜蜜麻豆| 欧美一级理论片| 麻豆成人免费电影| 精品国产伦一区二区三区免费 | 国产日韩v精品一区二区| 成人自拍视频在线| 国产精品国产馆在线真实露脸| 欧日韩精品视频| 午夜久久久影院| 7777精品伊人久久久大香线蕉完整版| 国内一区二区在线| 国产亚洲精品精华液| 91国产成人在线| 天天综合网天天综合色 | 欧美精品v国产精品v日韩精品 | 国产精品电影一区二区| av影院午夜一区| 国产精品天干天干在线综合| 日本韩国欧美国产| 视频在线观看91| 国产日韩精品一区| 欧美日韩一本到| 国内久久婷婷综合| 亚洲精品一区二区三区99| 成人午夜视频免费看| 亚洲激情男女视频| 日韩精品在线看片z| 精品一区二区三区久久| 久久精品一区二区三区不卡牛牛| 乱一区二区av| 国产精品婷婷午夜在线观看| 91在线国产观看| 男女性色大片免费观看一区二区 | 亚洲图片一区二区| 欧美一二三区精品| 国产在线不卡视频| 亚洲自拍偷拍图区| 91精品一区二区三区久久久久久 | 国产乱子轮精品视频| 伊人夜夜躁av伊人久久| 精品日韩一区二区| 在线精品亚洲一区二区不卡| 久久91精品久久久久久秒播| 亚洲激情在线激情| 久久久一区二区| 欧美中文字幕亚洲一区二区va在线| 久久精品国产99| 樱桃视频在线观看一区| 国产日韩欧美a| 在线不卡a资源高清| bt欧美亚洲午夜电影天堂| 人人狠狠综合久久亚洲| 亚洲黄色录像片| 国产午夜久久久久| 在线成人免费观看| 91福利视频在线| 波多野结衣中文字幕一区二区三区| 性久久久久久久久久久久| 亚洲精品乱码久久久久久久久| 26uuu久久天堂性欧美| 欧美大黄免费观看| 91精品综合久久久久久| 欧美电影在哪看比较好| 欧美日韩激情一区| 国产原创一区二区三区| 美女高潮久久久| 亚洲精品日产精品乱码不卡| 亚洲精品国产品国语在线app| 国产精品午夜电影| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 亚洲免费大片在线观看| 亚洲女同ⅹxx女同tv| 欧美激情中文字幕一区二区| 中文字幕第一区综合| 国产亚洲综合性久久久影院| 精品国产一区二区三区不卡| 日韩三级视频在线看| 在线不卡欧美精品一区二区三区| 欧美色倩网站大全免费| 成人午夜视频福利| 成人综合在线网站| 欧洲日韩一区二区三区| 在线观看成人免费视频| 在线视频一区二区三区| 在线精品视频免费播放| 欧美日韩极品在线观看一区| 6080午夜不卡| 欧美成人三级在线| 欧美精品一区二区三区视频| 久久久九九九九| 中文字幕日韩一区二区| 亚洲视频你懂的| 一区二区三区不卡视频| 亚洲大尺度视频在线观看| 日韩精品91亚洲二区在线观看| 天天影视网天天综合色在线播放| 奇米色一区二区| 国产成人在线网站| 色婷婷激情久久| 欧美裸体bbwbbwbbw| 欧美videos中文字幕| 中文字幕欧美激情一区| 国产亚洲欧美色| 国产精品视频一区二区三区不卡| 精品国产百合女同互慰| 久久久三级国产网站| 日韩毛片精品高清免费| 亚洲国产精品久久艾草纯爱| 精品一区二区免费视频| 成人av在线资源网站| 在线观看日韩毛片| 日韩欧美国产wwwww| 国产精品网友自拍| 婷婷中文字幕综合| 成人永久aaa| 555夜色666亚洲国产免| 26uuu精品一区二区| 亚洲欧美色综合| 精品无人区卡一卡二卡三乱码免费卡| 高清不卡一区二区在线| 欧美日韩精品一区二区三区四区| 久久婷婷久久一区二区三区| 中文字幕精品—区二区四季| 日韩电影网1区2区| 成人免费视频caoporn| 91精品蜜臀在线一区尤物| 国产精品久线观看视频| 国产一区二区三区不卡在线观看| 在线观看不卡一区| 亚洲精品国产视频| 国产成人av一区| 久久久久久久国产精品影院| 亚洲va欧美va天堂v国产综合| 99精品桃花视频在线观看| 精品成人免费观看| 日本美女一区二区三区视频| 91网站最新地址| 国产精品久久久久久久久免费桃花| 蜜桃视频一区二区| 91黄色免费版| 国产精品素人一区二区| 国产91精品露脸国语对白| 欧美一二三四在线| 青青草97国产精品免费观看 | 美国十次了思思久久精品导航| 色妞www精品视频| 欧美国产精品久久| 久久国产精品无码网站|