2 * Copyright (c) 2016 QLogic Corporation.
6 * See LICENSE.qede_pmd for copyright and licensing details.
9 #ifndef _INIT_FW_FUNCS_H
10 #define _INIT_FW_FUNCS_H
11 /* Forward declarations */
13 struct init_qm_pq_params;
16 * @brief ecore_qm_pf_mem_size - Prepare QM ILT sizes
18 * Returns the required host memory size in 4KB units.
19 * Must be called before all QM init HSI functions.
21 * @param num_pf_cids - number of connections used by this PF
22 * @param num_vf_cids - number of connections used by VFs of this PF
23 * @param num_tids - number of tasks used by this PF
24 * @param num_pf_pqs - number of PQs used by this PF
25 * @param num_vf_pqs - number of PQs used by VFs of this PF
27 * @return The required host memory size in 4KB units.
29 u32 ecore_qm_pf_mem_size(u32 num_pf_cids,
36 * @brief ecore_qm_common_rt_init - Prepare QM runtime init values for engine
40 * @param max_ports_per_engine - max number of ports per engine in HW
41 * @param max_phys_tcs_per_port - max number of physical TCs per port in HW
42 * @param pf_rl_en - enable per-PF rate limiters
43 * @param pf_wfq_en - enable per-PF WFQ
44 * @param vport_rl_en - enable per-VPORT rate limiters
45 * @param vport_wfq_en - enable per-VPORT WFQ
46 * @param port_params - array of size MAX_NUM_PORTS with params for each port
48 * @return 0 on success, -1 on error.
50 int ecore_qm_common_rt_init(struct ecore_hwfn *p_hwfn,
51 u8 max_ports_per_engine,
52 u8 max_phys_tcs_per_port,
57 struct init_qm_port_params port_params[MAX_NUM_PORTS]);
60 * @brief ecore_qm_pf_rt_init Prepare QM runtime init values for the PF phase
63 * @param p_ptt - ptt window used for writing the registers
64 * @param pf_id - PF ID
65 * @param max_phys_tcs_per_port - max number of physical TCs per port in HW
66 * @param is_pf_loading - indicates if the PF is currently loading,
67 * i.e. it has no allocated QM resources.
68 * @param num_pf_cids - number of connections used by this PF
69 * @param num_vf_cids - number of connections used by VFs of this PF
70 * @param num_tids - number of tasks used by this PF
71 * @param start_pq - first Tx PQ ID associated with this PF
72 * @param num_pf_pqs - number of Tx PQs associated with this PF
74 * @param num_vf_pqs - number of Tx PQs associated with a VF
75 * @param start_vport - first VPORT ID associated with this PF
76 * @param num_vports - number of VPORTs associated with this PF
77 * @param pf_wfq - WFQ weight. if PF WFQ is globally disabled, the weight must
78 * be 0. otherwise, the weight must be non-zero.
79 * @param pf_rl - rate limit in Mb/sec units. a value of 0 means don't
80 * configure. ignored if PF RL is globally disabled.
81 * @param link_speed - link speed in Mbps.
82 * @param pq_params - array of size (num_pf_pqs+num_vf_pqs) with parameters for
83 * each Tx PQ associated with the specified PF.
84 * @param vport_params - array of size num_vports with parameters for each
87 * @return 0 on success, -1 on error.
89 int ecore_qm_pf_rt_init(struct ecore_hwfn *p_hwfn,
90 struct ecore_ptt *p_ptt,
92 u8 max_phys_tcs_per_port,
105 struct init_qm_pq_params *pq_params,
106 struct init_qm_vport_params *vport_params);
109 * @brief ecore_init_pf_wfq Initializes the WFQ weight of the specified PF
112 * @param p_ptt - ptt window used for writing the registers
113 * @param pf_id - PF ID
114 * @param pf_wfq - WFQ weight. Must be non-zero.
116 * @return 0 on success, -1 on error.
118 int ecore_init_pf_wfq(struct ecore_hwfn *p_hwfn,
119 struct ecore_ptt *p_ptt,
124 * @brief ecore_init_pf_rl - Initializes the rate limit of the specified PF
127 * @param p_ptt - ptt window used for writing the registers
128 * @param pf_id - PF ID
129 * @param pf_rl - rate limit in Mb/sec units
131 * @return 0 on success, -1 on error.
133 int ecore_init_pf_rl(struct ecore_hwfn *p_hwfn,
134 struct ecore_ptt *p_ptt,
139 * @brief ecore_init_vport_wfq Initializes the WFQ weight of specified VPORT
142 * @param p_ptt - ptt window used for writing the registers
143 * @param first_tx_pq_id- An array containing the first Tx PQ ID associated
144 * with the VPORT for each TC. This array is filled by
145 * ecore_qm_pf_rt_init
146 * @param vport_wfq - WFQ weight. Must be non-zero.
148 * @return 0 on success, -1 on error.
150 int ecore_init_vport_wfq(struct ecore_hwfn *p_hwfn,
151 struct ecore_ptt *p_ptt,
152 u16 first_tx_pq_id[NUM_OF_TCS],
156 * @brief ecore_init_vport_rl - Initializes the rate limit of the specified
159 * @param p_hwfn - HW device data
160 * @param p_ptt - ptt window used for writing the registers
161 * @param vport_id - VPORT ID
162 * @param vport_rl - rate limit in Mb/sec units
163 * @param link_speed - link speed in Mbps.
165 * @return 0 on success, -1 on error.
167 int ecore_init_vport_rl(struct ecore_hwfn *p_hwfn,
168 struct ecore_ptt *p_ptt,
174 * @brief ecore_send_qm_stop_cmd Sends a stop command to the QM
177 * @param p_ptt - ptt window used for writing the registers
178 * @param is_release_cmd - true for release, false for stop.
179 * @param is_tx_pq - true for Tx PQs, false for Other PQs.
180 * @param start_pq - first PQ ID to stop
181 * @param num_pqs - Number of PQs to stop, starting from start_pq.
183 * @return bool, true if successful, false if timeout occurred while waiting
184 * for QM command done.
186 bool ecore_send_qm_stop_cmd(struct ecore_hwfn *p_hwfn,
187 struct ecore_ptt *p_ptt,
192 #ifndef UNUSED_HSI_FUNC
195 * @brief ecore_init_nig_ets - initializes the NIG ETS arbiter
197 * Based on weight/priority requirements per-TC.
199 * @param p_ptt - ptt window used for writing the registers.
200 * @param req - the NIG ETS initialization requirements.
201 * @param is_lb - if set, the loopback port arbiter is initialized, otherwise
202 * the physical port arbiter is initialized. The pure-LB TC
203 * requirements are ignored when is_lb is cleared.
205 void ecore_init_nig_ets(struct ecore_hwfn *p_hwfn,
206 struct ecore_ptt *p_ptt,
207 struct init_ets_req *req,
211 * @brief ecore_init_nig_lb_rl - initializes the NIG LB RLs
213 * Based on global and per-TC rate requirements
215 * @param p_ptt - ptt window used for writing the registers.
216 * @param req - the NIG LB RLs initialization requirements.
218 void ecore_init_nig_lb_rl(struct ecore_hwfn *p_hwfn,
219 struct ecore_ptt *p_ptt,
220 struct init_nig_lb_rl_req *req);
221 #endif /* UNUSED_HSI_FUNC */
224 * @brief ecore_init_nig_pri_tc_map - initializes the NIG priority to TC map.
226 * Assumes valid arguments.
228 * @param p_ptt - ptt window used for writing the registers.
229 * @param req - required mapping from prioirties to TCs.
231 void ecore_init_nig_pri_tc_map(struct ecore_hwfn *p_hwfn,
232 struct ecore_ptt *p_ptt,
233 struct init_nig_pri_tc_map_req *req);
235 #ifndef UNUSED_HSI_FUNC
237 * @brief ecore_init_prs_ets - initializes the PRS Rx ETS arbiter
239 * Based on weight/priority requirements per-TC.
241 * @param p_ptt - ptt window used for writing the registers.
242 * @param req - the PRS ETS initialization requirements.
244 void ecore_init_prs_ets(struct ecore_hwfn *p_hwfn,
245 struct ecore_ptt *p_ptt,
246 struct init_ets_req *req);
247 #endif /* UNUSED_HSI_FUNC */
249 #ifndef UNUSED_HSI_FUNC
251 * @brief ecore_init_brb_ram - initializes BRB RAM sizes per TC
253 * Based on weight/priority requirements per-TC.
255 * @param p_ptt - ptt window used for writing the registers.
256 * @param req - the BRB RAM initialization requirements.
258 void ecore_init_brb_ram(struct ecore_hwfn *p_hwfn,
259 struct ecore_ptt *p_ptt,
260 struct init_brb_ram_req *req);
261 #endif /* UNUSED_HSI_FUNC */
264 * @brief ecore_set_vxlan_no_l2_enable - enable or disable VXLAN no L2 parsing
266 * @param p_ptt - ptt window used for writing the registers.
267 * @param enable - VXLAN no L2 enable flag.
269 void ecore_set_vxlan_no_l2_enable(struct ecore_hwfn *p_hwfn,
270 struct ecore_ptt *p_ptt,
273 #ifndef UNUSED_HSI_FUNC
275 * @brief ecore_set_port_mf_ovlan_eth_type - initializes DORQ ethType Regs to
276 * input ethType should Be called
279 * @param p_hwfn - HW device data
280 * @param ethType - etherType to configure
282 void ecore_set_port_mf_ovlan_eth_type(struct ecore_hwfn *p_hwfn,
284 #endif /* UNUSED_HSI_FUNC */
287 * @brief ecore_set_vxlan_dest_port - initializes vxlan tunnel destination udp
290 * @param p_ptt - ptt window used for writing the registers.
291 * @param dest_port - vxlan destination udp port.
293 void ecore_set_vxlan_dest_port(struct ecore_hwfn *p_hwfn,
294 struct ecore_ptt *p_ptt,
298 * @brief ecore_set_vxlan_enable - enable or disable VXLAN tunnel in HW
300 * @param p_ptt - ptt window used for writing the registers.
301 * @param vxlan_enable - vxlan enable flag.
303 void ecore_set_vxlan_enable(struct ecore_hwfn *p_hwfn,
304 struct ecore_ptt *p_ptt,
308 * @brief ecore_set_gre_enable - enable or disable GRE tunnel in HW
310 * @param p_ptt - ptt window used for writing the registers.
311 * @param eth_gre_enable - eth GRE enable enable flag.
312 * @param ip_gre_enable - IP GRE enable enable flag.
314 void ecore_set_gre_enable(struct ecore_hwfn *p_hwfn,
315 struct ecore_ptt *p_ptt,
320 * @brief ecore_set_geneve_dest_port - initializes geneve tunnel destination
323 * @param p_ptt - ptt window used for writing the registers.
324 * @param dest_port - geneve destination udp port.
326 void ecore_set_geneve_dest_port(struct ecore_hwfn *p_hwfn,
327 struct ecore_ptt *p_ptt,
331 * @brief ecore_set_gre_enable - enable or disable GRE tunnel in HW
333 * @param p_ptt - ptt window used for writing the registers.
334 * @param eth_geneve_enable - eth GENEVE enable enable flag.
335 * @param ip_geneve_enable - IP GENEVE enable enable flag.
337 void ecore_set_geneve_enable(struct ecore_hwfn *p_hwfn,
338 struct ecore_ptt *p_ptt,
339 bool eth_geneve_enable,
340 bool ip_geneve_enable);
341 #ifndef UNUSED_HSI_FUNC
344 * @brief ecore_set_gft_event_id_cm_hdr - configure GFT event id and cm header
346 * @param p_ptt - ptt window used for writing the registers.
348 void ecore_set_gft_event_id_cm_hdr(struct ecore_hwfn *p_hwfn,
349 struct ecore_ptt *p_ptt);
352 * @brief ecore_gft_disable - Disable and GFT
354 * @param p_hwfn - HW device data
355 * @param p_ptt - ptt window used for writing the registers.
356 * @param pf_id - pf on which to disable GFT.
358 void ecore_gft_disable(struct ecore_hwfn *p_hwfn,
359 struct ecore_ptt *p_ptt,
363 * @brief ecore_gft_config - Enable and configure HW for GFT
365 * @param p_ptt - ptt window used for writing the registers.
366 * @param pf_id - pf on which to enable GFT.
367 * @param tcp - set profile tcp packets.
368 * @param udp - set profile udp packet.
369 * @param ipv4 - set profile ipv4 packet.
370 * @param ipv6 - set profile ipv6 packet.
371 * @param profile_type - define packet same fields. Use enum gft_profile_type.
373 void ecore_gft_config(struct ecore_hwfn *p_hwfn,
374 struct ecore_ptt *p_ptt,
380 enum gft_profile_type profile_type);
381 #endif /* UNUSED_HSI_FUNC */
384 * @brief ecore_config_vf_zone_size_mode - Configure VF zone size mode. Must be
385 * used before first ETH queue started.
388 * @param p_ptt - ptt window used for writing the registers. Don't care
389 * if runtime_init used
390 * @param mode - VF zone size mode. Use enum vf_zone_size_mode.
391 * @param runtime_init - Set 1 to init runtime registers in engine phase. Set 0
392 * if VF zone size mode configured after engine phase.
394 void ecore_config_vf_zone_size_mode(struct ecore_hwfn *p_hwfn, struct ecore_ptt
395 *p_ptt, u16 mode, bool runtime_init);
398 * @brief ecore_get_mstorm_queue_stat_offset - Get mstorm statistics offset by
401 * @param stat_cnt_id - statistic counter id
402 * @param vf_zone_size_mode - VF zone size mode. Use enum vf_zone_size_mode.
404 u32 ecore_get_mstorm_queue_stat_offset(struct ecore_hwfn *p_hwfn,
405 u16 stat_cnt_id, u16 vf_zone_size_mode);
408 * @brief ecore_get_mstorm_eth_vf_prods_offset - VF producer offset by VF zone
411 * @param vf_id - vf id.
412 * @param vf_queue_id - per VF rx queue id.
413 * @param vf_zone_size_mode - vf zone size mode. Use enum vf_zone_size_mode.
415 u32 ecore_get_mstorm_eth_vf_prods_offset(struct ecore_hwfn *p_hwfn, u8 vf_id, u8
416 vf_queue_id, u16 vf_zone_size_mode);
418 * @brief ecore_enable_context_validation - Enable and configure context
421 * @param p_ptt - ptt window used for writing the registers.
423 void ecore_enable_context_validation(struct ecore_hwfn *p_hwfn,
424 struct ecore_ptt *p_ptt);
426 * @brief ecore_calc_session_ctx_validation - Calcualte validation byte for
429 * @param p_ctx_mem - pointer to context memory.
430 * @param ctx_size - context size.
431 * @param ctx_type - context type.
432 * @param cid - context cid.
434 void ecore_calc_session_ctx_validation(void *p_ctx_mem,
440 * @brief ecore_calc_task_ctx_validation - Calcualte validation byte for task
443 * @param p_ctx_mem - pointer to context memory.
444 * @param ctx_size - context size.
445 * @param ctx_type - context type.
446 * @param tid - context tid.
448 void ecore_calc_task_ctx_validation(void *p_ctx_mem,
454 * @brief ecore_memset_session_ctx - Memset session context to 0 while
455 * preserving validation bytes.
457 * @param p_hwfn - HW device data
458 * @param p_ctx_mem - pointer to context memory.
459 * @param ctx_size - size to initialzie.
460 * @param ctx_type - context type.
462 void ecore_memset_session_ctx(void *p_ctx_mem,
466 * @brief ecore_memset_task_ctx - Memset task context to 0 while preserving
469 * @param p_ctx_mem - pointer to context memory.
470 * @param ctx_size - size to initialzie.
471 * @param ctx_type - context type.
473 void ecore_memset_task_ctx(void *p_ctx_mem,
478 * @brief ecore_update_eth_rss_ind_table_entry - Update RSS indirection table
480 * The function must run in exclusive mode to prevent wrong RSS configuration.
482 * @param p_hwfn - HW device data
483 * @param p_ptt - ptt window used for writing the registers.
484 * @param rss_id - RSS engine ID.
485 * @param ind_table_index - RSS indirect table index.
486 * @param ind_table_value - RSS indirect table new value.
488 void ecore_update_eth_rss_ind_table_entry(struct ecore_hwfn *p_hwfn,
489 struct ecore_ptt *p_ptt,
492 u16 ind_table_value);