1 /*
2  * Arm SCP/MCP Software
3  * Copyright (c) 2015-2021, Arm Limited and Contributors. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef INTERNAL_SCMI_SYSTEM_POWER_H
9 #define INTERNAL_SCMI_SYSTEM_POWER_H
10 
11 #include <stdint.h>
12 
13 #define SCMI_PROTOCOL_VERSION_SYS_POWER UINT32_C(0x10000)
14 
15 enum scmi_sys_power_notification_id {
16     SCMI_SYS_POWER_STATE_SET_NOTIFY = 0x000,
17 };
18 
19 /*
20  * PROTOCOL_MESSAGE_ATTRIBUTES
21  */
22 #define SYS_POWER_STATE_SET_ATTRIBUTES_WARM_RESET UINT32_C(0x80000000)
23 #define SYS_POWER_STATE_SET_ATTRIBUTES_SUSPEND    UINT32_C(0x40000000)
24 
25 /*
26  * SYSTEM_POWER_STATE_SET
27  */
28 
29 #define STATE_SET_FLAGS_MASK             0x1U
30 #define STATE_SET_FLAGS_GRACEFUL_REQUEST 0x1U
31 
32 enum scmi_system_state {
33     SCMI_SYSTEM_STATE_SHUTDOWN,
34     SCMI_SYSTEM_STATE_COLD_RESET,
35     SCMI_SYSTEM_STATE_WARM_RESET,
36     SCMI_SYSTEM_STATE_POWER_UP,
37     SCMI_SYSTEM_STATE_SUSPEND,
38     SCMI_SYSTEM_STATE_MAX
39 };
40 
41 struct scmi_sys_power_state_set_a2p {
42     uint32_t flags;
43     uint32_t system_state;
44 };
45 
46 struct scmi_sys_power_state_set_p2a {
47     int32_t status;
48 };
49 
50 /*
51  * SYSTEM_POWER_STATE_GET
52  */
53 
54 struct scmi_sys_power_state_get_p2a {
55     int32_t status;
56     uint32_t system_state;
57 };
58 
59 /*
60  * SYSTEM_POWER_STATE_NOTIFY
61  */
62 
63 #define STATE_NOTIFY_FLAGS_MASK 0x1U
64 
65 struct scmi_sys_power_state_notify_a2p {
66     uint32_t flags;
67 };
68 
69 struct scmi_sys_power_state_notify_p2a {
70     int32_t status;
71 };
72 
73 /*
74  * SYSTEM_POWER_STATE_NOTIFIER
75  */
76 
77 struct scmi_sys_power_state_notifier {
78     uint32_t agent_id;
79     uint32_t flags;
80     uint32_t system_state;
81 };
82 
83 #endif /* INTERNAL_SCMI_SYSTEM_POWER_H */
84