Ver Fonte

qcacld-3.0: Add pld pcie code to handle hang event data info

Add code in pld pcie to handle hang event data and length received
from platform driver.

Change-Id: Ibc1b667b6127e2ce6b666e9007bf725ea7e07760
Mohammed Siddiq há 5 anos atrás
pai
commit
b59cdd31cd
1 ficheiros alterados com 48 adições e 0 exclusões
  1. 48 0
      core/pld/src/pld_pcie.c

+ 48 - 0
core/pld/src/pld_pcie.c

@@ -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,