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