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

📄 fatfilt.h

📁 电子盘DEMO板程序
💻 H
字号:
/******************************************************************************/
/*                                                                            */
/*  Copyright (C), 1995-2006, msystems Ltd. All rights reserved.              */
/*                                                                            */
/*  Redistribution and use in source and binary forms, with or without        */
/*  modification, are permitted provided that the following conditions are    */
/*  met:                                                                      */
/*  1. Redistributions of source code must retain the above copyright notice, */
/*     this list of conditions and the following disclaimer.                  */
/*  2. Redistributions in binary form must reproduce the above copyright      */
/*     notice, this list of conditions and the following disclaimer in the    */
/*     documentation and/or other materials provided with the distribution.   */
/*  3. Neither the name of msystems nor the names of its contributors may be  */
/*     used to endorse or promote products derived from this software without */
/*     specific prior written permission.                                     */
/*                                                                            */
/*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       */
/*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */
/*  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR             */
/*  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      */
/*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     */
/*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED  */
/*  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR    */
/*  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    */
/*  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      */
/*  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        */
/*  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              */
/*                                                                            */
/******************************************************************************/
/*
 * $Log:   V:/PVCSDB/DiskOnChip/archives/Testing/TrueFFS 6.3/Drop 2.5/3/bddoc/src/fatfilt.h-arc  $
 * 
 *    Rev 1.4   Sep 11 2006 13:45:20   yaniv.iarovici
 * Legal header added
 * 
 *    Rev 1.3   Aug 09 2006 16:52:48   Polina.Marimont
 * initial for DOC Driver 1.0
 */

/*******************************************************************************
 *                                                                             * 
 *                         Module: FATFILT                                     * 
 *                                                                             * 
 *  This module implements installable FAT12/16 filters. It supports up to     *
 *  SOCKETS sockets, with up to FL_MAX_DISKS_PER_SOCKET 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.                                                               * 
 *                                                                             * 
 *******************************************************************************/


#ifndef FLFF_H
#define FLFF_H



#include "dosformt.h"



/* number of entries in disk's partition table */

#define  FL_PART_TBL_ENTRIES  4

/* max number of partitions (filesystem volumes) per disk */
 
#define  FL_MAX_PARTS_PER_DISK  (FL_PART_TBL_ENTRIES + FL_MAX_PARTITION_DEPTH)




/* 
 * Generic 'initialization status' type 
 */

typedef enum { 

    flStateNotInitialized = 0, 
    flStateInitInProgress = 1, 
    flStateInitialized    = 2 

    } FLState; 


/* 
 * Disk partition (filesystem volume). Multiple partitions are allowed
 * on the disk.
 */

typedef struct {

    int        handle;             /* disk's TFFS handle                  */
    int        type;               /* FAT16_PARTIT                        */
    int        flags;              /* VOLUME_12BIT_FAT etc.               */
    FLBoolean  ffEnabled;          /* FAT filter is enabled on that part. */
    SectorNo   startSecNo;         /* sectorNo where partition starts     */
    SectorNo   sectors;            /* (info) total sectors in partition   */
    SectorNo   firstFATsecNo;      /* sectorNo of 1st sector of 1st FAT   */
    SectorNo   lastFATsecNo;       /* sectorNo of last sector of 1st FAT  */
    SectorNo   firstDataSecNo;
    unsigned   clusterSize;        /* Cluster size in sectors             */

} FLffVol;


/*
 * Disk with multiple partitions. Multiple disks are allowed on socket. 
 */

typedef struct {

    int        handle;             /* disk's TFFS handle              */
    FLState    ffstate;            /* FAT filter init. state          */
    int        parts;              /* total FAT12/16 partitions found */
    FLffVol  * part[FL_MAX_PARTS_PER_DISK];
    SectorNo   secToWatch;         /* used to track disk partitioning */
    FLSByte  * buf;                /* scratch buffer                  */

} FLffDisk;


/* 
 * Master Boot Record/Extended Boot Record of the disk 
 */

typedef struct {

    FLSByte            reserved[0x1be];

    struct {
        FLByte         activeFlag;    /* 80h = bootable */
        FLByte         startingHead;
        LEushort       startingCylinderSector;
        FLSByte        type;
        FLByte         endingHead;
        LEushort       endingCylinderSector;
        Unaligned4     startingSectorOfPartition;
        Unaligned4     sectorsInPartition;
    } parts [FL_PART_TBL_ENTRIES];

    LEushort           signature;    /* = PARTITION_SIGNATURE */

} flMBR;




/*
 * FAT Filter API 
 */

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

  extern FLStatus     ffCheckBeforeWrite (IOreq FAR2 *ioreq);
  extern FLStatus     flffControl (int devNo, int partNo, FLState state);
  extern FLffDisk*    flffInfo    (int devNo);

#endif

#endif /* FLFF_H */

⌨️ 快捷键说明

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