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