Lines Matching refs:ar_sdio
35 static inline int ath10k_sdio_calc_txrx_padded_len(struct ath10k_sdio *ar_sdio, in ath10k_sdio_calc_txrx_padded_len() argument
38 return __ALIGN_MASK((len), ar_sdio->mbox_info.block_mask); in ath10k_sdio_calc_txrx_padded_len()
135 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_config() local
136 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_config()
206 ret = sdio_set_block_size(func, ar_sdio->mbox_info.block_size); in ath10k_sdio_config()
209 ar_sdio->mbox_info.block_size, ret); in ath10k_sdio_config()
220 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_write32() local
221 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_write32()
244 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_writesb32() local
245 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_writesb32()
277 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_read32() local
278 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_read32()
300 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_read() local
301 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_read()
325 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_write() local
326 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_write()
353 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_readsb() local
354 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_readsb()
359 len = round_down(len, ar_sdio->mbox_info.block_size); in ath10k_sdio_readsb()
422 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_process_packets() local
432 for (i = 0; i < ar_sdio->n_rx_pkts; i++) { in ath10k_sdio_mbox_rx_process_packets()
454 pkt = &ar_sdio->rx_pkts[i]; in ath10k_sdio_mbox_rx_process_packets()
476 skb_queue_tail(&ar_sdio->rx_head, pkt->skb); in ath10k_sdio_mbox_rx_process_packets()
478 &ar_sdio->async_work_rx); in ath10k_sdio_mbox_rx_process_packets()
494 for (; i < ar_sdio->n_rx_pkts; i++) in ath10k_sdio_mbox_rx_process_packets()
495 ath10k_sdio_mbox_free_rx_pkt(&ar_sdio->rx_pkts[i]); in ath10k_sdio_mbox_rx_process_packets()
541 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_alloc() local
572 full_len = ath10k_sdio_calc_txrx_padded_len(ar_sdio, act_len); in ath10k_sdio_mbox_rx_alloc()
591 &ar_sdio->rx_pkts[pkt_cnt], in ath10k_sdio_mbox_rx_alloc()
616 ret = ath10k_sdio_mbox_alloc_rx_pkt(&ar_sdio->rx_pkts[pkt_cnt], in ath10k_sdio_mbox_rx_alloc()
629 ar_sdio->n_rx_pkts = pkt_cnt; in ath10k_sdio_mbox_rx_alloc()
635 if (!ar_sdio->rx_pkts[i].alloc_len) in ath10k_sdio_mbox_rx_alloc()
637 ath10k_sdio_mbox_free_rx_pkt(&ar_sdio->rx_pkts[i]); in ath10k_sdio_mbox_rx_alloc()
645 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_fetch() local
646 struct ath10k_sdio_rx_data *pkt = &ar_sdio->rx_pkts[0]; in ath10k_sdio_mbox_rx_fetch()
651 ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr, in ath10k_sdio_mbox_rx_fetch()
668 ar_sdio->n_rx_pkts = 0; in ath10k_sdio_mbox_rx_fetch()
676 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_fetch_bundle() local
683 for (i = 0; i < ar_sdio->n_rx_pkts; i++) in ath10k_sdio_mbox_rx_fetch_bundle()
684 virt_pkt_len += ar_sdio->rx_pkts[i].alloc_len; in ath10k_sdio_mbox_rx_fetch_bundle()
692 ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr, in ath10k_sdio_mbox_rx_fetch_bundle()
693 ar_sdio->vsg_buffer, virt_pkt_len); in ath10k_sdio_mbox_rx_fetch_bundle()
700 for (i = 0; i < ar_sdio->n_rx_pkts; i++) { in ath10k_sdio_mbox_rx_fetch_bundle()
701 pkt = &ar_sdio->rx_pkts[i]; in ath10k_sdio_mbox_rx_fetch_bundle()
702 htc_hdr = (struct ath10k_htc_hdr *)(ar_sdio->vsg_buffer + pkt_offset); in ath10k_sdio_mbox_rx_fetch_bundle()
718 for (i = 0; i < ar_sdio->n_rx_pkts; i++) in ath10k_sdio_mbox_rx_fetch_bundle()
719 ath10k_sdio_mbox_free_rx_pkt(&ar_sdio->rx_pkts[i]); in ath10k_sdio_mbox_rx_fetch_bundle()
721 ar_sdio->n_rx_pkts = 0; in ath10k_sdio_mbox_rx_fetch_bundle()
736 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rxmsg_pending_handler() local
759 if (ar_sdio->n_rx_pkts >= 2) in ath10k_sdio_mbox_rxmsg_pending_handler()
765 if (ar_sdio->n_rx_pkts > 1) in ath10k_sdio_mbox_rxmsg_pending_handler()
818 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_proc_counter_intr() local
819 struct ath10k_sdio_irq_data *irq_data = &ar_sdio->irq_data; in ath10k_sdio_mbox_proc_counter_intr()
843 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_proc_err_intr() local
844 struct ath10k_sdio_irq_data *irq_data = &ar_sdio->irq_data; in ath10k_sdio_mbox_proc_err_intr()
889 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_proc_cpu_intr() local
890 struct ath10k_sdio_irq_data *irq_data = &ar_sdio->irq_data; in ath10k_sdio_mbox_proc_cpu_intr()
933 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_read_int_status() local
934 struct ath10k_sdio_irq_data *irq_data = &ar_sdio->irq_data; in ath10k_sdio_mbox_read_int_status()
1081 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_set_mbox_info() local
1082 struct ath10k_mbox_info *mbox_info = &ar_sdio->mbox_info; in ath10k_sdio_set_mbox_info()
1083 u16 device = ar_sdio->func->device, dev_id_base, dev_id_chiprev; in ath10k_sdio_set_mbox_info()
1198 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_bmi_exchange_msg() local
1207 addr = ar_sdio->mbox_info.htc_addr; in ath10k_sdio_bmi_exchange_msg()
1209 memcpy(ar_sdio->bmi_buf, req, req_len); in ath10k_sdio_bmi_exchange_msg()
1210 ret = ath10k_sdio_write(ar, addr, ar_sdio->bmi_buf, req_len); in ath10k_sdio_bmi_exchange_msg()
1273 addr = ar_sdio->mbox_info.htc_addr; in ath10k_sdio_bmi_exchange_msg()
1274 ret = ath10k_sdio_read(ar, addr, ar_sdio->bmi_buf, *resp_len); in ath10k_sdio_bmi_exchange_msg()
1282 memcpy(resp, ar_sdio->bmi_buf, *resp_len); in ath10k_sdio_bmi_exchange_msg()
1292 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_alloc_busreq() local
1295 spin_lock_bh(&ar_sdio->lock); in ath10k_sdio_alloc_busreq()
1297 if (list_empty(&ar_sdio->bus_req_freeq)) { in ath10k_sdio_alloc_busreq()
1302 bus_req = list_first_entry(&ar_sdio->bus_req_freeq, in ath10k_sdio_alloc_busreq()
1307 spin_unlock_bh(&ar_sdio->lock); in ath10k_sdio_alloc_busreq()
1314 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_free_bus_req() local
1318 spin_lock_bh(&ar_sdio->lock); in ath10k_sdio_free_bus_req()
1319 list_add_tail(&bus_req->list, &ar_sdio->bus_req_freeq); in ath10k_sdio_free_bus_req()
1320 spin_unlock_bh(&ar_sdio->lock); in ath10k_sdio_free_bus_req()
1351 struct ath10k_sdio *ar_sdio = container_of(work, struct ath10k_sdio, in ath10k_rx_indication_async_work() local
1353 struct ath10k *ar = ar_sdio->ar; in ath10k_rx_indication_async_work()
1359 skb = skb_dequeue(&ar_sdio->rx_head); in ath10k_rx_indication_async_work()
1374 static int ath10k_sdio_read_rtc_state(struct ath10k_sdio *ar_sdio, unsigned char *state) in ath10k_sdio_read_rtc_state() argument
1376 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_read_rtc_state()
1380 rtc_state = sdio_f0_readb(ar_sdio->func, ATH10K_CIS_RTC_STATE_ADDR, &ret); in ath10k_sdio_read_rtc_state()
1393 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_set_mbox_sleep() local
1398 sdio_claim_host(ar_sdio->func); in ath10k_sdio_set_mbox_sleep()
1409 ar_sdio->mbox_state = SDIO_MBOX_SLEEP_STATE; in ath10k_sdio_set_mbox_sleep()
1412 ar_sdio->mbox_state = SDIO_MBOX_AWAKE_STATE; in ath10k_sdio_set_mbox_sleep()
1424 ret = ath10k_sdio_read_rtc_state(ar_sdio, &rtc_state); in ath10k_sdio_set_mbox_sleep()
1443 sdio_release_host(ar_sdio->func); in ath10k_sdio_set_mbox_sleep()
1450 struct ath10k_sdio *ar_sdio = from_timer(ar_sdio, t, sleep_timer); in ath10k_sdio_sleep_timer_handler() local
1452 ar_sdio->mbox_state = SDIO_MBOX_REQUEST_TO_SLEEP_STATE; in ath10k_sdio_sleep_timer_handler()
1453 queue_work(ar_sdio->workqueue, &ar_sdio->wr_async_work); in ath10k_sdio_sleep_timer_handler()
1458 struct ath10k_sdio *ar_sdio = container_of(work, struct ath10k_sdio, in ath10k_sdio_write_async_work() local
1460 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_write_async_work()
1462 struct ath10k_mbox_info *mbox_info = &ar_sdio->mbox_info; in ath10k_sdio_write_async_work()
1464 spin_lock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_write_async_work()
1466 list_for_each_entry_safe(req, tmp_req, &ar_sdio->wr_asyncq, list) { in ath10k_sdio_write_async_work()
1468 spin_unlock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_write_async_work()
1471 ar_sdio->mbox_state == SDIO_MBOX_SLEEP_STATE) { in ath10k_sdio_write_async_work()
1473 mod_timer(&ar_sdio->sleep_timer, jiffies + in ath10k_sdio_write_async_work()
1478 spin_lock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_write_async_work()
1481 spin_unlock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_write_async_work()
1483 if (ar_sdio->mbox_state == SDIO_MBOX_REQUEST_TO_SLEEP_STATE) in ath10k_sdio_write_async_work()
1492 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_prep_async_req() local
1511 spin_lock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_prep_async_req()
1512 list_add_tail(&bus_req->list, &ar_sdio->wr_asyncq); in ath10k_sdio_prep_async_req()
1513 spin_unlock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_prep_async_req()
1522 struct ath10k_sdio *ar_sdio = sdio_get_drvdata(func); in ath10k_sdio_irq_handler() local
1523 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_irq_handler()
1531 sdio_release_host(ar_sdio->func); in ath10k_sdio_irq_handler()
1542 sdio_claim_host(ar_sdio->func); in ath10k_sdio_irq_handler()
1553 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_disable_intrs() local
1554 struct ath10k_sdio_irq_data *irq_data = &ar_sdio->irq_data; in ath10k_sdio_disable_intrs()
1574 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_power_up() local
1575 struct sdio_func *func = ar_sdio->func; in ath10k_sdio_hif_power_up()
1578 if (!ar_sdio->is_disabled) in ath10k_sdio_hif_power_up()
1605 ar_sdio->is_disabled = false; in ath10k_sdio_hif_power_up()
1616 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_power_down() local
1619 if (ar_sdio->is_disabled) in ath10k_sdio_hif_power_down()
1624 del_timer_sync(&ar_sdio->sleep_timer); in ath10k_sdio_hif_power_down()
1628 sdio_claim_host(ar_sdio->func); in ath10k_sdio_hif_power_down()
1630 ret = sdio_disable_func(ar_sdio->func); in ath10k_sdio_hif_power_down()
1633 sdio_release_host(ar_sdio->func); in ath10k_sdio_hif_power_down()
1637 ret = mmc_hw_reset(ar_sdio->func->card); in ath10k_sdio_hif_power_down()
1641 sdio_release_host(ar_sdio->func); in ath10k_sdio_hif_power_down()
1643 ar_sdio->is_disabled = true; in ath10k_sdio_hif_power_down()
1649 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_tx_sg() local
1661 padded_len = ath10k_sdio_calc_txrx_padded_len(ar_sdio, in ath10k_sdio_hif_tx_sg()
1666 address = ar_sdio->mbox_addr[eid] + ar_sdio->mbox_size[eid] - in ath10k_sdio_hif_tx_sg()
1674 queue_work(ar_sdio->workqueue, &ar_sdio->wr_async_work); in ath10k_sdio_hif_tx_sg()
1681 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_enable_intrs() local
1682 struct ath10k_sdio_irq_data *irq_data = &ar_sdio->irq_data; in ath10k_sdio_enable_intrs()
1810 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_start_post() local
1825 ar_sdio->swap_mbox = true; in ath10k_sdio_hif_start_post()
1829 ar_sdio->swap_mbox = false; in ath10k_sdio_hif_start_post()
1863 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_start() local
1880 ar_sdio->mbox_addr[0] = ar_sdio->mbox_info.ext_info[0].htc_ext_addr; in ath10k_sdio_hif_start()
1881 ar_sdio->mbox_size[0] = ar_sdio->mbox_info.ext_info[0].htc_ext_sz; in ath10k_sdio_hif_start()
1883 sdio_claim_host(ar_sdio->func); in ath10k_sdio_hif_start()
1886 ret = sdio_claim_irq(ar_sdio->func, ath10k_sdio_irq_handler); in ath10k_sdio_hif_start()
1889 sdio_release_host(ar_sdio->func); in ath10k_sdio_hif_start()
1893 sdio_release_host(ar_sdio->func); in ath10k_sdio_hif_start()
1918 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_irq_disable() local
1919 struct ath10k_sdio_irq_data *irq_data = &ar_sdio->irq_data; in ath10k_sdio_irq_disable()
1943 queue_work(ar_sdio->workqueue, &ar_sdio->wr_async_work); in ath10k_sdio_irq_disable()
1953 sdio_claim_host(ar_sdio->func); in ath10k_sdio_irq_disable()
1955 ret = sdio_release_irq(ar_sdio->func); in ath10k_sdio_irq_disable()
1959 sdio_release_host(ar_sdio->func); in ath10k_sdio_irq_disable()
1968 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_stop() local
1973 cancel_work_sync(&ar_sdio->async_work_rx); in ath10k_sdio_hif_stop()
1975 while ((skb = skb_dequeue(&ar_sdio->rx_head))) in ath10k_sdio_hif_stop()
1978 cancel_work_sync(&ar_sdio->wr_async_work); in ath10k_sdio_hif_stop()
1980 spin_lock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_hif_stop()
1983 list_for_each_entry_safe(req, tmp_req, &ar_sdio->wr_asyncq, list) { in ath10k_sdio_hif_stop()
1997 spin_unlock_bh(&ar_sdio->wr_async_lock); in ath10k_sdio_hif_stop()
2033 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_map_service_to_pipe() local
2066 if (ar_sdio->swap_mbox) { in ath10k_sdio_hif_map_service_to_pipe()
2067 htt_addr = ar_sdio->mbox_info.ext_info[0].htc_ext_addr; in ath10k_sdio_hif_map_service_to_pipe()
2068 wmi_addr = ar_sdio->mbox_info.ext_info[1].htc_ext_addr; in ath10k_sdio_hif_map_service_to_pipe()
2069 htt_mbox_size = ar_sdio->mbox_info.ext_info[0].htc_ext_sz; in ath10k_sdio_hif_map_service_to_pipe()
2070 wmi_mbox_size = ar_sdio->mbox_info.ext_info[1].htc_ext_sz; in ath10k_sdio_hif_map_service_to_pipe()
2072 htt_addr = ar_sdio->mbox_info.ext_info[1].htc_ext_addr; in ath10k_sdio_hif_map_service_to_pipe()
2073 wmi_addr = ar_sdio->mbox_info.ext_info[0].htc_ext_addr; in ath10k_sdio_hif_map_service_to_pipe()
2074 htt_mbox_size = ar_sdio->mbox_info.ext_info[1].htc_ext_sz; in ath10k_sdio_hif_map_service_to_pipe()
2075 wmi_mbox_size = ar_sdio->mbox_info.ext_info[0].htc_ext_sz; in ath10k_sdio_hif_map_service_to_pipe()
2085 ar_sdio->mbox_addr[eid] = wmi_addr; in ath10k_sdio_hif_map_service_to_pipe()
2086 ar_sdio->mbox_size[eid] = wmi_mbox_size; in ath10k_sdio_hif_map_service_to_pipe()
2089 ar_sdio->mbox_addr[eid], ar_sdio->mbox_size[eid]); in ath10k_sdio_hif_map_service_to_pipe()
2092 ar_sdio->mbox_addr[eid] = htt_addr; in ath10k_sdio_hif_map_service_to_pipe()
2093 ar_sdio->mbox_size[eid] = htt_mbox_size; in ath10k_sdio_hif_map_service_to_pipe()
2096 ar_sdio->mbox_addr[eid], ar_sdio->mbox_size[eid]); in ath10k_sdio_hif_map_service_to_pipe()
2146 struct ath10k_sdio *ar_sdio = sdio_get_drvdata(func); in ath10k_sdio_pm_suspend() local
2147 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_pm_suspend()
2513 struct ath10k_sdio *ar_sdio; in ath10k_sdio_probe() local
2528 ar = ath10k_core_create(sizeof(*ar_sdio), &func->dev, ATH10K_BUS_SDIO, in ath10k_sdio_probe()
2542 ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_probe()
2544 ar_sdio->irq_data.irq_proc_reg = in ath10k_sdio_probe()
2547 if (!ar_sdio->irq_data.irq_proc_reg) { in ath10k_sdio_probe()
2552 ar_sdio->vsg_buffer = devm_kmalloc(ar->dev, ATH10K_SDIO_VSG_BUF_SIZE, GFP_KERNEL); in ath10k_sdio_probe()
2553 if (!ar_sdio->vsg_buffer) { in ath10k_sdio_probe()
2558 ar_sdio->irq_data.irq_en_reg = in ath10k_sdio_probe()
2561 if (!ar_sdio->irq_data.irq_en_reg) { in ath10k_sdio_probe()
2566 ar_sdio->bmi_buf = devm_kzalloc(ar->dev, BMI_MAX_LARGE_CMDBUF_SIZE, GFP_KERNEL); in ath10k_sdio_probe()
2567 if (!ar_sdio->bmi_buf) { in ath10k_sdio_probe()
2572 ar_sdio->func = func; in ath10k_sdio_probe()
2573 sdio_set_drvdata(func, ar_sdio); in ath10k_sdio_probe()
2575 ar_sdio->is_disabled = true; in ath10k_sdio_probe()
2576 ar_sdio->ar = ar; in ath10k_sdio_probe()
2578 spin_lock_init(&ar_sdio->lock); in ath10k_sdio_probe()
2579 spin_lock_init(&ar_sdio->wr_async_lock); in ath10k_sdio_probe()
2580 mutex_init(&ar_sdio->irq_data.mtx); in ath10k_sdio_probe()
2582 INIT_LIST_HEAD(&ar_sdio->bus_req_freeq); in ath10k_sdio_probe()
2583 INIT_LIST_HEAD(&ar_sdio->wr_asyncq); in ath10k_sdio_probe()
2585 INIT_WORK(&ar_sdio->wr_async_work, ath10k_sdio_write_async_work); in ath10k_sdio_probe()
2586 ar_sdio->workqueue = create_singlethread_workqueue("ath10k_sdio_wq"); in ath10k_sdio_probe()
2587 if (!ar_sdio->workqueue) { in ath10k_sdio_probe()
2593 ath10k_sdio_free_bus_req(ar, &ar_sdio->bus_req[i]); in ath10k_sdio_probe()
2595 skb_queue_head_init(&ar_sdio->rx_head); in ath10k_sdio_probe()
2596 INIT_WORK(&ar_sdio->async_work_rx, ath10k_rx_indication_async_work); in ath10k_sdio_probe()
2626 timer_setup(&ar_sdio->sleep_timer, ath10k_sdio_sleep_timer_handler, 0); in ath10k_sdio_probe()
2631 destroy_workqueue(ar_sdio->workqueue); in ath10k_sdio_probe()
2640 struct ath10k_sdio *ar_sdio = sdio_get_drvdata(func); in ath10k_sdio_remove() local
2641 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_remove()
2653 destroy_workqueue(ar_sdio->workqueue); in ath10k_sdio_remove()