1 /* SPDX-License-Identifier: BSD-3-Clause
3 * Copyright(c) 2019-2021 Xilinx, Inc.
4 * Copyright(c) 2012-2019 Solarflare Communications Inc.
7 #ifndef _SYS_EFX_CHECK_H
8 #define _SYS_EFX_CHECK_H
13 * LIBEFX_* defines may be used to put API functions into dedicated code
14 * section if required by driver development framework and conventions.
18 # error "LIBEFX_API must be defined"
21 #ifndef LIBEFX_INTERNAL
22 # error "LIBEFX_INTERNAL must be defined"
26 * Check that the efsys.h header in client code has a valid combination of
27 * EFSYS_OPT_xxx options.
29 * NOTE: Keep checks for obsolete options here to ensure that they are removed
30 * from client code (and do not reappear in merges from other branches).
33 /* Check family options for EF10 architecture controllers. */
34 #define EFX_OPTS_EF10() \
35 (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
37 #ifdef EFSYS_OPT_FALCON
38 # error "FALCON is obsolete and is not supported."
42 /* Support NVRAM based boot config */
44 # error "BOOTCFG requires NVRAM"
46 #endif /* EFSYS_OPT_BOOTCFG */
48 #if EFSYS_OPT_CHECK_REG
49 /* Verify chip implements accessed registers */
50 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
51 # error "CHECK_REG requires RIVERHEAD or EF10 arch or SIENA"
53 #endif /* EFSYS_OPT_CHECK_REG */
55 #if EFSYS_OPT_DECODE_INTR_FATAL
56 /* Decode fatal errors */
58 # error "INTR_FATAL requires SIENA"
60 #endif /* EFSYS_OPT_DECODE_INTR_FATAL */
63 /* Support diagnostic hardware tests */
64 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
65 # error "DIAG requires EF10 arch or SIENA"
67 #endif /* EFSYS_OPT_DIAG */
69 #if EFSYS_OPT_EV_PREFETCH
70 /* Support optimized EVQ data access */
71 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
72 # error "EV_PREFETCH requires EF10 arch or SIENA"
74 #endif /* EFSYS_OPT_EV_PREFETCH */
76 #ifdef EFSYS_OPT_FALCON_NIC_CFG_OVERRIDE
77 # error "FALCON_NIC_CFG_OVERRIDE is obsolete and is not supported."
81 /* Support hardware packet filters */
82 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
83 # error "FILTER requires RIVERHEAD or EF10 arch or SIENA"
85 #endif /* EFSYS_OPT_FILTER */
87 #if EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10()
88 # if !EFSYS_OPT_FILTER
89 # error "RIVERHEAD or EF10 arch requires FILTER"
91 #endif /* EFX_OPTS_EF10() */
93 #if EFSYS_OPT_LOOPBACK
94 /* Support hardware loopback modes */
95 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
96 # error "LOOPBACK requires RIVERHEAD or EF10 arch or SIENA"
98 #endif /* EFSYS_OPT_LOOPBACK */
100 #ifdef EFSYS_OPT_MAC_FALCON_GMAC
101 # error "MAC_FALCON_GMAC is obsolete and is not supported."
104 #ifdef EFSYS_OPT_MAC_FALCON_XMAC
105 # error "MAC_FALCON_XMAC is obsolete and is not supported."
108 #if EFSYS_OPT_MAC_STATS
109 /* Support MAC statistics */
110 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
111 # error "MAC_STATS requires RIVERHEAD or EF10 arch or SIENA"
113 #endif /* EFSYS_OPT_MAC_STATS */
116 /* Support management controller messages */
117 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
118 # error "MCDI requires RIVERHEAD or EF10 arch or SIENA"
120 #endif /* EFSYS_OPT_MCDI */
122 #if (EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
124 # error "RIVERHEAD or EF10 arch or SIENA requires MCDI"
128 #if EFSYS_OPT_MCDI_LOGGING
129 /* Support MCDI logging */
131 # error "MCDI_LOGGING requires MCDI"
133 #endif /* EFSYS_OPT_MCDI_LOGGING */
135 #if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER
136 /* Support MCDI proxy authorization (server) */
137 # if !EFSYS_OPT_MCDI_PROXY_AUTH
138 # error "MCDI_PROXY_AUTH_SERVER requires MCDI_PROXY_AUTH"
140 #endif /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */
142 #if EFSYS_OPT_MCDI_PROXY_AUTH
143 /* Support MCDI proxy authorization (client) */
145 # error "MCDI_PROXY_AUTH requires MCDI"
147 #endif /* EFSYS_OPT_MCDI_PROXY_AUTH */
149 #ifdef EFSYS_OPT_MON_LM87
150 # error "MON_LM87 is obsolete and is not supported."
153 #ifdef EFSYS_OPT_MON_MAX6647
154 # error "MON_MAX6647 is obsolete and is not supported."
157 #ifdef EFSYS_OPT_MON_NULL
158 # error "MON_NULL is obsolete and is not supported."
161 #ifdef EFSYS_OPT_MON_SIENA
162 # error "MON_SIENA is obsolete (replaced by MON_MCDI)."
165 #ifdef EFSYS_OPT_MON_HUNTINGTON
166 # error "MON_HUNTINGTON is obsolete (replaced by MON_MCDI)."
169 #if EFSYS_OPT_MON_STATS
170 /* Support monitor statistics (voltage/temperature) */
171 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
172 # error "MON_STATS requires EF10 arch or SIENA"
174 #endif /* EFSYS_OPT_MON_STATS */
176 #if EFSYS_OPT_MON_MCDI
177 /* Support Monitor via mcdi */
178 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
179 # error "MON_MCDI requires EF10 arch or SIENA"
181 #endif /* EFSYS_OPT_MON_MCDI*/
184 /* Support printable names for statistics */
185 # if !(EFSYS_OPT_LOOPBACK || EFSYS_OPT_MAC_STATS || EFSYS_OPT_MCDI || \
186 EFSYS_MON_STATS || EFSYS_OPT_PHY_STATS || EFSYS_OPT_QSTATS)
187 # error "NAMES requires LOOPBACK or xxxSTATS or MCDI"
189 #endif /* EFSYS_OPT_NAMES */
192 /* Support non volatile configuration */
193 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
194 # error "NVRAM requires EF10 arch or SIENA"
196 #endif /* EFSYS_OPT_NVRAM */
198 #if EFSYS_OPT_IMAGE_LAYOUT
199 /* Support signed image layout handling */
200 # if !(EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
201 # error "IMAGE_LAYOUT requires MEDFORD or MEDFORD2"
203 #endif /* EFSYS_OPT_IMAGE_LAYOUT */
205 #ifdef EFSYS_OPT_NVRAM_FALCON_BOOTROM
206 # error "NVRAM_FALCON_BOOTROM is obsolete and is not supported."
209 #ifdef EFSYS_OPT_NVRAM_SFT9001
210 # error "NVRAM_SFT9001 is obsolete and is not supported."
213 #ifdef EFSYS_OPT_NVRAM_SFX7101
214 # error "NVRAM_SFX7101 is obsolete and is not supported."
217 #ifdef EFSYS_OPT_PCIE_TUNE
218 # error "PCIE_TUNE is obsolete and is not supported."
221 #ifdef EFSYS_OPT_PHY_BIST
222 # error "PHY_BIST is obsolete (replaced by BIST)."
225 #if EFSYS_OPT_PHY_FLAGS
226 /* Support PHY flags */
227 # if !EFSYS_OPT_SIENA
228 # error "PHY_FLAGS requires SIENA"
230 #endif /* EFSYS_OPT_PHY_FLAGS */
232 #if EFSYS_OPT_PHY_LED_CONTROL
233 /* Support for PHY LED control */
234 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
235 # error "PHY_LED_CONTROL requires EF10 arch or SIENA"
237 #endif /* EFSYS_OPT_PHY_LED_CONTROL */
239 #ifdef EFSYS_OPT_PHY_NULL
240 # error "PHY_NULL is obsolete and is not supported."
243 #ifdef EFSYS_OPT_PHY_PM8358
244 # error "PHY_PM8358 is obsolete and is not supported."
247 #ifdef EFSYS_OPT_PHY_PROPS
248 # error "PHY_PROPS is obsolete and is not supported."
251 #ifdef EFSYS_OPT_PHY_QT2022C2
252 # error "PHY_QT2022C2 is obsolete and is not supported."
255 #ifdef EFSYS_OPT_PHY_QT2025C
256 # error "PHY_QT2025C is obsolete and is not supported."
259 #ifdef EFSYS_OPT_PHY_SFT9001
260 # error "PHY_SFT9001 is obsolete and is not supported."
263 #ifdef EFSYS_OPT_PHY_SFX7101
264 # error "PHY_SFX7101 is obsolete and is not supported."
267 #if EFSYS_OPT_PHY_STATS
268 /* Support PHY statistics */
269 # if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
270 # error "PHY_STATS requires SIENA or HUNTINGTON or MEDFORD"
272 #endif /* EFSYS_OPT_PHY_STATS */
274 #ifdef EFSYS_OPT_PHY_TXC43128
275 # error "PHY_TXC43128 is obsolete and is not supported."
279 /* Support EVQ/RXQ/TXQ statistics */
280 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
281 # error "QSTATS requires EF10 arch or SIENA"
283 #endif /* EFSYS_OPT_QSTATS */
285 #ifdef EFSYS_OPT_RX_HDR_SPLIT
286 # error "RX_HDR_SPLIT is obsolete and is not supported"
289 #if EFSYS_OPT_RX_SCALE
290 /* Support receive scaling (RSS) */
291 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
292 # error "RX_SCALE requires RIVERHEAD or EF10 arch or SIENA"
294 #endif /* EFSYS_OPT_RX_SCALE */
296 #if EFSYS_OPT_RX_SCATTER
297 /* Support receive scatter DMA */
298 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
299 # error "RX_SCATTER requires RIVERHEAD or EF10 arch or SIENA"
301 #endif /* EFSYS_OPT_RX_SCATTER */
303 #ifdef EFSYS_OPT_STAT_NAME
304 # error "STAT_NAME is obsolete (replaced by NAMES)."
308 /* Support PCI Vital Product Data (VPD) */
309 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
310 # error "VPD requires EF10 arch or SIENA"
312 #endif /* EFSYS_OPT_VPD */
315 # error "WOL is obsolete and is not supported"
316 #endif /* EFSYS_OPT_WOL */
318 #ifdef EFSYS_OPT_MCAST_FILTER_LIST
319 # error "MCAST_FILTER_LIST is obsolete and is not supported"
324 # if !(EFX_OPTS_EF10() || EFSYS_OPT_SIENA)
325 # error "BIST requires EF10 arch or SIENA"
327 #endif /* EFSYS_OPT_BIST */
329 #if EFSYS_OPT_LICENSING
330 /* Support MCDI licensing API */
332 # error "LICENSING requires MCDI"
334 # if !EFSYS_HAS_UINT64
335 # error "LICENSING requires UINT64"
337 #endif /* EFSYS_OPT_LICENSING */
339 #if EFSYS_OPT_ALLOW_UNCONFIGURED_NIC
340 /* Support adapters with missing static config (for factory use only) */
341 # if !(EFSYS_OPT_RIVERHEAD || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
342 # error "ALLOW_UNCONFIGURED_NIC requires RIVERHEAD or MEDFORD or MEDFORD2"
344 #endif /* EFSYS_OPT_ALLOW_UNCONFIGURED_NIC */
346 #if EFSYS_OPT_RX_PACKED_STREAM
347 /* Support packed stream mode */
348 # if !EFX_OPTS_EF10()
349 # error "PACKED_STREAM requires EF10 arch"
353 #if EFSYS_OPT_RX_ES_SUPER_BUFFER
354 /* Support equal stride super-buffer mode */
355 # if !(EFSYS_OPT_MEDFORD2)
356 # error "ES_SUPER_BUFFER requires MEDFORD2"
360 /* Support hardware assistance for tunnels */
362 # if !(EFSYS_OPT_RIVERHEAD || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2)
363 # error "TUNNEL requires RIVERHEAD or MEDFORD or MEDFORD2"
365 #endif /* EFSYS_OPT_TUNNEL */
367 #if EFSYS_OPT_FW_SUBVARIANT_AWARE
368 /* Advertise that the driver is firmware subvariant aware */
369 # if !(EFSYS_OPT_MEDFORD2)
370 # error "FW_SUBVARIANT_AWARE requires MEDFORD2"
375 /* Support enterprise virtual bridging */
376 # if !(EFSYS_OPT_RIVERHEAD || EFX_OPTS_EF10())
377 # error "EVB requires RIVERHEAD or EF10 arch"
379 #endif /* EFSYS_OPT_EVB */
382 # if !EFSYS_OPT_RIVERHEAD
383 # error "PCI requires RIVERHEAD"
385 #endif /* EFSYS_OPT_PCI */
387 /* Support extended width event queues */
388 #if EFSYS_OPT_EV_EXTENDED_WIDTH
389 # if !EFSYS_OPT_RIVERHEAD
390 # error "EV_EXTENDED_WIDTH requires RIVERHEAD"
392 #endif /* EFSYS_OPT_EV_EXTENDED_WIDTH */
394 /* Support descriptor proxy queues */
395 #if EFSYS_OPT_DESC_PROXY
396 # if !EFSYS_OPT_RIVERHEAD
397 # error "DESC_PROXY requires RIVERHEAD"
399 # if !EFSYS_OPT_EV_EXTENDED_WIDTH
400 # error "DESC_PROXY requires EV_EXTENDED_WIDTH"
402 #endif /* EFSYS_OPT_DESC_PROXY */
405 # if !EFSYS_OPT_RIVERHEAD
406 # error "MAE requires RIVERHEAD"
408 #endif /* EFSYS_OPT_MAE */
411 # if !EFSYS_OPT_RIVERHEAD
412 # error "VIRTIO requires RIVERHEAD"
414 # if !EFSYS_HAS_UINT64
415 # error "VIRTIO requires UINT64"
417 #endif /* EFSYS_OPT_VIRTIO */
419 #endif /* _SYS_EFX_CHECK_H */