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