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.xistatic __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