aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom
diff options
context:
space:
mode:
authorYuval Mintz <yuvalmin@broadcom.com>2013-05-22 17:21:49 -0400
committerDavid S. Miller <davem@davemloft.net>2013-05-23 21:49:30 -0400
commit3521b419cc21339537266cb1ab9934b041ca08e9 (patch)
treef07ff796c2d68a160a8768b5eed9ee8583e22ba8 /drivers/net/ethernet/broadcom
parent340611ab7f8c95e9638bb8a181cb078e900dc5ec (diff)
bnx2x: Add Private Flags Support
Utilize ethtool's callback `get_priv_flags' - shed more light on the feasibility of devices as storage interfaces. CC: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Ariel Elior <ariele@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Acked-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x.h2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c49
2 files changed, 44 insertions, 7 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index 3dba2a70a00e..3f4291056e80 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -2137,6 +2137,8 @@ void bnx2x_igu_clear_sb_gen(struct bnx2x *bp, u8 func, u8 idu_sb_id,
2137#define ATTN_HARD_WIRED_MASK 0xff00 2137#define ATTN_HARD_WIRED_MASK 0xff00
2138#define ATTENTION_ID 4 2138#define ATTENTION_ID 4
2139 2139
2140#define IS_MF_STORAGE_ONLY(bp) (IS_MF_STORAGE_SD(bp) || \
2141 IS_MF_FCOE_AFEX(bp))
2140 2142
2141/* stuff added to make the code fit 80Col */ 2143/* stuff added to make the code fit 80Col */
2142 2144
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
index ce1a91618677..9e311c4b69f3 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
@@ -1921,6 +1921,19 @@ static const char bnx2x_tests_str_arr[BNX2X_NUM_TESTS_SF][ETH_GSTRING_LEN] = {
1921 "link_test (online) " 1921 "link_test (online) "
1922}; 1922};
1923 1923
1924enum {
1925 BNX2X_PRI_FLAG_ISCSI,
1926 BNX2X_PRI_FLAG_FCOE,
1927 BNX2X_PRI_FLAG_STORAGE,
1928 BNX2X_PRI_FLAG_LEN,
1929};
1930
1931static const char bnx2x_private_arr[BNX2X_PRI_FLAG_LEN][ETH_GSTRING_LEN] = {
1932 "iSCSI offload support",
1933 "FCoE offload support",
1934 "Storage only interface"
1935};
1936
1924static u32 bnx2x_eee_to_adv(u32 eee_adv) 1937static u32 bnx2x_eee_to_adv(u32 eee_adv)
1925{ 1938{
1926 u32 modes = 0; 1939 u32 modes = 0;
@@ -2978,32 +2991,47 @@ static int bnx2x_num_stat_queues(struct bnx2x *bp)
2978static int bnx2x_get_sset_count(struct net_device *dev, int stringset) 2991static int bnx2x_get_sset_count(struct net_device *dev, int stringset)
2979{ 2992{
2980 struct bnx2x *bp = netdev_priv(dev); 2993 struct bnx2x *bp = netdev_priv(dev);
2981 int i, num_stats; 2994 int i, num_strings = 0;
2982 2995
2983 switch (stringset) { 2996 switch (stringset) {
2984 case ETH_SS_STATS: 2997 case ETH_SS_STATS:
2985 if (is_multi(bp)) { 2998 if (is_multi(bp)) {
2986 num_stats = bnx2x_num_stat_queues(bp) * 2999 num_strings = bnx2x_num_stat_queues(bp) *
2987 BNX2X_NUM_Q_STATS; 3000 BNX2X_NUM_Q_STATS;
2988 } else 3001 } else
2989 num_stats = 0; 3002 num_strings = 0;
2990 if (IS_MF_MODE_STAT(bp)) { 3003 if (IS_MF_MODE_STAT(bp)) {
2991 for (i = 0; i < BNX2X_NUM_STATS; i++) 3004 for (i = 0; i < BNX2X_NUM_STATS; i++)
2992 if (IS_FUNC_STAT(i)) 3005 if (IS_FUNC_STAT(i))
2993 num_stats++; 3006 num_strings++;
2994 } else 3007 } else
2995 num_stats += BNX2X_NUM_STATS; 3008 num_strings += BNX2X_NUM_STATS;
2996 3009
2997 return num_stats; 3010 return num_strings;
2998 3011
2999 case ETH_SS_TEST: 3012 case ETH_SS_TEST:
3000 return BNX2X_NUM_TESTS(bp); 3013 return BNX2X_NUM_TESTS(bp);
3001 3014
3015 case ETH_SS_PRIV_FLAGS:
3016 return BNX2X_PRI_FLAG_LEN;
3017
3002 default: 3018 default:
3003 return -EINVAL; 3019 return -EINVAL;
3004 } 3020 }
3005} 3021}
3006 3022
3023static u32 bnx2x_get_private_flags(struct net_device *dev)
3024{
3025 struct bnx2x *bp = netdev_priv(dev);
3026 u32 flags = 0;
3027
3028 flags |= (!(bp->flags & NO_ISCSI_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_ISCSI;
3029 flags |= (!(bp->flags & NO_FCOE_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_FCOE;
3030 flags |= (!!IS_MF_STORAGE_ONLY(bp)) << BNX2X_PRI_FLAG_STORAGE;
3031
3032 return flags;
3033}
3034
3007static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 3035static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
3008{ 3036{
3009 struct bnx2x *bp = netdev_priv(dev); 3037 struct bnx2x *bp = netdev_priv(dev);
@@ -3045,6 +3073,12 @@ static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
3045 start = 4; 3073 start = 4;
3046 memcpy(buf, bnx2x_tests_str_arr + start, 3074 memcpy(buf, bnx2x_tests_str_arr + start,
3047 ETH_GSTRING_LEN * BNX2X_NUM_TESTS(bp)); 3075 ETH_GSTRING_LEN * BNX2X_NUM_TESTS(bp));
3076 break;
3077
3078 case ETH_SS_PRIV_FLAGS:
3079 memcpy(buf, bnx2x_private_arr,
3080 ETH_GSTRING_LEN * BNX2X_PRI_FLAG_LEN);
3081 break;
3048 } 3082 }
3049} 3083}
3050 3084
@@ -3445,6 +3479,7 @@ static const struct ethtool_ops bnx2x_ethtool_ops = {
3445 .set_pauseparam = bnx2x_set_pauseparam, 3479 .set_pauseparam = bnx2x_set_pauseparam,
3446 .self_test = bnx2x_self_test, 3480 .self_test = bnx2x_self_test,
3447 .get_sset_count = bnx2x_get_sset_count, 3481 .get_sset_count = bnx2x_get_sset_count,
3482 .get_priv_flags = bnx2x_get_private_flags,
3448 .get_strings = bnx2x_get_strings, 3483 .get_strings = bnx2x_get_strings,
3449 .set_phys_id = bnx2x_set_phys_id, 3484 .set_phys_id = bnx2x_set_phys_id,
3450 .get_ethtool_stats = bnx2x_get_ethtool_stats, 3485 .get_ethtool_stats = bnx2x_get_ethtool_stats,