162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __RPROC_QCOM_COMMON_H__
362306a36Sopenharmony_ci#define __RPROC_QCOM_COMMON_H__
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/remoteproc.h>
662306a36Sopenharmony_ci#include "remoteproc_internal.h"
762306a36Sopenharmony_ci#include <linux/soc/qcom/qmi.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistruct qcom_glink_smem;
1062306a36Sopenharmony_cistruct qcom_sysmon;
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct qcom_rproc_glink {
1362306a36Sopenharmony_ci	struct rproc_subdev subdev;
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	const char *ssr_name;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	struct device *dev;
1862306a36Sopenharmony_ci	struct device_node *node;
1962306a36Sopenharmony_ci	struct qcom_glink_smem *edge;
2062306a36Sopenharmony_ci};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct qcom_rproc_subdev {
2362306a36Sopenharmony_ci	struct rproc_subdev subdev;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	struct device *dev;
2662306a36Sopenharmony_ci	struct device_node *node;
2762306a36Sopenharmony_ci	struct qcom_smd_edge *edge;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct qcom_ssr_subsystem;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct qcom_rproc_ssr {
3362306a36Sopenharmony_ci	struct rproc_subdev subdev;
3462306a36Sopenharmony_ci	struct qcom_ssr_subsystem *info;
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_civoid qcom_minidump(struct rproc *rproc, unsigned int minidump_id,
3862306a36Sopenharmony_ci			void (*rproc_dumpfn_t)(struct rproc *rproc,
3962306a36Sopenharmony_ci				struct rproc_dump_segment *segment, void *dest, size_t offset,
4062306a36Sopenharmony_ci				size_t size));
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_civoid qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink,
4362306a36Sopenharmony_ci			   const char *ssr_name);
4462306a36Sopenharmony_civoid qcom_remove_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciint qcom_register_dump_segments(struct rproc *rproc, const struct firmware *fw);
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_civoid qcom_add_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd);
4962306a36Sopenharmony_civoid qcom_remove_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd);
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_civoid qcom_add_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr,
5262306a36Sopenharmony_ci			 const char *ssr_name);
5362306a36Sopenharmony_civoid qcom_remove_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr);
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_QCOM_SYSMON)
5662306a36Sopenharmony_cistruct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
5762306a36Sopenharmony_ci					   const char *name,
5862306a36Sopenharmony_ci					   int ssctl_instance);
5962306a36Sopenharmony_civoid qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon);
6062306a36Sopenharmony_cibool qcom_sysmon_shutdown_acked(struct qcom_sysmon *sysmon);
6162306a36Sopenharmony_ci#else
6262306a36Sopenharmony_cistatic inline struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
6362306a36Sopenharmony_ci							 const char *name,
6462306a36Sopenharmony_ci							 int ssctl_instance)
6562306a36Sopenharmony_ci{
6662306a36Sopenharmony_ci	return NULL;
6762306a36Sopenharmony_ci}
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_cistatic inline void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon)
7062306a36Sopenharmony_ci{
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistatic inline bool qcom_sysmon_shutdown_acked(struct qcom_sysmon *sysmon)
7462306a36Sopenharmony_ci{
7562306a36Sopenharmony_ci	return false;
7662306a36Sopenharmony_ci}
7762306a36Sopenharmony_ci#endif
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci#endif
80