__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
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);
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;