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_dcbx_api.h 337519 2018-08-09 01:39:47Z davidcs $ 28316485Sdavidcs * 29316485Sdavidcs */ 30316485Sdavidcs 31316485Sdavidcs#ifndef __ECORE_DCBX_API_H__ 32316485Sdavidcs#define __ECORE_DCBX_API_H__ 33316485Sdavidcs 34316485Sdavidcs#include "ecore_status.h" 35316485Sdavidcs 36316485Sdavidcs#define DCBX_CONFIG_MAX_APP_PROTOCOL 4 37316485Sdavidcs 38316485Sdavidcsenum ecore_mib_read_type { 39316485Sdavidcs ECORE_DCBX_OPERATIONAL_MIB, 40316485Sdavidcs ECORE_DCBX_REMOTE_MIB, 41316485Sdavidcs ECORE_DCBX_LOCAL_MIB, 42316485Sdavidcs ECORE_DCBX_REMOTE_LLDP_MIB, 43337519Sdavidcs ECORE_DCBX_LOCAL_LLDP_MIB, 44337519Sdavidcs ECORE_DCBX_LLDP_TLVS 45316485Sdavidcs}; 46316485Sdavidcs 47316485Sdavidcsstruct ecore_dcbx_app_data { 48316485Sdavidcs bool enable; /* DCB enabled */ 49316485Sdavidcs u8 update; /* Update indication */ 50316485Sdavidcs u8 priority; /* Priority */ 51316485Sdavidcs u8 tc; /* Traffic Class */ 52316485Sdavidcs bool dscp_enable; /* DSCP enabled */ 53316485Sdavidcs u8 dscp_val; /* DSCP value */ 54337519Sdavidcs bool dont_add_vlan0; /* Do not insert a vlan tag with id 0 */ 55316485Sdavidcs}; 56316485Sdavidcs 57337519Sdavidcs#ifndef __EXTRACT__LINUX__IF__ 58316485Sdavidcsenum dcbx_protocol_type { 59316485Sdavidcs DCBX_PROTOCOL_ISCSI, 60316485Sdavidcs DCBX_PROTOCOL_FCOE, 61316485Sdavidcs DCBX_PROTOCOL_ROCE, 62316485Sdavidcs DCBX_PROTOCOL_ROCE_V2, 63316485Sdavidcs DCBX_PROTOCOL_ETH, 64316485Sdavidcs DCBX_PROTOCOL_IWARP, 65316485Sdavidcs DCBX_MAX_PROTOCOL_TYPE 66316485Sdavidcs}; 67316485Sdavidcs 68316485Sdavidcs#define ECORE_LLDP_CHASSIS_ID_STAT_LEN 4 69316485Sdavidcs#define ECORE_LLDP_PORT_ID_STAT_LEN 4 70316485Sdavidcs#define ECORE_DCBX_MAX_APP_PROTOCOL 32 71316485Sdavidcs#define ECORE_MAX_PFC_PRIORITIES 8 72316485Sdavidcs#define ECORE_DCBX_DSCP_SIZE 64 73316485Sdavidcs 74316485Sdavidcsstruct ecore_dcbx_lldp_remote { 75316485Sdavidcs u32 peer_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 76316485Sdavidcs u32 peer_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 77316485Sdavidcs bool enable_rx; 78316485Sdavidcs bool enable_tx; 79316485Sdavidcs u32 tx_interval; 80316485Sdavidcs u32 max_credit; 81316485Sdavidcs}; 82316485Sdavidcs 83316485Sdavidcsstruct ecore_dcbx_lldp_local { 84316485Sdavidcs u32 local_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 85316485Sdavidcs u32 local_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 86316485Sdavidcs}; 87316485Sdavidcs 88316485Sdavidcsstruct ecore_dcbx_app_prio { 89316485Sdavidcs u8 roce; 90316485Sdavidcs u8 roce_v2; 91316485Sdavidcs u8 fcoe; 92316485Sdavidcs u8 iscsi; 93316485Sdavidcs u8 eth; 94316485Sdavidcs}; 95316485Sdavidcs 96316485Sdavidcsstruct ecore_dbcx_pfc_params { 97316485Sdavidcs bool willing; 98316485Sdavidcs bool enabled; 99316485Sdavidcs u8 prio[ECORE_MAX_PFC_PRIORITIES]; 100316485Sdavidcs u8 max_tc; 101316485Sdavidcs}; 102316485Sdavidcs 103316485Sdavidcsenum ecore_dcbx_sf_ieee_type { 104316485Sdavidcs ECORE_DCBX_SF_IEEE_ETHTYPE, 105316485Sdavidcs ECORE_DCBX_SF_IEEE_TCP_PORT, 106316485Sdavidcs ECORE_DCBX_SF_IEEE_UDP_PORT, 107316485Sdavidcs ECORE_DCBX_SF_IEEE_TCP_UDP_PORT 108316485Sdavidcs}; 109316485Sdavidcs 110316485Sdavidcsstruct ecore_app_entry { 111316485Sdavidcs bool ethtype; 112316485Sdavidcs enum ecore_dcbx_sf_ieee_type sf_ieee; 113316485Sdavidcs bool enabled; 114316485Sdavidcs u8 prio; 115316485Sdavidcs u16 proto_id; 116316485Sdavidcs enum dcbx_protocol_type proto_type; 117316485Sdavidcs}; 118316485Sdavidcs 119316485Sdavidcsstruct ecore_dcbx_params { 120316485Sdavidcs struct ecore_app_entry app_entry[ECORE_DCBX_MAX_APP_PROTOCOL]; 121316485Sdavidcs u16 num_app_entries; 122316485Sdavidcs bool app_willing; 123316485Sdavidcs bool app_valid; 124316485Sdavidcs bool app_error; 125316485Sdavidcs bool ets_willing; 126316485Sdavidcs bool ets_enabled; 127316485Sdavidcs bool ets_cbs; 128316485Sdavidcs u8 ets_pri_tc_tbl[ECORE_MAX_PFC_PRIORITIES]; 129316485Sdavidcs u8 ets_tc_bw_tbl[ECORE_MAX_PFC_PRIORITIES]; 130316485Sdavidcs u8 ets_tc_tsa_tbl[ECORE_MAX_PFC_PRIORITIES]; 131316485Sdavidcs struct ecore_dbcx_pfc_params pfc; 132316485Sdavidcs u8 max_ets_tc; 133316485Sdavidcs}; 134316485Sdavidcs 135316485Sdavidcsstruct ecore_dcbx_admin_params { 136316485Sdavidcs struct ecore_dcbx_params params; 137316485Sdavidcs bool valid; /* Indicate validity of params */ 138316485Sdavidcs}; 139316485Sdavidcs 140316485Sdavidcsstruct ecore_dcbx_remote_params { 141316485Sdavidcs struct ecore_dcbx_params params; 142316485Sdavidcs bool valid; /* Indicate validity of params */ 143316485Sdavidcs}; 144316485Sdavidcs 145316485Sdavidcsstruct ecore_dcbx_operational_params { 146316485Sdavidcs struct ecore_dcbx_app_prio app_prio; 147316485Sdavidcs struct ecore_dcbx_params params; 148316485Sdavidcs bool valid; /* Indicate validity of params */ 149316485Sdavidcs bool enabled; 150316485Sdavidcs bool ieee; 151316485Sdavidcs bool cee; 152316485Sdavidcs bool local; 153316485Sdavidcs u32 err; 154316485Sdavidcs}; 155316485Sdavidcs 156316485Sdavidcsstruct ecore_dcbx_dscp_params { 157316485Sdavidcs bool enabled; 158316485Sdavidcs u8 dscp_pri_map[ECORE_DCBX_DSCP_SIZE]; 159316485Sdavidcs}; 160316485Sdavidcs 161316485Sdavidcsstruct ecore_dcbx_get { 162316485Sdavidcs struct ecore_dcbx_operational_params operational; 163316485Sdavidcs struct ecore_dcbx_lldp_remote lldp_remote; 164316485Sdavidcs struct ecore_dcbx_lldp_local lldp_local; 165316485Sdavidcs struct ecore_dcbx_remote_params remote; 166316485Sdavidcs struct ecore_dcbx_admin_params local; 167316485Sdavidcs struct ecore_dcbx_dscp_params dscp; 168316485Sdavidcs}; 169337519Sdavidcs#endif 170316485Sdavidcs 171316485Sdavidcs#define ECORE_DCBX_VERSION_DISABLED 0 172316485Sdavidcs#define ECORE_DCBX_VERSION_IEEE 1 173316485Sdavidcs#define ECORE_DCBX_VERSION_CEE 2 174316485Sdavidcs#define ECORE_DCBX_VERSION_DYNAMIC 3 175316485Sdavidcs 176316485Sdavidcsstruct ecore_dcbx_set { 177316485Sdavidcs#define ECORE_DCBX_OVERRIDE_STATE (1 << 0) 178316485Sdavidcs#define ECORE_DCBX_OVERRIDE_PFC_CFG (1 << 1) 179316485Sdavidcs#define ECORE_DCBX_OVERRIDE_ETS_CFG (1 << 2) 180316485Sdavidcs#define ECORE_DCBX_OVERRIDE_APP_CFG (1 << 3) 181316485Sdavidcs#define ECORE_DCBX_OVERRIDE_DSCP_CFG (1 << 4) 182316485Sdavidcs u32 override_flags; 183316485Sdavidcs bool enabled; 184316485Sdavidcs struct ecore_dcbx_admin_params config; 185316485Sdavidcs u32 ver_num; 186316485Sdavidcs struct ecore_dcbx_dscp_params dscp; 187316485Sdavidcs}; 188316485Sdavidcs 189316485Sdavidcsstruct ecore_dcbx_results { 190316485Sdavidcs bool dcbx_enabled; 191316485Sdavidcs u8 pf_id; 192316485Sdavidcs struct ecore_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE]; 193316485Sdavidcs}; 194316485Sdavidcs 195316485Sdavidcsstruct ecore_dcbx_app_metadata { 196316485Sdavidcs enum dcbx_protocol_type id; 197316485Sdavidcs char *name; 198316485Sdavidcs enum ecore_pci_personality personality; 199316485Sdavidcs}; 200316485Sdavidcs 201337519Sdavidcsenum ecore_lldp_agent { 202337519Sdavidcs ECORE_LLDP_NEAREST_BRIDGE = 0, 203337519Sdavidcs ECORE_LLDP_NEAREST_NON_TPMR_BRIDGE, 204337519Sdavidcs ECORE_LLDP_NEAREST_CUSTOMER_BRIDGE, 205337519Sdavidcs ECORE_LLDP_MAX_AGENTS 206337519Sdavidcs}; 207316485Sdavidcs 208337519Sdavidcsstruct ecore_lldp_config_params { 209337519Sdavidcs enum ecore_lldp_agent agent; 210337519Sdavidcs u8 tx_interval; 211337519Sdavidcs u8 tx_hold; 212337519Sdavidcs u8 tx_credit; 213337519Sdavidcs bool rx_enable; 214337519Sdavidcs bool tx_enable; 215337519Sdavidcs u32 chassis_id_tlv[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 216337519Sdavidcs u32 port_id_tlv[ECORE_LLDP_PORT_ID_STAT_LEN]; 217337519Sdavidcs}; 218316485Sdavidcs 219337519Sdavidcs#define ECORE_LLDP_SYS_TLV_SIZE 256 220337519Sdavidcsstruct ecore_lldp_sys_tlvs { 221337519Sdavidcs bool discard_mandatory_tlv; 222337519Sdavidcs u8 buf[ECORE_LLDP_SYS_TLV_SIZE]; 223337519Sdavidcs u16 buf_size; 224337519Sdavidcs}; 225316485Sdavidcs 226337519Sdavidcsstruct ecore_lldp_stats { 227337519Sdavidcs enum ecore_lldp_agent agent; 228337519Sdavidcs u32 tx_frames; 229337519Sdavidcs u32 rx_frames; 230337519Sdavidcs u32 rx_discards; 231337519Sdavidcs u32 rx_age_outs; 232337519Sdavidcs}; 233337519Sdavidcs 234337519Sdavidcsenum _ecore_status_t ecore_dcbx_query_params(struct ecore_hwfn *p_hwfn, 235337519Sdavidcs struct ecore_dcbx_get *p_get, 236337519Sdavidcs enum ecore_mib_read_type type); 237337519Sdavidcs 238337519Sdavidcsenum _ecore_status_t ecore_dcbx_get_config_params(struct ecore_hwfn *p_hwfn, 239337519Sdavidcs struct ecore_dcbx_set 240337519Sdavidcs *params); 241337519Sdavidcs 242337519Sdavidcsenum _ecore_status_t ecore_dcbx_config_params(struct ecore_hwfn *p_hwfn, 243337519Sdavidcs struct ecore_ptt *p_ptt, 244337519Sdavidcs struct ecore_dcbx_set *params, 245337519Sdavidcs bool hw_commit); 246337519Sdavidcs 247337519Sdavidcsenum _ecore_status_t ecore_lldp_register_tlv(struct ecore_hwfn *p_hwfn, 248337519Sdavidcs struct ecore_ptt *p_ptt, 249337519Sdavidcs enum ecore_lldp_agent agent, 250337519Sdavidcs u8 tlv_type); 251337519Sdavidcs 252337519Sdavidcsenum _ecore_status_t 253337519Sdavidcsecore_lldp_get_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 254337519Sdavidcs struct ecore_lldp_config_params *p_params); 255337519Sdavidcs 256337519Sdavidcsenum _ecore_status_t 257337519Sdavidcsecore_lldp_set_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 258337519Sdavidcs struct ecore_lldp_config_params *p_params); 259337519Sdavidcs 260337519Sdavidcsenum _ecore_status_t 261337519Sdavidcsecore_lldp_set_system_tlvs(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 262337519Sdavidcs struct ecore_lldp_sys_tlvs *p_params); 263337519Sdavidcs 264337519Sdavidcs/* Returns priority value for a given dscp index */ 265337519Sdavidcsenum _ecore_status_t 266337519Sdavidcsecore_dcbx_get_dscp_priority(struct ecore_hwfn *p_hwfn, 267337519Sdavidcs u8 dscp_index, u8 *p_dscp_pri); 268337519Sdavidcs 269337519Sdavidcs/* Sets priority value for a given dscp index */ 270337519Sdavidcsenum _ecore_status_t 271337519Sdavidcsecore_dcbx_set_dscp_priority(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 272337519Sdavidcs u8 dscp_index, u8 pri_val); 273337519Sdavidcs 274337519Sdavidcsenum _ecore_status_t 275337519Sdavidcsecore_lldp_get_stats(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 276337519Sdavidcs struct ecore_lldp_stats *p_params); 277337519Sdavidcs 278337519Sdavidcs#ifndef __EXTRACT__LINUX__C__ 279316485Sdavidcsstatic const struct ecore_dcbx_app_metadata ecore_dcbx_app_update[] = { 280316485Sdavidcs {DCBX_PROTOCOL_ISCSI, "ISCSI", ECORE_PCI_ISCSI}, 281316485Sdavidcs {DCBX_PROTOCOL_FCOE, "FCOE", ECORE_PCI_FCOE}, 282316485Sdavidcs {DCBX_PROTOCOL_ROCE, "ROCE", ECORE_PCI_ETH_ROCE}, 283316485Sdavidcs {DCBX_PROTOCOL_ROCE_V2, "ROCE_V2", ECORE_PCI_ETH_ROCE}, 284316485Sdavidcs {DCBX_PROTOCOL_ETH, "ETH", ECORE_PCI_ETH}, 285316485Sdavidcs {DCBX_PROTOCOL_IWARP, "IWARP", ECORE_PCI_ETH_IWARP} 286316485Sdavidcs}; 287337519Sdavidcs#endif 288316485Sdavidcs 289316485Sdavidcs#endif /* __ECORE_DCBX_API_H__ */ 290