1 /*
2  * aQuantia Corporation Network Driver
3  * Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  */
9 
10 /* File aq_nic.c: Definition of common code for NIC. */
11 
12 #include "aq_nic.h"
13 #include "aq_ring.h"
14 #include "aq_vec.h"
15 #include "aq_hw.h"
16 #include "aq_pci_func.h"
17 #include "aq_nic_internal.h"
18 
19 #include <linux/netdevice.h>
20 #include <linux/etherdevice.h>
21 #include <linux/timer.h>
22 #include <linux/cpu.h>
23 #include <linux/ip.h>
24 #include <linux/tcp.h>
25 #include <net/ip.h>
26 
27 static void aq_nic_rss_init(struct aq_nic_s *self, unsigned int num_rss_queues)
28 {
29 	struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg;
30 	struct aq_rss_parameters *rss_params = &cfg->aq_rss;
31 	int i = 0;
32 
33 	static u8 rss_key[40] = {
34 		0x1e, 0xad, 0x71, 0x87, 0x65, 0xfc, 0x26, 0x7d,
35 		0x0d, 0x45, 0x67, 0x74, 0xcd, 0x06, 0x1a, 0x18,
36 		0xb6, 0xc1, 0xf0, 0xc7, 0xbb, 0x18, 0xbe, 0xf8,
37 		0x19, 0x13, 0x4b, 0xa9, 0xd0, 0x3e, 0xfe, 0x70,
38 		0x25, 0x03, 0xab, 0x50, 0x6a, 0x8b, 0x82, 0x0c
39 	};
40 
41 	rss_params->hash_secret_key_size = sizeof(rss_key);
42 	memcpy(rss_params->hash_secret_key, rss_key, sizeof(rss_key));
43 	rss_params->indirection_table_size = AQ_CFG_RSS_INDIRECTION_TABLE_MAX;
44 
45 	for (i = rss_params->indirection_table_size; i--;)
46 		rss_params->indirection_table[i] = i & (num_rss_queues - 1);
47 }
48 
49 /* Fills aq_nic_cfg with valid defaults */
50 static void aq_nic_cfg_init_defaults(struct aq_nic_s *self)
51 {
52 	struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg;
53 
54 	cfg->aq_hw_caps = &self->aq_hw_caps;
55 
56 	cfg->vecs = AQ_CFG_VECS_DEF;
57 	cfg->tcs = AQ_CFG_TCS_DEF;
58 
59 	cfg->rxds = AQ_CFG_RXDS_DEF;
60 	cfg->txds = AQ_CFG_TXDS_DEF;
61 
62 	cfg->is_polling = AQ_CFG_IS_POLLING_DEF;
63 
64 	cfg->is_interrupt_moderation = AQ_CFG_IS_INTERRUPT_MODERATION_DEF;
65 	cfg->itr = cfg->is_interrupt_moderation ?
66 		AQ_CFG_INTERRUPT_MODERATION_RATE_DEF : 0U;
67 
68 	cfg->is_rss = AQ_CFG_IS_RSS_DEF;
69 	cfg->num_rss_queues = AQ_CFG_NUM_RSS_QUEUES_DEF;
70 	cfg->aq_rss.base_cpu_number = AQ_CFG_RSS_BASE_CPU_NUM_DEF;
71 	cfg->flow_control = AQ_CFG_FC_MODE;
72 
73 	cfg->mtu = AQ_CFG_MTU_DEF;
74 	cfg->link_speed_msk = AQ_CFG_SPEED_MSK;
75 	cfg->is_autoneg = AQ_CFG_IS_AUTONEG_DEF;
76 
77 	cfg->is_lro = AQ_CFG_IS_LRO_DEF;
78 
79 	cfg->vlan_id = 0U;
80 
81 	aq_nic_rss_init(self, cfg->num_rss_queues);
82 }
83 
84 /* Checks hw_caps and 'corrects' aq_nic_cfg in runtime */
85 int aq_nic_cfg_start(struct aq_nic_s *self)
86 {
87 	struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg;
88 
89 	/*descriptors */
90 	cfg->rxds = min(cfg->rxds, cfg->aq_hw_caps->rxds);
91 	cfg->txds = min(cfg->txds, cfg->aq_hw_caps->txds);
92 
93 	/*rss rings */
94 	cfg->vecs = min(cfg->vecs, cfg->aq_hw_caps->vecs);
95 	cfg->vecs = min(cfg->vecs, num_online_cpus());
96 	/* cfg->vecs should be power of 2 for RSS */
97 	if (cfg->vecs >= 8U)
98 		cfg->vecs = 8U;
99 	else if (cfg->vecs >= 4U)
100 		cfg->vecs = 4U;
101 	else if (cfg->vecs >= 2U)
102 		cfg->vecs = 2U;
103 	else
104 		cfg->vecs = 1U;
105 
106 	cfg->num_rss_queues = min(cfg->vecs, AQ_CFG_NUM_RSS_QUEUES_DEF);
107 
108 	cfg->irq_type = aq_pci_func_get_irq_type(self->aq_pci_func);
109 
110 	if ((cfg->irq_type == AQ_HW_IRQ_LEGACY) ||
111 	    (self->aq_hw_caps.vecs == 1U) ||
112 	    (cfg->vecs == 1U)) {
113 		cfg->is_rss = 0U;
114 		cfg->vecs = 1U;
115 	}
116 
117 	cfg->link_speed_msk &= self->aq_hw_caps.link_speed_msk;
118 	cfg->hw_features = self->aq_hw_caps.hw_features;
119 	return 0;
120 }
121 
122 static int aq_nic_update_link_status(struct aq_nic_s *self)
123 {
124 	int err = self->aq_hw_ops.hw_get_link_status(self->aq_hw);
125 
126 	if (err)
127 		return err;
128 
129 	if (self->link_status.mbps != self->aq_hw->aq_link_status.mbps)
130 		pr_info("%s: link change old %d new %d\n",
131 			AQ_CFG_DRV_NAME, self->link_status.mbps,
132 			self->aq_hw->aq_link_status.mbps);
133 
134 	self->link_status = self->aq_hw->aq_link_status;
135 	if (!netif_carrier_ok(self->ndev) && self->link_status.mbps) {
136 		aq_utils_obj_set(&self->header.flags,
137 				 AQ_NIC_FLAG_STARTED);
138 		aq_utils_obj_clear(&self->header.flags,
139 				   AQ_NIC_LINK_DOWN);
140 		netif_carrier_on(self->ndev);
141 		netif_tx_wake_all_queues(self->ndev);
142 	}
143 	if (netif_carrier_ok(self->ndev) && !self->link_status.mbps) {
144 		netif_carrier_off(self->ndev);
145 		netif_tx_disable(self->ndev);
146 		aq_utils_obj_set(&self->header.flags, AQ_NIC_LINK_DOWN);
147 	}
148 	return 0;
149 }
150 
151 static void aq_nic_service_timer_cb(unsigned long param)
152 {
153 	struct aq_nic_s *self = (struct aq_nic_s *)param;
154 	struct net_device *ndev = aq_nic_get_ndev(self);
155 	int err = 0;
156 	unsigned int i = 0U;
157 	struct aq_ring_stats_rx_s stats_rx;
158 	struct aq_ring_stats_tx_s stats_tx;
159 
160 	if (aq_utils_obj_test(&self->header.flags, AQ_NIC_FLAGS_IS_NOT_READY))
161 		goto err_exit;
162 
163 	err = aq_nic_update_link_status(self);
164 	if (err)
165 		goto err_exit;
166 
167 	self->aq_hw_ops.hw_interrupt_moderation_set(self->aq_hw,
168 		    self->aq_nic_cfg.is_interrupt_moderation);
169 
170 	memset(&stats_rx, 0U, sizeof(struct aq_ring_stats_rx_s));
171 	memset(&stats_tx, 0U, sizeof(struct aq_ring_stats_tx_s));
172 	for (i = AQ_DIMOF(self->aq_vec); i--;) {
173 		if (self->aq_vec[i])
174 			aq_vec_add_stats(self->aq_vec[i], &stats_rx, &stats_tx);
175 	}
176 
177 	ndev->stats.rx_packets = stats_rx.packets;
178 	ndev->stats.rx_bytes = stats_rx.bytes;
179 	ndev->stats.rx_errors = stats_rx.errors;
180 	ndev->stats.tx_packets = stats_tx.packets;
181 	ndev->stats.tx_bytes = stats_tx.bytes;
182 	ndev->stats.tx_errors = stats_tx.errors;
183 
184 err_exit:
185 	mod_timer(&self->service_timer,
186 		  jiffies + AQ_CFG_SERVICE_TIMER_INTERVAL);
187 }
188 
189 static void aq_nic_polling_timer_cb(unsigned long param)
190 {
191 	struct aq_nic_s *self = (struct aq_nic_s *)param;
192 	struct aq_vec_s *aq_vec = NULL;
193 	unsigned int i = 0U;
194 
195 	for (i = 0U, aq_vec = self->aq_vec[0];
196 		self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
197 		aq_vec_isr(i, (void *)aq_vec);
198 
199 	mod_timer(&self->polling_timer, jiffies +
200 		AQ_CFG_POLLING_TIMER_INTERVAL);
201 }
202 
203 static struct net_device *aq_nic_ndev_alloc(void)
204 {
205 	return alloc_etherdev_mq(sizeof(struct aq_nic_s), AQ_CFG_VECS_MAX);
206 }
207 
208 struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops,
209 				   const struct ethtool_ops *et_ops,
210 				   struct device *dev,
211 				   struct aq_pci_func_s *aq_pci_func,
212 				   unsigned int port,
213 				   const struct aq_hw_ops *aq_hw_ops)
214 {
215 	struct net_device *ndev = NULL;
216 	struct aq_nic_s *self = NULL;
217 	int err = 0;
218 
219 	ndev = aq_nic_ndev_alloc();
220 	if (!ndev) {
221 		err = -ENOMEM;
222 		goto err_exit;
223 	}
224 
225 	self = netdev_priv(ndev);
226 
227 	ndev->netdev_ops = ndev_ops;
228 	ndev->ethtool_ops = et_ops;
229 
230 	SET_NETDEV_DEV(ndev, dev);
231 
232 	ndev->if_port = port;
233 	self->ndev = ndev;
234 
235 	self->aq_pci_func = aq_pci_func;
236 
237 	self->aq_hw_ops = *aq_hw_ops;
238 	self->port = (u8)port;
239 
240 	self->aq_hw = self->aq_hw_ops.create(aq_pci_func, self->port,
241 						&self->aq_hw_ops);
242 	err = self->aq_hw_ops.get_hw_caps(self->aq_hw, &self->aq_hw_caps);
243 	if (err < 0)
244 		goto err_exit;
245 
246 	aq_nic_cfg_init_defaults(self);
247 
248 err_exit:
249 	if (err < 0) {
250 		aq_nic_free_hot_resources(self);
251 		self = NULL;
252 	}
253 	return self;
254 }
255 
256 int aq_nic_ndev_register(struct aq_nic_s *self)
257 {
258 	int err = 0;
259 
260 	if (!self->ndev) {
261 		err = -EINVAL;
262 		goto err_exit;
263 	}
264 	err = self->aq_hw_ops.hw_get_mac_permanent(self->aq_hw,
265 			    self->aq_nic_cfg.aq_hw_caps,
266 			    self->ndev->dev_addr);
267 	if (err < 0)
268 		goto err_exit;
269 
270 #if defined(AQ_CFG_MAC_ADDR_PERMANENT)
271 	{
272 		static u8 mac_addr_permanent[] = AQ_CFG_MAC_ADDR_PERMANENT;
273 
274 		ether_addr_copy(self->ndev->dev_addr, mac_addr_permanent);
275 	}
276 #endif
277 
278 	netif_carrier_off(self->ndev);
279 
280 	netif_tx_disable(self->ndev);
281 
282 	err = register_netdev(self->ndev);
283 	if (err < 0)
284 		goto err_exit;
285 
286 err_exit:
287 	return err;
288 }
289 
290 int aq_nic_ndev_init(struct aq_nic_s *self)
291 {
292 	struct aq_hw_caps_s *aq_hw_caps = self->aq_nic_cfg.aq_hw_caps;
293 	struct aq_nic_cfg_s *aq_nic_cfg = &self->aq_nic_cfg;
294 
295 	self->ndev->hw_features |= aq_hw_caps->hw_features;
296 	self->ndev->features = aq_hw_caps->hw_features;
297 	self->ndev->priv_flags = aq_hw_caps->hw_priv_flags;
298 	self->ndev->mtu = aq_nic_cfg->mtu - ETH_HLEN;
299 	self->ndev->max_mtu = self->aq_hw_caps.mtu - ETH_FCS_LEN - ETH_HLEN;
300 
301 	return 0;
302 }
303 
304 void aq_nic_ndev_free(struct aq_nic_s *self)
305 {
306 	if (!self->ndev)
307 		goto err_exit;
308 
309 	if (self->ndev->reg_state == NETREG_REGISTERED)
310 		unregister_netdev(self->ndev);
311 
312 	if (self->aq_hw)
313 		self->aq_hw_ops.destroy(self->aq_hw);
314 
315 	free_netdev(self->ndev);
316 
317 err_exit:;
318 }
319 
320 struct aq_nic_s *aq_nic_alloc_hot(struct net_device *ndev)
321 {
322 	struct aq_nic_s *self = NULL;
323 	int err = 0;
324 
325 	if (!ndev) {
326 		err = -EINVAL;
327 		goto err_exit;
328 	}
329 	self = netdev_priv(ndev);
330 
331 	if (!self) {
332 		err = -EINVAL;
333 		goto err_exit;
334 	}
335 	if (netif_running(ndev))
336 		netif_tx_disable(ndev);
337 
338 	for (self->aq_vecs = 0; self->aq_vecs < self->aq_nic_cfg.vecs;
339 		self->aq_vecs++) {
340 		self->aq_vec[self->aq_vecs] =
341 		    aq_vec_alloc(self, self->aq_vecs, &self->aq_nic_cfg);
342 		if (!self->aq_vec[self->aq_vecs]) {
343 			err = -ENOMEM;
344 			goto err_exit;
345 		}
346 	}
347 
348 err_exit:
349 	if (err < 0) {
350 		aq_nic_free_hot_resources(self);
351 		self = NULL;
352 	}
353 	return self;
354 }
355 
356 void aq_nic_set_tx_ring(struct aq_nic_s *self, unsigned int idx,
357 			struct aq_ring_s *ring)
358 {
359 	self->aq_ring_tx[idx] = ring;
360 }
361 
362 struct device *aq_nic_get_dev(struct aq_nic_s *self)
363 {
364 	return self->ndev->dev.parent;
365 }
366 
367 struct net_device *aq_nic_get_ndev(struct aq_nic_s *self)
368 {
369 	return self->ndev;
370 }
371 
372 int aq_nic_init(struct aq_nic_s *self)
373 {
374 	struct aq_vec_s *aq_vec = NULL;
375 	int err = 0;
376 	unsigned int i = 0U;
377 
378 	self->power_state = AQ_HW_POWER_STATE_D0;
379 	err = self->aq_hw_ops.hw_reset(self->aq_hw);
380 	if (err < 0)
381 		goto err_exit;
382 
383 	err = self->aq_hw_ops.hw_init(self->aq_hw, &self->aq_nic_cfg,
384 			    aq_nic_get_ndev(self)->dev_addr);
385 	if (err < 0)
386 		goto err_exit;
387 
388 	for (i = 0U, aq_vec = self->aq_vec[0];
389 		self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
390 		aq_vec_init(aq_vec, &self->aq_hw_ops, self->aq_hw);
391 
392 err_exit:
393 	return err;
394 }
395 
396 int aq_nic_start(struct aq_nic_s *self)
397 {
398 	struct aq_vec_s *aq_vec = NULL;
399 	int err = 0;
400 	unsigned int i = 0U;
401 
402 	err = self->aq_hw_ops.hw_multicast_list_set(self->aq_hw,
403 						    self->mc_list.ar,
404 						    self->mc_list.count);
405 	if (err < 0)
406 		goto err_exit;
407 
408 	err = self->aq_hw_ops.hw_packet_filter_set(self->aq_hw,
409 						   self->packet_filter);
410 	if (err < 0)
411 		goto err_exit;
412 
413 	for (i = 0U, aq_vec = self->aq_vec[0];
414 		self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
415 		err = aq_vec_start(aq_vec);
416 		if (err < 0)
417 			goto err_exit;
418 	}
419 
420 	err = self->aq_hw_ops.hw_start(self->aq_hw);
421 	if (err < 0)
422 		goto err_exit;
423 
424 	err = self->aq_hw_ops.hw_interrupt_moderation_set(self->aq_hw,
425 			    self->aq_nic_cfg.is_interrupt_moderation);
426 	if (err < 0)
427 		goto err_exit;
428 	setup_timer(&self->service_timer, &aq_nic_service_timer_cb,
429 		    (unsigned long)self);
430 	mod_timer(&self->service_timer, jiffies +
431 			AQ_CFG_SERVICE_TIMER_INTERVAL);
432 
433 	if (self->aq_nic_cfg.is_polling) {
434 		setup_timer(&self->polling_timer, &aq_nic_polling_timer_cb,
435 			    (unsigned long)self);
436 		mod_timer(&self->polling_timer, jiffies +
437 			  AQ_CFG_POLLING_TIMER_INTERVAL);
438 	} else {
439 		for (i = 0U, aq_vec = self->aq_vec[0];
440 			self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
441 			err = aq_pci_func_alloc_irq(self->aq_pci_func, i,
442 						    self->ndev->name, aq_vec,
443 					aq_vec_get_affinity_mask(aq_vec));
444 			if (err < 0)
445 				goto err_exit;
446 		}
447 
448 		err = self->aq_hw_ops.hw_irq_enable(self->aq_hw,
449 				    AQ_CFG_IRQ_MASK);
450 		if (err < 0)
451 			goto err_exit;
452 	}
453 
454 	err = netif_set_real_num_tx_queues(self->ndev, self->aq_vecs);
455 	if (err < 0)
456 		goto err_exit;
457 
458 	err = netif_set_real_num_rx_queues(self->ndev, self->aq_vecs);
459 	if (err < 0)
460 		goto err_exit;
461 
462 	netif_tx_start_all_queues(self->ndev);
463 
464 err_exit:
465 	return err;
466 }
467 
468 static unsigned int aq_nic_map_skb(struct aq_nic_s *self,
469 				   struct sk_buff *skb,
470 				   struct aq_ring_s *ring)
471 {
472 	unsigned int ret = 0U;
473 	unsigned int nr_frags = skb_shinfo(skb)->nr_frags;
474 	unsigned int frag_count = 0U;
475 	unsigned int dx = ring->sw_tail;
476 	struct aq_ring_buff_s *first = NULL;
477 	struct aq_ring_buff_s *dx_buff = &ring->buff_ring[dx];
478 
479 	if (unlikely(skb_is_gso(skb))) {
480 		dx_buff->flags = 0U;
481 		dx_buff->len_pkt = skb->len;
482 		dx_buff->len_l2 = ETH_HLEN;
483 		dx_buff->len_l3 = ip_hdrlen(skb);
484 		dx_buff->len_l4 = tcp_hdrlen(skb);
485 		dx_buff->mss = skb_shinfo(skb)->gso_size;
486 		dx_buff->is_txc = 1U;
487 		dx_buff->eop_index = 0xffffU;
488 
489 		dx_buff->is_ipv6 =
490 			(ip_hdr(skb)->version == 6) ? 1U : 0U;
491 
492 		dx = aq_ring_next_dx(ring, dx);
493 		dx_buff = &ring->buff_ring[dx];
494 		++ret;
495 	}
496 
497 	dx_buff->flags = 0U;
498 	dx_buff->len = skb_headlen(skb);
499 	dx_buff->pa = dma_map_single(aq_nic_get_dev(self),
500 				     skb->data,
501 				     dx_buff->len,
502 				     DMA_TO_DEVICE);
503 
504 	if (unlikely(dma_mapping_error(aq_nic_get_dev(self), dx_buff->pa)))
505 		goto exit;
506 
507 	first = dx_buff;
508 	dx_buff->len_pkt = skb->len;
509 	dx_buff->is_sop = 1U;
510 	dx_buff->is_mapped = 1U;
511 	++ret;
512 
513 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
514 		dx_buff->is_ip_cso = (htons(ETH_P_IP) == skb->protocol) ?
515 			1U : 0U;
516 
517 		if (ip_hdr(skb)->version == 4) {
518 			dx_buff->is_tcp_cso =
519 				(ip_hdr(skb)->protocol == IPPROTO_TCP) ?
520 					1U : 0U;
521 			dx_buff->is_udp_cso =
522 				(ip_hdr(skb)->protocol == IPPROTO_UDP) ?
523 					1U : 0U;
524 		} else if (ip_hdr(skb)->version == 6) {
525 			dx_buff->is_tcp_cso =
526 				(ipv6_hdr(skb)->nexthdr == NEXTHDR_TCP) ?
527 					1U : 0U;
528 			dx_buff->is_udp_cso =
529 				(ipv6_hdr(skb)->nexthdr == NEXTHDR_UDP) ?
530 					1U : 0U;
531 		}
532 	}
533 
534 	for (; nr_frags--; ++frag_count) {
535 		unsigned int frag_len = 0U;
536 		unsigned int buff_offset = 0U;
537 		unsigned int buff_size = 0U;
538 		dma_addr_t frag_pa;
539 		skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_count];
540 
541 		frag_len = skb_frag_size(frag);
542 
543 		while (frag_len) {
544 			if (frag_len > AQ_CFG_TX_FRAME_MAX)
545 				buff_size = AQ_CFG_TX_FRAME_MAX;
546 			else
547 				buff_size = frag_len;
548 
549 			frag_pa = skb_frag_dma_map(aq_nic_get_dev(self),
550 						   frag,
551 						   buff_offset,
552 						   buff_size,
553 						   DMA_TO_DEVICE);
554 
555 			if (unlikely(dma_mapping_error(aq_nic_get_dev(self),
556 						       frag_pa)))
557 				goto mapping_error;
558 
559 			dx = aq_ring_next_dx(ring, dx);
560 			dx_buff = &ring->buff_ring[dx];
561 
562 			dx_buff->flags = 0U;
563 			dx_buff->len = buff_size;
564 			dx_buff->pa = frag_pa;
565 			dx_buff->is_mapped = 1U;
566 			dx_buff->eop_index = 0xffffU;
567 
568 			frag_len -= buff_size;
569 			buff_offset += buff_size;
570 
571 			++ret;
572 		}
573 	}
574 
575 	first->eop_index = dx;
576 	dx_buff->is_eop = 1U;
577 	dx_buff->skb = skb;
578 	goto exit;
579 
580 mapping_error:
581 	for (dx = ring->sw_tail;
582 	     ret > 0;
583 	     --ret, dx = aq_ring_next_dx(ring, dx)) {
584 		dx_buff = &ring->buff_ring[dx];
585 
586 		if (!dx_buff->is_txc && dx_buff->pa) {
587 			if (unlikely(dx_buff->is_sop)) {
588 				dma_unmap_single(aq_nic_get_dev(self),
589 						 dx_buff->pa,
590 						 dx_buff->len,
591 						 DMA_TO_DEVICE);
592 			} else {
593 				dma_unmap_page(aq_nic_get_dev(self),
594 					       dx_buff->pa,
595 					       dx_buff->len,
596 					       DMA_TO_DEVICE);
597 			}
598 		}
599 	}
600 
601 exit:
602 	return ret;
603 }
604 
605 int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb)
606 {
607 	struct aq_ring_s *ring = NULL;
608 	unsigned int frags = 0U;
609 	unsigned int vec = skb->queue_mapping % self->aq_nic_cfg.vecs;
610 	unsigned int tc = 0U;
611 	int err = NETDEV_TX_OK;
612 
613 	frags = skb_shinfo(skb)->nr_frags + 1;
614 
615 	ring = self->aq_ring_tx[AQ_NIC_TCVEC2RING(self, tc, vec)];
616 
617 	if (frags > AQ_CFG_SKB_FRAGS_MAX) {
618 		dev_kfree_skb_any(skb);
619 		goto err_exit;
620 	}
621 
622 	aq_ring_update_queue_state(ring);
623 
624 	/* Above status update may stop the queue. Check this. */
625 	if (__netif_subqueue_stopped(self->ndev, ring->idx)) {
626 		err = NETDEV_TX_BUSY;
627 		goto err_exit;
628 	}
629 
630 	frags = aq_nic_map_skb(self, skb, ring);
631 
632 	if (likely(frags)) {
633 		err = self->aq_hw_ops.hw_ring_tx_xmit(self->aq_hw,
634 						      ring,
635 						      frags);
636 		if (err >= 0) {
637 			++ring->stats.tx.packets;
638 			ring->stats.tx.bytes += skb->len;
639 		}
640 	} else {
641 		err = NETDEV_TX_BUSY;
642 	}
643 
644 err_exit:
645 	return err;
646 }
647 
648 int aq_nic_set_packet_filter(struct aq_nic_s *self, unsigned int flags)
649 {
650 	int err = 0;
651 
652 	err = self->aq_hw_ops.hw_packet_filter_set(self->aq_hw, flags);
653 	if (err < 0)
654 		goto err_exit;
655 
656 	self->packet_filter = flags;
657 
658 err_exit:
659 	return err;
660 }
661 
662 int aq_nic_set_multicast_list(struct aq_nic_s *self, struct net_device *ndev)
663 {
664 	struct netdev_hw_addr *ha = NULL;
665 	unsigned int i = 0U;
666 
667 	self->mc_list.count = 0U;
668 
669 	netdev_for_each_mc_addr(ha, ndev) {
670 		ether_addr_copy(self->mc_list.ar[i++], ha->addr);
671 		++self->mc_list.count;
672 
673 		if (i >= AQ_CFG_MULTICAST_ADDRESS_MAX)
674 			break;
675 	}
676 
677 	if (i >= AQ_CFG_MULTICAST_ADDRESS_MAX) {
678 		/* Number of filters is too big: atlantic does not support this.
679 		 * Force all multi filter to support this.
680 		 * With this we disable all UC filters and setup "all pass"
681 		 * multicast mask
682 		 */
683 		self->packet_filter |= IFF_ALLMULTI;
684 		self->aq_hw->aq_nic_cfg->mc_list_count = 0;
685 		return self->aq_hw_ops.hw_packet_filter_set(self->aq_hw,
686 							self->packet_filter);
687 	} else {
688 		return self->aq_hw_ops.hw_multicast_list_set(self->aq_hw,
689 						    self->mc_list.ar,
690 						    self->mc_list.count);
691 	}
692 }
693 
694 int aq_nic_set_mtu(struct aq_nic_s *self, int new_mtu)
695 {
696 	self->aq_nic_cfg.mtu = new_mtu;
697 
698 	return 0;
699 }
700 
701 int aq_nic_set_mac(struct aq_nic_s *self, struct net_device *ndev)
702 {
703 	return self->aq_hw_ops.hw_set_mac_address(self->aq_hw, ndev->dev_addr);
704 }
705 
706 unsigned int aq_nic_get_link_speed(struct aq_nic_s *self)
707 {
708 	return self->link_status.mbps;
709 }
710 
711 int aq_nic_get_regs(struct aq_nic_s *self, struct ethtool_regs *regs, void *p)
712 {
713 	u32 *regs_buff = p;
714 	int err = 0;
715 
716 	regs->version = 1;
717 
718 	err = self->aq_hw_ops.hw_get_regs(self->aq_hw,
719 					  &self->aq_hw_caps, regs_buff);
720 	if (err < 0)
721 		goto err_exit;
722 
723 err_exit:
724 	return err;
725 }
726 
727 int aq_nic_get_regs_count(struct aq_nic_s *self)
728 {
729 	return self->aq_hw_caps.mac_regs_count;
730 }
731 
732 void aq_nic_get_stats(struct aq_nic_s *self, u64 *data)
733 {
734 	struct aq_vec_s *aq_vec = NULL;
735 	unsigned int i = 0U;
736 	unsigned int count = 0U;
737 	int err = 0;
738 
739 	err = self->aq_hw_ops.hw_get_hw_stats(self->aq_hw, data, &count);
740 	if (err < 0)
741 		goto err_exit;
742 
743 	data += count;
744 	count = 0U;
745 
746 	for (i = 0U, aq_vec = self->aq_vec[0];
747 		aq_vec && self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
748 		data += count;
749 		aq_vec_get_sw_stats(aq_vec, data, &count);
750 	}
751 
752 err_exit:;
753 	(void)err;
754 }
755 
756 void aq_nic_get_link_ksettings(struct aq_nic_s *self,
757 			       struct ethtool_link_ksettings *cmd)
758 {
759 	cmd->base.port = PORT_TP;
760 	/* This driver supports only 10G capable adapters, so DUPLEX_FULL */
761 	cmd->base.duplex = DUPLEX_FULL;
762 	cmd->base.autoneg = self->aq_nic_cfg.is_autoneg;
763 
764 	ethtool_link_ksettings_zero_link_mode(cmd, supported);
765 
766 	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_10G)
767 		ethtool_link_ksettings_add_link_mode(cmd, supported,
768 						     10000baseT_Full);
769 
770 	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_5G)
771 		ethtool_link_ksettings_add_link_mode(cmd, supported,
772 						     5000baseT_Full);
773 
774 	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_2GS)
775 		ethtool_link_ksettings_add_link_mode(cmd, supported,
776 						     2500baseT_Full);
777 
778 	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_1G)
779 		ethtool_link_ksettings_add_link_mode(cmd, supported,
780 						     1000baseT_Full);
781 
782 	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_100M)
783 		ethtool_link_ksettings_add_link_mode(cmd, supported,
784 						     100baseT_Full);
785 
786 	if (self->aq_hw_caps.flow_control)
787 		ethtool_link_ksettings_add_link_mode(cmd, supported,
788 						     Pause);
789 
790 	ethtool_link_ksettings_add_link_mode(cmd, supported, Autoneg);
791 	ethtool_link_ksettings_add_link_mode(cmd, supported, TP);
792 
793 	ethtool_link_ksettings_zero_link_mode(cmd, advertising);
794 
795 	if (self->aq_nic_cfg.is_autoneg)
796 		ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);
797 
798 	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_10G)
799 		ethtool_link_ksettings_add_link_mode(cmd, advertising,
800 						     10000baseT_Full);
801 
802 	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_5G)
803 		ethtool_link_ksettings_add_link_mode(cmd, advertising,
804 						     5000baseT_Full);
805 
806 	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_2GS)
807 		ethtool_link_ksettings_add_link_mode(cmd, advertising,
808 						     2500baseT_Full);
809 
810 	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_1G)
811 		ethtool_link_ksettings_add_link_mode(cmd, advertising,
812 						     1000baseT_Full);
813 
814 	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_100M)
815 		ethtool_link_ksettings_add_link_mode(cmd, advertising,
816 						     100baseT_Full);
817 
818 	if (self->aq_nic_cfg.flow_control)
819 		ethtool_link_ksettings_add_link_mode(cmd, advertising,
820 						     Pause);
821 
822 	ethtool_link_ksettings_add_link_mode(cmd, advertising, TP);
823 }
824 
825 int aq_nic_set_link_ksettings(struct aq_nic_s *self,
826 			      const struct ethtool_link_ksettings *cmd)
827 {
828 	u32 speed = 0U;
829 	u32 rate = 0U;
830 	int err = 0;
831 
832 	if (cmd->base.autoneg == AUTONEG_ENABLE) {
833 		rate = self->aq_hw_caps.link_speed_msk;
834 		self->aq_nic_cfg.is_autoneg = true;
835 	} else {
836 		speed = cmd->base.speed;
837 
838 		switch (speed) {
839 		case SPEED_100:
840 			rate = AQ_NIC_RATE_100M;
841 			break;
842 
843 		case SPEED_1000:
844 			rate = AQ_NIC_RATE_1G;
845 			break;
846 
847 		case SPEED_2500:
848 			rate = AQ_NIC_RATE_2GS;
849 			break;
850 
851 		case SPEED_5000:
852 			rate = AQ_NIC_RATE_5G;
853 			break;
854 
855 		case SPEED_10000:
856 			rate = AQ_NIC_RATE_10G;
857 			break;
858 
859 		default:
860 			err = -1;
861 			goto err_exit;
862 		break;
863 		}
864 		if (!(self->aq_hw_caps.link_speed_msk & rate)) {
865 			err = -1;
866 			goto err_exit;
867 		}
868 
869 		self->aq_nic_cfg.is_autoneg = false;
870 	}
871 
872 	err = self->aq_hw_ops.hw_set_link_speed(self->aq_hw, rate);
873 	if (err < 0)
874 		goto err_exit;
875 
876 	self->aq_nic_cfg.link_speed_msk = rate;
877 
878 err_exit:
879 	return err;
880 }
881 
882 struct aq_nic_cfg_s *aq_nic_get_cfg(struct aq_nic_s *self)
883 {
884 	return &self->aq_nic_cfg;
885 }
886 
887 u32 aq_nic_get_fw_version(struct aq_nic_s *self)
888 {
889 	u32 fw_version = 0U;
890 
891 	self->aq_hw_ops.hw_get_fw_version(self->aq_hw, &fw_version);
892 
893 	return fw_version;
894 }
895 
896 int aq_nic_stop(struct aq_nic_s *self)
897 {
898 	struct aq_vec_s *aq_vec = NULL;
899 	unsigned int i = 0U;
900 
901 	netif_tx_disable(self->ndev);
902 
903 	del_timer_sync(&self->service_timer);
904 
905 	self->aq_hw_ops.hw_irq_disable(self->aq_hw, AQ_CFG_IRQ_MASK);
906 
907 	if (self->aq_nic_cfg.is_polling)
908 		del_timer_sync(&self->polling_timer);
909 	else
910 		aq_pci_func_free_irqs(self->aq_pci_func);
911 
912 	for (i = 0U, aq_vec = self->aq_vec[0];
913 		self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
914 		aq_vec_stop(aq_vec);
915 
916 	return self->aq_hw_ops.hw_stop(self->aq_hw);
917 }
918 
919 void aq_nic_deinit(struct aq_nic_s *self)
920 {
921 	struct aq_vec_s *aq_vec = NULL;
922 	unsigned int i = 0U;
923 
924 	if (!self)
925 		goto err_exit;
926 
927 	for (i = 0U, aq_vec = self->aq_vec[0];
928 		self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
929 		aq_vec_deinit(aq_vec);
930 
931 	if (self->power_state == AQ_HW_POWER_STATE_D0) {
932 		(void)self->aq_hw_ops.hw_deinit(self->aq_hw);
933 	} else {
934 		(void)self->aq_hw_ops.hw_set_power(self->aq_hw,
935 						   self->power_state);
936 	}
937 
938 err_exit:;
939 }
940 
941 void aq_nic_free_hot_resources(struct aq_nic_s *self)
942 {
943 	unsigned int i = 0U;
944 
945 	if (!self)
946 		goto err_exit;
947 
948 	for (i = AQ_DIMOF(self->aq_vec); i--;) {
949 		if (self->aq_vec[i]) {
950 			aq_vec_free(self->aq_vec[i]);
951 			self->aq_vec[i] = NULL;
952 		}
953 	}
954 
955 err_exit:;
956 }
957 
958 int aq_nic_change_pm_state(struct aq_nic_s *self, pm_message_t *pm_msg)
959 {
960 	int err = 0;
961 
962 	if (!netif_running(self->ndev)) {
963 		err = 0;
964 		goto out;
965 	}
966 	rtnl_lock();
967 	if (pm_msg->event & PM_EVENT_SLEEP || pm_msg->event & PM_EVENT_FREEZE) {
968 		self->power_state = AQ_HW_POWER_STATE_D3;
969 		netif_device_detach(self->ndev);
970 		netif_tx_stop_all_queues(self->ndev);
971 
972 		err = aq_nic_stop(self);
973 		if (err < 0)
974 			goto err_exit;
975 
976 		aq_nic_deinit(self);
977 	} else {
978 		err = aq_nic_init(self);
979 		if (err < 0)
980 			goto err_exit;
981 
982 		err = aq_nic_start(self);
983 		if (err < 0)
984 			goto err_exit;
985 
986 		netif_device_attach(self->ndev);
987 		netif_tx_start_all_queues(self->ndev);
988 	}
989 
990 err_exit:
991 	rtnl_unlock();
992 out:
993 	return err;
994 }
995