Searched refs:ar_sdio (Results 1 - 1 of 1) sorted by relevance

/linux-4.1.27/drivers/net/wireless/ath/ath6kl/
H A Dsdio.c188 static struct bus_request *ath6kl_sdio_alloc_busreq(struct ath6kl_sdio *ar_sdio) ath6kl_sdio_alloc_busreq() argument
192 spin_lock_bh(&ar_sdio->lock); ath6kl_sdio_alloc_busreq()
194 if (list_empty(&ar_sdio->bus_req_freeq)) { ath6kl_sdio_alloc_busreq()
195 spin_unlock_bh(&ar_sdio->lock); ath6kl_sdio_alloc_busreq()
199 bus_req = list_first_entry(&ar_sdio->bus_req_freeq, ath6kl_sdio_alloc_busreq()
203 spin_unlock_bh(&ar_sdio->lock); ath6kl_sdio_alloc_busreq()
210 static void ath6kl_sdio_free_bus_req(struct ath6kl_sdio *ar_sdio, ath6kl_sdio_free_bus_req() argument
216 spin_lock_bh(&ar_sdio->lock); ath6kl_sdio_free_bus_req()
217 list_add_tail(&bus_req->list, &ar_sdio->bus_req_freeq); ath6kl_sdio_free_bus_req()
218 spin_unlock_bh(&ar_sdio->lock); ath6kl_sdio_free_bus_req()
258 static int ath6kl_sdio_scat_rw(struct ath6kl_sdio *ar_sdio, ath6kl_sdio_scat_rw() argument
275 status = ath6kl_sdio_io(ar_sdio->func, scat_req->req, ath6kl_sdio_scat_rw()
302 ath6kl_sdio_set_cmd53_arg(&cmd.arg, rw, ar_sdio->func->num, ath6kl_sdio_scat_rw()
312 sdio_claim_host(ar_sdio->func); ath6kl_sdio_scat_rw()
314 mmc_set_data_timeout(&data, ar_sdio->func->card); ath6kl_sdio_scat_rw()
323 mmc_wait_for_req(ar_sdio->func->card->host, &mmc_req); ath6kl_sdio_scat_rw()
325 sdio_release_host(ar_sdio->func); ath6kl_sdio_scat_rw()
337 scat_req->complete(ar_sdio->ar->htc_target, scat_req); ath6kl_sdio_scat_rw()
342 static int ath6kl_sdio_alloc_prep_scat_req(struct ath6kl_sdio *ar_sdio, ath6kl_sdio_alloc_prep_scat_req() argument
386 bus_req = ath6kl_sdio_alloc_busreq(ar_sdio); ath6kl_sdio_alloc_prep_scat_req()
401 hif_scatter_req_add(ar_sdio->ar, s_req); ath6kl_sdio_alloc_prep_scat_req()
410 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_read_write_sync() local
419 if (!ar_sdio->dma_buffer) ath6kl_sdio_read_write_sync()
421 mutex_lock(&ar_sdio->dma_buffer_mutex); ath6kl_sdio_read_write_sync()
422 tbuf = ar_sdio->dma_buffer; ath6kl_sdio_read_write_sync()
432 ret = ath6kl_sdio_io(ar_sdio->func, request, addr, tbuf, len); ath6kl_sdio_read_write_sync()
437 mutex_unlock(&ar_sdio->dma_buffer_mutex); ath6kl_sdio_read_write_sync()
442 static void __ath6kl_sdio_write_async(struct ath6kl_sdio *ar_sdio, __ath6kl_sdio_write_async() argument
446 ath6kl_sdio_scat_rw(ar_sdio, req); __ath6kl_sdio_write_async()
451 status = ath6kl_sdio_read_write_sync(ar_sdio->ar, req->address, __ath6kl_sdio_write_async()
455 ath6kl_sdio_free_bus_req(ar_sdio, req); __ath6kl_sdio_write_async()
462 struct ath6kl_sdio *ar_sdio; ath6kl_sdio_write_async_work() local
465 ar_sdio = container_of(work, struct ath6kl_sdio, wr_async_work); ath6kl_sdio_write_async_work()
467 spin_lock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_write_async_work()
468 list_for_each_entry_safe(req, tmp_req, &ar_sdio->wr_asyncq, list) { ath6kl_sdio_write_async_work()
470 spin_unlock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_write_async_work()
471 __ath6kl_sdio_write_async(ar_sdio, req); ath6kl_sdio_write_async_work()
472 spin_lock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_write_async_work()
474 spin_unlock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_write_async_work()
480 struct ath6kl_sdio *ar_sdio; ath6kl_sdio_irq_handler() local
484 ar_sdio = sdio_get_drvdata(func); ath6kl_sdio_irq_handler()
485 atomic_set(&ar_sdio->irq_handling, 1); ath6kl_sdio_irq_handler()
490 sdio_release_host(ar_sdio->func); ath6kl_sdio_irq_handler()
492 status = ath6kl_hif_intr_bh_handler(ar_sdio->ar); ath6kl_sdio_irq_handler()
493 sdio_claim_host(ar_sdio->func); ath6kl_sdio_irq_handler()
495 atomic_set(&ar_sdio->irq_handling, 0); ath6kl_sdio_irq_handler()
496 wake_up(&ar_sdio->irq_wq); ath6kl_sdio_irq_handler()
503 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_power_on() local
504 struct sdio_func *func = ar_sdio->func; ath6kl_sdio_power_on()
507 if (!ar_sdio->is_disabled) ath6kl_sdio_power_on()
529 ar_sdio->is_disabled = false; ath6kl_sdio_power_on()
536 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_power_off() local
539 if (ar_sdio->is_disabled) ath6kl_sdio_power_off()
545 sdio_claim_host(ar_sdio->func); ath6kl_sdio_power_off()
546 ret = sdio_disable_func(ar_sdio->func); ath6kl_sdio_power_off()
547 sdio_release_host(ar_sdio->func); ath6kl_sdio_power_off()
552 ar_sdio->is_disabled = true; ath6kl_sdio_power_off()
561 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_write_async() local
564 bus_req = ath6kl_sdio_alloc_busreq(ar_sdio); ath6kl_sdio_write_async()
575 spin_lock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_write_async()
576 list_add_tail(&bus_req->list, &ar_sdio->wr_asyncq); ath6kl_sdio_write_async()
577 spin_unlock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_write_async()
578 queue_work(ar->ath6kl_wq, &ar_sdio->wr_async_work); ath6kl_sdio_write_async()
585 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_irq_enable() local
588 sdio_claim_host(ar_sdio->func); ath6kl_sdio_irq_enable()
591 ret = sdio_claim_irq(ar_sdio->func, ath6kl_sdio_irq_handler); ath6kl_sdio_irq_enable()
595 sdio_release_host(ar_sdio->func); ath6kl_sdio_irq_enable()
600 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_is_on_irq() local
602 return !atomic_read(&ar_sdio->irq_handling); ath6kl_sdio_is_on_irq()
607 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_irq_disable() local
610 sdio_claim_host(ar_sdio->func); ath6kl_sdio_irq_disable()
612 if (atomic_read(&ar_sdio->irq_handling)) { ath6kl_sdio_irq_disable()
613 sdio_release_host(ar_sdio->func); ath6kl_sdio_irq_disable()
615 ret = wait_event_interruptible(ar_sdio->irq_wq, ath6kl_sdio_irq_disable()
620 sdio_claim_host(ar_sdio->func); ath6kl_sdio_irq_disable()
623 ret = sdio_release_irq(ar_sdio->func); ath6kl_sdio_irq_disable()
627 sdio_release_host(ar_sdio->func); ath6kl_sdio_irq_disable()
632 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_scatter_req_get() local
635 spin_lock_bh(&ar_sdio->scat_lock); ath6kl_sdio_scatter_req_get()
637 if (!list_empty(&ar_sdio->scat_req)) { ath6kl_sdio_scatter_req_get()
638 node = list_first_entry(&ar_sdio->scat_req, ath6kl_sdio_scatter_req_get()
642 node->scat_q_depth = get_queue_depth(&ar_sdio->scat_req); ath6kl_sdio_scatter_req_get()
645 spin_unlock_bh(&ar_sdio->scat_lock); ath6kl_sdio_scatter_req_get()
653 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_scatter_req_add() local
655 spin_lock_bh(&ar_sdio->scat_lock); ath6kl_sdio_scatter_req_add()
657 list_add_tail(&s_req->list, &ar_sdio->scat_req); ath6kl_sdio_scatter_req_add()
659 spin_unlock_bh(&ar_sdio->scat_lock); ath6kl_sdio_scatter_req_add()
666 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_async_rw_scatter() local
678 status = ath6kl_sdio_scat_rw(ar_sdio, scat_req->busrequest); ath6kl_sdio_async_rw_scatter()
680 spin_lock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_async_rw_scatter()
681 list_add_tail(&scat_req->busrequest->list, &ar_sdio->wr_asyncq); ath6kl_sdio_async_rw_scatter()
682 spin_unlock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_async_rw_scatter()
683 queue_work(ar->ath6kl_wq, &ar_sdio->wr_async_work); ath6kl_sdio_async_rw_scatter()
692 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_cleanup_scatter() local
696 spin_lock_bh(&ar_sdio->scat_lock); ath6kl_sdio_cleanup_scatter()
697 list_for_each_entry_safe(s_req, tmp_req, &ar_sdio->scat_req, list) { ath6kl_sdio_cleanup_scatter()
699 spin_unlock_bh(&ar_sdio->scat_lock); ath6kl_sdio_cleanup_scatter()
707 ath6kl_sdio_free_bus_req(ar_sdio, s_req->busrequest); ath6kl_sdio_cleanup_scatter()
712 spin_lock_bh(&ar_sdio->scat_lock); ath6kl_sdio_cleanup_scatter()
714 spin_unlock_bh(&ar_sdio->scat_lock); ath6kl_sdio_cleanup_scatter()
720 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_enable_scatter() local
725 if (ar_sdio->scatter_enabled) ath6kl_sdio_enable_scatter()
728 ar_sdio->scatter_enabled = true; ath6kl_sdio_enable_scatter()
731 if (ar_sdio->func->card->host->max_segs < MAX_SCATTER_ENTRIES_PER_REQ) { ath6kl_sdio_enable_scatter()
733 ar_sdio->func->card->host->max_segs, ath6kl_sdio_enable_scatter()
739 ret = ath6kl_sdio_alloc_prep_scat_req(ar_sdio, ath6kl_sdio_enable_scatter()
759 ret = ath6kl_sdio_alloc_prep_scat_req(ar_sdio, ath6kl_sdio_enable_scatter()
783 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_config() local
784 struct sdio_func *func = ar_sdio->func; ath6kl_sdio_config()
789 if ((ar_sdio->id->device & MANUFACTURER_ID_ATH6KL_BASE_MASK) >= ath6kl_sdio_config()
822 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_set_sdio_pm_caps() local
823 struct sdio_func *func = ar_sdio->func; ath6kl_set_sdio_pm_caps()
851 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_suspend() local
852 struct sdio_func *func = ar_sdio->func; ath6kl_sdio_suspend()
1212 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); ath6kl_sdio_stop() local
1218 cancel_work_sync(&ar_sdio->wr_async_work); ath6kl_sdio_stop()
1220 spin_lock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_stop()
1222 list_for_each_entry_safe(req, tmp_req, &ar_sdio->wr_asyncq, list) { ath6kl_sdio_stop()
1228 req->scat_req->complete(ar_sdio->ar->htc_target, ath6kl_sdio_stop()
1232 ath6kl_sdio_free_bus_req(ar_sdio, req); ath6kl_sdio_stop()
1237 spin_unlock_bh(&ar_sdio->wr_async_lock); ath6kl_sdio_stop()
1239 WARN_ON(get_queue_depth(&ar_sdio->scat_req) != 4); ath6kl_sdio_stop()
1298 struct ath6kl_sdio *ar_sdio; ath6kl_sdio_probe() local
1307 ar_sdio = kzalloc(sizeof(struct ath6kl_sdio), GFP_KERNEL); ath6kl_sdio_probe()
1308 if (!ar_sdio) ath6kl_sdio_probe()
1311 ar_sdio->dma_buffer = kzalloc(HIF_DMA_BUFFER_SIZE, GFP_KERNEL); ath6kl_sdio_probe()
1312 if (!ar_sdio->dma_buffer) { ath6kl_sdio_probe()
1317 ar_sdio->func = func; ath6kl_sdio_probe()
1318 sdio_set_drvdata(func, ar_sdio); ath6kl_sdio_probe()
1320 ar_sdio->id = id; ath6kl_sdio_probe()
1321 ar_sdio->is_disabled = true; ath6kl_sdio_probe()
1323 spin_lock_init(&ar_sdio->lock); ath6kl_sdio_probe()
1324 spin_lock_init(&ar_sdio->scat_lock); ath6kl_sdio_probe()
1325 spin_lock_init(&ar_sdio->wr_async_lock); ath6kl_sdio_probe()
1326 mutex_init(&ar_sdio->dma_buffer_mutex); ath6kl_sdio_probe()
1328 INIT_LIST_HEAD(&ar_sdio->scat_req); ath6kl_sdio_probe()
1329 INIT_LIST_HEAD(&ar_sdio->bus_req_freeq); ath6kl_sdio_probe()
1330 INIT_LIST_HEAD(&ar_sdio->wr_asyncq); ath6kl_sdio_probe()
1332 INIT_WORK(&ar_sdio->wr_async_work, ath6kl_sdio_write_async_work); ath6kl_sdio_probe()
1334 init_waitqueue_head(&ar_sdio->irq_wq); ath6kl_sdio_probe()
1337 ath6kl_sdio_free_bus_req(ar_sdio, &ar_sdio->bus_req[count]); ath6kl_sdio_probe()
1339 ar = ath6kl_core_create(&ar_sdio->func->dev); ath6kl_sdio_probe()
1346 ar_sdio->ar = ar; ath6kl_sdio_probe()
1348 ar->hif_priv = ar_sdio; ath6kl_sdio_probe()
1369 ath6kl_core_destroy(ar_sdio->ar); ath6kl_sdio_probe()
1371 kfree(ar_sdio->dma_buffer); ath6kl_sdio_probe()
1373 kfree(ar_sdio); ath6kl_sdio_probe()
1380 struct ath6kl_sdio *ar_sdio; ath6kl_sdio_remove() local
1386 ar_sdio = sdio_get_drvdata(func); ath6kl_sdio_remove()
1388 ath6kl_stop_txrx(ar_sdio->ar); ath6kl_sdio_remove()
1389 cancel_work_sync(&ar_sdio->wr_async_work); ath6kl_sdio_remove()
1391 ath6kl_core_cleanup(ar_sdio->ar); ath6kl_sdio_remove()
1392 ath6kl_core_destroy(ar_sdio->ar); ath6kl_sdio_remove()
1394 kfree(ar_sdio->dma_buffer); ath6kl_sdio_remove()
1395 kfree(ar_sdio); ath6kl_sdio_remove()

Completed in 53 milliseconds