xref: /optee_os/lib/libutee/include/pta_rtc.h (revision 8e31dd589ca2ebec4ea8fa7c382b0294d9248809)
1cea1eb0bSClément Léger /* SPDX-License-Identifier: BSD-2-Clause */
2cea1eb0bSClément Léger /*
3cea1eb0bSClément Léger  * Copyright (C) 2022, Microchip
4cea1eb0bSClément Léger  */
5cea1eb0bSClément Léger #ifndef __PTA_RTC_H
6cea1eb0bSClément Léger #define __PTA_RTC_H
7cea1eb0bSClément Léger 
8cea1eb0bSClément Léger #include <tee_api_types.h>
9cea1eb0bSClément Léger 
10cea1eb0bSClément Léger #define PTA_RTC_UUID { 0xf389f8c8, 0x845f, 0x496c, \
11cea1eb0bSClément Léger 		{ 0x8b, 0xbe, 0xd6, 0x4b, 0xd2, 0x4c, 0x92, 0xfd } }
12cea1eb0bSClément Léger 
13cea1eb0bSClément Léger #define PTA_RTC_INFO_VERSION		0x1
14cea1eb0bSClément Léger 
15cea1eb0bSClément Léger /*
16cea1eb0bSClément Léger  * RTC provides set/get offset and thus command PTA_CMD_RTC_GET_OFFSET and
17cea1eb0bSClément Léger  * PTA_CMD_RTC_SET_OFFSET might be called
18cea1eb0bSClément Léger  */
19cea1eb0bSClément Léger #define PTA_RTC_FEATURE_CORRECTION	BIT(0)
20cea1eb0bSClément Léger 
21*8e31dd58SClément Le Goffic /*
22*8e31dd58SClément Le Goffic  * RTC provides set/read/enable/wait alarm and thus
23*8e31dd58SClément Le Goffic  * commands:
24*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_SET_ALARM, PTA_CMD_RTC_READ_ALARM,
25*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_WAIT_ALARM, PTA_CMD_RTC_ENABLE_ALARM
26*8e31dd58SClément Le Goffic  * might be called
27*8e31dd58SClément Le Goffic  */
28*8e31dd58SClément Le Goffic #define PTA_RTC_FEATURE_ALARM		BIT(1)
29*8e31dd58SClément Le Goffic 
30*8e31dd58SClément Le Goffic /*
31*8e31dd58SClément Le Goffic  * Command PTA_CMD_RTC_SET_WAKE_ALARM_STATUS can be used to enable/disable the
32*8e31dd58SClément Le Goffic  * alarm wake-up capability.
33*8e31dd58SClément Le Goffic  */
34*8e31dd58SClément Le Goffic #define PTA_RTC_FEATURE_WAKEUP_ALARM	BIT(2)
35*8e31dd58SClément Le Goffic 
36cea1eb0bSClément Léger struct pta_rtc_time {
37cea1eb0bSClément Léger 	uint32_t tm_sec;
38cea1eb0bSClément Léger 	uint32_t tm_min;
39cea1eb0bSClément Léger 	uint32_t tm_hour;
40cea1eb0bSClément Léger 	uint32_t tm_mday;
41cea1eb0bSClément Léger 	uint32_t tm_mon;
42cea1eb0bSClément Léger 	uint32_t tm_year;
43cea1eb0bSClément Léger 	uint32_t tm_wday;
44cea1eb0bSClément Léger };
45cea1eb0bSClément Léger 
46cea1eb0bSClément Léger /*
47*8e31dd58SClément Le Goffic  * struct pta_rtc_alarm - State of an RTC alarm
48*8e31dd58SClément Le Goffic  * @enabled - 1 if alarm is enabled, 0 if disabled
49*8e31dd58SClément Le Goffic  * @pending - 1 if alarm event is pending, 0 if not
50*8e31dd58SClément Le Goffic  * @time: Alarm elapsure time
51*8e31dd58SClément Le Goffic  */
52*8e31dd58SClément Le Goffic struct pta_rtc_alarm {
53*8e31dd58SClément Le Goffic 	uint8_t enabled;
54*8e31dd58SClément Le Goffic 	uint8_t pending;
55*8e31dd58SClément Le Goffic 	struct pta_rtc_time time;
56*8e31dd58SClément Le Goffic };
57*8e31dd58SClément Le Goffic 
58*8e31dd58SClément Le Goffic /*
59cea1eb0bSClément Léger  * struct pta_rtc_info - RTC service information
60cea1eb0bSClément Léger  * @version - 1st 64bit cell, version of the structure: PTA_RTC_INFO_VERSION
61cea1eb0bSClément Léger  * @features - 64bit flag mask related to PTA_RTC_FEATURE_*
62cea1eb0bSClément Léger  * @range_min - Minima time reference the RTC can be programmed to
63cea1eb0bSClément Léger  * @range_max - Maxima time reference the RTC can reach
64cea1eb0bSClément Léger  */
65cea1eb0bSClément Léger struct pta_rtc_info {
66cea1eb0bSClément Léger 	uint64_t version;
67cea1eb0bSClément Léger 	uint64_t features;
68cea1eb0bSClément Léger 	struct pta_rtc_time range_min;
69cea1eb0bSClément Léger 	struct pta_rtc_time range_max;
70cea1eb0bSClément Léger };
71cea1eb0bSClément Léger 
72cea1eb0bSClément Léger /*
73cea1eb0bSClément Léger  * PTA_CMD_RTC_GET_INFO - Get RTC information
74cea1eb0bSClément Léger  *
75cea1eb0bSClément Léger  * [out]        memref[0]  RTC buffer memory reference containing a struct
76cea1eb0bSClément Léger  *			   pta_rtc_info
77cea1eb0bSClément Léger  *
78cea1eb0bSClément Léger  * Return codes:
79cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
80cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
81cea1eb0bSClément Léger  */
82cea1eb0bSClément Léger #define PTA_CMD_RTC_GET_INFO			0x0
83cea1eb0bSClément Léger 
84cea1eb0bSClément Léger /*
85cea1eb0bSClément Léger  * PTA_CMD_RTC_GET_TIME - Get time from RTC
86cea1eb0bSClément Léger  *
87cea1eb0bSClément Léger  * [out]    memref[0]  RTC buffer memory reference containing a struct
88cea1eb0bSClément Léger  *		       pta_rtc_time
89cea1eb0bSClément Léger  *
90cea1eb0bSClément Léger  * Return codes:
91cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
92cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
93cea1eb0bSClément Léger  */
94cea1eb0bSClément Léger #define PTA_CMD_RTC_GET_TIME			0x1
95cea1eb0bSClément Léger 
96cea1eb0bSClément Léger /*
97cea1eb0bSClément Léger  * PTA_CMD_RTC_SET_TIME - Set time from RTC
98cea1eb0bSClément Léger  *
99cea1eb0bSClément Léger  * [in]     memref[0]  RTC buffer memory reference containing a struct
100cea1eb0bSClément Léger  *                     pta_rtc_time to be used as RTC time
101cea1eb0bSClément Léger  *
102cea1eb0bSClément Léger  * Return codes:
103cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
104cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
105cea1eb0bSClément Léger  */
106cea1eb0bSClément Léger #define PTA_CMD_RTC_SET_TIME			0x2
107cea1eb0bSClément Léger 
108cea1eb0bSClément Léger /*
109cea1eb0bSClément Léger  * PTA_CMD_RTC_GET_OFFSET - Get RTC offset
110cea1eb0bSClément Léger  *
111cea1eb0bSClément Léger  * [out]    value[0].a  RTC offset (signed 32bit value)
112cea1eb0bSClément Léger  *
113cea1eb0bSClément Léger  * Return codes:
114cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
115cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
116cea1eb0bSClément Léger  */
117cea1eb0bSClément Léger #define PTA_CMD_RTC_GET_OFFSET			0x3
118cea1eb0bSClément Léger 
119cea1eb0bSClément Léger /*
120cea1eb0bSClément Léger  * PTA_CMD_RTC_SET_OFFSET - Set RTC offset
121cea1eb0bSClément Léger  *
122cea1eb0bSClément Léger  * [in]     value[0].a  RTC offset to be set (signed 32bit value)
123cea1eb0bSClément Léger  *
124cea1eb0bSClément Léger  * Return codes:
125cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
126cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
127cea1eb0bSClément Léger  */
128cea1eb0bSClément Léger #define PTA_CMD_RTC_SET_OFFSET			0x4
129cea1eb0bSClément Léger 
130*8e31dd58SClément Le Goffic /*
131*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_READ_ALARM - Read RTC alarm
132*8e31dd58SClément Le Goffic  *
133*8e31dd58SClément Le Goffic  * [out]     memref[0]  RTC buffer memory reference containing a struct
134*8e31dd58SClément Le Goffic  *                      pta_rtc_alarm
135*8e31dd58SClément Le Goffic  *
136*8e31dd58SClément Le Goffic  * Return codes:
137*8e31dd58SClément Le Goffic  * TEE_SUCCESS - Invoke command success
138*8e31dd58SClément Le Goffic  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
139*8e31dd58SClément Le Goffic  */
140*8e31dd58SClément Le Goffic #define PTA_CMD_RTC_READ_ALARM			0x5
141*8e31dd58SClément Le Goffic 
142*8e31dd58SClément Le Goffic /*
143*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_SET_ALARM - Set RTC alarm
144*8e31dd58SClément Le Goffic  *
145*8e31dd58SClément Le Goffic  * [in]     memref[0]  RTC buffer memory reference containing a struct
146*8e31dd58SClément Le Goffic  *                     pta_rtc_alarm to be used as RTC alarm
147*8e31dd58SClément Le Goffic  *
148*8e31dd58SClément Le Goffic  * Return codes:
149*8e31dd58SClément Le Goffic  * TEE_SUCCESS - Invoke command success
150*8e31dd58SClément Le Goffic  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
151*8e31dd58SClément Le Goffic  */
152*8e31dd58SClément Le Goffic #define PTA_CMD_RTC_SET_ALARM			0x6
153*8e31dd58SClément Le Goffic 
154*8e31dd58SClément Le Goffic /*
155*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_ENABLE_ALARM - Enable Alarm
156*8e31dd58SClément Le Goffic  *
157*8e31dd58SClément Le Goffic  * [in]     value[0].a  RTC IRQ flag (uint32_t), 0 to disable the alarm, 1 to
158*8e31dd58SClément Le Goffic  *                      enable
159*8e31dd58SClément Le Goffic  *
160*8e31dd58SClément Le Goffic  * Return codes:
161*8e31dd58SClément Le Goffic  * TEE_SUCCESS - Invoke command success
162*8e31dd58SClément Le Goffic  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
163*8e31dd58SClément Le Goffic  */
164*8e31dd58SClément Le Goffic #define PTA_CMD_RTC_ENABLE_ALARM		0x7
165*8e31dd58SClément Le Goffic 
166*8e31dd58SClément Le Goffic /*
167*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_WAIT_ALARM - Get alarm event
168*8e31dd58SClément Le Goffic  *
169*8e31dd58SClément Le Goffic  * [out]     value[0].a  RTC wait alarm return status (uint32_t):
170*8e31dd58SClément Le Goffic  *                       - 0: No alarm event
171*8e31dd58SClément Le Goffic  *                       - 1: Alarm event occurred
172*8e31dd58SClément Le Goffic  *                       - 2: Alarm event canceled
173*8e31dd58SClément Le Goffic  *
174*8e31dd58SClément Le Goffic  * Return codes:
175*8e31dd58SClément Le Goffic  * TEE_SUCCESS - Invoke command success
176*8e31dd58SClément Le Goffic  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
177*8e31dd58SClément Le Goffic  */
178*8e31dd58SClément Le Goffic #define PTA_CMD_RTC_WAIT_ALARM			0x8
179*8e31dd58SClément Le Goffic 
180*8e31dd58SClément Le Goffic /*
181*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_CANCEL_WAIT_ALARM - Cancel wait for alarm event
182*8e31dd58SClément Le Goffic  *
183*8e31dd58SClément Le Goffic  * Return codes:
184*8e31dd58SClément Le Goffic  * TEE_SUCCESS - Invoke command success
185*8e31dd58SClément Le Goffic  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
186*8e31dd58SClément Le Goffic  */
187*8e31dd58SClément Le Goffic #define PTA_CMD_RTC_CANCEL_WAIT_ALARM		0x9
188*8e31dd58SClément Le Goffic 
189*8e31dd58SClément Le Goffic /*
190*8e31dd58SClément Le Goffic  * PTA_CMD_RTC_SET_WAKE_ALARM_STATUS - Set RTC wake alarm status flag
191*8e31dd58SClément Le Goffic  *
192*8e31dd58SClément Le Goffic  * [in]     value[0].a RTC IRQ wake alarm flag (uint32_t), 0 to disable the wake
193*8e31dd58SClément Le Goffic  *                     up capability, 1 to enable.
194*8e31dd58SClément Le Goffic  *
195*8e31dd58SClément Le Goffic  * Return codes:
196*8e31dd58SClément Le Goffic  * TEE_SUCCESS - Invoke command success
197*8e31dd58SClément Le Goffic  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
198*8e31dd58SClément Le Goffic  */
199*8e31dd58SClément Le Goffic #define PTA_CMD_RTC_SET_WAKE_ALARM_STATUS	0xA
200*8e31dd58SClément Le Goffic 
201cea1eb0bSClément Léger #endif /* __PTA_RTC_H */
202