Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f0823ef authored by Maya Erez's avatar Maya Erez Committed by Kalle Valo
Browse files

wil6210: add support for platform specific notification events



Add the ability to notify the platform driver on different
events, such as FW crash, pre reset and FW ready.

Signed-off-by: default avatarMaya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent eabb03b4
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -394,9 +394,10 @@ static irqreturn_t wil6210_irq_misc_thread(int irq, void *cookie)
		wil_fw_core_dump(wil);
		wil_notify_fw_error(wil);
		isr &= ~ISR_MISC_FW_ERROR;
		if (wil->platform_ops.notify_crash) {
		if (wil->platform_ops.notify) {
			wil_err(wil, "notify platform driver about FW crash");
			wil->platform_ops.notify_crash(wil->platform_handle);
			wil->platform_ops.notify(wil->platform_handle,
						 WIL_PLATFORM_EVT_FW_CRASH);
		} else {
			wil_fw_error_recovery(wil);
		}
+30 −2
Original line number Diff line number Diff line
@@ -764,6 +764,15 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
	if (wil->hw_version == HW_VER_UNKNOWN)
		return -ENODEV;

	if (wil->platform_ops.notify) {
		rc = wil->platform_ops.notify(wil->platform_handle,
					      WIL_PLATFORM_EVT_PRE_RESET);
		if (rc)
			wil_err(wil,
				"%s: PRE_RESET platform notify failed, rc %d\n",
				__func__, rc);
	}

	set_bit(wil_status_resetting, wil->status);

	cancel_work_sync(&wil->disconnect_worker);
@@ -843,8 +852,27 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)

		/* we just started MAC, wait for FW ready */
		rc = wil_wait_for_fw_ready(wil);
		if (rc == 0) /* check FW is responsive */
		if (rc)
			return rc;

		/* check FW is responsive */
		rc = wmi_echo(wil);
		if (rc) {
			wil_err(wil, "%s: wmi_echo failed, rc %d\n",
				__func__, rc);
			return rc;
		}

		if (wil->platform_ops.notify) {
			rc = wil->platform_ops.notify(wil->platform_handle,
						      WIL_PLATFORM_EVT_FW_RDY);
			if (rc) {
				wil_err(wil,
					"%s: FW_RDY notify failed, rc %d\n",
					__func__, rc);
				rc = 0;
			}
		}
	}

	return rc;
+7 −1
Original line number Diff line number Diff line
@@ -19,6 +19,12 @@

struct device;

enum wil_platform_event {
	WIL_PLATFORM_EVT_FW_CRASH = 0,
	WIL_PLATFORM_EVT_PRE_RESET = 1,
	WIL_PLATFORM_EVT_FW_RDY = 2,
};

/**
 * struct wil_platform_ops - wil platform module calls from this
 * driver to platform driver
@@ -28,7 +34,7 @@ struct wil_platform_ops {
	int (*suspend)(void *handle);
	int (*resume)(void *handle);
	void (*uninit)(void *handle);
	int (*notify_crash)(void *handle);
	int (*notify)(void *handle, enum wil_platform_event evt);
};

/**