1 /* SPDX-License-Identifier: GPL-2.0 */
3 * System Control and Management Interface (SCMI) Message Protocol
4 * notification header file containing some definitions, structures
5 * and function prototypes related to SCMI Notification handling.
7 * Copyright (C) 2020-2021 ARM Ltd.
10 #define _SCMI_NOTIFY_H
12 #include <linux/device.h>
13 #include <linux/ktime.h>
14 #include <linux/types.h>
16 #define SCMI_PROTO_QUEUE_SZ 4096
19 * struct scmi_event - Describes an event to be supported
21 * @max_payld_sz: Max possible size for the payload of a notification message
22 * @max_report_sz: Max possible size for the report of a notification message
24 * Each SCMI protocol, during its initialization phase, can describe the events
25 * it wishes to support in a few struct scmi_event and pass them to the core
26 * using scmi_register_protocol_events().
34 struct scmi_protocol_handle
;
37 * struct scmi_event_ops - Protocol helpers called by the notification core.
38 * @is_notify_supported: Return 0 if the specified notification for the
39 * specified resource (src_id) is supported.
40 * @get_num_sources: Returns the number of possible events' sources for this
42 * @set_notify_enabled: Enable/disable the required evt_id/src_id notifications
43 * using the proper custom protocol commands.
45 * @fill_custom_report: fills a custom event report from the provided
46 * event message payld identifying the event
48 * Return NULL on failure otherwise @report now fully
51 * Context: Helpers described in &struct scmi_event_ops are called only in
54 struct scmi_event_ops
{
55 bool (*is_notify_supported
)(const struct scmi_protocol_handle
*ph
,
56 u8 evt_id
, u32 src_id
);
57 int (*get_num_sources
)(const struct scmi_protocol_handle
*ph
);
58 int (*set_notify_enabled
)(const struct scmi_protocol_handle
*ph
,
59 u8 evt_id
, u32 src_id
, bool enabled
);
60 void *(*fill_custom_report
)(const struct scmi_protocol_handle
*ph
,
61 u8 evt_id
, ktime_t timestamp
,
62 const void *payld
, size_t payld_sz
,
63 void *report
, u32
*src_id
);
67 * struct scmi_protocol_events - Per-protocol description of available events
68 * @queue_sz: Size in bytes of the per-protocol queue to use.
69 * @ops: Array of protocol-specific events operations.
70 * @evts: Array of supported protocol's events.
71 * @num_events: Number of supported protocol's events described in @evts.
72 * @num_sources: Number of protocol's sources, should be greater than 0; if not
73 * available at compile time, it will be provided at run-time via
76 struct scmi_protocol_events
{
78 const struct scmi_event_ops
*ops
;
79 const struct scmi_event
*evts
;
80 unsigned int num_events
;
81 unsigned int num_sources
;
84 int scmi_notification_init(struct scmi_handle
*handle
);
85 void scmi_notification_exit(struct scmi_handle
*handle
);
86 int scmi_register_protocol_events(const struct scmi_handle
*handle
, u8 proto_id
,
87 const struct scmi_protocol_handle
*ph
,
88 const struct scmi_protocol_events
*ee
);
89 void scmi_deregister_protocol_events(const struct scmi_handle
*handle
,
91 int scmi_notify(const struct scmi_handle
*handle
, u8 proto_id
, u8 evt_id
,
92 const void *buf
, size_t len
, ktime_t ts
);
94 #endif /* _SCMI_NOTIFY_H */