xref: /openbmc/u-boot/fs/jffs2/jffs2_private.h (revision 7c0e5d86)
15a2543c9Swdenk #ifndef jffs2_private_h
25a2543c9Swdenk #define jffs2_private_h
35a2543c9Swdenk 
45a2543c9Swdenk #include <jffs2/jffs2.h>
55a2543c9Swdenk 
606d01dbeSwdenk 
75a2543c9Swdenk struct b_node {
85a2543c9Swdenk 	u32 offset;
95a2543c9Swdenk 	struct b_node *next;
10142a80ffSIlya Yanok 	enum { CRC_UNKNOWN = 0, CRC_OK, CRC_BAD } datacrc;
115a2543c9Swdenk };
125a2543c9Swdenk 
1306d01dbeSwdenk struct b_list {
1406d01dbeSwdenk 	struct b_node *listTail;
1506d01dbeSwdenk 	struct b_node *listHead;
166d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
1706d01dbeSwdenk 	struct b_node *listLast;
1806d01dbeSwdenk 	int (*listCompare)(struct b_node *new, struct b_node *node);
1906d01dbeSwdenk 	u32 listLoops;
2006d01dbeSwdenk #endif
2106d01dbeSwdenk 	u32 listCount;
2206d01dbeSwdenk 	struct mem_block *listMemBase;
2306d01dbeSwdenk };
2406d01dbeSwdenk 
255a2543c9Swdenk struct b_lists {
2606d01dbeSwdenk 	struct b_list dir;
2706d01dbeSwdenk 	struct b_list frag;
2870741004SIlya Yanok 	void *readbuf;
295a2543c9Swdenk };
3006d01dbeSwdenk 
315a2543c9Swdenk struct b_compr_info {
325a2543c9Swdenk 	u32 num_frags;
335a2543c9Swdenk 	u32 compr_sum;
345a2543c9Swdenk 	u32 decompr_sum;
355a2543c9Swdenk };
365a2543c9Swdenk 
375a2543c9Swdenk struct b_jffs2_info {
385a2543c9Swdenk 	struct b_compr_info compr_info[JFFS2_NUM_COMPR];
395a2543c9Swdenk };
405a2543c9Swdenk 
415a2543c9Swdenk static inline int
hdr_crc(struct jffs2_unknown_node * node)425a2543c9Swdenk hdr_crc(struct jffs2_unknown_node *node)
435a2543c9Swdenk {
4406d01dbeSwdenk #if 1
455a2543c9Swdenk 	u32 crc = crc32_no_comp(0, (unsigned char *)node, sizeof(struct jffs2_unknown_node) - 4);
4606d01dbeSwdenk #else
4706d01dbeSwdenk 	/* what's the semantics of this? why is this here? */
4806d01dbeSwdenk 	u32 crc = crc32_no_comp(~0, (unsigned char *)node, sizeof(struct jffs2_unknown_node) - 4);
495a2543c9Swdenk 
5006d01dbeSwdenk 	crc ^= ~0;
5106d01dbeSwdenk #endif
525a2543c9Swdenk 	if (node->hdr_crc != crc) {
535a2543c9Swdenk 		return 0;
545a2543c9Swdenk 	} else {
555a2543c9Swdenk 		return 1;
565a2543c9Swdenk 	}
575a2543c9Swdenk }
585a2543c9Swdenk 
595a2543c9Swdenk static inline int
dirent_crc(struct jffs2_raw_dirent * node)605a2543c9Swdenk dirent_crc(struct jffs2_raw_dirent *node)
615a2543c9Swdenk {
625a2543c9Swdenk 	if (node->node_crc != crc32_no_comp(0, (unsigned char *)node, sizeof(struct jffs2_raw_dirent) - 8)) {
635a2543c9Swdenk 		return 0;
645a2543c9Swdenk 	} else {
655a2543c9Swdenk 		return 1;
665a2543c9Swdenk 	}
675a2543c9Swdenk }
685a2543c9Swdenk 
695a2543c9Swdenk static inline int
dirent_name_crc(struct jffs2_raw_dirent * node)705a2543c9Swdenk dirent_name_crc(struct jffs2_raw_dirent *node)
715a2543c9Swdenk {
725a2543c9Swdenk 	if (node->name_crc != crc32_no_comp(0, (unsigned char *)&(node->name), node->nsize)) {
735a2543c9Swdenk 		return 0;
745a2543c9Swdenk 	} else {
755a2543c9Swdenk 		return 1;
765a2543c9Swdenk 	}
775a2543c9Swdenk }
785a2543c9Swdenk 
795a2543c9Swdenk static inline int
inode_crc(struct jffs2_raw_inode * node)805a2543c9Swdenk inode_crc(struct jffs2_raw_inode *node)
815a2543c9Swdenk {
825a2543c9Swdenk 	if (node->node_crc != crc32_no_comp(0, (unsigned char *)node, sizeof(struct jffs2_raw_inode) - 8)) {
835a2543c9Swdenk 		return 0;
845a2543c9Swdenk 	} else {
855a2543c9Swdenk 		return 1;
865a2543c9Swdenk 	}
875a2543c9Swdenk }
885a2543c9Swdenk 
8974f92e6aSWolfgang Denk static inline int
data_crc(struct jffs2_raw_inode * node)9074f92e6aSWolfgang Denk data_crc(struct jffs2_raw_inode *node)
9174f92e6aSWolfgang Denk {
9274f92e6aSWolfgang Denk 	if (node->data_crc != crc32_no_comp(0, (unsigned char *)
9374f92e6aSWolfgang Denk 					    ((int) &node->node_crc + sizeof (node->node_crc)),
9474f92e6aSWolfgang Denk 					     node->csize)) {
9574f92e6aSWolfgang Denk 		return 0;
9674f92e6aSWolfgang Denk 	} else {
9774f92e6aSWolfgang Denk 		return 1;
9874f92e6aSWolfgang Denk 	}
9974f92e6aSWolfgang Denk }
10074f92e6aSWolfgang Denk 
101*10d3ac34SMark Tomlinson #if defined(CONFIG_SYS_JFFS2_SORT_FRAGMENTS)
102*10d3ac34SMark Tomlinson /* External merge sort. */
103*10d3ac34SMark Tomlinson int sort_list(struct b_list *list);
104*10d3ac34SMark Tomlinson #endif
1055a2543c9Swdenk #endif /* jffs2_private.h */
106