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 = {
17 NULL, /* eeo_vswitch_alloc */
18 NULL, /* eeo_vswitch_free */
19 NULL, /* eeo_vport_alloc */
20 NULL, /* eeo_vport_free */
21 NULL, /* eeo_vport_mac_addr_add */
22 NULL, /* eeo_vport_mac_addr_del */
23 NULL, /* eeo_vadaptor_alloc */
24 NULL, /* eeo_vadaptor_free */
25 NULL, /* eeo_vport_assign */
27 #endif /* EFSYS_OPT_SIENA */
29 #if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2
30 static const efx_evb_ops_t __efx_evb_ef10_ops = {
31 ef10_evb_init, /* eeo_init */
32 ef10_evb_fini, /* eeo_fini */
33 ef10_evb_vswitch_alloc, /* eeo_vswitch_alloc */
34 ef10_evb_vswitch_free, /* eeo_vswitch_free */
35 ef10_evb_vport_alloc, /* eeo_vport_alloc */
36 ef10_evb_vport_free, /* eeo_vport_free */
37 ef10_evb_vport_mac_addr_add, /* eeo_vport_mac_addr_add */
38 ef10_evb_vport_mac_addr_del, /* eeo_vport_mac_addr_del */
39 ef10_evb_vadaptor_alloc, /* eeo_vadaptor_alloc */
40 ef10_evb_vadaptor_free, /* eeo_vadaptor_free */
41 ef10_evb_vport_assign, /* eeo_vport_assign */
43 #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2 */
45 __checkReturn efx_rc_t
49 const efx_evb_ops_t *eeop;
51 efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
53 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
54 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
55 EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_EVB));
57 switch (enp->en_family) {
59 case EFX_FAMILY_SIENA:
60 eeop = &__efx_evb_dummy_ops;
62 #endif /* EFSYS_OPT_SIENA */
64 #if EFSYS_OPT_HUNTINGTON
65 case EFX_FAMILY_HUNTINGTON:
66 eeop = &__efx_evb_ef10_ops;
68 #endif /* EFSYS_OPT_HUNTINGTON */
71 case EFX_FAMILY_MEDFORD:
72 eeop = &__efx_evb_ef10_ops;
74 #endif /* EFSYS_OPT_MEDFORD */
76 #if EFSYS_OPT_MEDFORD2
77 case EFX_FAMILY_MEDFORD2:
78 eeop = &__efx_evb_ef10_ops;
80 #endif /* EFSYS_OPT_MEDFORD2 */
88 if (!encp->enc_datapath_cap_evb || !eeop->eeo_init) {
93 if ((rc = eeop->eeo_init(enp)) != 0)
97 enp->en_mod_flags |= EFX_MOD_EVB;
105 EFSYS_PROBE1(fail1, efx_rc_t, rc);
114 const efx_evb_ops_t *eeop = enp->en_eeop;
116 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
117 EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_PROBE);
118 EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_RX));
119 EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_TX));
121 if (eeop && eeop->eeo_fini)
125 enp->en_mod_flags &= ~EFX_MOD_EVB;