📄 fatfilt.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 + -