xref: /OK3568_Linux_fs/kernel/drivers/crypto/rockchip/cryptodev_linux/zc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */
2*4882a593Smuzhiyun 
3*4882a593Smuzhiyun #ifndef ZC_H
4*4882a593Smuzhiyun # define ZC_H
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun /* For zero copy */
7*4882a593Smuzhiyun int __cryptodev_get_userbuf(uint8_t __user *addr, uint32_t len, int write,
8*4882a593Smuzhiyun 		unsigned int pgcount, struct page **pg, struct scatterlist *sg,
9*4882a593Smuzhiyun 		struct task_struct *task, struct mm_struct *mm);
10*4882a593Smuzhiyun void cryptodev_release_user_pages(struct csession *ses);
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun int cryptodev_get_userbuf(struct csession *ses,
13*4882a593Smuzhiyun                 void *__user src, unsigned int src_len,
14*4882a593Smuzhiyun                 void *__user dst, unsigned int dst_len,
15*4882a593Smuzhiyun                 struct task_struct *task, struct mm_struct *mm,
16*4882a593Smuzhiyun                 struct scatterlist **src_sg,
17*4882a593Smuzhiyun                 struct scatterlist **dst_sg);
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun /* buflen ? (last page - first page + 1) : 0 */
20*4882a593Smuzhiyun #define PAGECOUNT(buf, buflen) ((buflen) \
21*4882a593Smuzhiyun 	? ((((unsigned long)(buf + buflen - 1)) >> PAGE_SHIFT) - \
22*4882a593Smuzhiyun 	   (((unsigned long)(buf             )) >> PAGE_SHIFT) + 1) \
23*4882a593Smuzhiyun 	: 0)
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define DEFAULT_PREALLOC_PAGES 32
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #endif
28