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