xref: /rk3399_ARM-atf/plat/imx/common/sci/svc/timer/timer_rpc_clnt.c (revision aea055504d2ab28b2dcb743f7cb99905f264a313)
1*1552df5dSAnson Huang /*
2*1552df5dSAnson Huang  * Copyright (C) 2016 Freescale Semiconductor, Inc.
3*1552df5dSAnson Huang  * Copyright 2017-2019 NXP
4*1552df5dSAnson Huang  *
5*1552df5dSAnson Huang  * SPDX-License-Identifier: BSD-3-Clause
6*1552df5dSAnson Huang  */
7*1552df5dSAnson Huang 
8*1552df5dSAnson Huang /*!
9*1552df5dSAnson Huang  * File containing client-side RPC functions for the TIMER service. These
10*1552df5dSAnson Huang  * functions are ported to clients that communicate to the SC.
11*1552df5dSAnson Huang  *
12*1552df5dSAnson Huang  * @addtogroup TIMER_SVC
13*1552df5dSAnson Huang  * @{
14*1552df5dSAnson Huang  */
15*1552df5dSAnson Huang 
16*1552df5dSAnson Huang /* Includes */
17*1552df5dSAnson Huang 
18*1552df5dSAnson Huang #include <sci/sci_types.h>
19*1552df5dSAnson Huang #include <sci/svc/rm/sci_rm_api.h>
20*1552df5dSAnson Huang #include <sci/svc/timer/sci_timer_api.h>
21*1552df5dSAnson Huang #include <sci/sci_rpc.h>
22*1552df5dSAnson Huang #include <stdlib.h>
23*1552df5dSAnson Huang #include "sci_timer_rpc.h"
24*1552df5dSAnson Huang 
25*1552df5dSAnson Huang /* Local Defines */
26*1552df5dSAnson Huang 
27*1552df5dSAnson Huang /* Local Types */
28*1552df5dSAnson Huang 
29*1552df5dSAnson Huang /* Local Functions */
30*1552df5dSAnson Huang 
sc_timer_set_wdog_timeout(sc_ipc_t ipc,sc_timer_wdog_time_t timeout)31*1552df5dSAnson Huang sc_err_t sc_timer_set_wdog_timeout(sc_ipc_t ipc, sc_timer_wdog_time_t timeout)
32*1552df5dSAnson Huang {
33*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
34*1552df5dSAnson Huang 	uint8_t result;
35*1552df5dSAnson Huang 
36*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
37*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
38*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_WDOG_TIMEOUT;
39*1552df5dSAnson Huang 	RPC_U32(&msg, 0U) = (uint32_t)timeout;
40*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 2U;
41*1552df5dSAnson Huang 
42*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
43*1552df5dSAnson Huang 
44*1552df5dSAnson Huang 	result = RPC_R8(&msg);
45*1552df5dSAnson Huang 	return (sc_err_t)result;
46*1552df5dSAnson Huang }
47*1552df5dSAnson Huang 
sc_timer_set_wdog_pre_timeout(sc_ipc_t ipc,sc_timer_wdog_time_t pre_timeout)48*1552df5dSAnson Huang sc_err_t sc_timer_set_wdog_pre_timeout(sc_ipc_t ipc,
49*1552df5dSAnson Huang 				       sc_timer_wdog_time_t pre_timeout)
50*1552df5dSAnson Huang {
51*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
52*1552df5dSAnson Huang 	uint8_t result;
53*1552df5dSAnson Huang 
54*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
55*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
56*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_WDOG_PRE_TIMEOUT;
57*1552df5dSAnson Huang 	RPC_U32(&msg, 0U) = (uint32_t)pre_timeout;
58*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 2U;
59*1552df5dSAnson Huang 
60*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
61*1552df5dSAnson Huang 
62*1552df5dSAnson Huang 	result = RPC_R8(&msg);
63*1552df5dSAnson Huang 	return (sc_err_t)result;
64*1552df5dSAnson Huang }
65*1552df5dSAnson Huang 
sc_timer_start_wdog(sc_ipc_t ipc,sc_bool_t lock)66*1552df5dSAnson Huang sc_err_t sc_timer_start_wdog(sc_ipc_t ipc, sc_bool_t lock)
67*1552df5dSAnson Huang {
68*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
69*1552df5dSAnson Huang 	uint8_t result;
70*1552df5dSAnson Huang 
71*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
72*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
73*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_START_WDOG;
74*1552df5dSAnson Huang 	RPC_U8(&msg, 0U) = (uint8_t)lock;
75*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 2U;
76*1552df5dSAnson Huang 
77*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
78*1552df5dSAnson Huang 
79*1552df5dSAnson Huang 	result = RPC_R8(&msg);
80*1552df5dSAnson Huang 	return (sc_err_t)result;
81*1552df5dSAnson Huang }
82*1552df5dSAnson Huang 
sc_timer_stop_wdog(sc_ipc_t ipc)83*1552df5dSAnson Huang sc_err_t sc_timer_stop_wdog(sc_ipc_t ipc)
84*1552df5dSAnson Huang {
85*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
86*1552df5dSAnson Huang 	uint8_t result;
87*1552df5dSAnson Huang 
88*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
89*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
90*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_STOP_WDOG;
91*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 1U;
92*1552df5dSAnson Huang 
93*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
94*1552df5dSAnson Huang 
95*1552df5dSAnson Huang 	result = RPC_R8(&msg);
96*1552df5dSAnson Huang 	return (sc_err_t)result;
97*1552df5dSAnson Huang }
98*1552df5dSAnson Huang 
sc_timer_ping_wdog(sc_ipc_t ipc)99*1552df5dSAnson Huang sc_err_t sc_timer_ping_wdog(sc_ipc_t ipc)
100*1552df5dSAnson Huang {
101*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
102*1552df5dSAnson Huang 	uint8_t result;
103*1552df5dSAnson Huang 
104*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
105*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
106*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_PING_WDOG;
107*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 1U;
108*1552df5dSAnson Huang 
109*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
110*1552df5dSAnson Huang 
111*1552df5dSAnson Huang 	result = RPC_R8(&msg);
112*1552df5dSAnson Huang 	return (sc_err_t)result;
113*1552df5dSAnson Huang }
114*1552df5dSAnson Huang 
sc_timer_get_wdog_status(sc_ipc_t ipc,sc_timer_wdog_time_t * timeout,sc_timer_wdog_time_t * max_timeout,sc_timer_wdog_time_t * remaining_time)115*1552df5dSAnson Huang sc_err_t sc_timer_get_wdog_status(sc_ipc_t ipc,
116*1552df5dSAnson Huang 				  sc_timer_wdog_time_t *timeout,
117*1552df5dSAnson Huang 				  sc_timer_wdog_time_t *max_timeout,
118*1552df5dSAnson Huang 				  sc_timer_wdog_time_t *remaining_time)
119*1552df5dSAnson Huang {
120*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
121*1552df5dSAnson Huang 	uint8_t result;
122*1552df5dSAnson Huang 
123*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
124*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
125*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_GET_WDOG_STATUS;
126*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 1U;
127*1552df5dSAnson Huang 
128*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
129*1552df5dSAnson Huang 
130*1552df5dSAnson Huang 	if (timeout != NULL)
131*1552df5dSAnson Huang 		*timeout = RPC_U32(&msg, 0U);
132*1552df5dSAnson Huang 
133*1552df5dSAnson Huang 	if (max_timeout != NULL)
134*1552df5dSAnson Huang 		*max_timeout = RPC_U32(&msg, 4U);
135*1552df5dSAnson Huang 
136*1552df5dSAnson Huang 	if (remaining_time != NULL)
137*1552df5dSAnson Huang 		*remaining_time = RPC_U32(&msg, 8U);
138*1552df5dSAnson Huang 
139*1552df5dSAnson Huang 	result = RPC_R8(&msg);
140*1552df5dSAnson Huang 	return (sc_err_t)result;
141*1552df5dSAnson Huang }
142*1552df5dSAnson Huang 
sc_timer_pt_get_wdog_status(sc_ipc_t ipc,sc_rm_pt_t pt,sc_bool_t * enb,sc_timer_wdog_time_t * timeout,sc_timer_wdog_time_t * remaining_time)143*1552df5dSAnson Huang sc_err_t sc_timer_pt_get_wdog_status(sc_ipc_t ipc, sc_rm_pt_t pt,
144*1552df5dSAnson Huang 				     sc_bool_t *enb,
145*1552df5dSAnson Huang 				     sc_timer_wdog_time_t *timeout,
146*1552df5dSAnson Huang 				     sc_timer_wdog_time_t *remaining_time)
147*1552df5dSAnson Huang {
148*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
149*1552df5dSAnson Huang 	uint8_t result;
150*1552df5dSAnson Huang 
151*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
152*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
153*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_PT_GET_WDOG_STATUS;
154*1552df5dSAnson Huang 	RPC_U8(&msg, 0U) = (uint8_t)pt;
155*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 2U;
156*1552df5dSAnson Huang 
157*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
158*1552df5dSAnson Huang 
159*1552df5dSAnson Huang 	if (timeout != NULL)
160*1552df5dSAnson Huang 		*timeout = RPC_U32(&msg, 0U);
161*1552df5dSAnson Huang 
162*1552df5dSAnson Huang 	if (remaining_time != NULL)
163*1552df5dSAnson Huang 		*remaining_time = RPC_U32(&msg, 4U);
164*1552df5dSAnson Huang 
165*1552df5dSAnson Huang 	result = RPC_R8(&msg);
166*1552df5dSAnson Huang 	if (enb != NULL)
167*1552df5dSAnson Huang 		*enb = RPC_U8(&msg, 8U);
168*1552df5dSAnson Huang 
169*1552df5dSAnson Huang 	return (sc_err_t)result;
170*1552df5dSAnson Huang }
171*1552df5dSAnson Huang 
sc_timer_set_wdog_action(sc_ipc_t ipc,sc_rm_pt_t pt,sc_timer_wdog_action_t action)172*1552df5dSAnson Huang sc_err_t sc_timer_set_wdog_action(sc_ipc_t ipc,
173*1552df5dSAnson Huang 				  sc_rm_pt_t pt, sc_timer_wdog_action_t action)
174*1552df5dSAnson Huang {
175*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
176*1552df5dSAnson Huang 	uint8_t result;
177*1552df5dSAnson Huang 
178*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
179*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
180*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_WDOG_ACTION;
181*1552df5dSAnson Huang 	RPC_U8(&msg, 0U) = (uint8_t)pt;
182*1552df5dSAnson Huang 	RPC_U8(&msg, 1U) = (uint8_t)action;
183*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 2U;
184*1552df5dSAnson Huang 
185*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
186*1552df5dSAnson Huang 
187*1552df5dSAnson Huang 	result = RPC_R8(&msg);
188*1552df5dSAnson Huang 	return (sc_err_t)result;
189*1552df5dSAnson Huang }
190*1552df5dSAnson Huang 
sc_timer_set_rtc_time(sc_ipc_t ipc,uint16_t year,uint8_t mon,uint8_t day,uint8_t hour,uint8_t min,uint8_t sec)191*1552df5dSAnson Huang sc_err_t sc_timer_set_rtc_time(sc_ipc_t ipc, uint16_t year, uint8_t mon,
192*1552df5dSAnson Huang 			       uint8_t day, uint8_t hour, uint8_t min,
193*1552df5dSAnson Huang 			       uint8_t sec)
194*1552df5dSAnson Huang {
195*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
196*1552df5dSAnson Huang 	uint8_t result;
197*1552df5dSAnson Huang 
198*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
199*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
200*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_RTC_TIME;
201*1552df5dSAnson Huang 	RPC_U16(&msg, 0U) = (uint16_t)year;
202*1552df5dSAnson Huang 	RPC_U8(&msg, 2U) = (uint8_t)mon;
203*1552df5dSAnson Huang 	RPC_U8(&msg, 3U) = (uint8_t)day;
204*1552df5dSAnson Huang 	RPC_U8(&msg, 4U) = (uint8_t)hour;
205*1552df5dSAnson Huang 	RPC_U8(&msg, 5U) = (uint8_t)min;
206*1552df5dSAnson Huang 	RPC_U8(&msg, 6U) = (uint8_t)sec;
207*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 3U;
208*1552df5dSAnson Huang 
209*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
210*1552df5dSAnson Huang 
211*1552df5dSAnson Huang 	result = RPC_R8(&msg);
212*1552df5dSAnson Huang 	return (sc_err_t)result;
213*1552df5dSAnson Huang }
214*1552df5dSAnson Huang 
sc_timer_get_rtc_time(sc_ipc_t ipc,uint16_t * year,uint8_t * mon,uint8_t * day,uint8_t * hour,uint8_t * min,uint8_t * sec)215*1552df5dSAnson Huang sc_err_t sc_timer_get_rtc_time(sc_ipc_t ipc, uint16_t *year, uint8_t *mon,
216*1552df5dSAnson Huang 			       uint8_t *day, uint8_t *hour, uint8_t *min,
217*1552df5dSAnson Huang 			       uint8_t *sec)
218*1552df5dSAnson Huang {
219*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
220*1552df5dSAnson Huang 	uint8_t result;
221*1552df5dSAnson Huang 
222*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
223*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
224*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_GET_RTC_TIME;
225*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 1U;
226*1552df5dSAnson Huang 
227*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
228*1552df5dSAnson Huang 
229*1552df5dSAnson Huang 	if (year != NULL)
230*1552df5dSAnson Huang 		*year = RPC_U16(&msg, 0U);
231*1552df5dSAnson Huang 
232*1552df5dSAnson Huang 	result = RPC_R8(&msg);
233*1552df5dSAnson Huang 	if (mon != NULL)
234*1552df5dSAnson Huang 		*mon = RPC_U8(&msg, 2U);
235*1552df5dSAnson Huang 
236*1552df5dSAnson Huang 	if (day != NULL)
237*1552df5dSAnson Huang 		*day = RPC_U8(&msg, 3U);
238*1552df5dSAnson Huang 
239*1552df5dSAnson Huang 	if (hour != NULL)
240*1552df5dSAnson Huang 		*hour = RPC_U8(&msg, 4U);
241*1552df5dSAnson Huang 
242*1552df5dSAnson Huang 	if (min != NULL)
243*1552df5dSAnson Huang 		*min = RPC_U8(&msg, 5U);
244*1552df5dSAnson Huang 
245*1552df5dSAnson Huang 	if (sec != NULL)
246*1552df5dSAnson Huang 		*sec = RPC_U8(&msg, 6U);
247*1552df5dSAnson Huang 
248*1552df5dSAnson Huang 	return (sc_err_t)result;
249*1552df5dSAnson Huang }
250*1552df5dSAnson Huang 
sc_timer_get_rtc_sec1970(sc_ipc_t ipc,uint32_t * sec)251*1552df5dSAnson Huang sc_err_t sc_timer_get_rtc_sec1970(sc_ipc_t ipc, uint32_t *sec)
252*1552df5dSAnson Huang {
253*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
254*1552df5dSAnson Huang 	uint8_t result;
255*1552df5dSAnson Huang 
256*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
257*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
258*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_GET_RTC_SEC1970;
259*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 1U;
260*1552df5dSAnson Huang 
261*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
262*1552df5dSAnson Huang 
263*1552df5dSAnson Huang 	if (sec != NULL)
264*1552df5dSAnson Huang 		*sec = RPC_U32(&msg, 0U);
265*1552df5dSAnson Huang 
266*1552df5dSAnson Huang 	result = RPC_R8(&msg);
267*1552df5dSAnson Huang 	return (sc_err_t)result;
268*1552df5dSAnson Huang }
269*1552df5dSAnson Huang 
sc_timer_set_rtc_alarm(sc_ipc_t ipc,uint16_t year,uint8_t mon,uint8_t day,uint8_t hour,uint8_t min,uint8_t sec)270*1552df5dSAnson Huang sc_err_t sc_timer_set_rtc_alarm(sc_ipc_t ipc, uint16_t year, uint8_t mon,
271*1552df5dSAnson Huang 				uint8_t day, uint8_t hour, uint8_t min,
272*1552df5dSAnson Huang 				uint8_t sec)
273*1552df5dSAnson Huang {
274*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
275*1552df5dSAnson Huang 	uint8_t result;
276*1552df5dSAnson Huang 
277*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
278*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
279*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_RTC_ALARM;
280*1552df5dSAnson Huang 	RPC_U16(&msg, 0U) = (uint16_t)year;
281*1552df5dSAnson Huang 	RPC_U8(&msg, 2U) = (uint8_t)mon;
282*1552df5dSAnson Huang 	RPC_U8(&msg, 3U) = (uint8_t)day;
283*1552df5dSAnson Huang 	RPC_U8(&msg, 4U) = (uint8_t)hour;
284*1552df5dSAnson Huang 	RPC_U8(&msg, 5U) = (uint8_t)min;
285*1552df5dSAnson Huang 	RPC_U8(&msg, 6U) = (uint8_t)sec;
286*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 3U;
287*1552df5dSAnson Huang 
288*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
289*1552df5dSAnson Huang 
290*1552df5dSAnson Huang 	result = RPC_R8(&msg);
291*1552df5dSAnson Huang 	return (sc_err_t)result;
292*1552df5dSAnson Huang }
293*1552df5dSAnson Huang 
sc_timer_set_rtc_periodic_alarm(sc_ipc_t ipc,uint32_t sec)294*1552df5dSAnson Huang sc_err_t sc_timer_set_rtc_periodic_alarm(sc_ipc_t ipc, uint32_t sec)
295*1552df5dSAnson Huang {
296*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
297*1552df5dSAnson Huang 	uint8_t result;
298*1552df5dSAnson Huang 
299*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
300*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
301*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_RTC_PERIODIC_ALARM;
302*1552df5dSAnson Huang 	RPC_U32(&msg, 0U) = (uint32_t)sec;
303*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 2U;
304*1552df5dSAnson Huang 
305*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
306*1552df5dSAnson Huang 
307*1552df5dSAnson Huang 	result = RPC_R8(&msg);
308*1552df5dSAnson Huang 	return (sc_err_t)result;
309*1552df5dSAnson Huang }
310*1552df5dSAnson Huang 
sc_timer_cancel_rtc_alarm(sc_ipc_t ipc)311*1552df5dSAnson Huang sc_err_t sc_timer_cancel_rtc_alarm(sc_ipc_t ipc)
312*1552df5dSAnson Huang {
313*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
314*1552df5dSAnson Huang 	uint8_t result;
315*1552df5dSAnson Huang 
316*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
317*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
318*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_CANCEL_RTC_ALARM;
319*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 1U;
320*1552df5dSAnson Huang 
321*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
322*1552df5dSAnson Huang 
323*1552df5dSAnson Huang 	result = RPC_R8(&msg);
324*1552df5dSAnson Huang 	return (sc_err_t)result;
325*1552df5dSAnson Huang }
326*1552df5dSAnson Huang 
sc_timer_set_rtc_calb(sc_ipc_t ipc,int8_t count)327*1552df5dSAnson Huang sc_err_t sc_timer_set_rtc_calb(sc_ipc_t ipc, int8_t count)
328*1552df5dSAnson Huang {
329*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
330*1552df5dSAnson Huang 	uint8_t result;
331*1552df5dSAnson Huang 
332*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
333*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
334*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_RTC_CALB;
335*1552df5dSAnson Huang 	RPC_I8(&msg, 0U) = (int8_t) count;
336*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 2U;
337*1552df5dSAnson Huang 
338*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
339*1552df5dSAnson Huang 
340*1552df5dSAnson Huang 	result = RPC_R8(&msg);
341*1552df5dSAnson Huang 	return (sc_err_t)result;
342*1552df5dSAnson Huang }
343*1552df5dSAnson Huang 
sc_timer_set_sysctr_alarm(sc_ipc_t ipc,uint64_t ticks)344*1552df5dSAnson Huang sc_err_t sc_timer_set_sysctr_alarm(sc_ipc_t ipc, uint64_t ticks)
345*1552df5dSAnson Huang {
346*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
347*1552df5dSAnson Huang 	uint8_t result;
348*1552df5dSAnson Huang 
349*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
350*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
351*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_SYSCTR_ALARM;
352*1552df5dSAnson Huang 	RPC_U32(&msg, 0U) = (uint32_t)(ticks >> 32U);
353*1552df5dSAnson Huang 	RPC_U32(&msg, 4U) = (uint32_t)ticks;
354*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 3U;
355*1552df5dSAnson Huang 
356*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
357*1552df5dSAnson Huang 
358*1552df5dSAnson Huang 	result = RPC_R8(&msg);
359*1552df5dSAnson Huang 	return (sc_err_t)result;
360*1552df5dSAnson Huang }
361*1552df5dSAnson Huang 
sc_timer_set_sysctr_periodic_alarm(sc_ipc_t ipc,uint64_t ticks)362*1552df5dSAnson Huang sc_err_t sc_timer_set_sysctr_periodic_alarm(sc_ipc_t ipc, uint64_t ticks)
363*1552df5dSAnson Huang {
364*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
365*1552df5dSAnson Huang 	uint8_t result;
366*1552df5dSAnson Huang 
367*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
368*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
369*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_SET_SYSCTR_PERIODIC_ALARM;
370*1552df5dSAnson Huang 	RPC_U32(&msg, 0U) = (uint32_t)(ticks >> 32U);
371*1552df5dSAnson Huang 	RPC_U32(&msg, 4U) = (uint32_t)ticks;
372*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 3U;
373*1552df5dSAnson Huang 
374*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
375*1552df5dSAnson Huang 
376*1552df5dSAnson Huang 	result = RPC_R8(&msg);
377*1552df5dSAnson Huang 	return (sc_err_t)result;
378*1552df5dSAnson Huang }
379*1552df5dSAnson Huang 
sc_timer_cancel_sysctr_alarm(sc_ipc_t ipc)380*1552df5dSAnson Huang sc_err_t sc_timer_cancel_sysctr_alarm(sc_ipc_t ipc)
381*1552df5dSAnson Huang {
382*1552df5dSAnson Huang 	sc_rpc_msg_t msg;
383*1552df5dSAnson Huang 	uint8_t result;
384*1552df5dSAnson Huang 
385*1552df5dSAnson Huang 	RPC_VER(&msg) = SC_RPC_VERSION;
386*1552df5dSAnson Huang 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_TIMER;
387*1552df5dSAnson Huang 	RPC_FUNC(&msg) = (uint8_t)TIMER_FUNC_CANCEL_SYSCTR_ALARM;
388*1552df5dSAnson Huang 	RPC_SIZE(&msg) = 1U;
389*1552df5dSAnson Huang 
390*1552df5dSAnson Huang 	sc_call_rpc(ipc, &msg, SC_FALSE);
391*1552df5dSAnson Huang 
392*1552df5dSAnson Huang 	result = RPC_R8(&msg);
393*1552df5dSAnson Huang 	return (sc_err_t)result;
394*1552df5dSAnson Huang }
395*1552df5dSAnson Huang 
396*1552df5dSAnson Huang /**@}*/
397