summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/cnss/cnss_pci.c66
-rw-r--r--drivers/net/wireless/cnss/cnss_sdio.c38
-rw-r--r--include/net/cnss.h11
3 files changed, 115 insertions, 0 deletions
diff --git a/drivers/net/wireless/cnss/cnss_pci.c b/drivers/net/wireless/cnss/cnss_pci.c
index 00d3f2a1fd3f..2e01ae9528f2 100644
--- a/drivers/net/wireless/cnss/cnss_pci.c
+++ b/drivers/net/wireless/cnss/cnss_pci.c
@@ -2810,6 +2810,72 @@ void cnss_remove_pm_qos(void)
}
EXPORT_SYMBOL(cnss_remove_pm_qos);
+void cnss_pci_request_pm_qos_type(int latency_type, u32 qos_val)
+{
+ if (!penv) {
+ pr_err("%s: penv is NULL\n", __func__);
+ return;
+ }
+
+ pm_qos_add_request(&penv->qos_request, latency_type, qos_val);
+}
+EXPORT_SYMBOL(cnss_pci_request_pm_qos_type);
+
+void cnss_pci_request_pm_qos(u32 qos_val)
+{
+ if (!penv) {
+ pr_err("%s: penv is NULL\n", __func__);
+ return;
+ }
+
+ pm_qos_add_request(&penv->qos_request, PM_QOS_CPU_DMA_LATENCY, qos_val);
+}
+EXPORT_SYMBOL(cnss_pci_request_pm_qos);
+
+void cnss_pci_remove_pm_qos(void)
+{
+ if (!penv) {
+ pr_err("%s: penv is NULL\n", __func__);
+ return;
+ }
+
+ pm_qos_remove_request(&penv->qos_request);
+}
+EXPORT_SYMBOL(cnss_pci_remove_pm_qos);
+
+int cnss_pci_request_bus_bandwidth(int bandwidth)
+{
+ int ret = 0;
+
+ if (!penv)
+ return -ENODEV;
+
+ if (!penv->bus_client)
+ return -ENOSYS;
+
+ switch (bandwidth) {
+ case CNSS_BUS_WIDTH_NONE:
+ case CNSS_BUS_WIDTH_LOW:
+ case CNSS_BUS_WIDTH_MEDIUM:
+ case CNSS_BUS_WIDTH_HIGH:
+ ret = msm_bus_scale_client_update_request(
+ penv->bus_client, bandwidth);
+ if (!ret) {
+ penv->current_bandwidth_vote = bandwidth;
+ } else {
+ pr_err("%s: could not set bus bandwidth %d, ret = %d\n",
+ __func__, bandwidth, ret);
+ }
+ break;
+
+ default:
+ pr_err("%s: Invalid request %d", __func__, bandwidth);
+ ret = -EINVAL;
+ }
+ return ret;
+}
+EXPORT_SYMBOL(cnss_pci_request_bus_bandwidth);
+
int cnss_request_bus_bandwidth(int bandwidth)
{
int ret = 0;
diff --git a/drivers/net/wireless/cnss/cnss_sdio.c b/drivers/net/wireless/cnss/cnss_sdio.c
index baf81d851688..7cdd2a033caf 100644
--- a/drivers/net/wireless/cnss/cnss_sdio.c
+++ b/drivers/net/wireless/cnss/cnss_sdio.c
@@ -125,6 +125,44 @@ static const struct sdio_device_id ar6k_id_table[] = {
};
MODULE_DEVICE_TABLE(sdio, ar6k_id_table);
+void cnss_sdio_request_pm_qos_type(int latency_type, u32 qos_val)
+{
+ if (!cnss_pdata)
+ return;
+
+ pr_debug("%s: PM QoS value: %d\n", __func__, qos_val);
+ pm_qos_add_request(&cnss_pdata->qos_request, latency_type, qos_val);
+}
+EXPORT_SYMBOL(cnss_sdio_request_pm_qos_type);
+
+int cnss_sdio_request_bus_bandwidth(int bandwidth)
+{
+ return 0;
+}
+EXPORT_SYMBOL(cnss_sdio_request_bus_bandwidth);
+
+void cnss_sdio_request_pm_qos(u32 qos_val)
+{
+ if (!cnss_pdata)
+ return;
+
+ pr_debug("%s: PM QoS value: %d\n", __func__, qos_val);
+ pm_qos_add_request(
+ &cnss_pdata->qos_request,
+ PM_QOS_CPU_DMA_LATENCY, qos_val);
+}
+EXPORT_SYMBOL(cnss_sdio_request_pm_qos);
+
+void cnss_sdio_remove_pm_qos(void)
+{
+ if (!cnss_pdata)
+ return;
+
+ pm_qos_remove_request(&cnss_pdata->qos_request);
+ pr_debug("%s: PM QoS removed\n", __func__);
+}
+EXPORT_SYMBOL(cnss_sdio_remove_pm_qos);
+
int cnss_request_bus_bandwidth(int bandwidth)
{
return 0;
diff --git a/include/net/cnss.h b/include/net/cnss.h
index cfda3cdfa128..71b8d9a27f46 100644
--- a/include/net/cnss.h
+++ b/include/net/cnss.h
@@ -122,6 +122,8 @@ extern void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver);
extern int cnss_get_fw_files(struct cnss_fw_files *pfw_files);
extern int cnss_get_fw_files_for_target(struct cnss_fw_files *pfw_files,
u32 target_type, u32 target_version);
+extern int cnss_pci_request_bus_bandwidth(int bandwidth);
+extern int cnss_sdio_request_bus_bandwidth(int bandwidth);
extern int cnss_request_bus_bandwidth(int bandwidth);
extern int cnss_get_sha_hash(const u8 *data, u32 data_len,
@@ -140,6 +142,15 @@ extern void cnss_release_pm_sem(void);
extern void cnss_request_pm_qos_type(int latency_type, u32 qos_val);
extern void cnss_request_pm_qos(u32 qos_val);
extern void cnss_remove_pm_qos(void);
+
+extern void cnss_pci_request_pm_qos_type(int latency_type, u32 qos_val);
+extern void cnss_pci_request_pm_qos(u32 qos_val);
+extern void cnss_pci_remove_pm_qos(void);
+
+extern void cnss_sdio_request_pm_qos_type(int latency_type, u32 qos_val);
+extern void cnss_sdio_request_pm_qos(u32 qos_val);
+extern void cnss_sdio_remove_pm_qos(void);
+
extern int cnss_get_platform_cap(struct cnss_platform_cap *cap);
extern void cnss_set_driver_status(enum cnss_driver_status driver_status);