FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/services/ffs/core.h @ 625:29dae53ad969
top level README: status update
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Sun, 31 Aug 2014 03:22:06 +0000 | 
| parents | 847e2585a0f2 | 
| children | 
| rev | line source | 
|---|---|
| 209 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 1 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 2 * Flash File System (ffs) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 3 * Idea, design and coding by Mads Meisner-Jensen, mmj@ti.com | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 4 * | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 5 * ffs core functions | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 6 * | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 7 * $Id: core.h 1.80.1.15.1.36 Thu, 08 Jan 2004 15:05:23 +0100 tsj $ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 8 * | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 9 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 10 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 11 #if (TARGET == 1) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 12 #include "../../riviera/rv/rv_defined_swe.h" | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 13 #endif | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 14 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 15 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 16 * Compile option switches | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 17 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 18 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 19 // FFS compiled with extra test functionality | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 20 #define FFS_TEST 1 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 21 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 22 // Default max number of simultaneous open files | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 23 #ifdef RVM_MSFE_SWE | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 24 #define FFS_FD_MAX 20 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 25 #else | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 26 #define FFS_FD_MAX 4 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 27 #endif | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 28 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 29 #define FFS_RECLAIM_NEW 1 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 30 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 31 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 32 * Compile constants | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 33 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 34 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 35 // FFS API version (in four-digit BCD format) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 36 #define FFS_API_VERSION ((uint16) 0x0642) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 37 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 38 // FFS_DRV_VERSION is in drv.h | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 39 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 40 // TMFFS protocol version is in tmffs.h | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 41 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 42 // Magic for determining (formatted) file system version. First two digits | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 43 // represent major version, bottom two digits represent minor version. An | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 44 // ffs code compiled for one major version X is compatible with any other | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 45 // format version with major = X. Minor version is incremented when adding | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 46 // new features that does not break compatibility. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 47 #define FFS_FORMAT_VERSION (0x0210) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 48 #define BLOCK_MAGIC_LOW ('f'<<8|'F') // "Ffs#" | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 49 #define BLOCK_MAGIC_HIGH ('#'<<8|'s') | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 50 #define BLOCK_MAGIC ((BLOCK_MAGIC_HIGH << 8)|(BLOCK_MAGIC_LOW)) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 51 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 52 // Absolute maximum number of inodes allowed | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 53 #define FFS_INODES_MAX 2048 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 54 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 55 // Default maximum number of inodes allowed | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 56 #define FFS_INODES_MAX_DEFAULT 1024 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 57 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 58 // Default number of path components (limit due to recursiveness of | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 59 // inodes_reclaim()) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 60 #define FFS_PATH_DEPTH_MAX 6 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 61 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 62 // Maximum number of blocks (flash sectors) in a ffs system. FFS_BLOCKS_MAX | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 63 // must be >= the number of blocks in the largest flash device memory | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 64 // map. It is used to allocate the number of entries in the static bstat | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 65 // array. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 66 #define FFS_BLOCKS_MAX 128 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 67 // Default size of journal file (represented as 256'ths of the blocksize) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 68 #define FFS_JOURNAL_SIZE_IN256THS 16 // one 16'ths of the block size. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 69 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 70 // Without the min size will the maximum of files (fs.blocks_files_max) in | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 71 // one block be 32 files if the blocksize is 8kB! | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 72 #define FFS_JOURNAL_SIZE_MIN 1024 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 73 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 74 #define FFS_JOURNAL_NAME ".journal" | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 75 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 76 // Default max size of file name (excluding null terminator) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 77 #define FFS_FILENAME_MAX 20 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 78 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 79 // Maximum distance in age between youngest and oldest blocks | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 80 #define FFS_DAGE_MAX 256 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 81 #define FFS_DAGE_GAIN_MIN (FFS_DAGE_MAX / 4) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 82 #define FFS_DAGE_EARLY_WIDTH 64 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 83 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 84 // Offset on file descriptors | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 85 #define FFS_FD_OFFSET '1' | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 86 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 87 // Macros to set flags and test bits in flash memory words (negative logic) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 88 #define BIT_SET(value, bits) ((value) & (~bits)) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 89 #define IS_BIT_SET(value, bits) (~(value) & (bits)) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 90 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 91 // Number of free inodes and journal entries to keep for "emergencies" | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 92 #define FFS_INODES_MARGIN 4 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 93 #define FFS_JOURNAL_MARGIN 4 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 94 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 95 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 96 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 97 * Macros used in both drv.c and core.c | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 98 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 99 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 100 // Convert a offset_t value to a block index | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 101 #define offset2block(offset) (((uint32) offset) >> dev.binfo[0].size_ld) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 102 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 103 // Convert between offset and address | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 104 #define offset2addr(offset) (dev.base + (offset)) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 105 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 106 // Size of a block | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 107 #define blocksize(block) (1 << dev.binfo[block].size_ld) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 108 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 109 // Test if flag is set | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 110 #define is_open_option(options, flags) ((options & flags) == flags) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 111 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 112 // Amount of reserved space. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 113 #define RESERVED_LOW 2 * fs.journal_size | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 114 #define RESERVED_NONE 0 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 115 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 116 // We have to saturate because a recently reclaimed inodes block could | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 117 // theoretically possess a high age | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 118 #define saturate_dage(dage) (dage > (2*FFS_DAGE_MAX) ? (2*FFS_DAGE_MAX) : dage) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 119 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 120 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 121 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 122 * Block Types | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 123 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 124 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 125 // Block age, ie. number of times block has been erased | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 126 typedef uint16 age_t; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 127 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 128 // Maximum age a block can have | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 129 #define BLOCK_AGE_MAX 0xFFFF | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 130 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 131 // ffs block status flags. These are stored in the first 2 bytes of | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 132 // the ffs block in the flash sector. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 133 enum BLOCK_FLAGS { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 134 BF_LOST = 0x80, // block is lost and will soon be erased | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 135 BF_FREE = 0x40, // free (preformatted and with block magic) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 136 BF_DATA = 0x02, // data | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 137 BF_CLEANING = 0x01, // block is being cleaned | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 138 BF_INODES = 0x10, // block contains inodes | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 139 BF_COPYING = 0x04 // block is a coming inodes block | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 140 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 141 enum BLOCK_STATES { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 142 BF_IS_EMPTY = ~(0), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 143 BF_IS_FREE = ~(BF_FREE), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 144 BF_IS_DATA = ~(BF_FREE | BF_DATA), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 145 BF_IS_CLEANING = ~(BF_FREE | BF_DATA | BF_CLEANING), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 146 BF_IS_COPYING = ~(BF_FREE | BF_COPYING), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 147 BF_IS_INODES = ~(BF_FREE | BF_COPYING | BF_INODES), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 148 BF_IS_INODES_LOST = ~(BF_FREE | BF_COPYING | BF_INODES | BF_LOST) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 149 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 150 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 151 // Header of each FFS block | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 152 struct block_header_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 153 uint16 magic_low; // 32-bit magic number | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 154 uint16 magic_high; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 155 uint16 version; // FFS_FORMAT_VERSION used for formatting | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 156 age_t age; // number of times this block has been erased | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 157 uint16 flags; // status flags of this block (BLOCK_FLAGS) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 158 uint16 reserved0; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 159 uint16 reserved1; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 160 uint16 reserved2; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 161 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 162 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 163 // Important the below define MUST fit to the size of the header that is written | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 164 #define BHEADER_SIZE sizeof(struct block_header_s) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 165 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 166 #define OLD_BLOCK_MAGIC_LOW ('S'<<8|'F') // "FS" | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 167 #define OLD_FFS_FORMAT_VERSION (0x0100) // 1.00 (in four-digit BCD format) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 168 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 169 // Old header of each FFS block. From old/previous FFS format version | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 170 struct block_header_old_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 171 uint8 flags; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 172 uint8 copied; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 173 uint8 magicflags; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 174 uint8 reserved0; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 175 uint16 magic_low; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 176 uint16 magic_high; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 177 uint16 reserved1; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 178 uint16 reserved2; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 179 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 180 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 181 // Block status. This struct holds the status of one ffs block This relation | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 182 // is always valid: <block size> = <used> + <lost> + <free>. The block size | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 183 // is obtained from the corresponding block_info structure. <used> and | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 184 // <lost> variables always holds a value which is a multiple of | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 185 // FFS_GRANULARITY. For inodes, <used> is number of inodes in active use, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 186 // <lost> is number of deleted/lost inodes, <numfiles> is the index of the | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 187 // first free inode. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 188 struct block_stat_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 189 blocksize_t used; // number of used bytes | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 190 blocksize_t lost; // number of lost bytes | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 191 uint16 flags; // flash block flags (first 16 bits of each block) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 192 uint16 objects; // number of valid objects | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 193 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 194 | 
| 211 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 195 /****************************************************************************** | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 196 * External declarations | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 197 ******************************************************************************/ | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 198 | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 199 extern struct fs_s fs; | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 200 extern struct block_stat_s bstat[FFS_BLOCKS_MAX]; | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 201 | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 202 extern struct ffs_stats_s stats; | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 203 | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 204 extern const struct block_info_s *binfo; | 
| 
847e2585a0f2
gsm-fw/services/ffs: core.c integrated
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: 
209diff
changeset | 205 | 
| 209 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 206 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 207 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 208 * Object Types | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 209 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 210 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 211 // This enum MUST be in sync with the one in ffs.h. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 212 enum OBJECT_TYPE_E { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 213 // remaining filetypes are in ffs.h | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 214 OT_ERASED = 0, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 215 OT_NULL = 7, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 216 OT_MASK = 7, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 217 OT_MAX = 4 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 218 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 219 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 220 // This enum MUST be in sync with the one in ffs.h. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 221 enum OBJECT_FLAGS_E { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 222 // remaining object flags are in ffs.h | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 223 OF_UNDEF0 = 1<<5, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 224 OF_UNDEF1 = 1<<6, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 225 OF_EXACT = 1<<7, // used by control()/update_commit() interaction. This | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 226 // is *not* an object flag! | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 227 OF_ALL = OF_READONLY, // all flags allowed to be changed by user | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 228 OF_MASK = 0xF0 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 229 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 230 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 231 struct inode_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 232 uint16 size; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 233 uint8 reserved; // size extension? | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 234 objflags_t flags; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 235 iref_t child; // link to first inode in dir (this inode is a dir) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 236 iref_t sibling; // link to next inode in same directory | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 237 location_t location; // location of object | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 238 uint16 sequence; // | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 239 uint16 updates; // times this object has been updated | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 240 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 241 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 242 struct file_descriptor_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 243 char *buf; // Write buffer | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 244 iref_t seghead; // First chunk. Contain file name and optional data | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 245 iref_t wch; // Inode of work chunk (if chunk is read to buf) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 246 int fp; // File pointer | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 247 int wfp; // Work file pointer always points to start of wch | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 248 int size; // Size of object (all chunks and data from buf) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 249 int8 options; // Open options | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 250 int dirty; // Indicate if buf contain valid data or not | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 251 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 252 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 253 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 254 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 255 * Journal types and global fs structure | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 256 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 257 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 258 enum JOURNAL_FLAGS { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 259 JOURNAL_WRITING = 0x02, // journal is being written to journal file | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 260 JOURNAL_READY = 0x04, // journal has been written to journal file | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 261 JOURNAL_DONE = 0x08 // journal has been written to ffs | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 262 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 263 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 264 enum JOURNAL_STATES { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 265 JOURNAL_IS_EMPTY = ~(0), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 266 JOURNAL_IS_WRITING = ~(JOURNAL_WRITING), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 267 JOURNAL_IS_READY = ~(JOURNAL_WRITING | JOURNAL_READY), | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 268 JOURNAL_IS_DONE = ~(JOURNAL_WRITING | JOURNAL_READY | JOURNAL_DONE) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 269 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 270 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 271 // Journal entry structure. Note that the state byte *MUST* be the first | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 272 // byte of the structure! | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 273 struct journal_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 274 uint8 state; // state of journal entry. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 275 objflags_t flags; // type of object | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 276 iref_t i; // iref of object | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 277 iref_t diri; // iref of object that is this object's parent/sibling | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 278 iref_t oldi; // iref of object being replaced (only for updates) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 279 location_t location; // object's location | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 280 uint16 size; // object's size | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 281 iref_t repli; // inode which is replaced | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 282 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 283 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 284 // Main ffs info struct (initialised by ffs_initialize()) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 285 struct fs_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 286 struct inode_s *inodes_addr; // base address of inodes | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 287 iref_t root; // iref of root directory | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 288 bref_t inodes; // index into bstat containing inode block | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 289 bref_t newinodes; // index into bstat containing new inode block | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 290 bref_t blocks_free_min; // Number of spare blocks (0 or 1) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 291 int filesize_max; // Max size of object data | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 292 int reserved_space; // Byte size of space reserved for journal relocation | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 293 iref_t inodes_max; // Max number of inodes possible | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 294 iref_t inodes_high; // number of inodes triggering an inodes_reclaim() | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 295 iref_t objects_max; // Max number of objects (valid inodes) allowed | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 296 age_t age_max; // Max block age found by blocks_fsck() | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 297 iref_t block_files_max; // max number of files in a block | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 298 iref_t block_files_reserved; // Reserved for journals | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 299 uint16 format; // FFS version as formatted in flash blocks | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 300 uint16 sequence; // Object sequence number (for debug only) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 301 effs_t initerror; // ffs_initialize() return code | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 302 uint8 lost_threshold; // Threshold percentage for data block reclaim | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 303 uint8 flags; // Global FFS options/flags | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 304 uint8 filename_max; // Max length of a filename | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 305 uint8 path_depth_max; // Max path componenents allowed | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 306 uint8 numfds; // Mumber of available file descriptors | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 307 uint8 testflags; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 308 int8 journal_depth; // Current journal nesting depth (0 or 1) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 309 iref_t ijournal; // iref of journal file | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 310 uint32 journal_size; // Byte size of journal file | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 311 uint32 journal_pos; // Byte offset to first free entry in journal file | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 312 struct journal_s journal; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 313 uint8 fd_max; // number of max available file descriptors | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 314 int fd_buf_size; // size of stream buffer | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 315 struct file_descriptor_s fd[FFS_FD_MAX]; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 316 struct journal_s ojournal; // "Old" journal | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 317 int link_child; // Link child in journal or not | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 318 iref_t i_backup; // Used by ffs_file_write() | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 319 int chunk_size_max; // Max size of one chunk | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 320 int chunk_size_min; // Min size of one chunk | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 321 uint32 debug[4]; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 322 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 323 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 324 // This is the layout of the FFS performance statistics file. The file is | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 325 // created with the name ".statistics" in the root directory at format. It | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 326 // is updated after each data and inodes reclaim (after writing the file | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 327 // that provoked the reclaim). The file is only updated if it exists, so if | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 328 // the user does not want the file, she can erase it after the initial | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 329 // format. FIXME: The use of the .statistics file is not yet implemented | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 330 struct ffs_stats_s { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 331 uint32 data_allocated; // implemented | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 332 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 333 struct { // Not yet implemented | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 334 uint32 created; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 335 uint32 updated; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 336 uint32 read; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 337 } files; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 338 struct { // Not yet implemented | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 339 uint32 written[2]; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 340 uint32 read[2]; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 341 } bytes; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 342 struct { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 343 uint32 most_lost; // Block candidate | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 344 uint32 most_unused; // Block candidate | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 345 uint32 youngest; // Block candidate | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 346 uint32 valid[2]; // Amount of valid reclaimed data | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 347 uint32 lost[2]; // Amount of lost reclaimed data | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 348 } drec; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 349 struct { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 350 uint32 num; // Number of inode reclaims | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 351 uint32 valid; // Number of valid reclaimed inodes | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 352 uint32 lost; // Number of lost reclaimed inodes | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 353 } irec; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 354 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 355 extern struct ffs_stats_s stats; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 356 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 357 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 358 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 359 * Miscellaneous types | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 360 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 361 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 362 // only used with (FFS_TEST == 1) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 363 enum TEST_RECOVERY { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 364 JOURNAL_TEST_BASE = 0x10, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 365 JOURNAL_TEST_EMPTY, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 366 JOURNAL_TEST_WRITING, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 367 JOURNAL_TEST_READY, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 368 JOURNAL_TEST_COMMITTING, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 369 JOURNAL_TEST_COMMITTED, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 370 JOURNAL_TEST_DONE, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 371 BLOCK_COMMIT_BASE = 0x20, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 372 BLOCK_COMMIT_BEFORE, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 373 BLOCK_COMMIT_NO_VALID, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 374 BLOCK_COMMIT_OLD_FREE, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 375 BLOCK_COMMIT_AFTER, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 376 BLOCK_RECLAIM_BASE = 0x40, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 377 BLOCK_RECLAIM_ALLOC, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 378 BLOCK_RECLAIM_CLEANING, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 379 BLOCK_RECLAIM_NO_CLEAN, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 380 BLOCK_RECOVER_OBJECTS | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 381 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 382 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 383 enum FLASH_DATA { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 384 FLASH_NULL8 = 0xFF, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 385 FLASH_NULL16 = 0xFFFF, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 386 FLASH_NULL32 = 0xFFFFFFFFL, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 387 IREF_NULL = FLASH_NULL16 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 388 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 389 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 390 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 391 // This enum MUST be in sync with the one in ffs.h. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 392 enum OBJECT_CONTROL { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 393 // remaining object control codes are in ffs.h | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 394 OC_FS_FLAGS = 80, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 395 OC_TRACE_INIT = 82, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 396 OC_DEV_MANUFACT = 88, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 397 OC_DEV_DEVICE = 89, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 398 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 399 OC_DEBUG_FIRST = 120, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 400 OC_DEBUG_0 = 120, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 401 OC_DEBUG_1 = 121, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 402 OC_DEBUG_2 = 122, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 403 OC_DEBUG_3 = 123, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 404 OC_DEBUG_LAST = 123, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 405 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 406 OC_FS_TESTFLAGS = 127 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 407 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 408 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 409 enum FS_FLAGS { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 410 FS_DIR_DATA = 0x01 // allow directory objects to contain data. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 411 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 412 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 413 enum RECLAIM_CANDIDATE { | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 414 MOST_LOST, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 415 MOST_UNUSED, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 416 YOUNGEST | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 417 }; | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 418 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 419 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 420 * Macros | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 421 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 422 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 423 // Convert between location and offset | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 424 #define location2offset(location) ((location) << dev.atomlog2) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 425 #define offset2location(offset) (((uint32) offset) >> dev.atomlog2) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 426 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 427 // test if object is of a specific type | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 428 #define is_object(objp, type) (((objp)->flags & OT_MASK) == (type)) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 429 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 430 // test if object is valid (directory, file or symlink) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 431 #define is_object_valid(ip) ((ip->flags & OT_MASK) <= OT_MAX && (ip->flags & OT_MASK) != OT_ERASED) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 432 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 433 // test if block is in a specific state | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 434 #define is_block(block, state) (bstat[block].flags == (uint16) (state)) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 435 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 436 // test if block has certain flags set | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 437 #define is_block_flag(block, bits) (IS_BIT_SET(bstat[block].flags, (bits))) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 438 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 439 // convert an object's data address to the address of the object's name | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 440 #define addr2name(addr) (addr) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 441 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 442 // Convert a size to an aligned size | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 443 #define atomalign(size) (((size) + dev.atomsize-1) & ~dev.atomnotmask) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 444 #define wordalign(size) (((size) + 3) & ~3) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 445 #define halfwordalign(size) (((size) + 1) & ~1) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 446 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 447 #define inode_addr(i) (fs.inodes_addr + i) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 448 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 449 #define JOURNAL_POS_INITIAL (wordalign(2 + sizeof(FFS_JOURNAL_NAME) + 1)) | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 450 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 451 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 452 /****************************************************************************** | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 453 * Function prototypes | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 454 ******************************************************************************/ | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 455 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 456 // Helper functions | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 457 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 458 effs_t is_filename(const char *s); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 459 int ffs_strlen(const char *s); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 460 int ffs_strcmp(const char *s, const char *p); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 461 char *addr2data(const char *addr, const struct inode_s *ip); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 462 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 463 int object_datasize(iref_t i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 464 iref_t is_readonly(iref_t i, const char *name); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 465 iref_t dir_traverse(iref_t i, iref_t *entries); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 466 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 467 bref_t block_alloc(bref_t n, uint16 flags); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 468 bref_t block_alloc_try(bref_t *n); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 469 void block_flags_write(uint8 block, uint8 flags); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 470 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 471 offset_t data_alloc(int size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 472 offset_t data_alloc_try(int size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 473 offset_t data_reserved_alloc(int size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 474 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 475 iref_t inode_alloc(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 476 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 477 effs_t is_fd_valid(fd_t fdi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 478 effs_t is_offset_in_buf(int offset, fd_t fdi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 479 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 480 iref_t chunk_alloc(int realsize, int is_journal, offset_t *offset); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 481 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 482 iref_t inode_alloc_try(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 483 fd_t get_fdi(iref_t i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 484 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 485 offset_t data_prealloc(int realsize); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 486 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 487 // Functions used by API | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 488 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 489 effs_t object_update(iref_t oldi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 490 iref_t object_create(const char *name, const char *buf, int size, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 491 iref_t dir); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 492 int file_read(const char *name, void *addr, int size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 493 int stream_read(fd_t fdi, void *src, int size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 494 int object_read(const char *name, char *buf, int size, int linkflag); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 495 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 496 iref_t object_stat(const char *name, struct xstat_s *stat, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 497 int linkflag, int fdi, int extended); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 498 effs_t object_remove(iref_t i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 499 iref_t object_rename(iref_t oldi, const char *newname, iref_t newdir); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 500 effs_t object_control(iref_t i, int8 action, int value); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 501 int object_truncate(const char *pathname, fd_t fdi, offset_t length); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 502 iref_t object_lookup(const char *path, char **leaf, iref_t *dir); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 503 iref_t object_lookup_once(const char *path, char **leaf, iref_t *dir); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 504 iref_t dir_open(const char *name); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 505 iref_t dir_next (iref_t dir, iref_t i, char *name, int8 size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 506 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 507 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 508 // Journalling | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 509 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 510 void journal_begin(iref_t oldi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 511 void journal_end(uint8 type); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 512 void journal_commit(uint8 type); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 513 int journal_push(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 514 int journal_pop(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 515 iref_t journal_create(iref_t oldi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 516 effs_t journal_init(iref_t i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 517 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 518 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 519 // Format, Init and Reclaim | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 520 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 521 void block_preformat(bref_t b, age_t age); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 522 effs_t fs_preformat(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 523 effs_t is_formattable(int8 flag); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 524 effs_t fs_format(const char *fsname_and_options); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 525 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 526 effs_t ffs_initialize(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 527 void fs_params_init(const char *p); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 528 blocksize_t block_used(bref_t b); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 529 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 530 effs_t ffs_begin(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 531 int ffs_end(int error); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 532 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 533 int block_reclaim(bref_t b); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 534 int blocks_reclaim(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 535 void block_commit(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 536 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 537 iref_t data_reclaim(int space); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 538 int data_reclaim_try(int space); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 539 iref_t data_block_reclaim(bref_t b, int reclaim_candidate); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 540 iref_t object_relocate(iref_t oldi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 541 iref_t block_clean(bref_t b); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 542 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 543 void block_free(bref_t block); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 544 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 545 void inodes_set(iref_t i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 546 effs_t inodes_reclaim(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 547 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 548 int reclaim(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 549 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 550 // Internally used functions | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 551 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 552 effs_t file_read_int(const char *path, void *src, int size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 553 effs_t file_update(const char *path, void *src, int size); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 554 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 555 int statistics_file_create(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 556 int statistics_write(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 557 void statistics_init(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 558 void statistics_update_drec(int valid, int lost, int candidate); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 559 void statistics_update_irec(int valid, int lost); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 560 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 561 // Chunk Operations | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 562 iref_t segment_create(const char *buf, int size, iref_t dir); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 563 int segment_datasize(const struct inode_s *ip); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 564 int segment_read(iref_t i, char *buf, int size, int offset); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 565 iref_t segment_next(iref_t i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 566 iref_t segment_traverse(iref_t i, iref_t *entries); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 567 int segfile_seek(iref_t in_i, int in_pos, | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 568 iref_t *out_i, int *out_pos_i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 569 iref_t chunk_traverse(iref_t i); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 570 effs_t datasync(fd_t fdi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 571 // debug/test functions | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 572 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 573 void tr_bstat(void); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 574 void tr_fd(fd_t fdi); | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 575 | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 576 // These prototypes really belong in ffs.h but as they have not been | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 577 // implemented, we will not show these prototypes to application | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 578 // programmers. | 
| 
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 579 effs_t fcntl(fd_t fd, int8 action, uint32 *param); | 
