]> git.proxmox.com Git - mirror_spl.git/blame - include/sys/uio.h
Add IMPLY() and EQUIV() macros
[mirror_spl.git] / include / sys / uio.h
CommitLineData
716154c5
BB
1/*****************************************************************************\
2 * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
3 * Copyright (C) 2007 The Regents of the University of California.
4 * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
5 * Written by Brian Behlendorf <behlendorf1@llnl.gov>.
6 * UCRL-CODE-235197
7 *
8 * This file is part of the SPL, Solaris Porting Layer.
3d6af2dd 9 * For details, see <http://zfsonlinux.org/>.
716154c5
BB
10 *
11 * The SPL is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the
13 * Free Software Foundation; either version 2 of the License, or (at your
14 * option) any later version.
15 *
16 * The SPL is distributed in the hope that it will be useful, but WITHOUT
17 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 * for more details.
20 *
21 * You should have received a copy of the GNU General Public License along
22 * with the SPL. If not, see <http://www.gnu.org/licenses/>.
23\*****************************************************************************/
24
6adf99e7 25#ifndef _SPL_UIO_H
26#define _SPL_UIO_H
27
73e540a0 28#include <linux/uio.h>
29#include <asm/uaccess.h>
30#include <sys/types.h>
31
bb1bb2c4
BB
32typedef struct iovec iovec_t;
33
4b171585 34typedef enum uio_rw {
35 UIO_READ = 0,
36 UIO_WRITE = 1,
37} uio_rw_t;
6adf99e7 38
73e540a0 39typedef enum uio_seg {
40 UIO_USERSPACE = 0,
41 UIO_SYSSPACE = 1,
bb1bb2c4 42 UIO_USERISPACE= 2,
73e540a0 43} uio_seg_t;
44
45typedef struct uio {
bb1bb2c4
BB
46 struct iovec *uio_iov;
47 int uio_iovcnt;
48 offset_t uio_loffset;
49 uio_seg_t uio_segflg;
50 uint16_t uio_fmode;
51 uint16_t uio_extflg;
52 offset_t uio_limit;
53 ssize_t uio_resid;
73e540a0 54} uio_t;
55
56typedef struct aio_req {
bb1bb2c4 57 uio_t *aio_uio;
73e540a0 58 void *aio_private;
59} aio_req_t;
60
bb1bb2c4
BB
61typedef enum xuio_type {
62 UIOTYPE_ASYNCIO,
63 UIOTYPE_ZEROCOPY,
64} xuio_type_t;
65
66
67#define UIOA_IOV_MAX 16
68
69typedef struct uioa_page_s {
70 int uioa_pfncnt;
71 void **uioa_ppp;
72 caddr_t uioa_base;
73 size_t uioa_len;
74} uioa_page_t;
75
76typedef struct xuio {
77 uio_t xu_uio;
78 enum xuio_type xu_type;
79 union {
80 struct {
81 uint32_t xu_a_state;
82 ssize_t xu_a_mbytes;
83 uioa_page_t *xu_a_lcur;
84 void **xu_a_lppp;
85 void *xu_a_hwst[4];
86 uioa_page_t xu_a_locked[UIOA_IOV_MAX];
87 } xu_aio;
88
89 struct {
90 int xu_zc_rw;
91 void *xu_zc_priv;
92 } xu_zc;
93 } xu_ext;
94} xuio_t;
95
96#define XUIO_XUZC_PRIV(xuio) xuio->xu_ext.xu_zc.xu_zc_priv
97#define XUIO_XUZC_RW(xuio) xuio->xu_ext.xu_zc.xu_zc_rw
98
6adf99e7 99#endif /* SPL_UIO_H */