These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / net / ethernet / cisco / enic / enic.h
index 84b6a2b..7ba6d53 100644 (file)
@@ -33,7 +33,7 @@
 
 #define DRV_NAME               "enic"
 #define DRV_DESCRIPTION                "Cisco VIC Ethernet NIC Driver"
-#define DRV_VERSION            "2.1.1.83"
+#define DRV_VERSION            "2.3.0.20"
 #define DRV_COPYRIGHT          "Copyright 2008-2013 Cisco Systems, Inc"
 
 #define ENIC_BARS_MAX          6
@@ -50,6 +50,7 @@ struct enic_msix_entry {
        char devname[IFNAMSIZ];
        irqreturn_t (*isr)(int, void *);
        void *devid;
+       cpumask_var_t affinity_mask;
 };
 
 /* Store only the lower range.  Higher range is given by fw. */
@@ -143,6 +144,7 @@ struct enic {
        struct vnic_dev *vdev;
        struct timer_list notify_timer;
        struct work_struct reset;
+       struct work_struct tx_hang_reset;
        struct work_struct change_mtu_work;
        struct msix_entry msix_entry[ENIC_INTR_MAX];
        struct enic_msix_entry msix[ENIC_INTR_MAX];
@@ -191,6 +193,25 @@ struct enic {
        struct vnic_gen_stats gen_stats;
 };
 
+static inline struct net_device *vnic_get_netdev(struct vnic_dev *vdev)
+{
+       struct enic *enic = vdev->priv;
+
+       return enic->netdev;
+}
+
+/* wrappers function for kernel log
+ * Make sure variable vdev of struct vnic_dev is available in the block where
+ * these macros are used
+ */
+#define vdev_info(args...)     dev_info(&vdev->pdev->dev, args)
+#define vdev_warn(args...)     dev_warn(&vdev->pdev->dev, args)
+#define vdev_err(args...)      dev_err(&vdev->pdev->dev, args)
+
+#define vdev_netinfo(args...)  netdev_info(vnic_get_netdev(vdev), args)
+#define vdev_netwarn(args...)  netdev_warn(vnic_get_netdev(vdev), args)
+#define vdev_neterr(args...)   netdev_err(vnic_get_netdev(vdev), args)
+
 static inline struct device *enic_get_dev(struct enic *enic)
 {
        return &(enic->pdev->dev);
@@ -243,6 +264,32 @@ static inline unsigned int enic_msix_notify_intr(struct enic *enic)
        return enic->rq_count + enic->wq_count + 1;
 }
 
+static inline bool enic_is_err_intr(struct enic *enic, int intr)
+{
+       switch (vnic_dev_get_intr_mode(enic->vdev)) {
+       case VNIC_DEV_INTR_MODE_INTX:
+               return intr == enic_legacy_err_intr();
+       case VNIC_DEV_INTR_MODE_MSIX:
+               return intr == enic_msix_err_intr(enic);
+       case VNIC_DEV_INTR_MODE_MSI:
+       default:
+               return false;
+       }
+}
+
+static inline bool enic_is_notify_intr(struct enic *enic, int intr)
+{
+       switch (vnic_dev_get_intr_mode(enic->vdev)) {
+       case VNIC_DEV_INTR_MODE_INTX:
+               return intr == enic_legacy_notify_intr();
+       case VNIC_DEV_INTR_MODE_MSIX:
+               return intr == enic_msix_notify_intr(enic);
+       case VNIC_DEV_INTR_MODE_MSI:
+       default:
+               return false;
+       }
+}
+
 static inline int enic_dma_map_check(struct enic *enic, dma_addr_t dma_addr)
 {
        if (unlikely(pci_dma_mapping_error(enic->pdev, dma_addr))) {