162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#ifndef __QCOM_Q6V5_H__ 462306a36Sopenharmony_ci#define __QCOM_Q6V5_H__ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/kernel.h> 762306a36Sopenharmony_ci#include <linux/completion.h> 862306a36Sopenharmony_ci#include <linux/soc/qcom/qcom_aoss.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct icc_path; 1162306a36Sopenharmony_cistruct rproc; 1262306a36Sopenharmony_cistruct qcom_smem_state; 1362306a36Sopenharmony_cistruct qcom_sysmon; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct qcom_q6v5 { 1662306a36Sopenharmony_ci struct device *dev; 1762306a36Sopenharmony_ci struct rproc *rproc; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci struct qcom_smem_state *state; 2062306a36Sopenharmony_ci struct qmp *qmp; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci struct icc_path *path; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci unsigned stop_bit; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci int wdog_irq; 2762306a36Sopenharmony_ci int fatal_irq; 2862306a36Sopenharmony_ci int ready_irq; 2962306a36Sopenharmony_ci int handover_irq; 3062306a36Sopenharmony_ci int stop_irq; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci bool handover_issued; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci struct completion start_done; 3562306a36Sopenharmony_ci struct completion stop_done; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci int crash_reason; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci bool running; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci const char *load_state; 4262306a36Sopenharmony_ci void (*handover)(struct qcom_q6v5 *q6v5); 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ciint qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, 4662306a36Sopenharmony_ci struct rproc *rproc, int crash_reason, const char *load_state, 4762306a36Sopenharmony_ci void (*handover)(struct qcom_q6v5 *q6v5)); 4862306a36Sopenharmony_civoid qcom_q6v5_deinit(struct qcom_q6v5 *q6v5); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciint qcom_q6v5_prepare(struct qcom_q6v5 *q6v5); 5162306a36Sopenharmony_ciint qcom_q6v5_unprepare(struct qcom_q6v5 *q6v5); 5262306a36Sopenharmony_ciint qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5, struct qcom_sysmon *sysmon); 5362306a36Sopenharmony_ciint qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout); 5462306a36Sopenharmony_ciunsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#endif 57