1/*-
2 * Copyright (c) 2012-2016 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_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#ifdef EFSYS_OPT_FALCON
47# error "FALCON is obsolete and is not supported."
48#endif
49
50/* Support NVRAM based boot config */
51#if EFSYS_OPT_BOOTCFG
52# if !EFSYS_OPT_NVRAM
53#  error "BOOTCFG requires NVRAM"
54# endif
55#endif /* EFSYS_OPT_BOOTCFG */
56
57/* Verify chip implements accessed registers */
58#if EFSYS_OPT_CHECK_REG
59# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
60	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
61#  error "CHECK_REG requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
62# endif
63#endif /* EFSYS_OPT_CHECK_REG */
64
65/* Decode fatal errors */
66#if EFSYS_OPT_DECODE_INTR_FATAL
67# if !EFSYS_OPT_SIENA
68#  error "INTR_FATAL requires SIENA"
69# endif
70#endif /* EFSYS_OPT_DECODE_INTR_FATAL */
71
72/* Support diagnostic hardware tests */
73#if EFSYS_OPT_DIAG
74# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
75	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
76#  error "DIAG requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
77# endif
78#endif /* EFSYS_OPT_DIAG */
79
80/* Support optimized EVQ data access */
81#if EFSYS_OPT_EV_PREFETCH
82# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
83	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
84#  error "EV_PREFETCH requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
85# endif
86#endif /* EFSYS_OPT_EV_PREFETCH */
87
88#ifdef EFSYS_OPT_FALCON_NIC_CFG_OVERRIDE
89# error "FALCON_NIC_CFG_OVERRIDE is obsolete and is not supported."
90#endif
91
92/* Support hardware packet filters */
93#if EFSYS_OPT_FILTER
94# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
95	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
96#  error "FILTER requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
97# endif
98#endif /* EFSYS_OPT_FILTER */
99
100#if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
101# if !EFSYS_OPT_FILTER
102#  error "HUNTINGTON or MEDFORD or MEDFORD2 requires FILTER"
103# endif
104#endif /* EFSYS_OPT_HUNTINGTON */
105
106/* Support hardware loopback modes */
107#if EFSYS_OPT_LOOPBACK
108# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
109	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
110#  error "LOOPBACK requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
111# endif
112#endif /* EFSYS_OPT_LOOPBACK */
113
114#ifdef EFSYS_OPT_MAC_FALCON_GMAC
115# error "MAC_FALCON_GMAC is obsolete and is not supported."
116#endif
117
118#ifdef EFSYS_OPT_MAC_FALCON_XMAC
119# error "MAC_FALCON_XMAC is obsolete and is not supported."
120#endif
121
122/* Support MAC statistics */
123#if EFSYS_OPT_MAC_STATS
124# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
125	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
126#  error "MAC_STATS requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
127# endif
128#endif /* EFSYS_OPT_MAC_STATS */
129
130/* Support management controller messages */
131#if EFSYS_OPT_MCDI
132# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
133	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
134#  error "MCDI requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
135# endif
136#endif /* EFSYS_OPT_MCDI */
137
138#if (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
139	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
140# if !EFSYS_OPT_MCDI
141#  error "SIENA or HUNTINGTON or MEDFORD or MEDFORD2 requires MCDI"
142# endif
143#endif
144
145/* Support MCDI logging */
146#if EFSYS_OPT_MCDI_LOGGING
147# if !EFSYS_OPT_MCDI
148#  error "MCDI_LOGGING requires MCDI"
149# endif
150#endif /* EFSYS_OPT_MCDI_LOGGING */
151
152/* Support MCDI proxy authorization */
153#if EFSYS_OPT_MCDI_PROXY_AUTH
154# if !EFSYS_OPT_MCDI
155#  error "MCDI_PROXY_AUTH requires MCDI"
156# endif
157#endif /* EFSYS_OPT_MCDI_PROXY_AUTH */
158
159#ifdef EFSYS_OPT_MON_LM87
160# error "MON_LM87 is obsolete and is not supported."
161#endif
162
163#ifdef EFSYS_OPT_MON_MAX6647
164# error "MON_MAX6647 is obsolete and is not supported."
165#endif
166
167#ifdef EFSYS_OPT_MON_NULL
168# error "MON_NULL is obsolete and is not supported."
169#endif
170
171#ifdef EFSYS_OPT_MON_SIENA
172#  error "MON_SIENA is obsolete (replaced by MON_MCDI)."
173#endif
174
175#ifdef EFSYS_OPT_MON_HUNTINGTON
176#  error "MON_HUNTINGTON is obsolete (replaced by MON_MCDI)."
177#endif
178
179/* Support monitor statistics (voltage/temperature) */
180#if EFSYS_OPT_MON_STATS
181# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
182	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
183#  error "MON_STATS requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
184# endif
185#endif /* EFSYS_OPT_MON_STATS */
186
187/* Support Monitor via mcdi */
188#if EFSYS_OPT_MON_MCDI
189# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
190	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
191#  error "MON_MCDI requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
192# endif
193#endif /* EFSYS_OPT_MON_MCDI*/
194
195/* Support printable names for statistics */
196#if EFSYS_OPT_NAMES
197# if !(EFSYS_OPT_LOOPBACK || EFSYS_OPT_MAC_STATS || EFSYS_OPT_MCDI || \
198	EFSYS_MON_STATS || EFSYS_OPT_PHY_STATS || EFSYS_OPT_QSTATS)
199#  error "NAMES requires LOOPBACK or xxxSTATS or MCDI"
200# endif
201#endif /* EFSYS_OPT_NAMES */
202
203/* Support non volatile configuration */
204#if EFSYS_OPT_NVRAM
205# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
206	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
207#  error "NVRAM requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
208# endif
209#endif /* EFSYS_OPT_NVRAM */
210
211#if EFSYS_OPT_IMAGE_LAYOUT
212/* Support signed image layout handling */
213# if !(EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
214#  error "IMAGE_LAYOUT requires MEDFORD or MEDFORD2"
215# endif
216#endif /* EFSYS_OPT_IMAGE_LAYOUT */
217
218#ifdef EFSYS_OPT_NVRAM_FALCON_BOOTROM
219# error "NVRAM_FALCON_BOOTROM is obsolete and is not supported."
220#endif
221
222#ifdef EFSYS_OPT_NVRAM_SFT9001
223# error "NVRAM_SFT9001 is obsolete and is not supported."
224#endif
225
226#ifdef EFSYS_OPT_NVRAM_SFX7101
227# error "NVRAM_SFX7101 is obsolete and is not supported."
228#endif
229
230#ifdef EFSYS_OPT_PCIE_TUNE
231# error "PCIE_TUNE is obsolete and is not supported."
232#endif
233
234#ifdef EFSYS_OPT_PHY_BIST
235# error "PHY_BIST is obsolete (replaced by BIST)."
236#endif
237
238/* Support PHY flags */
239#if EFSYS_OPT_PHY_FLAGS
240# if !EFSYS_OPT_SIENA
241#  error "PHY_FLAGS requires SIENA"
242# endif
243#endif /* EFSYS_OPT_PHY_FLAGS */
244
245/* Support for PHY LED control */
246#if EFSYS_OPT_PHY_LED_CONTROL
247# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
248	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
249#  error "PHY_LED_CONTROL requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
250# endif
251#endif /* EFSYS_OPT_PHY_LED_CONTROL */
252
253#ifdef EFSYS_OPT_PHY_NULL
254# error "PHY_NULL is obsolete and is not supported."
255#endif
256
257#ifdef EFSYS_OPT_PHY_PM8358
258# error "PHY_PM8358 is obsolete and is not supported."
259#endif
260
261#ifdef EFSYS_OPT_PHY_PROPS
262# error "PHY_PROPS is obsolete and is not supported."
263#endif
264
265#ifdef EFSYS_OPT_PHY_QT2022C2
266# error "PHY_QT2022C2 is obsolete and is not supported."
267#endif
268
269#ifdef EFSYS_OPT_PHY_QT2025C
270# error "PHY_QT2025C is obsolete and is not supported."
271#endif
272
273#ifdef EFSYS_OPT_PHY_SFT9001
274# error "PHY_SFT9001 is obsolete and is not supported."
275#endif
276
277#ifdef EFSYS_OPT_PHY_SFX7101
278# error "PHY_SFX7101 is obsolete and is not supported."
279#endif
280
281/* Support PHY statistics */
282#if EFSYS_OPT_PHY_STATS
283# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
284#  error "PHY_STATS requires SIENA or HUNTINGTON or MEDFORD"
285# endif
286#endif /* EFSYS_OPT_PHY_STATS */
287
288#ifdef EFSYS_OPT_PHY_TXC43128
289# error "PHY_TXC43128 is obsolete and is not supported."
290#endif
291
292/* Support EVQ/RXQ/TXQ statistics */
293#if EFSYS_OPT_QSTATS
294# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
295	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
296#  error "QSTATS requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
297# endif
298#endif /* EFSYS_OPT_QSTATS */
299
300#ifdef EFSYS_OPT_RX_HDR_SPLIT
301# error "RX_HDR_SPLIT is obsolete and is not supported"
302#endif
303
304/* Support receive scaling (RSS) */
305#if EFSYS_OPT_RX_SCALE
306# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
307	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
308#  error "RX_SCALE requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
309# endif
310#endif /* EFSYS_OPT_RX_SCALE */
311
312/* Support receive scatter DMA */
313#if EFSYS_OPT_RX_SCATTER
314# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
315	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
316#  error "RX_SCATTER requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
317# endif
318#endif /* EFSYS_OPT_RX_SCATTER */
319
320#ifdef EFSYS_OPT_STAT_NAME
321# error "STAT_NAME is obsolete (replaced by NAMES)."
322#endif
323
324/* Support PCI Vital Product Data (VPD) */
325#if EFSYS_OPT_VPD
326# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
327	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
328#  error "VPD requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
329# endif
330#endif /* EFSYS_OPT_VPD */
331
332/* Support Wake on LAN */
333#ifdef EFSYS_OPT_WOL
334# error "WOL is obsolete and is not supported"
335#endif /* EFSYS_OPT_WOL */
336
337#ifdef EFSYS_OPT_MCAST_FILTER_LIST
338#  error "MCAST_FILTER_LIST is obsolete and is not supported"
339#endif
340
341/* Support BIST */
342#if EFSYS_OPT_BIST
343# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || \
344	EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
345#  error "BIST requires SIENA or HUNTINGTON or MEDFORD or MEDFORD2"
346# endif
347#endif /* EFSYS_OPT_BIST */
348
349/* Support MCDI licensing API */
350#if EFSYS_OPT_LICENSING
351# if !EFSYS_OPT_MCDI
352#  error "LICENSING requires MCDI"
353# endif
354# if !EFSYS_HAS_UINT64
355#  error "LICENSING requires UINT64"
356# endif
357#endif /* EFSYS_OPT_LICENSING */
358
359/* Support adapters with missing static config (for factory use only) */
360#if EFSYS_OPT_ALLOW_UNCONFIGURED_NIC
361# if !(EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
362#  error "ALLOW_UNCONFIGURED_NIC requires MEDFORD or MEDFORD2"
363# endif
364#endif /* EFSYS_OPT_ALLOW_UNCONFIGURED_NIC */
365
366/* Support packed stream mode */
367#if EFSYS_OPT_RX_PACKED_STREAM
368# if !(EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
369#  error "PACKED_STREAM requires HUNTINGTON or MEDFORD or MEDFORD2"
370# endif
371#endif
372
373#if EFSYS_OPT_RX_ES_SUPER_BUFFER
374/* Support equal stride super-buffer mode */
375# if !(EFSYS_OPT_MEDFORD2)
376#  error "ES_SUPER_BUFFER requires MEDFORD2"
377# endif
378#endif
379
380/* Support hardware assistance for tunnels */
381#if EFSYS_OPT_TUNNEL
382# if !(EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
383#  error "TUNNEL requires MEDFORD or MEDFORD2"
384# endif
385#endif /* EFSYS_OPT_TUNNEL */
386
387#if EFSYS_OPT_FW_SUBVARIANT_AWARE
388/* Advertise that the driver is firmware subvariant aware */
389# if !(EFSYS_OPT_MEDFORD2)
390#  error "FW_SUBVARIANT_AWARE requires MEDFORD2"
391# endif
392#endif
393
394#endif /* _SYS_EFX_CHECK_H */
395