18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All rights reserved.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef EFA_ABI_USER_H
78c2ecf20Sopenharmony_ci#define EFA_ABI_USER_H
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/types.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci/*
128c2ecf20Sopenharmony_ci * Increment this value if any changes that break userspace ABI
138c2ecf20Sopenharmony_ci * compatibility are made.
148c2ecf20Sopenharmony_ci */
158c2ecf20Sopenharmony_ci#define EFA_UVERBS_ABI_VERSION 1
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci/*
188c2ecf20Sopenharmony_ci * Keep structs aligned to 8 bytes.
198c2ecf20Sopenharmony_ci * Keep reserved fields as arrays of __u8 named reserved_XXX where XXX is the
208c2ecf20Sopenharmony_ci * hex bit offset of the field.
218c2ecf20Sopenharmony_ci */
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cienum {
248c2ecf20Sopenharmony_ci	EFA_ALLOC_UCONTEXT_CMD_COMP_TX_BATCH  = 1 << 0,
258c2ecf20Sopenharmony_ci	EFA_ALLOC_UCONTEXT_CMD_COMP_MIN_SQ_WR = 1 << 1,
268c2ecf20Sopenharmony_ci};
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistruct efa_ibv_alloc_ucontext_cmd {
298c2ecf20Sopenharmony_ci	__u32 comp_mask;
308c2ecf20Sopenharmony_ci	__u8 reserved_20[4];
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cienum efa_ibv_user_cmds_supp_udata {
348c2ecf20Sopenharmony_ci	EFA_USER_CMDS_SUPP_UDATA_QUERY_DEVICE = 1 << 0,
358c2ecf20Sopenharmony_ci	EFA_USER_CMDS_SUPP_UDATA_CREATE_AH    = 1 << 1,
368c2ecf20Sopenharmony_ci};
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistruct efa_ibv_alloc_ucontext_resp {
398c2ecf20Sopenharmony_ci	__u32 comp_mask;
408c2ecf20Sopenharmony_ci	__u32 cmds_supp_udata_mask;
418c2ecf20Sopenharmony_ci	__u16 sub_cqs_per_cq;
428c2ecf20Sopenharmony_ci	__u16 inline_buf_size;
438c2ecf20Sopenharmony_ci	__u32 max_llq_size; /* bytes */
448c2ecf20Sopenharmony_ci	__u16 max_tx_batch; /* units of 64 bytes */
458c2ecf20Sopenharmony_ci	__u16 min_sq_wr;
468c2ecf20Sopenharmony_ci	__u8 reserved_a0[4];
478c2ecf20Sopenharmony_ci};
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_cistruct efa_ibv_alloc_pd_resp {
508c2ecf20Sopenharmony_ci	__u32 comp_mask;
518c2ecf20Sopenharmony_ci	__u16 pdn;
528c2ecf20Sopenharmony_ci	__u8 reserved_30[2];
538c2ecf20Sopenharmony_ci};
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_cistruct efa_ibv_create_cq {
568c2ecf20Sopenharmony_ci	__u32 comp_mask;
578c2ecf20Sopenharmony_ci	__u32 cq_entry_size;
588c2ecf20Sopenharmony_ci	__u16 num_sub_cqs;
598c2ecf20Sopenharmony_ci	__u8 reserved_50[6];
608c2ecf20Sopenharmony_ci};
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_cistruct efa_ibv_create_cq_resp {
638c2ecf20Sopenharmony_ci	__u32 comp_mask;
648c2ecf20Sopenharmony_ci	__u8 reserved_20[4];
658c2ecf20Sopenharmony_ci	__aligned_u64 q_mmap_key;
668c2ecf20Sopenharmony_ci	__aligned_u64 q_mmap_size;
678c2ecf20Sopenharmony_ci	__u16 cq_idx;
688c2ecf20Sopenharmony_ci	__u8 reserved_d0[6];
698c2ecf20Sopenharmony_ci};
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_cienum {
728c2ecf20Sopenharmony_ci	EFA_QP_DRIVER_TYPE_SRD = 0,
738c2ecf20Sopenharmony_ci};
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_cistruct efa_ibv_create_qp {
768c2ecf20Sopenharmony_ci	__u32 comp_mask;
778c2ecf20Sopenharmony_ci	__u32 rq_ring_size; /* bytes */
788c2ecf20Sopenharmony_ci	__u32 sq_ring_size; /* bytes */
798c2ecf20Sopenharmony_ci	__u32 driver_qp_type;
808c2ecf20Sopenharmony_ci};
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_cistruct efa_ibv_create_qp_resp {
838c2ecf20Sopenharmony_ci	__u32 comp_mask;
848c2ecf20Sopenharmony_ci	/* the offset inside the page of the rq db */
858c2ecf20Sopenharmony_ci	__u32 rq_db_offset;
868c2ecf20Sopenharmony_ci	/* the offset inside the page of the sq db */
878c2ecf20Sopenharmony_ci	__u32 sq_db_offset;
888c2ecf20Sopenharmony_ci	/* the offset inside the page of descriptors buffer */
898c2ecf20Sopenharmony_ci	__u32 llq_desc_offset;
908c2ecf20Sopenharmony_ci	__aligned_u64 rq_mmap_key;
918c2ecf20Sopenharmony_ci	__aligned_u64 rq_mmap_size;
928c2ecf20Sopenharmony_ci	__aligned_u64 rq_db_mmap_key;
938c2ecf20Sopenharmony_ci	__aligned_u64 sq_db_mmap_key;
948c2ecf20Sopenharmony_ci	__aligned_u64 llq_desc_mmap_key;
958c2ecf20Sopenharmony_ci	__u16 send_sub_cq_idx;
968c2ecf20Sopenharmony_ci	__u16 recv_sub_cq_idx;
978c2ecf20Sopenharmony_ci	__u8 reserved_1e0[4];
988c2ecf20Sopenharmony_ci};
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_cistruct efa_ibv_create_ah_resp {
1018c2ecf20Sopenharmony_ci	__u32 comp_mask;
1028c2ecf20Sopenharmony_ci	__u16 efa_address_handle;
1038c2ecf20Sopenharmony_ci	__u8 reserved_30[2];
1048c2ecf20Sopenharmony_ci};
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_cienum {
1078c2ecf20Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_RDMA_READ = 1 << 0,
1088c2ecf20Sopenharmony_ci	EFA_QUERY_DEVICE_CAPS_RNR_RETRY = 1 << 1,
1098c2ecf20Sopenharmony_ci};
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_cistruct efa_ibv_ex_query_device_resp {
1128c2ecf20Sopenharmony_ci	__u32 comp_mask;
1138c2ecf20Sopenharmony_ci	__u32 max_sq_wr;
1148c2ecf20Sopenharmony_ci	__u32 max_rq_wr;
1158c2ecf20Sopenharmony_ci	__u16 max_sq_sge;
1168c2ecf20Sopenharmony_ci	__u16 max_rq_sge;
1178c2ecf20Sopenharmony_ci	__u32 max_rdma_size;
1188c2ecf20Sopenharmony_ci	__u32 device_caps;
1198c2ecf20Sopenharmony_ci};
1208c2ecf20Sopenharmony_ci
1218c2ecf20Sopenharmony_ci#endif /* EFA_ABI_USER_H */
122