1 | /* |
2 | * Declarations for AIO in the raw protocol |
3 | * |
4 | * Copyright IBM, Corp. 2008 |
5 | * |
6 | * Authors: |
7 | * Anthony Liguori <aliguori@us.ibm.com> |
8 | * |
9 | * This work is licensed under the terms of the GNU GPL, version 2. See |
10 | * the COPYING file in the top-level directory. |
11 | * |
12 | * Contributions after 2012-01-13 are licensed under the terms of the |
13 | * GNU GPL, version 2 or (at your option) any later version. |
14 | */ |
15 | |
16 | #ifndef QEMU_RAW_AIO_H |
17 | #define QEMU_RAW_AIO_H |
18 | |
19 | #include "block/aio.h" |
20 | #include "qemu/coroutine.h" |
21 | #include "qemu/iov.h" |
22 | |
23 | /* AIO request types */ |
24 | #define QEMU_AIO_READ 0x0001 |
25 | #define QEMU_AIO_WRITE 0x0002 |
26 | #define QEMU_AIO_IOCTL 0x0004 |
27 | #define QEMU_AIO_FLUSH 0x0008 |
28 | #define QEMU_AIO_DISCARD 0x0010 |
29 | #define QEMU_AIO_WRITE_ZEROES 0x0020 |
30 | #define QEMU_AIO_COPY_RANGE 0x0040 |
31 | #define QEMU_AIO_TRUNCATE 0x0080 |
32 | #define QEMU_AIO_TYPE_MASK \ |
33 | (QEMU_AIO_READ | \ |
34 | QEMU_AIO_WRITE | \ |
35 | QEMU_AIO_IOCTL | \ |
36 | QEMU_AIO_FLUSH | \ |
37 | QEMU_AIO_DISCARD | \ |
38 | QEMU_AIO_WRITE_ZEROES | \ |
39 | QEMU_AIO_COPY_RANGE | \ |
40 | QEMU_AIO_TRUNCATE) |
41 | |
42 | /* AIO flags */ |
43 | #define QEMU_AIO_MISALIGNED 0x1000 |
44 | #define QEMU_AIO_BLKDEV 0x2000 |
45 | #define QEMU_AIO_NO_FALLBACK 0x4000 |
46 | |
47 | |
48 | /* linux-aio.c - Linux native implementation */ |
49 | #ifdef CONFIG_LINUX_AIO |
50 | typedef struct LinuxAioState LinuxAioState; |
51 | LinuxAioState *laio_init(Error **errp); |
52 | void laio_cleanup(LinuxAioState *s); |
53 | int coroutine_fn laio_co_submit(BlockDriverState *bs, LinuxAioState *s, int fd, |
54 | uint64_t offset, QEMUIOVector *qiov, int type); |
55 | void laio_detach_aio_context(LinuxAioState *s, AioContext *old_context); |
56 | void laio_attach_aio_context(LinuxAioState *s, AioContext *new_context); |
57 | void laio_io_plug(BlockDriverState *bs, LinuxAioState *s); |
58 | void laio_io_unplug(BlockDriverState *bs, LinuxAioState *s); |
59 | #endif |
60 | |
61 | #ifdef _WIN32 |
62 | typedef struct QEMUWin32AIOState QEMUWin32AIOState; |
63 | QEMUWin32AIOState *win32_aio_init(void); |
64 | void win32_aio_cleanup(QEMUWin32AIOState *aio); |
65 | int win32_aio_attach(QEMUWin32AIOState *aio, HANDLE hfile); |
66 | BlockAIOCB *win32_aio_submit(BlockDriverState *bs, |
67 | QEMUWin32AIOState *aio, HANDLE hfile, |
68 | uint64_t offset, uint64_t bytes, QEMUIOVector *qiov, |
69 | BlockCompletionFunc *cb, void *opaque, int type); |
70 | void win32_aio_detach_aio_context(QEMUWin32AIOState *aio, |
71 | AioContext *old_context); |
72 | void win32_aio_attach_aio_context(QEMUWin32AIOState *aio, |
73 | AioContext *new_context); |
74 | #endif |
75 | |
76 | #endif /* QEMU_RAW_AIO_H */ |
77 | |