mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
be2net: remove duplicate code in be_cmd_rx_filter()
This patch passes BE_IF_FLAGS_XXX flags to be_cmd_rx_filter() routine instead of the IFF_XXX flags. Doing this gets rid of the code to convert the IFF_XXX flags to the BE_IF_FLAGS_XXX used by the FW cmd. The patch also removes code for setting if_flags_mask that was duplicated for each filter mode. Signed-off-by: Sathya Perla <sathya.perla@emulex.com> Signed-off-by: Kalesh AP <kalesh.purayil@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
70a7b52570
commit
ac34b74378
@ -1886,7 +1886,7 @@ err:
|
||||
return status;
|
||||
}
|
||||
|
||||
int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value)
|
||||
static int __be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value)
|
||||
{
|
||||
struct be_mcc_wrb *wrb;
|
||||
struct be_dma_mem *mem = &adapter->rx_filter;
|
||||
@ -1906,31 +1906,13 @@ int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value)
|
||||
wrb, mem);
|
||||
|
||||
req->if_id = cpu_to_le32(adapter->if_handle);
|
||||
if (flags & IFF_PROMISC) {
|
||||
req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS |
|
||||
BE_IF_FLAGS_VLAN_PROMISCUOUS |
|
||||
BE_IF_FLAGS_MCAST_PROMISCUOUS);
|
||||
if (value == ON)
|
||||
req->if_flags =
|
||||
cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS |
|
||||
BE_IF_FLAGS_VLAN_PROMISCUOUS |
|
||||
BE_IF_FLAGS_MCAST_PROMISCUOUS);
|
||||
} else if (flags & IFF_ALLMULTI) {
|
||||
req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_MCAST_PROMISCUOUS);
|
||||
req->if_flags = cpu_to_le32(BE_IF_FLAGS_MCAST_PROMISCUOUS);
|
||||
} else if (flags & BE_FLAGS_VLAN_PROMISC) {
|
||||
req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_VLAN_PROMISCUOUS);
|
||||
req->if_flags_mask = cpu_to_le32(flags);
|
||||
req->if_flags = (value == ON) ? req->if_flags_mask : 0;
|
||||
|
||||
if (value == ON)
|
||||
req->if_flags =
|
||||
cpu_to_le32(BE_IF_FLAGS_VLAN_PROMISCUOUS);
|
||||
} else {
|
||||
if (flags & BE_IF_FLAGS_MULTICAST) {
|
||||
struct netdev_hw_addr *ha;
|
||||
int i = 0;
|
||||
|
||||
req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_MULTICAST);
|
||||
req->if_flags = cpu_to_le32(BE_IF_FLAGS_MULTICAST);
|
||||
|
||||
/* Reset mcast promisc mode if already set by setting mask
|
||||
* and not setting flags field
|
||||
*/
|
||||
@ -1942,24 +1924,26 @@ int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value)
|
||||
memcpy(req->mcast_mac[i++].byte, ha->addr, ETH_ALEN);
|
||||
}
|
||||
|
||||
if ((req->if_flags_mask & cpu_to_le32(be_if_cap_flags(adapter))) !=
|
||||
req->if_flags_mask) {
|
||||
dev_warn(&adapter->pdev->dev,
|
||||
"Cannot set rx filter flags 0x%x\n",
|
||||
req->if_flags_mask);
|
||||
dev_warn(&adapter->pdev->dev,
|
||||
"Interface is capable of 0x%x flags only\n",
|
||||
be_if_cap_flags(adapter));
|
||||
}
|
||||
req->if_flags_mask &= cpu_to_le32(be_if_cap_flags(adapter));
|
||||
|
||||
status = be_mcc_notify_wait(adapter);
|
||||
|
||||
err:
|
||||
spin_unlock_bh(&adapter->mcc_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value)
|
||||
{
|
||||
struct device *dev = &adapter->pdev->dev;
|
||||
|
||||
if ((flags & be_if_cap_flags(adapter)) != flags) {
|
||||
dev_warn(dev, "Cannot set rx filter flags 0x%x\n", flags);
|
||||
dev_warn(dev, "Interface is capable of 0x%x flags only\n",
|
||||
be_if_cap_flags(adapter));
|
||||
}
|
||||
flags &= be_if_cap_flags(adapter);
|
||||
|
||||
return __be_cmd_rx_filter(adapter, flags, value);
|
||||
}
|
||||
|
||||
/* Uses synchrounous mcc */
|
||||
int be_cmd_set_flow_control(struct be_adapter *adapter, u32 tx_fc, u32 rx_fc)
|
||||
{
|
||||
|
@ -586,6 +586,10 @@ enum be_if_flags {
|
||||
BE_IF_FLAGS_PASS_L3L4_ERRORS | BE_IF_FLAGS_MULTICAST |\
|
||||
BE_IF_FLAGS_UNTAGGED)
|
||||
|
||||
#define BE_IF_FLAGS_ALL_PROMISCUOUS (BE_IF_FLAGS_PROMISCUOUS | \
|
||||
BE_IF_FLAGS_VLAN_PROMISCUOUS |\
|
||||
BE_IF_FLAGS_MCAST_PROMISCUOUS)
|
||||
|
||||
/* An RX interface is an object with one or more MAC addresses and
|
||||
* filtering capabilities. */
|
||||
struct be_cmd_req_if_create {
|
||||
|
@ -1133,16 +1133,12 @@ static int be_vid_config(struct be_adapter *adapter)
|
||||
MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES)
|
||||
goto set_vlan_promisc;
|
||||
dev_err(dev, "Setting HW VLAN filtering failed\n");
|
||||
} else {
|
||||
if (adapter->flags & BE_FLAGS_VLAN_PROMISC) {
|
||||
/* hw VLAN filtering re-enabled. */
|
||||
status = be_cmd_rx_filter(adapter,
|
||||
BE_FLAGS_VLAN_PROMISC, OFF);
|
||||
if (!status) {
|
||||
dev_info(dev,
|
||||
"Disabling VLAN Promiscuous mode\n");
|
||||
adapter->flags &= ~BE_FLAGS_VLAN_PROMISC;
|
||||
}
|
||||
} else if (adapter->flags & BE_FLAGS_VLAN_PROMISC) {
|
||||
status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS,
|
||||
OFF);
|
||||
if (!status) {
|
||||
dev_info(dev, "Disabling VLAN Promiscuous mode\n");
|
||||
adapter->flags &= ~BE_FLAGS_VLAN_PROMISC;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1152,7 +1148,7 @@ set_vlan_promisc:
|
||||
if (adapter->flags & BE_FLAGS_VLAN_PROMISC)
|
||||
return 0;
|
||||
|
||||
status = be_cmd_rx_filter(adapter, BE_FLAGS_VLAN_PROMISC, ON);
|
||||
status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, ON);
|
||||
if (!status) {
|
||||
dev_info(dev, "Enable VLAN Promiscuous mode\n");
|
||||
adapter->flags |= BE_FLAGS_VLAN_PROMISC;
|
||||
@ -1204,7 +1200,7 @@ static void be_clear_promisc(struct be_adapter *adapter)
|
||||
adapter->promiscuous = false;
|
||||
adapter->flags &= ~(BE_FLAGS_VLAN_PROMISC | BE_FLAGS_MCAST_PROMISC);
|
||||
|
||||
be_cmd_rx_filter(adapter, IFF_PROMISC, OFF);
|
||||
be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS, OFF);
|
||||
}
|
||||
|
||||
static void be_set_rx_mode(struct net_device *netdev)
|
||||
@ -1213,7 +1209,7 @@ static void be_set_rx_mode(struct net_device *netdev)
|
||||
int status;
|
||||
|
||||
if (netdev->flags & IFF_PROMISC) {
|
||||
be_cmd_rx_filter(adapter, IFF_PROMISC, ON);
|
||||
be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS, ON);
|
||||
adapter->promiscuous = true;
|
||||
goto done;
|
||||
}
|
||||
@ -1240,7 +1236,8 @@ static void be_set_rx_mode(struct net_device *netdev)
|
||||
}
|
||||
|
||||
if (netdev_uc_count(netdev) > be_max_uc(adapter)) {
|
||||
be_cmd_rx_filter(adapter, IFF_PROMISC, ON);
|
||||
be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS,
|
||||
ON);
|
||||
adapter->promiscuous = true;
|
||||
goto done;
|
||||
}
|
||||
@ -1253,7 +1250,7 @@ static void be_set_rx_mode(struct net_device *netdev)
|
||||
}
|
||||
}
|
||||
|
||||
status = be_cmd_rx_filter(adapter, IFF_MULTICAST, ON);
|
||||
status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MULTICAST, ON);
|
||||
if (!status) {
|
||||
if (adapter->flags & BE_FLAGS_MCAST_PROMISC)
|
||||
adapter->flags &= ~BE_FLAGS_MCAST_PROMISC;
|
||||
@ -1267,7 +1264,7 @@ set_mcast_promisc:
|
||||
/* Set to MCAST promisc mode if setting MULTICAST address fails
|
||||
* or if num configured exceeds what we support
|
||||
*/
|
||||
status = be_cmd_rx_filter(adapter, IFF_ALLMULTI, ON);
|
||||
status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MCAST_PROMISCUOUS, ON);
|
||||
if (!status)
|
||||
adapter->flags |= BE_FLAGS_MCAST_PROMISC;
|
||||
done:
|
||||
|
Loading…
Reference in New Issue
Block a user