• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef QOS_INTERFACE_H
17 #define QOS_INTERFACE_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /*
24  * generic
25  */
26 constexpr int SYSTEM_UID = 1000;
27 constexpr int ROOT_UID = 0;
28 constexpr int NR_QOS = 7;
29 constexpr unsigned int SET_RTG_ENABLE = 1;
30 constexpr unsigned int QOS_CTRL_IPC_MAGIC = 0xCC;
31 constexpr unsigned int AUTH_CTRL_IPC_MAGIC = 0xCD;
32 constexpr unsigned int RTG_SCHED_IPC_MAGIC = 0xAB;
33 
34 constexpr unsigned int AF_QOS_ALL = 0x0003;
35 constexpr unsigned int AF_QOS_DELEGATED = 0x0001;
36 
37 /*
38  * auth_ctrl
39  */
40 struct AuthCtrlData {
41     unsigned int pid;
42     unsigned int type;
43     unsigned int rtgUaFlag;
44     unsigned int qosUaFlag;
45     unsigned int status;
46 #ifdef QOS_EXT_ENABLE
47     bool enhanceStatus;
48 #endif
49 };
50 
51 enum class AuthManipulateType {
52     AUTH_ENABLE = 1,
53     AUTH_DELETE,
54     AUTH_GET,
55     AUTH_SWITCH,
56     AUTH_MAX_NR,
57 };
58 
59 enum class AuthStatus {
60     AUTH_STATUS_DISABLED = 1,
61     AUTH_STATUS_SYSTEM_SERVER = 2,
62     AUTH_STATUS_FOREGROUND = 3,
63     AUTH_STATUS_BACKGROUND = 4,
64     AUTH_STATUS_FOCUS = 5,
65     AUTH_STATUS_DEAD,
66 };
67 
68 enum AuthCtrlCmdid {
69     BASIC_AUTH_CTRL = 1,
70 #ifdef QOS_EXT_ENABLE
71     ENHANCE_AUTH_CTRL = 2,
72 #endif
73     AUTH_CTRL_MAX_NR
74 };
75 
76 #define BASIC_AUTH_CTRL_OPERATION \
77     _IOWR(AUTH_CTRL_IPC_MAGIC, BASIC_AUTH_CTRL, struct AuthCtrlData)
78 
79 #ifdef QOS_EXT_ENABLE
80 #define ENHANCE_AUTH_CTRL_OPERATION \
81     _IOWR(AUTH_CTRL_IPC_MAGIC, ENHANCE_AUTH_CTRL, struct AuthCtrlData)
82 #endif
83 
84 /*
85  * qos ctrl
86  */
87 enum class QosManipulateType {
88     QOS_APPLY = 1,
89     QOS_LEAVE,
90 #ifdef QOS_EXT_ENABLE
91     QOS_GET,
92 #endif
93     QOS_MAX_NR,
94 };
95 
96 struct QosCtrlData {
97     int pid;
98     unsigned int type;
99     unsigned int level;
100 #ifdef QOS_EXT_ENABLE
101     int qos;
102     int staticQos;
103     int dynamicQos;
104     bool tagSchedEnable = true;
105 #endif
106 };
107 
108 struct QosPolicyData {
109     int nice;
110     int latencyNice;
111     int uclampMin;
112     int uclampMax;
113     int rtSchedPriority;
114 };
115 
116 enum QosPolicyType {
117     QOS_POLICY_DEFAULT = 1,
118     QOS_POLICY_SYSTEM_SERVER = 2,
119     QOS_POLICY_FRONT = 3,
120     QOS_POLICY_BACK = 4,
121     QOS_POLICY_FOCUS = 5,
122     QOS_POLICY_MAX_NR,
123 };
124 
125 #define QOS_FLAG_NICE               0X01
126 #define QOS_FLAG_LATENCY_NICE       0X02
127 #define QOS_FLAG_UCLAMP             0x04
128 #define QOS_FLAG_RT                 0x08
129 
130 #define QOS_FLAG_ALL    (QOS_FLAG_NICE          | \
131             QOS_FLAG_LATENCY_NICE       | \
132             QOS_FLAG_UCLAMP     | \
133             QOS_FLAG_RT)
134 
135 struct QosPolicyDatas {
136     int policyType;
137     unsigned int policyFlag;
138     struct QosPolicyData policys[NR_QOS];
139 };
140 
141 enum QosCtrlCmdid {
142     QOS_CTRL = 1,
143     QOS_POLICY = 2,
144     QOS_CTRL_MAX_NR
145 };
146 
147 #define QOS_CTRL_BASIC_OPERATION \
148     _IOWR(QOS_CTRL_IPC_MAGIC, QOS_CTRL, struct QosCtrlData)
149 #define QOS_CTRL_POLICY_OPERATION \
150     _IOWR(QOS_CTRL_IPC_MAGIC, QOS_POLICY, struct QosPolicyDatas)
151 
152 /*
153  * RTG
154  */
155 #define AF_RTG_ALL          0x1fff
156 #define AF_RTG_DELEGATED    0x1fff
157 
158 struct RtgEnableData {
159     int enable;
160     int len;
161     char *data;
162 };
163 
164 #define CMD_ID_SET_ENABLE \
165     _IOWR(RTG_SCHED_IPC_MAGIC, SET_RTG_ENABLE, struct RtgEnableData)
166 
167 /*
168  * interface
169  */
170 int EnableRtg(bool flag);
171 int AuthEnable(unsigned int pid, unsigned int uaFlag, unsigned int status);
172 int AuthPause(unsigned int pid);
173 int AuthDelete(unsigned int pid);
174 int AuthGet(unsigned int pid);
175 int AuthSwitch(unsigned int pid, unsigned int rtgFlag, unsigned int qosFlag, unsigned int status);
176 int AuthEnhance(unsigned int pid, bool enhanceStatus);
177 int QosApply(unsigned int level);
178 int QosApplyForOther(unsigned int level, int tid);
179 int QosLeave(void);
180 int QosLeaveForOther(int tid);
181 int QosPolicySet(const struct QosPolicyDatas *policyDatas);
182 
183 #ifdef __cplusplus
184 }
185 #endif
186 #endif /* OQS_INTERFACE_H */
187