be2net: Add EEPROM dump feature for Lancer
authorPadmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Wed, 16 Nov 2011 02:03:07 +0000 (02:03 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Nov 2011 23:07:10 +0000 (18:07 -0500)
Implemented eeprom dump using ethtool feature for Lancer.

Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_cmds.h
drivers/net/ethernet/emulex/benet/be_ethtool.c

index 2d3fe6a8b04f442e92af86b214344ec21db5d7c3..ac112465e71901c21b30105aecc83f39be551272 100644 (file)
@@ -1167,6 +1167,8 @@ struct lancer_cmd_resp_write_object {
 #define LANCER_READ_FILE_EOF_MASK              0x80000000
 
 #define LANCER_FW_DUMP_FILE                    "/dbg/dump.bin"
+#define LANCER_VPD_PF_FILE                     "/vpd/ntr_pf.vpd"
+#define LANCER_VPD_VF_FILE                     "/vpd/ntr_vf.vpd"
 
 struct lancer_cmd_req_read_object {
        struct be_cmd_req_hdr hdr;
index 1e7252e4cdec83e6089567d271db92a10f50adc5..575c78306313c2d264476e81cdf1ec01e0af6a19 100644 (file)
@@ -727,7 +727,17 @@ be_do_flash(struct net_device *netdev, struct ethtool_flash *efl)
 static int
 be_get_eeprom_len(struct net_device *netdev)
 {
-       return BE_READ_SEEPROM_LEN;
+       struct be_adapter *adapter = netdev_priv(netdev);
+       if (lancer_chip(adapter)) {
+               if (be_physfn(adapter))
+                       return lancer_cmd_get_file_len(adapter,
+                                       LANCER_VPD_PF_FILE);
+               else
+                       return lancer_cmd_get_file_len(adapter,
+                                       LANCER_VPD_VF_FILE);
+       } else {
+               return BE_READ_SEEPROM_LEN;
+       }
 }
 
 static int
@@ -742,6 +752,15 @@ be_read_eeprom(struct net_device *netdev, struct ethtool_eeprom *eeprom,
        if (!eeprom->len)
                return -EINVAL;
 
+       if (lancer_chip(adapter)) {
+               if (be_physfn(adapter))
+                       return lancer_cmd_read_file(adapter, LANCER_VPD_PF_FILE,
+                                       eeprom->len, data);
+               else
+                       return lancer_cmd_read_file(adapter, LANCER_VPD_VF_FILE,
+                                       eeprom->len, data);
+       }
+
        eeprom->magic = BE_VENDOR_ID | (adapter->pdev->device<<16);
 
        memset(&eeprom_cmd, 0, sizeof(struct be_dma_mem));