Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | /* linux/aio_abi.h |
2 | * |
||
3 | * Copyright 2000,2001,2002 Red Hat. |
||
4 | * |
||
5 | * Written by Benjamin LaHaise <bcrl@redhat.com> |
||
6 | * |
||
7 | * Distribute under the terms of the GPLv2 (see ../../COPYING) or under |
||
8 | * the following terms. |
||
9 | * |
||
10 | * Permission to use, copy, modify, and distribute this software and its |
||
11 | * documentation is hereby granted, provided that the above copyright |
||
12 | * notice appears in all copies. This software is provided without any |
||
13 | * warranty, express or implied. Red Hat makes no representations about |
||
14 | * the suitability of this software for any purpose. |
||
15 | * |
||
16 | * IN NO EVENT SHALL RED HAT BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, |
||
17 | * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF |
||
18 | * THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RED HAT HAS BEEN ADVISED |
||
19 | * OF THE POSSIBILITY OF SUCH DAMAGE. |
||
20 | * |
||
21 | * RED HAT DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
||
23 | * PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND |
||
24 | * RED HAT HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, |
||
25 | * ENHANCEMENTS, OR MODIFICATIONS. |
||
26 | */ |
||
27 | #ifndef __LINUX__AIO_ABI_H |
||
28 | #define __LINUX__AIO_ABI_H |
||
29 | |||
30 | #include <asm/byteorder.h> |
||
31 | |||
32 | typedef unsigned long aio_context_t; |
||
33 | |||
34 | enum { |
||
35 | IOCB_CMD_PREAD = 0, |
||
36 | IOCB_CMD_PWRITE = 1, |
||
37 | IOCB_CMD_FSYNC = 2, |
||
38 | IOCB_CMD_FDSYNC = 3, |
||
39 | /* These two are experimental. |
||
40 | * IOCB_CMD_PREADX = 4, |
||
41 | * IOCB_CMD_POLL = 5, |
||
42 | */ |
||
43 | IOCB_CMD_NOOP = 6, |
||
44 | }; |
||
45 | |||
46 | /* read() from /dev/aio returns these structures. */ |
||
47 | struct io_event { |
||
48 | __u64 data; /* the data field from the iocb */ |
||
49 | __u64 obj; /* what iocb this event came from */ |
||
50 | __s64 res; /* result code for this event */ |
||
51 | __s64 res2; /* secondary result */ |
||
52 | }; |
||
53 | |||
54 | #if defined(__LITTLE_ENDIAN) |
||
55 | #define PADDED(x,y) x, y |
||
56 | #elif defined(__BIG_ENDIAN) |
||
57 | #define PADDED(x,y) y, x |
||
58 | #else |
||
59 | #error edit for your odd byteorder. |
||
60 | #endif |
||
61 | |||
62 | /* |
||
63 | * we always use a 64bit off_t when communicating |
||
64 | * with userland. its up to libraries to do the |
||
65 | * proper padding and aio_error abstraction |
||
66 | */ |
||
67 | |||
68 | struct iocb { |
||
69 | /* these are internal to the kernel/libc. */ |
||
70 | __u64 aio_data; /* data to be returned in event's data */ |
||
71 | __u32 PADDED(aio_key, aio_reserved1); |
||
72 | /* the kernel sets aio_key to the req # */ |
||
73 | |||
74 | /* common fields */ |
||
75 | __u16 aio_lio_opcode; /* see IOCB_CMD_ above */ |
||
76 | __s16 aio_reqprio; |
||
77 | __u32 aio_fildes; |
||
78 | |||
79 | __u64 aio_buf; |
||
80 | __u64 aio_nbytes; |
||
81 | __s64 aio_offset; |
||
82 | |||
83 | /* extra parameters */ |
||
84 | __u64 aio_reserved2; /* TODO: use this for a (struct sigevent *) */ |
||
85 | __u64 aio_reserved3; |
||
86 | }; /* 64 bytes */ |
||
87 | |||
88 | #undef IFBIG |
||
89 | #undef IFLITTLE |
||
90 | |||
91 | #endif /* __LINUX__AIO_ABI_H */ |
||
92 |