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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tffsdrv.c

?? vxworks操作系統(tǒng)的源代碼
?? 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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
毛片不卡一区二区| 日本女优在线视频一区二区| 美女网站一区二区| 91美女片黄在线| 国产亚洲欧美中文| 免费av成人在线| 欧美亚日韩国产aⅴ精品中极品| 国产无遮挡一区二区三区毛片日本| 香蕉久久一区二区不卡无毒影院| 成人av影视在线观看| 精品日韩在线观看| 香蕉久久一区二区不卡无毒影院| 成人国产精品免费观看| 久久夜色精品一区| 另类小说图片综合网| 国产福利不卡视频| 成人av手机在线观看| 精品久久一区二区三区| 午夜亚洲福利老司机| 一本色道亚洲精品aⅴ| 亚洲国产高清不卡| 国产麻豆精品视频| 精品福利视频一区二区三区| 日韩精品乱码av一区二区| 在线视频国内一区二区| 亚洲精品免费看| 99久久精品国产毛片| 国产精品麻豆久久久| 国产不卡视频一区二区三区| 2020国产成人综合网| 久久不见久久见中文字幕免费| 欧美一区二区视频在线观看2020 | 3d成人动漫网站| 一区二区三国产精华液| 99re热视频精品| 亚洲人成网站色在线观看| www.久久久久久久久| 国产精品传媒视频| 91伊人久久大香线蕉| 亚洲欧洲综合另类| 91一区二区三区在线观看| 中文字幕一区av| 99国产精品视频免费观看| 亚洲视频小说图片| 一本色道亚洲精品aⅴ| 亚洲一区二区三区在线看| 欧美日韩一二三| 婷婷亚洲久悠悠色悠在线播放| 欧美久久一二区| 日本视频在线一区| 欧美mv和日韩mv国产网站| 久久99国产精品麻豆| 久久久亚洲精品一区二区三区| 国产成人免费网站| 中文字幕一区二区在线观看| 91福利资源站| 无码av免费一区二区三区试看 | heyzo一本久久综合| 综合久久国产九一剧情麻豆| 色婷婷综合久久久| 亚洲18色成人| 精品国产乱码久久久久久免费| 国产寡妇亲子伦一区二区| 99视频有精品| 亚洲一区二区三区四区五区中文| 欧美吻胸吃奶大尺度电影| 免费高清不卡av| 亚洲国产成人在线| 色婷婷亚洲综合| 全国精品久久少妇| 久久婷婷久久一区二区三区| 成人精品一区二区三区四区| 亚洲精品一卡二卡| 制服丝袜中文字幕一区| 国产真实乱偷精品视频免| 国产精品久久久久久亚洲毛片| 日本精品视频一区二区| 日韩不卡手机在线v区| 国产日韩欧美不卡在线| 色网站国产精品| 老司机午夜精品99久久| 国产精品视频一二三| 欧美综合久久久| 久久激情综合网| 国产精品美女久久久久久2018| 欧美亚洲综合色| 国产乱码一区二区三区| 亚洲三级视频在线观看| 欧美一级专区免费大片| 不卡电影免费在线播放一区| 天天操天天干天天综合网| 久久久久久久久久看片| 欧洲视频一区二区| 黄页网站大全一区二区| 亚洲免费观看在线视频| 日韩亚洲欧美在线| 91在线观看一区二区| 青青草国产精品亚洲专区无| 国产精品国产a| 日韩欧美国产综合| 91国偷自产一区二区三区成为亚洲经典| 秋霞午夜av一区二区三区| 一区在线观看免费| 日韩欧美国产成人一区二区| 色婷婷久久久综合中文字幕| 精品一区二区三区视频在线观看| 亚洲人妖av一区二区| 精品对白一区国产伦| 欧美写真视频网站| 成人h动漫精品一区二| 欧美aaa在线| 亚洲免费在线观看| 国产亚洲污的网站| 91精品免费观看| 91免费看视频| 成人激情免费视频| 老司机精品视频导航| 亚洲一区在线视频观看| 国产精品欧美综合在线| 日韩你懂的电影在线观看| 欧美日韩黄色影视| 91一区二区三区在线观看| 国产精品1区2区3区在线观看| 视频一区在线视频| 一区二区三区四区精品在线视频| 国产午夜亚洲精品午夜鲁丝片 | 成人av小说网| 国内偷窥港台综合视频在线播放| 亚洲一区二区av电影| 亚洲欧洲av色图| 欧美激情资源网| 久久尤物电影视频在线观看| 欧美高清精品3d| 在线观看视频欧美| 成人av免费观看| 丰满白嫩尤物一区二区| 国产精品资源站在线| 久久99国内精品| 蜜臀久久99精品久久久久宅男| 亚洲第一福利视频在线| 亚洲黄色性网站| 日韩美女视频一区二区| 自拍偷拍亚洲综合| 国产精品乱码人人做人人爱| 国产天堂亚洲国产碰碰| 久久久久国产精品厨房| 久久久亚洲高清| 国产三级欧美三级| 久久老女人爱爱| 久久久99久久精品欧美| 久久久久久久久久美女| 国产亚洲欧美日韩俺去了| 久久久综合激的五月天| 久久久久久97三级| 国产三级三级三级精品8ⅰ区| 欧美激情一区不卡| 国产精品国产三级国产有无不卡 | 日韩av电影天堂| 日韩高清一区二区| 琪琪一区二区三区| 蜜乳av一区二区三区| 久久成人av少妇免费| 国产精品资源网| 岛国av在线一区| www.日韩在线| 97久久人人超碰| 日本久久一区二区三区| 欧美中文字幕不卡| 3d成人h动漫网站入口| 日韩精品专区在线影院观看| 欧美va亚洲va国产综合| 久久精品亚洲国产奇米99| 中文字幕高清不卡| 一区二区三区四区蜜桃| 日日欢夜夜爽一区| 久久99国产精品成人| 国产精品一品视频| 丰满白嫩尤物一区二区| 一本到三区不卡视频| 欧美老人xxxx18| 日韩一区二区三区精品视频| 亚洲精品一区二区三区四区高清 | 日韩一区二区免费在线观看| 欧美变态tickling挠脚心| 日本一区二区电影| 亚洲精品日产精品乱码不卡| 日韩电影免费一区| 国产在线视视频有精品| 不卡av免费在线观看| 欧美视频自拍偷拍| 精品免费99久久| 国产精品久久午夜| 午夜影院久久久| 极品美女销魂一区二区三区免费| 国产精品一区在线观看乱码 | 国产91高潮流白浆在线麻豆| 一本大道久久a久久综合| 91精品国产欧美一区二区成人| 久久久午夜精品理论片中文字幕| 亚洲美女屁股眼交3|