Lines Matching +full:no +full:- +full:sdio

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
6 * Copyright(c) 2018-2019 Realtek Corporation
18 #include "sdio.h"
30 return !rtwsdio->irq_thread ||
31 rtwsdio->irq_thread != current;
59 test_bit(RTW_FLAG_POWERON, rtwdev->flags);
65 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
70 sdio_writel(rtwsdio->sdio_func, val, addr, err_ret);
77 sdio_writeb(rtwsdio->sdio_func, buf[i], addr + i, err_ret);
86 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
93 sdio_writeb(rtwsdio->sdio_func, buf[i], addr + i, err_ret);
101 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
106 return sdio_readl(rtwsdio->sdio_func, addr, err_ret);
109 buf[i] = sdio_readb(rtwsdio->sdio_func, addr + i, err_ret);
119 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
124 buf[i] = sdio_readb(rtwsdio->sdio_func, addr + i, err_ret);
152 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
166 tmp = sdio_readb(rtwsdio->sdio_func, reg_cfg + 2, &ret);
171 return -ETIMEDOUT;
177 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
186 return sdio_readb(rtwsdio->sdio_func, reg_data, err_ret);
251 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
261 sdio_claim_host(rtwsdio->sdio_func);
264 val = sdio_readb(rtwsdio->sdio_func, addr, &ret);
269 sdio_release_host(rtwsdio->sdio_func);
272 rtw_warn(rtwdev, "sdio read8 failed (0x%x): %d", addr, ret);
279 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
289 sdio_claim_host(rtwsdio->sdio_func);
297 sdio_release_host(rtwsdio->sdio_func);
300 rtw_warn(rtwdev, "sdio read16 failed (0x%x): %d", addr, ret);
307 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
317 sdio_claim_host(rtwsdio->sdio_func);
325 sdio_release_host(rtwsdio->sdio_func);
328 rtw_warn(rtwdev, "sdio read32 failed (0x%x): %d", addr, ret);
336 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
340 sdio_writeb(rtwsdio->sdio_func, val, reg_data, err_ret);
390 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
399 sdio_claim_host(rtwsdio->sdio_func);
402 sdio_writeb(rtwsdio->sdio_func, val, addr, &ret);
407 sdio_release_host(rtwsdio->sdio_func);
410 rtw_warn(rtwdev, "sdio write8 failed (0x%x): %d", addr, ret);
415 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
424 sdio_claim_host(rtwsdio->sdio_func);
432 sdio_release_host(rtwsdio->sdio_func);
435 rtw_warn(rtwdev, "sdio write16 failed (0x%x): %d", addr, ret);
440 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
449 sdio_claim_host(rtwsdio->sdio_func);
457 sdio_release_host(rtwsdio->sdio_func);
460 rtw_warn(rtwdev, "sdio write32 failed (0x%x): %d", addr, ret);
502 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
503 struct mmc_host *host = rtwsdio->sdio_func->card->host;
505 u32 rxaddr = rtwsdio->rx_addr++;
510 sdio_claim_host(rtwsdio->sdio_func);
513 bytes = min_t(size_t, host->max_req_size, count);
515 err = sdio_memcpy_fromio(rtwsdio->sdio_func, buf,
520 "Failed to read %zu byte(s) from SDIO port 0x%08x: %d",
528 /* Don't stop here - instead drain the remaining data
534 count -= bytes;
539 sdio_release_host(rtwsdio->sdio_func);
574 return -EINVAL;
609 return -EINVAL;
616 pages_needed = DIV_ROUND_UP(count, rtwdev->chip->page_size);
622 return -EBUSY;
631 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
637 txaddr = rtw_sdio_get_tx_addr(rtwdev, skb->len, queue);
639 return -EINVAL;
641 txsize = sdio_align_size(rtwsdio->sdio_func, skb->len);
647 if (!IS_ALIGNED((unsigned long)skb->data, RTW_SDIO_DATA_PTR_ALIGN))
654 sdio_claim_host(rtwsdio->sdio_func);
656 ret = sdio_memcpy_toio(rtwsdio->sdio_func, txaddr, skb->data, txsize);
659 sdio_release_host(rtwsdio->sdio_func);
663 "Failed to write %zu byte(s) to SDIO port 0x%08x",
671 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
673 rtwsdio->irq_mask = REG_SDIO_HIMR_RX_REQUEST | REG_SDIO_HIMR_CPWM1;
702 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
704 rtw_write32(rtwdev, REG_SDIO_HIMR, rtwsdio->irq_mask);
728 return skb->priority;
753 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
757 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE)) {
758 /* Deep PS state is not allowed to TX-DMA */
768 if (skb_queue_len(&rtwsdio->tx_queue[queue])) {
781 set_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags);
787 if (test_and_clear_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags))
793 if (enter && !test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags))
796 if (!enter && test_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags))
802 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
804 queue_work(rtwsdio->txwq, &rtwsdio->tx_handler_data->work);
828 sizeof(info->status.status_driver_data));
830 return (struct rtw_sdio_tx_data *)info->status.status_driver_data;
838 const struct rtw_chip_info *chip = rtwdev->chip;
843 pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
852 offset = RTW_SDIO_DATA_PTR_ALIGN - (aligned_addr - data_addr);
860 pkt_info->offset += offset;
863 memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
865 pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue);
894 return -ENOMEM;
906 return -ENOMEM;
915 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
922 tx_data->sn = pkt_info->sn;
924 skb_queue_tail(&rtwsdio->tx_queue[queue], skb);
942 if (pkt_stat->is_c2h) {
943 skb_put(skb, pkt_stat->pkt_len + pkt_offset);
948 skb_put(skb, pkt_stat->pkt_len);
951 rtw_rx_stats(rtwdev, pkt_stat->vif, skb);
953 ieee80211_rx_irqsafe(rtwdev->hw, skb);
958 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
959 const struct rtw_chip_info *chip = rtwdev->chip;
960 u32 pkt_desc_sz = chip->rx_pkt_desc_sz;
969 bufsz = sdio_align_size(rtwsdio->sdio_func, rx_len);
975 ret = rtw_sdio_read_port(rtwdev, skb->data, bufsz);
982 rx_desc = skb->data;
983 chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
1009 memcpy(split_skb->data, skb->data, curr_pkt_len);
1016 rx_len -= curr_pkt_len;
1038 /* Stop if no more RX requests are pending, even if
1064 rtwdev = hw->priv;
1065 rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1067 rtwsdio->irq_thread = current;
1080 rtwsdio->irq_thread = NULL;
1087 struct rtw_dev *rtwdev = hw->priv;
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");
1124 rtwsdio->sdio_func = sdio_func;
1126 rtwsdio->sdio3_bus_mode = mmc_card_uhs(sdio_func->card);
1128 sdio_set_drvdata(sdio_func, rtwdev->hw);
1129 SET_IEEE80211_DEV(rtwdev->hw, &sdio_func->dev);
1180 rtw_err(rtwdev, "failed to claim SDIO IRQ");
1192 struct ieee80211_hw *hw = rtwdev->hw;
1195 if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) {
1196 rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn);
1202 if (info->flags & IEEE80211_TX_CTL_NO_ACK)
1203 info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED;
1205 info->flags |= IEEE80211_TX_STAT_ACK;
1213 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1217 skb = skb_dequeue(&rtwsdio->tx_queue[queue]);
1223 skb_queue_head(&rtwsdio->tx_queue[queue], skb);
1241 rtwdev = work_data->rtwdev;
1242 rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1244 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_TX_WAKE))
1247 for (queue = RTK_MAX_TX_QUEUE_NUM - 1; queue >= 0; queue--) {
1251 if (skb_queue_empty(&rtwsdio->tx_queue[queue]))
1267 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1270 rtwsdio->txwq = create_singlethread_workqueue("rtw88_sdio: tx wq");
1271 if (!rtwsdio->txwq) {
1273 return -ENOMEM;
1277 skb_queue_head_init(&rtwsdio->tx_queue[i]);
1278 rtwsdio->tx_handler_data = kmalloc(sizeof(*rtwsdio->tx_handler_data),
1280 if (!rtwsdio->tx_handler_data)
1283 rtwsdio->tx_handler_data->rtwdev = rtwdev;
1284 INIT_WORK(&rtwsdio->tx_handler_data->work, rtw_sdio_tx_handler);
1289 destroy_workqueue(rtwsdio->txwq);
1290 return -ENOMEM;
1295 struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
1299 skb_queue_purge(&rtwsdio->tx_queue[i]);
1301 flush_workqueue(rtwsdio->txwq);
1302 destroy_workqueue(rtwsdio->txwq);
1303 kfree(rtwsdio->tx_handler_data);
1317 dev_err(&sdio_func->dev, "failed to allocate hw");
1318 return -ENOMEM;
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;
1333 "rtw88 SDIO probe: vendor=0x%04x device=%04x class=%02x",
1334 id->vendor, id->device, id->class);
1338 rtw_err(rtwdev, "failed to claim SDIO device");
1346 rtw_err(rtwdev, "failed to init SDIO TX queue\n");
1391 rtwdev = hw->priv;
1414 rtwdev = hw->priv;
1415 chip = rtwdev->chip;
1417 if (chip->ops->shutdown)
1418 chip->ops->shutdown(rtwdev);
1424 MODULE_DESCRIPTION("Realtek 802.11ac wireless SDIO driver");