Lines Matching +full:dual +full:- +full:radio

1 // SPDX-License-Identifier: ISC
3 * Copyright (c) 2012-2017 Qualcomm Atheros, Inc.
4 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
18 MODULE_PARM_DESC(n_msi, " Use MSI interrupt: 0 - use INTx, 1 - single, or 3 - (default) ");
22 MODULE_PARM_DESC(ftm_mode, " Set factory test mode, default - false");
37 bitmap_zero(wil->hw_capa, hw_capa_last); in wil_set_capabilities()
38 bitmap_zero(wil->fw_capabilities, WMI_FW_CAPABILITY_MAX); in wil_set_capabilities()
39 bitmap_zero(wil->platform_capa, WIL_PLATFORM_CAPA_MAX); in wil_set_capabilities()
40 wil->wil_fw_name = ftm_mode ? WIL_FW_NAME_FTM_DEFAULT : in wil_set_capabilities()
42 wil->chip_revision = chip_revision; in wil_set_capabilities()
50 wil->hw_name = "Sparrow D0"; in wil_set_capabilities()
51 wil->hw_version = HW_VER_SPARROW_D0; in wil_set_capabilities()
56 wil->wil_fw_name = wil_fw_name; in wil_set_capabilities()
60 return -EINVAL; in wil_set_capabilities()
65 wil->hw_name = "Sparrow B0"; in wil_set_capabilities()
66 wil->hw_version = HW_VER_SPARROW_B0; in wil_set_capabilities()
69 wil->hw_name = "Unknown"; in wil_set_capabilities()
70 wil->hw_version = HW_VER_UNKNOWN; in wil_set_capabilities()
73 wil->rgf_fw_assert_code_addr = SPARROW_RGF_FW_ASSERT_CODE; in wil_set_capabilities()
74 wil->rgf_ucode_assert_code_addr = SPARROW_RGF_UCODE_ASSERT_CODE; in wil_set_capabilities()
77 wil->hw_name = "Talyn-MA"; in wil_set_capabilities()
78 wil->hw_version = HW_VER_TALYN; in wil_set_capabilities()
80 wil->rgf_fw_assert_code_addr = TALYN_RGF_FW_ASSERT_CODE; in wil_set_capabilities()
81 wil->rgf_ucode_assert_code_addr = TALYN_RGF_UCODE_ASSERT_CODE; in wil_set_capabilities()
84 set_bit(hw_capa_no_flash, wil->hw_capa); in wil_set_capabilities()
88 wil->wil_fw_name = wil_fw_name; in wil_set_capabilities()
91 wil->hw_name = "Talyn-MB"; in wil_set_capabilities()
92 wil->hw_version = HW_VER_TALYN_MB; in wil_set_capabilities()
95 wil->rgf_fw_assert_code_addr = TALYN_RGF_FW_ASSERT_CODE; in wil_set_capabilities()
96 wil->rgf_ucode_assert_code_addr = TALYN_RGF_UCODE_ASSERT_CODE; in wil_set_capabilities()
97 set_bit(hw_capa_no_flash, wil->hw_capa); in wil_set_capabilities()
98 wil->use_enhanced_dma_hw = true; in wil_set_capabilities()
99 wil->use_rx_hw_reordering = true; in wil_set_capabilities()
100 wil->use_compressed_rx_status = true; in wil_set_capabilities()
104 wil->wil_fw_name = wil_fw_name; in wil_set_capabilities()
109 wil->hw_name = "Unknown"; in wil_set_capabilities()
110 wil->hw_version = HW_VER_UNKNOWN; in wil_set_capabilities()
111 return -EINVAL; in wil_set_capabilities()
119 return -EINVAL; in wil_set_capabilities()
121 wil->iccm_base = iccm_section->host; in wil_set_capabilities()
123 wil_info(wil, "Board hardware is %s, flash %sexist\n", wil->hw_name, in wil_set_capabilities()
124 test_bit(hw_capa_no_flash, wil->hw_capa) ? "doesn't " : ""); in wil_set_capabilities()
127 if (wil->platform_ops.get_capa) { in wil_set_capabilities()
129 wil->platform_ops.get_capa(wil->platform_handle); in wil_set_capabilities()
130 memcpy(wil->platform_capa, &platform_capa, in wil_set_capabilities()
131 min(sizeof(wil->platform_capa), sizeof(platform_capa))); in wil_set_capabilities()
134 wil_info(wil, "platform_capa 0x%lx\n", *wil->platform_capa); in wil_set_capabilities()
137 wil_request_firmware(wil, wil->wil_fw_name, false); in wil_set_capabilities()
145 int irq = wil->pdev->irq; in wil_disable_irq()
148 if (wil->n_msi == 3) { in wil_disable_irq()
156 int irq = wil->pdev->irq; in wil_enable_irq()
159 if (wil->n_msi == 3) { in wil_enable_irq()
171 vif = wil->vifs[i]; in wil_remove_all_additional_vifs()
174 wil_vif_remove(wil, vif->mid); in wil_remove_all_additional_vifs()
182 struct pci_dev *pdev = wil->pdev; in wil_if_pcie_enable()
184 /* on platforms with buggy ACPI, pdev->msi_enabled may be set to in wil_if_pcie_enable()
188 int msi_only = pdev->msi_enabled; in wil_if_pcie_enable()
219 wil->n_msi = n_msi; in wil_if_pcie_enable()
221 if (wil->n_msi == 0 && msi_only) { in wil_if_pcie_enable()
223 rc = -ENODEV; in wil_if_pcie_enable()
227 rc = wil6210_init_irq(wil, pdev->irq); in wil_if_pcie_enable()
232 mutex_lock(&wil->mutex); in wil_if_pcie_enable()
234 mutex_unlock(&wil->mutex); in wil_if_pcie_enable()
241 wil6210_fini_irq(wil, pdev->irq); in wil_if_pcie_enable()
252 struct pci_dev *pdev = wil->pdev; in wil_if_pcie_disable()
258 wil6210_fini_irq(wil, pdev->irq); in wil_if_pcie_disable()
271 return -EINVAL; in wil_platform_rop_ramdump()
281 return -EINVAL; in wil_platform_rop_fw_recovery()
290 if (wil->platform_ops.uninit) in wil_platform_ops_uninit()
291 wil->platform_ops.uninit(wil->platform_handle); in wil_platform_ops_uninit()
292 memset(&wil->platform_ops, 0, sizeof(wil->platform_ops)); in wil_platform_ops_uninit()
298 struct device *dev = &pdev->dev; in wil_pcie_probe()
309 dev_info(&pdev->dev, WIL_NAME in wil_pcie_probe()
311 (int)pdev->vendor, (int)pdev->device, (int)pdev->revision, in wil_pcie_probe()
316 dev_err(&pdev->dev, "Unexpected BAR0 size 0x%x\n", in wil_pcie_probe()
318 return -ENODEV; in wil_pcie_probe()
328 wil->pdev = pdev; in wil_pcie_probe()
330 wil->bar_size = bar_size; in wil_pcie_probe()
333 wil->platform_handle = in wil_pcie_probe()
334 wil_platform_init(&pdev->dev, &wil->platform_ops, &rops, wil); in wil_pcie_probe()
335 if (!wil->platform_handle) { in wil_pcie_probe()
336 rc = -ENODEV; in wil_pcie_probe()
342 if (rc && pdev->msi_enabled == 0) { in wil_pcie_probe()
348 pdev->msi_enabled = 1; in wil_pcie_probe()
366 wil->csr = pci_ioremap_bar(pdev, 0); in wil_pcie_probe()
367 if (!wil->csr) { in wil_pcie_probe()
369 rc = -ENODEV; in wil_pcie_probe()
373 wil_info(wil, "CSR at %pR -> 0x%p\n", &pdev->resource[0], wil->csr); in wil_pcie_probe()
384 start_idx = wil->use_enhanced_dma_hw ? 0 : 1; in wil_pcie_probe()
395 wil->dma_addr_size = dma_addr_size[i]; in wil_pcie_probe()
399 if (wil->dma_addr_size == 0) in wil_pcie_probe()
419 /* in case of WMI-only FW, perform full reset and FW loading */ in wil_pcie_probe()
420 if (test_bit(WMI_FW_CAPABILITY_WMI_ONLY, wil->fw_capabilities)) { in wil_pcie_probe()
422 mutex_lock(&wil->mutex); in wil_pcie_probe()
424 mutex_unlock(&wil->mutex); in wil_pcie_probe()
432 wil->pm_notify.notifier_call = wil6210_pm_notify; in wil_pcie_probe()
434 rc = register_pm_notifier(&wil->pm_notify); in wil_pcie_probe()
450 pci_iounmap(pdev, wil->csr); in wil_pcie_probe()
466 void __iomem *csr = wil->csr; in wil_pcie_remove()
470 unregister_pm_notifier(&wil->pm_notify); in wil_pcie_remove()
476 wiphy_lock(wil->wiphy); in wil_pcie_remove()
479 wiphy_unlock(wil->wiphy); in wil_pcie_remove()
507 mutex_lock(&wil->vif_mutex); in wil6210_suspend()
509 mutex_unlock(&wil->vif_mutex); in wil6210_suspend()
510 keep_radio_on = active_ifaces && wil->keep_radio_on_during_sleep; in wil6210_suspend()
518 /* In case radio stays on, platform device will control in wil6210_suspend()
524 wil->suspend_stats.r_off.successful_suspends++; in wil6210_suspend()
526 wil->suspend_stats.r_on.successful_suspends++; in wil6210_suspend()
542 mutex_lock(&wil->vif_mutex); in wil6210_resume()
544 mutex_unlock(&wil->vif_mutex); in wil6210_resume()
545 keep_radio_on = active_ifaces && wil->keep_radio_on_during_sleep; in wil6210_resume()
547 /* In case radio stays on, platform device will control in wil6210_resume()
558 wil->suspend_stats.r_off.failed_resumes++; in wil6210_resume()
560 wil->suspend_stats.r_on.failed_resumes++; in wil6210_resume()
564 wil->suspend_stats.r_on.successful_resumes++; in wil6210_resume()
566 wil->suspend_stats.r_off.successful_resumes++; in wil6210_resume()
590 if (wil->platform_ops.notify) in wil6210_pm_notify()
591 rc = wil->platform_ops.notify(wil->platform_handle, in wil6210_pm_notify()
598 if (wil->platform_ops.notify) in wil6210_pm_notify()
599 rc = wil->platform_ops.notify(wil->platform_handle, in wil6210_pm_notify()
639 if (test_bit(wil_status_suspended, wil->status)) { in wil6210_pm_runtime_suspend()
686 MODULE_LICENSE("Dual BSD/GPL");