Commit 5e44f8e2 authored by Alexander Duyck's avatar Alexander Duyck Committed by David S. Miller

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: default avatarAlexander Duyck <aduyck@mirantis.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f9f082a9
...@@ -54,16 +54,6 @@ config QLCNIC_DCB ...@@ -54,16 +54,6 @@ config QLCNIC_DCB
mode of DCB is supported. PG and PFC values are related only mode of DCB is supported. PG and PFC values are related only
to Tx. 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 config QLCNIC_HWMON
bool "QLOGIC QLCNIC 82XX and 83XX family HWMON support" bool "QLOGIC QLCNIC 82XX and 83XX family HWMON support"
depends on QLCNIC && HWMON && !(QLCNIC=y && HWMON=m) depends on QLCNIC && HWMON && !(QLCNIC=y && HWMON=m)
......
...@@ -1026,10 +1026,8 @@ struct qlcnic_ipaddr { ...@@ -1026,10 +1026,8 @@ struct qlcnic_ipaddr {
#define QLCNIC_HAS_PHYS_PORT_ID 0x40000 #define QLCNIC_HAS_PHYS_PORT_ID 0x40000
#define QLCNIC_TSS_RSS 0x80000 #define QLCNIC_TSS_RSS 0x80000
#ifdef CONFIG_QLCNIC_VXLAN
#define QLCNIC_ADD_VXLAN_PORT 0x100000 #define QLCNIC_ADD_VXLAN_PORT 0x100000
#define QLCNIC_DEL_VXLAN_PORT 0x200000 #define QLCNIC_DEL_VXLAN_PORT 0x200000
#endif
#define QLCNIC_VLAN_FILTERING 0x800000 #define QLCNIC_VLAN_FILTERING 0x800000
......
...@@ -1020,7 +1020,6 @@ static int qlcnic_83xx_idc_check_state_validity(struct qlcnic_adapter *adapter, ...@@ -1020,7 +1020,6 @@ static int qlcnic_83xx_idc_check_state_validity(struct qlcnic_adapter *adapter,
return 0; return 0;
} }
#ifdef CONFIG_QLCNIC_VXLAN
#define QLC_83XX_ENCAP_TYPE_VXLAN BIT_1 #define QLC_83XX_ENCAP_TYPE_VXLAN BIT_1
#define QLC_83XX_MATCH_ENCAP_ID BIT_2 #define QLC_83XX_MATCH_ENCAP_ID BIT_2
#define QLC_83XX_SET_VXLAN_UDP_DPORT BIT_3 #define QLC_83XX_SET_VXLAN_UDP_DPORT BIT_3
...@@ -1089,14 +1088,12 @@ static int qlcnic_set_vxlan_parsing(struct qlcnic_adapter *adapter, ...@@ -1089,14 +1088,12 @@ static int qlcnic_set_vxlan_parsing(struct qlcnic_adapter *adapter,
return ret; return ret;
} }
#endif
static void qlcnic_83xx_periodic_tasks(struct qlcnic_adapter *adapter) static void qlcnic_83xx_periodic_tasks(struct qlcnic_adapter *adapter)
{ {
if (adapter->fhash.fnum) if (adapter->fhash.fnum)
qlcnic_prune_lb_filters(adapter); qlcnic_prune_lb_filters(adapter);
#ifdef CONFIG_QLCNIC_VXLAN
if (adapter->flags & QLCNIC_ADD_VXLAN_PORT) { if (adapter->flags & QLCNIC_ADD_VXLAN_PORT) {
if (qlcnic_set_vxlan_port(adapter)) if (qlcnic_set_vxlan_port(adapter))
return; return;
...@@ -1112,7 +1109,6 @@ static void qlcnic_83xx_periodic_tasks(struct qlcnic_adapter *adapter) ...@@ -1112,7 +1109,6 @@ static void qlcnic_83xx_periodic_tasks(struct qlcnic_adapter *adapter)
adapter->ahw->vxlan_port = 0; adapter->ahw->vxlan_port = 0;
adapter->flags &= ~QLCNIC_DEL_VXLAN_PORT; adapter->flags &= ~QLCNIC_DEL_VXLAN_PORT;
} }
#endif
} }
/** /**
......
...@@ -16,9 +16,7 @@ ...@@ -16,9 +16,7 @@
#include <linux/aer.h> #include <linux/aer.h>
#include <linux/log2.h> #include <linux/log2.h>
#include <linux/pci.h> #include <linux/pci.h>
#ifdef CONFIG_QLCNIC_VXLAN
#include <net/vxlan.h> #include <net/vxlan.h>
#endif
#include "qlcnic.h" #include "qlcnic.h"
#include "qlcnic_sriov.h" #include "qlcnic_sriov.h"
...@@ -474,13 +472,15 @@ static int qlcnic_get_phys_port_id(struct net_device *netdev, ...@@ -474,13 +472,15 @@ static int qlcnic_get_phys_port_id(struct net_device *netdev,
return 0; return 0;
} }
#ifdef CONFIG_QLCNIC_VXLAN
static void qlcnic_add_vxlan_port(struct net_device *netdev, 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_adapter *adapter = netdev_priv(netdev);
struct qlcnic_hardware_context *ahw = adapter->ahw; 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 /* Adapter supports only one VXLAN port. Use very first port
* for enabling offload * for enabling offload
*/ */
...@@ -488,23 +488,26 @@ static void qlcnic_add_vxlan_port(struct net_device *netdev, ...@@ -488,23 +488,26 @@ static void qlcnic_add_vxlan_port(struct net_device *netdev,
return; return;
if (!ahw->vxlan_port_count) { if (!ahw->vxlan_port_count) {
ahw->vxlan_port_count = 1; ahw->vxlan_port_count = 1;
ahw->vxlan_port = ntohs(port); ahw->vxlan_port = ntohs(ti->port);
adapter->flags |= QLCNIC_ADD_VXLAN_PORT; adapter->flags |= QLCNIC_ADD_VXLAN_PORT;
return; return;
} }
if (ahw->vxlan_port == ntohs(port)) if (ahw->vxlan_port == ntohs(ti->port))
ahw->vxlan_port_count++; ahw->vxlan_port_count++;
} }
static void qlcnic_del_vxlan_port(struct net_device *netdev, 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_adapter *adapter = netdev_priv(netdev);
struct qlcnic_hardware_context *ahw = adapter->ahw; 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 || if (!qlcnic_encap_rx_offload(adapter) || !ahw->vxlan_port_count ||
(ahw->vxlan_port != ntohs(port))) (ahw->vxlan_port != ntohs(ti->port)))
return; return;
ahw->vxlan_port_count--; ahw->vxlan_port_count--;
...@@ -519,7 +522,6 @@ static netdev_features_t qlcnic_features_check(struct sk_buff *skb, ...@@ -519,7 +522,6 @@ static netdev_features_t qlcnic_features_check(struct sk_buff *skb,
features = vlan_features_check(skb, features); features = vlan_features_check(skb, features);
return vxlan_features_check(skb, features); return vxlan_features_check(skb, features);
} }
#endif
static const struct net_device_ops qlcnic_netdev_ops = { static const struct net_device_ops qlcnic_netdev_ops = {
.ndo_open = qlcnic_open, .ndo_open = qlcnic_open,
...@@ -539,11 +541,9 @@ static const struct net_device_ops qlcnic_netdev_ops = { ...@@ -539,11 +541,9 @@ static const struct net_device_ops qlcnic_netdev_ops = {
.ndo_fdb_del = qlcnic_fdb_del, .ndo_fdb_del = qlcnic_fdb_del,
.ndo_fdb_dump = qlcnic_fdb_dump, .ndo_fdb_dump = qlcnic_fdb_dump,
.ndo_get_phys_port_id = qlcnic_get_phys_port_id, .ndo_get_phys_port_id = qlcnic_get_phys_port_id,
#ifdef CONFIG_QLCNIC_VXLAN .ndo_udp_tunnel_add = qlcnic_add_vxlan_port,
.ndo_add_vxlan_port = qlcnic_add_vxlan_port, .ndo_udp_tunnel_del = qlcnic_del_vxlan_port,
.ndo_del_vxlan_port = qlcnic_del_vxlan_port,
.ndo_features_check = qlcnic_features_check, .ndo_features_check = qlcnic_features_check,
#endif
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = qlcnic_poll_controller, .ndo_poll_controller = qlcnic_poll_controller,
#endif #endif
...@@ -2015,10 +2015,8 @@ qlcnic_attach(struct qlcnic_adapter *adapter) ...@@ -2015,10 +2015,8 @@ qlcnic_attach(struct qlcnic_adapter *adapter)
qlcnic_create_sysfs_entries(adapter); qlcnic_create_sysfs_entries(adapter);
#ifdef CONFIG_QLCNIC_VXLAN
if (qlcnic_encap_rx_offload(adapter)) if (qlcnic_encap_rx_offload(adapter))
vxlan_get_rx_port(netdev); udp_tunnel_get_rx_info(netdev);
#endif
adapter->is_up = QLCNIC_ADAPTER_UP_MAGIC; adapter->is_up = QLCNIC_ADAPTER_UP_MAGIC;
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment