1316485Sdavidcs/*
2316485Sdavidcs * Copyright (c) 2017-2018 Cavium, Inc.
3316485Sdavidcs * All rights reserved.
4316485Sdavidcs *
5316485Sdavidcs *  Redistribution and use in source and binary forms, with or without
6316485Sdavidcs *  modification, are permitted provided that the following conditions
7316485Sdavidcs *  are met:
8316485Sdavidcs *
9316485Sdavidcs *  1. Redistributions of source code must retain the above copyright
10316485Sdavidcs *     notice, this list of conditions and the following disclaimer.
11316485Sdavidcs *  2. Redistributions in binary form must reproduce the above copyright
12316485Sdavidcs *     notice, this list of conditions and the following disclaimer in the
13316485Sdavidcs *     documentation and/or other materials provided with the distribution.
14316485Sdavidcs *
15316485Sdavidcs *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16316485Sdavidcs *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17316485Sdavidcs *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18316485Sdavidcs *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19316485Sdavidcs *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20316485Sdavidcs *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21316485Sdavidcs *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22316485Sdavidcs *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23316485Sdavidcs *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24316485Sdavidcs *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25316485Sdavidcs *  POSSIBILITY OF SUCH DAMAGE.
26316485Sdavidcs *
27316485Sdavidcs * $FreeBSD: stable/10/sys/dev/qlnx/qlnxe/ecore_proto_if.h 337519 2018-08-09 01:39:47Z davidcs $
28316485Sdavidcs *
29316485Sdavidcs */
30316485Sdavidcs
31316485Sdavidcs#ifndef __ECORE_PROTO_IF_H__
32316485Sdavidcs#define __ECORE_PROTO_IF_H__
33316485Sdavidcs
34316485Sdavidcs/*
35316485Sdavidcs * PF parameters (according to personality/protocol)
36316485Sdavidcs */
37316485Sdavidcs
38316485Sdavidcs#define ECORE_ROCE_PROTOCOL_INDEX	(3)
39316485Sdavidcs
40316485Sdavidcsstruct ecore_eth_pf_params {
41316485Sdavidcs	/* The following parameters are used during HW-init
42316485Sdavidcs	 * and these parameters need to be passed as arguments
43316485Sdavidcs	 * to update_pf_params routine invoked before slowpath start
44316485Sdavidcs	 */
45316485Sdavidcs	u16	num_cons;
46316485Sdavidcs
47316485Sdavidcs	/* per-VF number of CIDs */
48316485Sdavidcs	u8	num_vf_cons;
49316485Sdavidcs#define ETH_PF_PARAMS_VF_CONS_DEFAULT	(32)
50316485Sdavidcs
51316485Sdavidcs	/* To enable arfs, previous to HW-init a positive number needs to be
52316485Sdavidcs	 * set [as filters require allocated searcher ILT memory].
53316485Sdavidcs	 * This will set the maximal number of configured steering-filters.
54316485Sdavidcs	 */
55316485Sdavidcs	u32	num_arfs_filters;
56316485Sdavidcs};
57316485Sdavidcs
58316485Sdavidcs/* Most of the the parameters below are described in the FW FCoE HSI */
59316485Sdavidcsstruct ecore_fcoe_pf_params {
60316485Sdavidcs	/* The following parameters are used during protocol-init */
61316485Sdavidcs	u64		glbl_q_params_addr;
62316485Sdavidcs	u64		bdq_pbl_base_addr[2];
63316485Sdavidcs
64316485Sdavidcs	/* The following parameters are used during HW-init
65316485Sdavidcs	 * and these parameters need to be passed as arguments
66316485Sdavidcs	 * to update_pf_params routine invoked before slowpath start
67316485Sdavidcs	 */
68316485Sdavidcs	u16		num_cons;
69316485Sdavidcs	u16		num_tasks;
70316485Sdavidcs
71316485Sdavidcs	/* The following parameters are used during protocol-init */
72316485Sdavidcs	u16		sq_num_pbl_pages;
73316485Sdavidcs
74316485Sdavidcs	u16		cq_num_entries;
75316485Sdavidcs	u16		cmdq_num_entries;
76316485Sdavidcs	u16		rq_buffer_log_size;
77316485Sdavidcs	u16		mtu;
78316485Sdavidcs	u16		dummy_icid;
79316485Sdavidcs	u16		bdq_xoff_threshold[2];
80316485Sdavidcs	u16		bdq_xon_threshold[2];
81316485Sdavidcs	u16		rq_buffer_size;
82316485Sdavidcs	u8		num_cqs; /* num of global CQs */
83316485Sdavidcs	u8		log_page_size;
84316485Sdavidcs	u8		gl_rq_pi;
85316485Sdavidcs	u8		gl_cmd_pi;
86316485Sdavidcs	u8		debug_mode;
87316485Sdavidcs	u8		is_target;
88316485Sdavidcs	u8		bdq_pbl_num_entries[2];
89316485Sdavidcs};
90316485Sdavidcs
91316485Sdavidcs/* Most of the the parameters below are described in the FW iSCSI / TCP HSI */
92316485Sdavidcsstruct ecore_iscsi_pf_params {
93316485Sdavidcs
94316485Sdavidcs	u64		glbl_q_params_addr;
95320162Sdavidcs	u64		bdq_pbl_base_addr[3];
96316485Sdavidcs	u16		cq_num_entries;
97316485Sdavidcs	u16		cmdq_num_entries;
98316485Sdavidcs	u32		two_msl_timer;
99316485Sdavidcs	u16		tx_sws_timer;
100316485Sdavidcs	/* The following parameters are used during HW-init
101316485Sdavidcs	 * and these parameters need to be passed as arguments
102316485Sdavidcs	 * to update_pf_params routine invoked before slowpath start
103316485Sdavidcs	 */
104316485Sdavidcs	u16		num_cons;
105316485Sdavidcs	u16		num_tasks;
106316485Sdavidcs
107316485Sdavidcs	/* The following parameters are used during protocol-init */
108316485Sdavidcs	u16		half_way_close_timeout;
109320162Sdavidcs	u16		bdq_xoff_threshold[3];
110320162Sdavidcs	u16		bdq_xon_threshold[3];
111316485Sdavidcs	u16		cmdq_xoff_threshold;
112316485Sdavidcs	u16		cmdq_xon_threshold;
113316485Sdavidcs	u16		rq_buffer_size;
114316485Sdavidcs
115316485Sdavidcs	u8		num_sq_pages_in_ring;
116316485Sdavidcs	u8		num_r2tq_pages_in_ring;
117316485Sdavidcs	u8		num_uhq_pages_in_ring;
118316485Sdavidcs	u8		num_queues;
119316485Sdavidcs	u8		log_page_size;
120316485Sdavidcs	u8		rqe_log_size;
121316485Sdavidcs	u8		max_fin_rt;
122316485Sdavidcs	u8		gl_rq_pi;
123316485Sdavidcs	u8		gl_cmd_pi;
124316485Sdavidcs	u8		debug_mode;
125316485Sdavidcs	u8		ll2_ooo_queue_id;
126316485Sdavidcs
127316485Sdavidcs	u8		is_target;
128337519Sdavidcs	u8		is_soc_en;
129337519Sdavidcs	u8		soc_num_of_blocks_log;
130320162Sdavidcs	u8		bdq_pbl_num_entries[3];
131337519Sdavidcs	u8		disable_stats_collection;
132316485Sdavidcs};
133316485Sdavidcs
134316485Sdavidcsenum ecore_rdma_protocol {
135316485Sdavidcs	ECORE_RDMA_PROTOCOL_DEFAULT,
136316485Sdavidcs	ECORE_RDMA_PROTOCOL_NONE,
137316485Sdavidcs	ECORE_RDMA_PROTOCOL_ROCE,
138316485Sdavidcs	ECORE_RDMA_PROTOCOL_IWARP,
139316485Sdavidcs};
140316485Sdavidcs
141316485Sdavidcsstruct ecore_rdma_pf_params {
142316485Sdavidcs	/* Supplied to ECORE during resource allocation (may affect the ILT and
143316485Sdavidcs	 * the doorbell BAR).
144316485Sdavidcs	 */
145316485Sdavidcs	u32		min_dpis;	/* number of requested DPIs */
146316485Sdavidcs	u32		num_qps;	/* number of requested Queue Pairs */
147337519Sdavidcs	u32		num_srqs;	/* number of requested SRQs */
148337519Sdavidcs	u32		num_xrc_srqs;	/* number of requested XRC SRQs */
149316485Sdavidcs	u8		roce_edpm_mode; /* see QED_ROCE_EDPM_MODE_ENABLE */
150316485Sdavidcs	u8		gl_pi;		/* protocol index */
151316485Sdavidcs
152316485Sdavidcs	/* Will allocate rate limiters to be used with QPs */
153316485Sdavidcs	u8		enable_dcqcn;
154316485Sdavidcs
155316485Sdavidcs	/* Max number of CNQs - limits number of ECORE_RDMA_CNQ feature,
156316485Sdavidcs	 * Allowing an incrementation in ECORE_PF_L2_QUE.
157316485Sdavidcs	 * To disable CNQs, use dedicated value instead of `0'.
158316485Sdavidcs	 */
159316485Sdavidcs#define ECORE_RDMA_PF_PARAMS_CNQS_NONE	(0xffff)
160316485Sdavidcs	u16		max_cnqs;
161316485Sdavidcs
162316485Sdavidcs	/* TCP port number used for the iwarp traffic */
163316485Sdavidcs	u16		iwarp_port;
164316485Sdavidcs	enum ecore_rdma_protocol rdma_protocol;
165316485Sdavidcs};
166316485Sdavidcs
167316485Sdavidcsstruct ecore_pf_params {
168316485Sdavidcs	struct ecore_eth_pf_params	eth_pf_params;
169316485Sdavidcs	struct ecore_fcoe_pf_params	fcoe_pf_params;
170316485Sdavidcs	struct ecore_iscsi_pf_params	iscsi_pf_params;
171316485Sdavidcs	struct ecore_rdma_pf_params	rdma_pf_params;
172316485Sdavidcs};
173316485Sdavidcs
174316485Sdavidcs#endif
175316485Sdavidcs
176316485Sdavidcs
177