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