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/11/sys/dev/qlnx/qlnxe/ecore_sp_commands.h 337517 2018-08-09 01:17:35Z davidcs $ 28316485Sdavidcs * 29316485Sdavidcs */ 30316485Sdavidcs 31320164Sdavidcs 32316485Sdavidcs#ifndef __ECORE_SP_COMMANDS_H__ 33316485Sdavidcs#define __ECORE_SP_COMMANDS_H__ 34316485Sdavidcs 35316485Sdavidcs#include "ecore.h" 36316485Sdavidcs#include "ecore_spq.h" 37316485Sdavidcs#include "ecore_sp_api.h" 38316485Sdavidcs 39316485Sdavidcs#define ECORE_SP_EQ_COMPLETION 0x01 40316485Sdavidcs#define ECORE_SP_CQE_COMPLETION 0x02 41316485Sdavidcs 42316485Sdavidcsstruct ecore_sp_init_data { 43316485Sdavidcs /* The CID and FID aren't necessarily derived from hwfn, 44316485Sdavidcs * e.g., in IOV scenarios. CID might defer between SPQ and 45316485Sdavidcs * other elements. 46316485Sdavidcs */ 47316485Sdavidcs u32 cid; 48316485Sdavidcs u16 opaque_fid; 49316485Sdavidcs 50316485Sdavidcs /* Information regarding operation upon sending & completion */ 51316485Sdavidcs enum spq_mode comp_mode; 52316485Sdavidcs struct ecore_spq_comp_cb *p_comp_data; 53316485Sdavidcs 54316485Sdavidcs}; 55316485Sdavidcs 56316485Sdavidcs/** 57316485Sdavidcs * @brief Acquire and initialize and SPQ entry for a given ramrod. 58316485Sdavidcs * 59316485Sdavidcs * @param p_hwfn 60316485Sdavidcs * @param pp_ent - will be filled with a pointer to an entry upon success 61316485Sdavidcs * @param cmd - dependent upon protocol 62316485Sdavidcs * @param protocol 63316485Sdavidcs * @param p_data - various configuration required for ramrod 64316485Sdavidcs * 65316485Sdavidcs * @return ECORE_SUCCESS upon success, otherwise failure. 66316485Sdavidcs */ 67316485Sdavidcsenum _ecore_status_t ecore_sp_init_request(struct ecore_hwfn *p_hwfn, 68316485Sdavidcs struct ecore_spq_entry **pp_ent, 69316485Sdavidcs u8 cmd, 70316485Sdavidcs u8 protocol, 71316485Sdavidcs struct ecore_sp_init_data *p_data); 72316485Sdavidcs 73316485Sdavidcs/** 74316485Sdavidcs * @brief ecore_sp_pf_start - PF Function Start Ramrod 75316485Sdavidcs * 76316485Sdavidcs * This ramrod is sent to initialize a physical function (PF). It will 77316485Sdavidcs * configure the function related parameters and write its completion to the 78316485Sdavidcs * event ring specified in the parameters. 79316485Sdavidcs * 80316485Sdavidcs * Ramrods complete on the common event ring for the PF. This ring is 81316485Sdavidcs * allocated by the driver on host memory and its parameters are written 82316485Sdavidcs * to the internal RAM of the UStorm by the Function Start Ramrod. 83316485Sdavidcs * 84316485Sdavidcs * @param p_hwfn 85320164Sdavidcs * @param p_ptt 86316485Sdavidcs * @param p_tunn - pf start tunneling configuration 87316485Sdavidcs * @param allow_npar_tx_switch - npar tx switching to be used 88316485Sdavidcs * for vports configured for tx-switching. 89316485Sdavidcs * 90316485Sdavidcs * @return enum _ecore_status_t 91316485Sdavidcs */ 92316485Sdavidcs 93316485Sdavidcsenum _ecore_status_t ecore_sp_pf_start(struct ecore_hwfn *p_hwfn, 94320164Sdavidcs struct ecore_ptt *p_ptt, 95316485Sdavidcs struct ecore_tunnel_info *p_tunn, 96316485Sdavidcs bool allow_npar_tx_switch); 97316485Sdavidcs 98316485Sdavidcs/** 99316485Sdavidcs * @brief ecore_sp_pf_update - PF Function Update Ramrod 100316485Sdavidcs * 101316485Sdavidcs * This ramrod updates function-related parameters. Every parameter can be 102316485Sdavidcs * updated independently, according to configuration flags. 103316485Sdavidcs * 104316485Sdavidcs * @note Final phase API. 105316485Sdavidcs * 106316485Sdavidcs * @param p_hwfn 107316485Sdavidcs * 108316485Sdavidcs * @return enum _ecore_status_t 109316485Sdavidcs */ 110316485Sdavidcs 111320164Sdavidcsenum _ecore_status_t ecore_sp_pf_update_dcbx(struct ecore_hwfn *p_hwfn); 112316485Sdavidcs 113316485Sdavidcs/** 114316485Sdavidcs * @brief ecore_sp_pf_stop - PF Function Stop Ramrod 115316485Sdavidcs * 116316485Sdavidcs * This ramrod is sent to close a Physical Function (PF). It is the last ramrod 117316485Sdavidcs * sent and the last completion written to the PFs Event Ring. This ramrod also 118316485Sdavidcs * deletes the context for the Slowhwfn connection on this PF. 119316485Sdavidcs * 120316485Sdavidcs * @note Not required for first packet. 121316485Sdavidcs * 122316485Sdavidcs * @param p_hwfn 123316485Sdavidcs * 124316485Sdavidcs * @return enum _ecore_status_t 125316485Sdavidcs */ 126316485Sdavidcs 127316485Sdavidcsenum _ecore_status_t ecore_sp_pf_stop(struct ecore_hwfn *p_hwfn); 128316485Sdavidcs 129316485Sdavidcs/** 130316485Sdavidcs * @brief ecore_sp_heartbeat_ramrod - Send empty Ramrod 131316485Sdavidcs * 132316485Sdavidcs * @param p_hwfn 133316485Sdavidcs * 134316485Sdavidcs * @return enum _ecore_status_t 135316485Sdavidcs */ 136316485Sdavidcs 137316485Sdavidcsenum _ecore_status_t ecore_sp_heartbeat_ramrod(struct ecore_hwfn *p_hwfn); 138316485Sdavidcs 139316485Sdavidcsstruct ecore_rl_update_params { 140316485Sdavidcs u8 qcn_update_param_flg; 141316485Sdavidcs u8 dcqcn_update_param_flg; 142316485Sdavidcs u8 rl_init_flg; 143316485Sdavidcs u8 rl_start_flg; 144316485Sdavidcs u8 rl_stop_flg; 145316485Sdavidcs u8 rl_id_first; 146316485Sdavidcs u8 rl_id_last; 147316485Sdavidcs u8 rl_dc_qcn_flg; /* If set, RL will used for DCQCN */ 148316485Sdavidcs u32 rl_bc_rate; /* Byte Counter Limit */ 149337517Sdavidcs u32 rl_max_rate; /* Maximum rate in Mbps resolution */ 150337517Sdavidcs u32 rl_r_ai; /* Active increase rate */ 151337517Sdavidcs u32 rl_r_hai; /* Hyper active increase rate */ 152337517Sdavidcs u32 dcqcn_gd; /* DCQCN Alpha update gain */ 153316485Sdavidcs u32 dcqcn_k_us; /* DCQCN Alpha update interval */ 154316485Sdavidcs u32 dcqcn_timeuot_us; 155316485Sdavidcs u32 qcn_timeuot_us; 156316485Sdavidcs}; 157316485Sdavidcs 158316485Sdavidcs/** 159316485Sdavidcs * @brief ecore_sp_rl_update - Update rate limiters 160316485Sdavidcs * 161316485Sdavidcs * @param p_hwfn 162316485Sdavidcs * @param params 163316485Sdavidcs * 164316485Sdavidcs * @return enum _ecore_status_t 165316485Sdavidcs */ 166316485Sdavidcsenum _ecore_status_t ecore_sp_rl_update(struct ecore_hwfn *p_hwfn, 167316485Sdavidcs struct ecore_rl_update_params *params); 168316485Sdavidcs 169320164Sdavidcs/** 170320164Sdavidcs * @brief ecore_sp_pf_update_stag - PF STAG value update Ramrod 171320164Sdavidcs * 172320164Sdavidcs * @param p_hwfn 173320164Sdavidcs * 174320164Sdavidcs * @return enum _ecore_status_t 175320164Sdavidcs */ 176320164Sdavidcs 177320164Sdavidcsenum _ecore_status_t ecore_sp_pf_update_stag(struct ecore_hwfn *p_hwfn); 178320164Sdavidcs 179337517Sdavidcs/** 180337517Sdavidcs * @brief ecore_sp_pf_update_ufp - PF ufp update Ramrod 181337517Sdavidcs * 182337517Sdavidcs * @param p_hwfn 183337517Sdavidcs * 184337517Sdavidcs * @return enum _ecore_status_t 185337517Sdavidcs */ 186337517Sdavidcsenum _ecore_status_t ecore_sp_pf_update_ufp(struct ecore_hwfn *p_hwfn); 187337517Sdavidcs 188316485Sdavidcs#endif /*__ECORE_SP_COMMANDS_H__*/ 189