13c3173acSopenharmony_ci/* 23c3173acSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 33c3173acSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43c3173acSopenharmony_ci * you may not use this file except in compliance with the License. 53c3173acSopenharmony_ci * You may obtain a copy of the License at 63c3173acSopenharmony_ci * 73c3173acSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83c3173acSopenharmony_ci * 93c3173acSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103c3173acSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113c3173acSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123c3173acSopenharmony_ci * See the License for the specific language governing permissions and 133c3173acSopenharmony_ci * limitations under the License. 143c3173acSopenharmony_ci */ 153c3173acSopenharmony_ci 163c3173acSopenharmony_ci#ifndef QOS_INTERFACE_H 173c3173acSopenharmony_ci#define QOS_INTERFACE_H 183c3173acSopenharmony_ci 193c3173acSopenharmony_ci#ifdef __cplusplus 203c3173acSopenharmony_ciextern "C" { 213c3173acSopenharmony_ci#endif 223c3173acSopenharmony_ci 233c3173acSopenharmony_ci/* 243c3173acSopenharmony_ci * generic 253c3173acSopenharmony_ci */ 263c3173acSopenharmony_ciconstexpr int SYSTEM_UID = 1000; 273c3173acSopenharmony_ciconstexpr int ROOT_UID = 0; 283c3173acSopenharmony_ciconstexpr int NR_QOS = 7; 293c3173acSopenharmony_ciconstexpr unsigned int SET_RTG_ENABLE = 1; 303c3173acSopenharmony_ciconstexpr unsigned int QOS_CTRL_IPC_MAGIC = 0xCC; 313c3173acSopenharmony_ciconstexpr unsigned int AUTH_CTRL_IPC_MAGIC = 0xCD; 323c3173acSopenharmony_ciconstexpr unsigned int RTG_SCHED_IPC_MAGIC = 0xAB; 333c3173acSopenharmony_ci 343c3173acSopenharmony_ciconstexpr unsigned int AF_QOS_ALL = 0x0003; 353c3173acSopenharmony_ciconstexpr unsigned int AF_QOS_DELEGATED = 0x0001; 363c3173acSopenharmony_ci 373c3173acSopenharmony_ci/* 383c3173acSopenharmony_ci * auth_ctrl 393c3173acSopenharmony_ci */ 403c3173acSopenharmony_cistruct AuthCtrlData { 413c3173acSopenharmony_ci unsigned int pid; 423c3173acSopenharmony_ci unsigned int type; 433c3173acSopenharmony_ci unsigned int rtgUaFlag; 443c3173acSopenharmony_ci unsigned int qosUaFlag; 453c3173acSopenharmony_ci unsigned int status; 463c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 473c3173acSopenharmony_ci bool enhanceStatus; 483c3173acSopenharmony_ci#endif 493c3173acSopenharmony_ci}; 503c3173acSopenharmony_ci 513c3173acSopenharmony_cienum class AuthManipulateType { 523c3173acSopenharmony_ci AUTH_ENABLE = 1, 533c3173acSopenharmony_ci AUTH_DELETE, 543c3173acSopenharmony_ci AUTH_GET, 553c3173acSopenharmony_ci AUTH_SWITCH, 563c3173acSopenharmony_ci AUTH_MAX_NR, 573c3173acSopenharmony_ci}; 583c3173acSopenharmony_ci 593c3173acSopenharmony_cienum class AuthStatus { 603c3173acSopenharmony_ci AUTH_STATUS_DEFAULT = 1, 613c3173acSopenharmony_ci AUTH_STATUS_SYSTEM_SERVER = 2, 623c3173acSopenharmony_ci AUTH_STATUS_FOREGROUND = 3, 633c3173acSopenharmony_ci AUTH_STATUS_BACKGROUND = 4, 643c3173acSopenharmony_ci AUTH_STATUS_FOCUS = 5, 653c3173acSopenharmony_ci AUTH_STATUS_DEAD, 663c3173acSopenharmony_ci}; 673c3173acSopenharmony_ci 683c3173acSopenharmony_cienum AuthCtrlCmdid { 693c3173acSopenharmony_ci BASIC_AUTH_CTRL = 1, 703c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 713c3173acSopenharmony_ci ENHANCE_AUTH_CTRL = 2, 723c3173acSopenharmony_ci#endif 733c3173acSopenharmony_ci AUTH_CTRL_MAX_NR 743c3173acSopenharmony_ci}; 753c3173acSopenharmony_ci 763c3173acSopenharmony_ci#define BASIC_AUTH_CTRL_OPERATION \ 773c3173acSopenharmony_ci _IOWR(AUTH_CTRL_IPC_MAGIC, BASIC_AUTH_CTRL, struct AuthCtrlData) 783c3173acSopenharmony_ci 793c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 803c3173acSopenharmony_ci#define ENHANCE_AUTH_CTRL_OPERATION \ 813c3173acSopenharmony_ci _IOWR(AUTH_CTRL_IPC_MAGIC, ENHANCE_AUTH_CTRL, struct AuthCtrlData) 823c3173acSopenharmony_ci#endif 833c3173acSopenharmony_ci 843c3173acSopenharmony_ci/* 853c3173acSopenharmony_ci * qos ctrl 863c3173acSopenharmony_ci */ 873c3173acSopenharmony_cienum class QosManipulateType { 883c3173acSopenharmony_ci QOS_APPLY = 1, 893c3173acSopenharmony_ci QOS_LEAVE, 903c3173acSopenharmony_ci QOS_GET, 913c3173acSopenharmony_ci QOS_MAX_NR, 923c3173acSopenharmony_ci}; 933c3173acSopenharmony_ci 943c3173acSopenharmony_cistruct QosCtrlData { 953c3173acSopenharmony_ci int pid; 963c3173acSopenharmony_ci unsigned int type; 973c3173acSopenharmony_ci unsigned int level; 983c3173acSopenharmony_ci int qos; 993c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 1003c3173acSopenharmony_ci int qos; 1013c3173acSopenharmony_ci int staticQos; 1023c3173acSopenharmony_ci int dynamicQos; 1033c3173acSopenharmony_ci bool tagSchedEnable = true; 1043c3173acSopenharmony_ci#endif 1053c3173acSopenharmony_ci}; 1063c3173acSopenharmony_ci 1073c3173acSopenharmony_cistruct QosPolicyData { 1083c3173acSopenharmony_ci int nice; 1093c3173acSopenharmony_ci int latencyNice; 1103c3173acSopenharmony_ci int uclampMin; 1113c3173acSopenharmony_ci int uclampMax; 1123c3173acSopenharmony_ci int rtSchedPriority; 1133c3173acSopenharmony_ci int policy; 1143c3173acSopenharmony_ci}; 1153c3173acSopenharmony_ci 1163c3173acSopenharmony_cienum SchedPolicy { 1173c3173acSopenharmony_ci SCHED_POLICY_OTHER = 0, 1183c3173acSopenharmony_ci SCHED_POLICY_FIFO = 1, 1193c3173acSopenharmony_ci SCHED_POLICY_RR = 2, 1203c3173acSopenharmony_ci SCHED_POLICY_RT_EX = 0xFF, 1213c3173acSopenharmony_ci}; 1223c3173acSopenharmony_ci 1233c3173acSopenharmony_cienum QosPolicyType { 1243c3173acSopenharmony_ci QOS_POLICY_DEFAULT = 1, 1253c3173acSopenharmony_ci QOS_POLICY_SYSTEM_SERVER = 2, 1263c3173acSopenharmony_ci QOS_POLICY_FRONT = 3, 1273c3173acSopenharmony_ci QOS_POLICY_BACK = 4, 1283c3173acSopenharmony_ci QOS_POLICY_FOCUS = 5, 1293c3173acSopenharmony_ci QOS_POLICY_MAX_NR, 1303c3173acSopenharmony_ci}; 1313c3173acSopenharmony_ci 1323c3173acSopenharmony_ci#define QOS_FLAG_NICE 0X01 1333c3173acSopenharmony_ci#define QOS_FLAG_LATENCY_NICE 0X02 1343c3173acSopenharmony_ci#define QOS_FLAG_UCLAMP 0x04 1353c3173acSopenharmony_ci#define QOS_FLAG_RT 0x08 1363c3173acSopenharmony_ci 1373c3173acSopenharmony_ci#define QOS_FLAG_ALL (QOS_FLAG_NICE | \ 1383c3173acSopenharmony_ci QOS_FLAG_LATENCY_NICE | \ 1393c3173acSopenharmony_ci QOS_FLAG_UCLAMP | \ 1403c3173acSopenharmony_ci QOS_FLAG_RT) 1413c3173acSopenharmony_ci 1423c3173acSopenharmony_ci#define SCHED_RESET_ON_FORK 0x40000000 1433c3173acSopenharmony_ci 1443c3173acSopenharmony_cistruct QosPolicyDatas { 1453c3173acSopenharmony_ci int policyType; 1463c3173acSopenharmony_ci unsigned int policyFlag; 1473c3173acSopenharmony_ci struct QosPolicyData policys[NR_QOS]; 1483c3173acSopenharmony_ci}; 1493c3173acSopenharmony_ci 1503c3173acSopenharmony_cienum QosCtrlCmdid { 1513c3173acSopenharmony_ci QOS_CTRL = 1, 1523c3173acSopenharmony_ci QOS_POLICY = 2, 1533c3173acSopenharmony_ci QOS_CTRL_MAX_NR 1543c3173acSopenharmony_ci}; 1553c3173acSopenharmony_ci 1563c3173acSopenharmony_ci#define QOS_CTRL_BASIC_OPERATION \ 1573c3173acSopenharmony_ci _IOWR(QOS_CTRL_IPC_MAGIC, QOS_CTRL, struct QosCtrlData) 1583c3173acSopenharmony_ci#define QOS_CTRL_POLICY_OPERATION \ 1593c3173acSopenharmony_ci _IOWR(QOS_CTRL_IPC_MAGIC, QOS_POLICY, struct QosPolicyDatas) 1603c3173acSopenharmony_ci 1613c3173acSopenharmony_ci/* 1623c3173acSopenharmony_ci * RTG 1633c3173acSopenharmony_ci */ 1643c3173acSopenharmony_ci#define AF_RTG_ALL 0x1fff 1653c3173acSopenharmony_ci#define AF_RTG_DELEGATED 0x1fff 1663c3173acSopenharmony_ci#define AF_RTG_APP 0x10b8 1673c3173acSopenharmony_ci 1683c3173acSopenharmony_cistruct RtgEnableData { 1693c3173acSopenharmony_ci int enable; 1703c3173acSopenharmony_ci int len; 1713c3173acSopenharmony_ci char *data; 1723c3173acSopenharmony_ci}; 1733c3173acSopenharmony_ci 1743c3173acSopenharmony_ci#define CMD_ID_SET_ENABLE \ 1753c3173acSopenharmony_ci _IOWR(RTG_SCHED_IPC_MAGIC, SET_RTG_ENABLE, struct RtgEnableData) 1763c3173acSopenharmony_ci 1773c3173acSopenharmony_ci/* 1783c3173acSopenharmony_ci * interface 1793c3173acSopenharmony_ci */ 1803c3173acSopenharmony_ciint EnableRtg(bool flag); 1813c3173acSopenharmony_ciint AuthEnable(unsigned int pid, unsigned int uaFlag, unsigned int status); 1823c3173acSopenharmony_ciint AuthPause(unsigned int pid); 1833c3173acSopenharmony_ciint AuthDelete(unsigned int pid); 1843c3173acSopenharmony_ciint AuthGet(unsigned int pid); 1853c3173acSopenharmony_ciint AuthSwitch(unsigned int pid, unsigned int rtgFlag, unsigned int qosFlag, unsigned int status); 1863c3173acSopenharmony_ciint AuthEnhance(unsigned int pid, bool enhanceStatus); 1873c3173acSopenharmony_ciint QosApply(unsigned int level); 1883c3173acSopenharmony_ciint QosApplyForOther(unsigned int level, int tid); 1893c3173acSopenharmony_ciint QosLeave(void); 1903c3173acSopenharmony_ciint QosLeaveForOther(int tid); 1913c3173acSopenharmony_ciint QosPolicySet(const struct QosPolicyDatas *policyDatas); 1923c3173acSopenharmony_ciint QosGet(int &level); 1933c3173acSopenharmony_ciint QosGetForOther(int tid, int &level); 1943c3173acSopenharmony_ci 1953c3173acSopenharmony_ci#ifdef __cplusplus 1963c3173acSopenharmony_ci} 1973c3173acSopenharmony_ci#endif 1983c3173acSopenharmony_ci#endif /* OQS_INTERFACE_H */ 199