1*14b24e2bSVaishali Kulkarni /* 2*14b24e2bSVaishali Kulkarni * CDDL HEADER START 3*14b24e2bSVaishali Kulkarni * 4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the 5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1, (the "License"). 6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 7*14b24e2bSVaishali Kulkarni * 8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0. 10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions 11*14b24e2bSVaishali Kulkarni * and limitations under the License. 12*14b24e2bSVaishali Kulkarni * 13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each 14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the 16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying 17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner] 18*14b24e2bSVaishali Kulkarni * 19*14b24e2bSVaishali Kulkarni * CDDL HEADER END 20*14b24e2bSVaishali Kulkarni */ 21*14b24e2bSVaishali Kulkarni 22*14b24e2bSVaishali Kulkarni /* 23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc. 24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development 25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1, (the "License"). 26*14b24e2bSVaishali Kulkarni 27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 28*14b24e2bSVaishali Kulkarni 29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available 30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0 31*14b24e2bSVaishali Kulkarni 32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and 33*14b24e2bSVaishali Kulkarni * limitations under the License. 34*14b24e2bSVaishali Kulkarni */ 35*14b24e2bSVaishali Kulkarni 36*14b24e2bSVaishali Kulkarni #ifndef __ECORE_DCBX_API_H__ 37*14b24e2bSVaishali Kulkarni #define __ECORE_DCBX_API_H__ 38*14b24e2bSVaishali Kulkarni 39*14b24e2bSVaishali Kulkarni #include "ecore_status.h" 40*14b24e2bSVaishali Kulkarni 41*14b24e2bSVaishali Kulkarni #define DCBX_CONFIG_MAX_APP_PROTOCOL 4 42*14b24e2bSVaishali Kulkarni 43*14b24e2bSVaishali Kulkarni enum ecore_mib_read_type { 44*14b24e2bSVaishali Kulkarni ECORE_DCBX_OPERATIONAL_MIB, 45*14b24e2bSVaishali Kulkarni ECORE_DCBX_REMOTE_MIB, 46*14b24e2bSVaishali Kulkarni ECORE_DCBX_LOCAL_MIB, 47*14b24e2bSVaishali Kulkarni ECORE_DCBX_REMOTE_LLDP_MIB, 48*14b24e2bSVaishali Kulkarni ECORE_DCBX_LOCAL_LLDP_MIB 49*14b24e2bSVaishali Kulkarni }; 50*14b24e2bSVaishali Kulkarni 51*14b24e2bSVaishali Kulkarni struct ecore_dcbx_app_data { 52*14b24e2bSVaishali Kulkarni bool enable; /* DCB enabled */ 53*14b24e2bSVaishali Kulkarni u8 update; /* Update indication */ 54*14b24e2bSVaishali Kulkarni u8 priority; /* Priority */ 55*14b24e2bSVaishali Kulkarni u8 tc; /* Traffic Class */ 56*14b24e2bSVaishali Kulkarni bool dscp_enable; /* DSCP enabled */ 57*14b24e2bSVaishali Kulkarni u8 dscp_val; /* DSCP value */ 58*14b24e2bSVaishali Kulkarni }; 59*14b24e2bSVaishali Kulkarni 60*14b24e2bSVaishali Kulkarni #ifndef __EXTRACT__LINUX__ 61*14b24e2bSVaishali Kulkarni enum dcbx_protocol_type { 62*14b24e2bSVaishali Kulkarni DCBX_PROTOCOL_ISCSI, 63*14b24e2bSVaishali Kulkarni DCBX_PROTOCOL_FCOE, 64*14b24e2bSVaishali Kulkarni DCBX_PROTOCOL_ROCE, 65*14b24e2bSVaishali Kulkarni DCBX_PROTOCOL_ROCE_V2, 66*14b24e2bSVaishali Kulkarni DCBX_PROTOCOL_ETH, 67*14b24e2bSVaishali Kulkarni DCBX_PROTOCOL_IWARP, 68*14b24e2bSVaishali Kulkarni DCBX_MAX_PROTOCOL_TYPE 69*14b24e2bSVaishali Kulkarni }; 70*14b24e2bSVaishali Kulkarni 71*14b24e2bSVaishali Kulkarni #define ECORE_LLDP_CHASSIS_ID_STAT_LEN 4 72*14b24e2bSVaishali Kulkarni #define ECORE_LLDP_PORT_ID_STAT_LEN 4 73*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_MAX_APP_PROTOCOL 32 74*14b24e2bSVaishali Kulkarni #define ECORE_MAX_PFC_PRIORITIES 8 75*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_DSCP_SIZE 64 76*14b24e2bSVaishali Kulkarni 77*14b24e2bSVaishali Kulkarni struct ecore_dcbx_lldp_remote { 78*14b24e2bSVaishali Kulkarni u32 peer_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 79*14b24e2bSVaishali Kulkarni u32 peer_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 80*14b24e2bSVaishali Kulkarni bool enable_rx; 81*14b24e2bSVaishali Kulkarni bool enable_tx; 82*14b24e2bSVaishali Kulkarni u32 tx_interval; 83*14b24e2bSVaishali Kulkarni u32 max_credit; 84*14b24e2bSVaishali Kulkarni }; 85*14b24e2bSVaishali Kulkarni 86*14b24e2bSVaishali Kulkarni struct ecore_dcbx_lldp_local { 87*14b24e2bSVaishali Kulkarni u32 local_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 88*14b24e2bSVaishali Kulkarni u32 local_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 89*14b24e2bSVaishali Kulkarni }; 90*14b24e2bSVaishali Kulkarni 91*14b24e2bSVaishali Kulkarni struct ecore_dcbx_app_prio { 92*14b24e2bSVaishali Kulkarni u8 roce; 93*14b24e2bSVaishali Kulkarni u8 roce_v2; 94*14b24e2bSVaishali Kulkarni u8 fcoe; 95*14b24e2bSVaishali Kulkarni u8 iscsi; 96*14b24e2bSVaishali Kulkarni u8 eth; 97*14b24e2bSVaishali Kulkarni }; 98*14b24e2bSVaishali Kulkarni 99*14b24e2bSVaishali Kulkarni struct ecore_dbcx_pfc_params { 100*14b24e2bSVaishali Kulkarni bool willing; 101*14b24e2bSVaishali Kulkarni bool enabled; 102*14b24e2bSVaishali Kulkarni u8 prio[ECORE_MAX_PFC_PRIORITIES]; 103*14b24e2bSVaishali Kulkarni u8 max_tc; 104*14b24e2bSVaishali Kulkarni }; 105*14b24e2bSVaishali Kulkarni 106*14b24e2bSVaishali Kulkarni enum ecore_dcbx_sf_ieee_type { 107*14b24e2bSVaishali Kulkarni ECORE_DCBX_SF_IEEE_ETHTYPE, 108*14b24e2bSVaishali Kulkarni ECORE_DCBX_SF_IEEE_TCP_PORT, 109*14b24e2bSVaishali Kulkarni ECORE_DCBX_SF_IEEE_UDP_PORT, 110*14b24e2bSVaishali Kulkarni ECORE_DCBX_SF_IEEE_TCP_UDP_PORT 111*14b24e2bSVaishali Kulkarni }; 112*14b24e2bSVaishali Kulkarni 113*14b24e2bSVaishali Kulkarni struct ecore_app_entry { 114*14b24e2bSVaishali Kulkarni bool ethtype; 115*14b24e2bSVaishali Kulkarni enum ecore_dcbx_sf_ieee_type sf_ieee; 116*14b24e2bSVaishali Kulkarni bool enabled; 117*14b24e2bSVaishali Kulkarni u8 prio; 118*14b24e2bSVaishali Kulkarni u16 proto_id; 119*14b24e2bSVaishali Kulkarni enum dcbx_protocol_type proto_type; 120*14b24e2bSVaishali Kulkarni }; 121*14b24e2bSVaishali Kulkarni 122*14b24e2bSVaishali Kulkarni struct ecore_dcbx_params { 123*14b24e2bSVaishali Kulkarni struct ecore_app_entry app_entry[ECORE_DCBX_MAX_APP_PROTOCOL]; 124*14b24e2bSVaishali Kulkarni u16 num_app_entries; 125*14b24e2bSVaishali Kulkarni bool app_willing; 126*14b24e2bSVaishali Kulkarni bool app_valid; 127*14b24e2bSVaishali Kulkarni bool app_error; 128*14b24e2bSVaishali Kulkarni bool ets_willing; 129*14b24e2bSVaishali Kulkarni bool ets_enabled; 130*14b24e2bSVaishali Kulkarni bool ets_cbs; 131*14b24e2bSVaishali Kulkarni bool valid; /* Indicate validity of params */ 132*14b24e2bSVaishali Kulkarni u8 ets_pri_tc_tbl[ECORE_MAX_PFC_PRIORITIES]; 133*14b24e2bSVaishali Kulkarni u8 ets_tc_bw_tbl[ECORE_MAX_PFC_PRIORITIES]; 134*14b24e2bSVaishali Kulkarni u8 ets_tc_tsa_tbl[ECORE_MAX_PFC_PRIORITIES]; 135*14b24e2bSVaishali Kulkarni struct ecore_dbcx_pfc_params pfc; 136*14b24e2bSVaishali Kulkarni u8 max_ets_tc; 137*14b24e2bSVaishali Kulkarni }; 138*14b24e2bSVaishali Kulkarni 139*14b24e2bSVaishali Kulkarni struct ecore_dcbx_admin_params { 140*14b24e2bSVaishali Kulkarni struct ecore_dcbx_params params; 141*14b24e2bSVaishali Kulkarni bool valid; /* Indicate validity of params */ 142*14b24e2bSVaishali Kulkarni }; 143*14b24e2bSVaishali Kulkarni 144*14b24e2bSVaishali Kulkarni struct ecore_dcbx_remote_params { 145*14b24e2bSVaishali Kulkarni struct ecore_dcbx_params params; 146*14b24e2bSVaishali Kulkarni bool valid; /* Indicate validity of params */ 147*14b24e2bSVaishali Kulkarni }; 148*14b24e2bSVaishali Kulkarni 149*14b24e2bSVaishali Kulkarni struct ecore_dcbx_operational_params { 150*14b24e2bSVaishali Kulkarni struct ecore_dcbx_app_prio app_prio; 151*14b24e2bSVaishali Kulkarni struct ecore_dcbx_params params; 152*14b24e2bSVaishali Kulkarni bool valid; /* Indicate validity of params */ 153*14b24e2bSVaishali Kulkarni bool enabled; 154*14b24e2bSVaishali Kulkarni bool ieee; 155*14b24e2bSVaishali Kulkarni bool cee; 156*14b24e2bSVaishali Kulkarni bool local; 157*14b24e2bSVaishali Kulkarni u32 err; 158*14b24e2bSVaishali Kulkarni }; 159*14b24e2bSVaishali Kulkarni 160*14b24e2bSVaishali Kulkarni struct ecore_dcbx_dscp_params { 161*14b24e2bSVaishali Kulkarni bool enabled; 162*14b24e2bSVaishali Kulkarni u8 dscp_pri_map[ECORE_DCBX_DSCP_SIZE]; 163*14b24e2bSVaishali Kulkarni }; 164*14b24e2bSVaishali Kulkarni 165*14b24e2bSVaishali Kulkarni struct ecore_dcbx_get { 166*14b24e2bSVaishali Kulkarni struct ecore_dcbx_operational_params operational; 167*14b24e2bSVaishali Kulkarni struct ecore_dcbx_lldp_remote lldp_remote; 168*14b24e2bSVaishali Kulkarni struct ecore_dcbx_lldp_local lldp_local; 169*14b24e2bSVaishali Kulkarni struct ecore_dcbx_remote_params remote; 170*14b24e2bSVaishali Kulkarni struct ecore_dcbx_admin_params local; 171*14b24e2bSVaishali Kulkarni struct ecore_dcbx_dscp_params dscp; 172*14b24e2bSVaishali Kulkarni }; 173*14b24e2bSVaishali Kulkarni #endif 174*14b24e2bSVaishali Kulkarni 175*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_VERSION_DISABLED 0 176*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_VERSION_IEEE 1 177*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_VERSION_CEE 2 178*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_VERSION_DYNAMIC 3 179*14b24e2bSVaishali Kulkarni 180*14b24e2bSVaishali Kulkarni struct ecore_dcbx_set { 181*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_OVERRIDE_STATE (1 << 0) 182*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_OVERRIDE_PFC_CFG (1 << 1) 183*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_OVERRIDE_ETS_CFG (1 << 2) 184*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_OVERRIDE_APP_CFG (1 << 3) 185*14b24e2bSVaishali Kulkarni #define ECORE_DCBX_OVERRIDE_DSCP_CFG (1 << 4) 186*14b24e2bSVaishali Kulkarni u32 override_flags; 187*14b24e2bSVaishali Kulkarni bool enabled; 188*14b24e2bSVaishali Kulkarni struct ecore_dcbx_admin_params config; 189*14b24e2bSVaishali Kulkarni u32 ver_num; 190*14b24e2bSVaishali Kulkarni struct ecore_dcbx_dscp_params dscp; 191*14b24e2bSVaishali Kulkarni }; 192*14b24e2bSVaishali Kulkarni 193*14b24e2bSVaishali Kulkarni struct ecore_dcbx_results { 194*14b24e2bSVaishali Kulkarni bool dcbx_enabled; 195*14b24e2bSVaishali Kulkarni u8 pf_id; 196*14b24e2bSVaishali Kulkarni struct ecore_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE]; 197*14b24e2bSVaishali Kulkarni }; 198*14b24e2bSVaishali Kulkarni 199*14b24e2bSVaishali Kulkarni struct ecore_dcbx_app_metadata { 200*14b24e2bSVaishali Kulkarni enum dcbx_protocol_type id; 201*14b24e2bSVaishali Kulkarni char *name; 202*14b24e2bSVaishali Kulkarni enum ecore_pci_personality personality; 203*14b24e2bSVaishali Kulkarni }; 204*14b24e2bSVaishali Kulkarni 205*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_dcbx_query_params(struct ecore_hwfn *, 206*14b24e2bSVaishali Kulkarni struct ecore_dcbx_get *, 207*14b24e2bSVaishali Kulkarni enum ecore_mib_read_type); 208*14b24e2bSVaishali Kulkarni 209*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_dcbx_get_config_params(struct ecore_hwfn *, 210*14b24e2bSVaishali Kulkarni struct ecore_dcbx_set *); 211*14b24e2bSVaishali Kulkarni 212*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_dcbx_config_params(struct ecore_hwfn *, 213*14b24e2bSVaishali Kulkarni struct ecore_ptt *, 214*14b24e2bSVaishali Kulkarni struct ecore_dcbx_set *, 215*14b24e2bSVaishali Kulkarni bool); 216*14b24e2bSVaishali Kulkarni 217*14b24e2bSVaishali Kulkarni static const struct ecore_dcbx_app_metadata ecore_dcbx_app_update[] = { 218*14b24e2bSVaishali Kulkarni {DCBX_PROTOCOL_ISCSI, "ISCSI", ECORE_PCI_ISCSI}, 219*14b24e2bSVaishali Kulkarni {DCBX_PROTOCOL_FCOE, "FCOE", ECORE_PCI_FCOE}, 220*14b24e2bSVaishali Kulkarni {DCBX_PROTOCOL_ROCE, "ROCE", ECORE_PCI_ETH_ROCE}, 221*14b24e2bSVaishali Kulkarni {DCBX_PROTOCOL_ROCE_V2, "ROCE_V2", ECORE_PCI_ETH_ROCE}, 222*14b24e2bSVaishali Kulkarni {DCBX_PROTOCOL_ETH, "ETH", ECORE_PCI_ETH}, 223*14b24e2bSVaishali Kulkarni {DCBX_PROTOCOL_IWARP, "IWARP", ECORE_PCI_ETH_IWARP} 224*14b24e2bSVaishali Kulkarni }; 225*14b24e2bSVaishali Kulkarni 226*14b24e2bSVaishali Kulkarni #endif /* __ECORE_DCBX_API_H__ */ 227