Lines Matching defs:rtwdev
34 static u32 rtw_sdio_to_bus_offset(struct rtw_dev *rtwdev, u32 addr)
48 rtw_warn(rtwdev, "Cannot convert addr 0x%08x to bus offset",
55 static bool rtw_sdio_use_memcpy_io(struct rtw_dev *rtwdev, u32 addr,
59 test_bit(RTW_FLAG_POWERON, rtwdev->flags);
62 static void rtw_sdio_writel(struct rtw_dev *rtwdev, u32 val, u32 addr,
65 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
69 if (rtw_sdio_use_memcpy_io(rtwdev, addr, 4)) {
83 static void rtw_sdio_writew(struct rtw_dev *rtwdev, u16 val, u32 addr,
86 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
99 static u32 rtw_sdio_readl(struct rtw_dev *rtwdev, u32 addr, int *err_ret)
101 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
105 if (rtw_sdio_use_memcpy_io(rtwdev, addr, 4))
117 static u16 rtw_sdio_readw(struct rtw_dev *rtwdev, u32 addr, int *err_ret)
119 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
132 static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr,
141 return rtw_sdio_to_bus_offset(rtwdev, addr);
144 static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr)
146 return !rtw_sdio_is_sdio30_supported(rtwdev) ||
150 static int rtw_sdio_indirect_reg_cfg(struct rtw_dev *rtwdev, u32 addr, u32 cfg)
152 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
158 reg_cfg = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_CFG);
160 rtw_sdio_writel(rtwdev, addr | cfg | BIT_SDIO_INDIRECT_REG_CFG_UNK20,
174 static u8 rtw_sdio_indirect_read8(struct rtw_dev *rtwdev, u32 addr,
177 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
180 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr,
185 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA);
189 static int rtw_sdio_indirect_read_bytes(struct rtw_dev *rtwdev, u32 addr,
195 buf[i] = rtw_sdio_indirect_read8(rtwdev, addr + i, &ret);
203 static u16 rtw_sdio_indirect_read16(struct rtw_dev *rtwdev, u32 addr,
210 *err_ret = rtw_sdio_indirect_read_bytes(rtwdev, addr, buf, 2);
217 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr,
222 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA);
223 return rtw_sdio_readw(rtwdev, reg_data, err_ret);
226 static u32 rtw_sdio_indirect_read32(struct rtw_dev *rtwdev, u32 addr,
233 *err_ret = rtw_sdio_indirect_read_bytes(rtwdev, addr, buf, 4);
240 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr,
245 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA);
246 return rtw_sdio_readl(rtwdev, reg_data, err_ret);
249 static u8 rtw_sdio_read8(struct rtw_dev *rtwdev, u32 addr)
251 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
256 direct = rtw_sdio_use_direct_io(rtwdev, addr);
257 addr = rtw_sdio_to_io_address(rtwdev, addr, direct);
266 val = rtw_sdio_indirect_read8(rtwdev, addr, &ret);
272 rtw_warn(rtwdev, "sdio read8 failed (0x%x): %d", addr, ret);
277 static u16 rtw_sdio_read16(struct rtw_dev *rtwdev, u32 addr)
279 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
284 direct = rtw_sdio_use_direct_io(rtwdev, addr);
285 addr = rtw_sdio_to_io_address(rtwdev, addr, direct);
292 val = rtw_sdio_readw(rtwdev, addr, &ret);
294 val = rtw_sdio_indirect_read16(rtwdev, addr, &ret);
300 rtw_warn(rtwdev, "sdio read16 failed (0x%x): %d", addr, ret);
305 static u32 rtw_sdio_read32(struct rtw_dev *rtwdev, u32 addr)
307 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
312 direct = rtw_sdio_use_direct_io(rtwdev, addr);
313 addr = rtw_sdio_to_io_address(rtwdev, addr, direct);
320 val = rtw_sdio_readl(rtwdev, addr, &ret);
322 val = rtw_sdio_indirect_read32(rtwdev, addr, &ret);
328 rtw_warn(rtwdev, "sdio read32 failed (0x%x): %d", addr, ret);
333 static void rtw_sdio_indirect_write8(struct rtw_dev *rtwdev, u8 val, u32 addr,
336 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
339 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA);
344 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr,
348 static void rtw_sdio_indirect_write16(struct rtw_dev *rtwdev, u16 val, u32 addr,
354 addr = rtw_sdio_to_io_address(rtwdev, addr, true);
355 rtw_sdio_writew(rtwdev, val, addr, err_ret);
359 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA);
360 rtw_sdio_writew(rtwdev, val, reg_data, err_ret);
364 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr,
369 static void rtw_sdio_indirect_write32(struct rtw_dev *rtwdev, u32 val,
375 addr = rtw_sdio_to_io_address(rtwdev, addr, true);
376 rtw_sdio_writel(rtwdev, val, addr, err_ret);
380 reg_data = rtw_sdio_to_bus_offset(rtwdev, REG_SDIO_INDIRECT_REG_DATA);
381 rtw_sdio_writel(rtwdev, val, reg_data, err_ret);
383 *err_ret = rtw_sdio_indirect_reg_cfg(rtwdev, addr,
388 static void rtw_sdio_write8(struct rtw_dev *rtwdev, u32 addr, u8 val)
390 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
394 direct = rtw_sdio_use_direct_io(rtwdev, addr);
395 addr = rtw_sdio_to_io_address(rtwdev, addr, direct);
404 rtw_sdio_indirect_write8(rtwdev, val, addr, &ret);
410 rtw_warn(rtwdev, "sdio write8 failed (0x%x): %d", addr, ret);
413 static void rtw_sdio_write16(struct rtw_dev *rtwdev, u32 addr, u16 val)
415 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
419 direct = rtw_sdio_use_direct_io(rtwdev, addr);
420 addr = rtw_sdio_to_io_address(rtwdev, addr, direct);
427 rtw_sdio_writew(rtwdev, val, addr, &ret);
429 rtw_sdio_indirect_write16(rtwdev, val, addr, &ret);
435 rtw_warn(rtwdev, "sdio write16 failed (0x%x): %d", addr, ret);
438 static void rtw_sdio_write32(struct rtw_dev *rtwdev, u32 addr, u32 val)
440 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
444 direct = rtw_sdio_use_direct_io(rtwdev, addr);
445 addr = rtw_sdio_to_io_address(rtwdev, addr, direct);
452 rtw_sdio_writel(rtwdev, val, addr, &ret);
454 rtw_sdio_indirect_write32(rtwdev, val, addr, &ret);
460 rtw_warn(rtwdev, "sdio write32 failed (0x%x): %d", addr, ret);
463 static u32 rtw_sdio_get_tx_addr(struct rtw_dev *rtwdev, size_t size,
490 rtw_warn(rtwdev, "Unsupported queue for TX addr: 0x%02x\n",
500 static int rtw_sdio_read_port(struct rtw_dev *rtwdev, u8 *buf, size_t count)
502 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
519 rtw_warn(rtwdev,
544 static int rtw_sdio_check_free_txpg(struct rtw_dev *rtwdev, u8 queue,
549 if (rtw_chip_wcpu_11n(rtwdev)) {
552 free_txpg = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG);
573 rtw_warn(rtwdev, "Unknown mapping for queue %u\n", queue);
582 free_txpg[0] = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG);
583 free_txpg[1] = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG + 4);
584 free_txpg[2] = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG + 8);
608 rtw_warn(rtwdev, "Unknown mapping for queue %u\n", queue);
616 pages_needed = DIV_ROUND_UP(count, rtwdev->chip->page_size);
619 rtw_dbg(rtwdev, RTW_DBG_SDIO,
628 static int rtw_sdio_write_port(struct rtw_dev *rtwdev, struct sk_buff *skb,
631 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
637 txaddr = rtw_sdio_get_tx_addr(rtwdev, skb->len, queue);
643 ret = rtw_sdio_check_free_txpg(rtwdev, queue, txsize);
648 rtw_warn(rtwdev, "Got unaligned SKB in %s() for queue %u\n",
662 rtw_warn(rtwdev,
669 static void rtw_sdio_init(struct rtw_dev *rtwdev)
671 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
676 static void rtw_sdio_enable_rx_aggregation(struct rtw_dev *rtwdev)
680 if (rtw_chip_wcpu_11n(rtwdev)) {
689 rtw_write32_set(rtwdev, REG_RXDMA_AGG_PG_TH, BIT_EN_PRE_CALC);
691 rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
693 rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH,
697 rtw_write8_set(rtwdev, REG_RXDMA_MODE, BIT_DMA_MODE);
700 static void rtw_sdio_enable_interrupt(struct rtw_dev *rtwdev)
702 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
704 rtw_write32(rtwdev, REG_SDIO_HIMR, rtwsdio->irq_mask);
707 static void rtw_sdio_disable_interrupt(struct rtw_dev *rtwdev)
709 rtw_write32(rtwdev, REG_SDIO_HIMR, 0x0);
712 static u8 rtw_sdio_get_tx_qsel(struct rtw_dev *rtwdev, struct sk_buff *skb,
721 if (rtw_chip_wcpu_11n(rtwdev))
732 static int rtw_sdio_setup(struct rtw_dev *rtwdev)
738 static int rtw_sdio_start(struct rtw_dev *rtwdev)
740 rtw_sdio_enable_rx_aggregation(rtwdev);
741 rtw_sdio_enable_interrupt(rtwdev);
746 static void rtw_sdio_stop(struct rtw_dev *rtwdev)
748 rtw_sdio_disable_interrupt(rtwdev);
751 static void rtw_sdio_deep_ps_enter(struct rtw_dev *rtwdev)
753 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
757 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE)) {
776 rtw_dbg(rtwdev, RTW_DBG_PS,
781 set_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags);
782 rtw_power_mode_change(rtwdev, true);
785 static void rtw_sdio_deep_ps_leave(struct rtw_dev *rtwdev)
787 if (test_and_clear_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags))
788 rtw_power_mode_change(rtwdev, false);
791 static void rtw_sdio_deep_ps(struct rtw_dev *rtwdev, bool enter)
793 if (enter && !test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags))
794 rtw_sdio_deep_ps_enter(rtwdev);
796 if (!enter && test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags))
797 rtw_sdio_deep_ps_leave(rtwdev);
800 static void rtw_sdio_tx_kick_off(struct rtw_dev *rtwdev)
802 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
807 static void rtw_sdio_link_ps(struct rtw_dev *rtwdev, bool enter)
812 static void rtw_sdio_interface_cfg(struct rtw_dev *rtwdev)
816 rtw_read32(rtwdev, REG_SDIO_FREE_TXPG);
818 val = rtw_read32(rtwdev, REG_SDIO_TX_CTRL);
820 rtw_write32(rtwdev, REG_SDIO_TX_CTRL, val);
833 static void rtw_sdio_tx_skb_prepare(struct rtw_dev *rtwdev,
838 const struct rtw_chip_info *chip = rtwdev->chip;
865 pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue);
868 rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, pkt_desc);
871 static int rtw_sdio_write_data(struct rtw_dev *rtwdev,
878 rtw_sdio_tx_skb_prepare(rtwdev, pkt_info, skb, queue);
880 ret = rtw_sdio_write_port(rtwdev, skb, queue);
886 static int rtw_sdio_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf,
892 skb = rtw_tx_write_data_rsvd_page_get(rtwdev, &pkt_info, buf, size);
896 return rtw_sdio_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_BCN);
899 static int rtw_sdio_write_data_h2c(struct rtw_dev *rtwdev, u8 *buf, u32 size)
904 skb = rtw_tx_write_data_h2c_get(rtwdev, &pkt_info, buf, size);
908 return rtw_sdio_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_H2C);
911 static int rtw_sdio_tx_write(struct rtw_dev *rtwdev,
915 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
919 rtw_sdio_tx_skb_prepare(rtwdev, pkt_info, skb, queue);
929 static void rtw_sdio_tx_err_isr(struct rtw_dev *rtwdev)
931 u32 val = rtw_read32(rtwdev, REG_TXDMA_STATUS);
933 rtw_write32(rtwdev, REG_TXDMA_STATUS, val);
936 static void rtw_sdio_rx_skb(struct rtw_dev *rtwdev, struct sk_buff *skb,
944 rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb);
951 rtw_rx_stats(rtwdev, pkt_stat->vif, skb);
953 ieee80211_rx_irqsafe(rtwdev->hw, skb);
956 static void rtw_sdio_rxfifo_recv(struct rtw_dev *rtwdev, u32 rx_len)
958 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
959 const struct rtw_chip_info *chip = rtwdev->chip;
975 ret = rtw_sdio_read_port(rtwdev, skb->data, bufsz);
983 chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
996 rtw_sdio_rx_skb(rtwdev, skb, pkt_offset, &pkt_stat,
1003 rtw_sdio_rx_skb(rtwdev, skb, pkt_offset, &pkt_stat,
1011 rtw_sdio_rx_skb(rtwdev, split_skb, pkt_offset, &pkt_stat,
1020 static void rtw_sdio_rx_isr(struct rtw_dev *rtwdev)
1025 if (rtw_chip_wcpu_11n(rtwdev))
1026 rx_len = rtw_read16(rtwdev, REG_SDIO_RX0_REQ_LEN);
1028 rx_len = rtw_read32(rtwdev, REG_SDIO_RX0_REQ_LEN);
1033 rtw_sdio_rxfifo_recv(rtwdev, rx_len);
1037 if (rtw_chip_wcpu_11n(rtwdev)) {
1047 hisr = rtw_read32(rtwdev, REG_SDIO_HISR);
1061 struct rtw_dev *rtwdev;
1064 rtwdev = hw->priv;
1065 rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1069 hisr = rtw_read32(rtwdev, REG_SDIO_HISR);
1072 rtw_sdio_tx_err_isr(rtwdev);
1075 rtw_sdio_rx_isr(rtwdev);
1078 rtw_write32(rtwdev, REG_SDIO_HISR, hisr);
1087 struct rtw_dev *rtwdev = hw->priv;
1092 rtw_err(rtwdev, "Failed to host PM flag MMC_PM_KEEP_POWER");
1105 static int rtw_sdio_claim(struct rtw_dev *rtwdev, struct sdio_func *sdio_func)
1107 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1114 rtw_err(rtwdev, "Failed to enable SDIO func");
1120 rtw_err(rtwdev, "Failed to set SDIO block size to 512");
1128 sdio_set_drvdata(sdio_func, rtwdev->hw);
1129 SET_IEEE80211_DEV(rtwdev->hw, &sdio_func->dev);
1142 static void rtw_sdio_declaim(struct rtw_dev *rtwdev,
1170 static int rtw_sdio_request_irq(struct rtw_dev *rtwdev,
1180 rtw_err(rtwdev, "failed to claim SDIO IRQ");
1187 static void rtw_sdio_indicate_tx_status(struct rtw_dev *rtwdev,
1192 struct ieee80211_hw *hw = rtwdev->hw;
1196 rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn);
1210 static void rtw_sdio_process_tx_queue(struct rtw_dev *rtwdev,
1213 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1221 ret = rtw_sdio_write_port(rtwdev, skb, queue);
1228 rtw_sdio_indicate_tx_status(rtwdev, skb);
1238 struct rtw_dev *rtwdev;
1241 rtwdev = work_data->rtwdev;
1242 rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1244 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE))
1245 rtw_sdio_deep_ps_leave(rtwdev);
1249 rtw_sdio_process_tx_queue(rtwdev, queue);
1257 static void rtw_sdio_free_irq(struct rtw_dev *rtwdev,
1265 static int rtw_sdio_init_tx(struct rtw_dev *rtwdev)
1267 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1272 rtw_err(rtwdev, "failed to create TX work queue\n");
1283 rtwsdio->tx_handler_data->rtwdev = rtwdev;
1293 static void rtw_sdio_deinit_tx(struct rtw_dev *rtwdev)
1295 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1310 struct rtw_dev *rtwdev;
1321 rtwdev = hw->priv;
1322 rtwdev->hw = hw;
1323 rtwdev->dev = &sdio_func->dev;
1324 rtwdev->chip = (struct rtw_chip_info *)id->driver_data;
1325 rtwdev->hci.ops = &rtw_sdio_ops;
1326 rtwdev->hci.type = RTW_HCI_TYPE_SDIO;
1328 ret = rtw_core_init(rtwdev);
1332 rtw_dbg(rtwdev, RTW_DBG_SDIO,
1336 ret = rtw_sdio_claim(rtwdev, sdio_func);
1338 rtw_err(rtwdev, "failed to claim SDIO device");
1342 rtw_sdio_init(rtwdev);
1344 ret = rtw_sdio_init_tx(rtwdev);
1346 rtw_err(rtwdev, "failed to init SDIO TX queue\n");
1350 ret = rtw_chip_info_setup(rtwdev);
1352 rtw_err(rtwdev, "failed to setup chip information");
1356 ret = rtw_sdio_request_irq(rtwdev, sdio_func);
1360 ret = rtw_register_hw(rtwdev, hw);
1362 rtw_err(rtwdev, "failed to register hw");
1369 rtw_sdio_free_irq(rtwdev, sdio_func);
1371 rtw_sdio_deinit_tx(rtwdev);
1373 rtw_sdio_declaim(rtwdev, sdio_func);
1375 rtw_core_deinit(rtwdev);
1386 struct rtw_dev *rtwdev;
1391 rtwdev = hw->priv;
1393 rtw_unregister_hw(rtwdev, hw);
1394 rtw_sdio_disable_interrupt(rtwdev);
1395 rtw_sdio_free_irq(rtwdev, sdio_func);
1396 rtw_sdio_declaim(rtwdev, sdio_func);
1397 rtw_sdio_deinit_tx(rtwdev);
1398 rtw_core_deinit(rtwdev);
1408 struct rtw_dev *rtwdev;
1414 rtwdev = hw->priv;
1415 chip = rtwdev->chip;
1418 chip->ops->shutdown(rtwdev);