xref: /openbmc/u-boot/fs/btrfs/hash.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
221a14facSMarek Behún /*
321a14facSMarek Behún  * BTRFS filesystem implementation for U-Boot
421a14facSMarek Behún  *
521a14facSMarek Behún  * 2017 Marek Behun, CZ.NIC, marek.behun@nic.cz
621a14facSMarek Behún  */
721a14facSMarek Behún 
821a14facSMarek Behún #include "btrfs.h"
921a14facSMarek Behún #include <u-boot/crc.h>
102021f083SAlberto Sánchez Molero #include <asm/unaligned.h>
1121a14facSMarek Behún 
1221a14facSMarek Behún static u32 btrfs_crc32c_table[256];
1321a14facSMarek Behún 
btrfs_hash_init(void)1421a14facSMarek Behún void btrfs_hash_init(void)
1521a14facSMarek Behún {
1621a14facSMarek Behún 	static int inited = 0;
1721a14facSMarek Behún 
1821a14facSMarek Behún 	if (!inited) {
1921a14facSMarek Behún 		crc32c_init(btrfs_crc32c_table, 0x82F63B78);
2021a14facSMarek Behún 		inited = 1;
2121a14facSMarek Behún 	}
2221a14facSMarek Behún }
2321a14facSMarek Behún 
btrfs_crc32c(u32 crc,const void * data,size_t length)2421a14facSMarek Behún u32 btrfs_crc32c(u32 crc, const void *data, size_t length)
2521a14facSMarek Behún {
2621a14facSMarek Behún 	return crc32c_cal(crc, (const char *) data, length,
2721a14facSMarek Behún 			  btrfs_crc32c_table);
2821a14facSMarek Behún }
2921a14facSMarek Behún 
btrfs_csum_data(char * data,u32 seed,size_t len)3021a14facSMarek Behún u32 btrfs_csum_data(char *data, u32 seed, size_t len)
3121a14facSMarek Behún {
3221a14facSMarek Behún 	return btrfs_crc32c(seed, data, len);
3321a14facSMarek Behún }
3421a14facSMarek Behún 
btrfs_csum_final(u32 crc,void * result)3521a14facSMarek Behún void btrfs_csum_final(u32 crc, void *result)
3621a14facSMarek Behún {
372021f083SAlberto Sánchez Molero 	put_unaligned(cpu_to_le32(~crc), (u32 *)result);
3821a14facSMarek Behún }
39