@@ -153,57 +153,51 @@ static const char fm10k_prv_flags[FM10K_PRV_FLAG_LEN][ETH_GSTRING_LEN] = {
153
153
"debug-statistics" ,
154
154
};
155
155
156
+ static void fm10k_add_stat_strings (char * * p , const char * prefix ,
157
+ const struct fm10k_stats stats [],
158
+ const unsigned int size )
159
+ {
160
+ unsigned int i ;
161
+
162
+ for (i = 0 ; i < size ; i ++ ) {
163
+ snprintf (* p , ETH_GSTRING_LEN , "%s%s" ,
164
+ prefix , stats [i ].stat_string );
165
+ * p += ETH_GSTRING_LEN ;
166
+ }
167
+ }
168
+
156
169
static void fm10k_get_stat_strings (struct net_device * dev , u8 * data )
157
170
{
158
171
struct fm10k_intfc * interface = netdev_priv (dev );
159
172
struct fm10k_iov_data * iov_data = interface -> iov_data ;
160
173
char * p = (char * )data ;
161
174
unsigned int i ;
162
- unsigned int j ;
163
175
164
- for (i = 0 ; i < FM10K_NETDEV_STATS_LEN ; i ++ ) {
165
- memcpy (p , fm10k_gstrings_net_stats [i ].stat_string ,
166
- ETH_GSTRING_LEN );
167
- p += ETH_GSTRING_LEN ;
168
- }
176
+ fm10k_add_stat_strings (& p , "" , fm10k_gstrings_net_stats ,
177
+ FM10K_NETDEV_STATS_LEN );
169
178
170
- for (i = 0 ; i < FM10K_GLOBAL_STATS_LEN ; i ++ ) {
171
- memcpy (p , fm10k_gstrings_global_stats [i ].stat_string ,
172
- ETH_GSTRING_LEN );
173
- p += ETH_GSTRING_LEN ;
174
- }
179
+ fm10k_add_stat_strings (& p , "" , fm10k_gstrings_global_stats ,
180
+ FM10K_GLOBAL_STATS_LEN );
175
181
176
- if (interface -> flags & FM10K_FLAG_DEBUG_STATS ) {
177
- for (i = 0 ; i < FM10K_DEBUG_STATS_LEN ; i ++ ) {
178
- memcpy (p , fm10k_gstrings_debug_stats [i ].stat_string ,
179
- ETH_GSTRING_LEN );
180
- p += ETH_GSTRING_LEN ;
181
- }
182
- }
182
+ if (interface -> flags & FM10K_FLAG_DEBUG_STATS )
183
+ fm10k_add_stat_strings (& p , "" , fm10k_gstrings_debug_stats ,
184
+ FM10K_DEBUG_STATS_LEN );
183
185
184
- for (i = 0 ; i < FM10K_MBX_STATS_LEN ; i ++ ) {
185
- memcpy (p , fm10k_gstrings_mbx_stats [i ].stat_string ,
186
- ETH_GSTRING_LEN );
187
- p += ETH_GSTRING_LEN ;
188
- }
186
+ fm10k_add_stat_strings (& p , "" , fm10k_gstrings_mbx_stats ,
187
+ FM10K_MBX_STATS_LEN );
189
188
190
- if (interface -> hw .mac .type != fm10k_mac_vf ) {
191
- for (i = 0 ; i < FM10K_PF_STATS_LEN ; i ++ ) {
192
- memcpy (p , fm10k_gstrings_pf_stats [i ].stat_string ,
193
- ETH_GSTRING_LEN );
194
- p += ETH_GSTRING_LEN ;
195
- }
196
- }
189
+ if (interface -> hw .mac .type != fm10k_mac_vf )
190
+ fm10k_add_stat_strings (& p , "" , fm10k_gstrings_pf_stats ,
191
+ FM10K_PF_STATS_LEN );
197
192
198
193
if ((interface -> flags & FM10K_FLAG_DEBUG_STATS ) && iov_data ) {
199
194
for (i = 0 ; i < iov_data -> num_vfs ; i ++ ) {
200
- for (j = 0 ; j < FM10K_MBX_STATS_LEN ; j ++ ) {
201
- snprintf (p ,
202
- ETH_GSTRING_LEN ,
203
- "vf_%u_%s" , i ,
204
- fm10k_gstrings_mbx_stats [j ].stat_string );
205
- p += ETH_GSTRING_LEN ;
206
- }
195
+ char prefix [ETH_GSTRING_LEN ];
196
+
197
+ snprintf (prefix , ETH_GSTRING_LEN , "vf_%u_" , i );
198
+ fm10k_add_stat_strings (& p , prefix ,
199
+ fm10k_gstrings_mbx_stats ,
200
+ FM10K_MBX_STATS_LEN );
207
201
}
208
202
}
209
203
@@ -271,6 +265,41 @@ static int fm10k_get_sset_count(struct net_device *dev, int sset)
271
265
}
272
266
}
273
267
268
+ static void fm10k_add_ethtool_stats (u64 * * data , void * pointer ,
269
+ const struct fm10k_stats stats [],
270
+ const unsigned int size )
271
+ {
272
+ unsigned int i ;
273
+ char * p ;
274
+
275
+ /* simply skip forward if we were not given a valid pointer */
276
+ if (!pointer ) {
277
+ * data += size ;
278
+ return ;
279
+ }
280
+
281
+ for (i = 0 ; i < size ; i ++ ) {
282
+ p = (char * )pointer + stats [i ].stat_offset ;
283
+
284
+ switch (stats [i ].sizeof_stat ) {
285
+ case sizeof (u64 ):
286
+ * ((* data )++ ) = * (u64 * )p ;
287
+ break ;
288
+ case sizeof (u32 ):
289
+ * ((* data )++ ) = * (u32 * )p ;
290
+ break ;
291
+ case sizeof (u16 ):
292
+ * ((* data )++ ) = * (u16 * )p ;
293
+ break ;
294
+ case sizeof (u8 ):
295
+ * ((* data )++ ) = * (u8 * )p ;
296
+ break ;
297
+ default :
298
+ * ((* data )++ ) = 0 ;
299
+ }
300
+ }
301
+ }
302
+
274
303
static void fm10k_get_ethtool_stats (struct net_device * netdev ,
275
304
struct ethtool_stats __always_unused * stats ,
276
305
u64 * data )
@@ -279,47 +308,29 @@ static void fm10k_get_ethtool_stats(struct net_device *netdev,
279
308
struct fm10k_intfc * interface = netdev_priv (netdev );
280
309
struct fm10k_iov_data * iov_data = interface -> iov_data ;
281
310
struct net_device_stats * net_stats = & netdev -> stats ;
282
- char * p ;
283
311
int i , j ;
284
312
285
313
fm10k_update_stats (interface );
286
314
287
- for (i = 0 ; i < FM10K_NETDEV_STATS_LEN ; i ++ ) {
288
- p = (char * )net_stats + fm10k_gstrings_net_stats [i ].stat_offset ;
289
- * (data ++ ) = (fm10k_gstrings_net_stats [i ].sizeof_stat ==
290
- sizeof (u64 )) ? * (u64 * )p : * (u32 * )p ;
291
- }
315
+ fm10k_add_ethtool_stats (& data , net_stats , fm10k_gstrings_net_stats ,
316
+ FM10K_NETDEV_STATS_LEN );
292
317
293
- for (i = 0 ; i < FM10K_GLOBAL_STATS_LEN ; i ++ ) {
294
- p = (char * )interface +
295
- fm10k_gstrings_global_stats [i ].stat_offset ;
296
- * (data ++ ) = (fm10k_gstrings_global_stats [i ].sizeof_stat ==
297
- sizeof (u64 )) ? * (u64 * )p : * (u32 * )p ;
298
- }
318
+ fm10k_add_ethtool_stats (& data , interface , fm10k_gstrings_global_stats ,
319
+ FM10K_GLOBAL_STATS_LEN );
299
320
300
- if (interface -> flags & FM10K_FLAG_DEBUG_STATS ) {
301
- for (i = 0 ; i < FM10K_DEBUG_STATS_LEN ; i ++ ) {
302
- p = (char * )interface +
303
- fm10k_gstrings_debug_stats [i ].stat_offset ;
304
- * (data ++ ) = (fm10k_gstrings_debug_stats [i ].sizeof_stat ==
305
- sizeof (u64 )) ? * (u64 * )p : * (u32 * )p ;
306
- }
307
- }
321
+ if (interface -> flags & FM10K_FLAG_DEBUG_STATS )
322
+ fm10k_add_ethtool_stats (& data , interface ,
323
+ fm10k_gstrings_debug_stats ,
324
+ FM10K_DEBUG_STATS_LEN );
308
325
309
- for (i = 0 ; i < FM10K_MBX_STATS_LEN ; i ++ ) {
310
- p = (char * )& interface -> hw .mbx +
311
- fm10k_gstrings_mbx_stats [i ].stat_offset ;
312
- * (data ++ ) = (fm10k_gstrings_mbx_stats [i ].sizeof_stat ==
313
- sizeof (u64 )) ? * (u64 * )p : * (u32 * )p ;
314
- }
326
+ fm10k_add_ethtool_stats (& data , & interface -> hw .mbx ,
327
+ fm10k_gstrings_mbx_stats ,
328
+ FM10K_MBX_STATS_LEN );
315
329
316
330
if (interface -> hw .mac .type != fm10k_mac_vf ) {
317
- for (i = 0 ; i < FM10K_PF_STATS_LEN ; i ++ ) {
318
- p = (char * )interface +
319
- fm10k_gstrings_pf_stats [i ].stat_offset ;
320
- * (data ++ ) = (fm10k_gstrings_pf_stats [i ].sizeof_stat ==
321
- sizeof (u64 )) ? * (u64 * )p : * (u32 * )p ;
322
- }
331
+ fm10k_add_ethtool_stats (& data , interface ,
332
+ fm10k_gstrings_pf_stats ,
333
+ FM10K_PF_STATS_LEN );
323
334
}
324
335
325
336
if ((interface -> flags & FM10K_FLAG_DEBUG_STATS ) && iov_data ) {
@@ -328,18 +339,9 @@ static void fm10k_get_ethtool_stats(struct net_device *netdev,
328
339
329
340
vf_info = & iov_data -> vf_info [i ];
330
341
331
- /* skip stats if we don't have a vf info */
332
- if (!vf_info ) {
333
- data += FM10K_MBX_STATS_LEN ;
334
- continue ;
335
- }
336
-
337
- for (j = 0 ; j < FM10K_MBX_STATS_LEN ; j ++ ) {
338
- p = (char * )& vf_info -> mbx +
339
- fm10k_gstrings_mbx_stats [j ].stat_offset ;
340
- * (data ++ ) = (fm10k_gstrings_mbx_stats [j ].sizeof_stat ==
341
- sizeof (u64 )) ? * (u64 * )p : * (u32 * )p ;
342
- }
342
+ fm10k_add_ethtool_stats (& data , & vf_info -> mbx ,
343
+ fm10k_gstrings_mbx_stats ,
344
+ FM10K_MBX_STATS_LEN );
343
345
}
344
346
}
345
347
@@ -425,7 +427,7 @@ static void fm10k_get_regs(struct net_device *netdev,
425
427
u32 * buff = p ;
426
428
u16 i ;
427
429
428
- regs -> version = ( 1 << 24 ) | (hw -> revision_id << 16 ) | hw -> device_id ;
430
+ regs -> version = BIT ( 24 ) | (hw -> revision_id << 16 ) | hw -> device_id ;
429
431
430
432
switch (hw -> mac .type ) {
431
433
case fm10k_mac_pf :
@@ -935,15 +937,15 @@ static int fm10k_mbx_test(struct fm10k_intfc *interface, u64 *data)
935
937
struct fm10k_mbx_info * mbx = & hw -> mbx ;
936
938
u32 attr_flag , test_msg [6 ];
937
939
unsigned long timeout ;
938
- int err ;
940
+ int err = - EINVAL ;
939
941
940
942
/* For now this is a VF only feature */
941
943
if (hw -> mac .type != fm10k_mac_vf )
942
944
return 0 ;
943
945
944
946
/* loop through both nested and unnested attribute types */
945
- for (attr_flag = ( 1 << FM10K_TEST_MSG_UNSET );
946
- attr_flag < ( 1 << ( 2 * FM10K_TEST_MSG_NESTED ) );
947
+ for (attr_flag = BIT ( FM10K_TEST_MSG_UNSET );
948
+ attr_flag < BIT ( 2 * FM10K_TEST_MSG_NESTED );
947
949
attr_flag += attr_flag ) {
948
950
/* generate message to be tested */
949
951
fm10k_tlv_msg_test_create (test_msg , attr_flag );
@@ -1005,7 +1007,7 @@ static u32 fm10k_get_priv_flags(struct net_device *netdev)
1005
1007
u32 priv_flags = 0 ;
1006
1008
1007
1009
if (interface -> flags & FM10K_FLAG_DEBUG_STATS )
1008
- priv_flags |= 1 << FM10K_PRV_FLAG_DEBUG_STATS ;
1010
+ priv_flags |= BIT ( FM10K_PRV_FLAG_DEBUG_STATS ) ;
1009
1011
1010
1012
return priv_flags ;
1011
1013
}
@@ -1014,22 +1016,42 @@ static int fm10k_set_priv_flags(struct net_device *netdev, u32 priv_flags)
1014
1016
{
1015
1017
struct fm10k_intfc * interface = netdev_priv (netdev );
1016
1018
1017
- if (priv_flags >= ( 1 << FM10K_PRV_FLAG_LEN ))
1019
+ if (priv_flags >= BIT ( FM10K_PRV_FLAG_LEN ))
1018
1020
return - EINVAL ;
1019
1021
1020
- if (priv_flags & ( 1 << FM10K_PRV_FLAG_DEBUG_STATS ))
1022
+ if (priv_flags & BIT ( FM10K_PRV_FLAG_DEBUG_STATS ))
1021
1023
interface -> flags |= FM10K_FLAG_DEBUG_STATS ;
1022
1024
else
1023
1025
interface -> flags &= ~FM10K_FLAG_DEBUG_STATS ;
1024
1026
1025
1027
return 0 ;
1026
1028
}
1027
1029
1028
- static u32 fm10k_get_reta_size (struct net_device __always_unused * netdev )
1030
+ u32 fm10k_get_reta_size (struct net_device __always_unused * netdev )
1029
1031
{
1030
1032
return FM10K_RETA_SIZE * FM10K_RETA_ENTRIES_PER_REG ;
1031
1033
}
1032
1034
1035
+ void fm10k_write_reta (struct fm10k_intfc * interface , const u32 * indir )
1036
+ {
1037
+ struct fm10k_hw * hw = & interface -> hw ;
1038
+ int i ;
1039
+
1040
+ /* record entries to reta table */
1041
+ for (i = 0 ; i < FM10K_RETA_SIZE ; i ++ , indir += 4 ) {
1042
+ u32 reta = indir [0 ] |
1043
+ (indir [1 ] << 8 ) |
1044
+ (indir [2 ] << 16 ) |
1045
+ (indir [3 ] << 24 );
1046
+
1047
+ if (interface -> reta [i ] == reta )
1048
+ continue ;
1049
+
1050
+ interface -> reta [i ] = reta ;
1051
+ fm10k_write_reg (hw , FM10K_RETA (0 , i ), reta );
1052
+ }
1053
+ }
1054
+
1033
1055
static int fm10k_get_reta (struct net_device * netdev , u32 * indir )
1034
1056
{
1035
1057
struct fm10k_intfc * interface = netdev_priv (netdev );
@@ -1053,7 +1075,6 @@ static int fm10k_get_reta(struct net_device *netdev, u32 *indir)
1053
1075
static int fm10k_set_reta (struct net_device * netdev , const u32 * indir )
1054
1076
{
1055
1077
struct fm10k_intfc * interface = netdev_priv (netdev );
1056
- struct fm10k_hw * hw = & interface -> hw ;
1057
1078
int i ;
1058
1079
u16 rss_i ;
1059
1080
@@ -1068,19 +1089,7 @@ static int fm10k_set_reta(struct net_device *netdev, const u32 *indir)
1068
1089
return - EINVAL ;
1069
1090
}
1070
1091
1071
- /* record entries to reta table */
1072
- for (i = 0 ; i < FM10K_RETA_SIZE ; i ++ , indir += 4 ) {
1073
- u32 reta = indir [0 ] |
1074
- (indir [1 ] << 8 ) |
1075
- (indir [2 ] << 16 ) |
1076
- (indir [3 ] << 24 );
1077
-
1078
- if (interface -> reta [i ] == reta )
1079
- continue ;
1080
-
1081
- interface -> reta [i ] = reta ;
1082
- fm10k_write_reg (hw , FM10K_RETA (0 , i ), reta );
1083
- }
1092
+ fm10k_write_reta (interface , indir );
1084
1093
1085
1094
return 0 ;
1086
1095
}
@@ -1145,7 +1154,7 @@ static unsigned int fm10k_max_channels(struct net_device *dev)
1145
1154
1146
1155
/* For QoS report channels per traffic class */
1147
1156
if (tcs > 1 )
1148
- max_combined = 1 << ( fls (max_combined / tcs ) - 1 );
1157
+ max_combined = BIT (( fls (max_combined / tcs ) - 1 ) );
1149
1158
1150
1159
return max_combined ;
1151
1160
}
@@ -1210,11 +1219,9 @@ static int fm10k_get_ts_info(struct net_device *dev,
1210
1219
else
1211
1220
info -> phc_index = -1 ;
1212
1221
1213
- info -> tx_types = (1 << HWTSTAMP_TX_OFF ) |
1214
- (1 << HWTSTAMP_TX_ON );
1222
+ info -> tx_types = BIT (HWTSTAMP_TX_OFF ) | BIT (HWTSTAMP_TX_ON );
1215
1223
1216
- info -> rx_filters = (1 << HWTSTAMP_FILTER_NONE ) |
1217
- (1 << HWTSTAMP_FILTER_ALL );
1224
+ info -> rx_filters = BIT (HWTSTAMP_FILTER_NONE ) | BIT (HWTSTAMP_FILTER_ALL );
1218
1225
1219
1226
return 0 ;
1220
1227
}
0 commit comments