annotate gsm-fw/services/ffs/core.h @ 701:615fb8847d3f

top level README: typo fix
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Thu, 02 Oct 2014 18:48:12 +0000
parents 847e2585a0f2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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: 209
diff changeset
195 /******************************************************************************
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff changeset
196 * External declarations
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff changeset
197 ******************************************************************************/
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff changeset
198
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff changeset
199 extern struct fs_s fs;
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff 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: 209
diff changeset
201
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff changeset
202 extern struct ffs_stats_s stats;
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff changeset
203
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff changeset
204 extern const struct block_info_s *binfo;
847e2585a0f2 gsm-fw/services/ffs: core.c integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 209
diff 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);