11bd4fe43Sopenharmony_ci/**
21bd4fe43Sopenharmony_ci * @file hi_cpu.h
31bd4fe43Sopenharmony_ci *
41bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
51bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
61bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
71bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
101bd4fe43Sopenharmony_ci *
111bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
121bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
131bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
141bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
151bd4fe43Sopenharmony_ci * limitations under the License.
161bd4fe43Sopenharmony_ci */
171bd4fe43Sopenharmony_ci
181bd4fe43Sopenharmony_ci/**
191bd4fe43Sopenharmony_ci * @defgroup iot_cpu CPU
201bd4fe43Sopenharmony_ci * @ingroup osa
211bd4fe43Sopenharmony_ci */
221bd4fe43Sopenharmony_ci
231bd4fe43Sopenharmony_ci#ifndef __HI_CPU_H__
241bd4fe43Sopenharmony_ci#define __HI_CPU_H__
251bd4fe43Sopenharmony_ci#include <hi_types.h>
261bd4fe43Sopenharmony_ci
271bd4fe43Sopenharmony_ci#define LOAD_SLEEP_TIME_DEFAULT   30
281bd4fe43Sopenharmony_ci
291bd4fe43Sopenharmony_ci/**
301bd4fe43Sopenharmony_ci * @ingroup iot_cpu
311bd4fe43Sopenharmony_ci *
321bd4fe43Sopenharmony_ci * CPU usage information structure. CNcomment:cpu使用情况信息结构 CNend
331bd4fe43Sopenharmony_ci */
341bd4fe43Sopenharmony_citypedef struct {
351bd4fe43Sopenharmony_ci    hi_u8 b_valid : 1;    /**< Whether the information is valid. HI_TRUE: yes; HI_FALSE: no.
361bd4fe43Sopenharmony_ci                             CNcomment:表示该条信息是否为有效信息,HI_TRUE:该条信息有效
371bd4fe43Sopenharmony_ci                             HI_FALSE:该条信息无效 CNend */
381bd4fe43Sopenharmony_ci    hi_u8 b_task : 1;     /**< Whether the message is a task or an interrupt. HI_TRUE: task; HI_FALSE: interrupt.
391bd4fe43Sopenharmony_ci                             CNcomment:表示该条信息是任务或中断,HI_TRUE:任务 HI_FALSE:中断 CNend */
401bd4fe43Sopenharmony_ci    hi_u8 pad0 : 6;       /**< Reserved. CNcomment:保留 CNend */
411bd4fe43Sopenharmony_ci    hi_u8 id;           /**< Task ID/Interrupt number. CNcomment:当该条信息表示任务时为任务ID,
421bd4fe43Sopenharmony_ci                           当该条信息为中断信息时表示中断号 CNend */
431bd4fe43Sopenharmony_ci    hi_u16 pad1;        /**< Reserved. CNcomment:保留 CNend */
441bd4fe43Sopenharmony_ci    hi_u32 permillage;  /**< CPU usage (per mil). CNcomment:cpu占用率,千分比 CNend */
451bd4fe43Sopenharmony_ci    hi_u64 cpu_time;    /**< CPU usage time (unit: cputick), where, cputick x 160000000 = 1s.
461bd4fe43Sopenharmony_ci                           CNcomment:cpu占用时间(单位:cputick),160000000个cputick等于1秒 CNend */
471bd4fe43Sopenharmony_ci} hi_cpup_item;
481bd4fe43Sopenharmony_ci
491bd4fe43Sopenharmony_ci
501bd4fe43Sopenharmony_citypedef enum {
511bd4fe43Sopenharmony_ci    HI_CPU_CLK_80M,  /**< cpu clock:80M. CNcomment:CPU工作频率:80M CNend */
521bd4fe43Sopenharmony_ci    HI_CPU_CLK_120M, /**< cpu clock:120M. CNcomment:CPU工作频率:120M CNend */
531bd4fe43Sopenharmony_ci    HI_CPU_CLK_160M, /**< cpu clock:160M. CNcomment:CPU工作频率:160M CNend */
541bd4fe43Sopenharmony_ci    HI_CPU_CLK_MAX   /**< Maximum cpu clock, which cannot be used. CNcomment:CPU最大工作频率,
551bd4fe43Sopenharmony_ci                         不可使用CNend */
561bd4fe43Sopenharmony_ci} hi_cpu_clk;
571bd4fe43Sopenharmony_ci
581bd4fe43Sopenharmony_ci/**
591bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
601bd4fe43Sopenharmony_ci* @brief  Obtains the CPU usage. CNcomment:获取CPU使用情况。CNend
611bd4fe43Sopenharmony_ci*
621bd4fe43Sopenharmony_ci* @par 描述:
631bd4fe43Sopenharmony_ci*         Obtains the CPU usage between the initialization of the CPU usage module is started or
641bd4fe43Sopenharmony_ci*         the CPU usage statistics are reset to each task/interrupt.
651bd4fe43Sopenharmony_ciCNcomment:获取cpu占用率模块初始化开始或cpu占用率统计信息重置开始统计到个各任务(中断)
661bd4fe43Sopenharmony_ciCPU占用情况。CNend
671bd4fe43Sopenharmony_ci*
681bd4fe43Sopenharmony_ci* @attention
691bd4fe43Sopenharmony_ci* @li A task/interrupt not scheduled after the CPU usage module is initialized or
701bd4fe43Sopenharmony_ci*     the CPU usage statistics are reset is excluded.
711bd4fe43Sopenharmony_ciCNcomment:cpu占用率模块初始化或cpu占用率统计信息重置之后没有调度到的任务或中断
721bd4fe43Sopenharmony_ci不会被统计。CNend
731bd4fe43Sopenharmony_ci*
741bd4fe43Sopenharmony_ci* @param array_count [IN] type #hi_u32 Number of CPU usage records that can be stored
751bd4fe43Sopenharmony_ci*                         in the space corresponding to cpup_items. CNcomment:表示p_cpup_items对应的空间可以
761bd4fe43Sopenharmony_ci存储多少条cpu使用情况信息。CNend
771bd4fe43Sopenharmony_ci* @param p_cpup_items [OUT] type #hi_cpup_item* CPU usage information space, applied by the caller.
781bd4fe43Sopenharmony_ciCNcomment:cpu使用情况信息空间,由调用者申请。CNend
791bd4fe43Sopenharmony_ci*
801bd4fe43Sopenharmony_ci* @retval #0   Success.
811bd4fe43Sopenharmony_ci* @retval #Other    Failure. For details, see hi_errno.h.
821bd4fe43Sopenharmony_ci* @par Dependency:
831bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
841bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
851bd4fe43Sopenharmony_ci* @see  None
861bd4fe43Sopenharmony_ci*/
871bd4fe43Sopenharmony_cihi_u32 hi_cpup_get_usage(hi_u32 array_count, hi_cpup_item *p_cpup_items);
881bd4fe43Sopenharmony_ci
891bd4fe43Sopenharmony_ci/**
901bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
911bd4fe43Sopenharmony_ci* @brief  Resets CPU usage statistics. CNcomment:重置cpu使用情况信息。CNend
921bd4fe43Sopenharmony_ci*
931bd4fe43Sopenharmony_ci* @param None
941bd4fe43Sopenharmony_ci*
951bd4fe43Sopenharmony_ci* @retval #None
961bd4fe43Sopenharmony_ci* @par 描述:
971bd4fe43Sopenharmony_ci*         Resets CPU usage statistics. After the reset, the CPU usage statistics of all tasks and interrupts are
981bd4fe43Sopenharmony_ci*         cleared. CNcomment:重置cpu使用情况信息,重置后所有任务和中断的cpu占用率清0。CNend
991bd4fe43Sopenharmony_ci*
1001bd4fe43Sopenharmony_ci* @attention None
1011bd4fe43Sopenharmony_ci*
1021bd4fe43Sopenharmony_ci* @par Dependency:
1031bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
1041bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
1051bd4fe43Sopenharmony_ci* @see None
1061bd4fe43Sopenharmony_ci*/
1071bd4fe43Sopenharmony_cihi_void hi_cpup_reset_usage(hi_void);
1081bd4fe43Sopenharmony_ci
1091bd4fe43Sopenharmony_ci/**
1101bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
1111bd4fe43Sopenharmony_ci* @brief  Set CPU clock. CNcomment:设置CPU的工作频率。CNend
1121bd4fe43Sopenharmony_ci*
1131bd4fe43Sopenharmony_ci* @par 描述:
1141bd4fe43Sopenharmony_ci*         Set CPU clock, such as 80M/120M/160M.
1151bd4fe43Sopenharmony_ci*         CNcomment:设置CPU的工作频率,如80M/120M/160M。CNend
1161bd4fe43Sopenharmony_ci*
1171bd4fe43Sopenharmony_ci* @attention Default CPU clock is 160M, if change CPU clock, Shoud config it
1181bd4fe43Sopenharmony_ciboth in System Startup and DeepSleep Wakeup stage.CNcomment:CPU默认工作频率为160M,
1191bd4fe43Sopenharmony_ci如果改变CPU的工作频率,需要在系统启动和深睡唤醒阶段均进行配置。CNend
1201bd4fe43Sopenharmony_ci* @param  clk        [IN] type #hi_cpu_clk,cpu clk. CNcomment:CPU工作频率。CNend
1211bd4fe43Sopenharmony_ci*
1221bd4fe43Sopenharmony_ci* @retval #HI_ERR_SUCCESS  Success.
1231bd4fe43Sopenharmony_ci* @retval #HI_ERR_CPU_CLK_INVALID_PARAM  invalid clk. CNcomment:工作频率无效。CNend
1241bd4fe43Sopenharmony_ci*
1251bd4fe43Sopenharmony_ci* @par Dependency:
1261bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
1271bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
1281bd4fe43Sopenharmony_ci* @see None
1291bd4fe43Sopenharmony_ci*/
1301bd4fe43Sopenharmony_cihi_u32 hi_cpu_set_clk(hi_cpu_clk clk);
1311bd4fe43Sopenharmony_ci
1321bd4fe43Sopenharmony_ci/**
1331bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
1341bd4fe43Sopenharmony_ci* @brief  Get CPU clock. CNcomment:获取CPU的工作频率。CNend
1351bd4fe43Sopenharmony_ci*
1361bd4fe43Sopenharmony_ci* @par 描述:
1371bd4fe43Sopenharmony_ci*         Get CPU clock, such as 80M/120M/160M.
1381bd4fe43Sopenharmony_ci*         CNcomment:获取CPU的工作频率,如80M/120M/160M。CNend
1391bd4fe43Sopenharmony_ci*
1401bd4fe43Sopenharmony_ci* @attention None
1411bd4fe43Sopenharmony_ci* @param  None
1421bd4fe43Sopenharmony_ci*
1431bd4fe43Sopenharmony_ci* @retval #hi_cpu_clk  cpu clk.
1441bd4fe43Sopenharmony_ci*
1451bd4fe43Sopenharmony_ci* @par Dependency:
1461bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
1471bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
1481bd4fe43Sopenharmony_ci* @see None
1491bd4fe43Sopenharmony_ci*/
1501bd4fe43Sopenharmony_cihi_cpu_clk hi_cpu_get_clk(hi_void);
1511bd4fe43Sopenharmony_ci
1521bd4fe43Sopenharmony_ci/**
1531bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
1541bd4fe43Sopenharmony_ci* @brief  check cpu load percent and sleep. CNcomment:检查idle任务cpu占有率,
1551bd4fe43Sopenharmony_ci如果小于门限则对当前任务进行睡眠。CNend
1561bd4fe43Sopenharmony_ci*
1571bd4fe43Sopenharmony_ci* @par 描述:
1581bd4fe43Sopenharmony_ci*         check cpu load percent of idle task, if smaller than the threshold
1591bd4fe43Sopenharmony_ci(5%), Then sleep. CNcomment:检查idle任务cpu占有率,如果小于门限(5%)则对当前任务
1601bd4fe43Sopenharmony_ci进行睡眠。CNend
1611bd4fe43Sopenharmony_ci*
1621bd4fe43Sopenharmony_ci* @attention None
1631bd4fe43Sopenharmony_ci*
1641bd4fe43Sopenharmony_ci* @param  task_id  [IN] type #hi_u32,current task ID.
1651bd4fe43Sopenharmony_ciCNcomment:当前固定填写当前任务ID。CNend
1661bd4fe43Sopenharmony_ci* @param  ms       [IN] type #hi_u32,sleep time:当前任务睡眠时间。CNend
1671bd4fe43Sopenharmony_ci*
1681bd4fe43Sopenharmony_ci* @retval None
1691bd4fe43Sopenharmony_ci* @par Dependency:
1701bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
1711bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
1721bd4fe43Sopenharmony_ci* @see None
1731bd4fe43Sopenharmony_ci*/
1741bd4fe43Sopenharmony_cihi_void hi_cpup_load_check_proc(hi_u32 task_id, hi_u32 ms);
1751bd4fe43Sopenharmony_ci
1761bd4fe43Sopenharmony_ci/**
1771bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
1781bd4fe43Sopenharmony_ci* @brief  Enable Dcache. CNcomment:使能DCache。CNend
1791bd4fe43Sopenharmony_ci*
1801bd4fe43Sopenharmony_ci*
1811bd4fe43Sopenharmony_ci* @par 描述:
1821bd4fe43Sopenharmony_ci*         Enable Dcache,system default Enable Dcache after startup.
1831bd4fe43Sopenharmony_ciCNcomment:使能DCache,系统启动默认使能。CNend
1841bd4fe43Sopenharmony_ci*
1851bd4fe43Sopenharmony_ci* @attention None
1861bd4fe43Sopenharmony_ci*
1871bd4fe43Sopenharmony_ci* @param None
1881bd4fe43Sopenharmony_ci*
1891bd4fe43Sopenharmony_ci* @retval #None
1901bd4fe43Sopenharmony_ci* @par Dependency:
1911bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
1921bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
1931bd4fe43Sopenharmony_ci* @see None
1941bd4fe43Sopenharmony_ci*/
1951bd4fe43Sopenharmony_cihi_void hi_cache_enable(hi_void);
1961bd4fe43Sopenharmony_ci
1971bd4fe43Sopenharmony_ci/**
1981bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
1991bd4fe43Sopenharmony_ci* @brief  Disable Dcache. CNcomment:禁用DCache。CNend
2001bd4fe43Sopenharmony_ci*
2011bd4fe43Sopenharmony_ci* @par 描述:
2021bd4fe43Sopenharmony_ci*         Disable Dcache. CNcomment:禁用DCache。CNend
2031bd4fe43Sopenharmony_ci*
2041bd4fe43Sopenharmony_ci* @attention:
2051bd4fe43Sopenharmony_ci*         flush cache before disable. CNcomment:禁用Dcache前需要刷Cache。CNend
2061bd4fe43Sopenharmony_ci*
2071bd4fe43Sopenharmony_ci* @param None
2081bd4fe43Sopenharmony_ci*
2091bd4fe43Sopenharmony_ci* @retval #None
2101bd4fe43Sopenharmony_ci* @par Dependency:
2111bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
2121bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
2131bd4fe43Sopenharmony_ci* @see None
2141bd4fe43Sopenharmony_ci*/
2151bd4fe43Sopenharmony_cihi_void hi_cache_disable(hi_void);
2161bd4fe43Sopenharmony_ci
2171bd4fe43Sopenharmony_ci/**
2181bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
2191bd4fe43Sopenharmony_ci* @brief  Flush Dcache. CNcomment:Flush DCache。CNend
2201bd4fe43Sopenharmony_ci*
2211bd4fe43Sopenharmony_ci* @par 描述:
2221bd4fe43Sopenharmony_ci*         Flush Dcache, synchronize Dcache and memory.
2231bd4fe43Sopenharmony_ciCNcomment:刷新DCache,维持DCache和memory同步。CNend
2241bd4fe43Sopenharmony_ci*
2251bd4fe43Sopenharmony_ci* @attention None
2261bd4fe43Sopenharmony_ci*
2271bd4fe43Sopenharmony_ci* @param None
2281bd4fe43Sopenharmony_ci*
2291bd4fe43Sopenharmony_ci* @retval #None
2301bd4fe43Sopenharmony_ci* @par Dependency:
2311bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
2321bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
2331bd4fe43Sopenharmony_ci* @see None
2341bd4fe43Sopenharmony_ci*/
2351bd4fe43Sopenharmony_cihi_void hi_cache_flush(hi_void);
2361bd4fe43Sopenharmony_ci
2371bd4fe43Sopenharmony_ci/**
2381bd4fe43Sopenharmony_ci* @ingroup  iot_cpu
2391bd4fe43Sopenharmony_ci* @brief  Flush Icache. CNcomment:Flush ICache。CNend
2401bd4fe43Sopenharmony_ci*
2411bd4fe43Sopenharmony_ci* @par 描述:
2421bd4fe43Sopenharmony_ci*         Flush Icache, synchronize Icache and memory.
2431bd4fe43Sopenharmony_ciCNcomment:刷新ICache,维持ICache和memory同步。CNend
2441bd4fe43Sopenharmony_ci*
2451bd4fe43Sopenharmony_ci* @attention None
2461bd4fe43Sopenharmony_ci*
2471bd4fe43Sopenharmony_ci* @param None
2481bd4fe43Sopenharmony_ci*
2491bd4fe43Sopenharmony_ci* @retval #None
2501bd4fe43Sopenharmony_ci* @par Dependency:
2511bd4fe43Sopenharmony_ci*            @li hi_cpu.h: Describes CPU usage APIs.
2521bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend
2531bd4fe43Sopenharmony_ci* @see None
2541bd4fe43Sopenharmony_ci*/
2551bd4fe43Sopenharmony_cihi_void hi_icache_flush(hi_void);
2561bd4fe43Sopenharmony_ci
2571bd4fe43Sopenharmony_ci#endif
258