Lines Matching refs:rtwdev

50 static u8 rtw_pci_read8(struct rtw_dev *rtwdev, u32 addr)  in rtw_pci_read8()  argument
52 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_read8()
57 static u16 rtw_pci_read16(struct rtw_dev *rtwdev, u32 addr) in rtw_pci_read16() argument
59 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_read16()
64 static u32 rtw_pci_read32(struct rtw_dev *rtwdev, u32 addr) in rtw_pci_read32() argument
66 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_read32()
71 static void rtw_pci_write8(struct rtw_dev *rtwdev, u32 addr, u8 val) in rtw_pci_write8() argument
73 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_write8()
78 static void rtw_pci_write16(struct rtw_dev *rtwdev, u32 addr, u16 val) in rtw_pci_write16() argument
80 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_write16()
85 static void rtw_pci_write32(struct rtw_dev *rtwdev, u32 addr, u32 val) in rtw_pci_write32() argument
87 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_write32()
99 static void rtw_pci_free_tx_ring_skbs(struct rtw_dev *rtwdev, in rtw_pci_free_tx_ring_skbs() argument
102 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_tx_ring_skbs()
118 static void rtw_pci_free_tx_ring(struct rtw_dev *rtwdev, in rtw_pci_free_tx_ring() argument
121 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_tx_ring()
126 rtw_pci_free_tx_ring_skbs(rtwdev, tx_ring); in rtw_pci_free_tx_ring()
133 static void rtw_pci_free_rx_ring_skbs(struct rtw_dev *rtwdev, in rtw_pci_free_rx_ring_skbs() argument
136 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_rx_ring_skbs()
154 static void rtw_pci_free_rx_ring(struct rtw_dev *rtwdev, in rtw_pci_free_rx_ring() argument
157 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_free_rx_ring()
161 rtw_pci_free_rx_ring_skbs(rtwdev, rx_ring); in rtw_pci_free_rx_ring()
166 static void rtw_pci_free_trx_ring(struct rtw_dev *rtwdev) in rtw_pci_free_trx_ring() argument
168 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_free_trx_ring()
175 rtw_pci_free_tx_ring(rtwdev, tx_ring); in rtw_pci_free_trx_ring()
180 rtw_pci_free_rx_ring(rtwdev, rx_ring); in rtw_pci_free_trx_ring()
184 static int rtw_pci_init_tx_ring(struct rtw_dev *rtwdev, in rtw_pci_init_tx_ring() argument
188 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_init_tx_ring()
194 rtw_err(rtwdev, "len %d exceeds maximum TX entries\n", len); in rtw_pci_init_tx_ring()
200 rtw_err(rtwdev, "failed to allocate tx ring\n"); in rtw_pci_init_tx_ring()
215 static int rtw_pci_reset_rx_desc(struct rtw_dev *rtwdev, struct sk_buff *skb, in rtw_pci_reset_rx_desc() argument
219 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_reset_rx_desc()
241 static void rtw_pci_sync_rx_desc_device(struct rtw_dev *rtwdev, dma_addr_t dma, in rtw_pci_sync_rx_desc_device() argument
245 struct device *dev = rtwdev->dev; in rtw_pci_sync_rx_desc_device()
258 static int rtw_pci_init_rx_ring(struct rtw_dev *rtwdev, in rtw_pci_init_rx_ring() argument
262 struct pci_dev *pdev = to_pci_dev(rtwdev->dev); in rtw_pci_init_rx_ring()
273 rtw_err(rtwdev, "failed to allocate rx ring\n"); in rtw_pci_init_rx_ring()
288 ret = rtw_pci_reset_rx_desc(rtwdev, skb, rx_ring, i, desc_size); in rtw_pci_init_rx_ring()
316 rtw_err(rtwdev, "failed to init rx buffer\n"); in rtw_pci_init_rx_ring()
321 static int rtw_pci_init_trx_ring(struct rtw_dev *rtwdev) in rtw_pci_init_trx_ring() argument
323 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_init_trx_ring()
326 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_init_trx_ring()
337 ret = rtw_pci_init_tx_ring(rtwdev, tx_ring, tx_desc_size, len); in rtw_pci_init_trx_ring()
346 ret = rtw_pci_init_rx_ring(rtwdev, rx_ring, rx_desc_size, in rtw_pci_init_trx_ring()
358 rtw_pci_free_tx_ring(rtwdev, tx_ring); in rtw_pci_init_trx_ring()
364 rtw_pci_free_rx_ring(rtwdev, rx_ring); in rtw_pci_init_trx_ring()
370 static void rtw_pci_deinit(struct rtw_dev *rtwdev) in rtw_pci_deinit() argument
372 rtw_pci_free_trx_ring(rtwdev); in rtw_pci_deinit()
375 static int rtw_pci_init(struct rtw_dev *rtwdev) in rtw_pci_init() argument
377 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_init()
396 ret = rtw_pci_init_trx_ring(rtwdev); in rtw_pci_init()
401 static void rtw_pci_reset_buf_desc(struct rtw_dev *rtwdev) in rtw_pci_reset_buf_desc() argument
403 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_reset_buf_desc()
408 tmp = rtw_read8(rtwdev, RTK_PCI_CTRL + 3); in rtw_pci_reset_buf_desc()
409 rtw_write8(rtwdev, RTK_PCI_CTRL + 3, tmp | 0xf7); in rtw_pci_reset_buf_desc()
412 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_BCNQ, dma); in rtw_pci_reset_buf_desc()
414 if (!rtw_chip_wcpu_11n(rtwdev)) { in rtw_pci_reset_buf_desc()
419 rtw_write16(rtwdev, RTK_PCI_TXBD_NUM_H2CQ, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
420 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_H2CQ, dma); in rtw_pci_reset_buf_desc()
427 rtw_write16(rtwdev, RTK_PCI_TXBD_NUM_BKQ, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
428 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_BKQ, dma); in rtw_pci_reset_buf_desc()
434 rtw_write16(rtwdev, RTK_PCI_TXBD_NUM_BEQ, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
435 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_BEQ, dma); in rtw_pci_reset_buf_desc()
441 rtw_write16(rtwdev, RTK_PCI_TXBD_NUM_VOQ, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
442 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_VOQ, dma); in rtw_pci_reset_buf_desc()
448 rtw_write16(rtwdev, RTK_PCI_TXBD_NUM_VIQ, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
449 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_VIQ, dma); in rtw_pci_reset_buf_desc()
455 rtw_write16(rtwdev, RTK_PCI_TXBD_NUM_MGMTQ, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
456 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_MGMTQ, dma); in rtw_pci_reset_buf_desc()
462 rtw_write16(rtwdev, RTK_PCI_TXBD_NUM_HI0Q, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
463 rtw_write32(rtwdev, RTK_PCI_TXBD_DESA_HI0Q, dma); in rtw_pci_reset_buf_desc()
469 rtw_write16(rtwdev, RTK_PCI_RXBD_NUM_MPDUQ, len & TRX_BD_IDX_MASK); in rtw_pci_reset_buf_desc()
470 rtw_write32(rtwdev, RTK_PCI_RXBD_DESA_MPDUQ, dma); in rtw_pci_reset_buf_desc()
473 rtw_write32(rtwdev, RTK_PCI_TXBD_RWPTR_CLR, 0xffffffff); in rtw_pci_reset_buf_desc()
476 if (rtw_chip_wcpu_11ac(rtwdev)) in rtw_pci_reset_buf_desc()
477 rtw_write32_set(rtwdev, RTK_PCI_TXBD_H2CQ_CSR, in rtw_pci_reset_buf_desc()
481 static void rtw_pci_reset_trx_ring(struct rtw_dev *rtwdev) in rtw_pci_reset_trx_ring() argument
483 rtw_pci_reset_buf_desc(rtwdev); in rtw_pci_reset_trx_ring()
486 static void rtw_pci_enable_interrupt(struct rtw_dev *rtwdev, in rtw_pci_enable_interrupt() argument
494 rtw_write32(rtwdev, RTK_PCI_HIMR0, rtwpci->irq_mask[0] & ~imr0_unmask); in rtw_pci_enable_interrupt()
495 rtw_write32(rtwdev, RTK_PCI_HIMR1, rtwpci->irq_mask[1]); in rtw_pci_enable_interrupt()
496 if (rtw_chip_wcpu_11ac(rtwdev)) in rtw_pci_enable_interrupt()
497 rtw_write32(rtwdev, RTK_PCI_HIMR3, rtwpci->irq_mask[3]); in rtw_pci_enable_interrupt()
504 static void rtw_pci_disable_interrupt(struct rtw_dev *rtwdev, in rtw_pci_disable_interrupt() argument
514 rtw_write32(rtwdev, RTK_PCI_HIMR0, 0); in rtw_pci_disable_interrupt()
515 rtw_write32(rtwdev, RTK_PCI_HIMR1, 0); in rtw_pci_disable_interrupt()
516 if (rtw_chip_wcpu_11ac(rtwdev)) in rtw_pci_disable_interrupt()
517 rtw_write32(rtwdev, RTK_PCI_HIMR3, 0); in rtw_pci_disable_interrupt()
525 static void rtw_pci_dma_reset(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci) in rtw_pci_dma_reset() argument
528 rtw_write32_set(rtwdev, RTK_PCI_CTRL, in rtw_pci_dma_reset()
533 static int rtw_pci_setup(struct rtw_dev *rtwdev) in rtw_pci_setup() argument
535 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_setup()
537 rtw_pci_reset_trx_ring(rtwdev); in rtw_pci_setup()
538 rtw_pci_dma_reset(rtwdev, rtwpci); in rtw_pci_setup()
543 static void rtw_pci_dma_release(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci) in rtw_pci_dma_release() argument
548 rtw_pci_reset_trx_ring(rtwdev); in rtw_pci_dma_release()
551 rtw_pci_free_tx_ring_skbs(rtwdev, tx_ring); in rtw_pci_dma_release()
555 static void rtw_pci_napi_start(struct rtw_dev *rtwdev) in rtw_pci_napi_start() argument
557 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_start()
565 static void rtw_pci_napi_stop(struct rtw_dev *rtwdev) in rtw_pci_napi_stop() argument
567 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_stop()
576 static int rtw_pci_start(struct rtw_dev *rtwdev) in rtw_pci_start() argument
578 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_start()
580 rtw_pci_napi_start(rtwdev); in rtw_pci_start()
584 rtw_pci_enable_interrupt(rtwdev, rtwpci, false); in rtw_pci_start()
590 static void rtw_pci_stop(struct rtw_dev *rtwdev) in rtw_pci_stop() argument
592 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_stop()
597 rtw_pci_disable_interrupt(rtwdev, rtwpci); in rtw_pci_stop()
601 rtw_pci_napi_stop(rtwdev); in rtw_pci_stop()
604 rtw_pci_dma_release(rtwdev, rtwpci); in rtw_pci_stop()
608 static void rtw_pci_deep_ps_enter(struct rtw_dev *rtwdev) in rtw_pci_deep_ps_enter() argument
610 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_deep_ps_enter()
636 rtw_dbg(rtwdev, RTW_DBG_PS, in rtw_pci_deep_ps_enter()
641 set_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags); in rtw_pci_deep_ps_enter()
642 rtw_power_mode_change(rtwdev, true); in rtw_pci_deep_ps_enter()
645 static void rtw_pci_deep_ps_leave(struct rtw_dev *rtwdev) in rtw_pci_deep_ps_leave() argument
647 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_deep_ps_leave()
651 if (test_and_clear_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_pci_deep_ps_leave()
652 rtw_power_mode_change(rtwdev, false); in rtw_pci_deep_ps_leave()
655 static void rtw_pci_deep_ps(struct rtw_dev *rtwdev, bool enter) in rtw_pci_deep_ps() argument
657 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_deep_ps()
661 if (enter && !test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_pci_deep_ps()
662 rtw_pci_deep_ps_enter(rtwdev); in rtw_pci_deep_ps()
664 if (!enter && test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_pci_deep_ps()
665 rtw_pci_deep_ps_leave(rtwdev); in rtw_pci_deep_ps()
714 static void rtw_pci_dma_check(struct rtw_dev *rtwdev, in rtw_pci_dma_check() argument
718 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_dma_check()
719 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_dma_check()
730 rtw_warn(rtwdev, "pci bus timeout, check dma status\n"); in rtw_pci_dma_check()
735 static u32 __pci_get_hw_tx_ring_rp(struct rtw_dev *rtwdev, u8 pci_q) in __pci_get_hw_tx_ring_rp() argument
738 u32 bd_idx = rtw_read16(rtwdev, bd_idx_addr + 2); in __pci_get_hw_tx_ring_rp()
743 static void __pci_flush_queue(struct rtw_dev *rtwdev, u8 pci_q, bool drop) in __pci_flush_queue() argument
745 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in __pci_flush_queue()
756 cur_rp = __pci_get_hw_tx_ring_rp(rtwdev, pci_q); in __pci_flush_queue()
764 rtw_warn(rtwdev, "timed out to flush pci tx ring[%d]\n", pci_q); in __pci_flush_queue()
767 static void __rtw_pci_flush_queues(struct rtw_dev *rtwdev, u32 pci_queues, in __rtw_pci_flush_queues() argument
778 __pci_flush_queue(rtwdev, q, drop); in __rtw_pci_flush_queues()
782 static void rtw_pci_flush_queues(struct rtw_dev *rtwdev, u32 queues, bool drop) in rtw_pci_flush_queues() argument
790 if (queues == BIT(rtwdev->hw->queues) - 1) { in rtw_pci_flush_queues()
793 for (i = 0; i < rtwdev->hw->queues; i++) in rtw_pci_flush_queues()
798 __rtw_pci_flush_queues(rtwdev, pci_queues, drop); in rtw_pci_flush_queues()
801 static void rtw_pci_tx_kick_off_queue(struct rtw_dev *rtwdev, u8 queue) in rtw_pci_tx_kick_off_queue() argument
803 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_kick_off_queue()
811 rtw_pci_deep_ps_leave(rtwdev); in rtw_pci_tx_kick_off_queue()
812 rtw_write16(rtwdev, bd_idx, ring->r.wp & TRX_BD_IDX_MASK); in rtw_pci_tx_kick_off_queue()
816 static void rtw_pci_tx_kick_off(struct rtw_dev *rtwdev) in rtw_pci_tx_kick_off() argument
818 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_kick_off()
823 rtw_pci_tx_kick_off_queue(rtwdev, queue); in rtw_pci_tx_kick_off()
826 static int rtw_pci_tx_write_data(struct rtw_dev *rtwdev, in rtw_pci_tx_write_data() argument
830 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_write_data()
831 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_tx_write_data()
895 static int rtw_pci_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf, in rtw_pci_write_data_rsvd_page() argument
903 skb = rtw_tx_write_data_rsvd_page_get(rtwdev, &pkt_info, buf, size); in rtw_pci_write_data_rsvd_page()
907 ret = rtw_pci_tx_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_BCN); in rtw_pci_write_data_rsvd_page()
909 rtw_err(rtwdev, "failed to write rsvd page data\n"); in rtw_pci_write_data_rsvd_page()
914 reg_bcn_work = rtw_read8(rtwdev, RTK_PCI_TXBD_BCN_WORK); in rtw_pci_write_data_rsvd_page()
916 rtw_write8(rtwdev, RTK_PCI_TXBD_BCN_WORK, reg_bcn_work); in rtw_pci_write_data_rsvd_page()
921 static int rtw_pci_write_data_h2c(struct rtw_dev *rtwdev, u8 *buf, u32 size) in rtw_pci_write_data_h2c() argument
927 skb = rtw_tx_write_data_h2c_get(rtwdev, &pkt_info, buf, size); in rtw_pci_write_data_h2c()
931 ret = rtw_pci_tx_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_H2C); in rtw_pci_write_data_h2c()
933 rtw_err(rtwdev, "failed to write h2c data\n"); in rtw_pci_write_data_h2c()
937 rtw_pci_tx_kick_off_queue(rtwdev, RTW_TX_QUEUE_H2C); in rtw_pci_write_data_h2c()
942 static int rtw_pci_tx_write(struct rtw_dev *rtwdev, in rtw_pci_tx_write() argument
946 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_tx_write()
951 ret = rtw_pci_tx_write_data(rtwdev, pkt_info, skb, queue); in rtw_pci_tx_write()
958 ieee80211_stop_queue(rtwdev->hw, skb_get_queue_mapping(skb)); in rtw_pci_tx_write()
966 static void rtw_pci_tx_isr(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci, in rtw_pci_tx_isr() argument
969 struct ieee80211_hw *hw = rtwdev->hw; in rtw_pci_tx_isr()
982 bd_idx = rtw_read32(rtwdev, bd_idx_addr); in rtw_pci_tx_isr()
994 rtw_err(rtwdev, "failed to dequeue %d skb TX queue %d, BD=0x%08x, rp %d -> %d\n", in rtw_pci_tx_isr()
1018 skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz); in rtw_pci_tx_isr()
1024 rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn); in rtw_pci_tx_isr()
1041 static void rtw_pci_rx_isr(struct rtw_dev *rtwdev) in rtw_pci_rx_isr() argument
1043 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_rx_isr()
1049 static int rtw_pci_get_hw_rx_ring_nr(struct rtw_dev *rtwdev, in rtw_pci_get_hw_rx_ring_nr() argument
1057 tmp = rtw_read32(rtwdev, RTK_PCI_RXBD_IDX_MPDUQ); in rtw_pci_get_hw_rx_ring_nr()
1067 static u32 rtw_pci_rx_napi(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci, in rtw_pci_rx_napi() argument
1070 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_rx_napi()
1085 count = rtw_pci_get_hw_rx_ring_nr(rtwdev, rtwpci); in rtw_pci_rx_napi()
1089 rtw_pci_dma_check(rtwdev, ring, cur_rp); in rtw_pci_rx_napi()
1092 dma_sync_single_for_cpu(rtwdev->dev, dma, RTK_PCI_RX_BUF_SIZE, in rtw_pci_rx_napi()
1095 chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status); in rtw_pci_rx_napi()
1113 rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, new); in rtw_pci_rx_napi()
1118 rtw_rx_stats(rtwdev, pkt_stat.vif, new); in rtw_pci_rx_napi()
1120 ieee80211_rx_napi(rtwdev->hw, NULL, new, napi); in rtw_pci_rx_napi()
1126 rtw_pci_sync_rx_desc_device(rtwdev, dma, ring, cur_rp, in rtw_pci_rx_napi()
1139 rtw_write16(rtwdev, RTK_PCI_RXBD_IDX_MPDUQ, ring->r.rp); in rtw_pci_rx_napi()
1144 static void rtw_pci_irq_recognized(struct rtw_dev *rtwdev, in rtw_pci_irq_recognized() argument
1151 irq_status[0] = rtw_read32(rtwdev, RTK_PCI_HISR0); in rtw_pci_irq_recognized()
1152 irq_status[1] = rtw_read32(rtwdev, RTK_PCI_HISR1); in rtw_pci_irq_recognized()
1153 if (rtw_chip_wcpu_11ac(rtwdev)) in rtw_pci_irq_recognized()
1154 irq_status[3] = rtw_read32(rtwdev, RTK_PCI_HISR3); in rtw_pci_irq_recognized()
1160 rtw_write32(rtwdev, RTK_PCI_HISR0, irq_status[0]); in rtw_pci_irq_recognized()
1161 rtw_write32(rtwdev, RTK_PCI_HISR1, irq_status[1]); in rtw_pci_irq_recognized()
1162 if (rtw_chip_wcpu_11ac(rtwdev)) in rtw_pci_irq_recognized()
1163 rtw_write32(rtwdev, RTK_PCI_HISR3, irq_status[3]); in rtw_pci_irq_recognized()
1170 struct rtw_dev *rtwdev = dev; in rtw_pci_interrupt_handler() local
1171 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_interrupt_handler()
1181 rtw_pci_disable_interrupt(rtwdev, rtwpci); in rtw_pci_interrupt_handler()
1188 struct rtw_dev *rtwdev = dev; in rtw_pci_interrupt_threadfn() local
1189 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_interrupt_threadfn()
1194 rtw_pci_irq_recognized(rtwdev, rtwpci, irq_status); in rtw_pci_interrupt_threadfn()
1197 rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_MGMT); in rtw_pci_interrupt_threadfn()
1199 rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_HI0); in rtw_pci_interrupt_threadfn()
1201 rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_BE); in rtw_pci_interrupt_threadfn()
1203 rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_BK); in rtw_pci_interrupt_threadfn()
1205 rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_VO); in rtw_pci_interrupt_threadfn()
1207 rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_VI); in rtw_pci_interrupt_threadfn()
1209 rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_H2C); in rtw_pci_interrupt_threadfn()
1211 rtw_pci_rx_isr(rtwdev); in rtw_pci_interrupt_threadfn()
1215 rtw_fw_c2h_cmd_isr(rtwdev); in rtw_pci_interrupt_threadfn()
1219 rtw_pci_enable_interrupt(rtwdev, rtwpci, rx); in rtw_pci_interrupt_threadfn()
1225 static int rtw_pci_io_mapping(struct rtw_dev *rtwdev, in rtw_pci_io_mapping() argument
1228 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_io_mapping()
1235 rtw_err(rtwdev, "failed to request pci regions\n"); in rtw_pci_io_mapping()
1243 rtw_err(rtwdev, "failed to map pci memory\n"); in rtw_pci_io_mapping()
1250 static void rtw_pci_io_unmapping(struct rtw_dev *rtwdev, in rtw_pci_io_unmapping() argument
1253 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_io_unmapping()
1261 static void rtw_dbi_write8(struct rtw_dev *rtwdev, u16 addr, u8 data) in rtw_dbi_write8() argument
1270 rtw_write8(rtwdev, REG_DBI_WDATA_V1 + remainder, data); in rtw_dbi_write8()
1271 rtw_write16(rtwdev, REG_DBI_FLAG_V1, write_addr); in rtw_dbi_write8()
1272 rtw_write8(rtwdev, REG_DBI_FLAG_V1 + 2, BIT_DBI_WFLAG >> 16); in rtw_dbi_write8()
1275 flag = rtw_read8(rtwdev, REG_DBI_FLAG_V1 + 2); in rtw_dbi_write8()
1285 static int rtw_dbi_read8(struct rtw_dev *rtwdev, u16 addr, u8 *value) in rtw_dbi_read8() argument
1291 rtw_write16(rtwdev, REG_DBI_FLAG_V1, read_addr); in rtw_dbi_read8()
1292 rtw_write8(rtwdev, REG_DBI_FLAG_V1 + 2, BIT_DBI_RFLAG >> 16); in rtw_dbi_read8()
1295 flag = rtw_read8(rtwdev, REG_DBI_FLAG_V1 + 2); in rtw_dbi_read8()
1298 *value = rtw_read8(rtwdev, read_addr); in rtw_dbi_read8()
1309 static void rtw_mdio_write(struct rtw_dev *rtwdev, u8 addr, u16 data, bool g1) in rtw_mdio_write() argument
1315 rtw_write16(rtwdev, REG_MDIO_V1, data); in rtw_mdio_write()
1319 rtw_write8(rtwdev, REG_PCIE_MIX_CFG, addr & BITS_MDIO_ADDR_MASK); in rtw_mdio_write()
1320 rtw_write8(rtwdev, REG_PCIE_MIX_CFG + 3, page); in rtw_mdio_write()
1321 rtw_write32_mask(rtwdev, REG_PCIE_MIX_CFG, BIT_MDIO_WFLAG_V1, 1); in rtw_mdio_write()
1324 wflag = rtw_read32_mask(rtwdev, REG_PCIE_MIX_CFG, in rtw_mdio_write()
1335 static void rtw_pci_clkreq_set(struct rtw_dev *rtwdev, bool enable) in rtw_pci_clkreq_set() argument
1343 ret = rtw_dbi_read8(rtwdev, RTK_PCIE_LINK_CFG, &value); in rtw_pci_clkreq_set()
1345 rtw_err(rtwdev, "failed to read CLKREQ_L1, ret=%d", ret); in rtw_pci_clkreq_set()
1354 rtw_dbi_write8(rtwdev, RTK_PCIE_LINK_CFG, value); in rtw_pci_clkreq_set()
1357 static void rtw_pci_clkreq_pad_low(struct rtw_dev *rtwdev, bool enable) in rtw_pci_clkreq_pad_low() argument
1362 ret = rtw_dbi_read8(rtwdev, RTK_PCIE_LINK_CFG, &value); in rtw_pci_clkreq_pad_low()
1364 rtw_err(rtwdev, "failed to read CLKREQ_L1, ret=%d", ret); in rtw_pci_clkreq_pad_low()
1373 rtw_dbi_write8(rtwdev, RTK_PCIE_LINK_CFG, value); in rtw_pci_clkreq_pad_low()
1376 static void rtw_pci_aspm_set(struct rtw_dev *rtwdev, bool enable) in rtw_pci_aspm_set() argument
1384 ret = rtw_dbi_read8(rtwdev, RTK_PCIE_LINK_CFG, &value); in rtw_pci_aspm_set()
1386 rtw_err(rtwdev, "failed to read ASPM, ret=%d", ret); in rtw_pci_aspm_set()
1395 rtw_dbi_write8(rtwdev, RTK_PCIE_LINK_CFG, value); in rtw_pci_aspm_set()
1398 static void rtw_pci_link_ps(struct rtw_dev *rtwdev, bool enter) in rtw_pci_link_ps() argument
1400 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_link_ps()
1413 rtw_pci_aspm_set(rtwdev, enter); in rtw_pci_link_ps()
1416 static void rtw_pci_link_cfg(struct rtw_dev *rtwdev) in rtw_pci_link_cfg() argument
1418 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_link_cfg()
1419 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_link_cfg()
1428 rtw_dbi_write8(rtwdev, RTK_PCIE_CLKDLY_CTRL, 0); in rtw_pci_link_cfg()
1448 rtw_err(rtwdev, "failed to read PCI cap, ret=%d\n", ret); in rtw_pci_link_cfg()
1453 rtw_pci_clkreq_set(rtwdev, true); in rtw_pci_link_cfg()
1458 static void rtw_pci_interface_cfg(struct rtw_dev *rtwdev) in rtw_pci_interface_cfg() argument
1460 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_interface_cfg()
1464 if (rtwdev->hal.cut_version >= RTW_CHIP_VER_CUT_D) in rtw_pci_interface_cfg()
1465 rtw_write32_mask(rtwdev, REG_HCI_MIX_CFG, in rtw_pci_interface_cfg()
1473 static void rtw_pci_phy_cfg(struct rtw_dev *rtwdev) in rtw_pci_phy_cfg() argument
1475 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_phy_cfg()
1482 cut = BIT(0) << rtwdev->hal.cut_version; in rtw_pci_phy_cfg()
1493 rtw_mdio_write(rtwdev, offset, value, true); in rtw_pci_phy_cfg()
1495 rtw_dbi_write8(rtwdev, offset, value); in rtw_pci_phy_cfg()
1507 rtw_mdio_write(rtwdev, offset, value, false); in rtw_pci_phy_cfg()
1509 rtw_dbi_write8(rtwdev, offset, value); in rtw_pci_phy_cfg()
1512 rtw_pci_link_cfg(rtwdev); in rtw_pci_phy_cfg()
1518 struct rtw_dev *rtwdev = hw->priv; in rtw_pci_suspend() local
1519 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_suspend()
1520 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_pci_suspend()
1523 rtw_pci_clkreq_pad_low(rtwdev, true); in rtw_pci_suspend()
1530 struct rtw_dev *rtwdev = hw->priv; in rtw_pci_resume() local
1531 struct rtw_chip_info *chip = rtwdev->chip; in rtw_pci_resume()
1532 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_pci_resume()
1535 rtw_pci_clkreq_pad_low(rtwdev, false); in rtw_pci_resume()
1542 static int rtw_pci_claim(struct rtw_dev *rtwdev, struct pci_dev *pdev) in rtw_pci_claim() argument
1548 rtw_err(rtwdev, "failed to enable pci device\n"); in rtw_pci_claim()
1553 pci_set_drvdata(pdev, rtwdev->hw); in rtw_pci_claim()
1554 SET_IEEE80211_DEV(rtwdev->hw, &pdev->dev); in rtw_pci_claim()
1559 static void rtw_pci_declaim(struct rtw_dev *rtwdev, struct pci_dev *pdev) in rtw_pci_declaim() argument
1565 static int rtw_pci_setup_resource(struct rtw_dev *rtwdev, struct pci_dev *pdev) in rtw_pci_setup_resource() argument
1570 rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_setup_resource()
1574 ret = rtw_pci_io_mapping(rtwdev, pdev); in rtw_pci_setup_resource()
1576 rtw_err(rtwdev, "failed to request pci io region\n"); in rtw_pci_setup_resource()
1580 ret = rtw_pci_init(rtwdev); in rtw_pci_setup_resource()
1582 rtw_err(rtwdev, "failed to allocate pci resources\n"); in rtw_pci_setup_resource()
1589 rtw_pci_io_unmapping(rtwdev, pdev); in rtw_pci_setup_resource()
1595 static void rtw_pci_destroy(struct rtw_dev *rtwdev, struct pci_dev *pdev) in rtw_pci_destroy() argument
1597 rtw_pci_deinit(rtwdev); in rtw_pci_destroy()
1598 rtw_pci_io_unmapping(rtwdev, pdev); in rtw_pci_destroy()
1622 static int rtw_pci_request_irq(struct rtw_dev *rtwdev, struct pci_dev *pdev) in rtw_pci_request_irq() argument
1632 rtw_err(rtwdev, "failed to alloc PCI irq vectors\n"); in rtw_pci_request_irq()
1636 ret = devm_request_threaded_irq(rtwdev->dev, pdev->irq, in rtw_pci_request_irq()
1639 IRQF_SHARED, KBUILD_MODNAME, rtwdev); in rtw_pci_request_irq()
1641 rtw_err(rtwdev, "failed to request irq %d\n", ret); in rtw_pci_request_irq()
1648 static void rtw_pci_free_irq(struct rtw_dev *rtwdev, struct pci_dev *pdev) in rtw_pci_free_irq() argument
1650 devm_free_irq(rtwdev->dev, pdev->irq, rtwdev); in rtw_pci_free_irq()
1657 struct rtw_dev *rtwdev = container_of((void *)rtwpci, struct rtw_dev, in rtw_pci_napi_poll() local
1664 work_done_once = rtw_pci_rx_napi(rtwdev, rtwpci, RTW_RX_QUEUE_MPDU, in rtw_pci_napi_poll()
1674 rtw_pci_enable_interrupt(rtwdev, rtwpci, false); in rtw_pci_napi_poll()
1681 if (rtw_pci_get_hw_rx_ring_nr(rtwdev, rtwpci)) in rtw_pci_napi_poll()
1688 static void rtw_pci_napi_init(struct rtw_dev *rtwdev) in rtw_pci_napi_init() argument
1690 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_init()
1697 static void rtw_pci_napi_deinit(struct rtw_dev *rtwdev) in rtw_pci_napi_deinit() argument
1699 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_napi_deinit()
1701 rtw_pci_napi_stop(rtwdev); in rtw_pci_napi_deinit()
1748 struct rtw_dev *rtwdev; in rtw_pci_probe() local
1759 rtwdev = hw->priv; in rtw_pci_probe()
1760 rtwdev->hw = hw; in rtw_pci_probe()
1761 rtwdev->dev = &pdev->dev; in rtw_pci_probe()
1762 rtwdev->chip = (struct rtw_chip_info *)id->driver_data; in rtw_pci_probe()
1763 rtwdev->hci.ops = &rtw_pci_ops; in rtw_pci_probe()
1764 rtwdev->hci.type = RTW_HCI_TYPE_PCIE; in rtw_pci_probe()
1766 ret = rtw_core_init(rtwdev); in rtw_pci_probe()
1770 rtw_dbg(rtwdev, RTW_DBG_PCI, in rtw_pci_probe()
1774 ret = rtw_pci_claim(rtwdev, pdev); in rtw_pci_probe()
1776 rtw_err(rtwdev, "failed to claim pci device\n"); in rtw_pci_probe()
1780 ret = rtw_pci_setup_resource(rtwdev, pdev); in rtw_pci_probe()
1782 rtw_err(rtwdev, "failed to setup pci resources\n"); in rtw_pci_probe()
1786 rtw_pci_napi_init(rtwdev); in rtw_pci_probe()
1788 ret = rtw_chip_info_setup(rtwdev); in rtw_pci_probe()
1790 rtw_err(rtwdev, "failed to setup chip information\n"); in rtw_pci_probe()
1795 rtw_pci_phy_cfg(rtwdev); in rtw_pci_probe()
1797 ret = rtw_register_hw(rtwdev, hw); in rtw_pci_probe()
1799 rtw_err(rtwdev, "failed to register hw\n"); in rtw_pci_probe()
1803 ret = rtw_pci_request_irq(rtwdev, pdev); in rtw_pci_probe()
1812 rtw_pci_napi_deinit(rtwdev); in rtw_pci_probe()
1813 rtw_pci_destroy(rtwdev, pdev); in rtw_pci_probe()
1816 rtw_pci_declaim(rtwdev, pdev); in rtw_pci_probe()
1819 rtw_core_deinit(rtwdev); in rtw_pci_probe()
1831 struct rtw_dev *rtwdev; in rtw_pci_remove() local
1837 rtwdev = hw->priv; in rtw_pci_remove()
1838 rtwpci = (struct rtw_pci *)rtwdev->priv; in rtw_pci_remove()
1840 rtw_unregister_hw(rtwdev, hw); in rtw_pci_remove()
1841 rtw_pci_disable_interrupt(rtwdev, rtwpci); in rtw_pci_remove()
1842 rtw_pci_napi_deinit(rtwdev); in rtw_pci_remove()
1843 rtw_pci_destroy(rtwdev, pdev); in rtw_pci_remove()
1844 rtw_pci_declaim(rtwdev, pdev); in rtw_pci_remove()
1845 rtw_pci_free_irq(rtwdev, pdev); in rtw_pci_remove()
1846 rtw_core_deinit(rtwdev); in rtw_pci_remove()
1854 struct rtw_dev *rtwdev; in rtw_pci_shutdown() local
1860 rtwdev = hw->priv; in rtw_pci_shutdown()
1861 chip = rtwdev->chip; in rtw_pci_shutdown()
1864 chip->ops->shutdown(rtwdev); in rtw_pci_shutdown()