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