1 uio.h |
1 /*- |
|
2 * Copyright (c) 1982, 1986, 1993, 1994 |
|
3 * The Regents of the University of California. All rights reserved. |
|
4 * |
|
5 * Redistribution and use in source and binary forms, with or without |
|
6 * modification, are permitted provided that the following conditions |
|
7 * are met: |
|
8 * 1. Redistributions of source code must retain the above copyright |
|
9 * notice, this list of conditions and the following disclaimer. |
|
10 * 2. Redistributions in binary form must reproduce the above copyright |
|
11 * notice, this list of conditions and the following disclaimer in the |
|
12 * documentation and/or other materials provided with the distribution. |
|
13 * 4. Neither the name of the University nor the names of its contributors |
|
14 * may be used to endorse or promote products derived from this software |
|
15 * without specific prior written permission. |
|
16 * |
|
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
|
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
|
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
|
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
|
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
|
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
27 * SUCH DAMAGE. |
|
28 * © Portions copyright (c) 2007 Symbian Software Ltd. All rights reserved. |
|
29 * @(#)uio.h 8.5 (Berkeley) 2/22/94 |
|
30 * $FreeBSD: src/sys/sys/uio.h,v 1.39 2005/07/07 18:17:55 jhb Exp $ |
|
31 */ |
|
32 |
|
33 #ifndef _SYS_UIO_H_ |
|
34 #define _SYS_UIO_H_ |
|
35 |
|
36 #include <sys/cdefs.h> |
|
37 #include <sys/_types.h> |
|
38 #include <sys/_iovec.h> |
|
39 |
|
40 #ifndef _SSIZE_T_DECLARED |
|
41 typedef __ssize_t ssize_t; |
|
42 #define _SSIZE_T_DECLARED |
|
43 #endif |
|
44 |
|
45 #ifndef _OFF_T_DECLARED |
|
46 typedef __off_t off_t; |
|
47 #define _OFF_T_DECLARED |
|
48 #endif |
|
49 |
|
50 #if __BSD_VISIBLE |
|
51 enum uio_rw { UIO_READ, UIO_WRITE }; |
|
52 |
|
53 /* Segment flag values. */ |
|
54 enum uio_seg { |
|
55 UIO_USERSPACE, /* from user data space */ |
|
56 UIO_SYSSPACE, /* from system space */ |
|
57 UIO_NOCOPY /* don't copy, already in object */ |
|
58 }; |
|
59 #endif |
|
60 |
|
61 #ifdef _KERNEL |
|
62 |
|
63 struct uio { |
|
64 struct iovec *uio_iov; |
|
65 int uio_iovcnt; |
|
66 off_t uio_offset; |
|
67 int uio_resid; |
|
68 enum uio_seg uio_segflg; |
|
69 enum uio_rw uio_rw; |
|
70 struct thread *uio_td; |
|
71 }; |
|
72 |
|
73 /* |
|
74 * Limits |
|
75 * |
|
76 * N.B.: UIO_MAXIOV must be no less than IOV_MAX from <sys/syslimits.h> |
|
77 * which in turn must be no less than _XOPEN_IOV_MAX from <limits.h>. If |
|
78 * we ever make this tunable (probably pointless), then IOV_MAX should be |
|
79 * removed from <sys/syslimits.h> and applications would be expected to use |
|
80 * sysconf(3) to find out the correct value, or else assume the worst |
|
81 * (_XOPEN_IOV_MAX). Perhaps UIO_MAXIOV should be simply defined as |
|
82 * IOV_MAX. |
|
83 */ |
|
84 #define UIO_MAXIOV 1024 /* max 1K of iov's */ |
|
85 |
|
86 struct vm_object; |
|
87 struct vm_page; |
|
88 |
|
89 #else /* !_KERNEL */ |
|
90 |
|
91 __BEGIN_DECLS |
|
92 IMPORT_C |
|
93 ssize_t readv(int, const struct iovec *, int); |
|
94 IMPORT_C |
|
95 ssize_t writev(int, const struct iovec *, int); |
|
96 __END_DECLS |
|
97 |
|
98 #endif /* _KERNEL */ |
|
99 |
|
100 #endif /* !_SYS_UIO_H_ */ |