Lines Matching +full:data +full:- +full:out
1 // SPDX-License-Identifier: GPL-2.0
3 * crc32.c - CRC32 and CRC32C using LoongArch crc* instructions
5 * Module based on mips/crypto/crc32-mips.c
9 * Copyright (C) 2020-2023 Loongson Technology Corporation Limited
15 #include <asm/cpu-features.h>
39 len -= sizeof(u64); in crc32_loongarch_hw()
47 len -= sizeof(u32); in crc32_loongarch_hw()
75 len -= sizeof(u64); in crc32c_loongarch_hw()
83 len -= sizeof(u32); in crc32c_loongarch_hw()
115 struct chksum_ctx *mctx = crypto_shash_ctx(desc->tfm); in chksum_init()
118 ctx->crc = mctx->key; in chksum_init()
131 if (keylen != sizeof(mctx->key)) in chksum_setkey()
132 return -EINVAL; in chksum_setkey()
134 mctx->key = get_unaligned_le32(key); in chksum_setkey()
139 static int chksum_update(struct shash_desc *desc, const u8 *data, unsigned int length) in chksum_update() argument
143 ctx->crc = crc32_loongarch_hw(ctx->crc, data, length); in chksum_update()
147 static int chksumc_update(struct shash_desc *desc, const u8 *data, unsigned int length) in chksumc_update() argument
151 ctx->crc = crc32c_loongarch_hw(ctx->crc, data, length); in chksumc_update()
155 static int chksum_final(struct shash_desc *desc, u8 *out) in chksum_final() argument
159 put_unaligned_le32(ctx->crc, out); in chksum_final()
163 static int chksumc_final(struct shash_desc *desc, u8 *out) in chksumc_final() argument
167 put_unaligned_le32(~ctx->crc, out); in chksumc_final()
171 static int __chksum_finup(u32 crc, const u8 *data, unsigned int len, u8 *out) in __chksum_finup() argument
173 put_unaligned_le32(crc32_loongarch_hw(crc, data, len), out); in __chksum_finup()
177 static int __chksumc_finup(u32 crc, const u8 *data, unsigned int len, u8 *out) in __chksumc_finup() argument
179 put_unaligned_le32(~crc32c_loongarch_hw(crc, data, len), out); in __chksumc_finup()
183 static int chksum_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out) in chksum_finup() argument
187 return __chksum_finup(ctx->crc, data, len, out); in chksum_finup()
190 static int chksumc_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out) in chksumc_finup() argument
194 return __chksumc_finup(ctx->crc, data, len, out); in chksumc_finup()
197 static int chksum_digest(struct shash_desc *desc, const u8 *data, unsigned int length, u8 *out) in chksum_digest() argument
199 struct chksum_ctx *mctx = crypto_shash_ctx(desc->tfm); in chksum_digest()
201 return __chksum_finup(mctx->key, data, length, out); in chksum_digest()
204 static int chksumc_digest(struct shash_desc *desc, const u8 *data, unsigned int length, u8 *out) in chksumc_digest() argument
206 struct chksum_ctx *mctx = crypto_shash_ctx(desc->tfm); in chksumc_digest()
208 return __chksumc_finup(mctx->key, data, length, out); in chksumc_digest()
215 mctx->key = 0; in chksum_cra_init()
223 mctx->key = ~0; in chksumc_cra_init()
238 .cra_driver_name = "crc32-loongarch",
260 .cra_driver_name = "crc32c-loongarch",