brintos

brintos / linux-shallow public Read only

0
0
Text · 9.9 KiB · ecf3f45 Raw
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