Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.9.4.
 1#include <linux/uaccess.h>
 2#include <linux/export.h>
 3#include <linux/uio.h>
 4
 5/*
 6 *	Copy iovec to kernel. Returns -EFAULT on error.
 7 *
 8 *	Note: this modifies the original iovec.
 9 */
10
11int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len)
12{
13	while (len > 0) {
14		if (iov->iov_len) {
15			int copy = min_t(unsigned int, len, iov->iov_len);
16			if (copy_from_user(kdata, iov->iov_base, copy))
17				return -EFAULT;
18			len -= copy;
19			kdata += copy;
20			iov->iov_base += copy;
21			iov->iov_len -= copy;
22		}
23		iov++;
24	}
25
26	return 0;
27}
28EXPORT_SYMBOL(memcpy_fromiovec);
29
30/*
31 *	Copy kernel to iovec. Returns -EFAULT on error.
32 *
33 *	Note: this modifies the original iovec.
34 */
35
36int memcpy_toiovec(struct iovec *iov, unsigned char *kdata, int len)
37{
38	while (len > 0) {
39		if (iov->iov_len) {
40			int copy = min_t(unsigned int, iov->iov_len, len);
41			if (copy_to_user(iov->iov_base, kdata, copy))
42				return -EFAULT;
43			kdata += copy;
44			len -= copy;
45			iov->iov_len -= copy;
46			iov->iov_base += copy;
47		}
48		iov++;
49	}
50
51	return 0;
52}
53EXPORT_SYMBOL(memcpy_toiovec);