diff options
author | Yuval Mintz <yuvalmin@broadcom.com> | 2013-05-22 17:21:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-05-23 21:49:30 -0400 |
commit | 3521b419cc21339537266cb1ab9934b041ca08e9 (patch) | |
tree | f07ff796c2d68a160a8768b5eed9ee8583e22ba8 /drivers/net/ethernet/broadcom | |
parent | 340611ab7f8c95e9638bb8a181cb078e900dc5ec (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.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 49 |
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 | ||
1924 | enum { | ||
1925 | BNX2X_PRI_FLAG_ISCSI, | ||
1926 | BNX2X_PRI_FLAG_FCOE, | ||
1927 | BNX2X_PRI_FLAG_STORAGE, | ||
1928 | BNX2X_PRI_FLAG_LEN, | ||
1929 | }; | ||
1930 | |||
1931 | static 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 | |||
1924 | static u32 bnx2x_eee_to_adv(u32 eee_adv) | 1937 | static 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) | |||
2978 | static int bnx2x_get_sset_count(struct net_device *dev, int stringset) | 2991 | static 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 | ||
3023 | static 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 | |||
3007 | static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf) | 3035 | static 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, |