X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fbase%2Fefx_evb.c;h=dd64bc78546a25a6bc346449dfbd9c5940179f5f;hb=168c59cfe42b;hp=27b466f8b5ad20db81d4fdafbf5cc1e4720efcc2;hpb=d1708933bb48a3d86be336d6c9603300131ff70f;p=dpdk.git diff --git a/drivers/net/sfc/base/efx_evb.c b/drivers/net/sfc/base/efx_evb.c index 27b466f8b5..dd64bc7854 100644 --- a/drivers/net/sfc/base/efx_evb.c +++ b/drivers/net/sfc/base/efx_evb.c @@ -23,6 +23,8 @@ static const efx_evb_ops_t __efx_evb_dummy_ops = { NULL, /* eeo_vadaptor_alloc */ NULL, /* eeo_vadaptor_free */ NULL, /* eeo_vport_assign */ + NULL, /* eeo_vport_reconfigure */ + NULL, /* eeo_vport_stats */ }; #endif /* EFSYS_OPT_SIENA */ @@ -39,6 +41,8 @@ static const efx_evb_ops_t __efx_evb_ef10_ops = { ef10_evb_vadaptor_alloc, /* eeo_vadaptor_alloc */ ef10_evb_vadaptor_free, /* eeo_vadaptor_free */ ef10_evb_vport_assign, /* eeo_vport_assign */ + ef10_evb_vport_reconfigure, /* eeo_vport_reconfigure */ + ef10_evb_vport_stats, /* eeo_vport_stats */ }; #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2 */ @@ -348,7 +352,114 @@ fail1: return (rc); } + __checkReturn efx_rc_t +efx_evb_vport_mac_set( + __in efx_nic_t *enp, + __in efx_vswitch_t *evp, + __in efx_vport_id_t vport_id, + __in_bcount(EFX_MAC_ADDR_LEN) uint8_t *addrp) +{ + const efx_evb_ops_t *eeop = enp->en_eeop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_EVB); + + if (eeop->eeo_vport_reconfigure == NULL) { + rc = ENOTSUP; + goto fail1; + } + + if (addrp == NULL) { + rc = EINVAL; + goto fail2; + } + + rc = eeop->eeo_vport_reconfigure(enp, evp->ev_vswitch_id, vport_id, + NULL, addrp, NULL); + if (rc != 0) + goto fail3; + + return (0); + +fail3: + EFSYS_PROBE(fail3); +fail2: + EFSYS_PROBE(fail2); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} + __checkReturn efx_rc_t +efx_evb_vport_vlan_set( + __in efx_nic_t *enp, + __in efx_vswitch_t *evp, + __in efx_vport_id_t vport_id, + __in uint16_t vid) +{ + const efx_evb_ops_t *eeop = enp->en_eeop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_EVB); + + if (eeop->eeo_vport_reconfigure == NULL) { + rc = ENOTSUP; + goto fail1; + } + + rc = eeop->eeo_vport_reconfigure(enp, evp->ev_vswitch_id, vport_id, + &vid, NULL, NULL); + if (rc != 0) + goto fail2; + + return (0); + +fail2: + EFSYS_PROBE(fail2); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} + + __checkReturn efx_rc_t +efx_evb_vport_reset( + __in efx_nic_t *enp, + __in efx_vswitch_t *evp, + __in efx_vport_id_t vport_id, + __in_bcount(EFX_MAC_ADDR_LEN) uint8_t *addrp, + __in uint16_t vid, + __out boolean_t *is_fn_resetp) +{ + const efx_evb_ops_t *eeop = enp->en_eeop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_EVB); + + if (eeop->eeo_vport_reconfigure == NULL) { + rc = ENOTSUP; + goto fail1; + } + + if (is_fn_resetp == NULL) { + rc = EINVAL; + goto fail2; + } + + rc = eeop->eeo_vport_reconfigure(enp, evp->ev_vswitch_id, vport_id, + &vid, addrp, is_fn_resetp); + if (rc != 0) + goto fail3; + + return (0); + +fail3: + EFSYS_PROBE(fail3); +fail2: + EFSYS_PROBE(fail2); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} __checkReturn efx_rc_t efx_evb_vswitch_destroy( __in efx_nic_t *enp, @@ -392,4 +503,42 @@ fail1: return (rc); } + __checkReturn efx_rc_t +efx_evb_vport_stats( + __in efx_nic_t *enp, + __in efx_vswitch_t *evp, + __in efx_vport_id_t vport_id, + __out efsys_mem_t *stats_bufferp) +{ + efx_rc_t rc; + const efx_evb_ops_t *eeop = enp->en_eeop; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_EVB); + + if (eeop->eeo_vport_stats == NULL) { + rc = ENOTSUP; + goto fail1; + } + + if (stats_bufferp == NULL) { + rc = EINVAL; + goto fail2; + } + + rc = eeop->eeo_vport_stats(enp, evp->ev_vswitch_id, + vport_id, stats_bufferp); + if (rc != 0) + goto fail3; + + return (0); + +fail3: + EFSYS_PROBE(fail3); +fail2: + EFSYS_PROBE(fail2); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} + #endif