1283514Sarybchik/*-
2300607Sarybchik * Copyright (c) 2012-2016 Solarflare Communications Inc.
3283514Sarybchik * All rights reserved.
4283514Sarybchik *
5283514Sarybchik * Redistribution and use in source and binary forms, with or without
6283514Sarybchik * modification, are permitted provided that the following conditions are met:
7283514Sarybchik *
8283514Sarybchik * 1. Redistributions of source code must retain the above copyright notice,
9283514Sarybchik *    this list of conditions and the following disclaimer.
10283514Sarybchik * 2. Redistributions in binary form must reproduce the above copyright notice,
11283514Sarybchik *    this list of conditions and the following disclaimer in the documentation
12283514Sarybchik *    and/or other materials provided with the distribution.
13283514Sarybchik *
14283514Sarybchik * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15283514Sarybchik * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16283514Sarybchik * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17283514Sarybchik * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18283514Sarybchik * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19283514Sarybchik * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20283514Sarybchik * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21283514Sarybchik * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22283514Sarybchik * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23283514Sarybchik * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
24283514Sarybchik * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25283514Sarybchik *
26283514Sarybchik * The views and conclusions contained in the software and documentation are
27283514Sarybchik * those of the authors and should not be interpreted as representing official
28283514Sarybchik * policies, either expressed or implied, of the FreeBSD Project.
29283514Sarybchik *
30283514Sarybchik * $FreeBSD: releng/11.0/sys/dev/sfxge/common/efx_check.h 300607 2016-05-24 12:16:57Z arybchik $
31283514Sarybchik */
32283514Sarybchik
33283514Sarybchik#ifndef _SYS_EFX_CHECK_H
34283514Sarybchik#define	_SYS_EFX_CHECK_H
35283514Sarybchik
36283514Sarybchik#include "efsys.h"
37283514Sarybchik
38283514Sarybchik/*
39283514Sarybchik * Check that the efsys.h header in client code has a valid combination of
40283514Sarybchik * EFSYS_OPT_xxx options.
41283514Sarybchik *
42283514Sarybchik * NOTE: Keep checks for obsolete options here to ensure that they are removed
43283514Sarybchik * from client code (and do not reappear in merges from other branches).
44283514Sarybchik */
45283514Sarybchik
46299253Sarybchik#ifdef EFSYS_OPT_FALCON
47299253Sarybchik# error "FALCON is obsolete and is not supported."
48299253Sarybchik#endif
49299253Sarybchik
50283514Sarybchik/* Support NVRAM based boot config */
51283514Sarybchik#if EFSYS_OPT_BOOTCFG
52283514Sarybchik# if !EFSYS_OPT_NVRAM
53283514Sarybchik#  error "BOOTCFG requires NVRAM"
54283514Sarybchik# endif
55283514Sarybchik#endif /* EFSYS_OPT_BOOTCFG */
56283514Sarybchik
57283514Sarybchik/* Verify chip implements accessed registers */
58283514Sarybchik#if EFSYS_OPT_CHECK_REG
59299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
60299320Sarybchik#  error "CHECK_REG requires SIENA or HUNTINGTON or MEDFORD"
61283514Sarybchik# endif
62283514Sarybchik#endif /* EFSYS_OPT_CHECK_REG */
63283514Sarybchik
64283514Sarybchik/* Decode fatal errors */
65283514Sarybchik#if EFSYS_OPT_DECODE_INTR_FATAL
66299320Sarybchik# if !EFSYS_OPT_SIENA
67299320Sarybchik#  error "INTR_FATAL requires SIENA"
68283514Sarybchik# endif
69283514Sarybchik#endif /* EFSYS_OPT_DECODE_INTR_FATAL */
70283514Sarybchik
71283514Sarybchik/* Support diagnostic hardware tests */
72283514Sarybchik#if EFSYS_OPT_DIAG
73299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
74299320Sarybchik#  error "DIAG requires SIENA or HUNTINGTON or MEDFORD"
75283514Sarybchik# endif
76283514Sarybchik#endif /* EFSYS_OPT_DIAG */
77283514Sarybchik
78283514Sarybchik/* Support optimized EVQ data access */
79283514Sarybchik#if EFSYS_OPT_EV_PREFETCH
80299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
81299320Sarybchik#  error "EV_PREFETCH requires SIENA or HUNTINGTON or MEDFORD"
82283514Sarybchik# endif
83283514Sarybchik#endif /* EFSYS_OPT_EV_PREFETCH */
84283514Sarybchik
85299321Sarybchik#ifdef EFSYS_OPT_FALCON_NIC_CFG_OVERRIDE
86299321Sarybchik# error "FALCON_NIC_CFG_OVERRIDE is obsolete and is not supported."
87299321Sarybchik#endif
88283514Sarybchik
89283514Sarybchik/* Support hardware packet filters */
90283514Sarybchik#if EFSYS_OPT_FILTER
91299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
92299320Sarybchik#  error "FILTER requires SIENA or HUNTINGTON or MEDFORD"
93283514Sarybchik# endif
94283514Sarybchik#endif /* EFSYS_OPT_FILTER */
95283514Sarybchik
96293730Sarybchik#if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
97283514Sarybchik# if !EFSYS_OPT_FILTER
98293730Sarybchik#  error "HUNTINGTON or MEDFORD requires FILTER"
99283514Sarybchik# endif
100283514Sarybchik#endif /* EFSYS_OPT_HUNTINGTON */
101283514Sarybchik
102283514Sarybchik/* Support hardware loopback modes */
103283514Sarybchik#if EFSYS_OPT_LOOPBACK
104299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
105299320Sarybchik#  error "LOOPBACK requires SIENA or HUNTINGTON or MEDFORD"
106283514Sarybchik# endif
107283514Sarybchik#endif /* EFSYS_OPT_LOOPBACK */
108283514Sarybchik
109299322Sarybchik#ifdef EFSYS_OPT_MAC_FALCON_GMAC
110299322Sarybchik# error "MAC_FALCON_GMAC is obsolete and is not supported."
111299322Sarybchik#endif
112283514Sarybchik
113299323Sarybchik#ifdef EFSYS_OPT_MAC_FALCON_XMAC
114299323Sarybchik# error "MAC_FALCON_XMAC is obsolete and is not supported."
115299323Sarybchik#endif
116283514Sarybchik
117283514Sarybchik/* Support MAC statistics */
118283514Sarybchik#if EFSYS_OPT_MAC_STATS
119299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
120299320Sarybchik#  error "MAC_STATS requires SIENA or HUNTINGTON or MEDFORD"
121283514Sarybchik# endif
122283514Sarybchik#endif /* EFSYS_OPT_MAC_STATS */
123283514Sarybchik
124283514Sarybchik/* Support management controller messages */
125283514Sarybchik#if EFSYS_OPT_MCDI
126293730Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
127293730Sarybchik#  error "MCDI requires SIENA or HUNTINGTON or MEDFORD"
128283514Sarybchik# endif
129283514Sarybchik#endif /* EFSYS_OPT_MCDI */
130283514Sarybchik
131293730Sarybchik#if (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
132293730Sarybchik# if !EFSYS_OPT_MCDI
133293730Sarybchik#  error "SIENA or HUNTINGTON or MEDFORD requires MCDI"
134293730Sarybchik# endif
135283514Sarybchik#endif
136283514Sarybchik
137291677Sarybchik/* Support MCDI logging */
138291677Sarybchik#if EFSYS_OPT_MCDI_LOGGING
139291677Sarybchik# if !EFSYS_OPT_MCDI
140291677Sarybchik#  error "MCDI_LOGGING requires MCDI"
141291677Sarybchik# endif
142291677Sarybchik#endif /* EFSYS_OPT_MCDI_LOGGING */
143291677Sarybchik
144291927Sarybchik/* Support MCDI proxy authorization */
145291927Sarybchik#if EFSYS_OPT_MCDI_PROXY_AUTH
146291927Sarybchik# if !EFSYS_OPT_MCDI
147291927Sarybchik#  error "MCDI_PROXY_AUTH requires MCDI"
148291927Sarybchik# endif
149291927Sarybchik#endif /* EFSYS_OPT_MCDI_PROXY_AUTH */
150291927Sarybchik
151299324Sarybchik#ifdef EFSYS_OPT_MON_LM87
152299324Sarybchik# error "MON_LM87 is obsolete and is not supported."
153299324Sarybchik#endif
154283514Sarybchik
155299325Sarybchik#ifdef EFSYS_OPT_MON_MAX6647
156299325Sarybchik# error "MON_MAX6647 is obsolete and is not supported."
157299325Sarybchik#endif
158283514Sarybchik
159299326Sarybchik#ifdef EFSYS_OPT_MON_NULL
160299326Sarybchik# error "MON_NULL is obsolete and is not supported."
161299326Sarybchik#endif
162283514Sarybchik
163283514Sarybchik#ifdef EFSYS_OPT_MON_SIENA
164293767Sarybchik#  error "MON_SIENA is obsolete (replaced by MON_MCDI)."
165299337Sarybchik#endif
166283514Sarybchik
167283514Sarybchik#ifdef EFSYS_OPT_MON_HUNTINGTON
168293767Sarybchik#  error "MON_HUNTINGTON is obsolete (replaced by MON_MCDI)."
169299337Sarybchik#endif
170283514Sarybchik
171283514Sarybchik/* Support monitor statistics (voltage/temperature) */
172283514Sarybchik#if EFSYS_OPT_MON_STATS
173299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
174299320Sarybchik#  error "MON_STATS requires SIENA or HUNTINGTON or MEDFORD"
175283514Sarybchik# endif
176283514Sarybchik#endif /* EFSYS_OPT_MON_STATS */
177283514Sarybchik
178283514Sarybchik/* Support Monitor via mcdi */
179283514Sarybchik#if EFSYS_OPT_MON_MCDI
180293730Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
181293730Sarybchik#  error "MON_MCDI requires SIENA or HUNTINGTON or MEDFORD"
182283514Sarybchik# endif
183283514Sarybchik#endif /* EFSYS_OPT_MON_MCDI*/
184283514Sarybchik
185283514Sarybchik/* Support printable names for statistics */
186283514Sarybchik#if EFSYS_OPT_NAMES
187283514Sarybchik# if !(EFSYS_OPT_LOOPBACK || EFSYS_OPT_MAC_STATS || EFSYS_OPT_MCDI || \
188299722Sarybchik	EFSYS_MON_STATS || EFSYS_OPT_PHY_STATS || EFSYS_OPT_QSTATS)
189299722Sarybchik#  error "NAMES requires LOOPBACK or xxxSTATS or MCDI"
190283514Sarybchik# endif
191283514Sarybchik#endif /* EFSYS_OPT_NAMES */
192283514Sarybchik
193283514Sarybchik/* Support non volatile configuration */
194283514Sarybchik#if EFSYS_OPT_NVRAM
195299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
196299320Sarybchik#  error "NVRAM requires SIENA or HUNTINGTON or MEDFORD"
197283514Sarybchik# endif
198283514Sarybchik#endif /* EFSYS_OPT_NVRAM */
199283514Sarybchik
200299327Sarybchik#ifdef EFSYS_OPT_NVRAM_FALCON_BOOTROM
201299327Sarybchik# error "NVRAM_FALCON_BOOTROM is obsolete and is not supported."
202299327Sarybchik#endif
203283514Sarybchik
204299328Sarybchik#ifdef EFSYS_OPT_NVRAM_SFT9001
205299328Sarybchik# error "NVRAM_SFT9001 is obsolete and is not supported."
206299328Sarybchik#endif
207283514Sarybchik
208299330Sarybchik#ifdef EFSYS_OPT_NVRAM_SFX7101
209299330Sarybchik# error "NVRAM_SFX7101 is obsolete and is not supported."
210299330Sarybchik#endif
211283514Sarybchik
212299254Sarybchik#ifdef EFSYS_OPT_PCIE_TUNE
213299254Sarybchik# error "PCIE_TUNE is obsolete and is not supported."
214299254Sarybchik#endif
215283514Sarybchik
216299252Sarybchik#ifdef EFSYS_OPT_PHY_BIST
217299252Sarybchik# error "PHY_BIST is obsolete (replaced by BIST)."
218299252Sarybchik#endif
219283514Sarybchik
220283514Sarybchik/* Support PHY flags */
221283514Sarybchik#if EFSYS_OPT_PHY_FLAGS
222299320Sarybchik# if !EFSYS_OPT_SIENA
223299320Sarybchik#  error "PHY_FLAGS requires SIENA"
224283514Sarybchik# endif
225283514Sarybchik#endif /* EFSYS_OPT_PHY_FLAGS */
226283514Sarybchik
227283514Sarybchik/* Support for PHY LED control */
228283514Sarybchik#if EFSYS_OPT_PHY_LED_CONTROL
229299320Sarybchik# if !EFSYS_OPT_SIENA
230299320Sarybchik#  error "PHY_LED_CONTROL requires SIENA"
231283514Sarybchik# endif
232283514Sarybchik#endif /* EFSYS_OPT_PHY_LED_CONTROL */
233283514Sarybchik
234299331Sarybchik#ifdef EFSYS_OPT_PHY_NULL
235299331Sarybchik# error "PHY_NULL is obsolete and is not supported."
236299331Sarybchik#endif
237283514Sarybchik
238283514Sarybchik#ifdef EFSYS_OPT_PHY_PM8358
239299722Sarybchik# error "PHY_PM8358 is obsolete and is not supported."
240283514Sarybchik#endif
241283514Sarybchik
242299722Sarybchik#ifdef EFSYS_OPT_PHY_PROPS
243299722Sarybchik# error "PHY_PROPS is obsolete and is not supported."
244299722Sarybchik#endif
245283514Sarybchik
246299332Sarybchik#ifdef EFSYS_OPT_PHY_QT2022C2
247299332Sarybchik# error "PHY_QT2022C2 is obsolete and is not supported."
248299332Sarybchik#endif
249283514Sarybchik
250299333Sarybchik#ifdef EFSYS_OPT_PHY_QT2025C
251299333Sarybchik# error "PHY_QT2025C is obsolete and is not supported."
252299333Sarybchik#endif
253283514Sarybchik
254299334Sarybchik#ifdef EFSYS_OPT_PHY_SFT9001
255299334Sarybchik# error "PHY_SFT9001 is obsolete and is not supported."
256299334Sarybchik#endif
257283514Sarybchik
258299335Sarybchik#ifdef EFSYS_OPT_PHY_SFX7101
259299335Sarybchik# error "PHY_SFX7101 is obsolete and is not supported."
260299335Sarybchik#endif
261283514Sarybchik
262283514Sarybchik/* Support PHY statistics */
263283514Sarybchik#if EFSYS_OPT_PHY_STATS
264299320Sarybchik# if !EFSYS_OPT_SIENA
265299320Sarybchik#  error "PHY_STATS requires SIENA"
266283514Sarybchik# endif
267283514Sarybchik#endif /* EFSYS_OPT_PHY_STATS */
268283514Sarybchik
269299336Sarybchik#ifdef EFSYS_OPT_PHY_TXC43128
270299336Sarybchik# error "PHY_TXC43128 is obsolete and is not supported."
271299336Sarybchik#endif
272283514Sarybchik
273283514Sarybchik/* Support EVQ/RXQ/TXQ statistics */
274283514Sarybchik#if EFSYS_OPT_QSTATS
275299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
276299320Sarybchik#  error "QSTATS requires SIENA or HUNTINGTON or MEDFORD"
277283514Sarybchik# endif
278283514Sarybchik#endif /* EFSYS_OPT_QSTATS */
279283514Sarybchik
280293806Sarybchik#ifdef EFSYS_OPT_RX_HDR_SPLIT
281293806Sarybchik# error "RX_HDR_SPLIT is obsolete and is not supported"
282299337Sarybchik#endif
283283514Sarybchik
284283514Sarybchik/* Support receive scaling (RSS) */
285283514Sarybchik#if EFSYS_OPT_RX_SCALE
286299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
287299320Sarybchik#  error "RX_SCALE requires SIENA or HUNTINGTON or MEDFORD"
288283514Sarybchik# endif
289283514Sarybchik#endif /* EFSYS_OPT_RX_SCALE */
290283514Sarybchik
291283514Sarybchik/* Support receive scatter DMA */
292283514Sarybchik#if EFSYS_OPT_RX_SCATTER
293299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
294299320Sarybchik#  error "RX_SCATTER requires SIENA or HUNTINGTON or MEDFORD"
295283514Sarybchik# endif
296283514Sarybchik#endif /* EFSYS_OPT_RX_SCATTER */
297283514Sarybchik
298283514Sarybchik#ifdef EFSYS_OPT_STAT_NAME
299293767Sarybchik# error "STAT_NAME is obsolete (replaced by NAMES)."
300283514Sarybchik#endif
301283514Sarybchik
302283514Sarybchik/* Support PCI Vital Product Data (VPD) */
303283514Sarybchik#if EFSYS_OPT_VPD
304299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
305299320Sarybchik#  error "VPD requires SIENA or HUNTINGTON or MEDFORD"
306283514Sarybchik# endif
307283514Sarybchik#endif /* EFSYS_OPT_VPD */
308283514Sarybchik
309283514Sarybchik/* Support Wake on LAN */
310283514Sarybchik#if EFSYS_OPT_WOL
311283514Sarybchik# if !EFSYS_OPT_SIENA
312283514Sarybchik#  error "WOL requires SIENA"
313283514Sarybchik# endif
314283514Sarybchik#endif /* EFSYS_OPT_WOL */
315283514Sarybchik
316293758Sarybchik#ifdef EFSYS_OPT_MCAST_FILTER_LIST
317293767Sarybchik#  error "MCAST_FILTER_LIST is obsolete and is not supported"
318299337Sarybchik#endif
319283514Sarybchik
320283514Sarybchik/* Support BIST */
321283514Sarybchik#if EFSYS_OPT_BIST
322299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
323299320Sarybchik#  error "BIST requires SIENA or HUNTINGTON or MEDFORD"
324283514Sarybchik# endif
325283514Sarybchik#endif /* EFSYS_OPT_BIST */
326283514Sarybchik
327293901Sarybchik/* Support MCDI licensing API */
328293901Sarybchik#if EFSYS_OPT_LICENSING
329293901Sarybchik# if !EFSYS_OPT_MCDI
330293901Sarybchik#  error "LICENSING requires MCDI"
331293901Sarybchik# endif
332293901Sarybchik# if !EFSYS_HAS_UINT64
333293901Sarybchik#  error "LICENSING requires UINT64"
334293901Sarybchik# endif
335293901Sarybchik#endif /* EFSYS_OPT_LICENSING */
336293901Sarybchik
337300606Sarybchik/* Support adapters with missing static config (for factory use only) */
338300606Sarybchik#if EFSYS_OPT_ALLOW_UNCONFIGURED_NIC
339300606Sarybchik# if !EFSYS_OPT_MEDFORD
340300606Sarybchik#  error "ALLOW_UNCONFIGURED_NIC requires MEDFORD"
341300606Sarybchik# endif
342300606Sarybchik#endif /* EFSYS_OPT_ALLOW_UNCONFIGURED_NIC */
343293901Sarybchik
344300606Sarybchik
345283514Sarybchik#endif /* _SYS_EFX_CHECK_H */
346