Lines Matching refs:rtwdev

34 static u32 rtw_sdio_to_bus_offset(struct rtw_dev *rtwdev, u32 addr)  in rtw_sdio_to_bus_offset()  argument
48 rtw_warn(rtwdev, "Cannot convert addr 0x%08x to bus offset", in rtw_sdio_to_bus_offset()
55 static bool rtw_sdio_use_memcpy_io(struct rtw_dev *rtwdev, u32 addr, in rtw_sdio_use_memcpy_io() argument
59 test_bit(RTW_FLAG_POWERON, rtwdev->flags); in rtw_sdio_use_memcpy_io()
62 static void rtw_sdio_writel(struct rtw_dev *rtwdev, u32 val, u32 addr, in rtw_sdio_writel() argument
65 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_writel()
69 if (rtw_sdio_use_memcpy_io(rtwdev, addr, 4)) { in rtw_sdio_writel()
83 static void rtw_sdio_writew(struct rtw_dev *rtwdev, u16 val, u32 addr, in rtw_sdio_writew() argument
86 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_writew()
99 static u32 rtw_sdio_readl(struct rtw_dev *rtwdev, u32 addr, int *err_ret) in rtw_sdio_readl() argument
101 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_readl()
105 if (rtw_sdio_use_memcpy_io(rtwdev, addr, 4)) in rtw_sdio_readl()
117 static u16 rtw_sdio_readw(struct rtw_dev *rtwdev, u32 addr, int *err_ret) in rtw_sdio_readw() argument
119 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_readw()
132 static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr, in rtw_sdio_to_io_address() argument
141 return rtw_sdio_to_bus_offset(rtwdev, addr); in rtw_sdio_to_io_address()
144 static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr) in rtw_sdio_use_direct_io() argument
146 return !rtw_sdio_is_sdio30_supported(rtwdev) || in rtw_sdio_use_direct_io()
150 static int rtw_sdio_indirect_reg_cfg(struct rtw_dev *rtwdev, u32 addr, u32 cfg) in rtw_sdio_indirect_reg_cfg() argument
152 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_indirect_reg_cfg()
158 reg_cfg = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_CFG); in rtw_sdio_indirect_reg_cfg()
160 rtw_sdio_writel(rtwdev, addr | cfg | BIT_SDIO_INDIRECT_REG_CFG_UNK20, in rtw_sdio_indirect_reg_cfg()
174 static u8 rtw_sdio_indirect_read8(struct rtw_dev *rtwdev, u32 addr, in rtw_sdio_indirect_read8() argument
177 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_indirect_read8()
180 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr, in rtw_sdio_indirect_read8()
185 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA); in rtw_sdio_indirect_read8()
189 static int rtw_sdio_indirect_read_bytes(struct rtw_dev *rtwdev, u32 addr, in rtw_sdio_indirect_read_bytes() argument
195 buf[i] = rtw_sdio_indirect_read8(rtwdev, addr + i, &ret); in rtw_sdio_indirect_read_bytes()
203 static u16 rtw_sdio_indirect_read16(struct rtw_dev *rtwdev, u32 addr, in rtw_sdio_indirect_read16() argument
210 *err_ret = rtw_sdio_indirect_read_bytes(rtwdev, addr, buf, 2); in rtw_sdio_indirect_read16()
217 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr, in rtw_sdio_indirect_read16()
222 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA); in rtw_sdio_indirect_read16()
223 return rtw_sdio_readw(rtwdev, reg_data, err_ret); in rtw_sdio_indirect_read16()
226 static u32 rtw_sdio_indirect_read32(struct rtw_dev *rtwdev, u32 addr, in rtw_sdio_indirect_read32() argument
233 *err_ret = rtw_sdio_indirect_read_bytes(rtwdev, addr, buf, 4); in rtw_sdio_indirect_read32()
240 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr, in rtw_sdio_indirect_read32()
245 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA); in rtw_sdio_indirect_read32()
246 return rtw_sdio_readl(rtwdev, reg_data, err_ret); in rtw_sdio_indirect_read32()
249 static u8 rtw_sdio_read8(struct rtw_dev *rtwdev, u32 addr) in rtw_sdio_read8() argument
251 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_read8()
256 direct = rtw_sdio_use_direct_io(rtwdev, addr); in rtw_sdio_read8()
257 addr = rtw_sdio_to_io_address(rtwdev, addr, direct); in rtw_sdio_read8()
266 val = rtw_sdio_indirect_read8(rtwdev, addr, &ret); in rtw_sdio_read8()
272 rtw_warn(rtwdev, "sdio read8 failed (0x%x): %d", addr, ret); in rtw_sdio_read8()
277 static u16 rtw_sdio_read16(struct rtw_dev *rtwdev, u32 addr) in rtw_sdio_read16() argument
279 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_read16()
284 direct = rtw_sdio_use_direct_io(rtwdev, addr); in rtw_sdio_read16()
285 addr = rtw_sdio_to_io_address(rtwdev, addr, direct); in rtw_sdio_read16()
292 val = rtw_sdio_readw(rtwdev, addr, &ret); in rtw_sdio_read16()
294 val = rtw_sdio_indirect_read16(rtwdev, addr, &ret); in rtw_sdio_read16()
300 rtw_warn(rtwdev, "sdio read16 failed (0x%x): %d", addr, ret); in rtw_sdio_read16()
305 static u32 rtw_sdio_read32(struct rtw_dev *rtwdev, u32 addr) in rtw_sdio_read32() argument
307 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_read32()
312 direct = rtw_sdio_use_direct_io(rtwdev, addr); in rtw_sdio_read32()
313 addr = rtw_sdio_to_io_address(rtwdev, addr, direct); in rtw_sdio_read32()
320 val = rtw_sdio_readl(rtwdev, addr, &ret); in rtw_sdio_read32()
322 val = rtw_sdio_indirect_read32(rtwdev, addr, &ret); in rtw_sdio_read32()
328 rtw_warn(rtwdev, "sdio read32 failed (0x%x): %d", addr, ret); in rtw_sdio_read32()
333 static void rtw_sdio_indirect_write8(struct rtw_dev *rtwdev, u8 val, u32 addr, in rtw_sdio_indirect_write8() argument
336 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_indirect_write8()
339 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA); in rtw_sdio_indirect_write8()
344 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr, in rtw_sdio_indirect_write8()
348 static void rtw_sdio_indirect_write16(struct rtw_dev *rtwdev, u16 val, u32 addr, in rtw_sdio_indirect_write16() argument
354 addr = rtw_sdio_to_io_address(rtwdev, addr, true); in rtw_sdio_indirect_write16()
355 rtw_sdio_writew(rtwdev, val, addr, err_ret); in rtw_sdio_indirect_write16()
359 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA); in rtw_sdio_indirect_write16()
360 rtw_sdio_writew(rtwdev, val, reg_data, err_ret); in rtw_sdio_indirect_write16()
364 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr, in rtw_sdio_indirect_write16()
369 static void rtw_sdio_indirect_write32(struct rtw_dev *rtwdev, u32 val, in rtw_sdio_indirect_write32() argument
375 addr = rtw_sdio_to_io_address(rtwdev, addr, true); in rtw_sdio_indirect_write32()
376 rtw_sdio_writel(rtwdev, val, addr, err_ret); in rtw_sdio_indirect_write32()
380 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA); in rtw_sdio_indirect_write32()
381 rtw_sdio_writel(rtwdev, val, reg_data, err_ret); in rtw_sdio_indirect_write32()
383 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr, in rtw_sdio_indirect_write32()
388 static void rtw_sdio_write8(struct rtw_dev *rtwdev, u32 addr, u8 val) in rtw_sdio_write8() argument
390 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_write8()
394 direct = rtw_sdio_use_direct_io(rtwdev, addr); in rtw_sdio_write8()
395 addr = rtw_sdio_to_io_address(rtwdev, addr, direct); in rtw_sdio_write8()
404 rtw_sdio_indirect_write8(rtwdev, val, addr, &ret); in rtw_sdio_write8()
410 rtw_warn(rtwdev, "sdio write8 failed (0x%x): %d", addr, ret); in rtw_sdio_write8()
413 static void rtw_sdio_write16(struct rtw_dev *rtwdev, u32 addr, u16 val) in rtw_sdio_write16() argument
415 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_write16()
419 direct = rtw_sdio_use_direct_io(rtwdev, addr); in rtw_sdio_write16()
420 addr = rtw_sdio_to_io_address(rtwdev, addr, direct); in rtw_sdio_write16()
427 rtw_sdio_writew(rtwdev, val, addr, &ret); in rtw_sdio_write16()
429 rtw_sdio_indirect_write16(rtwdev, val, addr, &ret); in rtw_sdio_write16()
435 rtw_warn(rtwdev, "sdio write16 failed (0x%x): %d", addr, ret); in rtw_sdio_write16()
438 static void rtw_sdio_write32(struct rtw_dev *rtwdev, u32 addr, u32 val) in rtw_sdio_write32() argument
440 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_write32()
444 direct = rtw_sdio_use_direct_io(rtwdev, addr); in rtw_sdio_write32()
445 addr = rtw_sdio_to_io_address(rtwdev, addr, direct); in rtw_sdio_write32()
452 rtw_sdio_writel(rtwdev, val, addr, &ret); in rtw_sdio_write32()
454 rtw_sdio_indirect_write32(rtwdev, val, addr, &ret); in rtw_sdio_write32()
460 rtw_warn(rtwdev, "sdio write32 failed (0x%x): %d", addr, ret); in rtw_sdio_write32()
463 static u32 rtw_sdio_get_tx_addr(struct rtw_dev *rtwdev, size_t size, in rtw_sdio_get_tx_addr() argument
490 rtw_warn(rtwdev, "Unsupported queue for TX addr: 0x%02x\n", in rtw_sdio_get_tx_addr()
500 static int rtw_sdio_read_port(struct rtw_dev *rtwdev, u8 *buf, size_t count) in rtw_sdio_read_port() argument
502 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_read_port()
519 rtw_warn(rtwdev, in rtw_sdio_read_port()
544 static int rtw_sdio_check_free_txpg(struct rtw_dev *rtwdev, u8 queue, in rtw_sdio_check_free_txpg() argument
549 if (rtw_chip_wcpu_11n(rtwdev)) { in rtw_sdio_check_free_txpg()
552 free_txpg = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG); in rtw_sdio_check_free_txpg()
573 rtw_warn(rtwdev, "Unknown mapping for queue %u\n", queue); in rtw_sdio_check_free_txpg()
582 free_txpg[0] = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG); in rtw_sdio_check_free_txpg()
583 free_txpg[1] = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG + 4); in rtw_sdio_check_free_txpg()
584 free_txpg[2] = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG + 8); in rtw_sdio_check_free_txpg()
608 rtw_warn(rtwdev, "Unknown mapping for queue %u\n", queue); in rtw_sdio_check_free_txpg()
616 pages_needed = DIV_ROUND_UP(count, rtwdev->chip->page_size); in rtw_sdio_check_free_txpg()
619 rtw_dbg(rtwdev, RTW_DBG_SDIO, in rtw_sdio_check_free_txpg()
628 static int rtw_sdio_write_port(struct rtw_dev *rtwdev, struct sk_buff *skb, in rtw_sdio_write_port() argument
631 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_write_port()
637 txaddr = rtw_sdio_get_tx_addr(rtwdev, skb->len, queue); in rtw_sdio_write_port()
643 ret = rtw_sdio_check_free_txpg(rtwdev, queue, txsize); in rtw_sdio_write_port()
648 rtw_warn(rtwdev, "Got unaligned SKB in %s() for queue %u\n", in rtw_sdio_write_port()
662 rtw_warn(rtwdev, in rtw_sdio_write_port()
669 static void rtw_sdio_init(struct rtw_dev *rtwdev) in rtw_sdio_init() argument
671 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_init()
676 static void rtw_sdio_enable_rx_aggregation(struct rtw_dev *rtwdev) in rtw_sdio_enable_rx_aggregation() argument
680 if (rtw_chip_wcpu_11n(rtwdev)) { in rtw_sdio_enable_rx_aggregation()
689 rtw_write32_set(rtwdev, REG_RXDMA_AGG_PG_TH, BIT_EN_PRE_CALC); in rtw_sdio_enable_rx_aggregation()
691 rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN); in rtw_sdio_enable_rx_aggregation()
693 rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, in rtw_sdio_enable_rx_aggregation()
697 rtw_write8_set(rtwdev, REG_RXDMA_MODE, BIT_DMA_MODE); in rtw_sdio_enable_rx_aggregation()
700 static void rtw_sdio_enable_interrupt(struct rtw_dev *rtwdev) in rtw_sdio_enable_interrupt() argument
702 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_enable_interrupt()
704 rtw_write32(rtwdev, REG_SDIO_HIMR, rtwsdio->irq_mask); in rtw_sdio_enable_interrupt()
707 static void rtw_sdio_disable_interrupt(struct rtw_dev *rtwdev) in rtw_sdio_disable_interrupt() argument
709 rtw_write32(rtwdev, REG_SDIO_HIMR, 0x0); in rtw_sdio_disable_interrupt()
712 static u8 rtw_sdio_get_tx_qsel(struct rtw_dev *rtwdev, struct sk_buff *skb, in rtw_sdio_get_tx_qsel() argument
721 if (rtw_chip_wcpu_11n(rtwdev)) in rtw_sdio_get_tx_qsel()
732 static int rtw_sdio_setup(struct rtw_dev *rtwdev) in rtw_sdio_setup() argument
738 static int rtw_sdio_start(struct rtw_dev *rtwdev) in rtw_sdio_start() argument
740 rtw_sdio_enable_rx_aggregation(rtwdev); in rtw_sdio_start()
741 rtw_sdio_enable_interrupt(rtwdev); in rtw_sdio_start()
746 static void rtw_sdio_stop(struct rtw_dev *rtwdev) in rtw_sdio_stop() argument
748 rtw_sdio_disable_interrupt(rtwdev); in rtw_sdio_stop()
751 static void rtw_sdio_deep_ps_enter(struct rtw_dev *rtwdev) in rtw_sdio_deep_ps_enter() argument
753 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_deep_ps_enter()
757 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE)) { in rtw_sdio_deep_ps_enter()
776 rtw_dbg(rtwdev, RTW_DBG_PS, in rtw_sdio_deep_ps_enter()
781 set_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags); in rtw_sdio_deep_ps_enter()
782 rtw_power_mode_change(rtwdev, true); in rtw_sdio_deep_ps_enter()
785 static void rtw_sdio_deep_ps_leave(struct rtw_dev *rtwdev) in rtw_sdio_deep_ps_leave() argument
787 if (test_and_clear_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_sdio_deep_ps_leave()
788 rtw_power_mode_change(rtwdev, false); in rtw_sdio_deep_ps_leave()
791 static void rtw_sdio_deep_ps(struct rtw_dev *rtwdev, bool enter) in rtw_sdio_deep_ps() argument
793 if (enter && !test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_sdio_deep_ps()
794 rtw_sdio_deep_ps_enter(rtwdev); in rtw_sdio_deep_ps()
796 if (!enter && test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) in rtw_sdio_deep_ps()
797 rtw_sdio_deep_ps_leave(rtwdev); in rtw_sdio_deep_ps()
800 static void rtw_sdio_tx_kick_off(struct rtw_dev *rtwdev) in rtw_sdio_tx_kick_off() argument
802 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_tx_kick_off()
807 static void rtw_sdio_link_ps(struct rtw_dev *rtwdev, bool enter) in rtw_sdio_link_ps() argument
812 static void rtw_sdio_interface_cfg(struct rtw_dev *rtwdev) in rtw_sdio_interface_cfg() argument
816 rtw_read32(rtwdev, REG_SDIO_FREE_TXPG); in rtw_sdio_interface_cfg()
818 val = rtw_read32(rtwdev, REG_SDIO_TX_CTRL); in rtw_sdio_interface_cfg()
820 rtw_write32(rtwdev, REG_SDIO_TX_CTRL, val); in rtw_sdio_interface_cfg()
833 static void rtw_sdio_tx_skb_prepare(struct rtw_dev *rtwdev, in rtw_sdio_tx_skb_prepare() argument
838 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_sdio_tx_skb_prepare()
865 pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue); in rtw_sdio_tx_skb_prepare()
868 rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, pkt_desc); in rtw_sdio_tx_skb_prepare()
871 static int rtw_sdio_write_data(struct rtw_dev *rtwdev, in rtw_sdio_write_data() argument
878 rtw_sdio_tx_skb_prepare(rtwdev, pkt_info, skb, queue); in rtw_sdio_write_data()
880 ret = rtw_sdio_write_port(rtwdev, skb, queue); in rtw_sdio_write_data()
886 static int rtw_sdio_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf, in rtw_sdio_write_data_rsvd_page() argument
892 skb = rtw_tx_write_data_rsvd_page_get(rtwdev, &pkt_info, buf, size); in rtw_sdio_write_data_rsvd_page()
896 return rtw_sdio_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_BCN); in rtw_sdio_write_data_rsvd_page()
899 static int rtw_sdio_write_data_h2c(struct rtw_dev *rtwdev, u8 *buf, u32 size) in rtw_sdio_write_data_h2c() argument
904 skb = rtw_tx_write_data_h2c_get(rtwdev, &pkt_info, buf, size); in rtw_sdio_write_data_h2c()
908 return rtw_sdio_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_H2C); in rtw_sdio_write_data_h2c()
911 static int rtw_sdio_tx_write(struct rtw_dev *rtwdev, in rtw_sdio_tx_write() argument
915 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_tx_write()
919 rtw_sdio_tx_skb_prepare(rtwdev, pkt_info, skb, queue); in rtw_sdio_tx_write()
929 static void rtw_sdio_tx_err_isr(struct rtw_dev *rtwdev) in rtw_sdio_tx_err_isr() argument
931 u32 val = rtw_read32(rtwdev, REG_TXDMA_STATUS); in rtw_sdio_tx_err_isr()
933 rtw_write32(rtwdev, REG_TXDMA_STATUS, val); in rtw_sdio_tx_err_isr()
936 static void rtw_sdio_rx_skb(struct rtw_dev *rtwdev, struct sk_buff *skb, in rtw_sdio_rx_skb() argument
944 rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb); in rtw_sdio_rx_skb()
951 rtw_update_rx_freq_for_invalid(rtwdev, skb, rx_status, pkt_stat); in rtw_sdio_rx_skb()
952 rtw_rx_stats(rtwdev, pkt_stat->vif, skb); in rtw_sdio_rx_skb()
954 ieee80211_rx_irqsafe(rtwdev->hw, skb); in rtw_sdio_rx_skb()
957 static void rtw_sdio_rxfifo_recv(struct rtw_dev *rtwdev, u32 rx_len) in rtw_sdio_rxfifo_recv() argument
959 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_rxfifo_recv()
960 const struct rtw_chip_info *chip = rtwdev->chip; in rtw_sdio_rxfifo_recv()
976 ret = rtw_sdio_read_port(rtwdev, skb->data, bufsz); in rtw_sdio_rxfifo_recv()
984 chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat, in rtw_sdio_rxfifo_recv()
997 rtw_sdio_rx_skb(rtwdev, skb, pkt_offset, &pkt_stat, in rtw_sdio_rxfifo_recv()
1004 rtw_sdio_rx_skb(rtwdev, skb, pkt_offset, &pkt_stat, in rtw_sdio_rxfifo_recv()
1012 rtw_sdio_rx_skb(rtwdev, split_skb, pkt_offset, &pkt_stat, in rtw_sdio_rxfifo_recv()
1021 static void rtw_sdio_rx_isr(struct rtw_dev *rtwdev) in rtw_sdio_rx_isr() argument
1026 if (rtw_chip_wcpu_11n(rtwdev)) in rtw_sdio_rx_isr()
1027 rx_len = rtw_read16(rtwdev, REG_SDIO_RX0_REQ_LEN); in rtw_sdio_rx_isr()
1029 rx_len = rtw_read32(rtwdev, REG_SDIO_RX0_REQ_LEN); in rtw_sdio_rx_isr()
1034 rtw_sdio_rxfifo_recv(rtwdev, rx_len); in rtw_sdio_rx_isr()
1038 if (rtw_chip_wcpu_11n(rtwdev)) { in rtw_sdio_rx_isr()
1048 hisr = rtw_read32(rtwdev, REG_SDIO_HISR); in rtw_sdio_rx_isr()
1062 struct rtw_dev *rtwdev; in rtw_sdio_handle_interrupt() local
1065 rtwdev = hw->priv; in rtw_sdio_handle_interrupt()
1066 rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_handle_interrupt()
1070 hisr = rtw_read32(rtwdev, REG_SDIO_HISR); in rtw_sdio_handle_interrupt()
1073 rtw_sdio_tx_err_isr(rtwdev); in rtw_sdio_handle_interrupt()
1076 rtw_sdio_rx_isr(rtwdev); in rtw_sdio_handle_interrupt()
1079 rtw_write32(rtwdev, REG_SDIO_HISR, hisr); in rtw_sdio_handle_interrupt()
1088 struct rtw_dev *rtwdev = hw->priv; in rtw_sdio_suspend() local
1093 rtw_err(rtwdev, "Failed to host PM flag MMC_PM_KEEP_POWER"); in rtw_sdio_suspend()
1106 static int rtw_sdio_claim(struct rtw_dev *rtwdev, struct sdio_func *sdio_func) in rtw_sdio_claim() argument
1108 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_claim()
1115 rtw_err(rtwdev, "Failed to enable SDIO func"); in rtw_sdio_claim()
1121 rtw_err(rtwdev, "Failed to set SDIO block size to 512"); in rtw_sdio_claim()
1129 sdio_set_drvdata(sdio_func, rtwdev->hw); in rtw_sdio_claim()
1130 SET_IEEE80211_DEV(rtwdev->hw, &sdio_func->dev); in rtw_sdio_claim()
1143 static void rtw_sdio_declaim(struct rtw_dev *rtwdev, in rtw_sdio_declaim() argument
1172 static int rtw_sdio_request_irq(struct rtw_dev *rtwdev, in rtw_sdio_request_irq() argument
1182 rtw_err(rtwdev, "failed to claim SDIO IRQ"); in rtw_sdio_request_irq()
1189 static void rtw_sdio_indicate_tx_status(struct rtw_dev *rtwdev, in rtw_sdio_indicate_tx_status() argument
1194 struct ieee80211_hw *hw = rtwdev->hw; in rtw_sdio_indicate_tx_status()
1198 rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn); in rtw_sdio_indicate_tx_status()
1212 static void rtw_sdio_process_tx_queue(struct rtw_dev *rtwdev, in rtw_sdio_process_tx_queue() argument
1215 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_process_tx_queue()
1223 ret = rtw_sdio_write_port(rtwdev, skb, queue); in rtw_sdio_process_tx_queue()
1230 rtw_sdio_indicate_tx_status(rtwdev, skb); in rtw_sdio_process_tx_queue()
1240 struct rtw_dev *rtwdev; in rtw_sdio_tx_handler() local
1243 rtwdev = work_data->rtwdev; in rtw_sdio_tx_handler()
1244 rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_tx_handler()
1246 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE)) in rtw_sdio_tx_handler()
1247 rtw_sdio_deep_ps_leave(rtwdev); in rtw_sdio_tx_handler()
1251 rtw_sdio_process_tx_queue(rtwdev, queue); in rtw_sdio_tx_handler()
1259 static void rtw_sdio_free_irq(struct rtw_dev *rtwdev, in rtw_sdio_free_irq() argument
1267 static int rtw_sdio_init_tx(struct rtw_dev *rtwdev) in rtw_sdio_init_tx() argument
1269 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_init_tx()
1274 rtw_err(rtwdev, "failed to create TX work queue\n"); in rtw_sdio_init_tx()
1285 rtwsdio->tx_handler_data->rtwdev = rtwdev; in rtw_sdio_init_tx()
1295 static void rtw_sdio_deinit_tx(struct rtw_dev *rtwdev) in rtw_sdio_deinit_tx() argument
1297 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; in rtw_sdio_deinit_tx()
1312 struct rtw_dev *rtwdev; in rtw_sdio_probe() local
1323 rtwdev = hw->priv; in rtw_sdio_probe()
1324 rtwdev->hw = hw; in rtw_sdio_probe()
1325 rtwdev->dev = &sdio_func->dev; in rtw_sdio_probe()
1326 rtwdev->chip = (struct rtw_chip_info *)id->driver_data; in rtw_sdio_probe()
1327 rtwdev->hci.ops = &rtw_sdio_ops; in rtw_sdio_probe()
1328 rtwdev->hci.type = RTW_HCI_TYPE_SDIO; in rtw_sdio_probe()
1330 ret = rtw_core_init(rtwdev); in rtw_sdio_probe()
1334 rtw_dbg(rtwdev, RTW_DBG_SDIO, in rtw_sdio_probe()
1338 ret = rtw_sdio_claim(rtwdev, sdio_func); in rtw_sdio_probe()
1340 rtw_err(rtwdev, "failed to claim SDIO device"); in rtw_sdio_probe()
1344 rtw_sdio_init(rtwdev); in rtw_sdio_probe()
1346 ret = rtw_sdio_init_tx(rtwdev); in rtw_sdio_probe()
1348 rtw_err(rtwdev, "failed to init SDIO TX queue\n"); in rtw_sdio_probe()
1352 ret = rtw_chip_info_setup(rtwdev); in rtw_sdio_probe()
1354 rtw_err(rtwdev, "failed to setup chip information"); in rtw_sdio_probe()
1358 ret = rtw_sdio_request_irq(rtwdev, sdio_func); in rtw_sdio_probe()
1362 ret = rtw_register_hw(rtwdev, hw); in rtw_sdio_probe()
1364 rtw_err(rtwdev, "failed to register hw"); in rtw_sdio_probe()
1371 rtw_sdio_free_irq(rtwdev, sdio_func); in rtw_sdio_probe()
1373 rtw_sdio_deinit_tx(rtwdev); in rtw_sdio_probe()
1375 rtw_sdio_declaim(rtwdev, sdio_func); in rtw_sdio_probe()
1377 rtw_core_deinit(rtwdev); in rtw_sdio_probe()
1388 struct rtw_dev *rtwdev; in rtw_sdio_remove() local
1393 rtwdev = hw->priv; in rtw_sdio_remove()
1395 rtw_unregister_hw(rtwdev, hw); in rtw_sdio_remove()
1396 rtw_sdio_disable_interrupt(rtwdev); in rtw_sdio_remove()
1397 rtw_sdio_free_irq(rtwdev, sdio_func); in rtw_sdio_remove()
1398 rtw_sdio_declaim(rtwdev, sdio_func); in rtw_sdio_remove()
1399 rtw_sdio_deinit_tx(rtwdev); in rtw_sdio_remove()
1400 rtw_core_deinit(rtwdev); in rtw_sdio_remove()
1410 struct rtw_dev *rtwdev; in rtw_sdio_shutdown() local
1416 rtwdev = hw->priv; in rtw_sdio_shutdown()
1417 chip = rtwdev->chip; in rtw_sdio_shutdown()
1420 chip->ops->shutdown(rtwdev); in rtw_sdio_shutdown()