Loading drivers/net/wireless/cnss2/bus.c +30 −0 Original line number Original line Diff line number Diff line Loading @@ -186,6 +186,36 @@ int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv) } } } } int cnss_bus_qmi_send_get(struct cnss_plat_data *plat_priv) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_qmi_send_get(plat_priv->bus_priv); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } } int cnss_bus_qmi_send_put(struct cnss_plat_data *plat_priv) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_qmi_send_put(plat_priv->bus_priv); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } } void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t) void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t) { { struct cnss_plat_data *plat_priv = struct cnss_plat_data *plat_priv = Loading drivers/net/wireless/cnss2/bus.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,8 @@ int cnss_bus_alloc_qdss_mem(struct cnss_plat_data *plat_priv); void cnss_bus_free_qdss_mem(struct cnss_plat_data *plat_priv); void cnss_bus_free_qdss_mem(struct cnss_plat_data *plat_priv); u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv); u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv); int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_qmi_send_get(struct cnss_plat_data *plat_priv); int cnss_bus_qmi_send_put(struct cnss_plat_data *plat_priv); void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t); void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t); void cnss_bus_collect_dump_info(struct cnss_plat_data *plat_priv, void cnss_bus_collect_dump_info(struct cnss_plat_data *plat_priv, bool in_panic); bool in_panic); Loading drivers/net/wireless/cnss2/main.c +31 −3 Original line number Original line Diff line number Diff line Loading @@ -1210,13 +1210,23 @@ EXPORT_SYMBOL(cnss_force_collect_rddm); int cnss_qmi_send_get(struct device *dev) int cnss_qmi_send_get(struct device *dev) { { struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state)) return 0; return 0; return cnss_bus_qmi_send_get(plat_priv); } } EXPORT_SYMBOL(cnss_qmi_send_get); EXPORT_SYMBOL(cnss_qmi_send_get); int cnss_qmi_send_put(struct device *dev) int cnss_qmi_send_put(struct device *dev) { { struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state)) return 0; return 0; return cnss_bus_qmi_send_put(plat_priv); } } EXPORT_SYMBOL(cnss_qmi_send_put); EXPORT_SYMBOL(cnss_qmi_send_put); Loading @@ -1224,7 +1234,25 @@ int cnss_qmi_send(struct device *dev, int type, void *cmd, int cmd_len, void *cb_ctx, int cmd_len, void *cb_ctx, int (*cb)(void *ctx, void *event, int event_len)) int (*cb)(void *ctx, void *event, int event_len)) { { struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); int ret; if (!plat_priv) return -ENODEV; if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state)) return -EINVAL; return -EINVAL; plat_priv->get_info_cb = cb; plat_priv->get_info_cb_ctx = cb_ctx; ret = cnss_wlfw_get_info_send_sync(plat_priv, type, cmd, cmd_len); if (ret) { plat_priv->get_info_cb = NULL; plat_priv->get_info_cb_ctx = NULL; } return ret; } } EXPORT_SYMBOL(cnss_qmi_send); EXPORT_SYMBOL(cnss_qmi_send); Loading drivers/net/wireless/cnss2/main.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -353,6 +353,8 @@ struct cnss_plat_data { struct qmi_handle ims_qmi; struct qmi_handle ims_qmi; struct qmi_txn txn; struct qmi_txn txn; u64 dynamic_feature; u64 dynamic_feature; void *get_info_cb_ctx; int (*get_info_cb)(void *ctx, void *event, int event_len); }; }; #ifdef CONFIG_ARCH_QCOM #ifdef CONFIG_ARCH_QCOM Loading drivers/net/wireless/cnss2/pci.c +55 −2 Original line number Original line Diff line number Diff line Loading @@ -1223,6 +1223,9 @@ int cnss_pci_call_driver_remove(struct cnss_pci_data *pci_priv) } } } } plat_priv->get_info_cb_ctx = NULL; plat_priv->get_info_cb = NULL; return 0; return 0; } } Loading Loading @@ -2486,11 +2489,16 @@ int cnss_auto_suspend(struct device *dev) if (!plat_priv) if (!plat_priv) return -ENODEV; return -ENODEV; mutex_lock(&pci_priv->bus_lock); ret = cnss_pci_suspend_bus(pci_priv); ret = cnss_pci_suspend_bus(pci_priv); if (ret) if (ret) { mutex_unlock(&pci_priv->bus_lock); return ret; return ret; } cnss_pci_set_auto_suspended(pci_priv, 1); cnss_pci_set_auto_suspended(pci_priv, 1); mutex_unlock(&pci_priv->bus_lock); cnss_pci_set_monitor_wake_intr(pci_priv, true); cnss_pci_set_monitor_wake_intr(pci_priv, true); bus_bw_info = &plat_priv->bus_bw_info; bus_bw_info = &plat_priv->bus_bw_info; Loading @@ -2516,11 +2524,15 @@ int cnss_auto_resume(struct device *dev) if (!plat_priv) if (!plat_priv) return -ENODEV; return -ENODEV; mutex_lock(&pci_priv->bus_lock); ret = cnss_pci_resume_bus(pci_priv); ret = cnss_pci_resume_bus(pci_priv); if (ret) if (ret) { mutex_unlock(&pci_priv->bus_lock); return ret; return ret; } cnss_pci_set_auto_suspended(pci_priv, 0); cnss_pci_set_auto_suspended(pci_priv, 0); mutex_unlock(&pci_priv->bus_lock); bus_bw_info = &plat_priv->bus_bw_info; bus_bw_info = &plat_priv->bus_bw_info; msm_bus_scale_client_update_request(bus_bw_info->bus_client, msm_bus_scale_client_update_request(bus_bw_info->bus_client, Loading Loading @@ -2613,6 +2625,46 @@ int cnss_pci_force_wake_release(struct device *dev) } } EXPORT_SYMBOL(cnss_pci_force_wake_release); EXPORT_SYMBOL(cnss_pci_force_wake_release); int cnss_pci_qmi_send_get(struct cnss_pci_data *pci_priv) { int ret = 0; if (!pci_priv) return -ENODEV; mutex_lock(&pci_priv->bus_lock); if (!cnss_pci_get_auto_suspended(pci_priv)) goto out; cnss_pr_vdbg("Starting to handle get info prepare\n"); ret = cnss_pci_resume_bus(pci_priv); out: mutex_unlock(&pci_priv->bus_lock); return ret; } int cnss_pci_qmi_send_put(struct cnss_pci_data *pci_priv) { int ret = 0; if (!pci_priv) return -ENODEV; mutex_lock(&pci_priv->bus_lock); if (!cnss_pci_get_auto_suspended(pci_priv)) goto out; cnss_pr_vdbg("Starting to handle get info done\n"); ret = cnss_pci_suspend_bus(pci_priv); out: mutex_unlock(&pci_priv->bus_lock); return ret; } int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv) int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv) { { struct cnss_plat_data *plat_priv = pci_priv->plat_priv; struct cnss_plat_data *plat_priv = pci_priv->plat_priv; Loading Loading @@ -3716,6 +3768,7 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, plat_priv->bus_priv = pci_priv; plat_priv->bus_priv = pci_priv; snprintf(plat_priv->firmware_name, sizeof(plat_priv->firmware_name), snprintf(plat_priv->firmware_name, sizeof(plat_priv->firmware_name), DEFAULT_FW_FILE_NAME); DEFAULT_FW_FILE_NAME); mutex_init(&pci_priv->bus_lock); ret = cnss_register_subsys(plat_priv); ret = cnss_register_subsys(plat_priv); if (ret) if (ret) Loading Loading
drivers/net/wireless/cnss2/bus.c +30 −0 Original line number Original line Diff line number Diff line Loading @@ -186,6 +186,36 @@ int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv) } } } } int cnss_bus_qmi_send_get(struct cnss_plat_data *plat_priv) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_qmi_send_get(plat_priv->bus_priv); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } } int cnss_bus_qmi_send_put(struct cnss_plat_data *plat_priv) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_qmi_send_put(plat_priv->bus_priv); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } } void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t) void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t) { { struct cnss_plat_data *plat_priv = struct cnss_plat_data *plat_priv = Loading
drivers/net/wireless/cnss2/bus.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,8 @@ int cnss_bus_alloc_qdss_mem(struct cnss_plat_data *plat_priv); void cnss_bus_free_qdss_mem(struct cnss_plat_data *plat_priv); void cnss_bus_free_qdss_mem(struct cnss_plat_data *plat_priv); u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv); u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv); int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_qmi_send_get(struct cnss_plat_data *plat_priv); int cnss_bus_qmi_send_put(struct cnss_plat_data *plat_priv); void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t); void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t); void cnss_bus_collect_dump_info(struct cnss_plat_data *plat_priv, void cnss_bus_collect_dump_info(struct cnss_plat_data *plat_priv, bool in_panic); bool in_panic); Loading
drivers/net/wireless/cnss2/main.c +31 −3 Original line number Original line Diff line number Diff line Loading @@ -1210,13 +1210,23 @@ EXPORT_SYMBOL(cnss_force_collect_rddm); int cnss_qmi_send_get(struct device *dev) int cnss_qmi_send_get(struct device *dev) { { struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state)) return 0; return 0; return cnss_bus_qmi_send_get(plat_priv); } } EXPORT_SYMBOL(cnss_qmi_send_get); EXPORT_SYMBOL(cnss_qmi_send_get); int cnss_qmi_send_put(struct device *dev) int cnss_qmi_send_put(struct device *dev) { { struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state)) return 0; return 0; return cnss_bus_qmi_send_put(plat_priv); } } EXPORT_SYMBOL(cnss_qmi_send_put); EXPORT_SYMBOL(cnss_qmi_send_put); Loading @@ -1224,7 +1234,25 @@ int cnss_qmi_send(struct device *dev, int type, void *cmd, int cmd_len, void *cb_ctx, int cmd_len, void *cb_ctx, int (*cb)(void *ctx, void *event, int event_len)) int (*cb)(void *ctx, void *event, int event_len)) { { struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); int ret; if (!plat_priv) return -ENODEV; if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state)) return -EINVAL; return -EINVAL; plat_priv->get_info_cb = cb; plat_priv->get_info_cb_ctx = cb_ctx; ret = cnss_wlfw_get_info_send_sync(plat_priv, type, cmd, cmd_len); if (ret) { plat_priv->get_info_cb = NULL; plat_priv->get_info_cb_ctx = NULL; } return ret; } } EXPORT_SYMBOL(cnss_qmi_send); EXPORT_SYMBOL(cnss_qmi_send); Loading
drivers/net/wireless/cnss2/main.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -353,6 +353,8 @@ struct cnss_plat_data { struct qmi_handle ims_qmi; struct qmi_handle ims_qmi; struct qmi_txn txn; struct qmi_txn txn; u64 dynamic_feature; u64 dynamic_feature; void *get_info_cb_ctx; int (*get_info_cb)(void *ctx, void *event, int event_len); }; }; #ifdef CONFIG_ARCH_QCOM #ifdef CONFIG_ARCH_QCOM Loading
drivers/net/wireless/cnss2/pci.c +55 −2 Original line number Original line Diff line number Diff line Loading @@ -1223,6 +1223,9 @@ int cnss_pci_call_driver_remove(struct cnss_pci_data *pci_priv) } } } } plat_priv->get_info_cb_ctx = NULL; plat_priv->get_info_cb = NULL; return 0; return 0; } } Loading Loading @@ -2486,11 +2489,16 @@ int cnss_auto_suspend(struct device *dev) if (!plat_priv) if (!plat_priv) return -ENODEV; return -ENODEV; mutex_lock(&pci_priv->bus_lock); ret = cnss_pci_suspend_bus(pci_priv); ret = cnss_pci_suspend_bus(pci_priv); if (ret) if (ret) { mutex_unlock(&pci_priv->bus_lock); return ret; return ret; } cnss_pci_set_auto_suspended(pci_priv, 1); cnss_pci_set_auto_suspended(pci_priv, 1); mutex_unlock(&pci_priv->bus_lock); cnss_pci_set_monitor_wake_intr(pci_priv, true); cnss_pci_set_monitor_wake_intr(pci_priv, true); bus_bw_info = &plat_priv->bus_bw_info; bus_bw_info = &plat_priv->bus_bw_info; Loading @@ -2516,11 +2524,15 @@ int cnss_auto_resume(struct device *dev) if (!plat_priv) if (!plat_priv) return -ENODEV; return -ENODEV; mutex_lock(&pci_priv->bus_lock); ret = cnss_pci_resume_bus(pci_priv); ret = cnss_pci_resume_bus(pci_priv); if (ret) if (ret) { mutex_unlock(&pci_priv->bus_lock); return ret; return ret; } cnss_pci_set_auto_suspended(pci_priv, 0); cnss_pci_set_auto_suspended(pci_priv, 0); mutex_unlock(&pci_priv->bus_lock); bus_bw_info = &plat_priv->bus_bw_info; bus_bw_info = &plat_priv->bus_bw_info; msm_bus_scale_client_update_request(bus_bw_info->bus_client, msm_bus_scale_client_update_request(bus_bw_info->bus_client, Loading Loading @@ -2613,6 +2625,46 @@ int cnss_pci_force_wake_release(struct device *dev) } } EXPORT_SYMBOL(cnss_pci_force_wake_release); EXPORT_SYMBOL(cnss_pci_force_wake_release); int cnss_pci_qmi_send_get(struct cnss_pci_data *pci_priv) { int ret = 0; if (!pci_priv) return -ENODEV; mutex_lock(&pci_priv->bus_lock); if (!cnss_pci_get_auto_suspended(pci_priv)) goto out; cnss_pr_vdbg("Starting to handle get info prepare\n"); ret = cnss_pci_resume_bus(pci_priv); out: mutex_unlock(&pci_priv->bus_lock); return ret; } int cnss_pci_qmi_send_put(struct cnss_pci_data *pci_priv) { int ret = 0; if (!pci_priv) return -ENODEV; mutex_lock(&pci_priv->bus_lock); if (!cnss_pci_get_auto_suspended(pci_priv)) goto out; cnss_pr_vdbg("Starting to handle get info done\n"); ret = cnss_pci_suspend_bus(pci_priv); out: mutex_unlock(&pci_priv->bus_lock); return ret; } int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv) int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv) { { struct cnss_plat_data *plat_priv = pci_priv->plat_priv; struct cnss_plat_data *plat_priv = pci_priv->plat_priv; Loading Loading @@ -3716,6 +3768,7 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, plat_priv->bus_priv = pci_priv; plat_priv->bus_priv = pci_priv; snprintf(plat_priv->firmware_name, sizeof(plat_priv->firmware_name), snprintf(plat_priv->firmware_name, sizeof(plat_priv->firmware_name), DEFAULT_FW_FILE_NAME); DEFAULT_FW_FILE_NAME); mutex_init(&pci_priv->bus_lock); ret = cnss_register_subsys(plat_priv); ret = cnss_register_subsys(plat_priv); if (ret) if (ret) Loading