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