Loading drivers/net/wireless/cnss2/bus.c +18 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. */ #include "bus.h" #include "debug.h" Loading Loading @@ -435,6 +435,23 @@ int cnss_bus_update_status(struct cnss_plat_data *plat_priv, } } int cnss_bus_update_uevent(struct cnss_plat_data *plat_priv, enum cnss_driver_status status, void *data) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_call_driver_uevent(plat_priv->bus_priv, status, data); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } } int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv) { if (!plat_priv) Loading drivers/net/wireless/cnss2/bus.h +3 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. */ #ifndef _CNSS_BUS_H #define _CNSS_BUS_H Loading Loading @@ -50,6 +50,8 @@ int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, int modem_current_status); int cnss_bus_update_status(struct cnss_plat_data *plat_priv, enum cnss_driver_status status); int cnss_bus_update_uevent(struct cnss_plat_data *plat_priv, enum cnss_driver_status status, void *data); int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv); int cnss_bus_check_link_status(struct cnss_plat_data *plat_priv); int cnss_bus_recover_link_down(struct cnss_plat_data *plat_priv); Loading drivers/net/wireless/cnss2/pci.c +20 −3 Original line number Diff line number Diff line Loading @@ -889,6 +889,17 @@ void cnss_pci_allow_l1(struct device *dev) } EXPORT_SYMBOL(cnss_pci_allow_l1); static void cnss_pci_update_link_event(struct cnss_pci_data *pci_priv, enum cnss_bus_event_type type, void *data) { struct cnss_bus_event bus_event; bus_event.etype = type; bus_event.event_data = data; cnss_pci_call_driver_uevent(pci_priv, CNSS_BUS_EVENT, &bus_event); } static void cnss_pci_handle_linkdown(struct cnss_pci_data *pci_priv) { struct cnss_plat_data *plat_priv = pci_priv->plat_priv; Loading @@ -913,6 +924,12 @@ static void cnss_pci_handle_linkdown(struct cnss_pci_data *pci_priv) if (pci_dev->device == QCA6174_DEVICE_ID) disable_irq(pci_dev->irq); /* Notify bus related event. Now for all supported chips. * Here PCIe LINK_DOWN notification taken care. * uevent buffer can be extended later, to cover more bus info. */ cnss_pci_update_link_event(pci_priv, BUS_EVENT_PCI_LINK_DOWN, NULL); cnss_fatal_err("PCI link down, schedule recovery\n"); cnss_schedule_recovery(&pci_dev->dev, CNSS_REASON_LINK_DOWN); } Loading Loading @@ -4240,7 +4257,7 @@ static void cnss_pci_remove_dump_seg(struct cnss_pci_data *pci_priv, cnss_minidump_remove_region(plat_priv, type, seg_no, va, pa, size); } int cnss_call_driver_uevent(struct cnss_pci_data *pci_priv, int cnss_pci_call_driver_uevent(struct cnss_pci_data *pci_priv, enum cnss_driver_status status, void *data) { struct cnss_uevent_data uevent_data; Loading Loading @@ -4301,7 +4318,7 @@ static void cnss_pci_send_hang_event(struct cnss_pci_data *pci_priv) } } cnss_call_driver_uevent(pci_priv, CNSS_HANG_EVENT, &hang_event); cnss_pci_call_driver_uevent(pci_priv, CNSS_HANG_EVENT, &hang_event); kfree(hang_event.hang_event_data); hang_event.hang_event_data = NULL; Loading drivers/net/wireless/cnss2/pci.h +3 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */ #ifndef _CNSS_PCI_H #define _CNSS_PCI_H Loading Loading @@ -228,7 +228,7 @@ 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); int cnss_pci_update_status(struct cnss_pci_data *pci_priv, enum cnss_driver_status status); int cnss_call_driver_uevent(struct cnss_pci_data *pci_priv, int cnss_pci_call_driver_uevent(struct cnss_pci_data *pci_priv, enum cnss_driver_status status, void *data); int cnss_pcie_is_device_down(struct cnss_pci_data *pci_priv); int cnss_pci_suspend_bus(struct cnss_pci_data *pci_priv); Loading include/net/cnss2.h +12 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,13 @@ enum cnss_driver_status { CNSS_RECOVERY, CNSS_FW_DOWN, CNSS_HANG_EVENT, CNSS_BUS_EVENT, }; enum cnss_bus_event_type { BUS_EVENT_PCI_LINK_DOWN = 0, BUS_EVENT_INVALID = 0xFFFF, }; struct cnss_hang_event { Loading @@ -90,6 +97,11 @@ struct cnss_hang_event { u16 hang_event_data_len; }; struct cnss_bus_event { enum cnss_bus_event_type etype; void *event_data; }; struct cnss_uevent_data { enum cnss_driver_status status; void *data; Loading Loading
drivers/net/wireless/cnss2/bus.c +18 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. */ #include "bus.h" #include "debug.h" Loading Loading @@ -435,6 +435,23 @@ int cnss_bus_update_status(struct cnss_plat_data *plat_priv, } } int cnss_bus_update_uevent(struct cnss_plat_data *plat_priv, enum cnss_driver_status status, void *data) { if (!plat_priv) return -ENODEV; switch (plat_priv->bus_type) { case CNSS_BUS_PCI: return cnss_pci_call_driver_uevent(plat_priv->bus_priv, status, data); default: cnss_pr_err("Unsupported bus type: %d\n", plat_priv->bus_type); return -EINVAL; } } int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv) { if (!plat_priv) Loading
drivers/net/wireless/cnss2/bus.h +3 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. */ #ifndef _CNSS_BUS_H #define _CNSS_BUS_H Loading Loading @@ -50,6 +50,8 @@ int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv, int modem_current_status); int cnss_bus_update_status(struct cnss_plat_data *plat_priv, enum cnss_driver_status status); int cnss_bus_update_uevent(struct cnss_plat_data *plat_priv, enum cnss_driver_status status, void *data); int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv); int cnss_bus_check_link_status(struct cnss_plat_data *plat_priv); int cnss_bus_recover_link_down(struct cnss_plat_data *plat_priv); Loading
drivers/net/wireless/cnss2/pci.c +20 −3 Original line number Diff line number Diff line Loading @@ -889,6 +889,17 @@ void cnss_pci_allow_l1(struct device *dev) } EXPORT_SYMBOL(cnss_pci_allow_l1); static void cnss_pci_update_link_event(struct cnss_pci_data *pci_priv, enum cnss_bus_event_type type, void *data) { struct cnss_bus_event bus_event; bus_event.etype = type; bus_event.event_data = data; cnss_pci_call_driver_uevent(pci_priv, CNSS_BUS_EVENT, &bus_event); } static void cnss_pci_handle_linkdown(struct cnss_pci_data *pci_priv) { struct cnss_plat_data *plat_priv = pci_priv->plat_priv; Loading @@ -913,6 +924,12 @@ static void cnss_pci_handle_linkdown(struct cnss_pci_data *pci_priv) if (pci_dev->device == QCA6174_DEVICE_ID) disable_irq(pci_dev->irq); /* Notify bus related event. Now for all supported chips. * Here PCIe LINK_DOWN notification taken care. * uevent buffer can be extended later, to cover more bus info. */ cnss_pci_update_link_event(pci_priv, BUS_EVENT_PCI_LINK_DOWN, NULL); cnss_fatal_err("PCI link down, schedule recovery\n"); cnss_schedule_recovery(&pci_dev->dev, CNSS_REASON_LINK_DOWN); } Loading Loading @@ -4240,7 +4257,7 @@ static void cnss_pci_remove_dump_seg(struct cnss_pci_data *pci_priv, cnss_minidump_remove_region(plat_priv, type, seg_no, va, pa, size); } int cnss_call_driver_uevent(struct cnss_pci_data *pci_priv, int cnss_pci_call_driver_uevent(struct cnss_pci_data *pci_priv, enum cnss_driver_status status, void *data) { struct cnss_uevent_data uevent_data; Loading Loading @@ -4301,7 +4318,7 @@ static void cnss_pci_send_hang_event(struct cnss_pci_data *pci_priv) } } cnss_call_driver_uevent(pci_priv, CNSS_HANG_EVENT, &hang_event); cnss_pci_call_driver_uevent(pci_priv, CNSS_HANG_EVENT, &hang_event); kfree(hang_event.hang_event_data); hang_event.hang_event_data = NULL; Loading
drivers/net/wireless/cnss2/pci.h +3 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */ #ifndef _CNSS_PCI_H #define _CNSS_PCI_H Loading Loading @@ -228,7 +228,7 @@ 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); int cnss_pci_update_status(struct cnss_pci_data *pci_priv, enum cnss_driver_status status); int cnss_call_driver_uevent(struct cnss_pci_data *pci_priv, int cnss_pci_call_driver_uevent(struct cnss_pci_data *pci_priv, enum cnss_driver_status status, void *data); int cnss_pcie_is_device_down(struct cnss_pci_data *pci_priv); int cnss_pci_suspend_bus(struct cnss_pci_data *pci_priv); Loading
include/net/cnss2.h +12 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,13 @@ enum cnss_driver_status { CNSS_RECOVERY, CNSS_FW_DOWN, CNSS_HANG_EVENT, CNSS_BUS_EVENT, }; enum cnss_bus_event_type { BUS_EVENT_PCI_LINK_DOWN = 0, BUS_EVENT_INVALID = 0xFFFF, }; struct cnss_hang_event { Loading @@ -90,6 +97,11 @@ struct cnss_hang_event { u16 hang_event_data_len; }; struct cnss_bus_event { enum cnss_bus_event_type etype; void *event_data; }; struct cnss_uevent_data { enum cnss_driver_status status; void *data; Loading