1 | /*- |
---|
2 | * SPDX-License-Identifier: BSD-3-Clause |
---|
3 | * |
---|
4 | * Copyright (c) 1982, 1986, 1993, 1994 |
---|
5 | * The Regents of the University of California. All rights reserved. |
---|
6 | * |
---|
7 | * Redistribution and use in source and binary forms, with or without |
---|
8 | * modification, are permitted provided that the following conditions |
---|
9 | * are met: |
---|
10 | * 1. Redistributions of source code must retain the above copyright |
---|
11 | * notice, this list of conditions and the following disclaimer. |
---|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
---|
13 | * notice, this list of conditions and the following disclaimer in the |
---|
14 | * documentation and/or other materials provided with the distribution. |
---|
15 | * 3. Neither the name of the University nor the names of its contributors |
---|
16 | * may be used to endorse or promote products derived from this software |
---|
17 | * without specific prior written permission. |
---|
18 | * |
---|
19 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
---|
20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
21 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
22 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
---|
23 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
24 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
---|
25 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
---|
26 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
---|
27 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
---|
28 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
29 | * SUCH DAMAGE. |
---|
30 | * |
---|
31 | * @(#)uio.h 8.5 (Berkeley) 2/22/94 |
---|
32 | * $FreeBSD: head/sys/sys/uio.h 331621 2018-03-27 15:20:03Z brooks $ |
---|
33 | */ |
---|
34 | |
---|
35 | /** |
---|
36 | * @file |
---|
37 | * |
---|
38 | * @brief This header file provides device driver I/O definitions for the |
---|
39 | * kernel space (_KERNEL is defined before including <sys/uio.h>). |
---|
40 | */ |
---|
41 | |
---|
42 | #if defined(_SYS_UIO_H_) && defined(_KERNEL) |
---|
43 | |
---|
44 | struct uio { |
---|
45 | struct iovec *uio_iov; /* scatter/gather list */ |
---|
46 | int uio_iovcnt; /* length of scatter/gather list */ |
---|
47 | off_t uio_offset; /* offset in target object */ |
---|
48 | ssize_t uio_resid; /* remaining bytes to process */ |
---|
49 | enum uio_seg uio_segflg; /* address space */ |
---|
50 | enum uio_rw uio_rw; /* operation */ |
---|
51 | struct thread *uio_td; /* owner */ |
---|
52 | }; |
---|
53 | |
---|
54 | /* |
---|
55 | * Limits |
---|
56 | * |
---|
57 | * N.B.: UIO_MAXIOV must be no less than IOV_MAX from <sys/syslimits.h> |
---|
58 | * which in turn must be no less than _XOPEN_IOV_MAX from <limits.h>. If |
---|
59 | * we ever make this tunable (probably pointless), then IOV_MAX should be |
---|
60 | * removed from <sys/syslimits.h> and applications would be expected to use |
---|
61 | * sysconf(3) to find out the correct value, or else assume the worst |
---|
62 | * (_XOPEN_IOV_MAX). Perhaps UIO_MAXIOV should be simply defined as |
---|
63 | * IOV_MAX. |
---|
64 | */ |
---|
65 | #define UIO_MAXIOV 1024 /* max 1K of iov's */ |
---|
66 | |
---|
67 | struct vm_object; |
---|
68 | struct vm_page; |
---|
69 | struct bus_dma_segment; |
---|
70 | |
---|
71 | struct uio *cloneuio(struct uio *uiop); |
---|
72 | int copyiniov(const struct iovec *iovp, u_int iovcnt, struct iovec **iov, |
---|
73 | int error); |
---|
74 | int copyinuio(const struct iovec *iovp, u_int iovcnt, struct uio **uiop); |
---|
75 | int copyout_map(struct thread *td, vm_offset_t *addr, size_t sz); |
---|
76 | int copyout_unmap(struct thread *td, vm_offset_t addr, size_t sz); |
---|
77 | int physcopyin(void *src, vm_paddr_t dst, size_t len); |
---|
78 | int physcopyout(vm_paddr_t src, void *dst, size_t len); |
---|
79 | int physcopyin_vlist(struct bus_dma_segment *src, off_t offset, |
---|
80 | vm_paddr_t dst, size_t len); |
---|
81 | int physcopyout_vlist(vm_paddr_t src, struct bus_dma_segment *dst, |
---|
82 | off_t offset, size_t len); |
---|
83 | int uiomove(void *cp, int n, struct uio *uio); |
---|
84 | int uiomove_frombuf(void *buf, int buflen, struct uio *uio); |
---|
85 | int uiomove_fromphys(struct vm_page *ma[], vm_offset_t offset, int n, |
---|
86 | struct uio *uio); |
---|
87 | int uiomove_nofault(void *cp, int n, struct uio *uio); |
---|
88 | int uiomove_object(struct vm_object *obj, off_t obj_size, struct uio *uio); |
---|
89 | |
---|
90 | #else /* !_SYS_UIO_H_ || !_KERNEL */ |
---|
91 | #error "must be included via <sys/uio.h> in kernel space" |
---|
92 | #endif /* _SYS_UIO_H_ && _KERNEL */ |
---|