blob: 8c0542b0cd742974be89140cdfa949759a21e587 [file] [log] [blame]
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
*******************************************************************************/
/********************************************************************************
* FileSys.h - Flash file system header
*
* DESCRIPTION:
* File system API for the flash unit integrated within the devices.
* DEPENDENCIES:
* None.
*
*******************************************************************************/
#ifndef __INCmvFSh
#define __INCmvFSh
#ifdef __cplusplus
extern "C" {
#endif
/* defines */
/* 10 Blocks are dedicated for the FAT, the first one includes the FAT
signature which is 32 Bytes, each file entry is 32 Bytes long , each block
has a header 8 bytes long (in the FAT block the other 24 are not used) =>
FS_MAX_NUM_OF_ENTRIES = 150 */
#define FS_FILE_HANDLER unsigned int
#define FS_MAX_NUM_OF_FAT_BLOCKS 10
#define FS_MAX_NUM_OF_ENTRIES 150
#define FS_FAT_SIGNATURE_SIZE 15
#define FS_SIGNATURE_OFFSET 5
#define FS_FAT_HEADER_SIZE 32
#define FS_FAT_FILE_ENTRY_SIZE 32
#define FS_FILE_SYSTEM_INITIALIZED 0x24136764
#define FS_FILE_NAME_OFFSET 5
#define FS_FILE_NAME_LENGTH 16
#define FS_FILE_EXT_OFFSET (FS_FILE_NAME_OFFSET+ \
FS_FILE_NAME_LENGTH)
#define FS_FILE_EXT_LENGTH 3
#define FS_BLOCK_SIZE 512
#define FS_BLOCK_HEADER_SIZE 8
#define FS_BLOCK_OFFSET_MASK 0xfffffe00
#define FS_BLOCK_OFFSET (0xffffffff - FS_BLOCK_OFFSET_MASK)
#define FS_ERSAING_COUNTER_FLAG_OFFSET (FS_SIGNATURE_OFFSET+ \
FS_FAT_SIGNATURE_SIZE)
#define FS_BLOCK_STATUS_FLAG_OFFSET 4
#define FS_BLOCK_OFFSET_FLAG_OFFSET 5
#define FS_BLOCK_OFFSET_OFFSET 6
#define FS_NO_FREE_BLOCKS 0xffffffff
#define FS_FREE_BLOCK 0xff
#define FS_BLOCK_IN_UPDATE 0x7f
#define FS_FAT_BLOCK 0x3f
#define FS_BLOCK_IN_USE 0x1f
#define FS_BLOCK_USED_FOR_ERASING_COUNTER 0x01
#define FS_FREE_DIRTY_BLOCK 0x00
#define FS_FULL_BLOCK 0x0F
#define FS_ENTRY_STATUS_FLAG_OFFSET 4
#define FS_NO_FREE_ENTRIES 0xffffffff
#define FS_FREE_ENTRY 0xff
#define FS_ENTRY_IN_UPDATE 0x7f
#define FS_ENTRY_IN_USE 0x1f
#define FS_FREE_DIRTY_ENTRY 0x00
#define FS_FILE_NOT_FOUND 0xffffffff
#define FS_FILE_IS_NOT_CLOSED 0x1
#define FS_FILE_DELETED 0x2
#define FS_FILE_EXIST 0x3
#define FS_ENABLE_ERASING_COUNTER 0X0000ffff
#define FS_NO_ERASING_COUNTER 0Xffffffff
#define FS_NO_VALID_FAT_STRING 0xffffffff
#define FS_OFFSET_OUT_OF_RANGE 0xfffffff0
#define FS_FLASH_MEMORY_NOT_PRESENT 0xffffffff
#define FS_SYSTEM_ALREADY_INITIALIZED 0xfffffffc
#define FS_VALID_FILE_SYS_IN_LOWER_OFFSET 0xfffffff0
#define FS_FILE_OPEN_ERROR 0xffffffff
#define FS_FILE_CLOSED 0x1
#define FS_FILE_CLOSE_ERROR 0xffffffff
#define FS_FILE_READ_ERROR 0xffffffff
/* Cache size = 8 Kb */
#define FS_NUMBER_OF_BLOCKS_FOR_CACHE 16
/* Operation mode defined in the call to mvFSInit */
#define FS_ENABLE_CACHE 1
#define FS_NO_CACHE 0
/* Defines for the seek operation */
/* Beginning of file */
#define FS_SEEK_SET 0
/* End of file */
#define FS_SEEK_END -1
/* Current position of file pointer */
#define FS_SEEK_CUR 1
/* File entry on the system's dynamic mvMemory */
typedef struct _fileTableEntry
{
char mode[4];
unsigned int pointerToFAT;
unsigned int filePointer;
unsigned int blockPointer; /* For read optimization */
unsigned int EOFpointer;
unsigned int statusFlag;
} FS_FILE_TABLE_ENTRY;
/* File entry on the FLASH mvMemory (FAT) - 32 Bytes long */
typedef struct _fileEntry
{
unsigned int nextBlockAddr;
unsigned int reserved1;
unsigned int reserved2;
char statusFlag;
char fileName[16];
char fileExt[3];
} FS_FILE_ENTRY;
/* 8 Bytes long */
typedef struct _blockHeader
{
unsigned int nextBlockAddr;
char statusFlag;
char offsetFlag;
unsigned short offset;
} FS_BLOCK_HEADER;
/* Cache properties defines */
typedef struct _fileCacheBlock
{
unsigned int fileHandler;
unsigned int currentBlockAddress;
unsigned int usageCounter;
unsigned int timeStamp;
char data[512];
} FS_FILE_CACHE_BLOCK;
/* Functions */
unsigned int mvFSFormat(unsigned int offset,unsigned int mode);
unsigned int mvFSInit(unsigned int mode);
FS_FILE_HANDLER mvFSOpen(char * fileName,char *mode);
unsigned int mvFSClose(FS_FILE_HANDLER fileHandler);
unsigned int mvFSDelete(char * fileName);
unsigned int mvFSFileFind(char * fileName);
unsigned int mvFSFileSize(FS_FILE_HANDLER fileHandler);
unsigned int mvFSWrite(FS_FILE_HANDLER fileHandler,
unsigned int numberOfBytes,char * block);
unsigned int mvFSRead(FS_FILE_HANDLER fileHandler,
unsigned int numberOfBytes,char * block);
unsigned int mvFSSeek(FS_FILE_HANDLER fileHandler,int offset,int origin);
unsigned int mvFSRewind(FS_FILE_HANDLER fileHandler);
unsigned int mvFSReadErasingCounter(unsigned int sectorNumber);
unsigned int mvFSNumOfHandles(char * fileName);
unsigned int mvFSSearchForSignature(void);
unsigned int mvFSGetEOFoffset(char * fileName);
unsigned int mvFSGetFreeEntry(void);
unsigned int mvFSGetFreeBlock(void);
unsigned int mvFSGetFreeBlockForWrite(void);
unsigned int mvFSWriteFileNameToFATentry(unsigned int entryOffset,
char * fileName);
unsigned int mvFSReadFileNameFromFATentry(unsigned int entryOffset,
char * fileName);
unsigned int mvFSGetFreeSize(void);
unsigned int mvFSFlushCache(void);
#ifdef __cplusplus
}
#endif
#endif /* __INCmvFSh */