xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/uio.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #ifndef __LINUX_UIO_H
2*53ee8cc1Swenshuai.xi #define __LINUX_UIO_H
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi #include <linux/types.h>
5*53ee8cc1Swenshuai.xi 
6*53ee8cc1Swenshuai.xi /*
7*53ee8cc1Swenshuai.xi  *	Berkeley style UIO structures	-	Alan Cox 1994.
8*53ee8cc1Swenshuai.xi  *
9*53ee8cc1Swenshuai.xi  *		This program is free software; you can redistribute it and/or
10*53ee8cc1Swenshuai.xi  *		modify it under the terms of the GNU General Public License
11*53ee8cc1Swenshuai.xi  *		as published by the Free Software Foundation; either version
12*53ee8cc1Swenshuai.xi  *		2 of the License, or (at your option) any later version.
13*53ee8cc1Swenshuai.xi  */
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi struct iovec
16*53ee8cc1Swenshuai.xi {
17*53ee8cc1Swenshuai.xi 	void *iov_base;	/* BSD uses caddr_t (1003.1g requires void *) */
18*53ee8cc1Swenshuai.xi 	__kernel_size_t iov_len; /* Must be size_t (1003.1g) */
19*53ee8cc1Swenshuai.xi };
20*53ee8cc1Swenshuai.xi 
21*53ee8cc1Swenshuai.xi 
22*53ee8cc1Swenshuai.xi /*
23*53ee8cc1Swenshuai.xi  *	UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1)
24*53ee8cc1Swenshuai.xi  */
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi #define UIO_FASTIOV	8
27*53ee8cc1Swenshuai.xi #define UIO_MAXIOV	1024
28*53ee8cc1Swenshuai.xi 
29*53ee8cc1Swenshuai.xi /*
30*53ee8cc1Swenshuai.xi  * Total number of bytes covered by an iovec.
31*53ee8cc1Swenshuai.xi  *
32*53ee8cc1Swenshuai.xi  * NOTE that it is not safe to use this function until all the iovec's
33*53ee8cc1Swenshuai.xi  * segment lengths have been validated.  Because the individual lengths can
34*53ee8cc1Swenshuai.xi  * overflow a size_t when added together.
35*53ee8cc1Swenshuai.xi  */
iov_length(const struct iovec * iov,unsigned long nr_segs)36*53ee8cc1Swenshuai.xi static __inline__ size_t iov_length(const struct iovec *iov, unsigned long nr_segs)
37*53ee8cc1Swenshuai.xi {
38*53ee8cc1Swenshuai.xi 	unsigned long seg;
39*53ee8cc1Swenshuai.xi 	size_t ret = 0;
40*53ee8cc1Swenshuai.xi 
41*53ee8cc1Swenshuai.xi 	for (seg = 0; seg < nr_segs; seg++)
42*53ee8cc1Swenshuai.xi 		ret += iov[seg].iov_len;
43*53ee8cc1Swenshuai.xi 	return ret;
44*53ee8cc1Swenshuai.xi }
45*53ee8cc1Swenshuai.xi 
46*53ee8cc1Swenshuai.xi unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to);
47*53ee8cc1Swenshuai.xi 
48*53ee8cc1Swenshuai.xi #endif
49