^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef __RPROC_QCOM_COMMON_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define __RPROC_QCOM_COMMON_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/remoteproc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include "remoteproc_internal.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/soc/qcom/qmi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) struct qcom_sysmon;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) struct qcom_rproc_glink {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) struct rproc_subdev subdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) const char *ssr_name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) struct device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) struct device_node *node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) struct qcom_glink *edge;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) struct qcom_rproc_subdev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) struct rproc_subdev subdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct device_node *node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct qcom_smd_edge *edge;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) struct qcom_ssr_subsystem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) struct qcom_rproc_ssr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) struct rproc_subdev subdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct qcom_ssr_subsystem *info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) void qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) const char *ssr_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) void qcom_remove_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) int qcom_register_dump_segments(struct rproc *rproc, const struct firmware *fw);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) void qcom_add_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) void qcom_remove_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) void qcom_add_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) const char *ssr_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) void qcom_remove_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #if IS_ENABLED(CONFIG_QCOM_SYSMON)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) int ssctl_instance);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) static inline struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) int ssctl_instance)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) static inline void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #endif