xref: /optee_os/lib/libutee/include/pta_rtc.h (revision cea1eb0bc90e1a8eb683767fba0e77bba4afe3e1)
1*cea1eb0bSClément Léger /* SPDX-License-Identifier: BSD-2-Clause */
2*cea1eb0bSClément Léger /*
3*cea1eb0bSClément Léger  * Copyright (C) 2022, Microchip
4*cea1eb0bSClément Léger  */
5*cea1eb0bSClément Léger #ifndef __PTA_RTC_H
6*cea1eb0bSClément Léger #define __PTA_RTC_H
7*cea1eb0bSClément Léger 
8*cea1eb0bSClément Léger #include <tee_api_types.h>
9*cea1eb0bSClément Léger 
10*cea1eb0bSClément Léger #define PTA_RTC_UUID { 0xf389f8c8, 0x845f, 0x496c, \
11*cea1eb0bSClément Léger 		{ 0x8b, 0xbe, 0xd6, 0x4b, 0xd2, 0x4c, 0x92, 0xfd } }
12*cea1eb0bSClément Léger 
13*cea1eb0bSClément Léger #define PTA_RTC_INFO_VERSION		0x1
14*cea1eb0bSClément Léger 
15*cea1eb0bSClément Léger /*
16*cea1eb0bSClément Léger  * RTC provides set/get offset and thus command PTA_CMD_RTC_GET_OFFSET and
17*cea1eb0bSClément Léger  * PTA_CMD_RTC_SET_OFFSET might be called
18*cea1eb0bSClément Léger  */
19*cea1eb0bSClément Léger #define PTA_RTC_FEATURE_CORRECTION	BIT(0)
20*cea1eb0bSClément Léger 
21*cea1eb0bSClément Léger struct pta_rtc_time {
22*cea1eb0bSClément Léger 	uint32_t tm_sec;
23*cea1eb0bSClément Léger 	uint32_t tm_min;
24*cea1eb0bSClément Léger 	uint32_t tm_hour;
25*cea1eb0bSClément Léger 	uint32_t tm_mday;
26*cea1eb0bSClément Léger 	uint32_t tm_mon;
27*cea1eb0bSClément Léger 	uint32_t tm_year;
28*cea1eb0bSClément Léger 	uint32_t tm_wday;
29*cea1eb0bSClément Léger };
30*cea1eb0bSClément Léger 
31*cea1eb0bSClément Léger /*
32*cea1eb0bSClément Léger  * struct pta_rtc_info - RTC service information
33*cea1eb0bSClément Léger  * @version - 1st 64bit cell, version of the structure: PTA_RTC_INFO_VERSION
34*cea1eb0bSClément Léger  * @features - 64bit flag mask related to PTA_RTC_FEATURE_*
35*cea1eb0bSClément Léger  * @range_min - Minima time reference the RTC can be programmed to
36*cea1eb0bSClément Léger  * @range_max - Maxima time reference the RTC can reach
37*cea1eb0bSClément Léger  */
38*cea1eb0bSClément Léger struct pta_rtc_info {
39*cea1eb0bSClément Léger 	uint64_t version;
40*cea1eb0bSClément Léger 	uint64_t features;
41*cea1eb0bSClément Léger 	struct pta_rtc_time range_min;
42*cea1eb0bSClément Léger 	struct pta_rtc_time range_max;
43*cea1eb0bSClément Léger };
44*cea1eb0bSClément Léger 
45*cea1eb0bSClément Léger /*
46*cea1eb0bSClément Léger  * PTA_CMD_RTC_GET_INFO - Get RTC information
47*cea1eb0bSClément Léger  *
48*cea1eb0bSClément Léger  * [out]        memref[0]  RTC buffer memory reference containing a struct
49*cea1eb0bSClément Léger  *			   pta_rtc_info
50*cea1eb0bSClément Léger  *
51*cea1eb0bSClément Léger  * Return codes:
52*cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
53*cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
54*cea1eb0bSClément Léger  */
55*cea1eb0bSClément Léger #define PTA_CMD_RTC_GET_INFO	0x0
56*cea1eb0bSClément Léger 
57*cea1eb0bSClément Léger /*
58*cea1eb0bSClément Léger  * PTA_CMD_RTC_GET_TIME - Get time from RTC
59*cea1eb0bSClément Léger  *
60*cea1eb0bSClément Léger  * [out]    memref[0]  RTC buffer memory reference containing a struct
61*cea1eb0bSClément Léger  *		       pta_rtc_time
62*cea1eb0bSClément Léger  *
63*cea1eb0bSClément Léger  * Return codes:
64*cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
65*cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
66*cea1eb0bSClément Léger  */
67*cea1eb0bSClément Léger #define PTA_CMD_RTC_GET_TIME		0x1
68*cea1eb0bSClément Léger 
69*cea1eb0bSClément Léger /*
70*cea1eb0bSClément Léger  * PTA_CMD_RTC_SET_TIME - Set time from RTC
71*cea1eb0bSClément Léger  *
72*cea1eb0bSClément Léger  * [in]     memref[0]  RTC buffer memory reference containing a struct
73*cea1eb0bSClément Léger  *                     pta_rtc_time to be used as RTC time
74*cea1eb0bSClément Léger  *
75*cea1eb0bSClément Léger  * Return codes:
76*cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
77*cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
78*cea1eb0bSClément Léger  */
79*cea1eb0bSClément Léger #define PTA_CMD_RTC_SET_TIME		0x2
80*cea1eb0bSClément Léger 
81*cea1eb0bSClément Léger /*
82*cea1eb0bSClément Léger  * PTA_CMD_RTC_GET_OFFSET - Get RTC offset
83*cea1eb0bSClément Léger  *
84*cea1eb0bSClément Léger  * [out]    value[0].a  RTC offset (signed 32bit value)
85*cea1eb0bSClément Léger  *
86*cea1eb0bSClément Léger  * Return codes:
87*cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
88*cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
89*cea1eb0bSClément Léger  */
90*cea1eb0bSClément Léger #define PTA_CMD_RTC_GET_OFFSET		0x3
91*cea1eb0bSClément Léger 
92*cea1eb0bSClément Léger /*
93*cea1eb0bSClément Léger  * PTA_CMD_RTC_SET_OFFSET - Set RTC offset
94*cea1eb0bSClément Léger  *
95*cea1eb0bSClément Léger  * [in]     value[0].a  RTC offset to be set (signed 32bit value)
96*cea1eb0bSClément Léger  *
97*cea1eb0bSClément Léger  * Return codes:
98*cea1eb0bSClément Léger  * TEE_SUCCESS - Invoke command success
99*cea1eb0bSClément Léger  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
100*cea1eb0bSClément Léger  */
101*cea1eb0bSClément Léger #define PTA_CMD_RTC_SET_OFFSET		0x4
102*cea1eb0bSClément Léger 
103*cea1eb0bSClément Léger #endif /* __PTA_RTC_H */
104