projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
For at91sam7 family.
[bertos.git]
/
fs
/
battfs.h
diff --git
a/fs/battfs.h
b/fs/battfs.h
index 1048b66c99f15a86b652b90bab4663407a540e90..14728a8d2b199f82c36054fa9237bbdb1bc5904a 100644
(file)
--- a/
fs/battfs.h
+++ b/
fs/battfs.h
@@
-43,6
+43,7
@@
#include <cfg/compiler.h> // uintXX_t; STATIC_ASSERT
#include <cpu/types.h> // CPU_BITS_PER_CHAR
#include <cfg/compiler.h> // uintXX_t; STATIC_ASSERT
#include <cpu/types.h> // CPU_BITS_PER_CHAR
+#include <algo/rotating_hash.h>
typedef uint16_t fill_t;
typedef fill_t pgaddr_t;
typedef uint16_t fill_t;
typedef fill_t pgaddr_t;
@@
-50,7
+51,7
@@
typedef uint16_t pgoff_t;
typedef pgoff_t mark_t;
typedef uint8_t inode_t;
typedef uint8_t seq_t;
typedef pgoff_t mark_t;
typedef uint8_t inode_t;
typedef uint8_t seq_t;
-typedef
uint16
_t fcs_t;
+typedef
rotating
_t fcs_t;
/**
* BattFS page header.
/**
* BattFS page header.
@@
-65,12
+66,30
@@
typedef struct BattFsPageHeader
pgoff_t pgoff; ///< Page offset inside file.
fill_t fill; ///< Filled bytes in page.
uint16_t rfu; ///< Reserved for future use, 0xFFFF for now.
pgoff_t pgoff; ///< Page offset inside file.
fill_t fill; ///< Filled bytes in page.
uint16_t rfu; ///< Reserved for future use, 0xFFFF for now.
- fcs_t fcs; ///< FCS (Frame Check Sequence) of the page header.
-} BattFsPageHeader;
+ /**
+ * FCS (Frame Check Sequence) of the page header.
+ * \note This field must be the last one!
+ * This is needed because if the page is only partially
+ * written, we can use this to detect it.
+ */
+ fcs_t fcs;
+} BattFsPageHeader;
/* Ensure structure has no padding added */
STATIC_ASSERT(sizeof(BattFsPageHeader) == 12);
/* Ensure structure has no padding added */
STATIC_ASSERT(sizeof(BattFsPageHeader) == 12);
+
+/**
+ * Mark for valid pages.
+ * Simply set to 1 all field bits.
+ */
+#define MARK_PAGE_VALID ((1 << (CPU_BITS_PER_CHAR * sizeof(mark_t))) - 1)
+
+/**
+ * Max number of files.
+ */
+#define BATTFS_MAX_FILES (1 << (CPU_BITS_PER_CHAR * sizeof(inode_t)))
+
/* Fwd decl */
struct BattFsSuper;
/* Fwd decl */
struct BattFsSuper;
@@
-79,6
+98,11
@@
struct BattFsSuper;
*/
typedef uint16_t pgcnt_t;
*/
typedef uint16_t pgcnt_t;
+/**
+ * Sentinel used to keep trace of unset pages in disk->pag_array.
+ */
+#define PAGE_UNSET_SENTINEL ((1 << (CPU_BITS_PER_CHAR * sizeof(pgcnt_t))) - 1)
+
/**
* Type interface for disk init function.
* \return true if all is ok, false otherwise.
/**
* Type interface for disk init function.
* \return true if all is ok, false otherwise.
@@
-140,7
+164,10
@@
typedef struct BattFsSuper
* Is used by the filesystem to represent
* the entire disk in memory.
*/
* Is used by the filesystem to represent
* the entire disk in memory.
*/
- pgcnt_t *page_array;
+ pgcnt_t *page_array;
+
+ mark_t min_free; ///< Lowest sequence number of free page
+ mark_t max_free; ///< Highest sequence number of free page
disk_size_t disk_size; ///< Size of the disk, in bytes (page_count * page_size).
disk_size_t free_bytes; ///< Free space on the disk.
disk_size_t disk_size; ///< Size of the disk, in bytes (page_count * page_size).
disk_size_t free_bytes; ///< Free space on the disk.
@@
-148,11
+175,6
@@
typedef struct BattFsSuper
/* TODO add other fields. */
} BattFsSuper;
/* TODO add other fields. */
} BattFsSuper;
-/**
- * Initialize and mount disk described by
- * \a d.
- * \return false on errors, true otherwise.
- */
bool battfs_init(struct BattFsSuper *d);
#endif /* FS_BATTFS_H */
bool battfs_init(struct BattFsSuper *d);
#endif /* FS_BATTFS_H */