1/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT */
2/*
3 * Header file for the io_uring query interface.
4 *
5 * Copyright (C) 2026 Pavel Begunkov <asml.silence@gmail.com>
6 * Copyright (C) Meta Platforms, Inc.
7 */
8#ifndef LINUX_IO_URING_QUERY_H
9#define LINUX_IO_URING_QUERY_H
10
11#include <linux/types.h>
12
13struct io_uring_query_hdr {
14 __u64 next_entry;
15 __u64 query_data;
16 __u32 query_op;
17 __u32 size;
18 __s32 result;
19 __u32 __resv[3];
20};
21
22enum {
23 IO_URING_QUERY_OPCODES = 0,
24 IO_URING_QUERY_ZCRX = 1,
25 IO_URING_QUERY_SCQ = 2,
26 IO_URING_QUERY_ZCRX_EVENT = 3,
27
28 __IO_URING_QUERY_MAX,
29};
30
31/* Doesn't require a ring */
32struct io_uring_query_opcode {
33 /* The number of supported IORING_OP_* opcodes */
34 __u32 nr_request_opcodes;
35 /* The number of supported IORING_[UN]REGISTER_* opcodes */
36 __u32 nr_register_opcodes;
37 /* Bitmask of all supported IORING_FEAT_* flags */
38 __u64 feature_flags;
39 /* Bitmask of all supported IORING_SETUP_* flags */
40 __u64 ring_setup_flags;
41 /* Bitmask of all supported IORING_ENTER_** flags */
42 __u64 enter_flags;
43 /* Bitmask of all supported IOSQE_* flags */
44 __u64 sqe_flags;
45 /* The number of available query opcodes */
46 __u32 nr_query_opcodes;
47 __u32 __pad;
48};
49
50struct io_uring_query_zcrx {
51 /* Bitmask of supported ZCRX_REG_* flags, */
52 __u64 register_flags;
53 /* Bitmask of all supported IORING_ZCRX_AREA_* flags */
54 __u64 area_flags;
55 /* The number of supported ZCRX_CTRL_* opcodes */
56 __u32 nr_ctrl_opcodes;
57 /* Bitmask of ZCRX_FEATURE_* indicating which features are available */
58 __u32 features;
59 /* The refill ring header size */
60 __u32 rq_hdr_size;
61 /* The alignment for the header */
62 __u32 rq_hdr_alignment;
63 __u64 __resv2;
64};
65
66struct io_uring_query_zcrx_event {
67 /* Bitmask of supported ZCRX_EVENT_* flags */
68 __u32 event_flags;
69 /* Size of zcrx_stats */
70 __u32 stats_size;
71 /* Required alignment for the stats struct within the region (ie stats_offset) */
72 __u32 stats_off_alignment;
73 __u32 __resv1;
74 __u64 __resv2[4];
75};
76
77struct io_uring_query_scq {
78 /* The SQ/CQ rings header size */
79 __u64 hdr_size;
80 /* The alignment for the header */
81 __u64 hdr_alignment;
82};
83
84#endif