Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/firmware/arm_scmi/notify.h
26428 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/*
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.
6
*
7
* Copyright (C) 2020-2021 ARM Ltd.
8
*/
9
#ifndef _SCMI_NOTIFY_H
10
#define _SCMI_NOTIFY_H
11
12
#include <linux/device.h>
13
#include <linux/ktime.h>
14
#include <linux/types.h>
15
16
#define SCMI_PROTO_QUEUE_SZ 4096
17
18
/**
19
* struct scmi_event - Describes an event to be supported
20
* @id: Event ID
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
23
*
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().
27
*/
28
struct scmi_event {
29
u8 id;
30
size_t max_payld_sz;
31
size_t max_report_sz;
32
};
33
34
struct scmi_protocol_handle;
35
36
/**
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
41
* protocol
42
* @set_notify_enabled: Enable/disable the required evt_id/src_id notifications
43
* using the proper custom protocol commands.
44
* Return 0 on Success
45
* @fill_custom_report: fills a custom event report from the provided
46
* event message payld identifying the event
47
* specific src_id.
48
* Return NULL on failure otherwise @report now fully
49
* populated
50
*
51
* Context: Helpers described in &struct scmi_event_ops are called only in
52
* process context.
53
*/
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);
64
};
65
66
/**
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
74
* @get_num_sources.
75
*/
76
struct scmi_protocol_events {
77
size_t queue_sz;
78
const struct scmi_event_ops *ops;
79
const struct scmi_event *evts;
80
unsigned int num_events;
81
unsigned int num_sources;
82
};
83
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,
90
u8 proto_id);
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);
93
94
#endif /* _SCMI_NOTIFY_H */
95
96