1 /*
2  * Copyright (c) 2020-2022, MediaTek Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef MT_LP_RM_H
8 #define MT_LP_RM_H
9 
10 #include <stdbool.h>
11 
12 #define MT_RM_STATUS_OK		0
13 #define MT_RM_STATUS_BAD	-1
14 
15 enum PLAT_MT_LPM_RC_TYPE {
16 	PLAT_RC_UPDATE_CONDITION,
17 	PLAT_RC_UPDATE_REMAIN_IRQS
18 };
19 
20 struct mt_resource_constraint {
21 	int level;
22 	int (*init)(void);
23 	bool (*is_valid)(unsigned int cpu, int stateid);
24 	int (*update)(int stateid, int type, const void *p);
25 	int (*run)(unsigned int cpu, int stateid);
26 	int (*reset)(unsigned int cpu, int stateid);
27 	unsigned int (*allow)(int stateid);
28 };
29 
30 struct mt_resource_manager {
31 	int (*update)(struct mt_resource_constraint **con,
32 		      int stateid, void *priv);
33 	struct mt_resource_constraint **consts;
34 };
35 
36 extern int mt_lp_rm_register(struct mt_resource_manager *rm);
37 extern int mt_lp_rm_find_and_run_constraint(int idx, unsigned int cpuid,
38 					    int stateid, void *priv);
39 extern int mt_lp_rm_reset_constraint(int constraint_id, unsigned int cpuid,
40 				     int stateid);
41 extern int mt_lp_rm_do_update(int stateid, int type, void const *p);
42 #endif /* MT_LP_RM_H */
43