Lines Matching +full:asym +full:- +full:pause
1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved
41 struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg; in aq_nic_rss_init()
42 struct aq_rss_parameters *rss_params = &cfg->aq_rss; in aq_nic_rss_init()
53 rss_params->hash_secret_key_size = sizeof(rss_key); in aq_nic_rss_init()
54 memcpy(rss_params->hash_secret_key, rss_key, sizeof(rss_key)); in aq_nic_rss_init()
55 rss_params->indirection_table_size = AQ_CFG_RSS_INDIRECTION_TABLE_MAX; in aq_nic_rss_init()
57 for (i = rss_params->indirection_table_size; i--;) in aq_nic_rss_init()
58 rss_params->indirection_table[i] = i & (num_rss_queues - 1); in aq_nic_rss_init()
64 struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg; in aq_nic_cfg_start()
66 cfg->tcs = AQ_CFG_TCS_DEF; in aq_nic_cfg_start()
68 cfg->is_polling = AQ_CFG_IS_POLLING_DEF; in aq_nic_cfg_start()
70 cfg->itr = aq_itr; in aq_nic_cfg_start()
71 cfg->tx_itr = aq_itr_tx; in aq_nic_cfg_start()
72 cfg->rx_itr = aq_itr_rx; in aq_nic_cfg_start()
74 cfg->rxpageorder = AQ_CFG_RX_PAGEORDER; in aq_nic_cfg_start()
75 cfg->is_rss = AQ_CFG_IS_RSS_DEF; in aq_nic_cfg_start()
76 cfg->num_rss_queues = AQ_CFG_NUM_RSS_QUEUES_DEF; in aq_nic_cfg_start()
77 cfg->aq_rss.base_cpu_number = AQ_CFG_RSS_BASE_CPU_NUM_DEF; in aq_nic_cfg_start()
78 cfg->flow_control = AQ_CFG_FC_MODE; in aq_nic_cfg_start()
80 cfg->mtu = AQ_CFG_MTU_DEF; in aq_nic_cfg_start()
81 cfg->link_speed_msk = AQ_CFG_SPEED_MSK; in aq_nic_cfg_start()
82 cfg->is_autoneg = AQ_CFG_IS_AUTONEG_DEF; in aq_nic_cfg_start()
84 cfg->is_lro = AQ_CFG_IS_LRO_DEF; in aq_nic_cfg_start()
87 cfg->rxds = min(cfg->aq_hw_caps->rxds_max, AQ_CFG_RXDS_DEF); in aq_nic_cfg_start()
88 cfg->txds = min(cfg->aq_hw_caps->txds_max, AQ_CFG_TXDS_DEF); in aq_nic_cfg_start()
91 cfg->vecs = min(cfg->aq_hw_caps->vecs, AQ_CFG_VECS_DEF); in aq_nic_cfg_start()
92 cfg->vecs = min(cfg->vecs, num_online_cpus()); in aq_nic_cfg_start()
93 if (self->irqvecs > AQ_HW_SERVICE_IRQS) in aq_nic_cfg_start()
94 cfg->vecs = min(cfg->vecs, self->irqvecs - AQ_HW_SERVICE_IRQS); in aq_nic_cfg_start()
95 /* cfg->vecs should be power of 2 for RSS */ in aq_nic_cfg_start()
96 if (cfg->vecs >= 8U) in aq_nic_cfg_start()
97 cfg->vecs = 8U; in aq_nic_cfg_start()
98 else if (cfg->vecs >= 4U) in aq_nic_cfg_start()
99 cfg->vecs = 4U; in aq_nic_cfg_start()
100 else if (cfg->vecs >= 2U) in aq_nic_cfg_start()
101 cfg->vecs = 2U; in aq_nic_cfg_start()
103 cfg->vecs = 1U; in aq_nic_cfg_start()
105 cfg->num_rss_queues = min(cfg->vecs, AQ_CFG_NUM_RSS_QUEUES_DEF); in aq_nic_cfg_start()
107 aq_nic_rss_init(self, cfg->num_rss_queues); in aq_nic_cfg_start()
109 cfg->irq_type = aq_pci_func_get_irq_type(self); in aq_nic_cfg_start()
111 if ((cfg->irq_type == AQ_HW_IRQ_LEGACY) || in aq_nic_cfg_start()
112 (cfg->aq_hw_caps->vecs == 1U) || in aq_nic_cfg_start()
113 (cfg->vecs == 1U)) { in aq_nic_cfg_start()
114 cfg->is_rss = 0U; in aq_nic_cfg_start()
115 cfg->vecs = 1U; in aq_nic_cfg_start()
119 * link status IRQ. If no - we'll know link state from in aq_nic_cfg_start()
122 if (AQ_HW_SERVICE_IRQS > 0 && cfg->vecs + 1 <= self->irqvecs) in aq_nic_cfg_start()
123 cfg->link_irq_vec = cfg->vecs; in aq_nic_cfg_start()
125 cfg->link_irq_vec = 0; in aq_nic_cfg_start()
127 cfg->link_speed_msk &= cfg->aq_hw_caps->link_speed_msk; in aq_nic_cfg_start()
128 cfg->features = cfg->aq_hw_caps->hw_features; in aq_nic_cfg_start()
129 cfg->is_vlan_rx_strip = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_RX); in aq_nic_cfg_start()
130 cfg->is_vlan_tx_insert = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_TX); in aq_nic_cfg_start()
131 cfg->is_vlan_force_promisc = true; in aq_nic_cfg_start()
136 int err = self->aq_fw_ops->update_link_status(self->aq_hw); in aq_nic_update_link_status()
142 if (self->link_status.mbps != self->aq_hw->aq_link_status.mbps) { in aq_nic_update_link_status()
144 AQ_CFG_DRV_NAME, self->link_status.mbps, in aq_nic_update_link_status()
145 self->aq_hw->aq_link_status.mbps); in aq_nic_update_link_status()
152 if (self->aq_fw_ops->get_flow_control) in aq_nic_update_link_status()
153 self->aq_fw_ops->get_flow_control(self->aq_hw, &fc); in aq_nic_update_link_status()
154 if (self->aq_hw_ops->hw_set_fc) in aq_nic_update_link_status()
155 self->aq_hw_ops->hw_set_fc(self->aq_hw, fc, 0); in aq_nic_update_link_status()
158 self->link_status = self->aq_hw->aq_link_status; in aq_nic_update_link_status()
159 if (!netif_carrier_ok(self->ndev) && self->link_status.mbps) { in aq_nic_update_link_status()
160 aq_utils_obj_set(&self->flags, in aq_nic_update_link_status()
162 aq_utils_obj_clear(&self->flags, in aq_nic_update_link_status()
164 netif_carrier_on(self->ndev); in aq_nic_update_link_status()
165 netif_tx_wake_all_queues(self->ndev); in aq_nic_update_link_status()
167 if (netif_carrier_ok(self->ndev) && !self->link_status.mbps) { in aq_nic_update_link_status()
168 netif_carrier_off(self->ndev); in aq_nic_update_link_status()
169 netif_tx_disable(self->ndev); in aq_nic_update_link_status()
170 aq_utils_obj_set(&self->flags, AQ_NIC_LINK_DOWN); in aq_nic_update_link_status()
184 self->aq_hw_ops->hw_irq_enable(self->aq_hw, in aq_linkstate_threaded_isr()
185 BIT(self->aq_nic_cfg.link_irq_vec)); in aq_linkstate_threaded_isr()
195 if (aq_utils_obj_test(&self->flags, AQ_NIC_FLAGS_IS_NOT_READY)) in aq_nic_service_task()
202 mutex_lock(&self->fwreq_mutex); in aq_nic_service_task()
203 if (self->aq_fw_ops->update_stats) in aq_nic_service_task()
204 self->aq_fw_ops->update_stats(self->aq_hw); in aq_nic_service_task()
205 mutex_unlock(&self->fwreq_mutex); in aq_nic_service_task()
214 mod_timer(&self->service_timer, jiffies + AQ_CFG_SERVICE_TIMER_INTERVAL); in aq_nic_service_timer_cb()
216 aq_ndev_schedule_work(&self->service_task); in aq_nic_service_timer_cb()
225 for (i = 0U, aq_vec = self->aq_vec[0]; in aq_nic_polling_timer_cb()
226 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) in aq_nic_polling_timer_cb()
229 mod_timer(&self->polling_timer, jiffies + in aq_nic_polling_timer_cb()
237 if (!self->ndev) { in aq_nic_ndev_register()
238 err = -EINVAL; in aq_nic_ndev_register()
242 err = hw_atl_utils_initfw(self->aq_hw, &self->aq_fw_ops); in aq_nic_ndev_register()
246 mutex_lock(&self->fwreq_mutex); in aq_nic_ndev_register()
247 err = self->aq_fw_ops->get_mac_permanent(self->aq_hw, in aq_nic_ndev_register()
248 self->ndev->dev_addr); in aq_nic_ndev_register()
249 mutex_unlock(&self->fwreq_mutex); in aq_nic_ndev_register()
257 ether_addr_copy(self->ndev->dev_addr, mac_addr_permanent); in aq_nic_ndev_register()
261 for (self->aq_vecs = 0; self->aq_vecs < aq_nic_get_cfg(self)->vecs; in aq_nic_ndev_register()
262 self->aq_vecs++) { in aq_nic_ndev_register()
263 self->aq_vec[self->aq_vecs] = in aq_nic_ndev_register()
264 aq_vec_alloc(self, self->aq_vecs, aq_nic_get_cfg(self)); in aq_nic_ndev_register()
265 if (!self->aq_vec[self->aq_vecs]) { in aq_nic_ndev_register()
266 err = -ENOMEM; in aq_nic_ndev_register()
271 netif_carrier_off(self->ndev); in aq_nic_ndev_register()
273 netif_tx_disable(self->ndev); in aq_nic_ndev_register()
275 err = register_netdev(self->ndev); in aq_nic_ndev_register()
285 const struct aq_hw_caps_s *aq_hw_caps = self->aq_nic_cfg.aq_hw_caps; in aq_nic_ndev_init()
286 struct aq_nic_cfg_s *aq_nic_cfg = &self->aq_nic_cfg; in aq_nic_ndev_init()
288 self->ndev->hw_features |= aq_hw_caps->hw_features; in aq_nic_ndev_init()
289 self->ndev->features = aq_hw_caps->hw_features; in aq_nic_ndev_init()
290 self->ndev->vlan_features |= NETIF_F_HW_CSUM | NETIF_F_RXCSUM | in aq_nic_ndev_init()
293 self->ndev->priv_flags = aq_hw_caps->hw_priv_flags; in aq_nic_ndev_init()
294 self->ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE; in aq_nic_ndev_init()
296 self->ndev->mtu = aq_nic_cfg->mtu - ETH_HLEN; in aq_nic_ndev_init()
297 self->ndev->max_mtu = aq_hw_caps->mtu - ETH_FCS_LEN - ETH_HLEN; in aq_nic_ndev_init()
304 self->aq_ring_tx[idx] = ring; in aq_nic_set_tx_ring()
309 return self->ndev; in aq_nic_get_ndev()
318 self->power_state = AQ_HW_POWER_STATE_D0; in aq_nic_init()
319 mutex_lock(&self->fwreq_mutex); in aq_nic_init()
320 err = self->aq_hw_ops->hw_reset(self->aq_hw); in aq_nic_init()
321 mutex_unlock(&self->fwreq_mutex); in aq_nic_init()
325 err = self->aq_hw_ops->hw_init(self->aq_hw, in aq_nic_init()
326 aq_nic_get_ndev(self)->dev_addr); in aq_nic_init()
330 for (i = 0U, aq_vec = self->aq_vec[0]; in aq_nic_init()
331 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) in aq_nic_init()
332 aq_vec_init(aq_vec, self->aq_hw_ops, self->aq_hw); in aq_nic_init()
334 netif_carrier_off(self->ndev); in aq_nic_init()
346 err = self->aq_hw_ops->hw_multicast_list_set(self->aq_hw, in aq_nic_start()
347 self->mc_list.ar, in aq_nic_start()
348 self->mc_list.count); in aq_nic_start()
352 err = self->aq_hw_ops->hw_packet_filter_set(self->aq_hw, in aq_nic_start()
353 self->packet_filter); in aq_nic_start()
357 for (i = 0U, aq_vec = self->aq_vec[0]; in aq_nic_start()
358 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) { in aq_nic_start()
364 err = self->aq_hw_ops->hw_start(self->aq_hw); in aq_nic_start()
372 INIT_WORK(&self->service_task, aq_nic_service_task); in aq_nic_start()
374 timer_setup(&self->service_timer, aq_nic_service_timer_cb, 0); in aq_nic_start()
375 aq_nic_service_timer_cb(&self->service_timer); in aq_nic_start()
377 if (self->aq_nic_cfg.is_polling) { in aq_nic_start()
378 timer_setup(&self->polling_timer, aq_nic_polling_timer_cb, 0); in aq_nic_start()
379 mod_timer(&self->polling_timer, jiffies + in aq_nic_start()
382 for (i = 0U, aq_vec = self->aq_vec[0]; in aq_nic_start()
383 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) { in aq_nic_start()
384 err = aq_pci_func_alloc_irq(self, i, self->ndev->name, in aq_nic_start()
391 if (self->aq_nic_cfg.link_irq_vec) { in aq_nic_start()
392 int irqvec = pci_irq_vector(self->pdev, in aq_nic_start()
393 self->aq_nic_cfg.link_irq_vec); in aq_nic_start()
397 self->ndev->name, self); in aq_nic_start()
400 self->msix_entry_mask |= (1 << self->aq_nic_cfg.link_irq_vec); in aq_nic_start()
403 err = self->aq_hw_ops->hw_irq_enable(self->aq_hw, in aq_nic_start()
409 err = netif_set_real_num_tx_queues(self->ndev, self->aq_vecs); in aq_nic_start()
413 err = netif_set_real_num_rx_queues(self->ndev, self->aq_vecs); in aq_nic_start()
417 netif_tx_start_all_queues(self->ndev); in aq_nic_start()
428 unsigned int nr_frags = skb_shinfo(skb)->nr_frags; in aq_nic_map_skb()
430 unsigned int dx = ring->sw_tail; in aq_nic_map_skb()
432 struct aq_ring_buff_s *dx_buff = &ring->buff_ring[dx]; in aq_nic_map_skb()
435 dx_buff->flags = 0U; in aq_nic_map_skb()
438 dx_buff->mss = skb_shinfo(skb)->gso_size; in aq_nic_map_skb()
439 dx_buff->is_gso = 1U; in aq_nic_map_skb()
440 dx_buff->len_pkt = skb->len; in aq_nic_map_skb()
441 dx_buff->len_l2 = ETH_HLEN; in aq_nic_map_skb()
442 dx_buff->len_l3 = ip_hdrlen(skb); in aq_nic_map_skb()
443 dx_buff->len_l4 = tcp_hdrlen(skb); in aq_nic_map_skb()
444 dx_buff->eop_index = 0xffffU; in aq_nic_map_skb()
445 dx_buff->is_ipv6 = in aq_nic_map_skb()
446 (ip_hdr(skb)->version == 6) ? 1U : 0U; in aq_nic_map_skb()
450 if (self->aq_nic_cfg.is_vlan_tx_insert && skb_vlan_tag_present(skb)) { in aq_nic_map_skb()
451 dx_buff->vlan_tx_tag = skb_vlan_tag_get(skb); in aq_nic_map_skb()
452 dx_buff->len_pkt = skb->len; in aq_nic_map_skb()
453 dx_buff->is_vlan = 1U; in aq_nic_map_skb()
459 dx_buff = &ring->buff_ring[dx]; in aq_nic_map_skb()
460 dx_buff->flags = 0U; in aq_nic_map_skb()
464 dx_buff->len = skb_headlen(skb); in aq_nic_map_skb()
465 dx_buff->pa = dma_map_single(aq_nic_get_dev(self), in aq_nic_map_skb()
466 skb->data, in aq_nic_map_skb()
467 dx_buff->len, in aq_nic_map_skb()
470 if (unlikely(dma_mapping_error(aq_nic_get_dev(self), dx_buff->pa))) in aq_nic_map_skb()
474 dx_buff->len_pkt = skb->len; in aq_nic_map_skb()
475 dx_buff->is_sop = 1U; in aq_nic_map_skb()
476 dx_buff->is_mapped = 1U; in aq_nic_map_skb()
479 if (skb->ip_summed == CHECKSUM_PARTIAL) { in aq_nic_map_skb()
480 dx_buff->is_ip_cso = (htons(ETH_P_IP) == skb->protocol) ? in aq_nic_map_skb()
483 if (ip_hdr(skb)->version == 4) { in aq_nic_map_skb()
484 dx_buff->is_tcp_cso = in aq_nic_map_skb()
485 (ip_hdr(skb)->protocol == IPPROTO_TCP) ? in aq_nic_map_skb()
487 dx_buff->is_udp_cso = in aq_nic_map_skb()
488 (ip_hdr(skb)->protocol == IPPROTO_UDP) ? in aq_nic_map_skb()
490 } else if (ip_hdr(skb)->version == 6) { in aq_nic_map_skb()
491 dx_buff->is_tcp_cso = in aq_nic_map_skb()
492 (ipv6_hdr(skb)->nexthdr == NEXTHDR_TCP) ? in aq_nic_map_skb()
494 dx_buff->is_udp_cso = in aq_nic_map_skb()
495 (ipv6_hdr(skb)->nexthdr == NEXTHDR_UDP) ? in aq_nic_map_skb()
500 for (; nr_frags--; ++frag_count) { in aq_nic_map_skb()
505 skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_count]; in aq_nic_map_skb()
526 dx_buff = &ring->buff_ring[dx]; in aq_nic_map_skb()
528 dx_buff->flags = 0U; in aq_nic_map_skb()
529 dx_buff->len = buff_size; in aq_nic_map_skb()
530 dx_buff->pa = frag_pa; in aq_nic_map_skb()
531 dx_buff->is_mapped = 1U; in aq_nic_map_skb()
532 dx_buff->eop_index = 0xffffU; in aq_nic_map_skb()
534 frag_len -= buff_size; in aq_nic_map_skb()
541 first->eop_index = dx; in aq_nic_map_skb()
542 dx_buff->is_eop = 1U; in aq_nic_map_skb()
543 dx_buff->skb = skb; in aq_nic_map_skb()
547 for (dx = ring->sw_tail; in aq_nic_map_skb()
549 --ret, dx = aq_ring_next_dx(ring, dx)) { in aq_nic_map_skb()
550 dx_buff = &ring->buff_ring[dx]; in aq_nic_map_skb()
552 if (!dx_buff->is_gso && !dx_buff->is_vlan && dx_buff->pa) { in aq_nic_map_skb()
553 if (unlikely(dx_buff->is_sop)) { in aq_nic_map_skb()
555 dx_buff->pa, in aq_nic_map_skb()
556 dx_buff->len, in aq_nic_map_skb()
560 dx_buff->pa, in aq_nic_map_skb()
561 dx_buff->len, in aq_nic_map_skb()
575 unsigned int vec = skb->queue_mapping % self->aq_nic_cfg.vecs; in aq_nic_xmit()
579 frags = skb_shinfo(skb)->nr_frags + 1; in aq_nic_xmit()
581 ring = self->aq_ring_tx[AQ_NIC_TCVEC2RING(self, tc, vec)]; in aq_nic_xmit()
591 if (__netif_subqueue_stopped(self->ndev, ring->idx)) { in aq_nic_xmit()
599 err = self->aq_hw_ops->hw_ring_tx_xmit(self->aq_hw, in aq_nic_xmit()
602 ++ring->stats.tx.packets; in aq_nic_xmit()
603 ring->stats.tx.bytes += skb->len; in aq_nic_xmit()
615 return self->aq_hw_ops->hw_interrupt_moderation_set(self->aq_hw); in aq_nic_update_interrupt_moderation_settings()
622 err = self->aq_hw_ops->hw_packet_filter_set(self->aq_hw, flags); in aq_nic_set_packet_filter()
626 self->packet_filter = flags; in aq_nic_set_packet_filter()
634 const struct aq_hw_ops *hw_ops = self->aq_hw_ops; in aq_nic_set_multicast_list()
635 struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg; in aq_nic_set_multicast_list()
636 unsigned int packet_filter = ndev->flags; in aq_nic_set_multicast_list()
641 self->mc_list.count = 0; in aq_nic_set_multicast_list()
646 ether_addr_copy(self->mc_list.ar[i++], ha->addr); in aq_nic_set_multicast_list()
650 cfg->is_mc_list_enabled = !!(packet_filter & IFF_MULTICAST); in aq_nic_set_multicast_list()
651 if (cfg->is_mc_list_enabled) { in aq_nic_set_multicast_list()
656 ether_addr_copy(self->mc_list.ar[i++], in aq_nic_set_multicast_list()
657 ha->addr); in aq_nic_set_multicast_list()
663 self->mc_list.count = i; in aq_nic_set_multicast_list()
664 err = hw_ops->hw_multicast_list_set(self->aq_hw, in aq_nic_set_multicast_list()
665 self->mc_list.ar, in aq_nic_set_multicast_list()
666 self->mc_list.count); in aq_nic_set_multicast_list()
675 self->aq_nic_cfg.mtu = new_mtu; in aq_nic_set_mtu()
682 return self->aq_hw_ops->hw_set_mac_address(self->aq_hw, ndev->dev_addr); in aq_nic_set_mac()
687 return self->link_status.mbps; in aq_nic_get_link_speed()
695 regs->version = 1; in aq_nic_get_regs()
697 err = self->aq_hw_ops->hw_get_regs(self->aq_hw, in aq_nic_get_regs()
698 self->aq_nic_cfg.aq_hw_caps, in aq_nic_get_regs()
709 return self->aq_nic_cfg.aq_hw_caps->mac_regs_count; in aq_nic_get_regs_count()
719 if (self->aq_fw_ops->update_stats) { in aq_nic_get_stats()
720 mutex_lock(&self->fwreq_mutex); in aq_nic_get_stats()
721 self->aq_fw_ops->update_stats(self->aq_hw); in aq_nic_get_stats()
722 mutex_unlock(&self->fwreq_mutex); in aq_nic_get_stats()
724 stats = self->aq_hw_ops->hw_get_hw_stats(self->aq_hw); in aq_nic_get_stats()
729 data[i] = stats->uprc + stats->mprc + stats->bprc; in aq_nic_get_stats()
730 data[++i] = stats->uprc; in aq_nic_get_stats()
731 data[++i] = stats->mprc; in aq_nic_get_stats()
732 data[++i] = stats->bprc; in aq_nic_get_stats()
733 data[++i] = stats->erpt; in aq_nic_get_stats()
734 data[++i] = stats->uptc + stats->mptc + stats->bptc; in aq_nic_get_stats()
735 data[++i] = stats->uptc; in aq_nic_get_stats()
736 data[++i] = stats->mptc; in aq_nic_get_stats()
737 data[++i] = stats->bptc; in aq_nic_get_stats()
738 data[++i] = stats->ubrc; in aq_nic_get_stats()
739 data[++i] = stats->ubtc; in aq_nic_get_stats()
740 data[++i] = stats->mbrc; in aq_nic_get_stats()
741 data[++i] = stats->mbtc; in aq_nic_get_stats()
742 data[++i] = stats->bbrc; in aq_nic_get_stats()
743 data[++i] = stats->bbtc; in aq_nic_get_stats()
744 data[++i] = stats->ubrc + stats->mbrc + stats->bbrc; in aq_nic_get_stats()
745 data[++i] = stats->ubtc + stats->mbtc + stats->bbtc; in aq_nic_get_stats()
746 data[++i] = stats->dma_pkt_rc; in aq_nic_get_stats()
747 data[++i] = stats->dma_pkt_tc; in aq_nic_get_stats()
748 data[++i] = stats->dma_oct_rc; in aq_nic_get_stats()
749 data[++i] = stats->dma_oct_tc; in aq_nic_get_stats()
750 data[++i] = stats->dpc; in aq_nic_get_stats()
756 for (i = 0U, aq_vec = self->aq_vec[0]; in aq_nic_get_stats()
757 aq_vec && self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) { in aq_nic_get_stats()
767 struct net_device *ndev = self->ndev; in aq_nic_update_ndev_stats()
768 struct aq_stats_s *stats = self->aq_hw_ops->hw_get_hw_stats(self->aq_hw); in aq_nic_update_ndev_stats()
770 ndev->stats.rx_packets = stats->dma_pkt_rc; in aq_nic_update_ndev_stats()
771 ndev->stats.rx_bytes = stats->dma_oct_rc; in aq_nic_update_ndev_stats()
772 ndev->stats.rx_errors = stats->erpr; in aq_nic_update_ndev_stats()
773 ndev->stats.rx_dropped = stats->dpc; in aq_nic_update_ndev_stats()
774 ndev->stats.tx_packets = stats->dma_pkt_tc; in aq_nic_update_ndev_stats()
775 ndev->stats.tx_bytes = stats->dma_oct_tc; in aq_nic_update_ndev_stats()
776 ndev->stats.tx_errors = stats->erpt; in aq_nic_update_ndev_stats()
777 ndev->stats.multicast = stats->mprc; in aq_nic_update_ndev_stats()
783 if (self->aq_nic_cfg.aq_hw_caps->media_type == AQ_HW_MEDIA_TYPE_FIBRE) in aq_nic_get_link_ksettings()
784 cmd->base.port = PORT_FIBRE; in aq_nic_get_link_ksettings()
786 cmd->base.port = PORT_TP; in aq_nic_get_link_ksettings()
788 cmd->base.duplex = DUPLEX_FULL; in aq_nic_get_link_ksettings()
789 cmd->base.autoneg = self->aq_nic_cfg.is_autoneg; in aq_nic_get_link_ksettings()
793 if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_10G) in aq_nic_get_link_ksettings()
797 if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_5G) in aq_nic_get_link_ksettings()
801 if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_2GS) in aq_nic_get_link_ksettings()
805 if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_1G) in aq_nic_get_link_ksettings()
809 if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_100M) in aq_nic_get_link_ksettings()
813 if (self->aq_nic_cfg.aq_hw_caps->flow_control) in aq_nic_get_link_ksettings()
815 Pause); in aq_nic_get_link_ksettings()
819 if (self->aq_nic_cfg.aq_hw_caps->media_type == AQ_HW_MEDIA_TYPE_FIBRE) in aq_nic_get_link_ksettings()
826 if (self->aq_nic_cfg.is_autoneg) in aq_nic_get_link_ksettings()
829 if (self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_10G) in aq_nic_get_link_ksettings()
833 if (self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_5G) in aq_nic_get_link_ksettings()
837 if (self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_2GS) in aq_nic_get_link_ksettings()
841 if (self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_1G) in aq_nic_get_link_ksettings()
845 if (self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_100M) in aq_nic_get_link_ksettings()
849 if (self->aq_nic_cfg.flow_control & AQ_NIC_FC_RX) in aq_nic_get_link_ksettings()
851 Pause); in aq_nic_get_link_ksettings()
853 /* Asym is when either RX or TX, but not both */ in aq_nic_get_link_ksettings()
854 if (!!(self->aq_nic_cfg.flow_control & AQ_NIC_FC_TX) ^ in aq_nic_get_link_ksettings()
855 !!(self->aq_nic_cfg.flow_control & AQ_NIC_FC_RX)) in aq_nic_get_link_ksettings()
859 if (self->aq_nic_cfg.aq_hw_caps->media_type == AQ_HW_MEDIA_TYPE_FIBRE) in aq_nic_get_link_ksettings()
872 if (cmd->base.autoneg == AUTONEG_ENABLE) { in aq_nic_set_link_ksettings()
873 rate = self->aq_nic_cfg.aq_hw_caps->link_speed_msk; in aq_nic_set_link_ksettings()
874 self->aq_nic_cfg.is_autoneg = true; in aq_nic_set_link_ksettings()
876 speed = cmd->base.speed; in aq_nic_set_link_ksettings()
900 err = -1; in aq_nic_set_link_ksettings()
904 if (!(self->aq_nic_cfg.aq_hw_caps->link_speed_msk & rate)) { in aq_nic_set_link_ksettings()
905 err = -1; in aq_nic_set_link_ksettings()
909 self->aq_nic_cfg.is_autoneg = false; in aq_nic_set_link_ksettings()
912 mutex_lock(&self->fwreq_mutex); in aq_nic_set_link_ksettings()
913 err = self->aq_fw_ops->set_link_speed(self->aq_hw, rate); in aq_nic_set_link_ksettings()
914 mutex_unlock(&self->fwreq_mutex); in aq_nic_set_link_ksettings()
918 self->aq_nic_cfg.link_speed_msk = rate; in aq_nic_set_link_ksettings()
926 return &self->aq_nic_cfg; in aq_nic_get_cfg()
933 self->aq_hw_ops->hw_get_fw_version(self->aq_hw, &fw_version); in aq_nic_get_fw_version()
943 netif_tx_disable(self->ndev); in aq_nic_stop()
944 netif_carrier_off(self->ndev); in aq_nic_stop()
946 del_timer_sync(&self->service_timer); in aq_nic_stop()
947 cancel_work_sync(&self->service_task); in aq_nic_stop()
949 self->aq_hw_ops->hw_irq_disable(self->aq_hw, AQ_CFG_IRQ_MASK); in aq_nic_stop()
951 if (self->aq_nic_cfg.is_polling) in aq_nic_stop()
952 del_timer_sync(&self->polling_timer); in aq_nic_stop()
956 for (i = 0U, aq_vec = self->aq_vec[0]; in aq_nic_stop()
957 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) in aq_nic_stop()
960 return self->aq_hw_ops->hw_stop(self->aq_hw); in aq_nic_stop()
971 for (i = 0U, aq_vec = self->aq_vec[0]; in aq_nic_deinit()
972 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) in aq_nic_deinit()
975 if (likely(self->aq_fw_ops->deinit)) { in aq_nic_deinit()
976 mutex_lock(&self->fwreq_mutex); in aq_nic_deinit()
977 self->aq_fw_ops->deinit(self->aq_hw); in aq_nic_deinit()
978 mutex_unlock(&self->fwreq_mutex); in aq_nic_deinit()
981 if (self->power_state != AQ_HW_POWER_STATE_D0 || in aq_nic_deinit()
982 self->aq_hw->aq_nic_cfg->wol) in aq_nic_deinit()
983 if (likely(self->aq_fw_ops->set_power)) { in aq_nic_deinit()
984 mutex_lock(&self->fwreq_mutex); in aq_nic_deinit()
985 self->aq_fw_ops->set_power(self->aq_hw, in aq_nic_deinit()
986 self->power_state, in aq_nic_deinit()
987 self->ndev->dev_addr); in aq_nic_deinit()
988 mutex_unlock(&self->fwreq_mutex); in aq_nic_deinit()
1002 for (i = ARRAY_SIZE(self->aq_vec); i--;) { in aq_nic_free_vectors()
1003 if (self->aq_vec[i]) { in aq_nic_free_vectors()
1004 aq_vec_free(self->aq_vec[i]); in aq_nic_free_vectors()
1005 self->aq_vec[i] = NULL; in aq_nic_free_vectors()
1016 if (!netif_running(self->ndev)) { in aq_nic_change_pm_state()
1021 if (pm_msg->event & PM_EVENT_SLEEP || pm_msg->event & PM_EVENT_FREEZE) { in aq_nic_change_pm_state()
1022 self->power_state = AQ_HW_POWER_STATE_D3; in aq_nic_change_pm_state()
1023 netif_device_detach(self->ndev); in aq_nic_change_pm_state()
1024 netif_tx_stop_all_queues(self->ndev); in aq_nic_change_pm_state()
1040 netif_device_attach(self->ndev); in aq_nic_change_pm_state()
1041 netif_tx_start_all_queues(self->ndev); in aq_nic_change_pm_state()
1054 if (!self->ndev) in aq_nic_shutdown()
1059 netif_device_detach(self->ndev); in aq_nic_shutdown()
1061 if (netif_running(self->ndev)) { in aq_nic_shutdown()