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 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 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 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 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 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