365 lines · c
1/*2 * Broadcom NetXtreme-E RoCE driver.3 *4 * Copyright (c) 2016 - 2017, Broadcom. All rights reserved. The term5 * Broadcom refers to Broadcom Limited and/or its subsidiaries.6 *7 * This software is available to you under a choice of one of two8 * licenses. You may choose to be licensed under the terms of the GNU9 * General Public License (GPL) Version 2, available from the file10 * COPYING in the main directory of this source tree, or the11 * BSD license below:12 *13 * Redistribution and use in source and binary forms, with or without14 * modification, are permitted provided that the following conditions15 * are met:16 *17 * 1. Redistributions of source code must retain the above copyright18 * notice, this list of conditions and the following disclaimer.19 * 2. Redistributions in binary form must reproduce the above copyright20 * notice, this list of conditions and the following disclaimer in21 * the documentation and/or other materials provided with the22 * distribution.23 *24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,26 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR27 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS28 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR31 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,32 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE33 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN34 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.35 *36 * Description: Slow Path Operators (header)37 *38 */39 40#ifndef __BNXT_QPLIB_SP_H__41#define __BNXT_QPLIB_SP_H__42 43#include <rdma/bnxt_re-abi.h>44#define BNXT_QPLIB_RESERVED_QP_WRS 12845 46struct bnxt_qplib_dev_attr {47#define FW_VER_ARR_LEN 448 u8 fw_ver[FW_VER_ARR_LEN];49#define BNXT_QPLIB_NUM_GIDS_SUPPORTED 25650 u16 max_sgid;51 u16 max_mrw;52 u32 max_qp;53#define BNXT_QPLIB_MAX_OUT_RD_ATOM 12654 u32 max_qp_rd_atom;55 u32 max_qp_init_rd_atom;56 u32 max_qp_wqes;57 u32 max_qp_sges;58 u32 max_cq;59#define BNXT_QPLIB_MAX_CQ_WQES 0xfffff60 u32 max_cq_wqes;61 u32 max_cq_sges;62 u32 max_mr;63 u64 max_mr_size;64 u32 max_pd;65 u32 max_mw;66 u32 max_raw_ethy_qp;67 u32 max_ah;68 u32 max_srq;69 u32 max_srq_wqes;70 u32 max_srq_sges;71 u32 max_pkey;72 u32 max_inline_data;73 u32 l2_db_size;74 u8 tqm_alloc_reqs[MAX_TQM_ALLOC_REQ];75 bool is_atomic;76 u16 dev_cap_flags;77 u16 dev_cap_flags2;78 u32 max_dpi;79};80 81struct bnxt_qplib_pd {82 u32 id;83};84 85struct bnxt_qplib_gid {86 u8 data[16];87};88 89struct bnxt_qplib_gid_info {90 struct bnxt_qplib_gid gid;91 u16 vlan_id;92};93 94struct bnxt_qplib_ah {95 struct bnxt_qplib_gid dgid;96 struct bnxt_qplib_pd *pd;97 u32 id;98 u8 sgid_index;99 /* For Query AH if the hw table and SW table are differnt */100 u8 host_sgid_index;101 u8 traffic_class;102 u32 flow_label;103 u8 hop_limit;104 u8 sl;105 u8 dmac[6];106 u16 vlan_id;107 u8 nw_type;108};109 110struct bnxt_qplib_mrw {111 struct bnxt_qplib_pd *pd;112 int type;113 u32 access_flags;114#define BNXT_QPLIB_FR_PMR 0x80000000115 u32 lkey;116 u32 rkey;117#define BNXT_QPLIB_RSVD_LKEY 0xFFFFFFFF118 u64 va;119 u64 total_size;120 u32 npages;121 u16 flags;122 u64 mr_handle;123 struct bnxt_qplib_hwq hwq;124};125 126struct bnxt_qplib_frpl {127 int max_pg_ptrs;128 struct bnxt_qplib_hwq hwq;129};130 131#define BNXT_QPLIB_ACCESS_LOCAL_WRITE BIT(0)132#define BNXT_QPLIB_ACCESS_REMOTE_READ BIT(1)133#define BNXT_QPLIB_ACCESS_REMOTE_WRITE BIT(2)134#define BNXT_QPLIB_ACCESS_REMOTE_ATOMIC BIT(3)135#define BNXT_QPLIB_ACCESS_MW_BIND BIT(4)136#define BNXT_QPLIB_ACCESS_ZERO_BASED BIT(5)137#define BNXT_QPLIB_ACCESS_ON_DEMAND BIT(6)138 139struct bnxt_qplib_roce_stats {140 u64 to_retransmits;141 u64 seq_err_naks_rcvd;142 /* seq_err_naks_rcvd is 64 b */143 u64 max_retry_exceeded;144 /* max_retry_exceeded is 64 b */145 u64 rnr_naks_rcvd;146 /* rnr_naks_rcvd is 64 b */147 u64 missing_resp;148 u64 unrecoverable_err;149 /* unrecoverable_err is 64 b */150 u64 bad_resp_err;151 /* bad_resp_err is 64 b */152 u64 local_qp_op_err;153 /* local_qp_op_err is 64 b */154 u64 local_protection_err;155 /* local_protection_err is 64 b */156 u64 mem_mgmt_op_err;157 /* mem_mgmt_op_err is 64 b */158 u64 remote_invalid_req_err;159 /* remote_invalid_req_err is 64 b */160 u64 remote_access_err;161 /* remote_access_err is 64 b */162 u64 remote_op_err;163 /* remote_op_err is 64 b */164 u64 dup_req;165 /* dup_req is 64 b */166 u64 res_exceed_max;167 /* res_exceed_max is 64 b */168 u64 res_length_mismatch;169 /* res_length_mismatch is 64 b */170 u64 res_exceeds_wqe;171 /* res_exceeds_wqe is 64 b */172 u64 res_opcode_err;173 /* res_opcode_err is 64 b */174 u64 res_rx_invalid_rkey;175 /* res_rx_invalid_rkey is 64 b */176 u64 res_rx_domain_err;177 /* res_rx_domain_err is 64 b */178 u64 res_rx_no_perm;179 /* res_rx_no_perm is 64 b */180 u64 res_rx_range_err;181 /* res_rx_range_err is 64 b */182 u64 res_tx_invalid_rkey;183 /* res_tx_invalid_rkey is 64 b */184 u64 res_tx_domain_err;185 /* res_tx_domain_err is 64 b */186 u64 res_tx_no_perm;187 /* res_tx_no_perm is 64 b */188 u64 res_tx_range_err;189 /* res_tx_range_err is 64 b */190 u64 res_irrq_oflow;191 /* res_irrq_oflow is 64 b */192 u64 res_unsup_opcode;193 /* res_unsup_opcode is 64 b */194 u64 res_unaligned_atomic;195 /* res_unaligned_atomic is 64 b */196 u64 res_rem_inv_err;197 /* res_rem_inv_err is 64 b */198 u64 res_mem_error;199 /* res_mem_error is 64 b */200 u64 res_srq_err;201 /* res_srq_err is 64 b */202 u64 res_cmp_err;203 /* res_cmp_err is 64 b */204 u64 res_invalid_dup_rkey;205 /* res_invalid_dup_rkey is 64 b */206 u64 res_wqe_format_err;207 /* res_wqe_format_err is 64 b */208 u64 res_cq_load_err;209 /* res_cq_load_err is 64 b */210 u64 res_srq_load_err;211 /* res_srq_load_err is 64 b */212 u64 res_tx_pci_err;213 /* res_tx_pci_err is 64 b */214 u64 res_rx_pci_err;215 /* res_rx_pci_err is 64 b */216 u64 res_oos_drop_count;217 /* res_oos_drop_count */218 u64 active_qp_count_p0;219 /* port 0 active qps */220 u64 active_qp_count_p1;221 /* port 1 active qps */222 u64 active_qp_count_p2;223 /* port 2 active qps */224 u64 active_qp_count_p3;225 /* port 3 active qps */226};227 228struct bnxt_qplib_ext_stat {229 u64 tx_atomic_req;230 u64 tx_read_req;231 u64 tx_read_res;232 u64 tx_write_req;233 u64 tx_send_req;234 u64 tx_roce_pkts;235 u64 tx_roce_bytes;236 u64 rx_atomic_req;237 u64 rx_read_req;238 u64 rx_read_res;239 u64 rx_write_req;240 u64 rx_send_req;241 u64 rx_roce_pkts;242 u64 rx_roce_bytes;243 u64 rx_roce_good_pkts;244 u64 rx_roce_good_bytes;245 u64 rx_out_of_buffer;246 u64 rx_out_of_sequence;247 u64 tx_cnp;248 u64 rx_cnp;249 u64 rx_ecn_marked;250};251 252struct bnxt_qplib_cc_param_ext {253 u64 ext_mask;254 u16 inact_th_hi;255 u16 min_delta_cnp;256 u16 init_cp;257 u8 tr_update_mode;258 u8 tr_update_cyls;259 u8 fr_rtt;260 u8 ai_rate_incr;261 u16 rr_rtt_th;262 u16 ar_cr_th;263 u16 cr_min_th;264 u8 bw_avg_weight;265 u8 cr_factor;266 u16 cr_th_max_cp;267 u8 cp_bias_en;268 u8 cp_bias;269 u8 cnp_ecn;270 u8 rtt_jitter_en;271 u16 bytes_per_usec;272 u16 cc_cr_reset_th;273 u8 cr_width;274 u8 min_quota;275 u8 max_quota;276 u8 abs_max_quota;277 u16 tr_lb;278 u8 cr_prob_fac;279 u8 tr_prob_fac;280 u16 fair_cr_th;281 u8 red_div;282 u8 cnp_ratio_th;283 u16 ai_ext_rtt;284 u8 exp_crcp_ratio;285 u8 low_rate_en;286 u16 cpcr_update_th;287 u16 ai_rtt_th1;288 u16 ai_rtt_th2;289 u16 cf_rtt_th;290 u16 sc_cr_th1; /* severe congestion cr threshold 1 */291 u16 sc_cr_th2; /* severe congestion cr threshold 2 */292 u32 l64B_per_rtt;293 u8 cc_ack_bytes;294 u16 reduce_cf_rtt_th;295};296 297struct bnxt_qplib_cc_param {298 u8 alt_vlan_pcp;299 u16 alt_tos_dscp;300 u8 cc_mode;301 u8 enable;302 u16 inact_th;303 u16 init_cr;304 u16 init_tr;305 u16 rtt;306 u8 g;307 u8 nph_per_state;308 u8 time_pph;309 u8 pkts_pph;310 u8 tos_ecn;311 u8 tos_dscp;312 u16 tcp_cp;313 struct bnxt_qplib_cc_param_ext cc_ext;314 u32 mask;315};316 317int bnxt_qplib_get_sgid(struct bnxt_qplib_res *res,318 struct bnxt_qplib_sgid_tbl *sgid_tbl, int index,319 struct bnxt_qplib_gid *gid);320int bnxt_qplib_del_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,321 struct bnxt_qplib_gid *gid, u16 vlan_id, bool update);322int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,323 struct bnxt_qplib_gid *gid, const u8 *mac, u16 vlan_id,324 bool update, u32 *index);325int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,326 struct bnxt_qplib_gid *gid, u16 gid_idx,327 const u8 *smac);328int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,329 struct bnxt_qplib_dev_attr *attr);330int bnxt_qplib_set_func_resources(struct bnxt_qplib_res *res,331 struct bnxt_qplib_rcfw *rcfw,332 struct bnxt_qplib_ctx *ctx);333int bnxt_qplib_create_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah *ah,334 bool block);335int bnxt_qplib_destroy_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah *ah,336 bool block);337int bnxt_qplib_alloc_mrw(struct bnxt_qplib_res *res,338 struct bnxt_qplib_mrw *mrw);339int bnxt_qplib_dereg_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw,340 bool block);341int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,342 struct ib_umem *umem, int num_pbls, u32 buf_pg_size);343int bnxt_qplib_free_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr);344int bnxt_qplib_alloc_fast_reg_mr(struct bnxt_qplib_res *res,345 struct bnxt_qplib_mrw *mr, int max);346int bnxt_qplib_alloc_fast_reg_page_list(struct bnxt_qplib_res *res,347 struct bnxt_qplib_frpl *frpl, int max);348int bnxt_qplib_free_fast_reg_page_list(struct bnxt_qplib_res *res,349 struct bnxt_qplib_frpl *frpl);350int bnxt_qplib_get_roce_stats(struct bnxt_qplib_rcfw *rcfw,351 struct bnxt_qplib_roce_stats *stats);352int bnxt_qplib_qext_stat(struct bnxt_qplib_rcfw *rcfw, u32 fid,353 struct bnxt_qplib_ext_stat *estat);354int bnxt_qplib_modify_cc(struct bnxt_qplib_res *res,355 struct bnxt_qplib_cc_param *cc_param);356 357#define BNXT_VAR_MAX_WQE 4352358#define BNXT_VAR_MAX_SLOT_ALIGN 256359#define BNXT_VAR_MAX_SGE 13360#define BNXT_RE_MAX_RQ_WQES 65536361 362#define BNXT_STATIC_MAX_SGE 6363 364#endif /* __BNXT_QPLIB_SP_H__*/365