18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci#ifndef __QCOM_Q6V5_H__
48c2ecf20Sopenharmony_ci#define __QCOM_Q6V5_H__
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/kernel.h>
78c2ecf20Sopenharmony_ci#include <linux/completion.h>
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cistruct rproc;
108c2ecf20Sopenharmony_cistruct qcom_smem_state;
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistruct qcom_q6v5 {
138c2ecf20Sopenharmony_ci	struct device *dev;
148c2ecf20Sopenharmony_ci	struct rproc *rproc;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci	struct qcom_smem_state *state;
178c2ecf20Sopenharmony_ci	unsigned stop_bit;
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	int wdog_irq;
208c2ecf20Sopenharmony_ci	int fatal_irq;
218c2ecf20Sopenharmony_ci	int ready_irq;
228c2ecf20Sopenharmony_ci	int handover_irq;
238c2ecf20Sopenharmony_ci	int stop_irq;
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	bool handover_issued;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	struct completion start_done;
288c2ecf20Sopenharmony_ci	struct completion stop_done;
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	int crash_reason;
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	bool running;
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci	void (*handover)(struct qcom_q6v5 *q6v5);
358c2ecf20Sopenharmony_ci};
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ciint qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
388c2ecf20Sopenharmony_ci		   struct rproc *rproc, int crash_reason,
398c2ecf20Sopenharmony_ci		   void (*handover)(struct qcom_q6v5 *q6v5));
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ciint qcom_q6v5_prepare(struct qcom_q6v5 *q6v5);
428c2ecf20Sopenharmony_ciint qcom_q6v5_unprepare(struct qcom_q6v5 *q6v5);
438c2ecf20Sopenharmony_ciint qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5);
448c2ecf20Sopenharmony_ciint qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout);
458c2ecf20Sopenharmony_ciunsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5);
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#endif
48