1 /*
2  * Copyright (C) 2016 Freescale Semiconductor, Inc.
3  * Copyright 2017-2018 NXP
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 /*!
9  * File containing client-side RPC functions for the MISC service. These
10  * functions are ported to clients that communicate to the SC.
11  *
12  * @addtogroup MISC_SVC
13  * @{
14  */
15 
16 /* Includes */
17 
18 #include <sci/sci_types.h>
19 #include <sci/svc/rm/sci_rm_api.h>
20 #include <sci/svc/misc/sci_misc_api.h>
21 #include <sci/sci_rpc.h>
22 #include <stdlib.h>
23 #include "sci_misc_rpc.h"
24 
25 /* Local Defines */
26 
27 /* Local Types */
28 
29 /* Local Functions */
30 
sc_misc_set_control(sc_ipc_t ipc,sc_rsrc_t resource,sc_ctrl_t ctrl,uint32_t val)31 sc_err_t sc_misc_set_control(sc_ipc_t ipc, sc_rsrc_t resource,
32 			     sc_ctrl_t ctrl, uint32_t val)
33 {
34 	sc_rpc_msg_t msg;
35 	uint8_t result;
36 
37 	RPC_VER(&msg) = SC_RPC_VERSION;
38 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
39 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_CONTROL;
40 	RPC_U32(&msg, 0U) = (uint32_t)ctrl;
41 	RPC_U32(&msg, 4U) = (uint32_t)val;
42 	RPC_U16(&msg, 8U) = (uint16_t)resource;
43 	RPC_SIZE(&msg) = 4U;
44 
45 	sc_call_rpc(ipc, &msg, SC_FALSE);
46 
47 	result = RPC_R8(&msg);
48 	return (sc_err_t)result;
49 }
50 
sc_misc_get_control(sc_ipc_t ipc,sc_rsrc_t resource,sc_ctrl_t ctrl,uint32_t * val)51 sc_err_t sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource,
52 			     sc_ctrl_t ctrl, uint32_t *val)
53 {
54 	sc_rpc_msg_t msg;
55 	uint8_t result;
56 
57 	RPC_VER(&msg) = SC_RPC_VERSION;
58 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
59 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_CONTROL;
60 	RPC_U32(&msg, 0U) = (uint32_t)ctrl;
61 	RPC_U16(&msg, 4U) = (uint16_t)resource;
62 	RPC_SIZE(&msg) = 3U;
63 
64 	sc_call_rpc(ipc, &msg, SC_FALSE);
65 
66 	if (val != NULL)
67 		*val = RPC_U32(&msg, 0U);
68 
69 	result = RPC_R8(&msg);
70 	return (sc_err_t)result;
71 }
72 
sc_misc_set_max_dma_group(sc_ipc_t ipc,sc_rm_pt_t pt,sc_misc_dma_group_t max)73 sc_err_t sc_misc_set_max_dma_group(sc_ipc_t ipc, sc_rm_pt_t pt,
74 				   sc_misc_dma_group_t max)
75 {
76 	sc_rpc_msg_t msg;
77 	uint8_t result;
78 
79 	RPC_VER(&msg) = SC_RPC_VERSION;
80 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
81 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_MAX_DMA_GROUP;
82 	RPC_U8(&msg, 0U) = (uint8_t)pt;
83 	RPC_U8(&msg, 1U) = (uint8_t)max;
84 	RPC_SIZE(&msg) = 2U;
85 
86 	sc_call_rpc(ipc, &msg, SC_FALSE);
87 
88 	result = RPC_R8(&msg);
89 	return (sc_err_t)result;
90 }
91 
sc_misc_set_dma_group(sc_ipc_t ipc,sc_rsrc_t resource,sc_misc_dma_group_t group)92 sc_err_t sc_misc_set_dma_group(sc_ipc_t ipc, sc_rsrc_t resource,
93 			       sc_misc_dma_group_t group)
94 {
95 	sc_rpc_msg_t msg;
96 	uint8_t result;
97 
98 	RPC_VER(&msg) = SC_RPC_VERSION;
99 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
100 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_DMA_GROUP;
101 	RPC_U16(&msg, 0U) = (uint16_t)resource;
102 	RPC_U8(&msg, 2U) = (uint8_t)group;
103 	RPC_SIZE(&msg) = 2U;
104 
105 	sc_call_rpc(ipc, &msg, SC_FALSE);
106 
107 	result = RPC_R8(&msg);
108 	return (sc_err_t)result;
109 }
110 
sc_misc_seco_image_load(sc_ipc_t ipc,sc_faddr_t addr_src,sc_faddr_t addr_dst,uint32_t len,sc_bool_t fw)111 sc_err_t sc_misc_seco_image_load(sc_ipc_t ipc, sc_faddr_t addr_src,
112 				 sc_faddr_t addr_dst, uint32_t len,
113 				 sc_bool_t fw)
114 {
115 	sc_rpc_msg_t msg;
116 	uint8_t result;
117 
118 	RPC_VER(&msg) = SC_RPC_VERSION;
119 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
120 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_IMAGE_LOAD;
121 	RPC_U32(&msg, 0U) = (uint32_t)(addr_src >> 32U);
122 	RPC_U32(&msg, 4U) = (uint32_t)addr_src;
123 	RPC_U32(&msg, 8U) = (uint32_t)(addr_dst >> 32U);
124 	RPC_U32(&msg, 12U) = (uint32_t)addr_dst;
125 	RPC_U32(&msg, 16U) = (uint32_t)len;
126 	RPC_U8(&msg, 20U) = (uint8_t)fw;
127 	RPC_SIZE(&msg) = 7U;
128 
129 	sc_call_rpc(ipc, &msg, SC_FALSE);
130 
131 	result = RPC_R8(&msg);
132 	return (sc_err_t)result;
133 }
134 
sc_misc_seco_authenticate(sc_ipc_t ipc,sc_misc_seco_auth_cmd_t cmd,sc_faddr_t addr)135 sc_err_t sc_misc_seco_authenticate(sc_ipc_t ipc,
136 				   sc_misc_seco_auth_cmd_t cmd, sc_faddr_t addr)
137 {
138 	sc_rpc_msg_t msg;
139 	uint8_t result;
140 
141 	RPC_VER(&msg) = SC_RPC_VERSION;
142 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
143 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_AUTHENTICATE;
144 	RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
145 	RPC_U32(&msg, 4U) = (uint32_t)addr;
146 	RPC_U8(&msg, 8U) = (uint8_t)cmd;
147 	RPC_SIZE(&msg) = 4U;
148 
149 	sc_call_rpc(ipc, &msg, SC_FALSE);
150 
151 	result = RPC_R8(&msg);
152 	return (sc_err_t)result;
153 }
154 
sc_misc_seco_fuse_write(sc_ipc_t ipc,sc_faddr_t addr)155 sc_err_t sc_misc_seco_fuse_write(sc_ipc_t ipc, sc_faddr_t addr)
156 {
157 	sc_rpc_msg_t msg;
158 	uint8_t result;
159 
160 	RPC_VER(&msg) = SC_RPC_VERSION;
161 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
162 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_FUSE_WRITE;
163 	RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
164 	RPC_U32(&msg, 4U) = (uint32_t)addr;
165 	RPC_SIZE(&msg) = 3U;
166 
167 	sc_call_rpc(ipc, &msg, SC_FALSE);
168 
169 	result = RPC_R8(&msg);
170 	return (sc_err_t)result;
171 }
172 
sc_misc_seco_enable_debug(sc_ipc_t ipc,sc_faddr_t addr)173 sc_err_t sc_misc_seco_enable_debug(sc_ipc_t ipc, sc_faddr_t addr)
174 {
175 	sc_rpc_msg_t msg;
176 	uint8_t result;
177 
178 	RPC_VER(&msg) = SC_RPC_VERSION;
179 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
180 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_ENABLE_DEBUG;
181 	RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
182 	RPC_U32(&msg, 4U) = (uint32_t)addr;
183 	RPC_SIZE(&msg) = 3U;
184 
185 	sc_call_rpc(ipc, &msg, SC_FALSE);
186 
187 	result = RPC_R8(&msg);
188 	return (sc_err_t)result;
189 }
190 
sc_misc_seco_forward_lifecycle(sc_ipc_t ipc,uint32_t lifecycle)191 sc_err_t sc_misc_seco_forward_lifecycle(sc_ipc_t ipc, uint32_t lifecycle)
192 {
193 	sc_rpc_msg_t msg;
194 	uint8_t result;
195 
196 	RPC_VER(&msg) = SC_RPC_VERSION;
197 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
198 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_FORWARD_LIFECYCLE;
199 	RPC_U32(&msg, 0U) = (uint32_t)lifecycle;
200 	RPC_SIZE(&msg) = 2U;
201 
202 	sc_call_rpc(ipc, &msg, SC_FALSE);
203 
204 	result = RPC_R8(&msg);
205 	return (sc_err_t)result;
206 }
207 
sc_misc_seco_return_lifecycle(sc_ipc_t ipc,sc_faddr_t addr)208 sc_err_t sc_misc_seco_return_lifecycle(sc_ipc_t ipc, sc_faddr_t addr)
209 {
210 	sc_rpc_msg_t msg;
211 	uint8_t result;
212 
213 	RPC_VER(&msg) = SC_RPC_VERSION;
214 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
215 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_RETURN_LIFECYCLE;
216 	RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
217 	RPC_U32(&msg, 4U) = (uint32_t)addr;
218 	RPC_SIZE(&msg) = 3U;
219 
220 	sc_call_rpc(ipc, &msg, SC_FALSE);
221 
222 	result = RPC_R8(&msg);
223 	return (sc_err_t)result;
224 }
225 
sc_misc_seco_build_info(sc_ipc_t ipc,uint32_t * version,uint32_t * commit)226 void sc_misc_seco_build_info(sc_ipc_t ipc, uint32_t *version, uint32_t *commit)
227 {
228 	sc_rpc_msg_t msg;
229 
230 	RPC_VER(&msg) = SC_RPC_VERSION;
231 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
232 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_BUILD_INFO;
233 	RPC_SIZE(&msg) = 1U;
234 
235 	sc_call_rpc(ipc, &msg, SC_FALSE);
236 
237 	if (version != NULL)
238 		*version = RPC_U32(&msg, 0U);
239 
240 	if (commit != NULL)
241 		*commit = RPC_U32(&msg, 4U);
242 }
243 
sc_misc_seco_chip_info(sc_ipc_t ipc,uint16_t * lc,uint16_t * monotonic,uint32_t * uid_l,uint32_t * uid_h)244 sc_err_t sc_misc_seco_chip_info(sc_ipc_t ipc, uint16_t *lc,
245 				uint16_t *monotonic, uint32_t *uid_l,
246 				uint32_t *uid_h)
247 {
248 	sc_rpc_msg_t msg;
249 	uint8_t result;
250 
251 	RPC_VER(&msg) = SC_RPC_VERSION;
252 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
253 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_CHIP_INFO;
254 	RPC_SIZE(&msg) = 1U;
255 
256 	sc_call_rpc(ipc, &msg, SC_FALSE);
257 
258 	if (uid_l != NULL)
259 		*uid_l = RPC_U32(&msg, 0U);
260 
261 	if (uid_h != NULL)
262 		*uid_h = RPC_U32(&msg, 4U);
263 
264 	if (lc != NULL)
265 		*lc = RPC_U16(&msg, 8U);
266 
267 	if (monotonic != NULL)
268 		*monotonic = RPC_U16(&msg, 10U);
269 
270 	result = RPC_R8(&msg);
271 	return (sc_err_t)result;
272 }
273 
sc_misc_debug_out(sc_ipc_t ipc,uint8_t ch)274 void sc_misc_debug_out(sc_ipc_t ipc, uint8_t ch)
275 {
276 	sc_rpc_msg_t msg;
277 
278 	RPC_VER(&msg) = SC_RPC_VERSION;
279 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
280 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_DEBUG_OUT;
281 	RPC_U8(&msg, 0U) = (uint8_t)ch;
282 	RPC_SIZE(&msg) = 2U;
283 
284 	sc_call_rpc(ipc, &msg, SC_FALSE);
285 }
286 
sc_misc_waveform_capture(sc_ipc_t ipc,sc_bool_t enable)287 sc_err_t sc_misc_waveform_capture(sc_ipc_t ipc, sc_bool_t enable)
288 {
289 	sc_rpc_msg_t msg;
290 	uint8_t result;
291 
292 	RPC_VER(&msg) = SC_RPC_VERSION;
293 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
294 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_WAVEFORM_CAPTURE;
295 	RPC_U8(&msg, 0U) = (uint8_t)enable;
296 	RPC_SIZE(&msg) = 2U;
297 
298 	sc_call_rpc(ipc, &msg, SC_FALSE);
299 
300 	result = RPC_R8(&msg);
301 	return (sc_err_t)result;
302 }
303 
sc_misc_build_info(sc_ipc_t ipc,uint32_t * build,uint32_t * commit)304 void sc_misc_build_info(sc_ipc_t ipc, uint32_t *build, uint32_t *commit)
305 {
306 	sc_rpc_msg_t msg;
307 
308 	RPC_VER(&msg) = SC_RPC_VERSION;
309 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
310 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_BUILD_INFO;
311 	RPC_SIZE(&msg) = 1U;
312 
313 	sc_call_rpc(ipc, &msg, SC_FALSE);
314 
315 	if (build != NULL)
316 		*build = RPC_U32(&msg, 0U);
317 
318 	if (commit != NULL)
319 		*commit = RPC_U32(&msg, 4U);
320 }
321 
sc_misc_unique_id(sc_ipc_t ipc,uint32_t * id_l,uint32_t * id_h)322 void sc_misc_unique_id(sc_ipc_t ipc, uint32_t *id_l, uint32_t *id_h)
323 {
324 	sc_rpc_msg_t msg;
325 
326 	RPC_VER(&msg) = SC_RPC_VERSION;
327 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
328 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_UNIQUE_ID;
329 	RPC_SIZE(&msg) = 1U;
330 
331 	sc_call_rpc(ipc, &msg, SC_FALSE);
332 
333 	if (id_l != NULL)
334 		*id_l = RPC_U32(&msg, 0U);
335 
336 	if (id_h != NULL)
337 		*id_h = RPC_U32(&msg, 4U);
338 }
339 
sc_misc_set_ari(sc_ipc_t ipc,sc_rsrc_t resource,sc_rsrc_t resource_mst,uint16_t ari,sc_bool_t enable)340 sc_err_t sc_misc_set_ari(sc_ipc_t ipc, sc_rsrc_t resource,
341 			 sc_rsrc_t resource_mst, uint16_t ari, sc_bool_t enable)
342 {
343 	sc_rpc_msg_t msg;
344 	uint8_t result;
345 
346 	RPC_VER(&msg) = SC_RPC_VERSION;
347 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
348 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_ARI;
349 	RPC_U16(&msg, 0U) = (uint16_t)resource;
350 	RPC_U16(&msg, 2U) = (uint16_t)resource_mst;
351 	RPC_U16(&msg, 4U) = (uint16_t)ari;
352 	RPC_U8(&msg, 6U) = (uint8_t)enable;
353 	RPC_SIZE(&msg) = 3U;
354 
355 	sc_call_rpc(ipc, &msg, SC_FALSE);
356 
357 	result = RPC_R8(&msg);
358 	return (sc_err_t)result;
359 }
360 
sc_misc_boot_status(sc_ipc_t ipc,sc_misc_boot_status_t status)361 void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status)
362 {
363 	sc_rpc_msg_t msg;
364 
365 	RPC_VER(&msg) = SC_RPC_VERSION;
366 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
367 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_BOOT_STATUS;
368 	RPC_U8(&msg, 0U) = (uint8_t)status;
369 	RPC_SIZE(&msg) = 2U;
370 
371 	sc_call_rpc(ipc, &msg, SC_TRUE);
372 }
373 
sc_misc_boot_done(sc_ipc_t ipc,sc_rsrc_t cpu)374 sc_err_t sc_misc_boot_done(sc_ipc_t ipc, sc_rsrc_t cpu)
375 {
376 	sc_rpc_msg_t msg;
377 	uint8_t result;
378 
379 	RPC_VER(&msg) = SC_RPC_VERSION;
380 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
381 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_BOOT_DONE;
382 	RPC_U16(&msg, 0U) = (uint16_t)cpu;
383 	RPC_SIZE(&msg) = 2U;
384 
385 	sc_call_rpc(ipc, &msg, SC_FALSE);
386 
387 	result = RPC_R8(&msg);
388 	return (sc_err_t)result;
389 }
390 
sc_misc_otp_fuse_read(sc_ipc_t ipc,uint32_t word,uint32_t * val)391 sc_err_t sc_misc_otp_fuse_read(sc_ipc_t ipc, uint32_t word, uint32_t *val)
392 {
393 	sc_rpc_msg_t msg;
394 	uint8_t result;
395 
396 	RPC_VER(&msg) = SC_RPC_VERSION;
397 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
398 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_OTP_FUSE_READ;
399 	RPC_U32(&msg, 0U) = (uint32_t)word;
400 	RPC_SIZE(&msg) = 2U;
401 
402 	sc_call_rpc(ipc, &msg, SC_FALSE);
403 
404 	if (val != NULL)
405 		*val = RPC_U32(&msg, 0U);
406 
407 	result = RPC_R8(&msg);
408 	return (sc_err_t)result;
409 }
410 
sc_misc_otp_fuse_write(sc_ipc_t ipc,uint32_t word,uint32_t val)411 sc_err_t sc_misc_otp_fuse_write(sc_ipc_t ipc, uint32_t word, uint32_t val)
412 {
413 	sc_rpc_msg_t msg;
414 	uint8_t result;
415 
416 	RPC_VER(&msg) = SC_RPC_VERSION;
417 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
418 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_OTP_FUSE_WRITE;
419 	RPC_U32(&msg, 0U) = (uint32_t)word;
420 	RPC_U32(&msg, 4U) = (uint32_t)val;
421 	RPC_SIZE(&msg) = 3U;
422 
423 	sc_call_rpc(ipc, &msg, SC_FALSE);
424 
425 	result = RPC_R8(&msg);
426 	return (sc_err_t)result;
427 }
428 
sc_misc_set_temp(sc_ipc_t ipc,sc_rsrc_t resource,sc_misc_temp_t temp,int16_t celsius,int8_t tenths)429 sc_err_t sc_misc_set_temp(sc_ipc_t ipc, sc_rsrc_t resource,
430 			  sc_misc_temp_t temp, int16_t celsius, int8_t tenths)
431 {
432 	sc_rpc_msg_t msg;
433 	uint8_t result;
434 
435 	RPC_VER(&msg) = SC_RPC_VERSION;
436 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
437 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_TEMP;
438 	RPC_U16(&msg, 0U) = (uint16_t)resource;
439 	RPC_I16(&msg, 2U) = (int16_t) celsius;
440 	RPC_U8(&msg, 4U) = (uint8_t)temp;
441 	RPC_I8(&msg, 5U) = (int8_t) tenths;
442 	RPC_SIZE(&msg) = 3U;
443 
444 	sc_call_rpc(ipc, &msg, SC_FALSE);
445 
446 	result = RPC_R8(&msg);
447 	return (sc_err_t)result;
448 }
449 
sc_misc_get_temp(sc_ipc_t ipc,sc_rsrc_t resource,sc_misc_temp_t temp,int16_t * celsius,int8_t * tenths)450 sc_err_t sc_misc_get_temp(sc_ipc_t ipc, sc_rsrc_t resource,
451 			  sc_misc_temp_t temp, int16_t *celsius,
452 			  int8_t *tenths)
453 {
454 	sc_rpc_msg_t msg;
455 	uint8_t result;
456 
457 	RPC_VER(&msg) = SC_RPC_VERSION;
458 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
459 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_TEMP;
460 	RPC_U16(&msg, 0U) = (uint16_t)resource;
461 	RPC_U8(&msg, 2U) = (uint8_t)temp;
462 	RPC_SIZE(&msg) = 2U;
463 
464 	sc_call_rpc(ipc, &msg, SC_FALSE);
465 
466 	if (celsius != NULL)
467 		*celsius = RPC_I16(&msg, 0U);
468 
469 	result = RPC_R8(&msg);
470 	if (tenths != NULL)
471 		*tenths = RPC_I8(&msg, 2U);
472 
473 	return (sc_err_t)result;
474 }
475 
sc_misc_get_boot_dev(sc_ipc_t ipc,sc_rsrc_t * dev)476 void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *dev)
477 {
478 	sc_rpc_msg_t msg;
479 
480 	RPC_VER(&msg) = SC_RPC_VERSION;
481 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
482 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_BOOT_DEV;
483 	RPC_SIZE(&msg) = 1U;
484 
485 	sc_call_rpc(ipc, &msg, SC_FALSE);
486 
487 	if (dev != NULL)
488 		*dev = RPC_U16(&msg, 0U);
489 }
490 
sc_misc_get_button_status(sc_ipc_t ipc,sc_bool_t * status)491 void sc_misc_get_button_status(sc_ipc_t ipc, sc_bool_t *status)
492 {
493 	sc_rpc_msg_t msg;
494 
495 	RPC_VER(&msg) = SC_RPC_VERSION;
496 	RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
497 	RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_BUTTON_STATUS;
498 	RPC_SIZE(&msg) = 1U;
499 
500 	sc_call_rpc(ipc, &msg, SC_FALSE);
501 
502 	if (status != NULL)
503 		*status = RPC_U8(&msg, 0U);
504 }
505 
506 /**@}*/
507