Lines Matching +full:supports +full:- +full:clkreq
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright(c) 2018-2019 Realtek Corporation
47 return skb->priority; in rtw_pci_get_tx_qsel()
53 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_read8()
55 return readb(rtwpci->mmap + addr); in rtw_pci_read8()
60 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_read16()
62 return readw(rtwpci->mmap + addr); in rtw_pci_read16()
67 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_read32()
69 return readl(rtwpci->mmap + addr); in rtw_pci_read32()
74 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_write8()
76 writeb(val, rtwpci->mmap + addr); in rtw_pci_write8()
81 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_write16()
83 writew(val, rtwpci->mmap + addr); in rtw_pci_write16()
88 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_write32()
90 writel(val, rtwpci->mmap + addr); in rtw_pci_write32()
96 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_tx_ring_skbs()
102 skb_queue_walk_safe(&tx_ring->queue, skb, tmp) { in rtw_pci_free_tx_ring_skbs()
103 __skb_unlink(skb, &tx_ring->queue); in rtw_pci_free_tx_ring_skbs()
105 dma = tx_data->dma; in rtw_pci_free_tx_ring_skbs()
107 dma_unmap_single(&pdev->dev, dma, skb->len, DMA_TO_DEVICE); in rtw_pci_free_tx_ring_skbs()
115 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_tx_ring()
116 u8 *head = tx_ring->r.head; in rtw_pci_free_tx_ring()
117 u32 len = tx_ring->r.len; in rtw_pci_free_tx_ring()
118 int ring_sz = len * tx_ring->r.desc_size; in rtw_pci_free_tx_ring()
123 dma_free_coherent(&pdev->dev, ring_sz, head, tx_ring->r.dma); in rtw_pci_free_tx_ring()
124 tx_ring->r.head = NULL; in rtw_pci_free_tx_ring()
130 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_rx_ring_skbs()
136 for (i = 0; i < rx_ring->r.len; i++) { in rtw_pci_free_rx_ring_skbs()
137 skb = rx_ring->buf[i]; in rtw_pci_free_rx_ring_skbs()
141 dma = *((dma_addr_t *)skb->cb); in rtw_pci_free_rx_ring_skbs()
142 dma_unmap_single(&pdev->dev, dma, buf_sz, DMA_FROM_DEVICE); in rtw_pci_free_rx_ring_skbs()
144 rx_ring->buf[i] = NULL; in rtw_pci_free_rx_ring_skbs()
151 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_rx_ring()
152 u8 *head = rx_ring->r.head; in rtw_pci_free_rx_ring()
153 int ring_sz = rx_ring->r.desc_size * rx_ring->r.len; in rtw_pci_free_rx_ring()
157 dma_free_coherent(&pdev->dev, ring_sz, head, rx_ring->r.dma); in rtw_pci_free_rx_ring()
162 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_free_trx_ring()
168 tx_ring = &rtwpci->tx_rings[i]; in rtw_pci_free_trx_ring()
173 rx_ring = &rtwpci->rx_rings[i]; in rtw_pci_free_trx_ring()
182 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_init_tx_ring()
189 return -EINVAL; in rtw_pci_init_tx_ring()
192 head = dma_alloc_coherent(&pdev->dev, ring_sz, &dma, GFP_KERNEL); in rtw_pci_init_tx_ring()
195 return -ENOMEM; in rtw_pci_init_tx_ring()
198 skb_queue_head_init(&tx_ring->queue); in rtw_pci_init_tx_ring()
199 tx_ring->r.head = head; in rtw_pci_init_tx_ring()
200 tx_ring->r.dma = dma; in rtw_pci_init_tx_ring()
201 tx_ring->r.len = len; in rtw_pci_init_tx_ring()
202 tx_ring->r.desc_size = desc_size; in rtw_pci_init_tx_ring()
203 tx_ring->r.wp = 0; in rtw_pci_init_tx_ring()
204 tx_ring->r.rp = 0; in rtw_pci_init_tx_ring()
213 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_reset_rx_desc()
219 return -EINVAL; in rtw_pci_reset_rx_desc()
221 dma = dma_map_single(&pdev->dev, skb->data, buf_sz, DMA_FROM_DEVICE); in rtw_pci_reset_rx_desc()
222 if (dma_mapping_error(&pdev->dev, dma)) in rtw_pci_reset_rx_desc()
223 return -EBUSY; in rtw_pci_reset_rx_desc()
225 *((dma_addr_t *)skb->cb) = dma; in rtw_pci_reset_rx_desc()
226 buf_desc = (struct rtw_pci_rx_buffer_desc *)(rx_ring->r.head + in rtw_pci_reset_rx_desc()
229 buf_desc->buf_size = cpu_to_le16(RTK_PCI_RX_BUF_SIZE); in rtw_pci_reset_rx_desc()
230 buf_desc->dma = cpu_to_le32(dma); in rtw_pci_reset_rx_desc()
239 struct device *dev = rtwdev->dev; in rtw_pci_sync_rx_desc_device()
245 buf_desc = (struct rtw_pci_rx_buffer_desc *)(rx_ring->r.head + in rtw_pci_sync_rx_desc_device()
248 buf_desc->buf_size = cpu_to_le16(RTK_PCI_RX_BUF_SIZE); in rtw_pci_sync_rx_desc_device()
249 buf_desc->dma = cpu_to_le32(dma); in rtw_pci_sync_rx_desc_device()
256 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_init_rx_ring()
265 head = dma_alloc_coherent(&pdev->dev, ring_sz, &dma, GFP_KERNEL); in rtw_pci_init_rx_ring()
268 return -ENOMEM; in rtw_pci_init_rx_ring()
270 rx_ring->r.head = head; in rtw_pci_init_rx_ring()
276 ret = -ENOMEM; in rtw_pci_init_rx_ring()
280 memset(skb->data, 0, buf_sz); in rtw_pci_init_rx_ring()
281 rx_ring->buf[i] = skb; in rtw_pci_init_rx_ring()
290 rx_ring->r.dma = dma; in rtw_pci_init_rx_ring()
291 rx_ring->r.len = len; in rtw_pci_init_rx_ring()
292 rx_ring->r.desc_size = desc_size; in rtw_pci_init_rx_ring()
293 rx_ring->r.wp = 0; in rtw_pci_init_rx_ring()
294 rx_ring->r.rp = 0; in rtw_pci_init_rx_ring()
300 skb = rx_ring->buf[i]; in rtw_pci_init_rx_ring()
303 dma = *((dma_addr_t *)skb->cb); in rtw_pci_init_rx_ring()
304 dma_unmap_single(&pdev->dev, dma, buf_sz, DMA_FROM_DEVICE); in rtw_pci_init_rx_ring()
306 rx_ring->buf[i] = NULL; in rtw_pci_init_rx_ring()
308 dma_free_coherent(&pdev->dev, ring_sz, head, dma); in rtw_pci_init_rx_ring()
317 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_init_trx_ring()
320 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_init_trx_ring()
326 tx_desc_size = chip->tx_buf_desc_sz; in rtw_pci_init_trx_ring()
329 tx_ring = &rtwpci->tx_rings[i]; in rtw_pci_init_trx_ring()
336 rx_desc_size = chip->rx_buf_desc_sz; in rtw_pci_init_trx_ring()
339 rx_ring = &rtwpci->rx_rings[j]; in rtw_pci_init_trx_ring()
351 tx_ring = &rtwpci->tx_rings[i]; in rtw_pci_init_trx_ring()
357 rx_ring = &rtwpci->rx_rings[j]; in rtw_pci_init_trx_ring()
371 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_init()
374 rtwpci->irq_mask[0] = IMR_HIGHDOK | in rtw_pci_init()
384 rtwpci->irq_mask[1] = IMR_TXFOVW | in rtw_pci_init()
386 rtwpci->irq_mask[3] = IMR_H2CDOK | in rtw_pci_init()
388 spin_lock_init(&rtwpci->irq_lock); in rtw_pci_init()
389 spin_lock_init(&rtwpci->hwirq_lock); in rtw_pci_init()
397 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_reset_buf_desc()
405 dma = rtwpci->tx_rings[RTW_TX_QUEUE_BCN].r.dma; in rtw_pci_reset_buf_desc()
409 len = rtwpci->tx_rings[RTW_TX_QUEUE_H2C].r.len; in rtw_pci_reset_buf_desc()
410 dma = rtwpci->tx_rings[RTW_TX_QUEUE_H2C].r.dma; in rtw_pci_reset_buf_desc()
411 rtwpci->tx_rings[RTW_TX_QUEUE_H2C].r.rp = 0; in rtw_pci_reset_buf_desc()
412 rtwpci->tx_rings[RTW_TX_QUEUE_H2C].r.wp = 0; in rtw_pci_reset_buf_desc()
417 len = rtwpci->tx_rings[RTW_TX_QUEUE_BK].r.len; in rtw_pci_reset_buf_desc()
418 dma = rtwpci->tx_rings[RTW_TX_QUEUE_BK].r.dma; in rtw_pci_reset_buf_desc()
419 rtwpci->tx_rings[RTW_TX_QUEUE_BK].r.rp = 0; in rtw_pci_reset_buf_desc()
420 rtwpci->tx_rings[RTW_TX_QUEUE_BK].r.wp = 0; in rtw_pci_reset_buf_desc()
424 len = rtwpci->tx_rings[RTW_TX_QUEUE_BE].r.len; in rtw_pci_reset_buf_desc()
425 dma = rtwpci->tx_rings[RTW_TX_QUEUE_BE].r.dma; in rtw_pci_reset_buf_desc()
426 rtwpci->tx_rings[RTW_TX_QUEUE_BE].r.rp = 0; in rtw_pci_reset_buf_desc()
427 rtwpci->tx_rings[RTW_TX_QUEUE_BE].r.wp = 0; in rtw_pci_reset_buf_desc()
431 len = rtwpci->tx_rings[RTW_TX_QUEUE_VO].r.len; in rtw_pci_reset_buf_desc()
432 dma = rtwpci->tx_rings[RTW_TX_QUEUE_VO].r.dma; in rtw_pci_reset_buf_desc()
433 rtwpci->tx_rings[RTW_TX_QUEUE_VO].r.rp = 0; in rtw_pci_reset_buf_desc()
434 rtwpci->tx_rings[RTW_TX_QUEUE_VO].r.wp = 0; in rtw_pci_reset_buf_desc()
438 len = rtwpci->tx_rings[RTW_TX_QUEUE_VI].r.len; in rtw_pci_reset_buf_desc()
439 dma = rtwpci->tx_rings[RTW_TX_QUEUE_VI].r.dma; in rtw_pci_reset_buf_desc()
440 rtwpci->tx_rings[RTW_TX_QUEUE_VI].r.rp = 0; in rtw_pci_reset_buf_desc()
441 rtwpci->tx_rings[RTW_TX_QUEUE_VI].r.wp = 0; in rtw_pci_reset_buf_desc()
445 len = rtwpci->tx_rings[RTW_TX_QUEUE_MGMT].r.len; in rtw_pci_reset_buf_desc()
446 dma = rtwpci->tx_rings[RTW_TX_QUEUE_MGMT].r.dma; in rtw_pci_reset_buf_desc()
447 rtwpci->tx_rings[RTW_TX_QUEUE_MGMT].r.rp = 0; in rtw_pci_reset_buf_desc()
448 rtwpci->tx_rings[RTW_TX_QUEUE_MGMT].r.wp = 0; in rtw_pci_reset_buf_desc()
452 len = rtwpci->tx_rings[RTW_TX_QUEUE_HI0].r.len; in rtw_pci_reset_buf_desc()
453 dma = rtwpci->tx_rings[RTW_TX_QUEUE_HI0].r.dma; in rtw_pci_reset_buf_desc()
454 rtwpci->tx_rings[RTW_TX_QUEUE_HI0].r.rp = 0; in rtw_pci_reset_buf_desc()
455 rtwpci->tx_rings[RTW_TX_QUEUE_HI0].r.wp = 0; in rtw_pci_reset_buf_desc()
459 len = rtwpci->rx_rings[RTW_RX_QUEUE_MPDU].r.len; in rtw_pci_reset_buf_desc()
460 dma = rtwpci->rx_rings[RTW_RX_QUEUE_MPDU].r.dma; in rtw_pci_reset_buf_desc()
461 rtwpci->rx_rings[RTW_RX_QUEUE_MPDU].r.rp = 0; in rtw_pci_reset_buf_desc()
462 rtwpci->rx_rings[RTW_RX_QUEUE_MPDU].r.wp = 0; in rtw_pci_reset_buf_desc()
486 spin_lock_irqsave(&rtwpci->hwirq_lock, flags); in rtw_pci_enable_interrupt()
488 rtw_write32(rtwdev, RTK_PCI_HIMR0, rtwpci->irq_mask[0] & ~imr0_unmask); in rtw_pci_enable_interrupt()
489 rtw_write32(rtwdev, RTK_PCI_HIMR1, rtwpci->irq_mask[1]); in rtw_pci_enable_interrupt()
491 rtw_write32(rtwdev, RTK_PCI_HIMR3, rtwpci->irq_mask[3]); in rtw_pci_enable_interrupt()
493 rtwpci->irq_enabled = true; in rtw_pci_enable_interrupt()
495 spin_unlock_irqrestore(&rtwpci->hwirq_lock, flags); in rtw_pci_enable_interrupt()
503 spin_lock_irqsave(&rtwpci->hwirq_lock, flags); in rtw_pci_disable_interrupt()
505 if (!rtwpci->irq_enabled) in rtw_pci_disable_interrupt()
513 rtwpci->irq_enabled = false; in rtw_pci_disable_interrupt()
516 spin_unlock_irqrestore(&rtwpci->hwirq_lock, flags); in rtw_pci_disable_interrupt()
524 rtwpci->rx_tag = 0; in rtw_pci_dma_reset()
529 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_setup()
544 tx_ring = &rtwpci->tx_rings[queue]; in rtw_pci_dma_release()
551 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_start()
553 if (test_and_set_bit(RTW_PCI_FLAG_NAPI_RUNNING, rtwpci->flags)) in rtw_pci_napi_start()
556 napi_enable(&rtwpci->napi); in rtw_pci_napi_start()
561 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_stop()
563 if (!test_and_clear_bit(RTW_PCI_FLAG_NAPI_RUNNING, rtwpci->flags)) in rtw_pci_napi_stop()
566 napi_synchronize(&rtwpci->napi); in rtw_pci_napi_stop()
567 napi_disable(&rtwpci->napi); in rtw_pci_napi_stop()
572 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_start()
576 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_start()
577 rtwpci->running = true; in rtw_pci_start()
579 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_start()
586 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_stop()
587 struct pci_dev *pdev = rtwpci->pdev; in rtw_pci_stop()
589 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_stop()
590 rtwpci->running = false; in rtw_pci_stop()
592 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_stop()
594 synchronize_irq(pdev->irq); in rtw_pci_stop()
597 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_stop()
599 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_stop()
604 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_deep_ps_enter()
609 if (rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE)) in rtw_pci_deep_ps_enter()
612 lockdep_assert_held(&rtwpci->irq_lock); in rtw_pci_deep_ps_enter()
614 /* Deep PS state is not allowed to TX-DMA */ in rtw_pci_deep_ps_enter()
623 tx_ring = &rtwpci->tx_rings[queue]; in rtw_pci_deep_ps_enter()
626 if (skb_queue_len(&tx_ring->queue)) { in rtw_pci_deep_ps_enter()
638 set_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags); in rtw_pci_deep_ps_enter()
644 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_deep_ps_leave()
646 lockdep_assert_held(&rtwpci->irq_lock); in rtw_pci_deep_ps_leave()
648 if (test_and_clear_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_pci_deep_ps_leave()
654 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_deep_ps()
656 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_deep_ps()
658 if (enter && !test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_pci_deep_ps()
661 if (!enter && test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_pci_deep_ps()
664 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_deep_ps()
670 struct sk_buff *prev = skb_dequeue(&ring->queue); in rtw_pci_release_rsvd_page()
678 dma = tx_data->dma; in rtw_pci_release_rsvd_page()
679 dma_unmap_single(&rtwpci->pdev->dev, dma, prev->len, DMA_TO_DEVICE); in rtw_pci_release_rsvd_page()
687 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_dma_check()
688 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_dma_check()
690 u32 desc_sz = chip->rx_buf_desc_sz; in rtw_pci_dma_check()
693 buf_desc = (struct rtw_pci_rx_buffer_desc *)(rx_ring->r.head + in rtw_pci_dma_check()
695 total_pkt_size = le16_to_cpu(buf_desc->total_pkt_size); in rtw_pci_dma_check()
698 if (total_pkt_size != rtwpci->rx_tag) in rtw_pci_dma_check()
701 rtwpci->rx_tag = (rtwpci->rx_tag + 1) % RX_TAG_MAX; in rtw_pci_dma_check()
714 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in __pci_flush_queue()
715 struct rtw_pci_tx_ring *ring = &rtwpci->tx_rings[pci_q]; in __pci_flush_queue()
726 if (cur_rp == ring->r.wp) in __pci_flush_queue()
761 if (queues == BIT(rtwdev->hw->queues) - 1) { in rtw_pci_flush_queues()
762 pci_queues = BIT(RTK_MAX_TX_QUEUE_NUM) - 1; in rtw_pci_flush_queues()
764 for (i = 0; i < rtwdev->hw->queues; i++) in rtw_pci_flush_queues()
775 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_kick_off_queue()
779 ring = &rtwpci->tx_rings[queue]; in rtw_pci_tx_kick_off_queue()
782 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_tx_kick_off_queue()
783 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE)) in rtw_pci_tx_kick_off_queue()
785 rtw_write16(rtwdev, bd_idx, ring->r.wp & TRX_BD_IDX_MASK); in rtw_pci_tx_kick_off_queue()
786 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_tx_kick_off_queue()
791 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_kick_off()
795 if (test_and_clear_bit(queue, rtwpci->tx_queued)) in rtw_pci_tx_kick_off()
804 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_write_data()
805 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_tx_write_data()
809 u32 tx_pkt_desc_sz = chip->tx_pkt_desc_sz; in rtw_pci_tx_write_data()
810 u32 tx_buf_desc_sz = chip->tx_buf_desc_sz; in rtw_pci_tx_write_data()
816 ring = &rtwpci->tx_rings[queue]; in rtw_pci_tx_write_data()
818 size = skb->len; in rtw_pci_tx_write_data()
822 else if (!avail_desc(ring->r.wp, ring->r.rp, ring->r.len)) in rtw_pci_tx_write_data()
823 return -ENOSPC; in rtw_pci_tx_write_data()
825 pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz); in rtw_pci_tx_write_data()
827 pkt_info->qsel = rtw_pci_get_tx_qsel(skb, queue); in rtw_pci_tx_write_data()
829 dma = dma_map_single(&rtwpci->pdev->dev, skb->data, skb->len, in rtw_pci_tx_write_data()
831 if (dma_mapping_error(&rtwpci->pdev->dev, dma)) in rtw_pci_tx_write_data()
832 return -EBUSY; in rtw_pci_tx_write_data()
837 psb_len = (skb->len - 1) / 128 + 1; in rtw_pci_tx_write_data()
848 tx_data->dma = dma; in rtw_pci_tx_write_data()
849 tx_data->sn = pkt_info->sn; in rtw_pci_tx_write_data()
851 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_tx_write_data()
853 skb_queue_tail(&ring->queue, skb); in rtw_pci_tx_write_data()
858 /* update write-index, and kick it off later */ in rtw_pci_tx_write_data()
859 set_bit(queue, rtwpci->tx_queued); in rtw_pci_tx_write_data()
860 if (++ring->r.wp >= ring->r.len) in rtw_pci_tx_write_data()
861 ring->r.wp = 0; in rtw_pci_tx_write_data()
864 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_tx_write_data()
879 return -ENOMEM; in rtw_pci_write_data_rsvd_page()
903 return -ENOMEM; in rtw_pci_write_data_h2c()
921 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_write()
929 ring = &rtwpci->tx_rings[queue]; in rtw_pci_tx_write()
930 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_tx_write()
931 if (avail_desc(ring->r.wp, ring->r.rp, ring->r.len) < 2) { in rtw_pci_tx_write()
932 ieee80211_stop_queue(rtwdev->hw, skb_get_queue_mapping(skb)); in rtw_pci_tx_write()
933 ring->queue_stopped = true; in rtw_pci_tx_write()
935 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_tx_write()
943 struct ieee80211_hw *hw = rtwdev->hw; in rtw_pci_tx_isr()
953 ring = &rtwpci->tx_rings[hw_queue]; in rtw_pci_tx_isr()
959 rp_idx = ring->r.rp; in rtw_pci_tx_isr()
960 if (cur_rp >= ring->r.rp) in rtw_pci_tx_isr()
961 count = cur_rp - ring->r.rp; in rtw_pci_tx_isr()
963 count = ring->r.len - (ring->r.rp - cur_rp); in rtw_pci_tx_isr()
965 while (count--) { in rtw_pci_tx_isr()
966 skb = skb_dequeue(&ring->queue); in rtw_pci_tx_isr()
968 rtw_err(rtwdev, "failed to dequeue %d skb TX queue %d, BD=0x%08x, rp %d -> %d\n", in rtw_pci_tx_isr()
969 count, hw_queue, bd_idx, ring->r.rp, cur_rp); in rtw_pci_tx_isr()
973 dma_unmap_single(&rtwpci->pdev->dev, tx_data->dma, skb->len, in rtw_pci_tx_isr()
982 if (ring->queue_stopped && in rtw_pci_tx_isr()
983 avail_desc(ring->r.wp, rp_idx, ring->r.len) > 4) { in rtw_pci_tx_isr()
986 ring->queue_stopped = false; in rtw_pci_tx_isr()
989 if (++rp_idx >= ring->r.len) in rtw_pci_tx_isr()
992 skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz); in rtw_pci_tx_isr()
997 if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) { in rtw_pci_tx_isr()
998 rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn); in rtw_pci_tx_isr()
1003 if (info->flags & IEEE80211_TX_CTL_NO_ACK) in rtw_pci_tx_isr()
1004 info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED; in rtw_pci_tx_isr()
1006 info->flags |= IEEE80211_TX_STAT_ACK; in rtw_pci_tx_isr()
1012 ring->r.rp = cur_rp; in rtw_pci_tx_isr()
1017 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_rx_isr()
1018 struct napi_struct *napi = &rtwpci->napi; in rtw_pci_rx_isr()
1030 ring = &rtwpci->rx_rings[RTW_RX_QUEUE_MPDU]; in rtw_pci_get_hw_rx_ring_nr()
1033 if (cur_wp >= ring->r.wp) in rtw_pci_get_hw_rx_ring_nr()
1034 count = cur_wp - ring->r.wp; in rtw_pci_get_hw_rx_ring_nr()
1036 count = ring->r.len - (ring->r.wp - cur_wp); in rtw_pci_get_hw_rx_ring_nr()
1044 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_rx_napi()
1045 struct napi_struct *napi = &rtwpci->napi; in rtw_pci_rx_napi()
1046 struct rtw_pci_rx_ring *ring = &rtwpci->rx_rings[RTW_RX_QUEUE_MPDU]; in rtw_pci_rx_napi()
1050 u32 cur_rp = ring->r.rp; in rtw_pci_rx_napi()
1053 u32 pkt_desc_sz = chip->rx_pkt_desc_sz; in rtw_pci_rx_napi()
1054 u32 buf_desc_sz = chip->rx_buf_desc_sz; in rtw_pci_rx_napi()
1062 while (count--) { in rtw_pci_rx_napi()
1064 skb = ring->buf[cur_rp]; in rtw_pci_rx_napi()
1065 dma = *((dma_addr_t *)skb->cb); in rtw_pci_rx_napi()
1066 dma_sync_single_for_cpu(rtwdev->dev, dma, RTK_PCI_RX_BUF_SIZE, in rtw_pci_rx_napi()
1068 rx_desc = skb->data; in rtw_pci_rx_napi()
1084 skb_put_data(new, skb->data, new_len); in rtw_pci_rx_napi()
1094 memcpy(new->cb, &rx_status, sizeof(rx_status)); in rtw_pci_rx_napi()
1095 ieee80211_rx_napi(rtwdev->hw, NULL, new, napi); in rtw_pci_rx_napi()
1100 /* new skb delivered to mac80211, re-enable original skb DMA */ in rtw_pci_rx_napi()
1105 if (++cur_rp >= ring->r.len) in rtw_pci_rx_napi()
1109 ring->r.rp = cur_rp; in rtw_pci_rx_napi()
1113 ring->r.wp = cur_rp; in rtw_pci_rx_napi()
1114 rtw_write16(rtwdev, RTK_PCI_RXBD_IDX_MPDUQ, ring->r.rp); in rtw_pci_rx_napi()
1124 spin_lock_irqsave(&rtwpci->hwirq_lock, flags); in rtw_pci_irq_recognized()
1132 irq_status[0] &= rtwpci->irq_mask[0]; in rtw_pci_irq_recognized()
1133 irq_status[1] &= rtwpci->irq_mask[1]; in rtw_pci_irq_recognized()
1134 irq_status[3] &= rtwpci->irq_mask[3]; in rtw_pci_irq_recognized()
1140 spin_unlock_irqrestore(&rtwpci->hwirq_lock, flags); in rtw_pci_irq_recognized()
1146 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_interrupt_handler()
1152 * the HISRs have been Write-1-cleared for MSI. If not all of the HISRs in rtw_pci_interrupt_handler()
1153 * are cleared, the edge-triggered interrupt will not be generated when in rtw_pci_interrupt_handler()
1164 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_interrupt_threadfn()
1168 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_interrupt_threadfn()
1193 if (rtwpci->running) in rtw_pci_interrupt_threadfn()
1195 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_interrupt_threadfn()
1203 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_io_mapping()
1215 rtwpci->mmap = pci_iomap(pdev, bar_id, len); in rtw_pci_io_mapping()
1216 if (!rtwpci->mmap) { in rtw_pci_io_mapping()
1219 return -ENOMEM; in rtw_pci_io_mapping()
1228 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_io_unmapping()
1230 if (rtwpci->mmap) { in rtw_pci_io_unmapping()
1231 pci_iounmap(pdev, rtwpci->mmap); in rtw_pci_io_unmapping()
1281 return -EIO; in rtw_dbi_read8()
1375 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_link_ps()
1377 /* Like CLKREQ, ASPM is also implemented by two HW modules, and can in rtw_pci_link_ps()
1378 * only be enabled when host supports it. in rtw_pci_link_ps()
1382 * experienced some inter-operability issues that the link tends in rtw_pci_link_ps()
1387 if (!(rtwpci->link_ctrl & PCI_EXP_LNKCTL_ASPM_L1)) in rtw_pci_link_ps()
1390 if ((enter && atomic_dec_if_positive(&rtwpci->link_usage) == 0) || in rtw_pci_link_ps()
1391 (!enter && atomic_inc_return(&rtwpci->link_usage) == 1)) in rtw_pci_link_ps()
1397 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_link_cfg()
1398 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_link_cfg()
1399 struct pci_dev *pdev = rtwpci->pdev; in rtw_pci_link_cfg()
1406 if (chip->id == RTW_CHIP_TYPE_8822C) in rtw_pci_link_cfg()
1411 * check if host supports CLKREQ/ASPM to enable the HW module. in rtw_pci_link_cfg()
1416 * CLKREQ/ASPM mechanisms, it is default disabled. Because sometimes in rtw_pci_link_cfg()
1418 * settings (ex. CLKREQ# not Bi-Direction), it could lead to device in rtw_pci_link_cfg()
1434 rtwpci->link_ctrl = link_ctrl; in rtw_pci_link_cfg()
1439 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_interface_cfg()
1441 switch (chip->id) { in rtw_pci_interface_cfg()
1443 if (rtwdev->hal.cut_version >= RTW_CHIP_VER_CUT_D) in rtw_pci_interface_cfg()
1454 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_phy_cfg()
1455 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_phy_cfg()
1456 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_pci_phy_cfg()
1457 struct pci_dev *pdev = rtwpci->pdev; in rtw_pci_phy_cfg()
1465 cut = BIT(0) << rtwdev->hal.cut_version; in rtw_pci_phy_cfg()
1467 for (i = 0; i < chip->intf_table->n_gen1_para; i++) { in rtw_pci_phy_cfg()
1468 para = &chip->intf_table->gen1_para[i]; in rtw_pci_phy_cfg()
1469 if (!(para->cut_mask & cut)) in rtw_pci_phy_cfg()
1471 if (para->offset == 0xffff) in rtw_pci_phy_cfg()
1473 offset = para->offset; in rtw_pci_phy_cfg()
1474 value = para->value; in rtw_pci_phy_cfg()
1475 if (para->ip_sel == RTW_IP_SEL_PHY) in rtw_pci_phy_cfg()
1481 for (i = 0; i < chip->intf_table->n_gen2_para; i++) { in rtw_pci_phy_cfg()
1482 para = &chip->intf_table->gen2_para[i]; in rtw_pci_phy_cfg()
1483 if (!(para->cut_mask & cut)) in rtw_pci_phy_cfg()
1485 if (para->offset == 0xffff) in rtw_pci_phy_cfg()
1487 offset = para->offset; in rtw_pci_phy_cfg()
1488 value = para->value; in rtw_pci_phy_cfg()
1489 if (para->ip_sel == RTW_IP_SEL_PHY) in rtw_pci_phy_cfg()
1498 if (chip->id == RTW_CHIP_TYPE_8821C) { in rtw_pci_phy_cfg()
1506 if (chip->id == RTW_CHIP_TYPE_8822C && efuse->rfe_option == 5) in rtw_pci_phy_cfg()
1513 struct rtw_dev *rtwdev = hw->priv; in rtw_pci_suspend()
1514 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_suspend()
1515 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_pci_suspend()
1517 if (chip->id == RTW_CHIP_TYPE_8822C && efuse->rfe_option == 6) in rtw_pci_suspend()
1525 struct rtw_dev *rtwdev = hw->priv; in rtw_pci_resume()
1526 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_resume()
1527 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_pci_resume()
1529 if (chip->id == RTW_CHIP_TYPE_8822C && efuse->rfe_option == 6) in rtw_pci_resume()
1548 pci_set_drvdata(pdev, rtwdev->hw); in rtw_pci_claim()
1549 SET_IEEE80211_DEV(rtwdev->hw, &pdev->dev); in rtw_pci_claim()
1564 rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_setup_resource()
1565 rtwpci->pdev = pdev; in rtw_pci_setup_resource()
1632 ret = devm_request_threaded_irq(rtwdev->dev, pdev->irq, in rtw_pci_request_irq()
1646 devm_free_irq(rtwdev->dev, pdev->irq, rtwdev); in rtw_pci_free_irq()
1657 if (rtwpci->rx_no_aspm) in rtw_pci_napi_poll()
1664 budget - work_done); in rtw_pci_napi_poll()
1671 spin_lock_bh(&rtwpci->irq_lock); in rtw_pci_napi_poll()
1672 if (rtwpci->running) in rtw_pci_napi_poll()
1674 spin_unlock_bh(&rtwpci->irq_lock); in rtw_pci_napi_poll()
1683 if (rtwpci->rx_no_aspm) in rtw_pci_napi_poll()
1691 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_init()
1693 rtwpci->netdev = alloc_netdev_dummy(0); in rtw_pci_napi_init()
1694 if (!rtwpci->netdev) in rtw_pci_napi_init()
1695 return -ENOMEM; in rtw_pci_napi_init()
1697 netif_napi_add(rtwpci->netdev, &rtwpci->napi, rtw_pci_napi_poll); in rtw_pci_napi_init()
1703 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_deinit()
1706 netif_napi_del(&rtwpci->napi); in rtw_pci_napi_deinit()
1707 free_netdev(rtwpci->netdev); in rtw_pci_napi_deinit()
1723 struct rtw_dev *rtwdev = hw->priv; in rtw_pci_io_slot_reset()
1760 dev_err(&pdev->dev, "failed to allocate hw\n"); in rtw_pci_probe()
1761 return -ENOMEM; in rtw_pci_probe()
1764 rtwdev = hw->priv; in rtw_pci_probe()
1765 rtwdev->hw = hw; in rtw_pci_probe()
1766 rtwdev->dev = &pdev->dev; in rtw_pci_probe()
1767 rtwdev->chip = (struct rtw_chip_info *)id->driver_data; in rtw_pci_probe()
1768 rtwdev->hci.ops = &rtw_pci_ops; in rtw_pci_probe()
1769 rtwdev->hci.type = RTW_HCI_TYPE_PCIE; in rtw_pci_probe()
1771 rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_probe()
1772 atomic_set(&rtwpci->link_usage, 1); in rtw_pci_probe()
1780 pdev->vendor, pdev->device, pdev->revision); in rtw_pci_probe()
1807 if (rtwdev->chip->id == RTW_CHIP_TYPE_8821C && bridge->vendor == PCI_VENDOR_ID_INTEL) in rtw_pci_probe()
1808 rtwpci->rx_no_aspm = true; in rtw_pci_probe()
1852 rtwdev = hw->priv; in rtw_pci_remove()
1853 rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_remove()
1875 rtwdev = hw->priv; in rtw_pci_shutdown()
1876 chip = rtwdev->chip; in rtw_pci_shutdown()
1878 if (chip->ops->shutdown) in rtw_pci_shutdown()
1879 chip->ops->shutdown(rtwdev); in rtw_pci_shutdown()