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:
parent
4bee5ad547
commit
097058033f
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user