xref: /rk3399_ARM-atf/plat/mediatek/include/lpm/mt_lp_rqm.h (revision 79c262327aa8ccc1ae5a0ee7f7ead3bf5ce8e022)
1*917abdd9SJames Liao /*
2*917abdd9SJames Liao  * Copyright (c) 2023, MediaTek Inc. All rights reserved.
3*917abdd9SJames Liao  *
4*917abdd9SJames Liao  * SPDX-License-Identifier: BSD-3-Clause
5*917abdd9SJames Liao  */
6*917abdd9SJames Liao 
7*917abdd9SJames Liao #ifndef MT_LP_RQM_H
8*917abdd9SJames Liao #define MT_LP_RQM_H
9*917abdd9SJames Liao 
10*917abdd9SJames Liao #include "mt_lp_rq.h"
11*917abdd9SJames Liao 
12*917abdd9SJames Liao enum plat_mt_lpm_rq_update_type {
13*917abdd9SJames Liao 	PLAT_RQ_USER_NUM,
14*917abdd9SJames Liao 	PLAT_RQ_USER_VALID,
15*917abdd9SJames Liao 	PLAT_RQ_USER_REQ,
16*917abdd9SJames Liao 	PLAT_RQ_USER_REL,
17*917abdd9SJames Liao 	PLAT_RQ_PER_USER_NAME,
18*917abdd9SJames Liao 	PLAT_RQ_REQ_NUM,
19*917abdd9SJames Liao 	PLAT_RQ_REQ_USAGE,
20*917abdd9SJames Liao };
21*917abdd9SJames Liao 
22*917abdd9SJames Liao /* Determine the request valid */
23*917abdd9SJames Liao #define MT_LP_RQ_VALID		(0x1)
24*917abdd9SJames Liao #define MT_LP_RQ_INVALID	(0x0)
25*917abdd9SJames Liao 
26*917abdd9SJames Liao /* Determine the request user opertions */
27*917abdd9SJames Liao #define MT_LP_RQ_USER_INVALID	(-1)
28*917abdd9SJames Liao #define MT_LP_RQ_USER_MAX	(32)
29*917abdd9SJames Liao #define MT_LP_RQ_USER_NAME_LEN	(4)
30*917abdd9SJames Liao #define MT_LP_RQ_USER_CHAR_U	(8)
31*917abdd9SJames Liao 
32*917abdd9SJames Liao /* Determine the request update flag */
33*917abdd9SJames Liao #define MT_LP_RQ_FLAG_DONE		(0)
34*917abdd9SJames Liao #define MT_LP_RQ_FLAG_NEED_UPDATE	BIT(6)
35*917abdd9SJames Liao 
36*917abdd9SJames Liao /* Determine the resource update id */
37*917abdd9SJames Liao #define MT_LP_RQ_ID_ALL_USAGE	(-1)
38*917abdd9SJames Liao 
39*917abdd9SJames Liao /* Determine the return status */
40*917abdd9SJames Liao #define MT_LP_RQ_STA_OK		(0)
41*917abdd9SJames Liao #define MT_LP_RQ_STA_BAD	(-1)
42*917abdd9SJames Liao 
43*917abdd9SJames Liao struct mt_lp_res_req {
44*917abdd9SJames Liao 	/* Determine the resource req public identify */
45*917abdd9SJames Liao 	const unsigned int res_id;
46*917abdd9SJames Liao 	/* Determine the resource bitwise internal control */
47*917abdd9SJames Liao 	const unsigned int res_rq;
48*917abdd9SJames Liao 	/* Determine the users per bit for current resource usage */
49*917abdd9SJames Liao 	unsigned int res_usage;
50*917abdd9SJames Liao };
51*917abdd9SJames Liao 
52*917abdd9SJames Liao struct mt_resource_req_manager {
53*917abdd9SJames Liao 	/* Determine the set of resources */
54*917abdd9SJames Liao 	struct mt_lp_res_req **res;
55*917abdd9SJames Liao };
56*917abdd9SJames Liao 
57*917abdd9SJames Liao struct resource_req_status {
58*917abdd9SJames Liao 	/* Determine the status id */
59*917abdd9SJames Liao 	unsigned int id;
60*917abdd9SJames Liao 	/* Determine the status value */
61*917abdd9SJames Liao 	unsigned int val;
62*917abdd9SJames Liao };
63*917abdd9SJames Liao 
64*917abdd9SJames Liao int mt_lp_resource_request_manager_register(struct mt_resource_req_manager *rqm);
65*917abdd9SJames Liao int mt_lp_rq_update_status(int type, void *p);
66*917abdd9SJames Liao int mt_lp_rq_get_status(int type, void *p);
67*917abdd9SJames Liao 
68*917abdd9SJames Liao #endif /* MT_LP_RQM_H */
69