|
@@ -266,6 +266,51 @@ out:
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * pld_pcie_update_event() - update wlan driver status callback function
|
|
|
+ * @pdev: PCIE device
|
|
|
+ * @cnss_uevent_data: driver uevent data
|
|
|
+ *
|
|
|
+ * This function will be called when platform driver wants to update wlan
|
|
|
+ * driver's status.
|
|
|
+ *
|
|
|
+ * Return: void
|
|
|
+ */
|
|
|
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
|
|
|
+static int pld_pcie_update_event(struct pci_dev *pdev,
|
|
|
+ struct cnss_uevent_data *uevent_data)
|
|
|
+{
|
|
|
+ struct pld_context *pld_context;
|
|
|
+ struct pld_uevent_data data = {0};
|
|
|
+ struct cnss_hang_event *hang_event;
|
|
|
+
|
|
|
+ pld_context = pld_get_global_context();
|
|
|
+
|
|
|
+ if (!pld_context || !uevent_data)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ switch (uevent_data->status) {
|
|
|
+ case CNSS_HANG_EVENT:
|
|
|
+ if (!uevent_data->data)
|
|
|
+ return -EINVAL;
|
|
|
+ hang_event = (struct cnss_hang_event *)uevent_data->data;
|
|
|
+ data.uevent = PLD_FW_HANG_EVENT;
|
|
|
+ data.hang_data.hang_event_data = hang_event->hang_event_data;
|
|
|
+ data.hang_data.hang_event_data_len =
|
|
|
+ hang_event->hang_event_data_len;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pld_context->ops->uevent)
|
|
|
+ pld_context->ops->uevent(&pdev->dev, &data);
|
|
|
+
|
|
|
+out:
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef FEATURE_RUNTIME_PM
|
|
|
/**
|
|
|
* pld_pcie_runtime_suspend() - PM runtime suspend
|
|
@@ -536,6 +581,9 @@ struct cnss_wlan_driver pld_pcie_ops = {
|
|
|
.crash_shutdown = pld_pcie_crash_shutdown,
|
|
|
.modem_status = pld_pcie_notify_handler,
|
|
|
.update_status = pld_pcie_uevent,
|
|
|
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
|
|
|
+ .update_event = pld_pcie_update_event,
|
|
|
+#endif
|
|
|
#ifdef CONFIG_PM
|
|
|
.suspend = pld_pcie_suspend,
|
|
|
.resume = pld_pcie_resume,
|