/* SPDX-License-Identifier: GPL-2.0 */ /* Copyright (C) 2019 Linaro Ltd. */ #ifndef __QCOM_Q6V5_IPA_NOTIFY_H__ #define __QCOM_Q6V5_IPA_NOTIFY_H__ #if IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY) #include enum qcom_rproc_event { MODEM_STARTING = 0, /* Modem is about to be started */ MODEM_RUNNING = 1, /* Startup complete; modem is operational */ MODEM_STOPPING = 2, /* Modem is about to shut down */ MODEM_CRASHED = 3, /* Modem has crashed (implies stopping) */ MODEM_OFFLINE = 4, /* Modem is now offline */ MODEM_REMOVING = 5, /* Modem is about to be removed */ }; typedef void (*qcom_ipa_notify_t)(void *data, enum qcom_rproc_event event); struct qcom_rproc_ipa_notify { struct rproc_subdev subdev; qcom_ipa_notify_t notify; void *data; }; /** * qcom_add_ipa_notify_subdev() - Register IPA notification subdevice * @rproc: rproc handle * @ipa_notify: IPA notification subdevice handle * * Register the @ipa_notify subdevice with the @rproc so modem events * can be sent to IPA when they occur. * * This is defined in "qcom_q6v5_ipa_notify.c". */ void qcom_add_ipa_notify_subdev(struct rproc *rproc, struct qcom_rproc_ipa_notify *ipa_notify); /** * qcom_remove_ipa_notify_subdev() - Remove IPA SSR subdevice * @rproc: rproc handle * @ipa_notify: IPA notification subdevice handle * * This is defined in "qcom_q6v5_ipa_notify.c". */ void qcom_remove_ipa_notify_subdev(struct rproc *rproc, struct qcom_rproc_ipa_notify *ipa_notify); /** * qcom_register_ipa_notify() - Register IPA notification function * @rproc: Remote processor handle * @notify: Non-null IPA notification callback function pointer * @data: Data supplied to IPA notification callback function * * @Return: 0 if successful, or a negative error code otherwise * * This is defined in "qcom_q6v5_mss.c". */ int qcom_register_ipa_notify(struct rproc *rproc, qcom_ipa_notify_t notify, void *data); /** * qcom_deregister_ipa_notify() - Deregister IPA notification function * @rproc: Remote processor handle * * This is defined in "qcom_q6v5_mss.c". */ void qcom_deregister_ipa_notify(struct rproc *rproc); #else /* !IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY) */ struct qcom_rproc_ipa_notify { /* empty */ }; #define qcom_add_ipa_notify_subdev(rproc, ipa_notify) /* no-op */ #define qcom_remove_ipa_notify_subdev(rproc, ipa_notify) /* no-op */ #endif /* !IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY) */ #endif /* !__QCOM_Q6V5_IPA_NOTIFY_H__ */