xref: /OK3568_Linux_fs/kernel/drivers/crypto/bcm/util.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright 2016 Broadcom
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef _UTIL_H
7*4882a593Smuzhiyun #define _UTIL_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/kernel.h>
10*4882a593Smuzhiyun #include <linux/delay.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include "spu.h"
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun extern int flow_debug_logging;
15*4882a593Smuzhiyun extern int packet_debug_logging;
16*4882a593Smuzhiyun extern int debug_logging_sleep;
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifdef DEBUG
19*4882a593Smuzhiyun #define flow_log(...)	                \
20*4882a593Smuzhiyun 	do {	                              \
21*4882a593Smuzhiyun 		if (flow_debug_logging) {	        \
22*4882a593Smuzhiyun 			printk(__VA_ARGS__);	          \
23*4882a593Smuzhiyun 			if (debug_logging_sleep)	      \
24*4882a593Smuzhiyun 				msleep(debug_logging_sleep);	\
25*4882a593Smuzhiyun 		}	                                \
26*4882a593Smuzhiyun 	} while (0)
27*4882a593Smuzhiyun #define flow_dump(msg, var, var_len)	   \
28*4882a593Smuzhiyun 	do {	                                 \
29*4882a593Smuzhiyun 		if (flow_debug_logging) {	           \
30*4882a593Smuzhiyun 			print_hex_dump(KERN_ALERT, msg, DUMP_PREFIX_NONE,  \
31*4882a593Smuzhiyun 					16, 1, var, var_len, false); \
32*4882a593Smuzhiyun 				if (debug_logging_sleep)	       \
33*4882a593Smuzhiyun 					msleep(debug_logging_sleep);   \
34*4882a593Smuzhiyun 		}                                    \
35*4882a593Smuzhiyun 	} while (0)
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define packet_log(...)               \
38*4882a593Smuzhiyun 	do {                                \
39*4882a593Smuzhiyun 		if (packet_debug_logging) {       \
40*4882a593Smuzhiyun 			printk(__VA_ARGS__);            \
41*4882a593Smuzhiyun 			if (debug_logging_sleep)        \
42*4882a593Smuzhiyun 				msleep(debug_logging_sleep);  \
43*4882a593Smuzhiyun 		}                                 \
44*4882a593Smuzhiyun 	} while (0)
45*4882a593Smuzhiyun #define packet_dump(msg, var, var_len)   \
46*4882a593Smuzhiyun 	do {                                   \
47*4882a593Smuzhiyun 		if (packet_debug_logging) {          \
48*4882a593Smuzhiyun 			print_hex_dump(KERN_ALERT, msg, DUMP_PREFIX_NONE,  \
49*4882a593Smuzhiyun 					16, 1, var, var_len, false); \
50*4882a593Smuzhiyun 			if (debug_logging_sleep)           \
51*4882a593Smuzhiyun 				msleep(debug_logging_sleep);     \
52*4882a593Smuzhiyun 		}                                    \
53*4882a593Smuzhiyun 	} while (0)
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun void __dump_sg(struct scatterlist *sg, unsigned int skip, unsigned int len);
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define dump_sg(sg, skip, len)     __dump_sg(sg, skip, len)
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #else /* !DEBUG_ON */
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #define flow_log(...) do {} while (0)
62*4882a593Smuzhiyun #define flow_dump(msg, var, var_len) do {} while (0)
63*4882a593Smuzhiyun #define packet_log(...) do {} while (0)
64*4882a593Smuzhiyun #define packet_dump(msg, var, var_len) do {} while (0)
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun #define dump_sg(sg, skip, len) do {} while (0)
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #endif /* DEBUG_ON */
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun int spu_sg_at_offset(struct scatterlist *sg, unsigned int skip,
71*4882a593Smuzhiyun 		     struct scatterlist **sge, unsigned int *sge_offset);
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /* Copy sg data, from skip, length len, to dest */
74*4882a593Smuzhiyun void sg_copy_part_to_buf(struct scatterlist *src, u8 *dest,
75*4882a593Smuzhiyun 			 unsigned int len, unsigned int skip);
76*4882a593Smuzhiyun /* Copy src into scatterlist from offset, length len */
77*4882a593Smuzhiyun void sg_copy_part_from_buf(struct scatterlist *dest, u8 *src,
78*4882a593Smuzhiyun 			   unsigned int len, unsigned int skip);
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun int spu_sg_count(struct scatterlist *sg_list, unsigned int skip, int nbytes);
81*4882a593Smuzhiyun u32 spu_msg_sg_add(struct scatterlist **to_sg,
82*4882a593Smuzhiyun 		   struct scatterlist **from_sg, u32 *skip,
83*4882a593Smuzhiyun 		   u8 from_nents, u32 tot_len);
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun void add_to_ctr(u8 *ctr_pos, unsigned int increment);
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* produce a message digest from data of length n bytes */
88*4882a593Smuzhiyun int do_shash(unsigned char *name, unsigned char *result,
89*4882a593Smuzhiyun 	     const u8 *data1, unsigned int data1_len,
90*4882a593Smuzhiyun 	     const u8 *data2, unsigned int data2_len,
91*4882a593Smuzhiyun 	     const u8 *key, unsigned int key_len);
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun char *spu_alg_name(enum spu_cipher_alg alg, enum spu_cipher_mode mode);
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun void spu_setup_debugfs(void);
96*4882a593Smuzhiyun void spu_free_debugfs(void);
97*4882a593Smuzhiyun void format_value_ccm(unsigned int val, u8 *buf, u8 len);
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun #endif
100