qlcnic: Replace ndo_add/del_vxlan_port with ndo_add/del_udp_enc_port
This change replaces the network device operations for adding or removing a VXLAN port with operations that are more generically defined to be used for any UDP offload port but provide a type. As such by just adding a line to verify that the offload type is VXLAN we can maintain the same functionality. Signed-off-by: Alexander Duyck <aduyck@mirantis.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f9f082a9b9
commit
5e44f8e299
4 changed files with 14 additions and 32 deletions
drivers/net/ethernet/qlogic
|
@ -54,16 +54,6 @@ config QLCNIC_DCB
|
|||
mode of DCB is supported. PG and PFC values are related only
|
||||
to Tx.
|
||||
|
||||
config QLCNIC_VXLAN
|
||||
bool "Virtual eXtensible Local Area Network (VXLAN) offload support"
|
||||
default n
|
||||
depends on QLCNIC && VXLAN && !(QLCNIC=y && VXLAN=m)
|
||||
---help---
|
||||
This enables hardware offload support for VXLAN protocol over QLogic's
|
||||
84XX series adapters.
|
||||
Say Y here if you want to enable hardware offload support for
|
||||
Virtual eXtensible Local Area Network (VXLAN) in the driver.
|
||||
|
||||
config QLCNIC_HWMON
|
||||
bool "QLOGIC QLCNIC 82XX and 83XX family HWMON support"
|
||||
depends on QLCNIC && HWMON && !(QLCNIC=y && HWMON=m)
|
||||
|
|
|
@ -1026,10 +1026,8 @@ struct qlcnic_ipaddr {
|
|||
#define QLCNIC_HAS_PHYS_PORT_ID 0x40000
|
||||
#define QLCNIC_TSS_RSS 0x80000
|
||||
|
||||
#ifdef CONFIG_QLCNIC_VXLAN
|
||||
#define QLCNIC_ADD_VXLAN_PORT 0x100000
|
||||
#define QLCNIC_DEL_VXLAN_PORT 0x200000
|
||||
#endif
|
||||
|
||||
#define QLCNIC_VLAN_FILTERING 0x800000
|
||||
|
||||
|
|
|
@ -1020,7 +1020,6 @@ static int qlcnic_83xx_idc_check_state_validity(struct qlcnic_adapter *adapter,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_QLCNIC_VXLAN
|
||||
#define QLC_83XX_ENCAP_TYPE_VXLAN BIT_1
|
||||
#define QLC_83XX_MATCH_ENCAP_ID BIT_2
|
||||
#define QLC_83XX_SET_VXLAN_UDP_DPORT BIT_3
|
||||
|
@ -1089,14 +1088,12 @@ static int qlcnic_set_vxlan_parsing(struct qlcnic_adapter *adapter,
|
|||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void qlcnic_83xx_periodic_tasks(struct qlcnic_adapter *adapter)
|
||||
{
|
||||
if (adapter->fhash.fnum)
|
||||
qlcnic_prune_lb_filters(adapter);
|
||||
|
||||
#ifdef CONFIG_QLCNIC_VXLAN
|
||||
if (adapter->flags & QLCNIC_ADD_VXLAN_PORT) {
|
||||
if (qlcnic_set_vxlan_port(adapter))
|
||||
return;
|
||||
|
@ -1112,7 +1109,6 @@ static void qlcnic_83xx_periodic_tasks(struct qlcnic_adapter *adapter)
|
|||
adapter->ahw->vxlan_port = 0;
|
||||
adapter->flags &= ~QLCNIC_DEL_VXLAN_PORT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,9 +16,7 @@
|
|||
#include <linux/aer.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/pci.h>
|
||||
#ifdef CONFIG_QLCNIC_VXLAN
|
||||
#include <net/vxlan.h>
|
||||
#endif
|
||||
|
||||
#include "qlcnic.h"
|
||||
#include "qlcnic_sriov.h"
|
||||
|
@ -474,13 +472,15 @@ static int qlcnic_get_phys_port_id(struct net_device *netdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_QLCNIC_VXLAN
|
||||
static void qlcnic_add_vxlan_port(struct net_device *netdev,
|
||||
sa_family_t sa_family, __be16 port)
|
||||
struct udp_tunnel_info *ti)
|
||||
{
|
||||
struct qlcnic_adapter *adapter = netdev_priv(netdev);
|
||||
struct qlcnic_hardware_context *ahw = adapter->ahw;
|
||||
|
||||
if (ti->type != UDP_TUNNEL_TYPE_VXLAN)
|
||||
return;
|
||||
|
||||
/* Adapter supports only one VXLAN port. Use very first port
|
||||
* for enabling offload
|
||||
*/
|
||||
|
@ -488,23 +488,26 @@ static void qlcnic_add_vxlan_port(struct net_device *netdev,
|
|||
return;
|
||||
if (!ahw->vxlan_port_count) {
|
||||
ahw->vxlan_port_count = 1;
|
||||
ahw->vxlan_port = ntohs(port);
|
||||
ahw->vxlan_port = ntohs(ti->port);
|
||||
adapter->flags |= QLCNIC_ADD_VXLAN_PORT;
|
||||
return;
|
||||
}
|
||||
if (ahw->vxlan_port == ntohs(port))
|
||||
if (ahw->vxlan_port == ntohs(ti->port))
|
||||
ahw->vxlan_port_count++;
|
||||
|
||||
}
|
||||
|
||||
static void qlcnic_del_vxlan_port(struct net_device *netdev,
|
||||
sa_family_t sa_family, __be16 port)
|
||||
struct udp_tunnel_info *ti)
|
||||
{
|
||||
struct qlcnic_adapter *adapter = netdev_priv(netdev);
|
||||
struct qlcnic_hardware_context *ahw = adapter->ahw;
|
||||
|
||||
if (ti->type != UDP_TUNNEL_TYPE_VXLAN)
|
||||
return;
|
||||
|
||||
if (!qlcnic_encap_rx_offload(adapter) || !ahw->vxlan_port_count ||
|
||||
(ahw->vxlan_port != ntohs(port)))
|
||||
(ahw->vxlan_port != ntohs(ti->port)))
|
||||
return;
|
||||
|
||||
ahw->vxlan_port_count--;
|
||||
|
@ -519,7 +522,6 @@ static netdev_features_t qlcnic_features_check(struct sk_buff *skb,
|
|||
features = vlan_features_check(skb, features);
|
||||
return vxlan_features_check(skb, features);
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct net_device_ops qlcnic_netdev_ops = {
|
||||
.ndo_open = qlcnic_open,
|
||||
|
@ -539,11 +541,9 @@ static const struct net_device_ops qlcnic_netdev_ops = {
|
|||
.ndo_fdb_del = qlcnic_fdb_del,
|
||||
.ndo_fdb_dump = qlcnic_fdb_dump,
|
||||
.ndo_get_phys_port_id = qlcnic_get_phys_port_id,
|
||||
#ifdef CONFIG_QLCNIC_VXLAN
|
||||
.ndo_add_vxlan_port = qlcnic_add_vxlan_port,
|
||||
.ndo_del_vxlan_port = qlcnic_del_vxlan_port,
|
||||
.ndo_udp_tunnel_add = qlcnic_add_vxlan_port,
|
||||
.ndo_udp_tunnel_del = qlcnic_del_vxlan_port,
|
||||
.ndo_features_check = qlcnic_features_check,
|
||||
#endif
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = qlcnic_poll_controller,
|
||||
#endif
|
||||
|
@ -2015,10 +2015,8 @@ qlcnic_attach(struct qlcnic_adapter *adapter)
|
|||
|
||||
qlcnic_create_sysfs_entries(adapter);
|
||||
|
||||
#ifdef CONFIG_QLCNIC_VXLAN
|
||||
if (qlcnic_encap_rx_offload(adapter))
|
||||
vxlan_get_rx_port(netdev);
|
||||
#endif
|
||||
udp_tunnel_get_rx_info(netdev);
|
||||
|
||||
adapter->is_up = QLCNIC_ADAPTER_UP_MAGIC;
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue