Files
Odin/core/sys/windows/ioringapi.odin
Ignacy Koper 68c50e845f core:sys/windows: Added IoRing API bindings
Signed-off-by: Ignacy Koper <ignacy423@gmail.com>
2026-04-13 14:02:42 +02:00

107 lines
4.0 KiB
Odin

#+build windows
package sys_windows
foreign import ioringapi "system:kernel32.lib"
HIORING :: distinct rawptr
IORING_SQE_FLAG :: enum u32 {
DRAIN_PRECEDING_OPS = 0, // 0x00000001
}
IORING_SQE_FLAGS :: bit_set[IORING_SQE_FLAG; u32]
// Reserved for future use; currently no flags defined
IORING_CREATE_REQUIRED_FLAG :: enum u32 {}
IORING_CREATE_REQUIRED_FLAGS :: bit_set[IORING_CREATE_REQUIRED_FLAG; u32]
IORING_CREATE_ADVISORY_FLAG :: enum u32 {
SKIP_BUILDER_PARAM_CHECKS = 0, // 0x00000001
}
IORING_CREATE_ADVISORY_FLAGS :: bit_set[IORING_CREATE_ADVISORY_FLAG; u32]
IORING_CREATE_FLAGS :: struct {
Required: IORING_CREATE_REQUIRED_FLAGS,
Advisory: IORING_CREATE_ADVISORY_FLAGS,
}
IORING_INFO :: struct {
Version: IORING_VERSION,
Flags: IORING_CREATE_FLAGS,
SubmissionQueueSize: UINT32,
CompletionQueueSize: UINT32,
}
IORING_CAPABILITIES :: struct {
MaxVersion: IORING_VERSION,
MaxSubmissionQueueSize: UINT32,
MaxCompletionQueueSize: UINT32,
FeatureFlags: IORING_FEATURE_FLAGS,
}
IORING_REF_KIND :: enum i32 {
RAW,
REGISTERED,
}
IORING_HANDLE_REF :: struct {
Kind: IORING_REF_KIND,
HandleUnion: struct #raw_union {
Handle: HANDLE,
Index: UINT32,
},
}
IORING_BUFFER_REF :: struct {
Kind: IORING_REF_KIND,
BufferUnion: struct #raw_union {
Address: rawptr,
IndexAndOffset: IORING_REGISTERED_BUFFER,
},
}
IORING_CQE :: struct {
UserData: UINT_PTR,
ResultCode: HRESULT,
Information: ULONG_PTR,
}
// Types below are from winbase.h and winnt.h
FILE_WRITE_FLAG :: enum u32 {
WRITE_THROUGH = 0, // 0x000000001
}
FILE_WRITE_FLAGS :: bit_set[FILE_WRITE_FLAG ;u32]
FILE_FLUSH_MODE :: enum i32 {
DEFAULT,
DATA,
MIN_METADATA,
NO_SYNC,
}
FILE_SEGMENT_ELEMENT :: struct #raw_union {
Buffer: PVOID64,
Alignment: ULONGLONG,
}
@(default_calling_convention="system")
foreign ioringapi {
QueryIoRingCapabilities :: proc(capabilities: ^IORING_CAPABILITIES) -> HRESULT ---
IsIoRingOpSupported :: proc(ioRing: HIORING, op: IORING_OP_CODE) -> BOOL ---
CreateIoRing :: proc(ioringVersion: IORING_VERSION, flags: IORING_CREATE_FLAGS, submissionQueueSize: UINT32, completionQueueSize: UINT32, h: ^HIORING) -> HRESULT ---
GetIoRingInfo :: proc(ioRing: HIORING, info: ^IORING_INFO) -> HRESULT ---
SubmitIoRing :: proc(ioRing: HIORING, waitOperations: UINT32, milliseconds: UINT32, submittedEntries: ^UINT32) -> HRESULT ---
CloseIoRing :: proc(ioRing: HIORING) -> HRESULT ---
PopIoRingCompletion :: proc(ioRing: HIORING, cqe: ^IORING_CQE) -> HRESULT ---
SetIoRingCompletionEvent :: proc(ioRing: HIORING, hEvent: HANDLE) -> HRESULT ---
BuildIoRingCancelRequest :: proc(ioRing: HIORING, file: IORING_HANDLE_REF, opToCancel: UINT_PTR, userData: UINT_PTR) -> HRESULT ---
BuildIoRingReadFile :: proc(ioRing: HIORING, fileRef: IORING_HANDLE_REF, dataRef: IORING_BUFFER_REF, numberOfBytesToRead: UINT32, fileOffset: UINT64, userData: UINT_PTR, sqeFlags: IORING_SQE_FLAGS) -> HRESULT ---
BuildIoRingRegisterFileHandles :: proc(ioRing: HIORING, count: UINT32, handles: [^]HANDLE, userData: UINT_PTR) -> HRESULT ---
BuildIoRingRegisterBuffers :: proc(ioRing: HIORING, count: UINT32, buffers: [^]IORING_BUFFER_INFO, userData: UINT_PTR) -> HRESULT ---
BuildIoRingWriteFile :: proc(ioRing: HIORING, fileRef: IORING_HANDLE_REF, bufferRef: IORING_BUFFER_REF, numberOfBytesToWrite: UINT32, fileOffset: UINT64, writeFlags: FILE_WRITE_FLAGS, userData: UINT_PTR, sqeFlags: IORING_SQE_FLAGS) -> HRESULT ---
BuildIoRingFlushFile :: proc(ioRing: HIORING, fileRef: IORING_HANDLE_REF, flushMode: FILE_FLUSH_MODE, userData: UINT_PTR, sqeFlags: IORING_SQE_FLAGS) -> HRESULT ---
BuildIoRingReadFileScatter :: proc(ioRing: HIORING, fileRef: IORING_HANDLE_REF, segmentCount: UINT32, segmentArray: [^]FILE_SEGMENT_ELEMENT, numberOfBytesToRead: UINT32, fileOffset: UINT64, userData: UINT_PTR, sqeFlags: IORING_SQE_FLAGS) -> HRESULT ---
BuildIoRingWriteFileGather :: proc(ioRing: HIORING, fileRef: IORING_HANDLE_REF, segmentCount: UINT32, segmentArray: [^]FILE_SEGMENT_ELEMENT, numberOfBytesToWrite: UINT32, fileOffset: UINT64, writeFlags: FILE_WRITE_FLAGS, userData: UINT_PTR, sqeFlags: IORING_SQE_FLAGS) -> HRESULT ---
}