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