iavf: Fix ping is lost after untrusted VF had tried to change MAC
[linux-2.6-microblaze.git] / drivers / net / ethernet / intel / iavf / iavf.h
index 8a65525..90793b3 100644 (file)
@@ -37,6 +37,8 @@
 #include "iavf_type.h"
 #include <linux/avf/virtchnl.h>
 #include "iavf_txrx.h"
+#include "iavf_fdir.h"
+#include "iavf_adv_rss.h"
 
 #define DEFAULT_DEBUG_LEVEL_SHIFT 3
 #define PFX "iavf: "
@@ -134,6 +136,7 @@ struct iavf_q_vector {
 struct iavf_mac_filter {
        struct list_head list;
        u8 macaddr[ETH_ALEN];
+       bool is_new_mac;        /* filter is new, wait for PF decision */
        bool remove;            /* filter needs to be removed */
        bool add;               /* filter needs to be added */
 };
@@ -300,6 +303,10 @@ struct iavf_adapter {
 #define IAVF_FLAG_AQ_DISABLE_CHANNELS          BIT(22)
 #define IAVF_FLAG_AQ_ADD_CLOUD_FILTER          BIT(23)
 #define IAVF_FLAG_AQ_DEL_CLOUD_FILTER          BIT(24)
+#define IAVF_FLAG_AQ_ADD_FDIR_FILTER           BIT(25)
+#define IAVF_FLAG_AQ_DEL_FDIR_FILTER           BIT(26)
+#define IAVF_FLAG_AQ_ADD_ADV_RSS_CFG           BIT(27)
+#define IAVF_FLAG_AQ_DEL_ADV_RSS_CFG           BIT(28)
 
        /* OS defined structs */
        struct net_device *netdev;
@@ -340,6 +347,10 @@ struct iavf_adapter {
                          VIRTCHNL_VF_OFFLOAD_VLAN)
 #define ADV_LINK_SUPPORT(_a) ((_a)->vf_res->vf_cap_flags & \
                              VIRTCHNL_VF_CAP_ADV_LINK_SPEED)
+#define FDIR_FLTR_SUPPORT(_a) ((_a)->vf_res->vf_cap_flags & \
+                              VIRTCHNL_VF_OFFLOAD_FDIR_PF)
+#define ADV_RSS_SUPPORT(_a) ((_a)->vf_res->vf_cap_flags & \
+                            VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF)
        struct virtchnl_vf_resource *vf_res; /* incl. all VSIs */
        struct virtchnl_vsi_resource *vsi_res; /* our LAN VSI */
        struct virtchnl_version_info pf_version;
@@ -362,6 +373,14 @@ struct iavf_adapter {
        /* lock to protect access to the cloud filter list */
        spinlock_t cloud_filter_list_lock;
        u16 num_cloud_filters;
+
+#define IAVF_MAX_FDIR_FILTERS 128      /* max allowed Flow Director filters */
+       u16 fdir_active_fltr;
+       struct list_head fdir_list_head;
+       spinlock_t fdir_fltr_lock;      /* protect the Flow Director filter list */
+
+       struct list_head adv_rss_list_head;
+       spinlock_t adv_rss_lock;        /* protect the RSS management list */
 };
 
 
@@ -432,6 +451,10 @@ void iavf_enable_channels(struct iavf_adapter *adapter);
 void iavf_disable_channels(struct iavf_adapter *adapter);
 void iavf_add_cloud_filter(struct iavf_adapter *adapter);
 void iavf_del_cloud_filter(struct iavf_adapter *adapter);
+void iavf_add_fdir_filter(struct iavf_adapter *adapter);
+void iavf_del_fdir_filter(struct iavf_adapter *adapter);
+void iavf_add_adv_rss_cfg(struct iavf_adapter *adapter);
+void iavf_del_adv_rss_cfg(struct iavf_adapter *adapter);
 struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter,
                                        const u8 *macaddr);
 #endif /* _IAVF_H_ */