xref: /linux/drivers/remoteproc/qcom_q6v5.h (revision ed5da80873a792b9b2b560a6417bc60679ba5126)
13b415c8fSBjorn Andersson /* SPDX-License-Identifier: GPL-2.0 */
23b415c8fSBjorn Andersson 
33b415c8fSBjorn Andersson #ifndef __QCOM_Q6V5_H__
43b415c8fSBjorn Andersson #define __QCOM_Q6V5_H__
53b415c8fSBjorn Andersson 
63b415c8fSBjorn Andersson #include <linux/kernel.h>
73b415c8fSBjorn Andersson #include <linux/completion.h>
83b415c8fSBjorn Andersson 
93b415c8fSBjorn Andersson struct rproc;
103b415c8fSBjorn Andersson struct qcom_smem_state;
11ed5da808SBjorn Andersson struct qcom_sysmon;
123b415c8fSBjorn Andersson 
133b415c8fSBjorn Andersson struct qcom_q6v5 {
143b415c8fSBjorn Andersson 	struct device *dev;
153b415c8fSBjorn Andersson 	struct rproc *rproc;
163b415c8fSBjorn Andersson 
173b415c8fSBjorn Andersson 	struct qcom_smem_state *state;
183b415c8fSBjorn Andersson 	unsigned stop_bit;
193b415c8fSBjorn Andersson 
203b415c8fSBjorn Andersson 	int wdog_irq;
213b415c8fSBjorn Andersson 	int fatal_irq;
223b415c8fSBjorn Andersson 	int ready_irq;
233b415c8fSBjorn Andersson 	int handover_irq;
243b415c8fSBjorn Andersson 	int stop_irq;
253b415c8fSBjorn Andersson 
263b415c8fSBjorn Andersson 	bool handover_issued;
273b415c8fSBjorn Andersson 
283b415c8fSBjorn Andersson 	struct completion start_done;
293b415c8fSBjorn Andersson 	struct completion stop_done;
303b415c8fSBjorn Andersson 
313b415c8fSBjorn Andersson 	int crash_reason;
323b415c8fSBjorn Andersson 
333b415c8fSBjorn Andersson 	bool running;
343b415c8fSBjorn Andersson 
353b415c8fSBjorn Andersson 	void (*handover)(struct qcom_q6v5 *q6v5);
363b415c8fSBjorn Andersson };
373b415c8fSBjorn Andersson 
383b415c8fSBjorn Andersson int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
393b415c8fSBjorn Andersson 		   struct rproc *rproc, int crash_reason,
403b415c8fSBjorn Andersson 		   void (*handover)(struct qcom_q6v5 *q6v5));
413b415c8fSBjorn Andersson 
423b415c8fSBjorn Andersson int qcom_q6v5_prepare(struct qcom_q6v5 *q6v5);
433b415c8fSBjorn Andersson int qcom_q6v5_unprepare(struct qcom_q6v5 *q6v5);
44ed5da808SBjorn Andersson int qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5, struct qcom_sysmon *sysmon);
453b415c8fSBjorn Andersson int qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout);
46e9142f5cSBjorn Andersson unsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5);
473b415c8fSBjorn Andersson 
483b415c8fSBjorn Andersson #endif
49