X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fbase%2Fefx_proxy.c;h=791105a5a08f7e3139ad64d199aff71ae8bcf0df;hb=45a49cc7e7a589d268e362ee275c399a6640708a;hp=6aadf076eb5ac12071c94e1261b54500d09e3fc6;hpb=18c8e84d7726ad16bb81fdb7649e13202997cd41;p=dpdk.git diff --git a/drivers/net/sfc/base/efx_proxy.c b/drivers/net/sfc/base/efx_proxy.c index 6aadf076eb..791105a5a0 100644 --- a/drivers/net/sfc/base/efx_proxy.c +++ b/drivers/net/sfc/base/efx_proxy.c @@ -16,6 +16,10 @@ static const efx_proxy_ops_t __efx_proxy_dummy_ops = { NULL, /* epo_mc_config */ NULL, /* epo_disable */ NULL, /* epo_privilege_modify */ + NULL, /* epo_set_privilege_mask */ + NULL, /* epo_complete_request */ + NULL, /* epo_exec_cmd */ + NULL, /* epo_get_privilege_mask */ }; #endif /* EFSYS_OPT_SIENA */ @@ -26,6 +30,10 @@ static const efx_proxy_ops_t __efx_proxy_ef10_ops = { ef10_proxy_auth_mc_config, /* epo_mc_config */ ef10_proxy_auth_disable, /* epo_disable */ ef10_proxy_auth_privilege_modify, /* epo_privilege_modify */ + ef10_proxy_auth_set_privilege_mask, /* epo_set_privilege_mask */ + ef10_proxy_auth_complete_request, /* epo_complete_request */ + ef10_proxy_auth_exec_cmd, /* epo_exec_cmd */ + ef10_proxy_auth_get_privilege_mask, /* epo_get_privilege_mask */ }; #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2 */ @@ -197,4 +205,160 @@ fail1: return (rc); } + __checkReturn efx_rc_t +efx_proxy_auth_complete_request( + __in efx_nic_t *enp, + __in uint32_t fn_index, + __in uint32_t proxy_result, + __in uint32_t handle) +{ + const efx_proxy_ops_t *epop = enp->en_epop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_PROXY); + + if (epop->epo_complete_request == NULL) { + rc = ENOTSUP; + goto fail1; + } + + rc = epop->epo_complete_request(enp, fn_index, proxy_result, handle); + 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_proxy_auth_exec_cmd( + __in efx_nic_t *enp, + __inout efx_proxy_cmd_params_t *paramsp) +{ + const efx_proxy_ops_t *epop = enp->en_epop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_PROXY); + + if (paramsp == NULL) { + rc = EINVAL; + goto fail1; + } + + if (epop->epo_exec_cmd == NULL) { + rc = ENOTSUP; + goto fail2; + } + + rc = epop->epo_exec_cmd(enp, paramsp); + 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_proxy_auth_set_privilege_mask( + __in efx_nic_t *enp, + __in uint32_t vf_index, + __in uint32_t mask, + __in uint32_t value) +{ + const efx_proxy_ops_t *epop = enp->en_epop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_PROXY); + + if (epop->epo_set_privilege_mask == NULL) { + rc = ENOTSUP; + goto fail1; + } + + rc = epop->epo_set_privilege_mask(enp, vf_index, mask, value); + 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_proxy_auth_privilege_mask_get( + __in efx_nic_t *enp, + __in uint32_t pf_index, + __in uint32_t vf_index, + __out uint32_t *maskp) +{ + const efx_proxy_ops_t *epop = enp->en_epop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_PROXY); + + if (epop->epo_get_privilege_mask == NULL) { + rc = ENOTSUP; + goto fail1; + } + + rc = epop->epo_get_privilege_mask(enp, pf_index, vf_index, maskp); + 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_proxy_auth_privilege_modify( + __in efx_nic_t *enp, + __in uint32_t pf_index, + __in uint32_t vf_index, + __in uint32_t add_privileges_mask, + __in uint32_t remove_privileges_mask) +{ + const efx_proxy_ops_t *epop = enp->en_epop; + efx_rc_t rc; + + EFSYS_ASSERT(enp->en_mod_flags & EFX_MOD_PROXY); + + if (epop->epo_privilege_modify == NULL) { + rc = ENOTSUP; + goto fail1; + } + + rc = epop->epo_privilege_modify(enp, MC_CMD_PRIVILEGE_MODIFY_IN_ONE, + pf_index, vf_index, add_privileges_mask, + remove_privileges_mask); + if (rc != 0) + goto fail2; + + return (0); + +fail2: + EFSYS_PROBE(fail2); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} + #endif /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */