xref: /rk3399_ARM-atf/plat/mediatek/include/lpm/mt_lpm_dispatch.h (revision cf2df874cd09305ac7282fadb0fef6be597dfffb)
1*5cb0bc07SKai Liang /*
2*5cb0bc07SKai Liang  * Copyright (c) 2025, Mediatek Inc. All rights reserved.
3*5cb0bc07SKai Liang  *
4*5cb0bc07SKai Liang  * SPDX-License-Identifier: BSD-3-Clause
5*5cb0bc07SKai Liang  */
6*5cb0bc07SKai Liang 
7*5cb0bc07SKai Liang #ifndef MT_LPM_DISPATCH_H
8*5cb0bc07SKai Liang #define MT_LPM_DISPATCH_H
9*5cb0bc07SKai Liang 
10*5cb0bc07SKai Liang #include <stdint.h>
11*5cb0bc07SKai Liang 
12*5cb0bc07SKai Liang #include "mt_lpm_smc.h"
13*5cb0bc07SKai Liang #include <mtk_sip_svc.h>
14*5cb0bc07SKai Liang 
15*5cb0bc07SKai Liang #define MTK_DISPATCH_ID_MAX	32
16*5cb0bc07SKai Liang 
17*5cb0bc07SKai Liang typedef uint64_t (*mt_lpm_dispatch_fn)(u_register_t x1, u_register_t x2,
18*5cb0bc07SKai Liang 				       u_register_t x3, u_register_t x4,
19*5cb0bc07SKai Liang 				       void *handle,
20*5cb0bc07SKai Liang 				       struct smccc_res *smccc_ret);
21*5cb0bc07SKai Liang 
22*5cb0bc07SKai Liang struct mt_dispatch_ctrl {
23*5cb0bc07SKai Liang 	unsigned int enable;
24*5cb0bc07SKai Liang 	mt_lpm_dispatch_fn fn[MT_LPM_SMC_USER_MAX];
25*5cb0bc07SKai Liang };
26*5cb0bc07SKai Liang 
27*5cb0bc07SKai Liang void mt_lpm_dispatcher_registry(unsigned int id, mt_lpm_dispatch_fn fn);
28*5cb0bc07SKai Liang 
29*5cb0bc07SKai Liang void mt_secure_lpm_dispatcher_registry(unsigned int id, mt_lpm_dispatch_fn fn);
30*5cb0bc07SKai Liang 
31*5cb0bc07SKai Liang extern struct mt_dispatch_ctrl mt_dispatcher;
32*5cb0bc07SKai Liang extern struct mt_dispatch_ctrl mt_secure_dispatcher;
33*5cb0bc07SKai Liang #endif
34