xref: /OK3568_Linux_fs/kernel/drivers/crypto/rockchip/rk_crypto_utils.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 /* Copyright (c) 2022 Rockchip Electronics Co. Ltd. */
4 
5 #ifndef __RK_CRYPTO_UTILS_H__
6 #define __RK_CRYPTO_UTILS_H__
7 
8 #include <linux/dma-mapping.h>
9 #include <linux/scatterlist.h>
10 
11 #include "rk_crypto_core.h"
12 
13 /* Default 256 x 4K = 1MByte */
14 #define RK_DEFAULT_LLI_CNT	256
15 
16 struct crypto_lli_desc {
17 	u32 src_addr;
18 	u32 src_len;
19 	u32 dst_addr;
20 	u32 dst_len;
21 	u32 user_define;
22 	u32 reserve;
23 	u32 dma_ctrl;
24 	u32 next_addr;
25 };
26 
27 struct rk_hw_desc {
28 	struct device			*dev;
29 	struct crypto_lli_desc		*lli_aad;
30 	struct crypto_lli_desc		*lli_head;
31 	struct crypto_lli_desc		*lli_tail;
32 	dma_addr_t			lli_head_dma;
33 	dma_addr_t			lli_aad_dma;
34 	u32				total;
35 };
36 
37 void rk_crypto_write_regs(struct rk_crypto_dev *rk_dev, u32 base_addr, const u8 *data, u32 bytes);
38 
39 void rk_crypto_clear_regs(struct rk_crypto_dev *rk_dev, u32 base_addr, u32 words);
40 
41 void rk_crypto_read_regs(struct rk_crypto_dev *rk_dev, u32 base_addr, u8 *data, u32 bytes);
42 
43 bool rk_crypto_check_align(struct scatterlist *src_sg, size_t src_nents,
44 			   struct scatterlist *dst_sg, size_t dst_nents,
45 			   int align_mask);
46 
47 bool rk_crypto_check_dmafd(struct scatterlist *sgl, size_t nents);
48 
49 u64 rk_crypto_hw_desc_maxlen(struct scatterlist *sg, u64 len, u32 *max_nents);
50 
51 int rk_crypto_hw_desc_alloc(struct device *dev, struct rk_hw_desc *hw_desc);
52 
53 int rk_crypto_hw_desc_init(struct rk_hw_desc *hw_desc,
54 			   struct scatterlist *src_sg,
55 			   struct scatterlist *dst_sg,
56 			   u64 len);
57 
58 void rk_crypto_hw_desc_free(struct rk_hw_desc *hw_desc);
59 
60 void rk_crypto_dump_hw_desc(struct rk_hw_desc *hw_desc);
61 
62 #endif
63 
64