aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/qede/base/ecore_dcbx_api.h
blob: 7767d48e704e8a2c68fd3e6eeb59a4819f74cc24 (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
/*
 * 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.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 */
	bool update;		/* Update indication */
	u8 priority;		/* Priority */
	u8 tc;			/* Traffic Class */
};

#ifndef __EXTRACT__LINUX__
enum dcbx_protocol_type {
	DCBX_PROTOCOL_ETH,
	DCBX_MAX_PROTOCOL_TYPE
};

#ifdef LINUX_REMOVE
/* We can't assume THE HSI values are available to clients, so we need
 * to redefine those here.
 */
#ifndef LLDP_CHASSIS_ID_STAT_LEN
#define LLDP_CHASSIS_ID_STAT_LEN 4
#endif
#ifndef LLDP_PORT_ID_STAT_LEN
#define LLDP_PORT_ID_STAT_LEN 4
#endif
#ifndef DCBX_MAX_APP_PROTOCOL
#define DCBX_MAX_APP_PROTOCOL 32
#endif

#endif

struct ecore_dcbx_lldp_remote {
	u32 peer_chassis_id[LLDP_CHASSIS_ID_STAT_LEN];
	u32 peer_port_id[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[LLDP_CHASSIS_ID_STAT_LEN];
	u32 local_port_id[LLDP_PORT_ID_STAT_LEN];
};

struct ecore_dcbx_app_prio {
	u8 eth;
};

struct ecore_dcbx_params {
	u32 app_bitmap[DCBX_MAX_APP_PROTOCOL];
	u16 num_app_entries;
	bool app_willing;
	bool app_valid;
	bool ets_willing;
	bool ets_enabled;
	bool valid;		/* Indicate validity of params */
	u32 ets_pri_tc_tbl[1];
	u32 ets_tc_bw_tbl[2];
	u32 ets_tc_tsa_tbl[2];
	bool pfc_willing;
	bool pfc_enabled;
	u32 pfc_bitmap;
	u8 max_pfc_tc;
	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;
	u32 err;
};

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;
};
#endif

struct ecore_dcbx_set {
	struct ecore_dcbx_admin_params config;
	bool enabled;
	u32 ver_num;
};

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;
};

struct ecore_dcbx_mib_meta_data {
	struct lldp_config_params_s *lldp_local;
	struct lldp_status_params_s *lldp_remote;
	struct dcbx_local_params *local_admin;
	struct dcbx_mib *mib;
	osal_size_t size;
	u32 addr;
};

void
ecore_dcbx_set_params(struct ecore_dcbx_results *p_data,
		      struct ecore_hw_info *p_info,
		      bool enable, bool update, u8 prio, u8 tc,
		      enum dcbx_protocol_type type,
		      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);

static const struct ecore_dcbx_app_metadata ecore_dcbx_app_update[] = {
	{DCBX_PROTOCOL_ETH, "ETH", ECORE_PCI_ETH}
};

#endif /* __ECORE_DCBX_API_H__ */