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
