|
|
/*
* $Log: V:/Flite/archives/TrueFFS5/Src/FLBASE.H_V $ * * Rev 1.19 Apr 15 2002 07:36:18 oris * Moved all include directive to head of file. * Moved OS names definitions to mtdsa.h * Changed flBusConfig environment array to dword variables instead of single byte. * Added support for VERIFY_ERASED_SECTOR compilation flag. * * Rev 1.18 Feb 19 2002 20:59:28 oris * Changed order of include directives. * * Rev 1.17 Jan 29 2002 20:08:08 oris * Added NAMING_CONVENTION prefix and extern "C" for cpp files to all public routines: * tffsset, tffscmp and tffsset. * * Rev 1.16 Jan 20 2002 20:26:42 oris * Added casting to byte to FL_GET_PARTITION_FROM_HANDLE and to FL_GET_SOCKET_FROM_HANDLE * * Rev 1.15 Jan 17 2002 23:00:42 oris * Removed MAX and MIN definitions and replaced them with TFFSMIN and TFFSMAX. * Added extern for the following environment variables: * extern dword flSectorsVerifiedPerFolding; * extern byte flSuspendMode; * extern byte flBusConfig[SOCKETS]; * Changed the following environment variables * extern byte flVerifyWrite[SOCKETS][MAX_TL_PARTITIONS<<1] - 4 for disk partition 3 for binary and one for the rest. * extern byte flPolicy[SOCKETS][MAX_TL_PARTITIONS] - 1 for each disk partition. * Changed all environment variables to byte (except for flSectorsVerifiedPerFolding) * Added FL_UPS for flVerifyWrite * Added FL_SUSPEND_WRITE and FL_SUSPEND_IO for flSuspendMode. * Added define CUR_OS_WINCE for boot SDK customization. * Exchanged CUR_OS_VX_WORKS and CUR_NO_OS * Added FL_GET_SOCKET_FROM_HANDLE and FL_GET_PARTITION_FROM_HANDLE instead of HANDLE_VOLUME_MASK and HANDLE_PARTITION_MASK. * * Rev 1.14 Nov 21 2001 11:38:52 oris * Removed FL_MULTI_DOC_NOT_ACTIVE , FL_MULTI_DOC_ACTIVE , FL_DO_NOT_MARK_DELETE , FL_MARK_DELETE , FL_WITHOUT_VERIFY_WRITE , FL_WITH_VERIFY_WRITE definition (unsing FL_ON and FL_OFF instead). * * Rev 1.13 Nov 08 2001 10:49:14 oris * Moved environment variable states definitions from blockdev.h * Added flVerifyWrite environment variable that controls the verify write mode at run-time. * * Rev 1.12 Sep 15 2001 23:45:40 oris * Changed BIG_ENDIAN to FL_BIG_ENDIAN * Changed checkStatus definition in order not to get compilation warnings. * * Rev 1.11 Jul 29 2001 16:44:16 oris * Added CUR_OS_NO definition * * Rev 1.10 May 21 2001 16:09:52 oris * Removed flsleep prototype and moved tffscpy tffscmp and tffsset prototypes under USE_STD_FUNC copmpilation flag. * * Rev 1.9 May 21 2001 13:51:06 oris * Reorganized and added the CUS_OS_DOS, CUS_OS_PSOS and CUS_OS_VX_WORKS defintions. * * Rev 1.8 May 16 2001 21:17:38 oris * Added the FL_ prefix to the following defines: ON, OFF * Changed c variable name to cval (avoid name clashes). * Added flMtlDefragMode environment variable forward definition. * * Rev 1.7 Apr 30 2001 18:00:32 oris * Added new environment variable flMarkDeleteOnFlash declaration. * * Rev 1.6 Apr 10 2001 23:53:54 oris * Added flAddLongToFarPointer declaration for the standalone version. * * Rev 1.5 Apr 09 2001 15:01:56 oris * UNAL4(arg) definition was changed. * * Rev 1.4 Apr 01 2001 07:51:46 oris * copywrite notice. * Moved MIN,MAX,BYTE_ADD_FAR,WORD_ADD_FAR macroes from base2400.c. * Moved protection attributes definition to flflash.h. * Aliggned left all # directives. * Added FAR0 to cpyBuffer,setBuffer,cmpBuffer,flmemcpy,flmemset and flmemcmp * * Rev 1.3 Feb 18 2001 14:18:02 oris * remove osak version redundent definition. * * Rev 1.2 Feb 14 2001 02:12:08 oris * Added flMaxUnitChain environment variable. * Changed flUseMultiDoc and flPolicy variables type and names. * * Rev 1.1 Feb 05 2001 18:45:20 oris * Removed flcustm.h include directive since it is already included in mtdsa.h * Added flchkdef.h include directive for sanity check on compilation flags. * * Rev 1.0 Feb 04 2001 11:14:30 oris * Initial revision. * */
/***********************************************************************************/ /* M-Systems Confidential */ /* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2001 */ /* 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 = [email protected] */ /***********************************************************************************/
#ifndef FLBASE_H
#define FLBASE_H
/***************************************************************************/ /* */ /* Include customization files */ /* Note the following files are used for : */ /* mtdsa.h - Complete customization - standaloe applications */ /* like Binary SDK */ /* flsystem.h - System customization - TrueFFS applications like drivers */ /* flchkdef.h - Customized defintion check of TrueFFS applications. */ /* */ /***************************************************************************/
#include "mtdsa.h"
#ifndef MTD_STANDALONE
#include "flcustom.h"
#include "flsystem.h"
#include "flchkdef.h"
#endif /* MTD_STANDALONE */
#include "flstatus.h"
/* Number of translation layer partitions
* * Defines Maximum Number of Traslation layer partitons on a physical device * * The actual number of partitions depends on the format placed on each device. */
#define MAX_TL_PARTITIONS 4
/* Sector size
* * Define the log2 of sector size for the FAT & translation layers. Note * that the default 512 bytes is the de-facto standard and practically * the only one that provides real PC interoperability. */
#define SECTOR_SIZE_BITS 9
/* standard type definitions */ typedef int FLBoolean;
/* Boolean constants */
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FL_ON
#define FL_ON 1
#endif
#ifndef FL_OFF
#define FL_OFF 0
#endif
/* Geral purpose macroes */
#define BYTE_ADD_FAR(x,y) ((byte FAR1 *)addToFarPointer(x,y))
#define WORD_ADD_FAR(x,y) ((word FAR1 *)addToFarPointer(x,y))
/* Drive handle masks */
#define FL_GET_SOCKET_FROM_HANDLE(ioreq) (byte)(ioreq->irHandle & 0x0f)
#define FL_GET_PARTITION_FROM_HANDLE(ioreq) (byte)((ioreq->irHandle & 0xf0) >> 4)
#define INVALID_VOLUME_NUMBER 0xff
#define TL_SIGNATURE 6
/* General types definitions */
typedef unsigned char byte; /* 8 bit unsigned variable */ typedef unsigned short word; /* 16 bit unsigned variable */ typedef unsigned long dword; /* 32 bit unsigned variable */
typedef signed char Sbyte; /* 8 bit signed variable */ typedef signed short Sword; /* 16 bit signed variable */ typedef signed long Sdword; /* 32 bit signed variable */
#define SECTOR_SIZE (1 << SECTOR_SIZE_BITS)
#define BITS_PER_BITE 8
/* General purpose Macroes adjusted according to the above customization files. */
/* define SectorNo range according to media maximum size */ #if (MAX_VOLUME_MBYTES * 0x100000l) / SECTOR_SIZE > 0x10000l
typedef unsigned long SectorNo; #define UNASSIGNED_SECTOR 0xffffffffl
#else
typedef unsigned short SectorNo; #define UNASSIGNED_SECTOR 0xffff
#endif
/* x86 pointer far level dictated several of the TrueFFS pointers types. */ #if FAR_LEVEL > 0
#define FAR0 far
#else
#define FAR0
#endif
#if FAR_LEVEL > 1
#define FAR1 far
#else
#define FAR1
#endif
#if FAR_LEVEL > 2
#define FAR2 far
#else
#define FAR2
#endif
/* Call a procedure returning status and fail if it fails. This works only in */ /* routines that return Status: */ #define checkStatus(exp) { FLStatus fl__status = (exp);if (fl__status != flOK) return fl__status; }
#define vol (*pVol)
#define TFFSMIN(a,b) ((a>b) ? b:a)
#define TFFSMAX(a,b) ((a<b) ? b:a)
/***************************************************************************/ /* Big \ Little endien architecture conversion macroes. */ /***************************************************************************/
#ifndef FL_BIG_ENDIAN
typedef unsigned short LEushort; typedef unsigned long LEulong;
#define LE2(arg) arg
#define toLE2(to,arg) (to) = (arg)
#define LE4(arg) arg
#define toLE4(to,arg) (to) = (arg)
#define COPY2(to,arg) (to) = (arg)
#define COPY4(to,arg) (to) = (arg)
typedef unsigned char Unaligned[2]; typedef Unaligned Unaligned4[2];
#define UNAL2(arg) fromUNAL(arg)
#define toUNAL2(to,arg) toUNAL(to,arg)
#define UNAL4(arg) fromUNALLONG((Unaligned const FAR0 *)(arg))
#define toUNAL4(to,arg) toUNALLONG(to,arg)
extern void toUNAL(unsigned char FAR0 *unal, unsigned short n);
extern unsigned short fromUNAL(unsigned char const FAR0 *unal);
extern void toUNALLONG(Unaligned FAR0 *unal, unsigned long n);
extern unsigned long fromUNALLONG(Unaligned const FAR0 *unal);
#else
typedef unsigned char LEushort[2]; typedef unsigned char LEulong[4];
#define LE2(arg) fromLEushort(arg)
#define toLE2(to,arg) toLEushort(to,arg)
#define LE4(arg) fromLEulong(arg)
#define toLE4(to,arg) toLEulong(to,arg)
#define COPY2(to,arg) copyShort(to,arg)
#define COPY4(to,arg) copyLong(to,arg)
#define Unaligned LEushort
#define Unaligned4 LEulong
extern void toLEushort(unsigned char FAR0 *le, unsigned short n);
extern unsigned short fromLEushort(unsigned char const FAR0 *le);
extern void toLEulong(unsigned char FAR0 *le, unsigned long n);
extern unsigned long fromLEulong(unsigned char const FAR0 *le);
extern void copyShort(unsigned char FAR0 *to, unsigned char const FAR0 *from);
extern void copyLong(unsigned char FAR0 *to, unsigned char const FAR0 *from);
#define UNAL2 LE2
#define toUNAL2 toLE2
#define UNAL4 LE4
#define toUNAL4 toLE4
#endif /* FL_BIG_ENDIAN */
typedef LEulong LEmin;
#ifndef MTD_STANDALONE
#include "flsysfun.h"
#endif /* MTD_STANDALONE */
/*************************************************/ /* Use routines instead of 'c' standard librarys */ /*************************************************/
#if (defined(VERIFY_WRITE) || defined(VERIFY_ERASED_SECTOR))
extern byte flVerifyWrite[SOCKETS][MAX_TL_PARTITIONS<<1]; /* Vefrify write */ #define FL_UPS 2
/*
* See also FL_ON and FL_OFF */ #endif /* VERIFY_WRITE || VERIFY_ERASED_SECTOR */
#ifdef ENVIRONMENT_VARS
typedef void FAR0 * (NAMING_CONVENTION FAR0* cpyBuffer)(void FAR0 * ,const void FAR0 * ,size_t); typedef void FAR0 * (NAMING_CONVENTION FAR0* setBuffer)(void FAR0 * ,int ,size_t); typedef int (NAMING_CONVENTION FAR0* cmpBuffer)(const void FAR0 * ,const void FAR0 * ,size_t);
#ifdef __cplusplus
extern "C" { #endif /* __cplusplus */
extern cpyBuffer tffscpy; #ifdef __cplusplus
} #endif /* __cplusplus */
#ifdef __cplusplus
extern "C" { #endif /* __cplusplus */
extern cmpBuffer tffscmp; #ifdef __cplusplus
} #endif /* __cplusplus */
#ifdef __cplusplus
extern "C" { #endif /* __cplusplus */
extern setBuffer tffsset; #ifdef __cplusplus
} #endif /* __cplusplus */
extern void FAR0* NAMING_CONVENTION FAR0 flmemcpy(void FAR0* dest,const void FAR0 *src,size_t count); extern void FAR0* NAMING_CONVENTION FAR0 flmemset(void FAR0* dest,int cval,size_t count); extern int NAMING_CONVENTION FAR0 flmemcmp(const void FAR0* dest,const void FAR0 *src,size_t count);
/**********************************************/ /* Declare the TrueFFS environment variables */ /**********************************************/
extern byte flUse8Bit; extern byte flUseNFTLCache; extern byte flUseisRAM;
extern byte flUseMultiDoc; extern byte flMTLdefragMode; extern byte flMaxUnitChain; extern byte flMarkDeleteOnFlash; extern byte flPolicy[SOCKETS][MAX_TL_PARTITIONS]; extern byte flSuspendMode;
#if (defined(VERIFY_WRITE) || defined(VERIFY_ERASED_SECTOR))
extern dword flSectorsVerifiedPerFolding; #endif /* VERIFY_WRITE || VERIFY_ERASED_SECTOR */
/* Policies definitions (FL_SET_POLICY) */ #define FL_DEFAULT_POLICY 0
#define FL_COMPLETE_ASAP 1
/* Mtl policies defintions (FL_MTL_POLICY) */ #define FL_MTL_DEFRAGMENT_ALL_DEVICES 0
#define FL_MTL_DEFRAGMENT_SEQUANTIAL 1
/* Suspend mode other then FL_OF */ #define FL_SUSPEND_WRITE 1
#define FL_SUSPEND_IO 3
extern void flSetEnvVar(void);
#endif /* ENVIRONMENT_VARS */
#ifndef FL_NO_USE_FUNC
extern dword flBusConfig[SOCKETS]; #endif /* FL_NO_USE_FUNC */
#ifdef MTD_STANDALONE
/* When the using the application standalone mode (mtdsa.h), the following routines can be */ /* used provided they are implemented in mtdsa.c file. */
extern void flDelayMsecs(unsigned long msec);
extern void FAR0* flAddLongToFarPointer(void FAR0 *ptr, unsigned long offset);
#ifndef USE_STD_FUNC
/**********************************************/ /* Declare tffscpy, tffsset, tffscmp routines */ /* Not using the standard 'c' libraries. */ /**********************************************/
extern void tffscpy(void FAR1 *dst, void FAR1 *src, unsigned len); extern int tffscmp(void FAR1 *s1, void FAR1 *s2, unsigned len); extern void tffsset(void FAR1 *dst, unsigned char value, unsigned len); #endif /* USE_STD_FUNC */
#endif /* MTD_STANDALONE */
#endif
|