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_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 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 QOS_GET, 91 QOS_MAX_NR, 92 }; 93 94 struct 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 107 struct QosPolicyData { 108 int nice; 109 int latencyNice; 110 int uclampMin; 111 int uclampMax; 112 int rtSchedPriority; 113 int policy; 114 }; 115 116 enum SchedPolicy { 117 SCHED_POLICY_OTHER = 0, 118 SCHED_POLICY_FIFO = 1, 119 SCHED_POLICY_RR = 2, 120 SCHED_POLICY_RT_EX = 0xFF, 121 }; 122 123 enum 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 144 struct QosPolicyDatas { 145 int policyType; 146 unsigned int policyFlag; 147 struct QosPolicyData policys[NR_QOS]; 148 }; 149 150 enum 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 167 struct RtgEnableData { 168 int enable; 169 int len; 170 char *data; 171 }; 172 173 #define CMD_ID_SET_ENABLE \ 174 _IOWR(RTG_SCHED_IPC_MAGIC, SET_RTG_ENABLE, struct RtgEnableData) 175 176 /* 177 * interface 178 */ 179 int EnableRtg(bool flag); 180 int AuthEnable(unsigned int pid, unsigned int uaFlag, unsigned int status); 181 int AuthPause(unsigned int pid); 182 int AuthDelete(unsigned int pid); 183 int AuthGet(unsigned int pid); 184 int AuthSwitch(unsigned int pid, unsigned int rtgFlag, unsigned int qosFlag, unsigned int status); 185 int AuthEnhance(unsigned int pid, bool enhanceStatus); 186 int QosApply(unsigned int level); 187 int QosApplyForOther(unsigned int level, int tid); 188 int QosLeave(void); 189 int QosLeaveForOther(int tid); 190 int QosPolicySet(const struct QosPolicyDatas *policyDatas); 191 int QosGet(int &level); 192 int QosGetForOther(int tid, int &level); 193 194 #ifdef __cplusplus 195 } 196 #endif 197 #endif /* OQS_INTERFACE_H */ 198