vxge: Enable SRIOV support in the driver.
authorSivakumar Subramani <Sivakumar.Subramani@neterion.com>
Tue, 16 Jun 2009 18:48:55 +0000 (18:48 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 Jun 2009 11:31:14 +0000 (04:31 -0700)
- Enabled SRIOV support in the driver.
- Call __vxge_hw_verify_pci_e_info() for the PF only. This function
  verifies the negotiated link width and current link speed in the
  Link Status Register (offset 12h) which are reserved fields for VFs
  as per the SRIOV specification, section 3.5.8.
- Implemented David Miller's comment to remove the #ifdef CONFIG_PCI_IOV as
  these intefaces have NOP versions declared when the defintion is not set.

Signed-off-by: Sivakumar Subramani <sivakumar.subramani@neterion.com>
Signed-off-by: Rastapur Santosh <santosh.rastapur@neterion.com>
Signed-off-by: Ramkrishna Vepa <ram.vepa@neterion.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxge/vxge-config.c
drivers/net/vxge/vxge-main.c
drivers/net/vxge/vxge-version.h

index 26cde573af430cfa3e66de4fccf5a324f73e333a..58d2551c78ed064aa1ba72bd384482df3d56f46b 100644 (file)
@@ -454,7 +454,7 @@ __vxge_hw_verify_pci_e_info(struct __vxge_hw_device *hldev)
        return VXGE_HW_OK;
 }
 
-static enum vxge_hw_status
+enum vxge_hw_status
 __vxge_hw_device_is_privilaged(struct __vxge_hw_device *hldev)
 {
        if ((hldev->host_type == VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION ||
@@ -676,10 +676,12 @@ enum vxge_hw_status __vxge_hw_device_initialize(struct __vxge_hw_device *hldev)
 {
        enum vxge_hw_status status = VXGE_HW_OK;
 
-       /* Validate the pci-e link width and speed */
-       status = __vxge_hw_verify_pci_e_info(hldev);
-       if (status != VXGE_HW_OK)
-               goto exit;
+       if (VXGE_HW_OK == __vxge_hw_device_is_privilaged(hldev)) {
+               /* Validate the pci-e link width and speed */
+               status = __vxge_hw_verify_pci_e_info(hldev);
+               if (status != VXGE_HW_OK)
+                       goto exit;
+       }
 
        vxge_hw_wrr_rebalance(hldev);
 exit:
index 6c838b3e063a6fc6905e1eb6b429d0472b12a2e9..6034497536a4d1d163c0259dce001cf55c2ca53d 100644 (file)
@@ -4203,6 +4203,16 @@ vxge_probe(struct pci_dev *pdev, const struct pci_device_id *pre)
                max_vpath_supported++;
        }
 
+       /* Enable SRIOV mode, if firmware has SRIOV support and if it is a PF */
+       if ((VXGE_HW_FUNCTION_MODE_SRIOV ==
+               ll_config.device_hw_info.function_mode) &&
+               (max_config_dev > 1) && (pdev->is_physfn)) {
+                       ret = pci_enable_sriov(pdev, max_config_dev - 1);
+                       if (ret)
+                               vxge_debug_ll_config(VXGE_ERR,
+                                       "Failed to enable SRIOV: %d \n", ret);
+       }
+
        /*
         * Configure vpaths and get driver configured number of vpaths
         * which is less than or equal to the maximum vpaths per function.
@@ -4366,6 +4376,7 @@ _exit6:
 
        vxge_device_unregister(hldev);
 _exit5:
+       pci_disable_sriov(pdev);
        vxge_hw_device_terminate(hldev);
 _exit4:
        iounmap(attr.bar1);
@@ -4429,6 +4440,8 @@ vxge_remove(struct pci_dev *pdev)
        iounmap(vdev->bar0);
        iounmap(vdev->bar1);
 
+       pci_disable_sriov(pdev);
+
        /* we are safe to free it now */
        free_netdev(dev);
 
index 7da02c545ed575799fb62edd76fabc7314997c27..82786ffb7dd95c0378c154721342642c2790f374 100644 (file)
@@ -17,7 +17,7 @@
 
 #define VXGE_VERSION_MAJOR     "2"
 #define VXGE_VERSION_MINOR     "0"
-#define VXGE_VERSION_FIX       "1"
-#define VXGE_VERSION_BUILD     "17129"
+#define VXGE_VERSION_FIX       "4"
+#define VXGE_VERSION_BUILD     "17795"
 #define VXGE_VERSION_FOR       "k"
 #endif