aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
diff options
context:
space:
mode:
authorNeerav Parikh <Neerav.Parikh@intel.com>2012-01-04 15:23:40 -0500
committerDavid S. Miller <davem@davemloft.net>2012-01-05 13:12:04 -0500
commitea81875ae07aeaca285afd2771425f771294c93c (patch)
tree9ce74372e323abd11b1a8a565bc5a5e6bb194692 /drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
parent68bad94ed801d955535cb50dde3412944a24530c (diff)
ixgbe: FCoE: Add support for ndo_get_fcoe_hbainfo() call
This patch implements support for ndo_get_fcoe_hbainfo() call in the ixgbe driver. This function will be called by the FCoE protocol stack to obtain device specific information from the underlying device configured to do FCoE. Signed-off-by: Neerav Parikh <Neerav.Parikh@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
index df3b1be69d8..d18d6157dd2 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
@@ -855,3 +855,86 @@ int ixgbe_fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type)
855 } 855 }
856 return rc; 856 return rc;
857} 857}
858
859/**
860 * ixgbe_fcoe_get_hbainfo - get FCoE HBA information
861 * @netdev : ixgbe adapter
862 * @info : HBA information
863 *
864 * Returns ixgbe HBA information
865 *
866 * Returns : 0 on success
867 */
868int ixgbe_fcoe_get_hbainfo(struct net_device *netdev,
869 struct netdev_fcoe_hbainfo *info)
870{
871 struct ixgbe_adapter *adapter = netdev_priv(netdev);
872 struct ixgbe_hw *hw = &adapter->hw;
873 int i, pos;
874 u8 buf[8];
875
876 if (!info)
877 return -EINVAL;
878
879 /* Don't return information on unsupported devices */
880 if (hw->mac.type != ixgbe_mac_82599EB &&
881 hw->mac.type != ixgbe_mac_X540)
882 return -EINVAL;
883
884 /* Manufacturer */
885 snprintf(info->manufacturer, sizeof(info->manufacturer),
886 "Intel Corporation");
887
888 /* Serial Number */
889
890 /* Get the PCI-e Device Serial Number Capability */
891 pos = pci_find_ext_capability(adapter->pdev, PCI_EXT_CAP_ID_DSN);
892 if (pos) {
893 pos += 4;
894 for (i = 0; i < 8; i++)
895 pci_read_config_byte(adapter->pdev, pos + i, &buf[i]);
896
897 snprintf(info->serial_number, sizeof(info->serial_number),
898 "%02X%02X%02X%02X%02X%02X%02X%02X",
899 buf[7], buf[6], buf[5], buf[4],
900 buf[3], buf[2], buf[1], buf[0]);
901 } else
902 snprintf(info->serial_number, sizeof(info->serial_number),
903 "Unknown");
904
905 /* Hardware Version */
906 snprintf(info->hardware_version,
907 sizeof(info->hardware_version),
908 "Rev %d", hw->revision_id);
909 /* Driver Name/Version */
910 snprintf(info->driver_version,
911 sizeof(info->driver_version),
912 "%s v%s",
913 ixgbe_driver_name,
914 ixgbe_driver_version);
915 /* Firmware Version */
916 snprintf(info->firmware_version,
917 sizeof(info->firmware_version),
918 "0x%08x",
919 (adapter->eeprom_verh << 16) |
920 adapter->eeprom_verl);
921
922 /* Model */
923 if (hw->mac.type == ixgbe_mac_82599EB) {
924 snprintf(info->model,
925 sizeof(info->model),
926 "Intel 82599");
927 } else {
928 snprintf(info->model,
929 sizeof(info->model),
930 "Intel X540");
931 }
932
933 /* Model Description */
934 snprintf(info->model_description,
935 sizeof(info->model_description),
936 "%s",
937 ixgbe_default_device_descr);
938
939 return 0;
940}