ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/MSYS2/mingw32/i686-w64-mingw32/include/ioringapi.h
Revision: 1166
Committed: Tue Oct 26 14:22:36 2021 UTC (4 years ago) by rossy
Content type: text/x-chdr
File size: 4905 byte(s)
Log Message:
Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File Contents

# Content
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7 #ifndef _APISET_IORING_
8 #define _APISET_IORING_
9
10 #include <apiset.h>
11 #include <apisetcconv.h>
12 #include <minwindef.h>
13 #include <minwinbase.h>
14 #include <ntioring_x.h>
15
16 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
17 #if NTDDI_VERSION >= NTDDI_WIN10_CO
18
19 DECLARE_HANDLE(HIORING);
20
21 typedef enum IORING_SQE_FLAGS {
22 IOSQE_FLAGS_NONE = 0
23 } IORING_SQE_FLAGS;
24 DEFINE_ENUM_FLAG_OPERATORS(IORING_SQE_FLAGS)
25
26 typedef enum IORING_CREATE_REQUIRED_FLAGS {
27 IORING_CREATE_REQUIRED_FLAGS_NONE = 0
28 } IORING_CREATE_REQUIRED_FLAGS;
29 DEFINE_ENUM_FLAG_OPERATORS(IORING_CREATE_REQUIRED_FLAGS)
30
31 typedef enum IORING_CREATE_ADVISORY_FLAGS {
32 IORING_CREATE_ADVISORY_FLAGS_NONE = 0
33 } IORING_CREATE_ADVISORY_FLAGS;
34 DEFINE_ENUM_FLAG_OPERATORS(IORING_CREATE_ADVISORY_FLAGS)
35
36 typedef struct IORING_CREATE_FLAGS {
37 IORING_CREATE_REQUIRED_FLAGS Required;
38 IORING_CREATE_ADVISORY_FLAGS Advisory;
39 } IORING_CREATE_FLAGS;
40
41 typedef struct IORING_INFO {
42 IORING_VERSION IoRingVersion;
43 IORING_CREATE_FLAGS Flags;
44 UINT32 SubmissionQueueSize;
45 UINT32 CompletionQueueSize;
46 } IORING_INFO;
47
48 typedef struct IORING_CAPABILITIES {
49 IORING_VERSION MaxVersion;
50 UINT32 MaxSubmissionQueueSize;
51 UINT32 MaxCompletionQueueSize;
52 IORING_FEATURE_FLAGS FeatureFlags;
53 } IORING_CAPABILITIES;
54
55 typedef enum IORING_REF_KIND {
56 IORING_REF_RAW,
57 IORING_REF_REGISTERED
58 } IORING_REF_KIND;
59
60 typedef struct IORING_HANDLE_REF {
61 #ifdef __cplusplus
62 explicit IORING_HANDLE_REF(HANDLE h) : Kind(IORING_REF_KIND::IORING_REF_RAW), Handle(h) {}
63 explicit IORING_HANDLE_REF(UINT32 index) : Kind(IORING_REF_KIND::IORING_REF_REGISTERED), Handle(index) {}
64 #endif
65
66 IORING_REF_KIND Kind;
67 union HandleUnion {
68 #ifdef __cplusplus
69 HandleUnion(HANDLE h) : Handle(h) {}
70 HandleUnion(UINT32 index) : Index(index) {}
71 #endif
72 HANDLE Handle;
73 UINT32 Index;
74 } Handle;
75 } IORING_HANDLE_REF;
76
77 #ifdef __cplusplus
78 #define IoRingHandleRefFromHandle(h) IORING_HANDLE_REF(static_cast<HANDLE>(h))
79 #define IoRingHandleRefFromIndex(i) IORING_HANDLE_REF(static_cast<UINT32>(i))
80 #else
81 #define IoRingHandleRefFromHandle(h) {IORING_REF_RAW, {.Handle = h}}
82 #define IoRingHandleRefFromIndex(i) {IORING_REF_REGISTERED, {.Index = i}}
83 #endif
84
85 typedef struct IORING_BUFFER_REF {
86 #ifdef __cplusplus
87 explicit IORING_BUFFER_REF(void* address) : Kind(IORING_REF_KIND::IORING_REF_RAW), Buffer(address) {}
88 explicit IORING_BUFFER_REF(IORING_REGISTERED_BUFFER registeredBuffer) : Kind(IORING_REF_KIND::IORING_REF_REGISTERED), Buffer(registeredBuffer) {}
89 IORING_BUFFER_REF(UINT32 index, UINT32 offset) : IORING_BUFFER_REF(IORING_REGISTERED_BUFFER{index, offset}) {}
90 #endif
91
92 IORING_REF_KIND Kind;
93 union BufferUnion {
94 #ifdef __cplusplus
95 BufferUnion(void* address) : Address(address) {}
96 BufferUnion(IORING_REGISTERED_BUFFER indexAndOffset) : IndexAndOffset(indexAndOffset) {}
97 #endif
98 void* Address;
99 IORING_REGISTERED_BUFFER IndexAndOffset;
100 }Buffer;
101 } IORING_BUFFER_REF;
102
103 #ifdef __cplusplus
104 #define IoRingBufferRefFromPointer(p) IORING_BUFFER_REF(static_cast<void*>(p))
105 #define IoRingBufferRefFromIndexAndOffset(i,o) IORING_BUFFER_REF((i),(o))
106 #else
107 #define IoRingBufferRefFromPointer(p) {IORING_REF_RAW, {.Address = p}}
108 #define IoRingBufferRefFromIndexAndOffset(i,o) {IORING_REF_REGISTERED, {.IndexAndOffset = {(i),(o)}}}
109 #endif
110
111 typedef struct IORING_CQE {
112 UINT_PTR UserData;
113 HRESULT ResultCode;
114 ULONG_PTR Information;
115 } IORING_CQE;
116
117 #ifdef __cplusplus
118 extern "C" {
119 #endif
120
121 STDAPI QueryIoRingCapabilities(IORING_CAPABILITIES* capabilities);
122 STDAPI_(WINBOOL) IsIoRingOpSupported(HIORING ioRing, IORING_OP_CODE op);
123 STDAPI CreateIoRing(IORING_VERSION ioringVersion, IORING_CREATE_FLAGS flags, UINT32 submissionQueueSize, UINT32 completionQueueSize, HIORING* h);
124 STDAPI GetIoRingInfo(HIORING ioRing, IORING_INFO* info);
125 STDAPI SubmitIoRing(HIORING ioRing, UINT32 waitOperations, UINT32 milliseconds, UINT32* submittedEntries);
126 STDAPI CloseIoRing(HIORING ioRing);
127 STDAPI PopIoRingCompletion(HIORING ioRing, IORING_CQE* cqe);
128 STDAPI SetIoRingCompletionEvent(HIORING ioRing, HANDLE hEvent);
129 STDAPI BuildIoRingCancelRequest(HIORING ioRing, IORING_HANDLE_REF file, UINT_PTR opToCancel, UINT_PTR userData);
130 STDAPI BuildIoRingReadFile(HIORING ioRing, IORING_HANDLE_REF fileRef, IORING_BUFFER_REF dataRef, UINT32 numberOfBytesToRead, UINT64 fileOffset, UINT_PTR userData, IORING_SQE_FLAGS flags);
131 STDAPI BuildIoRingRegisterFileHandles(HIORING ioRing, UINT32 count, HANDLE const handles[], UINT_PTR userData);
132 STDAPI BuildIoRingRegisterBuffers(HIORING ioRing, UINT32 count, IORING_BUFFER_INFO const buffers[], UINT_PTR userData);
133
134 #ifdef __cplusplus
135 }
136 #endif
137
138 #endif /* NTDDI_WIN10_CO */
139 #endif /* WINAPI_PARTITION_APP */
140 #endif /* _APISET_IORING_ */