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

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

?? fatfilt.c

?? M-System DOC(Disk on a Chip) Flash芯片的診斷工具, 可以從Flash芯片中獲取特定的數(shù)據(jù)信息, 用于判斷芯片當前的狀態(tài).
?? C
?? 第 1 頁 / 共 4 頁
字號:
/***********************************************************************************/
/*                        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/fs/fatfilt.c-arc  $
 * 
 *    Rev 1.1   Sep 30 2003 17:57:20   oris
 * Added FL prefix to SECTOR_SIZE and SECTOR_SIZE_BITS
 * 
 *    Rev 1.0   Apr 09 2003 12:16:02   OriS
 * Initial revision.
 * 
 */

/*******************************************************************************
 *                                                                             * 
 *                                                                             * 
 *                         Module: FATFILT                                     * 
 *                                                                             * 
 *  This module implements installable FAT12/16 filters. It supports up to     *
 *  SOCKETS sockets, with up to FL_MAX_TL_PARTITIONS disks per socket.            * 
 *  Each disk can contain up to FL_MAX_PARTS_PER_DISK partitions on it, with   * 
 *  maximum depth of partition nesting in extended partitions equal to         * 
 *  MAX_PARTITION_DEPTH.                                                       *
 *                                                                             * 
 *  In order for this module to work, disks must be abs.mounted rather then    * 
 *  mounted. In latter case, this module won't detect any of disk's            * 
 *  partitions, and won't install FAT filters.                                 * 
 *                                                                             * 
 *  This module uses more then 512 bytes of stack space in case if MALLOC is   * 
 *  not enabled.                                                               * 
 *                                                                             * 
 *******************************************************************************/

/* 
 * Includes
 */

#include "fatfilt.h"
#include "blockdev.h"
#include "flflash.h"
#include "bddefs.h"


#if defined(ABS_READ_WRITE) && !defined(FL_READ_ONLY)




/*
 * Module configuration
 */

#define  FL_INCLUDE_FAT_MONITOR     /* undefine it to remove FAT filter code */
#undef   FL_INCLUDE_FAT32           /* define after support for FAT32 is added */




/*
 * Defines
 */

/* extract pointer to user's buffer from IOreq */

#ifdef SCATTER_GATHER
#define  FLBUF(ioreq,i)  (*((FLSByte FAR1 **)((ioreq)->irData) + (int)(i)))
#else
#define  FLBUF(ioreq,i)  ((FLSByte FAR1 *)(ioreq->irData) + (FL_SECTOR_SIZE * ((int)(i))))
#endif

/* extract socket# and disk# from TFFS handle */

#define  H2S(handle)     (((int)(handle)) & 0xf)
#define  H2D(handle)     ((((int)(handle)) >> 4) & 0xf)

/* construct TFFS handle from socket# and disk# */

#define  SD2H(socNo,diskNo)  ((int)((((diskNo) & 0xf) << 4) | ((socNo) & 0xf)))

/* unformatted ("raw") disk partition */

#define  FL_RAW_PART  (-1)




/*
 * Local routines 
 */

static FLStatus   reset (void);
static FLStatus   discardDisk (int handle);
static FLStatus   newDisk (int handle);
static FLStatus   parseDisk (int handle);
static FLStatus   discardDiskParts (FLffDisk *pd);
static FLStatus   addDiskPart (FLffDisk *pd, int partNo);
static FLStatus   addNewDiskPart (FLffDisk *pd);
static FLBoolean  isPartTableWrite (FLffDisk *pd, IOreq FAR2 *ioreq);
static FLStatus   isExtPartPresent (FLSByte FAR1 *buf, SectorNo *nextExtPartSec);
static FLBoolean  isBPBchanged (FLffVol *pv, FLSByte FAR1 *buf);


#ifdef FL_INCLUDE_FAT_MONITOR

static FLStatus   partEnableFF (FLffVol* pv);
static FLStatus   partFreeDelClusters (FLffVol *pv, SectorNo secNo, FLSByte FAR1 *newFAT);

#endif




/*
 * Local data
 */

/* module reset flag */

static FLBoolean  resetDone = FALSE; 

/* disks (BDTL partitions in OSAK terminology) */

static FLffDisk*  ffDisk[SOCKETS][FL_MAX_TL_PARTITIONS] = { { NULL } };


#ifndef FL_MALLOC

/*          
 *        WARNING: Large static arrays ! 
 *
 *  sizeof(ffAllDisks[x][y])    is 64 bytes. 
 *  sizeof(ffAllParts[x][y][z]) is 40 bytes.
 *
 */

static FLffDisk ffAllDisks[SOCKETS][FL_MAX_TL_PARTITIONS];
static FLffVol  ffAllParts[SOCKETS][FL_MAX_TL_PARTITIONS][FL_MAX_PARTS_PER_DISK];

#endif /* FL_MALLOC */

static const FLSByte zeroes[FL_SECTOR_SIZE] = {0};




/* --------------------------------------------------------------------------- *
 *                                                                             *
 *                    d i s c a r d D i s k P a r t s                          *
 *                                                                             * 
 *  Discard all the partition info (if any) associated with particular disk.   * 
 *                                                                             * 
 *  Parameters:                                                                * 
 *      pd                 : disk (BDTL volume)                                   * 
 *                                                                             * 
 *  Returns:                                                                   * 
 *      Always flOK.                                                           * 
 *                                                                             * 
 * --------------------------------------------------------------------------- */

static FLStatus  discardDiskParts ( FLffDisk * pd )
{
    register int  i;

    if (pd != NULL) {

        for (i = 0; i < FL_MAX_PARTS_PER_DISK; i++) {

#ifdef FL_MALLOC
        if (pd->part[i] != NULL)
            FL_FREE(pd->part[i]);
#endif

            pd->part[i] = NULL;
        }

        pd->parts = 0;
    }

    return flOK;
}




/* --------------------------------------------------------------------------- *
 *                                                                             *
 *                      a d d D i s k P a r t                                  *
 *                                                                             * 
 *  If there is partition record #partNo associated with the disk, discard     * 
 *  this info. Attach new partition record #partNo.                            * 
 *                                                                             * 
 *  Parameters:                                                                * 
 *      pd                 : disk (BDTL volume)                                   * 
 *      partNo             : partition (0 ... FL_MAX_PARTS_PER_DISK-1)            * 
 *                                                                             * 
 *  Returns:                                                                   * 
 *      flOK if success, otherwise respective error code                       * 
 *                                                                             * 
 * --------------------------------------------------------------------------- */

static FLStatus  addDiskPart ( FLffDisk * pd, 
                               int        partNo )
{
    FLffVol  * pv;    
    FLStatus   status;
    int        socNo, diskNo;

    /* arg. sanity check */

    if ((pd == NULL) || (partNo >= FL_MAX_PARTS_PER_DISK))
        return flBadDriveHandle;

    /* break TFFS handle into socket# and disk#, and do sanity check */

    socNo  = H2S(pd->handle);
    diskNo = H2D(pd->handle);
 
    if ((socNo >= SOCKETS) || (diskNo >= FL_MAX_TL_PARTITIONS))
        return flBadDriveHandle;

    status = flNotEnoughMemory;

#ifdef FL_MALLOC
    pv = (FLffVol *)FL_MALLOC( sizeof(FLffVol) );
#else
    pv = &ffAllParts[socNo][diskNo][partNo];
#endif

    if (pv != NULL) {

        /* initialize fields in struct FLffDisk to safe values */
 
        pv->handle         = pd->handle; 
        pv->type           = FL_RAW_PART;
        pv->flags          = 0;          
        pv->ffEnabled      = FALSE;                  /* turn off FAT minitor */
        pv->sectors        = (SectorNo) 0;
        pv->firstFATsecNo  = (SectorNo) -1;          /* none */
        pv->lastFATsecNo   = pv->firstFATsecNo;      /* none */
        pv->firstDataSecNo = (SectorNo) 0;
        pv->clusterSize    = (unsigned) 0;

#ifdef FL_MALLOC
        if( pd->part[partNo] != NULL )
        FL_FREE(pd->part[partNo]);
#endif
        
        pd->part[partNo] = pv;

        status = flOK;
    }

    return status;    
}




/* --------------------------------------------------------------------------- *
 *                                                                             *
 *                    a d d N e w D i s k P a r t                              *
 *                                                                             * 
 *  Add one more partition record to the disk.                                 * 
 *                                                                             * 
 *  Parameters:                                                                * 
 *      pd                 : disk (BDTL volume)                                   * 
 *                                                                             * 
 *  Returns:                                                                   * 
 *      flOK if success, otherwise respective error code                       * 
 *                                                                             * 
 * --------------------------------------------------------------------------- */

static FLStatus  addNewDiskPart ( FLffDisk * pd )
{
    if (pd->parts < FL_MAX_PARTS_PER_DISK) {

        checkStatus( addDiskPart (pd, pd->parts) );
    pd->parts++;
    }

    return flOK;
}




/* --------------------------------------------------------------------------- *
 *                                                                             *
 *                       d i s c a r d D i s k                                 *
 *                                                                             * 
 *  Remove disk record (with all the associated partition records).            * 
 *                                                                             * 
 *  Parameters:                                                                * 
 *      handle             : TFFS handle                                          * 
 *                                                                             * 
 *  Returns:                                                                   * 
 *      flOK if success, otherwise respective error code                       * 
 *                                                                             * 
 * --------------------------------------------------------------------------- */

static FLStatus  discardDisk ( int  handle )
{
    int  socNo, diskNo;

    /* break TFFS handle into socket# and disk#, and do sanity check */

    socNo  = H2S(handle);
    diskNo = H2D(handle);
 
    if ((socNo >= SOCKETS) || (diskNo >= FL_MAX_TL_PARTITIONS))
        return flBadDriveHandle;

    if( ffDisk[socNo][diskNo] != NULL ) {

    /* discard associated partition info */

    (void) discardDiskParts( ffDisk[socNo][diskNo] );

#ifdef FL_MALLOC

        /* release disk's scratch buffer */
 
        if( (ffDisk[socNo][diskNo])->buf != NULL)
            FL_FREE( (ffDisk[socNo][diskNo])->buf );

        FL_FREE( ffDisk[socNo][diskNo] );

#endif

        ffDisk[socNo][diskNo] = NULL;
    }

    return flOK;    
}




/* --------------------------------------------------------------------------- *
 *                                                                             *
 *                           n e w D i s k                                     *
 *                                                                             * 
 *  Discard existing disk record (if any), and create new one.                 * 
 *                                                                             * 
 *  Parameters:                                                                * 
 *      handle             : TFFS handle                                       * 
 *                                                                             * 
 *  Returns:                                                                   * 
 *      flOK if success, otherwise respective error code                       * 
 *                                                                             * 
 * --------------------------------------------------------------------------- */

static FLStatus  newDisk ( int  handle )
{
    int        socNo, diskNo;
    int        i;
    FLffDisk * pd;

    /* break TFFS handle into socket# and disk#, and do sanity check */

    socNo  = H2S(handle);
    diskNo = H2D(handle);
 
    if ((socNo >= SOCKETS) || (diskNo >= FL_MAX_TL_PARTITIONS))
        return flBadDriveHandle;

    /* discard current disk and associated partition info (if any) */

    checkStatus( discardDisk(handle) );

#ifdef FL_MALLOC

    pd = (FLffDisk *) FL_MALLOC( sizeof(FLffDisk) );

    if (pd == NULL)
        return flNotEnoughMemory;

    /* allocate and attach disk's scratch buffer */

    pd->buf = (FLSByte *)FL_MALLOC( FL_SECTOR_SIZE );

    if (pd->buf == NULL) {

        FL_FREE (pd);
        return flNotEnoughMemory;
    }

#else /* !FL_MALLOC */

    pd = &ffAllDisks[socNo][diskNo];

#endif /* FL_MALLOC */


    pd->handle  = handle;
    pd->ffstate = flStateNotInitialized;

    /* don't know partition layout yet */

    pd->parts   = 0;
    for (i = 0; i < FL_MAX_PARTS_PER_DISK; i++)
        pd->part[i] = NULL;

    /* watch Master Boot Record for update */

    pd->secToWatch = (SectorNo) 0;

    ffDisk[socNo][diskNo] = pd;

    return flOK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲一区二区在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 懂色av噜噜一区二区三区av| 亚洲一区二区三区不卡国产欧美| 国产色产综合色产在线视频| 777久久久精品| 99久久久久免费精品国产| 麻豆精品一区二区av白丝在线| 中文字幕一区视频| 国产日韩欧美综合一区| 日韩一区二区三免费高清| 色av一区二区| 成人aaaa免费全部观看| 激情综合色播激情啊| 天天影视色香欲综合网老头| 中文字幕av一区 二区| 欧美成人精品二区三区99精品| 欧美日韩中文字幕一区二区| 波多野结衣的一区二区三区| 国产一区二区久久| 久久av老司机精品网站导航| 亚洲成年人影院| 亚洲免费av高清| 国产精品色眯眯| 欧美成人a∨高清免费观看| 欧美日韩中文精品| 色吊一区二区三区| 91首页免费视频| www.日本不卡| 国产成人综合亚洲91猫咪| 麻豆精品一二三| 免费一级片91| 免费日本视频一区| 日韩中文字幕91| 天堂在线亚洲视频| 亚洲成av人在线观看| 亚洲综合免费观看高清完整版在线 | 久久66热偷产精品| 日本不卡高清视频| 国产一区美女在线| 久久亚洲综合av| 99re在线精品| 日韩女优av电影在线观看| 日本不卡一区二区| 亚洲超丰满肉感bbw| 亚洲6080在线| 免费一区二区视频| 久久99久久久久久久久久久| 免费看日韩a级影片| 视频一区中文字幕| 日韩高清在线电影| 日本一区中文字幕| 久久精品999| 国内精品国产三级国产a久久| 韩国女主播成人在线| 国产精品123区| 成人激情视频网站| 97精品久久久午夜一区二区三区 | 欧美激情一区在线观看| 国产精品久久久久aaaa| 亚洲欧洲日本在线| 一区二区三区四区在线免费观看| 亚洲成在线观看| 热久久国产精品| 国产河南妇女毛片精品久久久| 懂色av中文字幕一区二区三区| 91丨九色porny丨蝌蚪| 欧美视频第二页| 精品久久99ma| 国产精品久久777777| 亚洲一区二区精品3399| 日本三级亚洲精品| 成人黄色国产精品网站大全在线免费观看| www.综合网.com| 欧美日韩国产一级片| 日韩免费在线观看| 国产精品久久久久久福利一牛影视 | 捆绑调教一区二区三区| 国产xxx精品视频大全| 色拍拍在线精品视频8848| 91精品国产综合久久蜜臀| 久久嫩草精品久久久精品| 亚洲精品五月天| 捆绑调教美女网站视频一区| 99久久久精品免费观看国产蜜| 欧美美女黄视频| 久久久久久久久久久久电影| 亚洲一区二区av在线| 国产九色精品成人porny| 欧美婷婷六月丁香综合色| www精品美女久久久tv| 一区二区三区精品在线观看| 经典一区二区三区| 色婷婷综合在线| 国产精品久久久久久久久久久免费看| 精品一区二区三区欧美| 99久久精品情趣| 国产精品久久久久久久久搜平片 | 日韩码欧中文字| 国产精品综合av一区二区国产馆| 精品国产乱子伦一区| 亚洲欧美日韩久久精品| 色狠狠综合天天综合综合| 国产日韩精品视频一区| 无码av免费一区二区三区试看| 国产成人精品aa毛片| 日本成人在线视频网站| 色噜噜夜夜夜综合网| 欧美激情综合在线| 成人午夜精品一区二区三区| 国产精品无码永久免费888| 风流少妇一区二区| 亚洲人吸女人奶水| 色偷偷一区二区三区| 喷水一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 免费不卡在线观看| 国产日韩欧美一区二区三区乱码| 99久久久国产精品免费蜜臀| 亚洲国产精品麻豆| 色婷婷av一区| 激情深爱一区二区| 亚洲国产精品久久久久秋霞影院| 欧美一级久久久久久久大片| 99免费精品视频| 蜜桃一区二区三区在线观看| 中文天堂在线一区| 欧美一区二区三区人| 91一区二区三区在线播放| 精品综合久久久久久8888| 亚洲bt欧美bt精品777| wwww国产精品欧美| 欧洲视频一区二区| 成人免费高清视频| 日韩不卡一区二区三区| 国产精品欧美综合在线| 成人免费毛片app| 极品尤物av久久免费看| 亚洲一区二区免费视频| 久久人人超碰精品| 欧美色中文字幕| 国产精品69久久久久水密桃| 久久91精品国产91久久小草| 国产成人精品免费在线| 91在线porny国产在线看| 东方aⅴ免费观看久久av| 成人黄色软件下载| 欧美日韩精品三区| 精品国产乱码久久久久久影片| 欧美一卡2卡3卡4卡| 精品日本一线二线三线不卡| 欧美性高清videossexo| 在线观看亚洲精品视频| 在线免费观看日本欧美| 欧美日韩国产高清一区二区三区| 欧美精品一区二区三区在线播放| 国产丝袜欧美中文另类| 国产精品电影一区二区| 亚洲色图欧美偷拍| 日韩av一区二| 国产精品亚洲人在线观看| 国产成人免费在线视频| 成人av电影观看| 91精品国产综合久久久久久久久久| 欧美电影免费观看完整版| 最新国产精品久久精品| 免费在线观看日韩欧美| 91麻豆123| 久久综合九色综合97_久久久| 亚洲色图.com| 亚洲福利视频导航| 精品一区二区三区免费视频| 欧美巨大另类极品videosbest | 日韩免费观看2025年上映的电影| 日本一区二区电影| 久久不见久久见免费视频1| 欧美日韩黄视频| 一区二区三区自拍| 91网站在线观看视频| 久久久综合九色合综国产精品| 亚洲电影一级黄| 欧美在线观看视频在线| 亚洲美女精品一区| 在线精品视频小说1| 亚洲高清视频在线| 日韩欧美在线1卡| 韩国精品久久久| 亚洲欧洲日韩av| 欧美一a一片一级一片| 男男成人高潮片免费网站| 久久精品一区二区| 色狠狠综合天天综合综合| 日韩经典一区二区| 精品国产一区二区三区久久影院| 日本va欧美va精品发布| 久久精品一区八戒影视| 欧美四级电影在线观看| 久久精品国产在热久久| 亚洲乱码精品一二三四区日韩在线| 欧美亚一区二区|