Loading drivers/net/wireless/cnss2/bus.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -332,3 +332,19 @@ int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, return -EINVAL; return -EINVAL; } } } } int cnss_bus_update_status(struct cnss_plat_data *plat_priv, enum cnss_driver_status status) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_update_status(plat_priv->bus_priv, status); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } } drivers/net/wireless/cnss2/bus.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -51,5 +51,7 @@ int cnss_bus_register_driver_hdlr(struct cnss_plat_data *plat_priv, void *data); int cnss_bus_unregister_driver_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_unregister_driver_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, int modem_current_status); int modem_current_status); int cnss_bus_update_status(struct cnss_plat_data *plat_priv, enum cnss_driver_status status); #endif /* _CNSS_BUS_H */ #endif /* _CNSS_BUS_H */ drivers/net/wireless/cnss2/pci.c +24 −2 Original line number Original line Diff line number Diff line Loading @@ -223,6 +223,7 @@ int cnss_pci_link_down(struct device *dev) cnss_pr_err("PCI link down is detected by host driver, schedule recovery!\n"); cnss_pr_err("PCI link down is detected by host driver, schedule recovery!\n"); cnss_pci_update_status(pci_priv, CNSS_FW_DOWN); cnss_schedule_recovery(dev, CNSS_REASON_LINK_DOWN); cnss_schedule_recovery(dev, CNSS_REASON_LINK_DOWN); return 0; return 0; Loading Loading @@ -350,6 +351,25 @@ int cnss_pci_call_driver_modem_status(struct cnss_pci_data *pci_priv, return 0; return 0; } } int cnss_pci_update_status(struct cnss_pci_data *pci_priv, enum cnss_driver_status status) { struct cnss_wlan_driver *driver_ops; if (!pci_priv) return -ENODEV; driver_ops = pci_priv->driver_ops; if (!driver_ops || !driver_ops->update_status) return -EINVAL; cnss_pr_dbg("Update driver status: %d\n", status); driver_ops->update_status(pci_priv->pci_dev, status); return 0; } static int cnss_qca6174_powerup(struct cnss_pci_data *pci_priv) static int cnss_qca6174_powerup(struct cnss_pci_data *pci_priv) { { int ret = 0; int ret = 0; Loading Loading @@ -890,6 +910,8 @@ static void cnss_pci_event_cb(struct msm_pcie_notify *notify) cnss_pr_err("PCI link down, schedule recovery!\n"); cnss_pr_err("PCI link down, schedule recovery!\n"); if (pci_dev->device == QCA6174_DEVICE_ID) if (pci_dev->device == QCA6174_DEVICE_ID) disable_irq(pci_dev->irq); disable_irq(pci_dev->irq); cnss_pci_update_status(pci_priv, CNSS_FW_DOWN); cnss_schedule_recovery(&pci_dev->dev, CNSS_REASON_LINK_DOWN); cnss_schedule_recovery(&pci_dev->dev, CNSS_REASON_LINK_DOWN); break; break; case MSM_PCIE_EVENT_WAKEUP: case MSM_PCIE_EVENT_WAKEUP: Loading Loading @@ -2027,8 +2049,8 @@ static void cnss_mhi_notify_status(struct mhi_controller *mhi_ctrl, void *priv, set_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state); set_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state); del_timer(&plat_priv->fw_boot_timer); del_timer(&plat_priv->fw_boot_timer); cnss_schedule_recovery(&pci_priv->pci_dev->dev, cnss_pci_update_status(pci_priv, CNSS_FW_DOWN); cnss_reason); cnss_schedule_recovery(&pci_priv->pci_dev->dev, cnss_reason); } } static int cnss_pci_get_mhi_msi(struct cnss_pci_data *pci_priv) static int cnss_pci_get_mhi_msi(struct cnss_pci_data *pci_priv) Loading drivers/net/wireless/cnss2/pci.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -149,5 +149,7 @@ 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); 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); void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv); void cnss_pci_pm_runtime_mark_last_busy(struct cnss_pci_data *pci_priv); 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); #endif /* _CNSS_PCI_H */ #endif /* _CNSS_PCI_H */ Loading
drivers/net/wireless/cnss2/bus.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -332,3 +332,19 @@ int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, return -EINVAL; return -EINVAL; } } } } int cnss_bus_update_status(struct cnss_plat_data *plat_priv, enum cnss_driver_status status) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_update_status(plat_priv->bus_priv, status); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } }
drivers/net/wireless/cnss2/bus.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -51,5 +51,7 @@ int cnss_bus_register_driver_hdlr(struct cnss_plat_data *plat_priv, void *data); int cnss_bus_unregister_driver_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_unregister_driver_hdlr(struct cnss_plat_data *plat_priv); int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, int modem_current_status); int modem_current_status); int cnss_bus_update_status(struct cnss_plat_data *plat_priv, enum cnss_driver_status status); #endif /* _CNSS_BUS_H */ #endif /* _CNSS_BUS_H */
drivers/net/wireless/cnss2/pci.c +24 −2 Original line number Original line Diff line number Diff line Loading @@ -223,6 +223,7 @@ int cnss_pci_link_down(struct device *dev) cnss_pr_err("PCI link down is detected by host driver, schedule recovery!\n"); cnss_pr_err("PCI link down is detected by host driver, schedule recovery!\n"); cnss_pci_update_status(pci_priv, CNSS_FW_DOWN); cnss_schedule_recovery(dev, CNSS_REASON_LINK_DOWN); cnss_schedule_recovery(dev, CNSS_REASON_LINK_DOWN); return 0; return 0; Loading Loading @@ -350,6 +351,25 @@ int cnss_pci_call_driver_modem_status(struct cnss_pci_data *pci_priv, return 0; return 0; } } int cnss_pci_update_status(struct cnss_pci_data *pci_priv, enum cnss_driver_status status) { struct cnss_wlan_driver *driver_ops; if (!pci_priv) return -ENODEV; driver_ops = pci_priv->driver_ops; if (!driver_ops || !driver_ops->update_status) return -EINVAL; cnss_pr_dbg("Update driver status: %d\n", status); driver_ops->update_status(pci_priv->pci_dev, status); return 0; } static int cnss_qca6174_powerup(struct cnss_pci_data *pci_priv) static int cnss_qca6174_powerup(struct cnss_pci_data *pci_priv) { { int ret = 0; int ret = 0; Loading Loading @@ -890,6 +910,8 @@ static void cnss_pci_event_cb(struct msm_pcie_notify *notify) cnss_pr_err("PCI link down, schedule recovery!\n"); cnss_pr_err("PCI link down, schedule recovery!\n"); if (pci_dev->device == QCA6174_DEVICE_ID) if (pci_dev->device == QCA6174_DEVICE_ID) disable_irq(pci_dev->irq); disable_irq(pci_dev->irq); cnss_pci_update_status(pci_priv, CNSS_FW_DOWN); cnss_schedule_recovery(&pci_dev->dev, CNSS_REASON_LINK_DOWN); cnss_schedule_recovery(&pci_dev->dev, CNSS_REASON_LINK_DOWN); break; break; case MSM_PCIE_EVENT_WAKEUP: case MSM_PCIE_EVENT_WAKEUP: Loading Loading @@ -2027,8 +2049,8 @@ static void cnss_mhi_notify_status(struct mhi_controller *mhi_ctrl, void *priv, set_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state); set_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state); del_timer(&plat_priv->fw_boot_timer); del_timer(&plat_priv->fw_boot_timer); cnss_schedule_recovery(&pci_priv->pci_dev->dev, cnss_pci_update_status(pci_priv, CNSS_FW_DOWN); cnss_reason); cnss_schedule_recovery(&pci_priv->pci_dev->dev, cnss_reason); } } static int cnss_pci_get_mhi_msi(struct cnss_pci_data *pci_priv) static int cnss_pci_get_mhi_msi(struct cnss_pci_data *pci_priv) Loading
drivers/net/wireless/cnss2/pci.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -149,5 +149,7 @@ 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); 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); void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv); void cnss_pci_pm_runtime_mark_last_busy(struct cnss_pci_data *pci_priv); 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); #endif /* _CNSS_PCI_H */ #endif /* _CNSS_PCI_H */