162306a36Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All rights reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef EFA_ABI_USER_H
762306a36Sopenharmony_ci#define EFA_ABI_USER_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/types.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci/*
1262306a36Sopenharmony_ci * Increment this value if any changes that break userspace ABI
1362306a36Sopenharmony_ci * compatibility are made.
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci#define EFA_UVERBS_ABI_VERSION 1
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci/*
1862306a36Sopenharmony_ci * Keep structs aligned to 8 bytes.
1962306a36Sopenharmony_ci * Keep reserved fields as arrays of __u8 named reserved_XXX where XXX is the
2062306a36Sopenharmony_ci * hex bit offset of the field.
2162306a36Sopenharmony_ci */
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cienum {
2462306a36Sopenharmony_ci	EFA_ALLOC_UCONTEXT_CMD_COMP_TX_BATCH  = 1 << 0,
2562306a36Sopenharmony_ci	EFA_ALLOC_UCONTEXT_CMD_COMP_MIN_SQ_WR = 1 << 1,
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistruct efa_ibv_alloc_ucontext_cmd {
2962306a36Sopenharmony_ci	__u32 comp_mask;
3062306a36Sopenharmony_ci	__u8 reserved_20[4];
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cienum efa_ibv_user_cmds_supp_udata {
3462306a36Sopenharmony_ci	EFA_USER_CMDS_SUPP_UDATA_QUERY_DEVICE = 1 << 0,
3562306a36Sopenharmony_ci	EFA_USER_CMDS_SUPP_UDATA_CREATE_AH    = 1 << 1,
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistruct efa_ibv_alloc_ucontext_resp {
3962306a36Sopenharmony_ci	__u32 comp_mask;
4062306a36Sopenharmony_ci	__u32 cmds_supp_udata_mask;
4162306a36Sopenharmony_ci	__u16 sub_cqs_per_cq;
4262306a36Sopenharmony_ci	__u16 inline_buf_size;
4362306a36Sopenharmony_ci	__u32 max_llq_size; /* bytes */
4462306a36Sopenharmony_ci	__u16 max_tx_batch; /* units of 64 bytes */
4562306a36Sopenharmony_ci	__u16 min_sq_wr;
4662306a36Sopenharmony_ci	__u8 reserved_a0[4];
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistruct efa_ibv_alloc_pd_resp {
5062306a36Sopenharmony_ci	__u32 comp_mask;
5162306a36Sopenharmony_ci	__u16 pdn;
5262306a36Sopenharmony_ci	__u8 reserved_30[2];
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cienum {
5662306a36Sopenharmony_ci	EFA_CREATE_CQ_WITH_COMPLETION_CHANNEL = 1 << 0,
5762306a36Sopenharmony_ci	EFA_CREATE_CQ_WITH_SGID               = 1 << 1,
5862306a36Sopenharmony_ci};
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistruct efa_ibv_create_cq {
6162306a36Sopenharmony_ci	__u32 comp_mask;
6262306a36Sopenharmony_ci	__u32 cq_entry_size;
6362306a36Sopenharmony_ci	__u16 num_sub_cqs;
6462306a36Sopenharmony_ci	__u8 flags;
6562306a36Sopenharmony_ci	__u8 reserved_58[5];
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cienum {
6962306a36Sopenharmony_ci	EFA_CREATE_CQ_RESP_DB_OFF = 1 << 0,
7062306a36Sopenharmony_ci};
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_cistruct efa_ibv_create_cq_resp {
7362306a36Sopenharmony_ci	__u32 comp_mask;
7462306a36Sopenharmony_ci	__u8 reserved_20[4];
7562306a36Sopenharmony_ci	__aligned_u64 q_mmap_key;
7662306a36Sopenharmony_ci	__aligned_u64 q_mmap_size;
7762306a36Sopenharmony_ci	__u16 cq_idx;
7862306a36Sopenharmony_ci	__u8 reserved_d0[2];
7962306a36Sopenharmony_ci	__u32 db_off;
8062306a36Sopenharmony_ci	__aligned_u64 db_mmap_key;
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cienum {
8462306a36Sopenharmony_ci	EFA_QP_DRIVER_TYPE_SRD = 0,
8562306a36Sopenharmony_ci};
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_cistruct efa_ibv_create_qp {
8862306a36Sopenharmony_ci	__u32 comp_mask;
8962306a36Sopenharmony_ci	__u32 rq_ring_size; /* bytes */
9062306a36Sopenharmony_ci	__u32 sq_ring_size; /* bytes */
9162306a36Sopenharmony_ci	__u32 driver_qp_type;
9262306a36Sopenharmony_ci};
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_cistruct efa_ibv_create_qp_resp {
9562306a36Sopenharmony_ci	__u32 comp_mask;
9662306a36Sopenharmony_ci	/* the offset inside the page of the rq db */
9762306a36Sopenharmony_ci	__u32 rq_db_offset;
9862306a36Sopenharmony_ci	/* the offset inside the page of the sq db */
9962306a36Sopenharmony_ci	__u32 sq_db_offset;
10062306a36Sopenharmony_ci	/* the offset inside the page of descriptors buffer */
10162306a36Sopenharmony_ci	__u32 llq_desc_offset;
10262306a36Sopenharmony_ci	__aligned_u64 rq_mmap_key;
10362306a36Sopenharmony_ci	__aligned_u64 rq_mmap_size;
10462306a36Sopenharmony_ci	__aligned_u64 rq_db_mmap_key;
10562306a36Sopenharmony_ci	__aligned_u64 sq_db_mmap_key;
10662306a36Sopenharmony_ci	__aligned_u64 llq_desc_mmap_key;
10762306a36Sopenharmony_ci	__u16 send_sub_cq_idx;
10862306a36Sopenharmony_ci	__u16 recv_sub_cq_idx;
10962306a36Sopenharmony_ci	__u8 reserved_1e0[4];
11062306a36Sopenharmony_ci};
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_cistruct efa_ibv_create_ah_resp {
11362306a36Sopenharmony_ci	__u32 comp_mask;
11462306a36Sopenharmony_ci	__u16 efa_address_handle;
11562306a36Sopenharmony_ci	__u8 reserved_30[2];
11662306a36Sopenharmony_ci};
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_cienum {
11962306a36Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_RDMA_READ = 1 << 0,
12062306a36Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_RNR_RETRY = 1 << 1,
12162306a36Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_CQ_NOTIFICATIONS = 1 << 2,
12262306a36Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_CQ_WITH_SGID     = 1 << 3,
12362306a36Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_DATA_POLLING_128 = 1 << 4,
12462306a36Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_RDMA_WRITE = 1 << 5,
12562306a36Sopenharmony_ci};
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_cistruct efa_ibv_ex_query_device_resp {
12862306a36Sopenharmony_ci	__u32 comp_mask;
12962306a36Sopenharmony_ci	__u32 max_sq_wr;
13062306a36Sopenharmony_ci	__u32 max_rq_wr;
13162306a36Sopenharmony_ci	__u16 max_sq_sge;
13262306a36Sopenharmony_ci	__u16 max_rq_sge;
13362306a36Sopenharmony_ci	__u32 max_rdma_size;
13462306a36Sopenharmony_ci	__u32 device_caps;
13562306a36Sopenharmony_ci};
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci#endif /* EFA_ABI_USER_H */
138