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
20extern "C" {
21#endif
22
23/*
24 * generic
25 */
26constexpr int SYSTEM_UID = 1000;
27constexpr int ROOT_UID = 0;
28constexpr int NR_QOS = 7;
29constexpr unsigned int SET_RTG_ENABLE = 1;
30constexpr unsigned int QOS_CTRL_IPC_MAGIC = 0xCC;
31constexpr unsigned int AUTH_CTRL_IPC_MAGIC = 0xCD;
32constexpr unsigned int RTG_SCHED_IPC_MAGIC = 0xAB;
33
34constexpr unsigned int AF_QOS_ALL = 0x0003;
35constexpr unsigned int AF_QOS_DELEGATED = 0x0001;
36
37/*
38 * auth_ctrl
39 */
40struct 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
51enum class AuthManipulateType {
52    AUTH_ENABLE = 1,
53    AUTH_DELETE,
54    AUTH_GET,
55    AUTH_SWITCH,
56    AUTH_MAX_NR,
57};
58
59enum class AuthStatus {
60    AUTH_STATUS_DEFAULT = 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
68enum 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 */
87enum class QosManipulateType {
88    QOS_APPLY = 1,
89    QOS_LEAVE,
90    QOS_GET,
91    QOS_MAX_NR,
92};
93
94struct QosCtrlData {
95    int pid;
96    unsigned int type;
97    unsigned int level;
98    int qos;
99#ifdef QOS_EXT_ENABLE
100    int qos;
101    int staticQos;
102    int dynamicQos;
103    bool tagSchedEnable = true;
104#endif
105};
106
107struct QosPolicyData {
108    int nice;
109    int latencyNice;
110    int uclampMin;
111    int uclampMax;
112    int rtSchedPriority;
113    int policy;
114};
115
116enum SchedPolicy {
117    SCHED_POLICY_OTHER = 0,
118    SCHED_POLICY_FIFO = 1,
119    SCHED_POLICY_RR = 2,
120    SCHED_POLICY_RT_EX = 0xFF,
121};
122
123enum QosPolicyType {
124    QOS_POLICY_DEFAULT = 1,
125    QOS_POLICY_SYSTEM_SERVER = 2,
126    QOS_POLICY_FRONT = 3,
127    QOS_POLICY_BACK = 4,
128    QOS_POLICY_FOCUS = 5,
129    QOS_POLICY_MAX_NR,
130};
131
132#define QOS_FLAG_NICE               0X01
133#define QOS_FLAG_LATENCY_NICE       0X02
134#define QOS_FLAG_UCLAMP             0x04
135#define QOS_FLAG_RT                 0x08
136
137#define QOS_FLAG_ALL    (QOS_FLAG_NICE          | \
138            QOS_FLAG_LATENCY_NICE       | \
139            QOS_FLAG_UCLAMP     | \
140            QOS_FLAG_RT)
141
142#define SCHED_RESET_ON_FORK         0x40000000
143
144struct QosPolicyDatas {
145    int policyType;
146    unsigned int policyFlag;
147    struct QosPolicyData policys[NR_QOS];
148};
149
150enum QosCtrlCmdid {
151    QOS_CTRL = 1,
152    QOS_POLICY = 2,
153    QOS_CTRL_MAX_NR
154};
155
156#define QOS_CTRL_BASIC_OPERATION \
157    _IOWR(QOS_CTRL_IPC_MAGIC, QOS_CTRL, struct QosCtrlData)
158#define QOS_CTRL_POLICY_OPERATION \
159    _IOWR(QOS_CTRL_IPC_MAGIC, QOS_POLICY, struct QosPolicyDatas)
160
161/*
162 * RTG
163 */
164#define AF_RTG_ALL          0x1fff
165#define AF_RTG_DELEGATED    0x1fff
166#define AF_RTG_APP          0x10b8
167
168struct RtgEnableData {
169    int enable;
170    int len;
171    char *data;
172};
173
174#define CMD_ID_SET_ENABLE \
175    _IOWR(RTG_SCHED_IPC_MAGIC, SET_RTG_ENABLE, struct RtgEnableData)
176
177/*
178 * interface
179 */
180int EnableRtg(bool flag);
181int AuthEnable(unsigned int pid, unsigned int uaFlag, unsigned int status);
182int AuthPause(unsigned int pid);
183int AuthDelete(unsigned int pid);
184int AuthGet(unsigned int pid);
185int AuthSwitch(unsigned int pid, unsigned int rtgFlag, unsigned int qosFlag, unsigned int status);
186int AuthEnhance(unsigned int pid, bool enhanceStatus);
187int QosApply(unsigned int level);
188int QosApplyForOther(unsigned int level, int tid);
189int QosLeave(void);
190int QosLeaveForOther(int tid);
191int QosPolicySet(const struct QosPolicyDatas *policyDatas);
192int QosGet(int &level);
193int QosGetForOther(int tid, int &level);
194
195#ifdef __cplusplus
196}
197#endif
198#endif /* OQS_INTERFACE_H */
199