2 * Copyright (c) 2010 Department of Software Engineering,
3 * University of Szeged, Hungary
4 * Copyright (C) 2009 Ferenc Havasi <havasi@inf.u-szeged.hu>
5 * Copyright (C) 2009 Zoltan Sogor <weth@inf.u-szeged.hu>
6 * Copyright (C) 2009 David Tengeri <dtengeri@inf.u-szeged.hu>
7 * Copyright (C) 2010 Adam Hoka <ahoka@NetBSD.org>
10 * This code is derived from software contributed to The NetBSD Foundation
11 * by the Department of Software Engineering, University of Szeged, Hungary
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 #ifndef __CHFS_MEDIA_H__
36 #define __CHFS_MEDIA_H__
40 typedef uint16_t le16
;
41 typedef uint32_t le32
;
42 typedef uint64_t le64
;
43 #endif /* _LE_TYPES */
47 CHFS_NODETYPE_VNODE
= 1, /* vnode information */
48 CHFS_NODETYPE_DATA
, /* data node */
49 CHFS_NODETYPE_DIRENT
, /* directory enrty */
50 CHFS_NODETYPE_PADDING
, /* padding node */
53 #define CHFS_NODE_HDR_SIZE sizeof(struct chfs_flash_node_hdr)
56 * Max size we have to read to get all info.
57 * It is max size of chfs_flash_dirent_node with max name length.
59 #define CHFS_MAX_NODE_SIZE 299
61 /* This will identify CHfs nodes */
62 #define CHFS_FS_MAGIC_BITMASK 0x4AF1
65 * struct chfs_flash_node_hdr -
66 * node header, its members are same for all nodes, used at scan
68 struct chfs_flash_node_hdr
70 le16 magic
; /* filesystem magic */
71 le16 type
; /* node type */
72 le32 length
; /* length of node */
73 le32 hdr_crc
; /* crc of the first 3 fields */
76 /* struct chfs_flash_vnode - vnode informations stored on flash */
77 struct chfs_flash_vnode
79 le16 magic
; /* filesystem magic */
80 le16 type
; /* node type (should be CHFS_NODETYPE_VNODE) */
81 le32 length
; /* length of node */
82 le32 hdr_crc
; /* crc of the first 3 fields */
83 le64 vno
; /* vnode number */
84 le64 version
; /* version of node */
85 le32 uid
; /* owner of file */
86 le32 gid
; /* group of file */
87 le32 mode
; /* permission of vnode */
88 le32 dn_size
; /* size of written data */
89 le32 atime
; /* last access time */
90 le32 mtime
; /* last modification time */
91 le32 ctime
; /* change time */
92 le32 dsize
; /* NOT USED, backward compatibility */
93 le32 node_crc
; /* crc of all the previous fields */
96 /* struct chfs_flash_data_node - data stored on flash */
97 struct chfs_flash_data_node
99 le16 magic
; /* filesystem magic */
100 le16 type
; /* node type (should be CHFS_NODETYPE_DATA) */
101 le32 length
; /* length of vnode with data */
102 le32 hdr_crc
; /* crc of the first 3 fields */
103 le64 vno
; /* vnode number */
104 le64 version
; /* version of node */
105 le64 offset
; /* offset in the file */
106 le32 data_length
; /* length of data */
107 le32 data_crc
; /* crc of data*/
108 le32 node_crc
; /* crc of full node */
109 uint8_t data
[0]; /* data */
113 * struct chfs_flash_dirent_node -
114 * directory entry information stored on flash
116 struct chfs_flash_dirent_node
118 le16 magic
; /* filesystem magic */
119 le16 type
; /* node type (should be CHFS_NODETYPE_DIRENT) */
120 le32 length
; /* length of node with name */
121 le32 hdr_crc
; /* crc of the first 3 fields */
122 le64 vno
; /* vnode number */
123 le64 pvno
; /* parent's vnode number */
124 le64 version
; /* version of node */
126 uint8_t nsize
; /* length of name */
127 uint8_t dtype
; /* file type */
128 uint8_t unused
[2]; /* just for padding */
129 le32 name_crc
; /* crc of name */
130 le32 node_crc
; /* crc of full node */
131 uint8_t name
[0]; /* name of directory entry */
134 /* struct chfs_flash_padding_node - spaceholder node on flash */
135 struct chfs_flash_padding_node
137 le16 magic
; /* filesystem magic */
138 le16 type
; /* node type (should be CHFS_NODETYPE_PADDING )*/
139 le32 length
; /* length of node */
140 le32 hdr_crc
; /* crc of the first 3 fields */
143 #endif /* __CHFS_MEDIA_H__ */