18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef __RPROC_QCOM_COMMON_H__
38c2ecf20Sopenharmony_ci#define __RPROC_QCOM_COMMON_H__
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <linux/remoteproc.h>
68c2ecf20Sopenharmony_ci#include "remoteproc_internal.h"
78c2ecf20Sopenharmony_ci#include <linux/soc/qcom/qmi.h>
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cistruct qcom_sysmon;
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct qcom_rproc_glink {
128c2ecf20Sopenharmony_ci	struct rproc_subdev subdev;
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci	const char *ssr_name;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci	struct device *dev;
178c2ecf20Sopenharmony_ci	struct device_node *node;
188c2ecf20Sopenharmony_ci	struct qcom_glink *edge;
198c2ecf20Sopenharmony_ci};
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_cistruct qcom_rproc_subdev {
228c2ecf20Sopenharmony_ci	struct rproc_subdev subdev;
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	struct device *dev;
258c2ecf20Sopenharmony_ci	struct device_node *node;
268c2ecf20Sopenharmony_ci	struct qcom_smd_edge *edge;
278c2ecf20Sopenharmony_ci};
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_cistruct qcom_ssr_subsystem;
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_cistruct qcom_rproc_ssr {
328c2ecf20Sopenharmony_ci	struct rproc_subdev subdev;
338c2ecf20Sopenharmony_ci	struct qcom_ssr_subsystem *info;
348c2ecf20Sopenharmony_ci};
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_civoid qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink,
378c2ecf20Sopenharmony_ci			   const char *ssr_name);
388c2ecf20Sopenharmony_civoid qcom_remove_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink);
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ciint qcom_register_dump_segments(struct rproc *rproc, const struct firmware *fw);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_civoid qcom_add_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd);
438c2ecf20Sopenharmony_civoid qcom_remove_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd);
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_civoid qcom_add_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr,
468c2ecf20Sopenharmony_ci			 const char *ssr_name);
478c2ecf20Sopenharmony_civoid qcom_remove_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr);
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_QCOM_SYSMON)
508c2ecf20Sopenharmony_cistruct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
518c2ecf20Sopenharmony_ci					   const char *name,
528c2ecf20Sopenharmony_ci					   int ssctl_instance);
538c2ecf20Sopenharmony_civoid qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon);
548c2ecf20Sopenharmony_ci#else
558c2ecf20Sopenharmony_cistatic inline struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
568c2ecf20Sopenharmony_ci							 const char *name,
578c2ecf20Sopenharmony_ci							 int ssctl_instance)
588c2ecf20Sopenharmony_ci{
598c2ecf20Sopenharmony_ci	return NULL;
608c2ecf20Sopenharmony_ci}
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_cistatic inline void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon)
638c2ecf20Sopenharmony_ci{
648c2ecf20Sopenharmony_ci}
658c2ecf20Sopenharmony_ci#endif
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci#endif
68