aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/qede/base/ecore_dcbx_api.h
blob: 82416e7fe7a9d11e1f4d124fcb1739a4e4547221 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/*
 * Copyright (c) 2016 QLogic Corporation.
 * All rights reserved.
 * www.qlogic.com
 *
 * See LICENSE.qede_pmd for copyright and licensing details.
 */

#ifndef __ECORE_DCBX_API_H__
#define __ECORE_DCBX_API_H__

#include "ecore_status.h"

#define DCBX_CONFIG_MAX_APP_PROTOCOL	4

enum ecore_mib_read_type {
	ECORE_DCBX_OPERATIONAL_MIB,
	ECORE_DCBX_REMOTE_MIB,
	ECORE_DCBX_LOCAL_MIB,
	ECORE_DCBX_REMOTE_LLDP_MIB,
	ECORE_DCBX_LOCAL_LLDP_MIB
};

struct ecore_dcbx_app_data {
	bool enable;		/* DCB enabled */
	u8 update;		/* Update indication */
	u8 priority;		/* Priority */
	u8 tc;			/* Traffic Class */
	bool dscp_enable;	/* DSCP enabled */
	u8 dscp_val;		/* DSCP value */
};

#ifndef __EXTRACT__LINUX__
enum dcbx_protocol_type {
	DCBX_PROTOCOL_ISCSI,
	DCBX_PROTOCOL_FCOE,
	DCBX_PROTOCOL_ROCE,
	DCBX_PROTOCOL_ROCE_V2,
	DCBX_PROTOCOL_ETH,
	DCBX_MAX_PROTOCOL_TYPE
};

#define ECORE_LLDP_CHASSIS_ID_STAT_LEN 4
#define ECORE_LLDP_PORT_ID_STAT_LEN 4
#define ECORE_DCBX_MAX_APP_PROTOCOL 32
#define ECORE_MAX_PFC_PRIORITIES 8
#define ECORE_DCBX_DSCP_SIZE 64

struct ecore_dcbx_lldp_remote {
	u32     peer_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN];
	u32     peer_port_id[ECORE_LLDP_PORT_ID_STAT_LEN];
	bool	enable_rx;
	bool	enable_tx;
	u32     tx_interval;
	u32     max_credit;
};

struct ecore_dcbx_lldp_local {
	u32     local_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN];
	u32     local_port_id[ECORE_LLDP_PORT_ID_STAT_LEN];
};

struct ecore_dcbx_app_prio {
	u8	roce;
	u8	roce_v2;
	u8	fcoe;
	u8	iscsi;
	u8	eth;
};

struct ecore_dbcx_pfc_params {
	bool	willing;
	bool	enabled;
	u8	prio[ECORE_MAX_PFC_PRIORITIES];
	u8	max_tc;
};

enum ecore_dcbx_sf_ieee_type {
	ECORE_DCBX_SF_IEEE_ETHTYPE,
	ECORE_DCBX_SF_IEEE_TCP_PORT,
	ECORE_DCBX_SF_IEEE_UDP_PORT,
	ECORE_DCBX_SF_IEEE_TCP_UDP_PORT
};

struct ecore_app_entry {
	bool ethtype;
	enum ecore_dcbx_sf_ieee_type sf_ieee;
	bool enabled;
	u8 prio;
	u16 proto_id;
	enum dcbx_protocol_type proto_type;
};

struct ecore_dcbx_params {
	struct ecore_app_entry app_entry[ECORE_DCBX_MAX_APP_PROTOCOL];
	u16	num_app_entries;
	bool	app_willing;
	bool	app_valid;
	bool	app_error;
	bool	ets_willing;
	bool	ets_enabled;
	bool	ets_cbs;
	bool	valid;          /* Indicate validity of params */
	u8	ets_pri_tc_tbl[ECORE_MAX_PFC_PRIORITIES];
	u8	ets_tc_bw_tbl[ECORE_MAX_PFC_PRIORITIES];
	u8	ets_tc_tsa_tbl[ECORE_MAX_PFC_PRIORITIES];
	struct ecore_dbcx_pfc_params pfc;
	u8	max_ets_tc;
};

struct ecore_dcbx_admin_params {
	struct ecore_dcbx_params params;
	bool valid;		/* Indicate validity of params */
};

struct ecore_dcbx_remote_params {
	struct ecore_dcbx_params params;
	bool valid;		/* Indicate validity of params */
};

struct ecore_dcbx_operational_params {
	struct ecore_dcbx_app_prio app_prio;
	struct ecore_dcbx_params params;
	bool valid;		/* Indicate validity of params */
	bool enabled;
	bool ieee;
	bool cee;
	bool local;
	u32 err;
};

struct ecore_dcbx_dscp_params {
	bool enabled;
	u8 dscp_pri_map[ECORE_DCBX_DSCP_SIZE];
};

struct ecore_dcbx_get {
	struct ecore_dcbx_operational_params operational;
	struct ecore_dcbx_lldp_remote lldp_remote;
	struct ecore_dcbx_lldp_local lldp_local;
	struct ecore_dcbx_remote_params remote;
	struct ecore_dcbx_admin_params local;
	struct ecore_dcbx_dscp_params dscp;
};
#endif

#define ECORE_DCBX_VERSION_DISABLED	0
#define ECORE_DCBX_VERSION_IEEE		1
#define ECORE_DCBX_VERSION_CEE		2

struct ecore_dcbx_set {
#define ECORE_DCBX_OVERRIDE_STATE	(1 << 0)
#define ECORE_DCBX_OVERRIDE_PFC_CFG	(1 << 1)
#define ECORE_DCBX_OVERRIDE_ETS_CFG	(1 << 2)
#define ECORE_DCBX_OVERRIDE_APP_CFG	(1 << 3)
#define ECORE_DCBX_OVERRIDE_DSCP_CFG	(1 << 4)
	u32 override_flags;
	bool enabled;
	struct ecore_dcbx_admin_params config;
	u32 ver_num;
	struct ecore_dcbx_dscp_params dscp;
};

struct ecore_dcbx_results {
	bool dcbx_enabled;
	u8 pf_id;
	struct ecore_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE];
};

struct ecore_dcbx_app_metadata {
	enum dcbx_protocol_type id;
	const char *name; /* @DPDK */
	enum ecore_pci_personality personality;
};

enum _ecore_status_t ecore_dcbx_query_params(struct ecore_hwfn *,
					     struct ecore_dcbx_get *,
					     enum ecore_mib_read_type);

enum _ecore_status_t ecore_dcbx_get_config_params(struct ecore_hwfn *,
						  struct ecore_dcbx_set *);

enum _ecore_status_t ecore_dcbx_config_params(struct ecore_hwfn *,
					      struct ecore_ptt *,
					      struct ecore_dcbx_set *,
					      bool);

static const struct ecore_dcbx_app_metadata ecore_dcbx_app_update[] = {
	{DCBX_PROTOCOL_ISCSI, "ISCSI", ECORE_PCI_ISCSI},
	{DCBX_PROTOCOL_FCOE, "FCOE", ECORE_PCI_FCOE},
	{DCBX_PROTOCOL_ROCE, "ROCE", ECORE_PCI_ETH_ROCE},
	{DCBX_PROTOCOL_ROCE_V2, "ROCE_V2", ECORE_PCI_ETH_ROCE},
	{DCBX_PROTOCOL_ETH, "ETH", ECORE_PCI_ETH}
};

#endif /* __ECORE_DCBX_API_H__ */