]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/sys/aio_kern.h
xnu-517.tar.gz
[apple/xnu.git] / bsd / sys / aio_kern.h
diff --git a/bsd/sys/aio_kern.h b/bsd/sys/aio_kern.h
new file mode 100644 (file)
index 0000000..03555f3
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/* 
+ *     File:   sys/aio_kern.h
+ *     Author: Jerry Cottingham [jerryc@apple.com]
+ *
+ *     Header file for kernel only portion of POSIX Asynchronous IO APIs
+ *
+ */ 
+
+#include <sys/aio.h>
+
+#ifndef _SYS_AIO_KERN_H_
+#define        _SYS_AIO_KERN_H_
+
+#ifdef KERNEL
+
+struct aio_workq_entry
+{
+       TAILQ_ENTRY( aio_workq_entry )  aio_workq_link;
+       struct proc                                             *procp;         /* user proc that queued this request */
+       struct aiocb                                    *uaiocbp;       /* pointer passed in from user land */
+       struct aiocb                                    *fsyncp;        /* not NULL means this request must complete */
+                                                                                               /* before an aio_fsync call can proceed. */
+       vm_map_t                                                aio_map;        /* user land map we have a reference to */
+       ssize_t                                                 returnval;      /* return value from read / write request */    
+       int                                                             errorval;       /* error value from read / write request */
+       int                                                             flags;          
+       long                                                    group_tag;      /* identifier used to group IO requests */
+       struct aiocb                                    aiocb;          /* copy of aiocb from user land */
+};
+typedef struct aio_workq_entry aio_workq_entry;
+
+/*
+ * definitions for aio_workq_entry.flags
+ */
+#define        AIO_READ                0x00000001      
+#define        AIO_WRITE               0x00000002
+#define        AIO_FSYNC               0x00000004      /* aio_fsync with op = O_SYNC */
+#define        AIO_DSYNC               0x00000008      /* aio_fsync with op = O_DSYNC (not supported yet) */
+#define        AIO_LIO                 0x00000010      /* lio_listio generated IO */
+#define        AIO_DO_FREE             0x00000800      /* entry needs to be freed */
+#define        AIO_COMPLETION  0x00001000      /* entry is in completion processing (not freeable yet) */
+#define        AIO_DISABLE             0x00002000      /* process is trying to exit or exec and we need */
+                                                                       /*      to disable normal completion notification */
+#define        AIO_WAITING             0x00004000      /* process is trying to exit, exec, or close and is */
+                                                                       /*      waiting for one or more active IO requests to */
+                                                                       /*      complete */
+
+
+__private_extern__ void                _aio_close( struct proc *p, int fd );
+__private_extern__ void                _aio_exit( struct proc *p );
+__private_extern__ void                _aio_exec( struct proc *p );
+__private_extern__ void                _aio_create_worker_threads( int num );
+
+#endif /* KERNEL */
+
+#endif /* _SYS_AIO_KERN_H_ */