xref: /freebsd/sys/dev/sfxge/common/siena_impl.h (revision 079171874c9bf263b69e3af10784ad2bcd1fe699)
1 /*-
2  * Copyright (c) 2009-2015 Solarflare Communications Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  *    this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  *    this list of conditions and the following disclaimer in the documentation
12  *    and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
24  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * The views and conclusions contained in the software and documentation are
27  * those of the authors and should not be interpreted as representing official
28  * policies, either expressed or implied, of the FreeBSD Project.
29  *
30  * $FreeBSD$
31  */
32 
33 #ifndef _SYS_SIENA_IMPL_H
34 #define	_SYS_SIENA_IMPL_H
35 
36 #include "efx.h"
37 #include "efx_regs.h"
38 #include "efx_mcdi.h"
39 #include "siena_flash.h"
40 
41 #ifdef	__cplusplus
42 extern "C" {
43 #endif
44 
45 #if EFSYS_OPT_PHY_PROPS
46 
47 /* START MKCONFIG GENERATED SienaPhyHeaderPropsBlock a8db1f8eb5106efd */
48 typedef enum siena_phy_prop_e {
49 	SIENA_PHY_NPROPS
50 } siena_phy_prop_t;
51 
52 /* END MKCONFIG GENERATED SienaPhyHeaderPropsBlock */
53 
54 #endif  /* EFSYS_OPT_PHY_PROPS */
55 
56 #define	SIENA_NVRAM_CHUNK 0x80
57 
58 extern	__checkReturn	efx_rc_t
59 siena_nic_probe(
60 	__in		efx_nic_t *enp);
61 
62 extern	__checkReturn	efx_rc_t
63 siena_nic_reset(
64 	__in		efx_nic_t *enp);
65 
66 extern	__checkReturn	efx_rc_t
67 siena_nic_init(
68 	__in		efx_nic_t *enp);
69 
70 #if EFSYS_OPT_DIAG
71 
72 extern	__checkReturn	efx_rc_t
73 siena_nic_register_test(
74 	__in		efx_nic_t *enp);
75 
76 #endif	/* EFSYS_OPT_DIAG */
77 
78 extern			void
79 siena_nic_fini(
80 	__in		efx_nic_t *enp);
81 
82 extern			void
83 siena_nic_unprobe(
84 	__in		efx_nic_t *enp);
85 
86 #define	SIENA_SRAM_ROWS	0x12000
87 
88 extern			void
89 siena_sram_init(
90 	__in		efx_nic_t *enp);
91 
92 #if EFSYS_OPT_DIAG
93 
94 extern	__checkReturn	efx_rc_t
95 siena_sram_test(
96 	__in		efx_nic_t *enp,
97 	__in		efx_sram_pattern_fn_t func);
98 
99 #endif	/* EFSYS_OPT_DIAG */
100 
101 #if EFSYS_OPT_MCDI
102 
103 extern	__checkReturn	efx_rc_t
104 siena_mcdi_init(
105 	__in		efx_nic_t *enp,
106 	__in		const efx_mcdi_transport_t *mtp);
107 
108 extern			void
109 siena_mcdi_send_request(
110 	__in		efx_nic_t *enp,
111 	__in		void *hdrp,
112 	__in		size_t hdr_len,
113 	__in		void *sdup,
114 	__in		size_t sdu_len);
115 
116 extern	__checkReturn	boolean_t
117 siena_mcdi_poll_response(
118 	__in		efx_nic_t *enp);
119 
120 extern			void
121 siena_mcdi_read_response(
122 	__in			efx_nic_t *enp,
123 	__out_bcount(length)	void *bufferp,
124 	__in			size_t offset,
125 	__in			size_t length);
126 
127 extern			efx_rc_t
128 siena_mcdi_poll_reboot(
129 	__in		efx_nic_t *enp);
130 
131 extern			void
132 siena_mcdi_fini(
133 	__in		efx_nic_t *enp);
134 
135 extern	__checkReturn	efx_rc_t
136 siena_mcdi_feature_supported(
137 	__in		efx_nic_t *enp,
138 	__in		efx_mcdi_feature_id_t id,
139 	__out		boolean_t *supportedp);
140 
141 #endif /* EFSYS_OPT_MCDI */
142 
143 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
144 
145 extern	__checkReturn		efx_rc_t
146 siena_nvram_partn_lock(
147 	__in			efx_nic_t *enp,
148 	__in			uint32_t partn);
149 
150 extern				void
151 siena_nvram_partn_unlock(
152 	__in			efx_nic_t *enp,
153 	__in			uint32_t partn);
154 
155 extern	__checkReturn		efx_rc_t
156 siena_nvram_get_dynamic_cfg(
157 	__in			efx_nic_t *enp,
158 	__in			uint32_t partn,
159 	__in			boolean_t vpd,
160 	__out			siena_mc_dynamic_config_hdr_t **dcfgp,
161 	__out			size_t *sizep);
162 
163 #endif	/* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */
164 
165 #if EFSYS_OPT_NVRAM
166 
167 #if EFSYS_OPT_DIAG
168 
169 extern	__checkReturn		efx_rc_t
170 siena_nvram_test(
171 	__in			efx_nic_t *enp);
172 
173 #endif	/* EFSYS_OPT_DIAG */
174 
175 extern	__checkReturn		efx_rc_t
176 siena_nvram_get_subtype(
177 	__in			efx_nic_t *enp,
178 	__in			uint32_t partn,
179 	__out			uint32_t *subtypep);
180 
181 extern	__checkReturn		efx_rc_t
182 siena_nvram_type_to_partn(
183 	__in			efx_nic_t *enp,
184 	__in			efx_nvram_type_t type,
185 	__out			uint32_t *partnp);
186 
187 extern	__checkReturn		efx_rc_t
188 siena_nvram_partn_size(
189 	__in			efx_nic_t *enp,
190 	__in			uint32_t partn,
191 	__out			size_t *sizep);
192 
193 extern	__checkReturn		efx_rc_t
194 siena_nvram_partn_rw_start(
195 	__in			efx_nic_t *enp,
196 	__in			uint32_t partn,
197 	__out			size_t *chunk_sizep);
198 
199 extern	__checkReturn		efx_rc_t
200 siena_nvram_partn_read(
201 	__in			efx_nic_t *enp,
202 	__in			uint32_t partn,
203 	__in			unsigned int offset,
204 	__out_bcount(size)	caddr_t data,
205 	__in			size_t size);
206 
207 extern	__checkReturn		efx_rc_t
208 siena_nvram_partn_erase(
209 	__in			efx_nic_t *enp,
210 	__in			uint32_t partn,
211 	__in			unsigned int offset,
212 	__in			size_t size);
213 
214 extern	__checkReturn		efx_rc_t
215 siena_nvram_partn_write(
216 	__in			efx_nic_t *enp,
217 	__in			uint32_t partn,
218 	__in			unsigned int offset,
219 	__out_bcount(size)	caddr_t data,
220 	__in			size_t size);
221 
222 extern				void
223 siena_nvram_partn_rw_finish(
224 	__in			efx_nic_t *enp,
225 	__in			uint32_t partn);
226 
227 extern	__checkReturn		efx_rc_t
228 siena_nvram_partn_get_version(
229 	__in			efx_nic_t *enp,
230 	__in			uint32_t partn,
231 	__out			uint32_t *subtypep,
232 	__out_ecount(4)		uint16_t version[4]);
233 
234 extern	__checkReturn		efx_rc_t
235 siena_nvram_partn_set_version(
236 	__in			efx_nic_t *enp,
237 	__in			uint32_t partn,
238 	__in_ecount(4)		uint16_t version[4]);
239 
240 #endif	/* EFSYS_OPT_NVRAM */
241 
242 #if EFSYS_OPT_VPD
243 
244 extern	__checkReturn		efx_rc_t
245 siena_vpd_init(
246 	__in			efx_nic_t *enp);
247 
248 extern	__checkReturn		efx_rc_t
249 siena_vpd_size(
250 	__in			efx_nic_t *enp,
251 	__out			size_t *sizep);
252 
253 extern	__checkReturn		efx_rc_t
254 siena_vpd_read(
255 	__in			efx_nic_t *enp,
256 	__out_bcount(size)	caddr_t data,
257 	__in			size_t size);
258 
259 extern	__checkReturn		efx_rc_t
260 siena_vpd_verify(
261 	__in			efx_nic_t *enp,
262 	__in_bcount(size)	caddr_t data,
263 	__in			size_t size);
264 
265 extern	__checkReturn		efx_rc_t
266 siena_vpd_reinit(
267 	__in			efx_nic_t *enp,
268 	__in_bcount(size)	caddr_t data,
269 	__in			size_t size);
270 
271 extern	__checkReturn		efx_rc_t
272 siena_vpd_get(
273 	__in			efx_nic_t *enp,
274 	__in_bcount(size)	caddr_t data,
275 	__in			size_t size,
276 	__inout			efx_vpd_value_t *evvp);
277 
278 extern	__checkReturn		efx_rc_t
279 siena_vpd_set(
280 	__in			efx_nic_t *enp,
281 	__in_bcount(size)	caddr_t data,
282 	__in			size_t size,
283 	__in			efx_vpd_value_t *evvp);
284 
285 extern	__checkReturn		efx_rc_t
286 siena_vpd_next(
287 	__in			efx_nic_t *enp,
288 	__in_bcount(size)	caddr_t data,
289 	__in			size_t size,
290 	__out			efx_vpd_value_t *evvp,
291 	__inout			unsigned int *contp);
292 
293 extern __checkReturn		efx_rc_t
294 siena_vpd_write(
295 	__in			efx_nic_t *enp,
296 	__in_bcount(size)	caddr_t data,
297 	__in			size_t size);
298 
299 extern				void
300 siena_vpd_fini(
301 	__in			efx_nic_t *enp);
302 
303 #endif	/* EFSYS_OPT_VPD */
304 
305 typedef struct siena_link_state_s {
306 	uint32_t		sls_adv_cap_mask;
307 	uint32_t		sls_lp_cap_mask;
308 	unsigned int 		sls_fcntl;
309 	efx_link_mode_t		sls_link_mode;
310 #if EFSYS_OPT_LOOPBACK
311 	efx_loopback_type_t	sls_loopback;
312 #endif
313 	boolean_t		sls_mac_up;
314 } siena_link_state_t;
315 
316 extern			void
317 siena_phy_link_ev(
318 	__in		efx_nic_t *enp,
319 	__in		efx_qword_t *eqp,
320 	__out		efx_link_mode_t *link_modep);
321 
322 extern	__checkReturn	efx_rc_t
323 siena_phy_get_link(
324 	__in		efx_nic_t *enp,
325 	__out		siena_link_state_t *slsp);
326 
327 extern	__checkReturn	efx_rc_t
328 siena_phy_power(
329 	__in		efx_nic_t *enp,
330 	__in		boolean_t on);
331 
332 extern	__checkReturn	efx_rc_t
333 siena_phy_reconfigure(
334 	__in		efx_nic_t *enp);
335 
336 extern	__checkReturn	efx_rc_t
337 siena_phy_verify(
338 	__in		efx_nic_t *enp);
339 
340 extern	__checkReturn	efx_rc_t
341 siena_phy_oui_get(
342 	__in		efx_nic_t *enp,
343 	__out		uint32_t *ouip);
344 
345 #if EFSYS_OPT_PHY_STATS
346 
347 extern						void
348 siena_phy_decode_stats(
349 	__in					efx_nic_t *enp,
350 	__in					uint32_t vmask,
351 	__in_opt				efsys_mem_t *esmp,
352 	__out_opt				uint64_t *smaskp,
353 	__inout_ecount_opt(EFX_PHY_NSTATS)	uint32_t *stat);
354 
355 extern	__checkReturn			efx_rc_t
356 siena_phy_stats_update(
357 	__in				efx_nic_t *enp,
358 	__in				efsys_mem_t *esmp,
359 	__inout_ecount(EFX_PHY_NSTATS)	uint32_t *stat);
360 
361 #endif	/* EFSYS_OPT_PHY_STATS */
362 
363 #if EFSYS_OPT_PHY_PROPS
364 
365 #if EFSYS_OPT_NAMES
366 
367 extern		const char *
368 siena_phy_prop_name(
369 	__in	efx_nic_t *enp,
370 	__in	unsigned int id);
371 
372 #endif	/* EFSYS_OPT_NAMES */
373 
374 extern	__checkReturn	efx_rc_t
375 siena_phy_prop_get(
376 	__in		efx_nic_t *enp,
377 	__in		unsigned int id,
378 	__in		uint32_t flags,
379 	__out		uint32_t *valp);
380 
381 extern	__checkReturn	efx_rc_t
382 siena_phy_prop_set(
383 	__in		efx_nic_t *enp,
384 	__in		unsigned int id,
385 	__in		uint32_t val);
386 
387 #endif	/* EFSYS_OPT_PHY_PROPS */
388 
389 #if EFSYS_OPT_BIST
390 
391 extern	__checkReturn		efx_rc_t
392 siena_phy_bist_start(
393 	__in			efx_nic_t *enp,
394 	__in			efx_bist_type_t type);
395 
396 extern	__checkReturn		efx_rc_t
397 siena_phy_bist_poll(
398 	__in			efx_nic_t *enp,
399 	__in			efx_bist_type_t type,
400 	__out			efx_bist_result_t *resultp,
401 	__out_opt __drv_when(count > 0, __notnull)
402 	uint32_t 	*value_maskp,
403 	__out_ecount_opt(count)	__drv_when(count > 0, __notnull)
404 	unsigned long	*valuesp,
405 	__in			size_t count);
406 
407 extern				void
408 siena_phy_bist_stop(
409 	__in			efx_nic_t *enp,
410 	__in			efx_bist_type_t type);
411 
412 #endif	/* EFSYS_OPT_BIST */
413 
414 extern	__checkReturn	efx_rc_t
415 siena_mac_poll(
416 	__in		efx_nic_t *enp,
417 	__out		efx_link_mode_t *link_modep);
418 
419 extern	__checkReturn	efx_rc_t
420 siena_mac_up(
421 	__in		efx_nic_t *enp,
422 	__out		boolean_t *mac_upp);
423 
424 extern	__checkReturn	efx_rc_t
425 siena_mac_reconfigure(
426 	__in	efx_nic_t *enp);
427 
428 #if EFSYS_OPT_LOOPBACK
429 
430 extern	__checkReturn	efx_rc_t
431 siena_mac_loopback_set(
432 	__in		efx_nic_t *enp,
433 	__in		efx_link_mode_t link_mode,
434 	__in		efx_loopback_type_t loopback_type);
435 
436 #endif	/* EFSYS_OPT_LOOPBACK */
437 
438 #if EFSYS_OPT_MAC_STATS
439 
440 extern	__checkReturn			efx_rc_t
441 siena_mac_stats_update(
442 	__in				efx_nic_t *enp,
443 	__in				efsys_mem_t *esmp,
444 	__inout_ecount(EFX_MAC_NSTATS)	efsys_stat_t *stat,
445 	__inout_opt			uint32_t *generationp);
446 
447 #endif	/* EFSYS_OPT_MAC_STATS */
448 
449 #ifdef	__cplusplus
450 }
451 #endif
452 
453 #endif	/* _SYS_SIENA_IMPL_H */
454