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