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