__in efx_nic_t *enp)
{
ef10_filter_table_t *table = enp->en_filter.ef_ef10_filter_table;
+ efx_port_t *epp = &(enp->en_port);
unsigned int i;
for (i = 0; i < table->eft_unicst_filter_count; i++) {
table->eft_encap_filter_indexes[i]);
}
table->eft_encap_filter_count = 0;
+
+ epp->ep_all_unicst_inserted = B_FALSE;
+ epp->ep_all_mulcst_inserted = B_FALSE;
}
static void
__out boolean_t *all_unicst_inserted)
{
ef10_filter_table_t *table = enp->en_filter.ef_ef10_filter_table;
+ efx_port_t *epp = &(enp->en_port);
efx_rc_t rc;
/*
filter_flags);
if (all_unicst_rc == 0) {
*all_unicst_inserted = B_TRUE;
+ epp->ep_all_unicst_inserted = B_TRUE;
} else if (rc != 0)
goto fail1;
}
{
ef10_filter_table_t *table = enp->en_filter.ef_ef10_filter_table;
efx_nic_cfg_t *encp = &enp->en_nic_cfg;
+ efx_port_t *epp = &(enp->en_port);
efx_rc_t rc;
*all_mulcst_inserted = B_FALSE;
all_mulcst_rc = ef10_filter_insert_all_multicast(enp,
filter_flags);
if (all_mulcst_rc == 0) {
+ epp->ep_all_mulcst_inserted = B_TRUE;
*all_mulcst_inserted = B_TRUE;
} else {
rc = ef10_filter_insert_multicast_list(enp, B_TRUE,
* by packets matching multiple filters.
*/
ef10_filter_remove_old(enp);
+ if (all_unicst_inserted == B_FALSE)
+ epp->ep_all_unicst_inserted = B_FALSE;
+ if (*all_mulcst_inserted == B_FALSE)
+ epp->ep_all_mulcst_inserted = B_FALSE;
}
rc = ef10_filter_insert_all_multicast(enp,
filter_flags);
if (rc == 0) {
+ epp->ep_all_mulcst_inserted = B_TRUE;
*all_mulcst_inserted = B_TRUE;
} else {
rc = ef10_filter_insert_multicast_list(enp,
__in uint32_t count)
{
efx_nic_cfg_t *encp = &enp->en_nic_cfg;
+ efx_port_t *epp = &(enp->en_port);
ef10_filter_table_t *table = enp->en_filter.ef_ef10_filter_table;
efx_filter_flags_t filter_flags;
unsigned int i;
* multicast filters.
*/
ef10_filter_remove_old(enp);
+ if (all_unicst_inserted == B_FALSE)
+ epp->ep_all_unicst_inserted = B_FALSE;
+
+ epp->ep_all_mulcst_inserted = B_FALSE;
}
/* Insert or renew multicast filters */
/* Remove old filters which were not renewed */
ef10_filter_remove_old(enp);
+ if (all_unicst_inserted == B_FALSE)
+ epp->ep_all_unicst_inserted = B_FALSE;
+ if (all_mulcst_inserted == B_FALSE)
+ epp->ep_all_mulcst_inserted = B_FALSE;
/* report if any optional flags were rejected */
if (((all_unicst != B_FALSE) && (all_unicst_inserted == B_FALSE)) ||
return (rc);
}
+ void
+efx_mac_filter_get_all_ucast_mcast(
+ __in efx_nic_t *enp,
+ __out boolean_t *all_unicst,
+ __out boolean_t *all_mulcst)
+{
+ efx_port_t *epp = &(enp->en_port);
+
+ EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
+ EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PORT);
+
+ *all_unicst = epp->ep_all_unicst_inserted;
+ *all_mulcst = epp->ep_all_mulcst_inserted;
+}
+
__checkReturn efx_rc_t
efx_mac_drain(
__in efx_nic_t *enp,