/* SPDX-License-Identifier: GPL-2.0 */ /* * System Control and Management Interface (SCMI) Message Protocol * notification header file containing some definitions, structures * and function prototypes related to SCMI Notification handling. * * Copyright (C) 2020 ARM Ltd. */ #ifndef _SCMI_NOTIFY_H #define _SCMI_NOTIFY_H #include #include #include #define SCMI_PROTO_QUEUE_SZ 4096 /** * struct scmi_event - Describes an event to be supported * @id: Event ID * @max_payld_sz: Max possible size for the payload of a notification message * @max_report_sz: Max possible size for the report of a notification message * * Each SCMI protocol, during its initialization phase, can describe the events * it wishes to support in a few struct scmi_event and pass them to the core * using scmi_register_protocol_events(). */ struct scmi_event { u8 id; size_t max_payld_sz; size_t max_report_sz; }; /** * struct scmi_event_ops - Protocol helpers called by the notification core. * @set_notify_enabled: Enable/disable the required evt_id/src_id notifications * using the proper custom protocol commands. * Return 0 on Success * @fill_custom_report: fills a custom event report from the provided * event message payld identifying the event * specific src_id. * Return NULL on failure otherwise @report now fully * populated * * Context: Helpers described in &struct scmi_event_ops are called only in * process context. */ struct scmi_event_ops { int (*set_notify_enabled)(const struct scmi_handle *handle, u8 evt_id, u32 src_id, bool enabled); void *(*fill_custom_report)(const struct scmi_handle *handle, u8 evt_id, ktime_t timestamp, const void *payld, size_t payld_sz, void *report, u32 *src_id); }; int scmi_notification_init(struct scmi_handle *handle); void scmi_notification_exit(struct scmi_handle *handle); int scmi_register_protocol_events(const struct scmi_handle *handle, u8 proto_id, size_t queue_sz, const struct scmi_event_ops *ops, const struct scmi_event *evt, int num_events, int num_sources); int scmi_notify(const struct scmi_handle *handle, u8 proto_id, u8 evt_id, const void *buf, size_t len, ktime_t ts); #endif /* _SCMI_NOTIFY_H */