13126df22SRasesh Mody /* SPDX-License-Identifier: BSD-3-Clause 29adde217SRasesh Mody * Copyright (c) 2016 - 2018 Cavium Inc. 326ae839dSRasesh Mody * All rights reserved. 49adde217SRasesh Mody * www.cavium.com 526ae839dSRasesh Mody */ 626ae839dSRasesh Mody 726ae839dSRasesh Mody #ifndef __ECORE_DCBX_API_H__ 826ae839dSRasesh Mody #define __ECORE_DCBX_API_H__ 926ae839dSRasesh Mody 1022d07d93SRasesh Mody #include "ecore_status.h" 1126ae839dSRasesh Mody 1226ae839dSRasesh Mody #define DCBX_CONFIG_MAX_APP_PROTOCOL 4 1326ae839dSRasesh Mody 1426ae839dSRasesh Mody enum ecore_mib_read_type { 1526ae839dSRasesh Mody ECORE_DCBX_OPERATIONAL_MIB, 1626ae839dSRasesh Mody ECORE_DCBX_REMOTE_MIB, 1726ae839dSRasesh Mody ECORE_DCBX_LOCAL_MIB, 1826ae839dSRasesh Mody ECORE_DCBX_REMOTE_LLDP_MIB, 1981dba2b2SRasesh Mody ECORE_DCBX_LOCAL_LLDP_MIB, 2081dba2b2SRasesh Mody ECORE_DCBX_LLDP_TLVS 2126ae839dSRasesh Mody }; 2226ae839dSRasesh Mody 2326ae839dSRasesh Mody struct ecore_dcbx_app_data { 2426ae839dSRasesh Mody bool enable; /* DCB enabled */ 2522d07d93SRasesh Mody u8 update; /* Update indication */ 2626ae839dSRasesh Mody u8 priority; /* Priority */ 2726ae839dSRasesh Mody u8 tc; /* Traffic Class */ 2822d07d93SRasesh Mody bool dscp_enable; /* DSCP enabled */ 2922d07d93SRasesh Mody u8 dscp_val; /* DSCP value */ 3036f45bceSRasesh Mody bool dont_add_vlan0; /* Do not insert a vlan tag with id 0 */ 3126ae839dSRasesh Mody }; 3226ae839dSRasesh Mody 3326ae839dSRasesh Mody #ifndef __EXTRACT__LINUX__ 3426ae839dSRasesh Mody enum dcbx_protocol_type { 3522d07d93SRasesh Mody DCBX_PROTOCOL_ISCSI, 3622d07d93SRasesh Mody DCBX_PROTOCOL_FCOE, 3722d07d93SRasesh Mody DCBX_PROTOCOL_ROCE, 3822d07d93SRasesh Mody DCBX_PROTOCOL_ROCE_V2, 3926ae839dSRasesh Mody DCBX_PROTOCOL_ETH, 402e2680e0SRasesh Mody DCBX_PROTOCOL_IWARP, 4126ae839dSRasesh Mody DCBX_MAX_PROTOCOL_TYPE 4226ae839dSRasesh Mody }; 4326ae839dSRasesh Mody 4422d07d93SRasesh Mody #define ECORE_LLDP_CHASSIS_ID_STAT_LEN 4 4522d07d93SRasesh Mody #define ECORE_LLDP_PORT_ID_STAT_LEN 4 4622d07d93SRasesh Mody #define ECORE_DCBX_MAX_APP_PROTOCOL 32 4722d07d93SRasesh Mody #define ECORE_MAX_PFC_PRIORITIES 8 4822d07d93SRasesh Mody #define ECORE_DCBX_DSCP_SIZE 64 4926ae839dSRasesh Mody 5026ae839dSRasesh Mody struct ecore_dcbx_lldp_remote { 5122d07d93SRasesh Mody u32 peer_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 5222d07d93SRasesh Mody u32 peer_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 5326ae839dSRasesh Mody bool enable_rx; 5426ae839dSRasesh Mody bool enable_tx; 5526ae839dSRasesh Mody u32 tx_interval; 5626ae839dSRasesh Mody u32 max_credit; 5726ae839dSRasesh Mody }; 5826ae839dSRasesh Mody 5926ae839dSRasesh Mody struct ecore_dcbx_lldp_local { 6022d07d93SRasesh Mody u32 local_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 6122d07d93SRasesh Mody u32 local_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 6226ae839dSRasesh Mody }; 6326ae839dSRasesh Mody 6426ae839dSRasesh Mody struct ecore_dcbx_app_prio { 6522d07d93SRasesh Mody u8 roce; 6622d07d93SRasesh Mody u8 roce_v2; 6722d07d93SRasesh Mody u8 fcoe; 6822d07d93SRasesh Mody u8 iscsi; 6926ae839dSRasesh Mody u8 eth; 7026ae839dSRasesh Mody }; 7126ae839dSRasesh Mody 7222d07d93SRasesh Mody struct ecore_dbcx_pfc_params { 7322d07d93SRasesh Mody bool willing; 7422d07d93SRasesh Mody bool enabled; 7522d07d93SRasesh Mody u8 prio[ECORE_MAX_PFC_PRIORITIES]; 7622d07d93SRasesh Mody u8 max_tc; 7722d07d93SRasesh Mody }; 7822d07d93SRasesh Mody 7922d07d93SRasesh Mody enum ecore_dcbx_sf_ieee_type { 8022d07d93SRasesh Mody ECORE_DCBX_SF_IEEE_ETHTYPE, 8122d07d93SRasesh Mody ECORE_DCBX_SF_IEEE_TCP_PORT, 8222d07d93SRasesh Mody ECORE_DCBX_SF_IEEE_UDP_PORT, 8322d07d93SRasesh Mody ECORE_DCBX_SF_IEEE_TCP_UDP_PORT 8422d07d93SRasesh Mody }; 8522d07d93SRasesh Mody 8622d07d93SRasesh Mody struct ecore_app_entry { 8722d07d93SRasesh Mody bool ethtype; 8822d07d93SRasesh Mody enum ecore_dcbx_sf_ieee_type sf_ieee; 8922d07d93SRasesh Mody bool enabled; 9022d07d93SRasesh Mody u8 prio; 9122d07d93SRasesh Mody u16 proto_id; 9222d07d93SRasesh Mody enum dcbx_protocol_type proto_type; 9322d07d93SRasesh Mody }; 9422d07d93SRasesh Mody 9526ae839dSRasesh Mody struct ecore_dcbx_params { 9622d07d93SRasesh Mody struct ecore_app_entry app_entry[ECORE_DCBX_MAX_APP_PROTOCOL]; 9726ae839dSRasesh Mody u16 num_app_entries; 9826ae839dSRasesh Mody bool app_willing; 9926ae839dSRasesh Mody bool app_valid; 10022d07d93SRasesh Mody bool app_error; 10126ae839dSRasesh Mody bool ets_willing; 10226ae839dSRasesh Mody bool ets_enabled; 10322d07d93SRasesh Mody bool ets_cbs; 10422d07d93SRasesh Mody u8 ets_pri_tc_tbl[ECORE_MAX_PFC_PRIORITIES]; 10522d07d93SRasesh Mody u8 ets_tc_bw_tbl[ECORE_MAX_PFC_PRIORITIES]; 10622d07d93SRasesh Mody u8 ets_tc_tsa_tbl[ECORE_MAX_PFC_PRIORITIES]; 10722d07d93SRasesh Mody struct ecore_dbcx_pfc_params pfc; 10826ae839dSRasesh Mody u8 max_ets_tc; 10926ae839dSRasesh Mody }; 11026ae839dSRasesh Mody 11126ae839dSRasesh Mody struct ecore_dcbx_admin_params { 11226ae839dSRasesh Mody struct ecore_dcbx_params params; 11326ae839dSRasesh Mody bool valid; /* Indicate validity of params */ 11426ae839dSRasesh Mody }; 11526ae839dSRasesh Mody 11626ae839dSRasesh Mody struct ecore_dcbx_remote_params { 11726ae839dSRasesh Mody struct ecore_dcbx_params params; 11826ae839dSRasesh Mody bool valid; /* Indicate validity of params */ 11926ae839dSRasesh Mody }; 12026ae839dSRasesh Mody 12126ae839dSRasesh Mody struct ecore_dcbx_operational_params { 12226ae839dSRasesh Mody struct ecore_dcbx_app_prio app_prio; 12326ae839dSRasesh Mody struct ecore_dcbx_params params; 12426ae839dSRasesh Mody bool valid; /* Indicate validity of params */ 12526ae839dSRasesh Mody bool enabled; 12626ae839dSRasesh Mody bool ieee; 12726ae839dSRasesh Mody bool cee; 12822d07d93SRasesh Mody bool local; 12926ae839dSRasesh Mody u32 err; 13026ae839dSRasesh Mody }; 13126ae839dSRasesh Mody 13222d07d93SRasesh Mody struct ecore_dcbx_dscp_params { 13322d07d93SRasesh Mody bool enabled; 13422d07d93SRasesh Mody u8 dscp_pri_map[ECORE_DCBX_DSCP_SIZE]; 13522d07d93SRasesh Mody }; 13622d07d93SRasesh Mody 13726ae839dSRasesh Mody struct ecore_dcbx_get { 13826ae839dSRasesh Mody struct ecore_dcbx_operational_params operational; 13926ae839dSRasesh Mody struct ecore_dcbx_lldp_remote lldp_remote; 14026ae839dSRasesh Mody struct ecore_dcbx_lldp_local lldp_local; 14126ae839dSRasesh Mody struct ecore_dcbx_remote_params remote; 14226ae839dSRasesh Mody struct ecore_dcbx_admin_params local; 14322d07d93SRasesh Mody struct ecore_dcbx_dscp_params dscp; 14426ae839dSRasesh Mody }; 14526ae839dSRasesh Mody #endif 14626ae839dSRasesh Mody 14722d07d93SRasesh Mody #define ECORE_DCBX_VERSION_DISABLED 0 14822d07d93SRasesh Mody #define ECORE_DCBX_VERSION_IEEE 1 14922d07d93SRasesh Mody #define ECORE_DCBX_VERSION_CEE 2 1503d1babcaSRasesh Mody #define ECORE_DCBX_VERSION_DYNAMIC 3 15122d07d93SRasesh Mody 15226ae839dSRasesh Mody struct ecore_dcbx_set { 15322d07d93SRasesh Mody #define ECORE_DCBX_OVERRIDE_STATE (1 << 0) 15422d07d93SRasesh Mody #define ECORE_DCBX_OVERRIDE_PFC_CFG (1 << 1) 15522d07d93SRasesh Mody #define ECORE_DCBX_OVERRIDE_ETS_CFG (1 << 2) 15622d07d93SRasesh Mody #define ECORE_DCBX_OVERRIDE_APP_CFG (1 << 3) 15722d07d93SRasesh Mody #define ECORE_DCBX_OVERRIDE_DSCP_CFG (1 << 4) 15822d07d93SRasesh Mody u32 override_flags; 15926ae839dSRasesh Mody bool enabled; 16022d07d93SRasesh Mody struct ecore_dcbx_admin_params config; 16126ae839dSRasesh Mody u32 ver_num; 16222d07d93SRasesh Mody struct ecore_dcbx_dscp_params dscp; 16326ae839dSRasesh Mody }; 16426ae839dSRasesh Mody 16526ae839dSRasesh Mody struct ecore_dcbx_results { 16626ae839dSRasesh Mody bool dcbx_enabled; 16726ae839dSRasesh Mody u8 pf_id; 16826ae839dSRasesh Mody struct ecore_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE]; 16926ae839dSRasesh Mody }; 17026ae839dSRasesh Mody 17126ae839dSRasesh Mody struct ecore_dcbx_app_metadata { 17226ae839dSRasesh Mody enum dcbx_protocol_type id; 17326ae839dSRasesh Mody const char *name; /* @DPDK */ 17426ae839dSRasesh Mody enum ecore_pci_personality personality; 17526ae839dSRasesh Mody }; 17626ae839dSRasesh Mody 17781dba2b2SRasesh Mody enum ecore_lldp_agent { 17881dba2b2SRasesh Mody ECORE_LLDP_NEAREST_BRIDGE = 0, 17981dba2b2SRasesh Mody ECORE_LLDP_NEAREST_NON_TPMR_BRIDGE, 18081dba2b2SRasesh Mody ECORE_LLDP_NEAREST_CUSTOMER_BRIDGE, 18181dba2b2SRasesh Mody ECORE_LLDP_MAX_AGENTS 18281dba2b2SRasesh Mody }; 18381dba2b2SRasesh Mody 18481dba2b2SRasesh Mody struct ecore_lldp_config_params { 18581dba2b2SRasesh Mody enum ecore_lldp_agent agent; 18681dba2b2SRasesh Mody u8 tx_interval; 18781dba2b2SRasesh Mody u8 tx_hold; 18881dba2b2SRasesh Mody u8 tx_credit; 18981dba2b2SRasesh Mody bool rx_enable; 19081dba2b2SRasesh Mody bool tx_enable; 19181dba2b2SRasesh Mody u32 chassis_id_tlv[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 19281dba2b2SRasesh Mody u32 port_id_tlv[ECORE_LLDP_PORT_ID_STAT_LEN]; 19381dba2b2SRasesh Mody }; 19481dba2b2SRasesh Mody 19581dba2b2SRasesh Mody #define ECORE_LLDP_SYS_TLV_SIZE 256 19681dba2b2SRasesh Mody struct ecore_lldp_sys_tlvs { 19781dba2b2SRasesh Mody bool discard_mandatory_tlv; 19881dba2b2SRasesh Mody u8 buf[ECORE_LLDP_SYS_TLV_SIZE]; 19981dba2b2SRasesh Mody u16 buf_size; 20081dba2b2SRasesh Mody }; 20181dba2b2SRasesh Mody 20226ae839dSRasesh Mody enum _ecore_status_t ecore_dcbx_query_params(struct ecore_hwfn *, 20326ae839dSRasesh Mody struct ecore_dcbx_get *, 20426ae839dSRasesh Mody enum ecore_mib_read_type); 20526ae839dSRasesh Mody 20622d07d93SRasesh Mody enum _ecore_status_t ecore_dcbx_get_config_params(struct ecore_hwfn *, 20722d07d93SRasesh Mody struct ecore_dcbx_set *); 20822d07d93SRasesh Mody 20922d07d93SRasesh Mody enum _ecore_status_t ecore_dcbx_config_params(struct ecore_hwfn *, 21022d07d93SRasesh Mody struct ecore_ptt *, 21122d07d93SRasesh Mody struct ecore_dcbx_set *, 21222d07d93SRasesh Mody bool); 21322d07d93SRasesh Mody 21481dba2b2SRasesh Mody enum _ecore_status_t ecore_lldp_register_tlv(struct ecore_hwfn *p_hwfn, 21581dba2b2SRasesh Mody struct ecore_ptt *p_ptt, 21681dba2b2SRasesh Mody enum ecore_lldp_agent agent, 21781dba2b2SRasesh Mody u8 tlv_type); 21881dba2b2SRasesh Mody 21981dba2b2SRasesh Mody enum _ecore_status_t 22081dba2b2SRasesh Mody ecore_lldp_get_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 22181dba2b2SRasesh Mody struct ecore_lldp_config_params *p_params); 22281dba2b2SRasesh Mody 22381dba2b2SRasesh Mody enum _ecore_status_t 22481dba2b2SRasesh Mody ecore_lldp_set_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 22581dba2b2SRasesh Mody struct ecore_lldp_config_params *p_params); 22681dba2b2SRasesh Mody 22781dba2b2SRasesh Mody enum _ecore_status_t 22881dba2b2SRasesh Mody ecore_lldp_set_system_tlvs(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 22981dba2b2SRasesh Mody struct ecore_lldp_sys_tlvs *p_params); 23081dba2b2SRasesh Mody 231*9aea0e7dSRasesh Mody /* Returns priority value for a given dscp index */ 232*9aea0e7dSRasesh Mody enum _ecore_status_t 233*9aea0e7dSRasesh Mody ecore_dcbx_get_dscp_priority(struct ecore_hwfn *p_hwfn, 234*9aea0e7dSRasesh Mody u8 dscp_index, u8 *p_dscp_pri); 235*9aea0e7dSRasesh Mody 236*9aea0e7dSRasesh Mody /* Sets priority value for a given dscp index */ 237*9aea0e7dSRasesh Mody enum _ecore_status_t 238*9aea0e7dSRasesh Mody ecore_dcbx_set_dscp_priority(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 239*9aea0e7dSRasesh Mody u8 dscp_index, u8 pri_val); 240*9aea0e7dSRasesh Mody 24126ae839dSRasesh Mody static const struct ecore_dcbx_app_metadata ecore_dcbx_app_update[] = { 24222d07d93SRasesh Mody {DCBX_PROTOCOL_ISCSI, "ISCSI", ECORE_PCI_ISCSI}, 24322d07d93SRasesh Mody {DCBX_PROTOCOL_FCOE, "FCOE", ECORE_PCI_FCOE}, 24422d07d93SRasesh Mody {DCBX_PROTOCOL_ROCE, "ROCE", ECORE_PCI_ETH_ROCE}, 24522d07d93SRasesh Mody {DCBX_PROTOCOL_ROCE_V2, "ROCE_V2", ECORE_PCI_ETH_ROCE}, 2462e2680e0SRasesh Mody {DCBX_PROTOCOL_ETH, "ETH", ECORE_PCI_ETH}, 2472e2680e0SRasesh Mody {DCBX_PROTOCOL_IWARP, "IWARP", ECORE_PCI_ETH_IWARP} 24826ae839dSRasesh Mody }; 24926ae839dSRasesh Mody 25026ae839dSRasesh Mody #endif /* __ECORE_DCBX_API_H__ */ 251