Lines Matching refs:adapter
143 static inline u32 qlcnic_get_ref_handle(struct qlcnic_adapter *adapter, in qlcnic_get_ref_handle() argument
146 if (qlcnic_83xx_check(adapter)) in qlcnic_get_ref_handle()
157 static void qlcnic_delete_rx_list_mac(struct qlcnic_adapter *adapter, in qlcnic_delete_rx_list_mac() argument
165 ret = qlcnic_sre_macaddr_change(adapter, addr, vlan_id, op); in qlcnic_delete_rx_list_mac()
170 ret = qlcnic_sre_macaddr_change(adapter, addr, vlan_id, op); in qlcnic_delete_rx_list_mac()
173 adapter->rx_fhash.fnum--; in qlcnic_delete_rx_list_mac()
192 static void qlcnic_add_lb_filter(struct qlcnic_adapter *adapter, in qlcnic_add_lb_filter() argument
203 if (!qlcnic_sriov_pf_check(adapter) || (vlan_id == 0xffff)) in qlcnic_add_lb_filter()
208 (adapter->fhash.fbucket_size - 1); in qlcnic_add_lb_filter()
211 if (adapter->rx_fhash.fnum >= adapter->rx_fhash.fmax) in qlcnic_add_lb_filter()
214 head = &(adapter->rx_fhash.fhead[hindex]); in qlcnic_add_lb_filter()
231 spin_lock(&adapter->rx_mac_learn_lock); in qlcnic_add_lb_filter()
233 adapter->rx_fhash.fnum++; in qlcnic_add_lb_filter()
234 spin_unlock(&adapter->rx_mac_learn_lock); in qlcnic_add_lb_filter()
236 head = &adapter->fhash.fhead[hindex]; in qlcnic_add_lb_filter()
238 spin_lock(&adapter->mac_learn_lock); in qlcnic_add_lb_filter()
243 ret = qlcnic_sre_macaddr_change(adapter, in qlcnic_add_lb_filter()
248 adapter->fhash.fnum--; in qlcnic_add_lb_filter()
251 spin_unlock(&adapter->mac_learn_lock); in qlcnic_add_lb_filter()
256 spin_unlock(&adapter->mac_learn_lock); in qlcnic_add_lb_filter()
258 head = &adapter->rx_fhash.fhead[hindex]; in qlcnic_add_lb_filter()
260 spin_lock(&adapter->rx_mac_learn_lock); in qlcnic_add_lb_filter()
264 qlcnic_delete_rx_list_mac(adapter, tmp_fil, &src_addr, in qlcnic_add_lb_filter()
267 spin_unlock(&adapter->rx_mac_learn_lock); in qlcnic_add_lb_filter()
271 void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr, in qlcnic_82xx_change_filter() argument
278 struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring; in qlcnic_82xx_change_filter()
289 word = QLCNIC_MAC_EVENT | ((u64)(adapter->portnum) << 16); in qlcnic_82xx_change_filter()
303 static void qlcnic_send_filter(struct qlcnic_adapter *adapter, in qlcnic_send_filter() argument
317 if (ether_addr_equal(phdr->h_source, adapter->mac_addr)) in qlcnic_send_filter()
320 if (adapter->flags & QLCNIC_VLAN_FILTERING) { in qlcnic_send_filter()
331 hindex = hval & (adapter->fhash.fbucket_size - 1); in qlcnic_send_filter()
332 head = &(adapter->fhash.fhead[hindex]); in qlcnic_send_filter()
338 qlcnic_change_filter(adapter, &src_addr, in qlcnic_send_filter()
345 if (unlikely(adapter->fhash.fnum >= adapter->fhash.fmax)) { in qlcnic_send_filter()
346 adapter->stats.mac_filter_limit_overrun++; in qlcnic_send_filter()
354 qlcnic_change_filter(adapter, &src_addr, vlan_id); in qlcnic_send_filter()
358 spin_lock(&adapter->mac_learn_lock); in qlcnic_send_filter()
360 adapter->fhash.fnum++; in qlcnic_send_filter()
361 spin_unlock(&adapter->mac_learn_lock); in qlcnic_send_filter()
371 static int qlcnic_tx_encap_pkt(struct qlcnic_adapter *adapter, in qlcnic_tx_encap_pkt() argument
423 adapter->stats.encap_lso_frames++; in qlcnic_tx_encap_pkt()
435 adapter->stats.encap_tx_csummed++; in qlcnic_tx_encap_pkt()
459 static int qlcnic_tx_pkt(struct qlcnic_adapter *adapter, in qlcnic_tx_pkt() argument
480 if (unlikely(adapter->tx_pvid)) { in qlcnic_tx_pkt()
481 if (vlan_tci && !(adapter->flags & QLCNIC_TAGGING_ENABLED)) in qlcnic_tx_pkt()
483 if (vlan_tci && (adapter->flags & QLCNIC_TAGGING_ENABLED)) in qlcnic_tx_pkt()
487 vlan_tci = adapter->tx_pvid; in qlcnic_tx_pkt()
553 adapter->stats.lso_frames++; in qlcnic_tx_pkt()
650 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_xmit_frame() local
662 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_xmit_frame()
667 if (adapter->flags & QLCNIC_MACSPOOF) { in qlcnic_xmit_frame()
669 if (!ether_addr_equal(phdr->h_source, adapter->mac_addr)) in qlcnic_xmit_frame()
673 tx_ring = &adapter->tx_ring[skb_get_queue_mapping(skb)]; in qlcnic_xmit_frame()
703 pdev = adapter->pdev; in qlcnic_xmit_frame()
709 adapter->stats.tx_dma_map_error++; in qlcnic_xmit_frame()
717 qlcnic_set_tx_port(first_desc, adapter->portnum); in qlcnic_xmit_frame()
759 !qlcnic_encap_tx_offload(adapter)) { in qlcnic_xmit_frame()
760 if (unlikely(qlcnic_tx_pkt(adapter, first_desc, skb, in qlcnic_xmit_frame()
764 if (unlikely(qlcnic_tx_encap_pkt(adapter, first_desc, in qlcnic_xmit_frame()
769 if (adapter->drv_mac_learn) in qlcnic_xmit_frame()
770 qlcnic_send_filter(adapter, first_desc, skb); in qlcnic_xmit_frame()
782 adapter->stats.txdropped++; in qlcnic_xmit_frame()
787 void qlcnic_advert_link_change(struct qlcnic_adapter *adapter, int linkup) in qlcnic_advert_link_change() argument
789 struct net_device *netdev = adapter->netdev; in qlcnic_advert_link_change()
791 if (adapter->ahw->linkup && !linkup) { in qlcnic_advert_link_change()
793 adapter->ahw->linkup = 0; in qlcnic_advert_link_change()
795 } else if (!adapter->ahw->linkup && linkup) { in qlcnic_advert_link_change()
796 adapter->ahw->linkup = 1; in qlcnic_advert_link_change()
801 if (qlcnic_83xx_check(adapter) && adapter->ahw->lb_mode) { in qlcnic_advert_link_change()
811 static int qlcnic_alloc_rx_skb(struct qlcnic_adapter *adapter, in qlcnic_alloc_rx_skb() argument
817 struct pci_dev *pdev = adapter->pdev; in qlcnic_alloc_rx_skb()
819 skb = netdev_alloc_skb(adapter->netdev, rds_ring->skb_size); in qlcnic_alloc_rx_skb()
821 adapter->stats.skb_alloc_failure++; in qlcnic_alloc_rx_skb()
830 adapter->stats.rx_dma_map_error++; in qlcnic_alloc_rx_skb()
841 static void qlcnic_post_rx_buffers_nodb(struct qlcnic_adapter *adapter, in qlcnic_post_rx_buffers_nodb() argument
860 if (qlcnic_alloc_rx_skb(adapter, rds_ring, buffer)) in qlcnic_post_rx_buffers_nodb()
868 handle = qlcnic_get_ref_handle(adapter, in qlcnic_post_rx_buffers_nodb()
883 static int qlcnic_process_cmd_ring(struct qlcnic_adapter *adapter, in qlcnic_process_cmd_ring() argument
890 struct pci_dev *pdev = adapter->pdev; in qlcnic_process_cmd_ring()
891 struct net_device *netdev = adapter->netdev; in qlcnic_process_cmd_ring()
934 adapter->tx_timeo_cnt = 0; in qlcnic_process_cmd_ring()
961 struct qlcnic_adapter *adapter; in qlcnic_poll() local
965 adapter = sds_ring->adapter; in qlcnic_poll()
968 tx_complete = qlcnic_process_cmd_ring(adapter, tx_ring, in qlcnic_poll()
978 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_poll()
979 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_poll()
980 qlcnic_enable_tx_intr(adapter, tx_ring); in qlcnic_poll()
990 struct qlcnic_adapter *adapter; in qlcnic_tx_poll() local
994 adapter = tx_ring->adapter; in qlcnic_tx_poll()
996 work_done = qlcnic_process_cmd_ring(adapter, tx_ring, budget); in qlcnic_tx_poll()
999 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_tx_poll()
1000 qlcnic_enable_tx_intr(adapter, tx_ring); in qlcnic_tx_poll()
1012 struct qlcnic_adapter *adapter; in qlcnic_rx_poll() local
1016 adapter = sds_ring->adapter; in qlcnic_rx_poll()
1022 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_rx_poll()
1023 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_rx_poll()
1029 static void qlcnic_handle_linkevent(struct qlcnic_adapter *adapter, in qlcnic_handle_linkevent() argument
1035 struct net_device *netdev = adapter->netdev; in qlcnic_handle_linkevent()
1037 adapter->ahw->has_link_events = 1; in qlcnic_handle_linkevent()
1059 adapter->ahw->loopback_state |= QLCNIC_LINKEVENT; in qlcnic_handle_linkevent()
1061 qlcnic_advert_link_change(adapter, link_status); in qlcnic_handle_linkevent()
1064 adapter->ahw->link_duplex = DUPLEX_FULL; in qlcnic_handle_linkevent()
1066 adapter->ahw->link_duplex = DUPLEX_HALF; in qlcnic_handle_linkevent()
1068 adapter->ahw->module_type = module; in qlcnic_handle_linkevent()
1069 adapter->ahw->link_autoneg = autoneg; in qlcnic_handle_linkevent()
1072 adapter->ahw->link_speed = link_speed; in qlcnic_handle_linkevent()
1074 adapter->ahw->link_speed = SPEED_UNKNOWN; in qlcnic_handle_linkevent()
1075 adapter->ahw->link_duplex = DUPLEX_UNKNOWN; in qlcnic_handle_linkevent()
1084 struct qlcnic_adapter *adapter; in qlcnic_handle_fw_message() local
1097 adapter = sds_ring->adapter; in qlcnic_handle_fw_message()
1098 dev = &adapter->pdev->dev; in qlcnic_handle_fw_message()
1103 qlcnic_handle_linkevent(adapter, &msg); in qlcnic_handle_fw_message()
1109 adapter->ahw->loopback_state |= QLCNIC_LB_RESPONSE; in qlcnic_handle_fw_message()
1113 adapter->ahw->diag_cnt = -EINPROGRESS; in qlcnic_handle_fw_message()
1117 adapter->ahw->diag_cnt = -ENODEV; in qlcnic_handle_fw_message()
1123 adapter->ahw->diag_cnt = -EIO; in qlcnic_handle_fw_message()
1128 qlcnic_dcb_aen_handler(adapter->dcb, (void *)&msg); in qlcnic_handle_fw_message()
1135 static struct sk_buff *qlcnic_process_rxbuf(struct qlcnic_adapter *adapter, in qlcnic_process_rxbuf() argument
1148 pci_unmap_single(adapter->pdev, buffer->dma, ring->dma_size, in qlcnic_process_rxbuf()
1152 if (likely((adapter->netdev->features & NETIF_F_RXCSUM) && in qlcnic_process_rxbuf()
1154 adapter->stats.csummed++; in qlcnic_process_rxbuf()
1166 static inline int qlcnic_check_rx_tagging(struct qlcnic_adapter *adapter, in qlcnic_check_rx_tagging() argument
1176 if (!adapter->rx_pvid) in qlcnic_check_rx_tagging()
1179 if (*vlan_tag == adapter->rx_pvid) { in qlcnic_check_rx_tagging()
1184 if (adapter->flags & QLCNIC_TAGGING_ENABLED) in qlcnic_check_rx_tagging()
1191 qlcnic_process_rcv(struct qlcnic_adapter *adapter, in qlcnic_process_rcv() argument
1195 struct net_device *netdev = adapter->netdev; in qlcnic_process_rcv()
1196 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_process_rcv()
1203 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_process_rcv()
1217 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, cksum); in qlcnic_process_rcv()
1221 if (adapter->rx_mac_learn) { in qlcnic_process_rcv()
1224 qlcnic_add_lb_filter(adapter, skb, is_lb_pkt, t_vid); in qlcnic_process_rcv()
1235 if (unlikely(qlcnic_check_rx_tagging(adapter, skb, &vid))) { in qlcnic_process_rcv()
1236 adapter->stats.rxdropped++; in qlcnic_process_rcv()
1248 adapter->stats.rx_pkts++; in qlcnic_process_rcv()
1249 adapter->stats.rxbytes += length; in qlcnic_process_rcv()
1259 qlcnic_process_lro(struct qlcnic_adapter *adapter, in qlcnic_process_lro() argument
1262 struct net_device *netdev = adapter->netdev; in qlcnic_process_lro()
1263 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_process_lro()
1275 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_process_lro()
1293 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, STATUS_CKSUM_OK); in qlcnic_process_lro()
1297 if (adapter->rx_mac_learn) { in qlcnic_process_lro()
1300 qlcnic_add_lb_filter(adapter, skb, is_lb_pkt, t_vid); in qlcnic_process_lro()
1311 if (unlikely(qlcnic_check_rx_tagging(adapter, skb, &vid))) { in qlcnic_process_lro()
1312 adapter->stats.rxdropped++; in qlcnic_process_lro()
1336 if (adapter->flags & QLCNIC_FW_LRO_MSS_CAP) { in qlcnic_process_lro()
1348 adapter->stats.lro_pkts++; in qlcnic_process_lro()
1349 adapter->stats.lrobytes += length; in qlcnic_process_lro()
1357 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_process_rcv_ring() local
1380 rxbuf = qlcnic_process_rcv(adapter, sds_ring, ring, in qlcnic_process_rcv_ring()
1386 rxbuf = qlcnic_process_lro(adapter, ring, sts_data0, in qlcnic_process_rcv_ring()
1399 adapter->stats.null_rxbuf++; in qlcnic_process_rcv_ring()
1409 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_process_rcv_ring()
1410 rds_ring = &adapter->recv_ctx->rds_rings[ring]; in qlcnic_process_rcv_ring()
1415 qlcnic_alloc_rx_skb(adapter, rds_ring, rxbuf); in qlcnic_process_rcv_ring()
1423 qlcnic_post_rx_buffers_nodb(adapter, rds_ring, ring); in qlcnic_process_rcv_ring()
1434 void qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter, in qlcnic_post_rx_buffers() argument
1451 if (qlcnic_alloc_rx_skb(adapter, rds_ring, buffer)) in qlcnic_post_rx_buffers()
1461 handle = qlcnic_get_ref_handle(adapter, buffer->ref_handle, in qlcnic_post_rx_buffers()
1475 static void dump_skb(struct sk_buff *skb, struct qlcnic_adapter *adapter) in dump_skb() argument
1477 if (adapter->ahw->msg_enable & NETIF_MSG_DRV) { in dump_skb()
1481 dev_name(&adapter->pdev->dev), __func__); in dump_skb()
1488 static void qlcnic_process_rcv_diag(struct qlcnic_adapter *adapter, int ring, in qlcnic_process_rcv_diag() argument
1491 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_process_rcv_diag()
1496 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_process_rcv_diag()
1509 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, cksum); in qlcnic_process_rcv_diag()
1521 if (!qlcnic_check_loopback_buff(skb->data, adapter->mac_addr)) in qlcnic_process_rcv_diag()
1522 adapter->ahw->diag_cnt++; in qlcnic_process_rcv_diag()
1524 dump_skb(skb, adapter); in qlcnic_process_rcv_diag()
1527 adapter->stats.rx_pkts++; in qlcnic_process_rcv_diag()
1528 adapter->stats.rxbytes += length; in qlcnic_process_rcv_diag()
1535 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_82xx_process_rcv_ring_diag() local
1556 qlcnic_process_rcv_diag(adapter, ring, sts_data0); in qlcnic_82xx_process_rcv_ring_diag()
1570 int qlcnic_82xx_napi_add(struct qlcnic_adapter *adapter, in qlcnic_82xx_napi_add() argument
1575 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_82xx_napi_add()
1578 if (qlcnic_alloc_sds_rings(recv_ctx, adapter->drv_sds_rings)) in qlcnic_82xx_napi_add()
1581 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_82xx_napi_add()
1583 if (qlcnic_check_multi_tx(adapter) && in qlcnic_82xx_napi_add()
1584 !adapter->ahw->diag_test) { in qlcnic_82xx_napi_add()
1588 if (ring == (adapter->drv_sds_rings - 1)) in qlcnic_82xx_napi_add()
1599 if (qlcnic_alloc_tx_rings(adapter, netdev)) { in qlcnic_82xx_napi_add()
1604 if (qlcnic_check_multi_tx(adapter) && !adapter->ahw->diag_test) { in qlcnic_82xx_napi_add()
1605 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_82xx_napi_add()
1606 tx_ring = &adapter->tx_ring[ring]; in qlcnic_82xx_napi_add()
1615 void qlcnic_82xx_napi_del(struct qlcnic_adapter *adapter) in qlcnic_82xx_napi_del() argument
1619 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_82xx_napi_del()
1622 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_82xx_napi_del()
1627 qlcnic_free_sds_rings(adapter->recv_ctx); in qlcnic_82xx_napi_del()
1629 if (qlcnic_check_multi_tx(adapter) && !adapter->ahw->diag_test) { in qlcnic_82xx_napi_del()
1630 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_82xx_napi_del()
1631 tx_ring = &adapter->tx_ring[ring]; in qlcnic_82xx_napi_del()
1636 qlcnic_free_tx_rings(adapter); in qlcnic_82xx_napi_del()
1639 void qlcnic_82xx_napi_enable(struct qlcnic_adapter *adapter) in qlcnic_82xx_napi_enable() argument
1644 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_82xx_napi_enable()
1646 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_82xx_napi_enable()
1649 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_82xx_napi_enable()
1652 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_82xx_napi_enable()
1655 if (qlcnic_check_multi_tx(adapter) && in qlcnic_82xx_napi_enable()
1656 (adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_82xx_napi_enable()
1657 !adapter->ahw->diag_test) { in qlcnic_82xx_napi_enable()
1658 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_82xx_napi_enable()
1659 tx_ring = &adapter->tx_ring[ring]; in qlcnic_82xx_napi_enable()
1661 qlcnic_enable_tx_intr(adapter, tx_ring); in qlcnic_82xx_napi_enable()
1666 void qlcnic_82xx_napi_disable(struct qlcnic_adapter *adapter) in qlcnic_82xx_napi_disable() argument
1671 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_82xx_napi_disable()
1673 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_82xx_napi_disable()
1676 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_82xx_napi_disable()
1678 qlcnic_disable_sds_intr(adapter, sds_ring); in qlcnic_82xx_napi_disable()
1683 if ((adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_82xx_napi_disable()
1684 !adapter->ahw->diag_test && in qlcnic_82xx_napi_disable()
1685 qlcnic_check_multi_tx(adapter)) { in qlcnic_82xx_napi_disable()
1686 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_82xx_napi_disable()
1687 tx_ring = &adapter->tx_ring[ring]; in qlcnic_82xx_napi_disable()
1688 qlcnic_disable_tx_intr(adapter, tx_ring); in qlcnic_82xx_napi_disable()
1714 qlcnic_83xx_process_rcv(struct qlcnic_adapter *adapter, in qlcnic_83xx_process_rcv() argument
1718 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_process_rcv()
1719 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_process_rcv()
1727 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_83xx_process_rcv()
1739 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, cksum); in qlcnic_83xx_process_rcv()
1748 err = qlcnic_check_rx_tagging(adapter, skb, &vid); in qlcnic_83xx_process_rcv()
1750 if (adapter->rx_mac_learn) { in qlcnic_83xx_process_rcv()
1752 qlcnic_add_lb_filter(adapter, skb, is_lb_pkt, vid); in qlcnic_83xx_process_rcv()
1756 adapter->stats.rxdropped++; in qlcnic_83xx_process_rcv()
1766 adapter->stats.encap_rx_csummed++; in qlcnic_83xx_process_rcv()
1774 adapter->stats.rx_pkts++; in qlcnic_83xx_process_rcv()
1775 adapter->stats.rxbytes += length; in qlcnic_83xx_process_rcv()
1781 qlcnic_83xx_process_lro(struct qlcnic_adapter *adapter, in qlcnic_83xx_process_lro() argument
1784 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_process_lro()
1785 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_process_lro()
1799 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_83xx_process_lro()
1815 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, STATUS_CKSUM_OK); in qlcnic_83xx_process_lro()
1827 err = qlcnic_check_rx_tagging(adapter, skb, &vid); in qlcnic_83xx_process_lro()
1829 if (adapter->rx_mac_learn) { in qlcnic_83xx_process_lro()
1831 qlcnic_add_lb_filter(adapter, skb, is_lb_pkt, vid); in qlcnic_83xx_process_lro()
1835 adapter->stats.rxdropped++; in qlcnic_83xx_process_lro()
1858 if (adapter->flags & QLCNIC_FW_LRO_MSS_CAP) { in qlcnic_83xx_process_lro()
1872 adapter->stats.lro_pkts++; in qlcnic_83xx_process_lro()
1873 adapter->stats.lrobytes += length; in qlcnic_83xx_process_lro()
1881 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_83xx_process_rcv_ring() local
1901 rxbuf = qlcnic_83xx_process_rcv(adapter, sds_ring, in qlcnic_83xx_process_rcv_ring()
1905 rxbuf = qlcnic_83xx_process_lro(adapter, ring, in qlcnic_83xx_process_rcv_ring()
1909 dev_info(&adapter->pdev->dev, in qlcnic_83xx_process_rcv_ring()
1917 adapter->stats.null_rxbuf++; in qlcnic_83xx_process_rcv_ring()
1925 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_83xx_process_rcv_ring()
1926 rds_ring = &adapter->recv_ctx->rds_rings[ring]; in qlcnic_83xx_process_rcv_ring()
1931 qlcnic_alloc_rx_skb(adapter, rds_ring, rxbuf); in qlcnic_83xx_process_rcv_ring()
1938 qlcnic_post_rx_buffers_nodb(adapter, rds_ring, ring); in qlcnic_83xx_process_rcv_ring()
1952 struct qlcnic_adapter *adapter; in qlcnic_83xx_msix_sriov_vf_poll() local
1956 adapter = sds_ring->adapter; in qlcnic_83xx_msix_sriov_vf_poll()
1958 tx_ring = adapter->tx_ring; in qlcnic_83xx_msix_sriov_vf_poll()
1960 tx_complete = qlcnic_process_cmd_ring(adapter, tx_ring, budget); in qlcnic_83xx_msix_sriov_vf_poll()
1969 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_msix_sriov_vf_poll()
1980 struct qlcnic_adapter *adapter; in qlcnic_83xx_poll() local
1984 adapter = sds_ring->adapter; in qlcnic_83xx_poll()
1986 tx_ring = adapter->tx_ring; in qlcnic_83xx_poll()
1988 tx_complete = qlcnic_process_cmd_ring(adapter, tx_ring, budget); in qlcnic_83xx_poll()
1997 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_poll()
2007 struct qlcnic_adapter *adapter; in qlcnic_83xx_msix_tx_poll() local
2011 adapter = tx_ring->adapter; in qlcnic_83xx_msix_tx_poll()
2012 work_done = qlcnic_process_cmd_ring(adapter, tx_ring, budget); in qlcnic_83xx_msix_tx_poll()
2015 if (test_bit(__QLCNIC_DEV_UP , &adapter->state)) in qlcnic_83xx_msix_tx_poll()
2016 qlcnic_enable_tx_intr(adapter, tx_ring); in qlcnic_83xx_msix_tx_poll()
2029 struct qlcnic_adapter *adapter; in qlcnic_83xx_rx_poll() local
2032 adapter = sds_ring->adapter; in qlcnic_83xx_rx_poll()
2036 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_83xx_rx_poll()
2037 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_rx_poll()
2043 void qlcnic_83xx_napi_enable(struct qlcnic_adapter *adapter) in qlcnic_83xx_napi_enable() argument
2048 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_napi_enable()
2050 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_83xx_napi_enable()
2053 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_napi_enable()
2056 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_napi_enable()
2057 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_napi_enable()
2060 if ((adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_83xx_napi_enable()
2061 !(adapter->flags & QLCNIC_TX_INTR_SHARED)) { in qlcnic_83xx_napi_enable()
2062 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_83xx_napi_enable()
2063 tx_ring = &adapter->tx_ring[ring]; in qlcnic_83xx_napi_enable()
2065 qlcnic_enable_tx_intr(adapter, tx_ring); in qlcnic_83xx_napi_enable()
2070 void qlcnic_83xx_napi_disable(struct qlcnic_adapter *adapter) in qlcnic_83xx_napi_disable() argument
2074 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_napi_disable()
2077 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_83xx_napi_disable()
2080 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_napi_disable()
2082 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_napi_disable()
2083 qlcnic_disable_sds_intr(adapter, sds_ring); in qlcnic_83xx_napi_disable()
2088 if ((adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_83xx_napi_disable()
2089 !(adapter->flags & QLCNIC_TX_INTR_SHARED)) { in qlcnic_83xx_napi_disable()
2090 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_83xx_napi_disable()
2091 tx_ring = &adapter->tx_ring[ring]; in qlcnic_83xx_napi_disable()
2092 qlcnic_disable_tx_intr(adapter, tx_ring); in qlcnic_83xx_napi_disable()
2099 int qlcnic_83xx_napi_add(struct qlcnic_adapter *adapter, in qlcnic_83xx_napi_add() argument
2105 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_napi_add()
2107 if (qlcnic_alloc_sds_rings(recv_ctx, adapter->drv_sds_rings)) in qlcnic_83xx_napi_add()
2110 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_napi_add()
2112 if (adapter->flags & QLCNIC_MSIX_ENABLED) { in qlcnic_83xx_napi_add()
2113 if (!(adapter->flags & QLCNIC_TX_INTR_SHARED)) in qlcnic_83xx_napi_add()
2129 if (qlcnic_alloc_tx_rings(adapter, netdev)) { in qlcnic_83xx_napi_add()
2134 if ((adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_83xx_napi_add()
2135 !(adapter->flags & QLCNIC_TX_INTR_SHARED)) { in qlcnic_83xx_napi_add()
2136 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_83xx_napi_add()
2137 tx_ring = &adapter->tx_ring[ring]; in qlcnic_83xx_napi_add()
2147 void qlcnic_83xx_napi_del(struct qlcnic_adapter *adapter) in qlcnic_83xx_napi_del() argument
2151 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_napi_del()
2154 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_napi_del()
2159 qlcnic_free_sds_rings(adapter->recv_ctx); in qlcnic_83xx_napi_del()
2161 if ((adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_83xx_napi_del()
2162 !(adapter->flags & QLCNIC_TX_INTR_SHARED)) { in qlcnic_83xx_napi_del()
2163 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { in qlcnic_83xx_napi_del()
2164 tx_ring = &adapter->tx_ring[ring]; in qlcnic_83xx_napi_del()
2169 qlcnic_free_tx_rings(adapter); in qlcnic_83xx_napi_del()
2172 static void qlcnic_83xx_process_rcv_diag(struct qlcnic_adapter *adapter, in qlcnic_83xx_process_rcv_diag() argument
2175 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_process_rcv_diag()
2180 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_83xx_process_rcv_diag()
2190 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, STATUS_CKSUM_OK); in qlcnic_83xx_process_rcv_diag()
2199 if (!qlcnic_check_loopback_buff(skb->data, adapter->mac_addr)) in qlcnic_83xx_process_rcv_diag()
2200 adapter->ahw->diag_cnt++; in qlcnic_83xx_process_rcv_diag()
2202 dump_skb(skb, adapter); in qlcnic_83xx_process_rcv_diag()
2210 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_83xx_process_rcv_ring_diag() local
2224 qlcnic_83xx_process_rcv_diag(adapter, ring, sts_data); in qlcnic_83xx_process_rcv_ring_diag()