common/sfc_efx/base: add API to get mport of PF/VF

PCIe functions have static MPORTs which can be utilised by
MAE rules as delivery destinations for matching traffic.

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
This commit is contained in:
Ivan Malov 2020-10-20 10:13:15 +01:00 committed by Ferruh Yigit
parent 4bee5ad547
commit 097058033f
3 changed files with 54 additions and 0 deletions

View File

@ -4111,6 +4111,20 @@ efx_mae_mport_by_phy_port(
__in uint32_t phy_port,
__out efx_mport_sel_t *mportp);
/*
* Get MPORT selector of a PCIe function.
*
* The resulting MPORT selector is opaque to the caller and can be
* passed as an argument to efx_mae_match_spec_mport_set()
* and efx_mae_action_set_populate_deliver().
*/
LIBEFX_API
extern __checkReturn efx_rc_t
efx_mae_mport_by_pcie_function(
__in uint32_t pf,
__in uint32_t vf,
__out efx_mport_sel_t *mportp);
/*
* Fields which have BE postfix in their named constants are expected
* to be passed by callers in big-endian byte order. They will appear

View File

@ -357,6 +357,45 @@ efx_mae_mport_by_phy_port(
return (0);
fail1:
EFSYS_PROBE1(fail1, efx_rc_t, rc);
return (rc);
}
__checkReturn efx_rc_t
efx_mae_mport_by_pcie_function(
__in uint32_t pf,
__in uint32_t vf,
__out efx_mport_sel_t *mportp)
{
efx_dword_t dword;
efx_rc_t rc;
EFX_STATIC_ASSERT(EFX_PCI_VF_INVALID ==
MAE_MPORT_SELECTOR_FUNC_VF_ID_NULL);
if (pf > EFX_MASK32(MAE_MPORT_SELECTOR_FUNC_PF_ID)) {
rc = EINVAL;
goto fail1;
}
if (vf > EFX_MASK32(MAE_MPORT_SELECTOR_FUNC_VF_ID)) {
rc = EINVAL;
goto fail2;
}
EFX_POPULATE_DWORD_3(dword,
MAE_MPORT_SELECTOR_TYPE, MAE_MPORT_SELECTOR_TYPE_FUNC,
MAE_MPORT_SELECTOR_FUNC_PF_ID, pf,
MAE_MPORT_SELECTOR_FUNC_VF_ID, vf);
memset(mportp, 0, sizeof (*mportp));
mportp->sel = dword.ed_u32[0];
return (0);
fail2:
EFSYS_PROBE(fail2);
fail1:
EFSYS_PROBE1(fail1, efx_rc_t, rc);
return (rc);

View File

@ -106,6 +106,7 @@ INTERNAL {
efx_mae_match_spec_is_valid;
efx_mae_match_spec_mport_set;
efx_mae_match_specs_class_cmp;
efx_mae_mport_by_pcie_function;
efx_mae_mport_by_phy_port;
efx_mcdi_fini;