efx_check.h revision 299335
1283514Sarybchik/*- 2283514Sarybchik * Copyright (c) 2012-2015 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: head/sys/dev/sfxge/common/efx_check.h 299335 2016-05-10 07:20:18Z 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#else 49299253Sarybchik/* FIXME: remove this after Falcon support has been removed */ 50299253Sarybchik#define EFSYS_OPT_PHY_TXC43128 (0) 51299253Sarybchik#endif 52299253Sarybchik 53283514Sarybchik/* Support NVRAM based boot config */ 54283514Sarybchik#if EFSYS_OPT_BOOTCFG 55283514Sarybchik# if !EFSYS_OPT_NVRAM 56283514Sarybchik# error "BOOTCFG requires NVRAM" 57283514Sarybchik# endif 58283514Sarybchik#endif /* EFSYS_OPT_BOOTCFG */ 59283514Sarybchik 60283514Sarybchik/* Verify chip implements accessed registers */ 61283514Sarybchik#if EFSYS_OPT_CHECK_REG 62299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 63299320Sarybchik# error "CHECK_REG requires SIENA or HUNTINGTON or MEDFORD" 64283514Sarybchik# endif 65283514Sarybchik#endif /* EFSYS_OPT_CHECK_REG */ 66283514Sarybchik 67283514Sarybchik/* Decode fatal errors */ 68283514Sarybchik#if EFSYS_OPT_DECODE_INTR_FATAL 69299320Sarybchik# if !EFSYS_OPT_SIENA 70299320Sarybchik# error "INTR_FATAL requires SIENA" 71283514Sarybchik# endif 72283514Sarybchik#endif /* EFSYS_OPT_DECODE_INTR_FATAL */ 73283514Sarybchik 74283514Sarybchik/* Support diagnostic hardware tests */ 75283514Sarybchik#if EFSYS_OPT_DIAG 76299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 77299320Sarybchik# error "DIAG requires SIENA or HUNTINGTON or MEDFORD" 78283514Sarybchik# endif 79283514Sarybchik#endif /* EFSYS_OPT_DIAG */ 80283514Sarybchik 81283514Sarybchik/* Support optimized EVQ data access */ 82283514Sarybchik#if EFSYS_OPT_EV_PREFETCH 83299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 84299320Sarybchik# error "EV_PREFETCH requires SIENA or HUNTINGTON or MEDFORD" 85283514Sarybchik# endif 86283514Sarybchik#endif /* EFSYS_OPT_EV_PREFETCH */ 87283514Sarybchik 88299321Sarybchik#ifdef EFSYS_OPT_FALCON_NIC_CFG_OVERRIDE 89299321Sarybchik# error "FALCON_NIC_CFG_OVERRIDE is obsolete and is not supported." 90299321Sarybchik#endif 91283514Sarybchik 92283514Sarybchik/* Support hardware packet filters */ 93283514Sarybchik#if EFSYS_OPT_FILTER 94299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 95299320Sarybchik# error "FILTER requires SIENA or HUNTINGTON or MEDFORD" 96283514Sarybchik# endif 97283514Sarybchik#endif /* EFSYS_OPT_FILTER */ 98283514Sarybchik 99293730Sarybchik#if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 100283514Sarybchik# if !EFSYS_OPT_FILTER 101293730Sarybchik# error "HUNTINGTON or MEDFORD requires FILTER" 102283514Sarybchik# endif 103283514Sarybchik#endif /* EFSYS_OPT_HUNTINGTON */ 104283514Sarybchik 105283514Sarybchik/* Support hardware loopback modes */ 106283514Sarybchik#if EFSYS_OPT_LOOPBACK 107299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 108299320Sarybchik# error "LOOPBACK requires SIENA or HUNTINGTON or MEDFORD" 109283514Sarybchik# endif 110283514Sarybchik#endif /* EFSYS_OPT_LOOPBACK */ 111283514Sarybchik 112299322Sarybchik#ifdef EFSYS_OPT_MAC_FALCON_GMAC 113299322Sarybchik# error "MAC_FALCON_GMAC is obsolete and is not supported." 114299322Sarybchik#endif 115283514Sarybchik 116299323Sarybchik#ifdef EFSYS_OPT_MAC_FALCON_XMAC 117299323Sarybchik# error "MAC_FALCON_XMAC is obsolete and is not supported." 118299323Sarybchik#endif 119283514Sarybchik 120283514Sarybchik/* Support MAC statistics */ 121283514Sarybchik#if EFSYS_OPT_MAC_STATS 122299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 123299320Sarybchik# error "MAC_STATS requires SIENA or HUNTINGTON or MEDFORD" 124283514Sarybchik# endif 125283514Sarybchik#endif /* EFSYS_OPT_MAC_STATS */ 126283514Sarybchik 127283514Sarybchik/* Support management controller messages */ 128283514Sarybchik#if EFSYS_OPT_MCDI 129293730Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 130293730Sarybchik# error "MCDI requires SIENA or HUNTINGTON or MEDFORD" 131283514Sarybchik# endif 132283514Sarybchik#endif /* EFSYS_OPT_MCDI */ 133283514Sarybchik 134293730Sarybchik#if (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 135293730Sarybchik# if !EFSYS_OPT_MCDI 136293730Sarybchik# error "SIENA or HUNTINGTON or MEDFORD requires MCDI" 137293730Sarybchik# endif 138283514Sarybchik#endif 139283514Sarybchik 140291677Sarybchik/* Support MCDI logging */ 141291677Sarybchik#if EFSYS_OPT_MCDI_LOGGING 142291677Sarybchik# if !EFSYS_OPT_MCDI 143291677Sarybchik# error "MCDI_LOGGING requires MCDI" 144291677Sarybchik# endif 145291677Sarybchik#endif /* EFSYS_OPT_MCDI_LOGGING */ 146291677Sarybchik 147291927Sarybchik/* Support MCDI proxy authorization */ 148291927Sarybchik#if EFSYS_OPT_MCDI_PROXY_AUTH 149291927Sarybchik# if !EFSYS_OPT_MCDI 150291927Sarybchik# error "MCDI_PROXY_AUTH requires MCDI" 151291927Sarybchik# endif 152291927Sarybchik#endif /* EFSYS_OPT_MCDI_PROXY_AUTH */ 153291927Sarybchik 154299324Sarybchik#ifdef EFSYS_OPT_MON_LM87 155299324Sarybchik# error "MON_LM87 is obsolete and is not supported." 156299324Sarybchik#endif 157283514Sarybchik 158299325Sarybchik#ifdef EFSYS_OPT_MON_MAX6647 159299325Sarybchik# error "MON_MAX6647 is obsolete and is not supported." 160299325Sarybchik#endif 161283514Sarybchik 162299326Sarybchik#ifdef EFSYS_OPT_MON_NULL 163299326Sarybchik# error "MON_NULL is obsolete and is not supported." 164299326Sarybchik#endif 165283514Sarybchik 166293767Sarybchik/* Obsolete option */ 167283514Sarybchik#ifdef EFSYS_OPT_MON_SIENA 168293767Sarybchik# error "MON_SIENA is obsolete (replaced by MON_MCDI)." 169283514Sarybchik#endif /* EFSYS_OPT_MON_SIENA*/ 170283514Sarybchik 171293767Sarybchik/* Obsolete option */ 172283514Sarybchik#ifdef EFSYS_OPT_MON_HUNTINGTON 173293767Sarybchik# error "MON_HUNTINGTON is obsolete (replaced by MON_MCDI)." 174283514Sarybchik#endif /* EFSYS_OPT_MON_HUNTINGTON*/ 175283514Sarybchik 176283514Sarybchik/* Support monitor statistics (voltage/temperature) */ 177283514Sarybchik#if EFSYS_OPT_MON_STATS 178299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 179299320Sarybchik# error "MON_STATS requires SIENA or HUNTINGTON or MEDFORD" 180283514Sarybchik# endif 181283514Sarybchik#endif /* EFSYS_OPT_MON_STATS */ 182283514Sarybchik 183283514Sarybchik/* Support Monitor via mcdi */ 184283514Sarybchik#if EFSYS_OPT_MON_MCDI 185293730Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 186293730Sarybchik# error "MON_MCDI requires SIENA or HUNTINGTON or MEDFORD" 187283514Sarybchik# endif 188283514Sarybchik#endif /* EFSYS_OPT_MON_MCDI*/ 189283514Sarybchik 190283514Sarybchik/* Support printable names for statistics */ 191283514Sarybchik#if EFSYS_OPT_NAMES 192283514Sarybchik# if !(EFSYS_OPT_LOOPBACK || EFSYS_OPT_MAC_STATS || EFSYS_OPT_MCDI || \ 193283514Sarybchik EFSYS_MON_STATS || EFSYS_OPT_PHY_PROPS || EFSYS_OPT_PHY_STATS || \ 194283514Sarybchik EFSYS_OPT_QSTATS) 195283514Sarybchik# error "NAMES requires LOOPBACK or xxxSTATS or MCDI or PHY_PROPS" 196283514Sarybchik# endif 197283514Sarybchik#endif /* EFSYS_OPT_NAMES */ 198283514Sarybchik 199283514Sarybchik/* Support non volatile configuration */ 200283514Sarybchik#if EFSYS_OPT_NVRAM 201299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 202299320Sarybchik# error "NVRAM requires SIENA or HUNTINGTON or MEDFORD" 203283514Sarybchik# endif 204283514Sarybchik#endif /* EFSYS_OPT_NVRAM */ 205283514Sarybchik 206299327Sarybchik#ifdef EFSYS_OPT_NVRAM_FALCON_BOOTROM 207299327Sarybchik# error "NVRAM_FALCON_BOOTROM is obsolete and is not supported." 208299327Sarybchik#endif 209283514Sarybchik 210299328Sarybchik#ifdef EFSYS_OPT_NVRAM_SFT9001 211299328Sarybchik# error "NVRAM_SFT9001 is obsolete and is not supported." 212299328Sarybchik#endif 213283514Sarybchik 214299330Sarybchik#ifdef EFSYS_OPT_NVRAM_SFX7101 215299330Sarybchik# error "NVRAM_SFX7101 is obsolete and is not supported." 216299330Sarybchik#endif 217283514Sarybchik 218299254Sarybchik#ifdef EFSYS_OPT_PCIE_TUNE 219299254Sarybchik# error "PCIE_TUNE is obsolete and is not supported." 220299254Sarybchik#endif 221283514Sarybchik 222293767Sarybchik/* Obsolete option */ 223299252Sarybchik#ifdef EFSYS_OPT_PHY_BIST 224299252Sarybchik# error "PHY_BIST is obsolete (replaced by BIST)." 225299252Sarybchik#endif 226283514Sarybchik 227283514Sarybchik/* Support PHY flags */ 228283514Sarybchik#if EFSYS_OPT_PHY_FLAGS 229299320Sarybchik# if !EFSYS_OPT_SIENA 230299320Sarybchik# error "PHY_FLAGS requires SIENA" 231283514Sarybchik# endif 232283514Sarybchik#endif /* EFSYS_OPT_PHY_FLAGS */ 233283514Sarybchik 234283514Sarybchik/* Support for PHY LED control */ 235283514Sarybchik#if EFSYS_OPT_PHY_LED_CONTROL 236299320Sarybchik# if !EFSYS_OPT_SIENA 237299320Sarybchik# error "PHY_LED_CONTROL requires SIENA" 238283514Sarybchik# endif 239283514Sarybchik#endif /* EFSYS_OPT_PHY_LED_CONTROL */ 240283514Sarybchik 241299331Sarybchik#ifdef EFSYS_OPT_PHY_NULL 242299331Sarybchik# error "PHY_NULL is obsolete and is not supported." 243299331Sarybchik#endif 244283514Sarybchik 245283514Sarybchik/* Obsolete option */ 246283514Sarybchik#ifdef EFSYS_OPT_PHY_PM8358 247283514Sarybchik# error "EFSYS_OPT_PHY_PM8358 is obsolete and is not supported." 248283514Sarybchik#endif 249283514Sarybchik 250283514Sarybchik/* Support PHY properties */ 251283514Sarybchik#if EFSYS_OPT_PHY_PROPS 252299320Sarybchik# if !EFSYS_OPT_SIENA 253299320Sarybchik# error "PHY_PROPS requires SIENA" 254283514Sarybchik# endif 255283514Sarybchik#endif /* EFSYS_OPT_PHY_PROPS */ 256283514Sarybchik 257299332Sarybchik#ifdef EFSYS_OPT_PHY_QT2022C2 258299332Sarybchik# error "PHY_QT2022C2 is obsolete and is not supported." 259299332Sarybchik#endif 260283514Sarybchik 261299333Sarybchik#ifdef EFSYS_OPT_PHY_QT2025C 262299333Sarybchik# error "PHY_QT2025C is obsolete and is not supported." 263299333Sarybchik#endif 264283514Sarybchik 265299334Sarybchik#ifdef EFSYS_OPT_PHY_SFT9001 266299334Sarybchik# error "PHY_SFT9001 is obsolete and is not supported." 267299334Sarybchik#endif 268283514Sarybchik 269299335Sarybchik#ifdef EFSYS_OPT_PHY_SFX7101 270299335Sarybchik# error "PHY_SFX7101 is obsolete and is not supported." 271299335Sarybchik#endif 272283514Sarybchik 273283514Sarybchik/* Support PHY statistics */ 274283514Sarybchik#if EFSYS_OPT_PHY_STATS 275299320Sarybchik# if !EFSYS_OPT_SIENA 276299320Sarybchik# error "PHY_STATS requires SIENA" 277283514Sarybchik# endif 278283514Sarybchik#endif /* EFSYS_OPT_PHY_STATS */ 279283514Sarybchik 280283514Sarybchik/* Support TXC43128 PHY (SFE4003 NIC) */ 281283514Sarybchik#if EFSYS_OPT_PHY_TXC43128 282283514Sarybchik# if !EFSYS_OPT_FALCON 283283514Sarybchik# error "PHY_TXC43128 requires FALCON" 284283514Sarybchik# endif 285283514Sarybchik#endif /* EFSYS_OPT_PHY_TXC43128 */ 286283514Sarybchik 287283514Sarybchik/* Support EVQ/RXQ/TXQ statistics */ 288283514Sarybchik#if EFSYS_OPT_QSTATS 289299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 290299320Sarybchik# error "QSTATS requires SIENA or HUNTINGTON or MEDFORD" 291283514Sarybchik# endif 292283514Sarybchik#endif /* EFSYS_OPT_QSTATS */ 293283514Sarybchik 294293806Sarybchik/* Obsolete option */ 295293806Sarybchik#ifdef EFSYS_OPT_RX_HDR_SPLIT 296293806Sarybchik# error "RX_HDR_SPLIT is obsolete and is not supported" 297283514Sarybchik#endif /* EFSYS_OPT_RX_HDR_SPLIT */ 298283514Sarybchik 299283514Sarybchik/* Support receive scaling (RSS) */ 300283514Sarybchik#if EFSYS_OPT_RX_SCALE 301299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 302299320Sarybchik# error "RX_SCALE requires SIENA or HUNTINGTON or MEDFORD" 303283514Sarybchik# endif 304283514Sarybchik#endif /* EFSYS_OPT_RX_SCALE */ 305283514Sarybchik 306283514Sarybchik/* Support receive scatter DMA */ 307283514Sarybchik#if EFSYS_OPT_RX_SCATTER 308299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 309299320Sarybchik# error "RX_SCATTER requires SIENA or HUNTINGTON or MEDFORD" 310283514Sarybchik# endif 311283514Sarybchik#endif /* EFSYS_OPT_RX_SCATTER */ 312283514Sarybchik 313283514Sarybchik/* Obsolete option */ 314283514Sarybchik#ifdef EFSYS_OPT_STAT_NAME 315293767Sarybchik# error "STAT_NAME is obsolete (replaced by NAMES)." 316283514Sarybchik#endif 317283514Sarybchik 318283514Sarybchik/* Support PCI Vital Product Data (VPD) */ 319283514Sarybchik#if EFSYS_OPT_VPD 320299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 321299320Sarybchik# error "VPD requires SIENA or HUNTINGTON or MEDFORD" 322283514Sarybchik# endif 323283514Sarybchik#endif /* EFSYS_OPT_VPD */ 324283514Sarybchik 325283514Sarybchik/* Support Wake on LAN */ 326283514Sarybchik#if EFSYS_OPT_WOL 327283514Sarybchik# if !EFSYS_OPT_SIENA 328283514Sarybchik# error "WOL requires SIENA" 329283514Sarybchik# endif 330283514Sarybchik#endif /* EFSYS_OPT_WOL */ 331283514Sarybchik 332293758Sarybchik/* Obsolete option */ 333293758Sarybchik#ifdef EFSYS_OPT_MCAST_FILTER_LIST 334293767Sarybchik# error "MCAST_FILTER_LIST is obsolete and is not supported" 335283514Sarybchik#endif /* EFSYS_OPT_MCAST_FILTER_LIST */ 336283514Sarybchik 337283514Sarybchik/* Support BIST */ 338283514Sarybchik#if EFSYS_OPT_BIST 339299320Sarybchik# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) 340299320Sarybchik# error "BIST requires SIENA or HUNTINGTON or MEDFORD" 341283514Sarybchik# endif 342283514Sarybchik#endif /* EFSYS_OPT_BIST */ 343283514Sarybchik 344293901Sarybchik/* Support MCDI licensing API */ 345293901Sarybchik#if EFSYS_OPT_LICENSING 346293901Sarybchik# if !EFSYS_OPT_MCDI 347293901Sarybchik# error "LICENSING requires MCDI" 348293901Sarybchik# endif 349293901Sarybchik# if !EFSYS_HAS_UINT64 350293901Sarybchik# error "LICENSING requires UINT64" 351293901Sarybchik# endif 352293901Sarybchik#endif /* EFSYS_OPT_LICENSING */ 353293901Sarybchik 354293901Sarybchik 355283514Sarybchik#endif /* _SYS_EFX_CHECK_H */ 356