include/uapi/linux/io_uring/zcrx.h

Source file repositories/reference/linux-study-clean/include/uapi/linux/io_uring/zcrx.h

File Facts

System
Linux kernel
Corpus path
include/uapi/linux/io_uring/zcrx.h
Extension
.h
Size
3082 bytes
Lines
150
Domain
Core OS
Bucket
Core Kernel Interface
Inferred role
Core OS: implementation source
Status
source implementation candidate

Why This File Exists

Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.

Dependency Surface

Detected Declarations

Annotated Snippet

struct io_uring_zcrx_rqe {
	__u64	off;
	__u32	len;
	__u32	__pad;
};

struct io_uring_zcrx_cqe {
	__u64	off;
	__u64	__pad;
};

/* The bit from which area id is encoded into offsets */
#define IORING_ZCRX_AREA_SHIFT	48
#define IORING_ZCRX_AREA_MASK	(~(((__u64)1 << IORING_ZCRX_AREA_SHIFT) - 1))

struct io_uring_zcrx_offsets {
	__u32	head;
	__u32	tail;
	__u32	rqes;
	__u32	__resv2;
	__u64	__resv[2];
};

enum io_uring_zcrx_area_flags {
	IORING_ZCRX_AREA_DMABUF		= 1,
};

struct io_uring_zcrx_area_reg {
	__u64	addr;
	__u64	len;
	__u64	rq_area_token;
	__u32	flags;
	__u32	dmabuf_fd;
	__u64	__resv2[2];
};

enum zcrx_reg_flags {
	ZCRX_REG_IMPORT		= 1,

	/*
	 * Register a zcrx instance without a net device. All data will be
	 * copied. The refill queue entries might not be automatically
	 * consumed and need to be flushed, see ZCRX_CTRL_FLUSH_RQ.
	 */
	ZCRX_REG_NODEV		= 2,
};

enum zcrx_features {
	/*
	 * The user can ask for the desired rx page size by passing the
	 * value in struct io_uring_zcrx_ifq_reg::rx_buf_len.
	 */
	ZCRX_FEATURE_RX_PAGE_SIZE	= 1 << 0,
	ZCRX_FEATURE_NOTIFICATION	= 1 << 1,
};

enum zcrx_notification_type {
	ZCRX_NOTIF_NO_BUFFERS,
	ZCRX_NOTIF_COPY,

	__ZCRX_NOTIF_TYPE_LAST,
};

enum zcrx_notification_desc_flags {
	/* If set, stats_offset holds a valid offset to a notif_stats struct */
	ZCRX_NOTIF_DESC_FLAG_STATS = 1 << 0,
};

struct zcrx_notif_stats {
	__u64	copy_count;	/* cumulative copy-fallback CQEs */
	__u64	copy_bytes;	/* cumulative bytes copied */
};

struct zcrx_notification_desc {
	__u64	user_data;
	__u32	type_mask;
	__u32	flags; /* see enum zcrx_notification_desc_flags */
	__u64	stats_offset; /* offset from the beginning of refill ring region for stats */
	__u64	__resv2[9];
};

/*
 * Argument for IORING_REGISTER_ZCRX_IFQ
 */
struct io_uring_zcrx_ifq_reg {
	__u32	if_idx;
	__u32	if_rxq;
	__u32	rq_entries;
	__u32	flags;

Annotation

Implementation Notes