Home | History | Annotate | Download | only in sys
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 
     22 /*
     23  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 #ifndef _SYS_AIOCB_H
     28 #define	_SYS_AIOCB_H
     29 
     30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     31 
     32 #include <sys/types.h>
     33 #include <sys/fcntl.h>
     34 #include <sys/siginfo.h>
     35 #include <sys/aio.h>
     36 
     37 #ifdef __cplusplus
     38 extern "C" {
     39 #endif
     40 
     41 typedef struct aiocb {
     42 	int 		aio_fildes;
     43 #if	defined(__STDC__)
     44 	volatile void	*aio_buf;		/* buffer location */
     45 #else
     46 	void		*aio_buf;		/* buffer location */
     47 #endif
     48 	size_t 		aio_nbytes;		/* length of transfer */
     49 	off_t 		aio_offset;		/* file offset */
     50 	int		aio_reqprio;		/* request priority offset */
     51 	struct sigevent	aio_sigevent;		/* notification type */
     52 	int 		aio_lio_opcode;		/* listio operation */
     53 	aio_result_t	aio_resultp;		/* results */
     54 	int 		aio_state;		/* state flag for List I/O */
     55 	int		aio__pad[1];		/* extension padding */
     56 } aiocb_t;
     57 
     58 #ifdef _LARGEFILE64_SOURCE
     59 #if	!defined(_KERNEL)
     60 typedef struct aiocb64 {
     61 	int 		aio_fildes;
     62 #if	defined(__STDC__)
     63 	volatile void	*aio_buf;		/* buffer location */
     64 #else
     65 	void		*aio_buf;		/* buffer location */
     66 #endif
     67 	size_t 		aio_nbytes;		/* length of transfer */
     68 	off64_t		aio_offset;		/* file offset */
     69 	int		aio_reqprio;		/* request priority offset */
     70 	struct sigevent	aio_sigevent;		/* notification type */
     71 	int 		aio_lio_opcode;		/* listio operation */
     72 	aio_result_t	aio_resultp;		/* results */
     73 	int 		aio_state;		/* state flag for List I/O */
     74 	int		aio__pad[1];		/* extension padding */
     75 } aiocb64_t;
     76 #else
     77 
     78 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
     79 #pragma pack(4)
     80 #endif
     81 
     82 typedef struct aiocb64_32 {
     83 	int 		aio_fildes;
     84 	caddr32_t	aio_buf;		/* buffer location */
     85 	uint32_t 	aio_nbytes;		/* length of transfer */
     86 	off64_t 	aio_offset;		/* file offset */
     87 	int		aio_reqprio;		/* request priority offset */
     88 	struct sigevent32 aio_sigevent;		/* notification type */
     89 	int 		aio_lio_opcode;		/* listio operation */
     90 	aio_result32_t	aio_resultp;		/* results */
     91 	int 		aio_state;		/* state flag for List I/O */
     92 	int		aio__pad[1];		/* extension padding */
     93 } aiocb64_32_t;
     94 
     95 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
     96 #pragma pack()
     97 #endif
     98 
     99 #endif /* !defined(_KERNEL) */
    100 #endif /* _LARGEFILE64_SOURCE */
    101 
    102 #ifdef	_SYSCALL32
    103 typedef struct aiocb32 {
    104 	int 		aio_fildes;
    105 	caddr32_t	aio_buf;		/* buffer location */
    106 	uint32_t	aio_nbytes;		/* length of transfer */
    107 	uint32_t	aio_offset;		/* file offset */
    108 	int		aio_reqprio;		/* request priority offset */
    109 	struct sigevent32 aio_sigevent;		/* notification type */
    110 	int 		aio_lio_opcode;		/* listio operation */
    111 	aio_result32_t	aio_resultp;		/* results */
    112 	int 		aio_state;		/* state flag for List I/O */
    113 	int		aio__pad[1];		/* extension padding */
    114 } aiocb32_t;
    115 
    116 #endif /* _SYSCALL32 */
    117 /*
    118  * return values for aiocancel()
    119  */
    120 #define	AIO_CANCELED	0
    121 #define	AIO_ALLDONE	1
    122 #define	AIO_NOTCANCELED	2
    123 
    124 /*
    125  * mode values for lio_listio()
    126  */
    127 #define	LIO_NOWAIT	0
    128 #define	LIO_WAIT	1
    129 
    130 
    131 /*
    132  * listio operation codes
    133  *
    134  * LIO_READ and LIO_WRITE were previously defined as FREAD and FWRITE as
    135  * defined in <sys/file.h>.  However, inclusion of <sys/file.h> results
    136  * in X/Open namespace pollution and as such is no longer included in
    137  * this header.  The values of LIO_READ and LIO_WRITE must be identical
    138  * to the values of FREAD and FWRITE in <sys/file.h>.  Any change to one
    139  * will require a change to the other.
    140  */
    141 
    142 #define	LIO_NOP		0
    143 #define	LIO_READ	0x01	/* Must match value of FREAD in sys/file.h */
    144 #define	LIO_WRITE	0x02	/* Must match value of FWRITE in sys/file.h */
    145 
    146 #ifdef	__cplusplus
    147 }
    148 #endif
    149 
    150 #endif /* _SYS_AIOCB_H */
    151