| /******************************************************************************* |
| 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 */ |
| |