Liu Hao: Opps! Forgot that. Updated patch file attached.
unlvsur: This is just to check if your projects compile without linking.
From 87b6f9c174fc96b4ca4b159e0d72d4ffe146004f Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <[email protected]>
Date: Fri, 15 Oct 2021 17:34:18 +0530
Subject: [PATCH] headers: Add ioringapi.h

Signed-off-by: Biswapriyo Nath <[email protected]>
---
 mingw-w64-headers/include/ioringapi.h  | 140 +++++++++++++++++++++++++
 mingw-w64-headers/include/ntioring_x.h |  54 ++++++++++
 2 files changed, 194 insertions(+)
 create mode 100644 mingw-w64-headers/include/ioringapi.h
 create mode 100644 mingw-w64-headers/include/ntioring_x.h

diff --git a/mingw-w64-headers/include/ioringapi.h 
b/mingw-w64-headers/include/ioringapi.h
new file mode 100644
index 0000000..f950893
--- /dev/null
+++ b/mingw-w64-headers/include/ioringapi.h
@@ -0,0 +1,140 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _APISET_IORING_
+#define _APISET_IORING_
+
+#include <apiset.h>
+#include <apisetcconv.h>
+#include <minwindef.h>
+#include <minwinbase.h>
+#include <ntioring_x.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+#if NTDDI_VERSION >= NTDDI_WIN10_CO
+
+DECLARE_HANDLE(HIORING);
+
+typedef enum IORING_SQE_FLAGS {
+  IOSQE_FLAGS_NONE = 0
+} IORING_SQE_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(IORING_SQE_FLAGS)
+
+typedef enum IORING_CREATE_REQUIRED_FLAGS {
+  IORING_CREATE_REQUIRED_FLAGS_NONE = 0
+} IORING_CREATE_REQUIRED_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(IORING_CREATE_REQUIRED_FLAGS)
+
+typedef enum IORING_CREATE_ADVISORY_FLAGS {
+  IORING_CREATE_ADVISORY_FLAGS_NONE = 0
+} IORING_CREATE_ADVISORY_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(IORING_CREATE_ADVISORY_FLAGS)
+
+typedef struct IORING_CREATE_FLAGS {
+  IORING_CREATE_REQUIRED_FLAGS Required;
+  IORING_CREATE_ADVISORY_FLAGS Advisory;
+} IORING_CREATE_FLAGS;
+
+typedef struct IORING_INFO {
+  IORING_VERSION IoRingVersion;
+  IORING_CREATE_FLAGS Flags;
+  UINT32 SubmissionQueueSize;
+  UINT32 CompletionQueueSize;
+} IORING_INFO;
+
+typedef struct IORING_CAPABILITIES {
+  IORING_VERSION MaxVersion;
+  UINT32 MaxSubmissionQueueSize;
+  UINT32 MaxCompletionQueueSize;
+  IORING_FEATURE_FLAGS FeatureFlags;
+} IORING_CAPABILITIES;
+
+typedef enum IORING_REF_KIND {
+  IORING_REF_RAW,
+  IORING_REF_REGISTERED
+} IORING_REF_KIND;
+
+typedef struct IORING_HANDLE_REF {
+#ifdef __cplusplus
+  explicit IORING_HANDLE_REF(HANDLE h) : 
Kind(IORING_REF_KIND::IORING_REF_RAW), Handle(h) {}
+  explicit IORING_HANDLE_REF(UINT32 index) : 
Kind(IORING_REF_KIND::IORING_REF_REGISTERED), Handle(index) {}
+#endif
+
+  IORING_REF_KIND Kind;
+  union HandleUnion {
+#ifdef __cplusplus
+    HandleUnion(HANDLE h) : Handle(h) {}
+    HandleUnion(UINT32 index) : Index(index) {}
+#endif
+    HANDLE Handle;
+    UINT32 Index;
+  } Handle;
+} IORING_HANDLE_REF;
+
+#ifdef __cplusplus
+#define IoRingHandleRefFromHandle(h) IORING_HANDLE_REF(static_cast<HANDLE>(h))
+#define IoRingHandleRefFromIndex(i) IORING_HANDLE_REF(static_cast<UINT32>(i))
+#else
+#define IoRingHandleRefFromHandle(h) {IORING_REF_RAW, {.Handle = h}}
+#define IoRingHandleRefFromIndex(i) {IORING_REF_REGISTERED, {.Index = i}}
+#endif
+
+typedef struct IORING_BUFFER_REF {
+#ifdef __cplusplus
+  explicit IORING_BUFFER_REF(void* address) : 
Kind(IORING_REF_KIND::IORING_REF_RAW), Buffer(address) {}
+  explicit IORING_BUFFER_REF(IORING_REGISTERED_BUFFER registeredBuffer) : 
Kind(IORING_REF_KIND::IORING_REF_REGISTERED), Buffer(registeredBuffer) {}
+  IORING_BUFFER_REF(UINT32 index, UINT32 offset) : 
IORING_BUFFER_REF(IORING_REGISTERED_BUFFER{index, offset}) {}
+#endif
+
+  IORING_REF_KIND Kind;
+  union BufferUnion {
+#ifdef __cplusplus
+    BufferUnion(void* address) : Address(address) {}
+    BufferUnion(IORING_REGISTERED_BUFFER indexAndOffset) : 
IndexAndOffset(indexAndOffset) {}
+#endif
+    void* Address;
+    IORING_REGISTERED_BUFFER IndexAndOffset;
+  }Buffer;
+} IORING_BUFFER_REF;
+
+#ifdef __cplusplus
+#define IoRingBufferRefFromPointer(p) IORING_BUFFER_REF(static_cast<void*>(p))
+#define IoRingBufferRefFromIndexAndOffset(i,o) IORING_BUFFER_REF((i),(o))
+#else
+#define IoRingBufferRefFromPointer(p) {IORING_REF_RAW, {.Address = p}}
+#define IoRingBufferRefFromIndexAndOffset(i,o) {IORING_REF_REGISTERED, 
{.IndexAndOffset = {(i),(o)}}}
+#endif
+
+typedef struct IORING_CQE {
+  UINT_PTR UserData;
+  HRESULT ResultCode;
+  ULONG_PTR Information;
+} IORING_CQE;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+STDAPI QueryIoRingCapabilities(IORING_CAPABILITIES* capabilities);
+STDAPI_(WINBOOL) IsIoRingOpSupported(HIORING ioRing, IORING_OP_CODE op);
+STDAPI CreateIoRing(IORING_VERSION ioringVersion, IORING_CREATE_FLAGS flags, 
UINT32 submissionQueueSize, UINT32 completionQueueSize, HIORING* h);
+STDAPI GetIoRingInfo(HIORING ioRing, IORING_INFO* info);
+STDAPI SubmitIoRing(HIORING ioRing, UINT32 waitOperations, UINT32 
milliseconds, UINT32* submittedEntries);
+STDAPI CloseIoRing(HIORING ioRing);
+STDAPI PopIoRingCompletion(HIORING ioRing, IORING_CQE* cqe);
+STDAPI SetIoRingCompletionEvent(HIORING ioRing, HANDLE hEvent);
+STDAPI BuildIoRingCancelRequest(HIORING ioRing, IORING_HANDLE_REF file, 
UINT_PTR opToCancel, UINT_PTR userData);
+STDAPI BuildIoRingReadFile(HIORING ioRing, IORING_HANDLE_REF fileRef, 
IORING_BUFFER_REF dataRef, UINT32 numberOfBytesToRead, UINT64 fileOffset, 
UINT_PTR userData, IORING_SQE_FLAGS flags);
+STDAPI BuildIoRingRegisterFileHandles(HIORING ioRing, UINT32 count, HANDLE 
const handles[], UINT_PTR userData);
+STDAPI BuildIoRingRegisterBuffers(HIORING ioRing, UINT32 count, 
IORING_BUFFER_INFO const buffers[], UINT_PTR userData);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NTDDI_WIN10_CO */
+#endif /* WINAPI_PARTITION_APP */
+#endif /* _APISET_IORING_ */
diff --git a/mingw-w64-headers/include/ntioring_x.h 
b/mingw-w64-headers/include/ntioring_x.h
new file mode 100644
index 0000000..2fe02aa
--- /dev/null
+++ b/mingw-w64-headers/include/ntioring_x.h
@@ -0,0 +1,54 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _NTIORINGX_H_
+#define _NTIORINGX_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if NTDDI_VERSION >= NTDDI_WIN10_CO
+
+typedef enum IORING_VERSION {
+  IORING_VERSION_INVALID = 0,
+  IORING_VERSION_1
+} IORING_VERSION;
+
+typedef enum IORING_FEATURE_FLAGS {
+  IORING_FEATURE_FLAGS_NONE = 0,
+  IORING_FEATURE_UM_EMULATION = 0x00000001,
+  IORING_FEATURE_SET_COMPLETION_EVENT = 0x00000002
+} IORING_FEATURE_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(IORING_FEATURE_FLAGS)
+
+typedef enum IORING_OP_CODE {
+  IORING_OP_NOP,
+  IORING_OP_READ,
+  IORING_OP_REGISTER_FILES,
+  IORING_OP_REGISTER_BUFFERS,
+  IORING_OP_CANCEL
+} IORING_OP_CODE;
+
+typedef struct IORING_BUFFER_INFO {
+  void* Address;
+  UINT32 Length;
+} IORING_BUFFER_INFO;
+
+typedef struct IORING_REGISTERED_BUFFER {
+  UINT32 BufferIndex;
+  UINT32 Offset;
+} IORING_REGISTERED_BUFFER;
+
+#define IORING_SUBMIT_WAIT_ALL MAXUINT32
+
+#endif /* NTDDI_WIN10_CO */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTIORINGX_H_ */
-- 
2.33.0

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to