annotate gsm-fw/services/ffs/core.h @ 992:a7b0b426f9ca

target-utils: boot ROM UART autodetection revamped The new implementation should work with both the familiar Calypso C035 boot ROM version found in our regular targets as well as the older Calypso F741979B version found on the vintage D-Sample board.
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Wed, 30 Dec 2015 21:28:41 +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);