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