Loading drivers/net/wireless/cnss2/debug.c +35 −4 Original line number Diff line number Diff line Loading @@ -517,13 +517,14 @@ static ssize_t cnss_runtime_pm_debug_write(struct file *fp, } else if (sysfs_streq(cmd, "resume")) { ret = cnss_pci_pm_runtime_resume(pci_priv); } else if (sysfs_streq(cmd, "get")) { ret = cnss_pci_pm_runtime_get(pci_priv); ret = cnss_pci_pm_runtime_get(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "get_noresume")) { cnss_pci_pm_runtime_get_noresume(pci_priv); cnss_pci_pm_runtime_get_noresume(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "put_autosuspend")) { ret = cnss_pci_pm_runtime_put_autosuspend(pci_priv); ret = cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "put_noidle")) { cnss_pci_pm_runtime_put_noidle(pci_priv); cnss_pci_pm_runtime_put_noidle(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "mark_last_busy")) { cnss_pci_pm_runtime_mark_last_busy(pci_priv); } else if (sysfs_streq(cmd, "resume_bus")) { Loading @@ -543,6 +544,17 @@ static ssize_t cnss_runtime_pm_debug_write(struct file *fp, static int cnss_runtime_pm_debug_show(struct seq_file *s, void *data) { struct cnss_plat_data *plat_priv = s->private; struct cnss_pci_data *pci_priv; int i; if (!plat_priv) return -ENODEV; pci_priv = plat_priv->bus_priv; if (!pci_priv) return -ENODEV; seq_puts(s, "\nUsage: echo <action> > <debugfs_path>/cnss/runtime_pm\n"); seq_puts(s, "<action> can be one of below:\n"); seq_puts(s, "usage_count: get runtime PM usage count\n"); Loading @@ -556,6 +568,25 @@ static int cnss_runtime_pm_debug_show(struct seq_file *s, void *data) seq_puts(s, "resume_bus: do bus resume only\n"); seq_puts(s, "suspend_bus: do bus suspend only\n"); seq_puts(s, "\nStats:\n"); seq_printf(s, "%s: %u\n", "get count", atomic_read(&pci_priv->pm_stats.runtime_get)); seq_printf(s, "%s: %u\n", "put count", atomic_read(&pci_priv->pm_stats.runtime_put)); seq_printf(s, "%-10s%-10s%-10s%-15s%-15s\n", "id:", "get", "put", "get time(us)", "put time(us)"); for (i = 0; i < RTPM_ID_MAX; i++) { seq_printf(s, "%d%-9s", i, ":"); seq_printf(s, "%-10d", atomic_read(&pci_priv->pm_stats.runtime_get_id[i])); seq_printf(s, "%-10d", atomic_read(&pci_priv->pm_stats.runtime_put_id[i])); seq_printf(s, "%-15llu", pci_priv->pm_stats.runtime_get_timestamp_id[i]); seq_printf(s, "%-15llu\n", pci_priv->pm_stats.runtime_put_timestamp_id[i]); } return 0; } Loading drivers/net/wireless/cnss2/pci.c +50 −13 Original line number Diff line number Diff line Loading @@ -501,7 +501,7 @@ int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset, if (ret) goto out; ret = cnss_pci_pm_runtime_get_sync(pci_priv); ret = cnss_pci_pm_runtime_get_sync(pci_priv, RTPM_ID_CNSS); if (ret < 0) goto runtime_pm_put; Loading @@ -521,7 +521,7 @@ int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset, cnss_pci_force_wake_put(pci_priv); runtime_pm_put: cnss_pci_pm_runtime_mark_last_busy(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); out: return ret; } Loading @@ -536,7 +536,7 @@ int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset, if (ret) goto out; ret = cnss_pci_pm_runtime_get_sync(pci_priv); ret = cnss_pci_pm_runtime_get_sync(pci_priv, RTPM_ID_CNSS); if (ret < 0) goto runtime_pm_put; Loading @@ -556,7 +556,7 @@ int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset, cnss_pci_force_wake_put(pci_priv); runtime_pm_put: cnss_pci_pm_runtime_mark_last_busy(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); out: return ret; } Loading Loading @@ -1375,7 +1375,7 @@ static void cnss_pci_time_sync_work_hdlr(struct work_struct *work) if (cnss_pci_is_device_down(&pci_priv->pci_dev->dev)) return; if (cnss_pci_pm_runtime_get_sync(pci_priv) < 0) if (cnss_pci_pm_runtime_get_sync(pci_priv, RTPM_ID_CNSS) < 0) goto runtime_pm_put; cnss_pci_update_timestamp(pci_priv); Loading @@ -1384,7 +1384,7 @@ static void cnss_pci_time_sync_work_hdlr(struct work_struct *work) runtime_pm_put: cnss_pci_pm_runtime_mark_last_busy(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); } static int cnss_pci_start_time_sync_update(struct cnss_pci_data *pci_priv) Loading Loading @@ -2840,6 +2840,30 @@ int cnss_wlan_pm_control(struct device *dev, bool vote) } EXPORT_SYMBOL(cnss_wlan_pm_control); static void cnss_pci_pm_runtime_get_record(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { if (id >= RTPM_ID_MAX) return; atomic_inc(&pci_priv->pm_stats.runtime_get); atomic_inc(&pci_priv->pm_stats.runtime_get_id[id]); pci_priv->pm_stats.runtime_get_timestamp_id[id] = cnss_get_host_timestamp(pci_priv->plat_priv); } static void cnss_pci_pm_runtime_put_record(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { if (id >= RTPM_ID_MAX) return; atomic_inc(&pci_priv->pm_stats.runtime_put); atomic_inc(&pci_priv->pm_stats.runtime_put_id[id]); pci_priv->pm_stats.runtime_put_timestamp_id[id] = cnss_get_host_timestamp(pci_priv->plat_priv); } void cnss_pci_pm_runtime_show_usage_count(struct cnss_pci_data *pci_priv) { struct device *dev; Loading Loading @@ -2889,7 +2913,8 @@ int cnss_pci_pm_runtime_resume(struct cnss_pci_data *pci_priv) return pm_runtime_resume(dev); } int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv) int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; enum rpm_status status; Loading @@ -2904,10 +2929,13 @@ int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv) cnss_pr_vdbg("Runtime PM resume is requested by %ps\n", (void *)_RET_IP_); cnss_pci_pm_runtime_get_record(pci_priv, id); return pm_runtime_get(dev); } int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv) int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; enum rpm_status status; Loading @@ -2922,18 +2950,23 @@ int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv) cnss_pr_vdbg("Runtime PM resume is requested by %ps\n", (void *)_RET_IP_); cnss_pci_pm_runtime_get_record(pci_priv, id); return pm_runtime_get_sync(dev); } void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv) void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { if (!pci_priv) return; cnss_pci_pm_runtime_get_record(pci_priv, id); pm_runtime_get_noresume(&pci_priv->pci_dev->dev); } int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv) int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; Loading @@ -2947,10 +2980,13 @@ int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv) return -EINVAL; } cnss_pci_pm_runtime_put_record(pci_priv, id); return pm_runtime_put_autosuspend(&pci_priv->pci_dev->dev); } void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv) void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; Loading @@ -2964,6 +3000,7 @@ void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv) return; } cnss_pci_pm_runtime_put_record(pci_priv, id); pm_runtime_put_noidle(&pci_priv->pci_dev->dev); } Loading Loading @@ -4287,7 +4324,7 @@ static int cnss_mhi_pm_runtime_get(struct mhi_controller *mhi_ctrl, void *priv) { struct cnss_pci_data *pci_priv = priv; return cnss_pci_pm_runtime_get(pci_priv); return cnss_pci_pm_runtime_get(pci_priv, RTPM_ID_MHI); } static void cnss_mhi_pm_runtime_put_noidle(struct mhi_controller *mhi_ctrl, Loading @@ -4295,7 +4332,7 @@ static void cnss_mhi_pm_runtime_put_noidle(struct mhi_controller *mhi_ctrl, { struct cnss_pci_data *pci_priv = priv; cnss_pci_pm_runtime_put_noidle(pci_priv); cnss_pci_pm_runtime_put_noidle(pci_priv, RTPM_ID_MHI); } void cnss_pci_add_fw_prefix_name(struct cnss_pci_data *pci_priv, Loading drivers/net/wireless/cnss2/pci.h +26 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,12 @@ enum pci_link_status { PCI_DEF, }; enum cnss_rtpm_id { RTPM_ID_CNSS, RTPM_ID_MHI, RTPM_ID_MAX, }; struct cnss_msi_user { char *name; int num_vectors; Loading Loading @@ -60,6 +66,15 @@ struct cnss_misc_reg { u32 val; }; struct cnss_pm_stats { atomic_t runtime_get; atomic_t runtime_put; atomic_t runtime_get_id[RTPM_ID_MAX]; atomic_t runtime_put_id[RTPM_ID_MAX]; u64 runtime_get_timestamp_id[RTPM_ID_MAX]; u64 runtime_put_timestamp_id[RTPM_ID_MAX]; }; struct cnss_pci_data { struct pci_dev *pci_dev; struct cnss_plat_data *plat_priv; Loading @@ -72,6 +87,7 @@ struct cnss_pci_data { struct pci_saved_state *saved_state; struct pci_saved_state *default_state; struct msm_pcie_register_event msm_pci_event; struct cnss_pm_stats pm_stats; atomic_t auto_suspended; atomic_t drv_connected; u8 drv_connected_last; Loading Loading @@ -199,11 +215,16 @@ int cnss_pci_call_driver_modem_status(struct cnss_pci_data *pci_priv, void cnss_pci_pm_runtime_show_usage_count(struct cnss_pci_data *pci_priv); int cnss_pci_pm_request_resume(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_resume(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv); void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv); void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); void cnss_pci_pm_runtime_mark_last_busy(struct cnss_pci_data *pci_priv); int cnss_pci_update_status(struct cnss_pci_data *pci_priv, enum cnss_driver_status status); Loading Loading
drivers/net/wireless/cnss2/debug.c +35 −4 Original line number Diff line number Diff line Loading @@ -517,13 +517,14 @@ static ssize_t cnss_runtime_pm_debug_write(struct file *fp, } else if (sysfs_streq(cmd, "resume")) { ret = cnss_pci_pm_runtime_resume(pci_priv); } else if (sysfs_streq(cmd, "get")) { ret = cnss_pci_pm_runtime_get(pci_priv); ret = cnss_pci_pm_runtime_get(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "get_noresume")) { cnss_pci_pm_runtime_get_noresume(pci_priv); cnss_pci_pm_runtime_get_noresume(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "put_autosuspend")) { ret = cnss_pci_pm_runtime_put_autosuspend(pci_priv); ret = cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "put_noidle")) { cnss_pci_pm_runtime_put_noidle(pci_priv); cnss_pci_pm_runtime_put_noidle(pci_priv, RTPM_ID_CNSS); } else if (sysfs_streq(cmd, "mark_last_busy")) { cnss_pci_pm_runtime_mark_last_busy(pci_priv); } else if (sysfs_streq(cmd, "resume_bus")) { Loading @@ -543,6 +544,17 @@ static ssize_t cnss_runtime_pm_debug_write(struct file *fp, static int cnss_runtime_pm_debug_show(struct seq_file *s, void *data) { struct cnss_plat_data *plat_priv = s->private; struct cnss_pci_data *pci_priv; int i; if (!plat_priv) return -ENODEV; pci_priv = plat_priv->bus_priv; if (!pci_priv) return -ENODEV; seq_puts(s, "\nUsage: echo <action> > <debugfs_path>/cnss/runtime_pm\n"); seq_puts(s, "<action> can be one of below:\n"); seq_puts(s, "usage_count: get runtime PM usage count\n"); Loading @@ -556,6 +568,25 @@ static int cnss_runtime_pm_debug_show(struct seq_file *s, void *data) seq_puts(s, "resume_bus: do bus resume only\n"); seq_puts(s, "suspend_bus: do bus suspend only\n"); seq_puts(s, "\nStats:\n"); seq_printf(s, "%s: %u\n", "get count", atomic_read(&pci_priv->pm_stats.runtime_get)); seq_printf(s, "%s: %u\n", "put count", atomic_read(&pci_priv->pm_stats.runtime_put)); seq_printf(s, "%-10s%-10s%-10s%-15s%-15s\n", "id:", "get", "put", "get time(us)", "put time(us)"); for (i = 0; i < RTPM_ID_MAX; i++) { seq_printf(s, "%d%-9s", i, ":"); seq_printf(s, "%-10d", atomic_read(&pci_priv->pm_stats.runtime_get_id[i])); seq_printf(s, "%-10d", atomic_read(&pci_priv->pm_stats.runtime_put_id[i])); seq_printf(s, "%-15llu", pci_priv->pm_stats.runtime_get_timestamp_id[i]); seq_printf(s, "%-15llu\n", pci_priv->pm_stats.runtime_put_timestamp_id[i]); } return 0; } Loading
drivers/net/wireless/cnss2/pci.c +50 −13 Original line number Diff line number Diff line Loading @@ -501,7 +501,7 @@ int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset, if (ret) goto out; ret = cnss_pci_pm_runtime_get_sync(pci_priv); ret = cnss_pci_pm_runtime_get_sync(pci_priv, RTPM_ID_CNSS); if (ret < 0) goto runtime_pm_put; Loading @@ -521,7 +521,7 @@ int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset, cnss_pci_force_wake_put(pci_priv); runtime_pm_put: cnss_pci_pm_runtime_mark_last_busy(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); out: return ret; } Loading @@ -536,7 +536,7 @@ int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset, if (ret) goto out; ret = cnss_pci_pm_runtime_get_sync(pci_priv); ret = cnss_pci_pm_runtime_get_sync(pci_priv, RTPM_ID_CNSS); if (ret < 0) goto runtime_pm_put; Loading @@ -556,7 +556,7 @@ int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset, cnss_pci_force_wake_put(pci_priv); runtime_pm_put: cnss_pci_pm_runtime_mark_last_busy(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); out: return ret; } Loading Loading @@ -1375,7 +1375,7 @@ static void cnss_pci_time_sync_work_hdlr(struct work_struct *work) if (cnss_pci_is_device_down(&pci_priv->pci_dev->dev)) return; if (cnss_pci_pm_runtime_get_sync(pci_priv) < 0) if (cnss_pci_pm_runtime_get_sync(pci_priv, RTPM_ID_CNSS) < 0) goto runtime_pm_put; cnss_pci_update_timestamp(pci_priv); Loading @@ -1384,7 +1384,7 @@ static void cnss_pci_time_sync_work_hdlr(struct work_struct *work) runtime_pm_put: cnss_pci_pm_runtime_mark_last_busy(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv); cnss_pci_pm_runtime_put_autosuspend(pci_priv, RTPM_ID_CNSS); } static int cnss_pci_start_time_sync_update(struct cnss_pci_data *pci_priv) Loading Loading @@ -2840,6 +2840,30 @@ int cnss_wlan_pm_control(struct device *dev, bool vote) } EXPORT_SYMBOL(cnss_wlan_pm_control); static void cnss_pci_pm_runtime_get_record(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { if (id >= RTPM_ID_MAX) return; atomic_inc(&pci_priv->pm_stats.runtime_get); atomic_inc(&pci_priv->pm_stats.runtime_get_id[id]); pci_priv->pm_stats.runtime_get_timestamp_id[id] = cnss_get_host_timestamp(pci_priv->plat_priv); } static void cnss_pci_pm_runtime_put_record(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { if (id >= RTPM_ID_MAX) return; atomic_inc(&pci_priv->pm_stats.runtime_put); atomic_inc(&pci_priv->pm_stats.runtime_put_id[id]); pci_priv->pm_stats.runtime_put_timestamp_id[id] = cnss_get_host_timestamp(pci_priv->plat_priv); } void cnss_pci_pm_runtime_show_usage_count(struct cnss_pci_data *pci_priv) { struct device *dev; Loading Loading @@ -2889,7 +2913,8 @@ int cnss_pci_pm_runtime_resume(struct cnss_pci_data *pci_priv) return pm_runtime_resume(dev); } int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv) int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; enum rpm_status status; Loading @@ -2904,10 +2929,13 @@ int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv) cnss_pr_vdbg("Runtime PM resume is requested by %ps\n", (void *)_RET_IP_); cnss_pci_pm_runtime_get_record(pci_priv, id); return pm_runtime_get(dev); } int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv) int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; enum rpm_status status; Loading @@ -2922,18 +2950,23 @@ int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv) cnss_pr_vdbg("Runtime PM resume is requested by %ps\n", (void *)_RET_IP_); cnss_pci_pm_runtime_get_record(pci_priv, id); return pm_runtime_get_sync(dev); } void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv) void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { if (!pci_priv) return; cnss_pci_pm_runtime_get_record(pci_priv, id); pm_runtime_get_noresume(&pci_priv->pci_dev->dev); } int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv) int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; Loading @@ -2947,10 +2980,13 @@ int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv) return -EINVAL; } cnss_pci_pm_runtime_put_record(pci_priv, id); return pm_runtime_put_autosuspend(&pci_priv->pci_dev->dev); } void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv) void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id) { struct device *dev; Loading @@ -2964,6 +3000,7 @@ void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv) return; } cnss_pci_pm_runtime_put_record(pci_priv, id); pm_runtime_put_noidle(&pci_priv->pci_dev->dev); } Loading Loading @@ -4287,7 +4324,7 @@ static int cnss_mhi_pm_runtime_get(struct mhi_controller *mhi_ctrl, void *priv) { struct cnss_pci_data *pci_priv = priv; return cnss_pci_pm_runtime_get(pci_priv); return cnss_pci_pm_runtime_get(pci_priv, RTPM_ID_MHI); } static void cnss_mhi_pm_runtime_put_noidle(struct mhi_controller *mhi_ctrl, Loading @@ -4295,7 +4332,7 @@ static void cnss_mhi_pm_runtime_put_noidle(struct mhi_controller *mhi_ctrl, { struct cnss_pci_data *pci_priv = priv; cnss_pci_pm_runtime_put_noidle(pci_priv); cnss_pci_pm_runtime_put_noidle(pci_priv, RTPM_ID_MHI); } void cnss_pci_add_fw_prefix_name(struct cnss_pci_data *pci_priv, Loading
drivers/net/wireless/cnss2/pci.h +26 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,12 @@ enum pci_link_status { PCI_DEF, }; enum cnss_rtpm_id { RTPM_ID_CNSS, RTPM_ID_MHI, RTPM_ID_MAX, }; struct cnss_msi_user { char *name; int num_vectors; Loading Loading @@ -60,6 +66,15 @@ struct cnss_misc_reg { u32 val; }; struct cnss_pm_stats { atomic_t runtime_get; atomic_t runtime_put; atomic_t runtime_get_id[RTPM_ID_MAX]; atomic_t runtime_put_id[RTPM_ID_MAX]; u64 runtime_get_timestamp_id[RTPM_ID_MAX]; u64 runtime_put_timestamp_id[RTPM_ID_MAX]; }; struct cnss_pci_data { struct pci_dev *pci_dev; struct cnss_plat_data *plat_priv; Loading @@ -72,6 +87,7 @@ struct cnss_pci_data { struct pci_saved_state *saved_state; struct pci_saved_state *default_state; struct msm_pcie_register_event msm_pci_event; struct cnss_pm_stats pm_stats; atomic_t auto_suspended; atomic_t drv_connected; u8 drv_connected_last; Loading Loading @@ -199,11 +215,16 @@ int cnss_pci_call_driver_modem_status(struct cnss_pci_data *pci_priv, void cnss_pci_pm_runtime_show_usage_count(struct cnss_pci_data *pci_priv); int cnss_pci_pm_request_resume(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_resume(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv); void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv); void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv); int cnss_pci_pm_runtime_get(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); int cnss_pci_pm_runtime_get_sync(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); void cnss_pci_pm_runtime_get_noresume(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); int cnss_pci_pm_runtime_put_autosuspend(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv, enum cnss_rtpm_id id); void cnss_pci_pm_runtime_mark_last_busy(struct cnss_pci_data *pci_priv); int cnss_pci_update_status(struct cnss_pci_data *pci_priv, enum cnss_driver_status status); Loading