1
2
3
4#ifndef NSP_NSP_H
5#define NSP_NSP_H 1
6
7#include <linux/types.h>
8#include <linux/if_ether.h>
9
10struct firmware;
11struct nfp_cpp;
12struct nfp_nsp;
13
14struct nfp_nsp *nfp_nsp_open(struct nfp_cpp *cpp);
15void nfp_nsp_close(struct nfp_nsp *state);
16u16 nfp_nsp_get_abi_ver_major(struct nfp_nsp *state);
17u16 nfp_nsp_get_abi_ver_minor(struct nfp_nsp *state);
18int nfp_nsp_wait(struct nfp_nsp *state);
19int nfp_nsp_device_soft_reset(struct nfp_nsp *state);
20int nfp_nsp_load_fw(struct nfp_nsp *state, const struct firmware *fw);
21int nfp_nsp_write_flash(struct nfp_nsp *state, const struct firmware *fw);
22int nfp_nsp_mac_reinit(struct nfp_nsp *state);
23int nfp_nsp_load_stored_fw(struct nfp_nsp *state);
24int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size);
25int nfp_nsp_hwinfo_lookup_optional(struct nfp_nsp *state, void *buf,
26 unsigned int size, const char *default_val);
27int nfp_nsp_hwinfo_set(struct nfp_nsp *state, void *buf, unsigned int size);
28int nfp_nsp_fw_loaded(struct nfp_nsp *state);
29int nfp_nsp_read_module_eeprom(struct nfp_nsp *state, int eth_index,
30 unsigned int offset, void *data,
31 unsigned int len, unsigned int *read_len);
32
33static inline bool nfp_nsp_has_mac_reinit(struct nfp_nsp *state)
34{
35 return nfp_nsp_get_abi_ver_minor(state) > 20;
36}
37
38static inline bool nfp_nsp_has_stored_fw_load(struct nfp_nsp *state)
39{
40 return nfp_nsp_get_abi_ver_minor(state) > 23;
41}
42
43static inline bool nfp_nsp_has_hwinfo_lookup(struct nfp_nsp *state)
44{
45 return nfp_nsp_get_abi_ver_minor(state) > 24;
46}
47
48static inline bool nfp_nsp_has_hwinfo_set(struct nfp_nsp *state)
49{
50 return nfp_nsp_get_abi_ver_minor(state) > 25;
51}
52
53static inline bool nfp_nsp_has_fw_loaded(struct nfp_nsp *state)
54{
55 return nfp_nsp_get_abi_ver_minor(state) > 25;
56}
57
58static inline bool nfp_nsp_has_versions(struct nfp_nsp *state)
59{
60 return nfp_nsp_get_abi_ver_minor(state) > 27;
61}
62
63static inline bool nfp_nsp_has_read_module_eeprom(struct nfp_nsp *state)
64{
65 return nfp_nsp_get_abi_ver_minor(state) > 28;
66}
67
68enum nfp_eth_interface {
69 NFP_INTERFACE_NONE = 0,
70 NFP_INTERFACE_SFP = 1,
71 NFP_INTERFACE_SFPP = 10,
72 NFP_INTERFACE_SFP28 = 28,
73 NFP_INTERFACE_QSFP = 40,
74 NFP_INTERFACE_RJ45 = 45,
75 NFP_INTERFACE_CXP = 100,
76 NFP_INTERFACE_QSFP28 = 112,
77};
78
79enum nfp_eth_media {
80 NFP_MEDIA_DAC_PASSIVE = 0,
81 NFP_MEDIA_DAC_ACTIVE,
82 NFP_MEDIA_FIBRE,
83};
84
85enum nfp_eth_aneg {
86 NFP_ANEG_AUTO = 0,
87 NFP_ANEG_SEARCH,
88 NFP_ANEG_25G_CONSORTIUM,
89 NFP_ANEG_25G_IEEE,
90 NFP_ANEG_DISABLED,
91};
92
93enum nfp_eth_fec {
94 NFP_FEC_AUTO_BIT = 0,
95 NFP_FEC_BASER_BIT,
96 NFP_FEC_REED_SOLOMON_BIT,
97 NFP_FEC_DISABLED_BIT,
98};
99
100#define NFP_FEC_AUTO BIT(NFP_FEC_AUTO_BIT)
101#define NFP_FEC_BASER BIT(NFP_FEC_BASER_BIT)
102#define NFP_FEC_REED_SOLOMON BIT(NFP_FEC_REED_SOLOMON_BIT)
103#define NFP_FEC_DISABLED BIT(NFP_FEC_DISABLED_BIT)
104
105
106#define NFP_NSP_DRV_RESET_DISK 0
107#define NFP_NSP_DRV_RESET_ALWAYS 1
108#define NFP_NSP_DRV_RESET_NEVER 2
109#define NFP_NSP_DRV_RESET_DEFAULT "0"
110
111
112#define NFP_NSP_APP_FW_LOAD_DISK 0
113#define NFP_NSP_APP_FW_LOAD_FLASH 1
114#define NFP_NSP_APP_FW_LOAD_PREF 2
115#define NFP_NSP_APP_FW_LOAD_DEFAULT "2"
116
117
118#define NFP_NSP_DRV_LOAD_IFC_DEFAULT "0x10ff"
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
150struct nfp_eth_table {
151 unsigned int count;
152 unsigned int max_index;
153 struct nfp_eth_table_port {
154 unsigned int eth_index;
155 unsigned int index;
156 unsigned int nbi;
157 unsigned int base;
158 unsigned int lanes;
159 unsigned int speed;
160
161 unsigned int interface;
162 enum nfp_eth_media media;
163
164 enum nfp_eth_fec fec;
165 enum nfp_eth_aneg aneg;
166
167 u8 mac_addr[ETH_ALEN];
168
169 u8 label_port;
170 u8 label_subport;
171
172 bool enabled;
173 bool tx_enabled;
174 bool rx_enabled;
175
176 bool override_changed;
177
178
179 u8 port_type;
180
181 unsigned int port_lanes;
182
183 bool is_split;
184
185 unsigned int fec_modes_supported;
186 } ports[];
187};
188
189struct nfp_eth_table *nfp_eth_read_ports(struct nfp_cpp *cpp);
190struct nfp_eth_table *
191__nfp_eth_read_ports(struct nfp_cpp *cpp, struct nfp_nsp *nsp);
192
193int nfp_eth_set_mod_enable(struct nfp_cpp *cpp, unsigned int idx, bool enable);
194int nfp_eth_set_configured(struct nfp_cpp *cpp, unsigned int idx,
195 bool configed);
196int
197nfp_eth_set_fec(struct nfp_cpp *cpp, unsigned int idx, enum nfp_eth_fec mode);
198
199static inline bool nfp_eth_can_support_fec(struct nfp_eth_table_port *eth_port)
200{
201 return !!eth_port->fec_modes_supported;
202}
203
204static inline unsigned int
205nfp_eth_supported_fec_modes(struct nfp_eth_table_port *eth_port)
206{
207 return eth_port->fec_modes_supported;
208}
209
210struct nfp_nsp *nfp_eth_config_start(struct nfp_cpp *cpp, unsigned int idx);
211int nfp_eth_config_commit_end(struct nfp_nsp *nsp);
212void nfp_eth_config_cleanup_end(struct nfp_nsp *nsp);
213
214int __nfp_eth_set_aneg(struct nfp_nsp *nsp, enum nfp_eth_aneg mode);
215int __nfp_eth_set_speed(struct nfp_nsp *nsp, unsigned int speed);
216int __nfp_eth_set_split(struct nfp_nsp *nsp, unsigned int lanes);
217
218
219
220
221
222
223
224
225
226
227
228
229
230struct nfp_nsp_identify {
231 char version[40];
232 u8 flags;
233 u8 br_primary;
234 u8 br_secondary;
235 u8 br_nsp;
236 u16 primary;
237 u16 secondary;
238 u16 nsp;
239 u64 sensor_mask;
240};
241
242struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp);
243
244enum nfp_nsp_sensor_id {
245 NFP_SENSOR_CHIP_TEMPERATURE,
246 NFP_SENSOR_ASSEMBLY_POWER,
247 NFP_SENSOR_ASSEMBLY_12V_POWER,
248 NFP_SENSOR_ASSEMBLY_3V3_POWER,
249};
250
251int nfp_hwmon_read_sensor(struct nfp_cpp *cpp, enum nfp_nsp_sensor_id id,
252 long *val);
253
254#define NFP_NSP_VERSION_BUFSZ 1024
255
256enum nfp_nsp_versions {
257 NFP_VERSIONS_BSP,
258 NFP_VERSIONS_CPLD,
259 NFP_VERSIONS_APP,
260 NFP_VERSIONS_BUNDLE,
261 NFP_VERSIONS_UNDI,
262 NFP_VERSIONS_NCSI,
263 NFP_VERSIONS_CFGR,
264};
265
266int nfp_nsp_versions(struct nfp_nsp *state, void *buf, unsigned int size);
267const char *nfp_nsp_versions_get(enum nfp_nsp_versions id, bool flash,
268 const u8 *buf, unsigned int size);
269#endif
270