14
14
#include "aq_vec.h"
15
15
#include "aq_hw.h"
16
16
#include "aq_pci_func.h"
17
- #include "aq_main.h"
18
17
19
18
#include <linux/moduleparam.h>
20
19
#include <linux/netdevice.h>
@@ -61,17 +60,13 @@ static void aq_nic_rss_init(struct aq_nic_s *self, unsigned int num_rss_queues)
61
60
rss_params -> indirection_table [i ] = i & (num_rss_queues - 1 );
62
61
}
63
62
64
- /* Fills aq_nic_cfg with valid defaults */
65
- static void aq_nic_cfg_init_defaults (struct aq_nic_s * self )
63
+ /* Checks hw_caps and 'corrects' aq_nic_cfg in runtime */
64
+ void aq_nic_cfg_start (struct aq_nic_s * self )
66
65
{
67
66
struct aq_nic_cfg_s * cfg = & self -> aq_nic_cfg ;
68
67
69
- cfg -> vecs = AQ_CFG_VECS_DEF ;
70
68
cfg -> tcs = AQ_CFG_TCS_DEF ;
71
69
72
- cfg -> rxds = AQ_CFG_RXDS_DEF ;
73
- cfg -> txds = AQ_CFG_TXDS_DEF ;
74
-
75
70
cfg -> is_polling = AQ_CFG_IS_POLLING_DEF ;
76
71
77
72
cfg -> itr = aq_itr ;
@@ -92,19 +87,13 @@ static void aq_nic_cfg_init_defaults(struct aq_nic_s *self)
92
87
cfg -> vlan_id = 0U ;
93
88
94
89
aq_nic_rss_init (self , cfg -> num_rss_queues );
95
- }
96
-
97
- /* Checks hw_caps and 'corrects' aq_nic_cfg in runtime */
98
- int aq_nic_cfg_start (struct aq_nic_s * self )
99
- {
100
- struct aq_nic_cfg_s * cfg = & self -> aq_nic_cfg ;
101
90
102
91
/*descriptors */
103
- cfg -> rxds = min (cfg -> rxds , cfg -> aq_hw_caps -> rxds );
104
- cfg -> txds = min (cfg -> txds , cfg -> aq_hw_caps -> txds );
92
+ cfg -> rxds = min (cfg -> aq_hw_caps -> rxds , AQ_CFG_RXDS_DEF );
93
+ cfg -> txds = min (cfg -> aq_hw_caps -> txds , AQ_CFG_TXDS_DEF );
105
94
106
95
/*rss rings */
107
- cfg -> vecs = min (cfg -> vecs , cfg -> aq_hw_caps -> vecs );
96
+ cfg -> vecs = min (cfg -> aq_hw_caps -> vecs , AQ_CFG_VECS_DEF );
108
97
cfg -> vecs = min (cfg -> vecs , num_online_cpus ());
109
98
/* cfg->vecs should be power of 2 for RSS */
110
99
if (cfg -> vecs >= 8U )
@@ -118,7 +107,7 @@ int aq_nic_cfg_start(struct aq_nic_s *self)
118
107
119
108
cfg -> num_rss_queues = min (cfg -> vecs , AQ_CFG_NUM_RSS_QUEUES_DEF );
120
109
121
- cfg -> irq_type = aq_pci_func_get_irq_type (self -> aq_pci_func );
110
+ cfg -> irq_type = aq_pci_func_get_irq_type (self );
122
111
123
112
if ((cfg -> irq_type == AQ_HW_IRQ_LEGACY ) ||
124
113
(cfg -> aq_hw_caps -> vecs == 1U ) ||
@@ -129,7 +118,6 @@ int aq_nic_cfg_start(struct aq_nic_s *self)
129
118
130
119
cfg -> link_speed_msk &= cfg -> aq_hw_caps -> link_speed_msk ;
131
120
cfg -> hw_features = cfg -> aq_hw_caps -> hw_features ;
132
- return 0 ;
133
121
}
134
122
135
123
static int aq_nic_update_link_status (struct aq_nic_s * self )
@@ -203,50 +191,6 @@ static void aq_nic_polling_timer_cb(struct timer_list *t)
203
191
AQ_CFG_POLLING_TIMER_INTERVAL );
204
192
}
205
193
206
- struct aq_nic_s * aq_nic_alloc_cold (struct pci_dev * pdev ,
207
- struct aq_pci_func_s * aq_pci_func ,
208
- unsigned int port ,
209
- const struct aq_hw_ops * aq_hw_ops ,
210
- const struct aq_hw_caps_s * aq_hw_caps )
211
- {
212
- struct net_device * ndev = NULL ;
213
- struct aq_nic_s * self = NULL ;
214
- int err = 0 ;
215
-
216
- ndev = aq_ndev_alloc ();
217
- if (!ndev ) {
218
- err = - ENOMEM ;
219
- goto err_exit ;
220
- }
221
-
222
- self = netdev_priv (ndev );
223
-
224
- SET_NETDEV_DEV (ndev , & pdev -> dev );
225
-
226
- ndev -> if_port = port ;
227
- self -> ndev = ndev ;
228
-
229
- self -> aq_pci_func = aq_pci_func ;
230
-
231
- self -> aq_hw_ops = aq_hw_ops ;
232
- self -> aq_nic_cfg .aq_hw_caps = aq_hw_caps ;
233
- self -> aq_hw -> aq_nic_cfg = & self -> aq_nic_cfg ;
234
- self -> port = (u8 )port ;
235
-
236
- self -> aq_hw = self -> aq_hw_ops -> create (aq_pci_func , self -> port );
237
- if (err < 0 )
238
- goto err_exit ;
239
-
240
- aq_nic_cfg_init_defaults (self );
241
-
242
- err_exit :
243
- if (err < 0 ) {
244
- aq_nic_free_hot_resources (self );
245
- self = NULL ;
246
- }
247
- return self ;
248
- }
249
-
250
194
int aq_nic_ndev_register (struct aq_nic_s * self )
251
195
{
252
196
int err = 0 ;
@@ -255,9 +199,10 @@ int aq_nic_ndev_register(struct aq_nic_s *self)
255
199
err = - EINVAL ;
256
200
goto err_exit ;
257
201
}
202
+
258
203
err = self -> aq_hw_ops -> hw_get_mac_permanent (self -> aq_hw ,
259
204
self -> ndev -> dev_addr );
260
- if (err < 0 )
205
+ if (err )
261
206
goto err_exit ;
262
207
263
208
#if defined(AQ_CFG_MAC_ADDR_PERMANENT )
@@ -268,19 +213,29 @@ int aq_nic_ndev_register(struct aq_nic_s *self)
268
213
}
269
214
#endif
270
215
216
+ for (self -> aq_vecs = 0 ; self -> aq_vecs < aq_nic_get_cfg (self )-> vecs ;
217
+ self -> aq_vecs ++ ) {
218
+ self -> aq_vec [self -> aq_vecs ] =
219
+ aq_vec_alloc (self , self -> aq_vecs , aq_nic_get_cfg (self ));
220
+ if (!self -> aq_vec [self -> aq_vecs ]) {
221
+ err = - ENOMEM ;
222
+ goto err_exit ;
223
+ }
224
+ }
225
+
271
226
netif_carrier_off (self -> ndev );
272
227
273
228
netif_tx_disable (self -> ndev );
274
229
275
230
err = register_netdev (self -> ndev );
276
- if (err < 0 )
231
+ if (err )
277
232
goto err_exit ;
278
233
279
234
err_exit :
280
235
return err ;
281
236
}
282
237
283
- int aq_nic_ndev_init (struct aq_nic_s * self )
238
+ void aq_nic_ndev_init (struct aq_nic_s * self )
284
239
{
285
240
const struct aq_hw_caps_s * aq_hw_caps = self -> aq_nic_cfg .aq_hw_caps ;
286
241
struct aq_nic_cfg_s * aq_nic_cfg = & self -> aq_nic_cfg ;
@@ -291,60 +246,6 @@ int aq_nic_ndev_init(struct aq_nic_s *self)
291
246
self -> ndev -> mtu = aq_nic_cfg -> mtu - ETH_HLEN ;
292
247
self -> ndev -> max_mtu = aq_hw_caps -> mtu - ETH_FCS_LEN - ETH_HLEN ;
293
248
294
- return 0 ;
295
- }
296
-
297
- void aq_nic_ndev_free (struct aq_nic_s * self )
298
- {
299
- if (!self -> ndev )
300
- goto err_exit ;
301
-
302
- if (self -> ndev -> reg_state == NETREG_REGISTERED )
303
- unregister_netdev (self -> ndev );
304
-
305
- if (self -> aq_hw )
306
- self -> aq_hw_ops -> destroy (self -> aq_hw );
307
-
308
- free_netdev (self -> ndev );
309
-
310
- err_exit :;
311
- }
312
-
313
- struct aq_nic_s * aq_nic_alloc_hot (struct net_device * ndev )
314
- {
315
- struct aq_nic_s * self = NULL ;
316
- int err = 0 ;
317
-
318
- if (!ndev ) {
319
- err = - EINVAL ;
320
- goto err_exit ;
321
- }
322
- self = netdev_priv (ndev );
323
-
324
- if (!self ) {
325
- err = - EINVAL ;
326
- goto err_exit ;
327
- }
328
- if (netif_running (ndev ))
329
- netif_tx_disable (ndev );
330
- netif_carrier_off (self -> ndev );
331
-
332
- for (self -> aq_vecs = 0 ; self -> aq_vecs < self -> aq_nic_cfg .vecs ;
333
- self -> aq_vecs ++ ) {
334
- self -> aq_vec [self -> aq_vecs ] =
335
- aq_vec_alloc (self , self -> aq_vecs , & self -> aq_nic_cfg );
336
- if (!self -> aq_vec [self -> aq_vecs ]) {
337
- err = - ENOMEM ;
338
- goto err_exit ;
339
- }
340
- }
341
-
342
- err_exit :
343
- if (err < 0 ) {
344
- aq_nic_free_hot_resources (self );
345
- self = NULL ;
346
- }
347
- return self ;
348
249
}
349
250
350
251
void aq_nic_set_tx_ring (struct aq_nic_s * self , unsigned int idx ,
@@ -370,14 +271,16 @@ int aq_nic_init(struct aq_nic_s *self)
370
271
goto err_exit ;
371
272
372
273
err = self -> aq_hw_ops -> hw_init (self -> aq_hw ,
373
- aq_nic_get_ndev (self )-> dev_addr );
274
+ aq_nic_get_ndev (self )-> dev_addr );
374
275
if (err < 0 )
375
276
goto err_exit ;
376
277
377
278
for (i = 0U , aq_vec = self -> aq_vec [0 ];
378
279
self -> aq_vecs > i ; ++ i , aq_vec = self -> aq_vec [i ])
379
280
aq_vec_init (aq_vec , self -> aq_hw_ops , self -> aq_hw );
380
281
282
+ netif_carrier_off (self -> ndev );
283
+
381
284
err_exit :
382
285
return err ;
383
286
}
@@ -424,9 +327,9 @@ int aq_nic_start(struct aq_nic_s *self)
424
327
} else {
425
328
for (i = 0U , aq_vec = self -> aq_vec [0 ];
426
329
self -> aq_vecs > i ; ++ i , aq_vec = self -> aq_vec [i ]) {
427
- err = aq_pci_func_alloc_irq (self -> aq_pci_func , i ,
330
+ err = aq_pci_func_alloc_irq (self , i ,
428
331
self -> ndev -> name , aq_vec ,
429
- aq_vec_get_affinity_mask (aq_vec ));
332
+ aq_vec_get_affinity_mask (aq_vec ));
430
333
if (err < 0 )
431
334
goto err_exit ;
432
335
}
@@ -617,8 +520,7 @@ int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb)
617
520
618
521
if (likely (frags )) {
619
522
err = self -> aq_hw_ops -> hw_ring_tx_xmit (self -> aq_hw ,
620
- ring ,
621
- frags );
523
+ ring , frags );
622
524
if (err >= 0 ) {
623
525
++ ring -> stats .tx .packets ;
624
526
ring -> stats .tx .bytes += skb -> len ;
@@ -674,7 +576,7 @@ int aq_nic_set_multicast_list(struct aq_nic_s *self, struct net_device *ndev)
674
576
self -> packet_filter |= IFF_ALLMULTI ;
675
577
self -> aq_nic_cfg .mc_list_count = 0 ;
676
578
return self -> aq_hw_ops -> hw_packet_filter_set (self -> aq_hw ,
677
- self -> packet_filter );
579
+ self -> packet_filter );
678
580
} else {
679
581
return self -> aq_hw_ops -> hw_multicast_list_set (self -> aq_hw ,
680
582
self -> mc_list .ar ,
@@ -757,7 +659,6 @@ void aq_nic_get_stats(struct aq_nic_s *self, u64 *data)
757
659
i ++ ;
758
660
759
661
data += i ;
760
- count = 0U ;
761
662
762
663
for (i = 0U , aq_vec = self -> aq_vec [0 ];
763
664
aq_vec && self -> aq_vecs > i ; ++ i , aq_vec = self -> aq_vec [i ]) {
@@ -937,7 +838,7 @@ int aq_nic_stop(struct aq_nic_s *self)
937
838
if (self -> aq_nic_cfg .is_polling )
938
839
del_timer_sync (& self -> polling_timer );
939
840
else
940
- aq_pci_func_free_irqs (self -> aq_pci_func );
841
+ aq_pci_func_free_irqs (self );
941
842
942
843
for (i = 0U , aq_vec = self -> aq_vec [0 ];
943
844
self -> aq_vecs > i ; ++ i , aq_vec = self -> aq_vec [i ])
@@ -968,7 +869,7 @@ void aq_nic_deinit(struct aq_nic_s *self)
968
869
err_exit :;
969
870
}
970
871
971
- void aq_nic_free_hot_resources (struct aq_nic_s * self )
872
+ void aq_nic_free_vectors (struct aq_nic_s * self )
972
873
{
973
874
unsigned int i = 0U ;
974
875
0 commit comments