root/drivers/infiniband/hw/efa/efa_com_cmd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
   2 /*
   3  * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All rights reserved.
   4  */
   5 
   6 #ifndef _EFA_COM_CMD_H_
   7 #define _EFA_COM_CMD_H_
   8 
   9 #include "efa_com.h"
  10 
  11 #define EFA_GID_SIZE 16
  12 
  13 struct efa_com_create_qp_params {
  14         u64 rq_base_addr;
  15         u32 send_cq_idx;
  16         u32 recv_cq_idx;
  17         /*
  18          * Send descriptor ring size in bytes,
  19          * sufficient for user-provided number of WQEs and SGL size
  20          */
  21         u32 sq_ring_size_in_bytes;
  22         /* Max number of WQEs that will be posted on send queue */
  23         u32 sq_depth;
  24         /* Recv descriptor ring size in bytes */
  25         u32 rq_ring_size_in_bytes;
  26         u32 rq_depth;
  27         u16 pd;
  28         u16 uarn;
  29         u8 qp_type;
  30 };
  31 
  32 struct efa_com_create_qp_result {
  33         u32 qp_handle;
  34         u32 qp_num;
  35         u32 sq_db_offset;
  36         u32 rq_db_offset;
  37         u32 llq_descriptors_offset;
  38         u16 send_sub_cq_idx;
  39         u16 recv_sub_cq_idx;
  40 };
  41 
  42 struct efa_com_modify_qp_params {
  43         u32 modify_mask;
  44         u32 qp_handle;
  45         u32 qp_state;
  46         u32 cur_qp_state;
  47         u32 qkey;
  48         u32 sq_psn;
  49         u8 sq_drained_async_notify;
  50 };
  51 
  52 struct efa_com_query_qp_params {
  53         u32 qp_handle;
  54 };
  55 
  56 struct efa_com_query_qp_result {
  57         u32 qp_state;
  58         u32 qkey;
  59         u32 sq_draining;
  60         u32 sq_psn;
  61 };
  62 
  63 struct efa_com_destroy_qp_params {
  64         u32 qp_handle;
  65 };
  66 
  67 struct efa_com_create_cq_params {
  68         /* cq physical base address in OS memory */
  69         dma_addr_t dma_addr;
  70         /* completion queue depth in # of entries */
  71         u16 cq_depth;
  72         u16 num_sub_cqs;
  73         u16 uarn;
  74         u8 entry_size_in_bytes;
  75 };
  76 
  77 struct efa_com_create_cq_result {
  78         /* cq identifier */
  79         u16 cq_idx;
  80         /* actual cq depth in # of entries */
  81         u16 actual_depth;
  82 };
  83 
  84 struct efa_com_destroy_cq_params {
  85         u16 cq_idx;
  86 };
  87 
  88 struct efa_com_create_ah_params {
  89         u16 pdn;
  90         /* Destination address in network byte order */
  91         u8 dest_addr[EFA_GID_SIZE];
  92 };
  93 
  94 struct efa_com_create_ah_result {
  95         u16 ah;
  96 };
  97 
  98 struct efa_com_destroy_ah_params {
  99         u16 ah;
 100         u16 pdn;
 101 };
 102 
 103 struct efa_com_get_network_attr_result {
 104         u8 addr[EFA_GID_SIZE];
 105         u32 mtu;
 106 };
 107 
 108 struct efa_com_get_device_attr_result {
 109         u64 page_size_cap;
 110         u64 max_mr_pages;
 111         u32 fw_version;
 112         u32 admin_api_version;
 113         u32 device_version;
 114         u32 supported_features;
 115         u32 phys_addr_width;
 116         u32 virt_addr_width;
 117         u32 max_qp;
 118         u32 max_sq_depth; /* wqes */
 119         u32 max_rq_depth; /* wqes */
 120         u32 max_cq;
 121         u32 max_cq_depth; /* cqes */
 122         u32 inline_buf_size;
 123         u32 max_mr;
 124         u32 max_pd;
 125         u32 max_ah;
 126         u32 max_llq_size;
 127         u16 sub_cqs_per_cq;
 128         u16 max_sq_sge;
 129         u16 max_rq_sge;
 130         u8 db_bar;
 131 };
 132 
 133 struct efa_com_get_hw_hints_result {
 134         u16 mmio_read_timeout;
 135         u16 driver_watchdog_timeout;
 136         u16 admin_completion_timeout;
 137         u16 poll_interval;
 138         u32 reserved[4];
 139 };
 140 
 141 struct efa_com_mem_addr {
 142         u32 mem_addr_low;
 143         u32 mem_addr_high;
 144 };
 145 
 146 /* Used at indirect mode page list chunks for chaining */
 147 struct efa_com_ctrl_buff_info {
 148         /* indicates length of the buffer pointed by control_buffer_address. */
 149         u32 length;
 150         /* points to control buffer (direct or indirect) */
 151         struct efa_com_mem_addr address;
 152 };
 153 
 154 struct efa_com_reg_mr_params {
 155         /* Memory region length, in bytes. */
 156         u64 mr_length_in_bytes;
 157         /* IO Virtual Address associated with this MR. */
 158         u64 iova;
 159         /* words 8:15: Physical Buffer List, each element is page-aligned. */
 160         union {
 161                 /*
 162                  * Inline array of physical addresses of app pages
 163                  * (optimization for short region reservations)
 164                  */
 165                 u64 inline_pbl_array[4];
 166                 /*
 167                  * Describes the next physically contiguous chunk of indirect
 168                  * page list. A page list contains physical addresses of command
 169                  * data pages. Data pages are 4KB; page list chunks are
 170                  * variable-sized.
 171                  */
 172                 struct efa_com_ctrl_buff_info pbl;
 173         } pbl;
 174         /* number of pages in PBL (redundant, could be calculated) */
 175         u32 page_num;
 176         /* Protection Domain */
 177         u16 pd;
 178         /*
 179          * phys_page_size_shift - page size is (1 << phys_page_size_shift)
 180          * Page size is used for building the Virtual to Physical
 181          * address mapping
 182          */
 183         u8 page_shift;
 184         /*
 185          * permissions
 186          * 0: local_write_enable - Write permissions: value of 1 needed
 187          * for RQ buffers and for RDMA write:1: reserved1 - remote
 188          * access flags, etc
 189          */
 190         u8 permissions;
 191         u8 inline_pbl;
 192         u8 indirect;
 193 };
 194 
 195 struct efa_com_reg_mr_result {
 196         /*
 197          * To be used in conjunction with local buffers references in SQ and
 198          * RQ WQE
 199          */
 200         u32 l_key;
 201         /*
 202          * To be used in incoming RDMA semantics messages to refer to remotely
 203          * accessed memory region
 204          */
 205         u32 r_key;
 206 };
 207 
 208 struct efa_com_dereg_mr_params {
 209         u32 l_key;
 210 };
 211 
 212 struct efa_com_alloc_pd_result {
 213         u16 pdn;
 214 };
 215 
 216 struct efa_com_dealloc_pd_params {
 217         u16 pdn;
 218 };
 219 
 220 struct efa_com_alloc_uar_result {
 221         u16 uarn;
 222 };
 223 
 224 struct efa_com_dealloc_uar_params {
 225         u16 uarn;
 226 };
 227 
 228 struct efa_com_get_stats_params {
 229         /* see enum efa_admin_get_stats_type */
 230         u8 type;
 231         /* see enum efa_admin_get_stats_scope */
 232         u8 scope;
 233         u16 scope_modifier;
 234 };
 235 
 236 struct efa_com_basic_stats {
 237         u64 tx_bytes;
 238         u64 tx_pkts;
 239         u64 rx_bytes;
 240         u64 rx_pkts;
 241         u64 rx_drops;
 242 };
 243 
 244 union efa_com_get_stats_result {
 245         struct efa_com_basic_stats basic_stats;
 246 };
 247 
 248 void efa_com_set_dma_addr(dma_addr_t addr, u32 *addr_high, u32 *addr_low);
 249 int efa_com_create_qp(struct efa_com_dev *edev,
 250                       struct efa_com_create_qp_params *params,
 251                       struct efa_com_create_qp_result *res);
 252 int efa_com_modify_qp(struct efa_com_dev *edev,
 253                       struct efa_com_modify_qp_params *params);
 254 int efa_com_query_qp(struct efa_com_dev *edev,
 255                      struct efa_com_query_qp_params *params,
 256                      struct efa_com_query_qp_result *result);
 257 int efa_com_destroy_qp(struct efa_com_dev *edev,
 258                        struct efa_com_destroy_qp_params *params);
 259 int efa_com_create_cq(struct efa_com_dev *edev,
 260                       struct efa_com_create_cq_params *params,
 261                       struct efa_com_create_cq_result *result);
 262 int efa_com_destroy_cq(struct efa_com_dev *edev,
 263                        struct efa_com_destroy_cq_params *params);
 264 int efa_com_register_mr(struct efa_com_dev *edev,
 265                         struct efa_com_reg_mr_params *params,
 266                         struct efa_com_reg_mr_result *result);
 267 int efa_com_dereg_mr(struct efa_com_dev *edev,
 268                      struct efa_com_dereg_mr_params *params);
 269 int efa_com_create_ah(struct efa_com_dev *edev,
 270                       struct efa_com_create_ah_params *params,
 271                       struct efa_com_create_ah_result *result);
 272 int efa_com_destroy_ah(struct efa_com_dev *edev,
 273                        struct efa_com_destroy_ah_params *params);
 274 int efa_com_get_network_attr(struct efa_com_dev *edev,
 275                              struct efa_com_get_network_attr_result *result);
 276 int efa_com_get_device_attr(struct efa_com_dev *edev,
 277                             struct efa_com_get_device_attr_result *result);
 278 int efa_com_get_hw_hints(struct efa_com_dev *edev,
 279                          struct efa_com_get_hw_hints_result *result);
 280 int efa_com_set_aenq_config(struct efa_com_dev *edev, u32 groups);
 281 int efa_com_alloc_pd(struct efa_com_dev *edev,
 282                      struct efa_com_alloc_pd_result *result);
 283 int efa_com_dealloc_pd(struct efa_com_dev *edev,
 284                        struct efa_com_dealloc_pd_params *params);
 285 int efa_com_alloc_uar(struct efa_com_dev *edev,
 286                       struct efa_com_alloc_uar_result *result);
 287 int efa_com_dealloc_uar(struct efa_com_dev *edev,
 288                         struct efa_com_dealloc_uar_params *params);
 289 int efa_com_get_stats(struct efa_com_dev *edev,
 290                       struct efa_com_get_stats_params *params,
 291                       union efa_com_get_stats_result *result);
 292 
 293 #endif /* _EFA_COM_CMD_H_ */

/* [<][>][^][v][top][bottom][index][help] */