1/*	$NetBSD: uio.h,v 1.36 2011/07/27 13:20:07 uebayasi Exp $	*/
  2
  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 */
 33
 34#ifndef _SYS_UIO_H_
 35#define	_SYS_UIO_H_
 36
 37#ifdef _KERNEL
 38#ifndef __UIO_EXPOSE
 39#define __UIO_EXPOSE
 40#endif
 41#endif
 42
 43#include <machine/ansi.h>
 44#include <sys/featuretest.h>
 45
 46#ifdef	_BSD_SIZE_T_
 47typedef	_BSD_SIZE_T_	size_t;
 48#undef	_BSD_SIZE_T_
 49#endif
 50
 51#ifdef	_BSD_SSIZE_T_
 52typedef	_BSD_SSIZE_T_	ssize_t;
 53#undef	_BSD_SSIZE_T_
 54#endif
 55
 56struct iovec {
 57	void	*iov_base;	/* Base address. */
 58	size_t	 iov_len;	/* Length. */
 59};
 60
 61#if defined(_NETBSD_SOURCE)
 62#include <sys/ansi.h>
 63
 64#ifndef	off_t
 65typedef	__off_t		off_t;	/* file offset */
 66#define	off_t		__off_t
 67#endif
 68
 69enum	uio_rw { UIO_READ, UIO_WRITE };
 70
 71/* Segment flag values. */
 72enum uio_seg {
 73	UIO_USERSPACE,		/* from user data space */
 74	UIO_SYSSPACE		/* from system space */
 75};
 76
 77#ifdef __UIO_EXPOSE
 78
 79struct vmspace;
 80
 81struct uio {
 82	struct	iovec *uio_iov;	/* pointer to array of iovecs */
 83	int	uio_iovcnt;	/* number of iovecs in array */
 84	off_t	uio_offset;	/* offset into file this uio corresponds to */
 85	size_t	uio_resid;	/* residual i/o count */
 86	enum	uio_rw uio_rw;	/* see above */
 87	struct	vmspace *uio_vmspace;
 88};
 89#define	UIO_SETUP_SYSSPACE(uio)	uio_setup_sysspace(uio)
 90
 91#endif /* __UIO_EXPOSE */
 92
 93/*
 94 * Limits
 95 */
 96/* Deprecated: use IOV_MAX from <limits.h> instead. */
 97#define UIO_MAXIOV	1024		/* max 1K of iov's */
 98#endif /* _NETBSD_SOURCE */
 99
100#ifdef _KERNEL
101
102/* 8 on stack, more will be dynamically allocated. */
103#define UIO_SMALLIOV	8
104
105void uio_setup_sysspace(struct uio *);
106#endif
107
108#ifndef	_KERNEL
109#include <sys/cdefs.h>
110
111__BEGIN_DECLS
112#if defined(_NETBSD_SOURCE)
113ssize_t preadv(int, const struct iovec *, int, off_t);
114ssize_t pwritev(int, const struct iovec *, int, off_t);
115#endif /* _NETBSD_SOURCE */
116ssize_t	readv(int, const struct iovec *, int);
117ssize_t	writev(int, const struct iovec *, int);
118__END_DECLS
119#else
120int ureadc(int, struct uio *);
121#endif /* !_KERNEL */
122
123#endif /* !_SYS_UIO_H_ */