xref: /linux/drivers/remoteproc/qcom_q6v5.h (revision e9142f5c28e997ab45fac23bc27a3bc01725bb49)
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;
113b415c8fSBjorn Andersson 
123b415c8fSBjorn Andersson struct qcom_q6v5 {
133b415c8fSBjorn Andersson 	struct device *dev;
143b415c8fSBjorn Andersson 	struct rproc *rproc;
153b415c8fSBjorn Andersson 
163b415c8fSBjorn Andersson 	struct qcom_smem_state *state;
173b415c8fSBjorn Andersson 	unsigned stop_bit;
183b415c8fSBjorn Andersson 
193b415c8fSBjorn Andersson 	int wdog_irq;
203b415c8fSBjorn Andersson 	int fatal_irq;
213b415c8fSBjorn Andersson 	int ready_irq;
223b415c8fSBjorn Andersson 	int handover_irq;
233b415c8fSBjorn Andersson 	int stop_irq;
243b415c8fSBjorn Andersson 
253b415c8fSBjorn Andersson 	bool handover_issued;
263b415c8fSBjorn Andersson 
273b415c8fSBjorn Andersson 	struct completion start_done;
283b415c8fSBjorn Andersson 	struct completion stop_done;
293b415c8fSBjorn Andersson 
303b415c8fSBjorn Andersson 	int crash_reason;
313b415c8fSBjorn Andersson 
323b415c8fSBjorn Andersson 	bool running;
333b415c8fSBjorn Andersson 
343b415c8fSBjorn Andersson 	void (*handover)(struct qcom_q6v5 *q6v5);
353b415c8fSBjorn Andersson };
363b415c8fSBjorn Andersson 
373b415c8fSBjorn Andersson int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
383b415c8fSBjorn Andersson 		   struct rproc *rproc, int crash_reason,
393b415c8fSBjorn Andersson 		   void (*handover)(struct qcom_q6v5 *q6v5));
403b415c8fSBjorn Andersson 
413b415c8fSBjorn Andersson int qcom_q6v5_prepare(struct qcom_q6v5 *q6v5);
423b415c8fSBjorn Andersson int qcom_q6v5_unprepare(struct qcom_q6v5 *q6v5);
433b415c8fSBjorn Andersson int qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5);
443b415c8fSBjorn Andersson int qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout);
45*e9142f5cSBjorn Andersson unsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5);
463b415c8fSBjorn Andersson 
473b415c8fSBjorn Andersson #endif
48