xref: /dpdk/drivers/net/qede/base/ecore_dcbx_api.h (revision 9aea0e7daffd26888252cbf77287def3a907e7af)
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