efx_check.h revision 294386
1/*-
2 * Copyright (c) 2012-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: stable/10/sys/dev/sfxge/common/efx_check.h 294386 2016-01-20 08:01:21Z arybchik $
31 */
32
33#ifndef _SYS_EFX_CHECK_H
34#define	_SYS_EFX_CHECK_H
35
36#include "efsys.h"
37
38/*
39 * Check that the efsys.h header in client code has a valid combination of
40 * EFSYS_OPT_xxx options.
41 *
42 * NOTE: Keep checks for obsolete options here to ensure that they are removed
43 * from client code (and do not reappear in merges from other branches).
44 */
45
46/* Support NVRAM based boot config */
47#if EFSYS_OPT_BOOTCFG
48# if !EFSYS_OPT_NVRAM
49#  error "BOOTCFG requires NVRAM"
50# endif
51#endif /* EFSYS_OPT_BOOTCFG */
52
53/* Verify chip implements accessed registers */
54#if EFSYS_OPT_CHECK_REG
55# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
56	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
57#  error "CHECK_REG requires FALCON or SIENA or HUNTINGTON or MEDFORD"
58# endif
59#endif /* EFSYS_OPT_CHECK_REG */
60
61/* Decode fatal errors */
62#if EFSYS_OPT_DECODE_INTR_FATAL
63# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA)
64#  error "INTR_FATAL requires FALCON or SIENA"
65# endif
66#endif /* EFSYS_OPT_DECODE_INTR_FATAL */
67
68/* Support diagnostic hardware tests */
69#if EFSYS_OPT_DIAG
70# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
71	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
72#  error "DIAG requires FALCON or SIENA or HUNTINGTON or MEDFORD"
73# endif
74#endif /* EFSYS_OPT_DIAG */
75
76/* Support optimized EVQ data access */
77#if EFSYS_OPT_EV_PREFETCH
78# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
79	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
80#  error "EV_PREFETCH requires FALCON or SIENA or HUNTINGTON or MEDFORD"
81# endif
82#endif /* EFSYS_OPT_EV_PREFETCH */
83
84/* Support overriding the NVRAM and VPD configuration */
85#if EFSYS_OPT_FALCON_NIC_CFG_OVERRIDE
86# if !EFSYS_OPT_FALCON
87#  error "FALCON_NIC_CFG_OVERRIDE requires FALCON"
88# endif
89#endif /* EFSYS_OPT_FALCON_NIC_CFG_OVERRIDE */
90
91/* Support hardware packet filters */
92#if EFSYS_OPT_FILTER
93# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
94	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
95#  error "FILTER requires FALCON or SIENA or HUNTINGTON or MEDFORD"
96# endif
97#endif /* EFSYS_OPT_FILTER */
98
99#if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
100# if !EFSYS_OPT_FILTER
101#  error "HUNTINGTON or MEDFORD requires FILTER"
102# endif
103#endif /* EFSYS_OPT_HUNTINGTON */
104
105/* Support hardware loopback modes */
106#if EFSYS_OPT_LOOPBACK
107# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
108	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
109#  error "LOOPBACK requires FALCON or SIENA or HUNTINGTON or MEDFORD"
110# endif
111#endif /* EFSYS_OPT_LOOPBACK */
112
113/* Support Falcon GMAC */
114#if EFSYS_OPT_MAC_FALCON_GMAC
115# if !EFSYS_OPT_FALCON
116#  error "MAC_FALCON_GMAC requires FALCON"
117# endif
118#endif /* EFSYS_OPT_MAC_FALCON_GMAC */
119
120/* Support Falcon XMAC */
121#if EFSYS_OPT_MAC_FALCON_XMAC
122# if !EFSYS_OPT_FALCON
123#  error "MAC_FALCON_XMAC requires FALCON"
124# endif
125#endif /* EFSYS_OPT_MAC_FALCON_XMAC */
126
127/* Support MAC statistics */
128#if EFSYS_OPT_MAC_STATS
129# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
130	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
131#  error "MAC_STATS requires FALCON or SIENA or HUNTINGTON or MEDFORD"
132# endif
133#endif /* EFSYS_OPT_MAC_STATS */
134
135/* Support management controller messages */
136#if EFSYS_OPT_MCDI
137# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
138#  error "MCDI requires SIENA or HUNTINGTON or MEDFORD"
139# endif
140#endif /* EFSYS_OPT_MCDI */
141
142#if (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
143# if !EFSYS_OPT_MCDI
144#  error "SIENA or HUNTINGTON or MEDFORD requires MCDI"
145# endif
146#endif
147
148/* Support MCDI logging */
149#if EFSYS_OPT_MCDI_LOGGING
150# if !EFSYS_OPT_MCDI
151#  error "MCDI_LOGGING requires MCDI"
152# endif
153#endif /* EFSYS_OPT_MCDI_LOGGING */
154
155/* Support MCDI proxy authorization */
156#if EFSYS_OPT_MCDI_PROXY_AUTH
157# if !EFSYS_OPT_MCDI
158#  error "MCDI_PROXY_AUTH requires MCDI"
159# endif
160#endif /* EFSYS_OPT_MCDI_PROXY_AUTH */
161
162/* Support LM87 monitor */
163#if EFSYS_OPT_MON_LM87
164# if !EFSYS_OPT_FALCON
165#  error "MON_LM87 requires FALCON"
166# endif
167#endif /* EFSYS_OPT_MON_LM87 */
168
169/* Support MAX6647 monitor */
170#if EFSYS_OPT_MON_MAX6647
171# if !EFSYS_OPT_FALCON
172#  error "MON_MAX6647 requires FALCON"
173# endif
174#endif /* EFSYS_OPT_MON_MAX6647 */
175
176/* Support null monitor */
177#if EFSYS_OPT_MON_NULL
178# if !EFSYS_OPT_FALCON
179#  error "MON_NULL requires FALCON"
180# endif
181#endif /* EFSYS_OPT_MON_NULL */
182
183/* Obsolete option */
184#ifdef EFSYS_OPT_MON_SIENA
185#  error "MON_SIENA is obsolete (replaced by MON_MCDI)."
186#endif /* EFSYS_OPT_MON_SIENA*/
187
188/* Obsolete option */
189#ifdef EFSYS_OPT_MON_HUNTINGTON
190#  error "MON_HUNTINGTON is obsolete (replaced by MON_MCDI)."
191#endif /* EFSYS_OPT_MON_HUNTINGTON*/
192
193/* Support monitor statistics (voltage/temperature) */
194#if EFSYS_OPT_MON_STATS
195# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
196	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
197#  error "MON_STATS requires FALCON or SIENA or HUNTINGTON or MEDFORD"
198# endif
199#endif /* EFSYS_OPT_MON_STATS */
200
201/* Support Monitor via mcdi */
202#if EFSYS_OPT_MON_MCDI
203# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
204#  error "MON_MCDI requires SIENA or HUNTINGTON or MEDFORD"
205# endif
206#endif /* EFSYS_OPT_MON_MCDI*/
207
208/* Support printable names for statistics */
209#if EFSYS_OPT_NAMES
210# if !(EFSYS_OPT_LOOPBACK || EFSYS_OPT_MAC_STATS || EFSYS_OPT_MCDI || \
211	EFSYS_MON_STATS || EFSYS_OPT_PHY_PROPS || EFSYS_OPT_PHY_STATS || \
212	EFSYS_OPT_QSTATS)
213#  error "NAMES requires LOOPBACK or xxxSTATS or MCDI or PHY_PROPS"
214# endif
215#endif /* EFSYS_OPT_NAMES */
216
217/* Support non volatile configuration */
218#if EFSYS_OPT_NVRAM
219# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
220	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
221#  error "NVRAM requires FALCON or SIENA or HUNTINGTON or MEDFORD"
222# endif
223#endif /* EFSYS_OPT_NVRAM */
224
225/* Support Falcon bootrom */
226#if EFSYS_OPT_NVRAM_FALCON_BOOTROM
227# if !EFSYS_OPT_NVRAM
228#  error "NVRAM_FALCON_BOOTROM requires NVRAM"
229# endif
230# if !EFSYS_OPT_FALCON
231#  error "NVRAM_FALCON_BOOTROM requires FALCON"
232# endif
233#endif /* EFSYS_OPT_NVRAM_FALCON_BOOTROM */
234
235/* Support NVRAM config for SFT9001 */
236#if EFSYS_OPT_NVRAM_SFT9001
237# if !EFSYS_OPT_NVRAM
238#  error "NVRAM_SFT9001 requires NVRAM"
239# endif
240# if !EFSYS_OPT_FALCON
241#  error "NVRAM_SFT9001 requires FALCON"
242# endif
243#endif /* EFSYS_OPT_NVRAM_SFT9001 */
244
245/* Support NVRAM config for SFX7101 */
246#if EFSYS_OPT_NVRAM_SFX7101
247# if !EFSYS_OPT_NVRAM
248#  error "NVRAM_SFX7101 requires NVRAM"
249# endif
250# if !EFSYS_OPT_FALCON
251#  error "NVRAM_SFX7101 requires FALCON"
252# endif
253#endif /* EFSYS_OPT_NVRAM_SFX7101 */
254
255/* Support PCIe interface tuning */
256#if EFSYS_OPT_PCIE_TUNE
257# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA)
258#  error "PCIE_TUNE requires FALCON or SIENA"
259# endif
260#endif /* EFSYS_OPT_PCIE_TUNE */
261
262/* Obsolete option */
263#if EFSYS_OPT_PHY_BIST
264#  error "PHY_BIST is obsolete (replaced by BIST)."
265#endif /* EFSYS_OPT_PHY_BIST */
266
267/* Support PHY flags */
268#if EFSYS_OPT_PHY_FLAGS
269# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA)
270#  error "PHY_FLAGS requires FALCON or SIENA"
271# endif
272#endif /* EFSYS_OPT_PHY_FLAGS */
273
274/* Support for PHY LED control */
275#if EFSYS_OPT_PHY_LED_CONTROL
276# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA)
277#  error "PHY_LED_CONTROL requires FALCON or SIENA"
278# endif
279#endif /* EFSYS_OPT_PHY_LED_CONTROL */
280
281/* Support NULL PHY */
282#if EFSYS_OPT_PHY_NULL
283# if !EFSYS_OPT_FALCON
284#  error "PHY_NULL requires FALCON"
285# endif
286#endif /* EFSYS_OPT_PHY_NULL */
287
288/* Obsolete option */
289#ifdef EFSYS_OPT_PHY_PM8358
290# error "EFSYS_OPT_PHY_PM8358 is obsolete and is not supported."
291#endif
292
293/* Support PHY properties */
294#if EFSYS_OPT_PHY_PROPS
295# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA)
296#  error "PHY_PROPS requires FALCON or SIENA"
297# endif
298#endif /* EFSYS_OPT_PHY_PROPS */
299
300/* Support QT2022C2 PHY */
301#if EFSYS_OPT_PHY_QT2022C2
302# if !EFSYS_OPT_FALCON
303#  error "PHY_QT2022C2 requires FALCON"
304# endif
305#endif /* EFSYS_OPT_PHY_QT2022C2 */
306
307/* Support QT2025C PHY (Wakefield NIC) */
308#if EFSYS_OPT_PHY_QT2025C
309# if !EFSYS_OPT_FALCON
310#  error "PHY_QT2025C requires FALCON"
311# endif
312#endif /* EFSYS_OPT_PHY_QT2025C */
313
314/* Support SFT9001 PHY (Starbolt NIC) */
315#if EFSYS_OPT_PHY_SFT9001
316# if !EFSYS_OPT_FALCON
317#  error "PHY_SFT9001 requires FALCON"
318# endif
319#endif /* EFSYS_OPT_PHY_SFT9001 */
320
321/* Support SFX7101 PHY (SFE4001 NIC) */
322#if EFSYS_OPT_PHY_SFX7101
323# if !EFSYS_OPT_FALCON
324#  error "PHY_SFX7101 requires FALCON"
325# endif
326#endif /* EFSYS_OPT_PHY_SFX7101 */
327
328/* Support PHY statistics */
329#if EFSYS_OPT_PHY_STATS
330# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA)
331#  error "PHY_STATS requires FALCON or SIENA"
332# endif
333#endif /* EFSYS_OPT_PHY_STATS */
334
335/* Support TXC43128 PHY (SFE4003 NIC) */
336#if EFSYS_OPT_PHY_TXC43128
337# if !EFSYS_OPT_FALCON
338#  error "PHY_TXC43128 requires FALCON"
339# endif
340#endif /* EFSYS_OPT_PHY_TXC43128 */
341
342/* Support EVQ/RXQ/TXQ statistics */
343#if EFSYS_OPT_QSTATS
344# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
345	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
346#  error "QSTATS requires FALCON or SIENA or HUNTINGTON or MEDFORD"
347# endif
348#endif /* EFSYS_OPT_QSTATS */
349
350/* Obsolete option */
351#ifdef EFSYS_OPT_RX_HDR_SPLIT
352# error "RX_HDR_SPLIT is obsolete and is not supported"
353#endif /* EFSYS_OPT_RX_HDR_SPLIT */
354
355/* Support receive scaling (RSS) */
356#if EFSYS_OPT_RX_SCALE
357# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
358	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
359#  error "RX_SCALE requires FALCON or SIENA or HUNTINGTON or MEDFORD"
360# endif
361#endif /* EFSYS_OPT_RX_SCALE */
362
363/* Support receive scatter DMA */
364#if EFSYS_OPT_RX_SCATTER
365# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
366	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
367#  error "RX_SCATTER requires FALCON or SIENA or HUNTINGTON or MEDFORD"
368# endif
369#endif /* EFSYS_OPT_RX_SCATTER */
370
371/* Obsolete option */
372#ifdef EFSYS_OPT_STAT_NAME
373# error "STAT_NAME is obsolete (replaced by NAMES)."
374#endif
375
376/* Support PCI Vital Product Data (VPD) */
377#if EFSYS_OPT_VPD
378# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
379	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
380#  error "VPD requires FALCON or SIENA or HUNTINGTON or MEDFORD"
381# endif
382#endif /* EFSYS_OPT_VPD */
383
384/* Support Wake on LAN */
385#if EFSYS_OPT_WOL
386# if !EFSYS_OPT_SIENA
387#  error "WOL requires SIENA"
388# endif
389#endif /* EFSYS_OPT_WOL */
390
391/* Obsolete option */
392#ifdef EFSYS_OPT_MCAST_FILTER_LIST
393#  error "MCAST_FILTER_LIST is obsolete and is not supported"
394#endif /* EFSYS_OPT_MCAST_FILTER_LIST */
395
396/* Support BIST */
397#if EFSYS_OPT_BIST
398# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
399	EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
400#  error "BIST requires FALCON or SIENA or HUNTINGTON or MEDFORD"
401# endif
402#endif /* EFSYS_OPT_BIST */
403
404/* Support MCDI licensing API */
405#if EFSYS_OPT_LICENSING
406# if !EFSYS_OPT_MCDI
407#  error "LICENSING requires MCDI"
408# endif
409# if !EFSYS_HAS_UINT64
410#  error "LICENSING requires UINT64"
411# endif
412#endif /* EFSYS_OPT_LICENSING */
413
414
415#endif /* _SYS_EFX_CHECK_H */
416