/* SPDX-License-Identifier: BSD-3-Clause
*
- * Copyright (c) 2007-2018 Solarflare Communications Inc.
- * All rights reserved.
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2007-2019 Solarflare Communications Inc.
*/
#include "efx.h"
__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)) ||