From 07c930b3d209c6dadf3bb62157764387d3fe1ba5 Mon Sep 17 00:00:00 2001 From: Lin Bai Date: Wed, 31 Mar 2021 12:22:28 +0800 Subject: [PATCH] cnss2: Add CNSS_BUS_EVENT to report bus info CNSS_BUS_EVENT type added to report bus related info to CLD driver. Currently only PCIe's link down event taken care. Change-Id: Ia18ce1b9ca8d0641e62271d645f1c87461029a26 Signed-off-by: Lin Bai --- drivers/net/wireless/cnss2/pci.c | 17 +++++++++++++++++ include/net/cnss2.h | 12 ++++++++++++ 2 files changed, 29 insertions(+) diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 1f483b3a0a54..766bde02b6fa 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -1222,6 +1222,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; @@ -1244,6 +1255,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); } diff --git a/include/net/cnss2.h b/include/net/cnss2.h index 72a88998d1d1..cbcfac90f960 100644 --- a/include/net/cnss2.h +++ b/include/net/cnss2.h @@ -82,6 +82,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 { @@ -89,6 +96,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;