^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifndef EFA_ABI_USER_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define EFA_ABI_USER_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * Increment this value if any changes that break userspace ABI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * compatibility are made.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define EFA_UVERBS_ABI_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * Keep structs aligned to 8 bytes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * Keep reserved fields as arrays of __u8 named reserved_XXX where XXX is the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * hex bit offset of the field.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) EFA_ALLOC_UCONTEXT_CMD_COMP_TX_BATCH = 1 << 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) EFA_ALLOC_UCONTEXT_CMD_COMP_MIN_SQ_WR = 1 << 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) struct efa_ibv_alloc_ucontext_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __u8 reserved_20[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) enum efa_ibv_user_cmds_supp_udata {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) EFA_USER_CMDS_SUPP_UDATA_QUERY_DEVICE = 1 << 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) EFA_USER_CMDS_SUPP_UDATA_CREATE_AH = 1 << 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) struct efa_ibv_alloc_ucontext_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) __u32 cmds_supp_udata_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) __u16 sub_cqs_per_cq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __u16 inline_buf_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) __u32 max_llq_size; /* bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) __u16 max_tx_batch; /* units of 64 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) __u16 min_sq_wr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) __u8 reserved_a0[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct efa_ibv_alloc_pd_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) __u16 pdn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) __u8 reserved_30[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) struct efa_ibv_create_cq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) __u32 cq_entry_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) __u16 num_sub_cqs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) __u8 reserved_50[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) struct efa_ibv_create_cq_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __u8 reserved_20[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) __aligned_u64 q_mmap_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) __aligned_u64 q_mmap_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) __u16 cq_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) __u8 reserved_d0[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) EFA_QP_DRIVER_TYPE_SRD = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) struct efa_ibv_create_qp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __u32 rq_ring_size; /* bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) __u32 sq_ring_size; /* bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) __u32 driver_qp_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) struct efa_ibv_create_qp_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) /* the offset inside the page of the rq db */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) __u32 rq_db_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) /* the offset inside the page of the sq db */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) __u32 sq_db_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /* the offset inside the page of descriptors buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) __u32 llq_desc_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) __aligned_u64 rq_mmap_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) __aligned_u64 rq_mmap_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) __aligned_u64 rq_db_mmap_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) __aligned_u64 sq_db_mmap_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) __aligned_u64 llq_desc_mmap_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) __u16 send_sub_cq_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) __u16 recv_sub_cq_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) __u8 reserved_1e0[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) struct efa_ibv_create_ah_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) __u16 efa_address_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) __u8 reserved_30[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) EFA_QUERY_DEVICE_CAPS_RDMA_READ = 1 << 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) EFA_QUERY_DEVICE_CAPS_RNR_RETRY = 1 << 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) struct efa_ibv_ex_query_device_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) __u32 comp_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) __u32 max_sq_wr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) __u32 max_rq_wr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) __u16 max_sq_sge;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) __u16 max_rq_sge;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) __u32 max_rdma_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) __u32 device_caps;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #endif /* EFA_ABI_USER_H */