zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

ioringapi.h (5953B) - Raw


      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 #if NTDDI_VERSION >= NTDDI_WIN10_NI
     24   , IOSQE_FLAGS_DRAIN_PRECEDING_OPS = 0x00000001
     25 #endif
     26 } IORING_SQE_FLAGS;
     27 DEFINE_ENUM_FLAG_OPERATORS(IORING_SQE_FLAGS)
     28 
     29 typedef enum IORING_CREATE_REQUIRED_FLAGS {
     30   IORING_CREATE_REQUIRED_FLAGS_NONE = 0
     31 } IORING_CREATE_REQUIRED_FLAGS;
     32 DEFINE_ENUM_FLAG_OPERATORS(IORING_CREATE_REQUIRED_FLAGS)
     33 
     34 typedef enum IORING_CREATE_ADVISORY_FLAGS {
     35   IORING_CREATE_ADVISORY_FLAGS_NONE = 0,
     36   IORING_CREATE_SKIP_BUILDER_PARAM_CHECKS = 0x00000001
     37 } IORING_CREATE_ADVISORY_FLAGS;
     38 DEFINE_ENUM_FLAG_OPERATORS(IORING_CREATE_ADVISORY_FLAGS)
     39 
     40 typedef struct IORING_CREATE_FLAGS {
     41   IORING_CREATE_REQUIRED_FLAGS Required;
     42   IORING_CREATE_ADVISORY_FLAGS Advisory;
     43 } IORING_CREATE_FLAGS;
     44 
     45 typedef struct IORING_INFO {
     46   IORING_VERSION IoRingVersion;
     47   IORING_CREATE_FLAGS Flags;
     48   UINT32 SubmissionQueueSize;
     49   UINT32 CompletionQueueSize;
     50 } IORING_INFO;
     51 
     52 typedef struct IORING_CAPABILITIES {
     53   IORING_VERSION MaxVersion;
     54   UINT32 MaxSubmissionQueueSize;
     55   UINT32 MaxCompletionQueueSize;
     56   IORING_FEATURE_FLAGS FeatureFlags;
     57 } IORING_CAPABILITIES;
     58 
     59 typedef enum IORING_REF_KIND {
     60   IORING_REF_RAW,
     61   IORING_REF_REGISTERED
     62 } IORING_REF_KIND;
     63 
     64 typedef struct IORING_HANDLE_REF {
     65 #ifdef __cplusplus
     66   explicit IORING_HANDLE_REF(HANDLE h) : Kind(IORING_REF_KIND::IORING_REF_RAW), Handle(h) {}
     67   explicit IORING_HANDLE_REF(UINT32 index) : Kind(IORING_REF_KIND::IORING_REF_REGISTERED), Handle(index) {}
     68 #endif
     69 
     70   IORING_REF_KIND Kind;
     71   union HandleUnion {
     72 #ifdef __cplusplus
     73     HandleUnion(HANDLE h) : Handle(h) {}
     74     HandleUnion(UINT32 index) : Index(index) {}
     75 #endif
     76     HANDLE Handle;
     77     UINT32 Index;
     78   } Handle;
     79 } IORING_HANDLE_REF;
     80 
     81 #ifdef __cplusplus
     82 #define IoRingHandleRefFromHandle(h) IORING_HANDLE_REF(static_cast<HANDLE>(h))
     83 #define IoRingHandleRefFromIndex(i) IORING_HANDLE_REF(static_cast<UINT32>(i))
     84 #else
     85 #define IoRingHandleRefFromHandle(h) {IORING_REF_RAW, {.Handle = h}}
     86 #define IoRingHandleRefFromIndex(i) {IORING_REF_REGISTERED, {.Index = i}}
     87 #endif
     88 
     89 typedef struct IORING_BUFFER_REF {
     90 #ifdef __cplusplus
     91   explicit IORING_BUFFER_REF(void* address) : Kind(IORING_REF_KIND::IORING_REF_RAW), Buffer(address) {}
     92   explicit IORING_BUFFER_REF(IORING_REGISTERED_BUFFER registeredBuffer) : Kind(IORING_REF_KIND::IORING_REF_REGISTERED), Buffer(registeredBuffer) {}
     93   IORING_BUFFER_REF(UINT32 index, UINT32 offset) : IORING_BUFFER_REF(IORING_REGISTERED_BUFFER{index, offset}) {}
     94 #endif
     95 
     96   IORING_REF_KIND Kind;
     97   union BufferUnion {
     98 #ifdef __cplusplus
     99     BufferUnion(void* address) : Address(address) {}
    100     BufferUnion(IORING_REGISTERED_BUFFER indexAndOffset) : IndexAndOffset(indexAndOffset) {}
    101 #endif
    102     void* Address;
    103     IORING_REGISTERED_BUFFER IndexAndOffset;
    104   }Buffer;
    105 } IORING_BUFFER_REF;
    106 
    107 #ifdef __cplusplus
    108 #define IoRingBufferRefFromPointer(p) IORING_BUFFER_REF(static_cast<void*>(p))
    109 #define IoRingBufferRefFromIndexAndOffset(i,o) IORING_BUFFER_REF((i),(o))
    110 #else
    111 #define IoRingBufferRefFromPointer(p) {IORING_REF_RAW, {.Address = p}}
    112 #define IoRingBufferRefFromIndexAndOffset(i,o) {IORING_REF_REGISTERED, {.IndexAndOffset = {(i),(o)}}}
    113 #endif
    114 
    115 typedef struct IORING_CQE {
    116   UINT_PTR UserData;
    117   HRESULT ResultCode;
    118   ULONG_PTR Information;
    119 } IORING_CQE;
    120 
    121 #ifdef __cplusplus
    122 extern "C" {
    123 #endif
    124 
    125 STDAPI QueryIoRingCapabilities(IORING_CAPABILITIES* capabilities);
    126 STDAPI_(WINBOOL) IsIoRingOpSupported(HIORING ioRing, IORING_OP_CODE op);
    127 STDAPI CreateIoRing(IORING_VERSION ioringVersion, IORING_CREATE_FLAGS flags, UINT32 submissionQueueSize, UINT32 completionQueueSize, HIORING* h);
    128 STDAPI GetIoRingInfo(HIORING ioRing, IORING_INFO* info);
    129 STDAPI SubmitIoRing(HIORING ioRing, UINT32 waitOperations, UINT32 milliseconds, UINT32* submittedEntries);
    130 STDAPI CloseIoRing(HIORING ioRing);
    131 STDAPI PopIoRingCompletion(HIORING ioRing, IORING_CQE* cqe);
    132 STDAPI SetIoRingCompletionEvent(HIORING ioRing, HANDLE hEvent);
    133 STDAPI BuildIoRingCancelRequest(HIORING ioRing, IORING_HANDLE_REF file, UINT_PTR opToCancel, UINT_PTR userData);
    134 STDAPI BuildIoRingReadFile(HIORING ioRing, IORING_HANDLE_REF fileRef, IORING_BUFFER_REF dataRef, UINT32 numberOfBytesToRead, UINT64 fileOffset, UINT_PTR userData, IORING_SQE_FLAGS flags);
    135 STDAPI BuildIoRingRegisterFileHandles(HIORING ioRing, UINT32 count, HANDLE const handles[], UINT_PTR userData);
    136 STDAPI BuildIoRingRegisterBuffers(HIORING ioRing, UINT32 count, IORING_BUFFER_INFO const buffers[], UINT_PTR userData);
    137 #if NTDDI_VERSION >= NTDDI_WIN10_NI
    138 STDAPI BuildIoRingWriteFile(HIORING ioRing, IORING_HANDLE_REF fileRef, IORING_BUFFER_REF bufferRef, UINT32 numberOfBytesToWrite, UINT64 fileOffset, FILE_WRITE_FLAGS writeFlags, UINT_PTR userData, IORING_SQE_FLAGS sqeFlags);
    139 STDAPI BuildIoRingFlushFile(HIORING ioRing, IORING_HANDLE_REF fileRef, FILE_FLUSH_MODE flushMode, UINT_PTR userData, IORING_SQE_FLAGS sqeFlags);
    140 STDAPI BuildIoRingReadFileScatter(HIORING ioRing, IORING_HANDLE_REF fileRef, UINT32 segmentCount, FILE_SEGMENT_ELEMENT segmentArray[], UINT32 numberOfBytesToRead, UINT64 fileOffset, UINT_PTR userData, IORING_SQE_FLAGS sqeFlags);
    141 STDAPI BuildIoRingWriteFileGather(HIORING ioRing, IORING_HANDLE_REF fileRef, UINT32 segmentCount, FILE_SEGMENT_ELEMENT segmentArray[], UINT32 numberOfBytesToWrite, UINT64 fileOffset, FILE_WRITE_FLAGS writeFlags, UINT_PTR userData, IORING_SQE_FLAGS sqeFlags);
    142 #endif
    143 
    144 #ifdef __cplusplus
    145 }
    146 #endif
    147 
    148 #endif /* NTDDI_WIN10_CO */
    149 #endif /* WINAPI_PARTITION_APP */
    150 #endif /* _APISET_IORING_ */