1 /* SPDX-License-Identifier: BSD-3-Clause
3 * Copyright (c) 2018-2019 Solarflare Communications Inc.
14 static const efx_evb_ops_t __efx_evb_dummy_ops = {
18 #endif /* EFSYS_OPT_SIENA */
20 #if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2
21 static const efx_evb_ops_t __efx_evb_ef10_ops = {
22 ef10_evb_init, /* eeo_init */
23 ef10_evb_fini, /* eeo_fini */
25 #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2 */
27 __checkReturn efx_rc_t
31 const efx_evb_ops_t *eeop;
33 efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
35 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
36 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
37 EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_EVB));
39 switch (enp->en_family) {
41 case EFX_FAMILY_SIENA:
42 eeop = &__efx_evb_dummy_ops;
44 #endif /* EFSYS_OPT_SIENA */
46 #if EFSYS_OPT_HUNTINGTON
47 case EFX_FAMILY_HUNTINGTON:
48 eeop = &__efx_evb_ef10_ops;
50 #endif /* EFSYS_OPT_HUNTINGTON */
53 case EFX_FAMILY_MEDFORD:
54 eeop = &__efx_evb_ef10_ops;
56 #endif /* EFSYS_OPT_MEDFORD */
58 #if EFSYS_OPT_MEDFORD2
59 case EFX_FAMILY_MEDFORD2:
60 eeop = &__efx_evb_ef10_ops;
62 #endif /* EFSYS_OPT_MEDFORD2 */
70 if (!encp->enc_datapath_cap_evb || !eeop->eeo_init) {
75 if ((rc = eeop->eeo_init(enp)) != 0)
79 enp->en_mod_flags |= EFX_MOD_EVB;
87 EFSYS_PROBE1(fail1, efx_rc_t, rc);
96 const efx_evb_ops_t *eeop = enp->en_eeop;
98 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
99 EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_PROBE);
100 EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_RX));
101 EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_TX));
103 if (eeop && eeop->eeo_fini)
107 enp->en_mod_flags &= ~EFX_MOD_EVB;