• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2009-2022 Huawei Technologies Co., Ltd. All rights reserved.
3  *
4  * UniProton is licensed under Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *          http://license.coscl.org.cn/MulanPSL2
8  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11  * See the Mulan PSL v2 for more details.
12  * Create: 2009-12-22
13  * Description: 系统模块的对外头文件。
14  */
15 #ifndef PRT_SYS_H
16 #define PRT_SYS_H
17 
18 #include "prt_module.h"
19 #include "prt_errno.h"
20 
21 #ifdef __cplusplus
22 #if __cplusplus
23 extern "C" {
24 #endif /* __cpluscplus */
25 #endif /* __cpluscplus */
26 
27 /*
28  * 系统基本功能错误码:指针参数为空。
29  *
30  * 值: 0x02000001
31  *
32  * 解决方案: 请检查入参是否为空
33  */
34 #define OS_ERRNO_SYS_PTR_NULL OS_ERRNO_BUILD_ERROR(OS_MID_SYS, 0x01)
35 
36 /*
37  * 系统基本功能错误码:系统主频配置非法。
38  *
39  * 值: 0x02000002
40  *
41  * 解决方案: 在prt_config.h中配置合理的系统主频。
42  */
43 #define OS_ERRNO_SYS_CLOCK_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_SYS, 0x02)
44 
45 /*
46  * 系统基本功能错误码:CPUP告警被裁减
47  *
48  * 值: 0x02000003
49  *
50  * 解决方案:排除config项是否正确,该平台不支持CPUP告警
51  *
52  */
53 #define OS_ERRNO_SYS_NO_CPUP_WARN OS_ERRNO_BUILD_ERROR(OS_MID_SYS, 0x03)
54 
55 /*
56  * 系统基本功能错误码:设置RND值的时候入参非法。
57  *
58  * 值: 0x02000004
59  *
60  * 解决方案: 请确保设置RND值时入参合法。
61  */
62 #define OS_ERRNO_SYS_RND_PARA_INVALID  OS_ERRNO_BUILD_ERROR(OS_MID_SYS, 0x04)
63 
64 /*
65  * 系统基本功能错误码:注册获取系统时间函数重复注册了
66  *
67  * 值: 0x02000005
68  *
69  * 解决方案:获取系统时间函数不允许重复注册
70  *
71  */
72 #define OS_ERRNO_SYS_TIME_HOOK_REGISTER_REPEATED OS_ERRNO_BUILD_ERROR(OS_MID_SYS, 0x05)
73 
74 /*
75  * 硬中断错误码:配置的中断个数不正确
76  *
77  * 值: 0x02000806
78  *
79  * 解决方案: 检查配置的中断个数是否为0或者超过了硬件范围
80  */
81 #define OS_ERRNO_SYS_HWI_MAX_NUM_CONFIG_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x06)
82 
83 /*
84  * 系统初始化阶段状态
85  */
86 /*
87  * 表示初始态。
88  *
89  */
90 #define OS_DEFAULT_PHASE 0x00
91 
92 /*
93  * 表示进入PRT_HardBootInit。
94  *
95  */
96 #define OS_BOOT_PHASE 0x03
97 
98 /*
99  * 表示进入BSS段初始化。
100  *
101  */
102 #define OS_BSSINIT_PHASE 0x06
103 
104 /*
105  * 表示进入C lib库初始化。
106  *
107  */
108 #define OS_LIBCINIT_PHASE 0x08
109 
110 /*
111  * 表示系统在进行OS模块注册阶段,匹配MOUDLE_ID之后,标记进入MODULE_ID的注册。
112  *
113  */
114 #define OS_REGISTER_PHASE 0x09
115 
116 /*
117  * 表示系统在进行OS模块初始化阶段,匹配MOUDLE_ID之后,标记进入MODULE_ID的初始化。
118  *
119  */
120 #define OS_INITIALIZE_PHASE 0x0a
121 
122 /*
123  * 表示系统在进行产品驱动初始化阶段,匹配MOUDLE_ID之后,标记进入MODULE_ID的初始化。
124  *
125  */
126 #define OS_DEVDRVINIT_PHASE 0x0b
127 
128 /*
129  * 表示系统在进行OS启动阶段,匹配MOUDLE_ID之后,标记进入MODULE_ID的启动。
130  *
131  */
132 #define OS_START_PHASE 0x0c
133 
134 /*
135  * 每秒毫秒数
136  */
137 #define OS_SYS_MS_PER_SECOND 1000
138 
139 /*
140  * 每秒微秒数
141  */
142 #define OS_SYS_US_PER_SECOND 1000000
143 
144 /*
145  * 每秒纳秒数
146  */
147 #define OS_SYS_NS_PER_SECOND 1000000000
148 
149 /*
150  * OS版本号
151  */
152 #define OS_SYS_OS_VER_LEN 48
153 
154 /*
155  * 产品版本号
156  */
157 #define OS_SYS_APP_VER_LEN 64
158 
159 /*
160  * 系统模块线程类型获取枚举结构定义
161  *
162  * 系统模块线程类型获取
163  */
164 enum SysThreadType {
165     SYS_HWI,      /* 当前线程类型属于硬中断 */
166     SYS_TASK,     /* 当前线程类型属于任务 */
167     SYS_KERNEL,   /* 当前线程类型属于内核 */
168     SYS_BUTT
169 };
170 
171 /*
172  * @brief 计算系统绝对时间钩子函数的类型定义。
173  *
174  * @par 描述
175  * 由于OS没有接管硬件定时器,需要用户提供计算系统时间的钩子函数。
176  *
177  * @attention 获取的是64bit cycles 数据。
178  *
179  * @param 无。
180  *
181  * @retval 系统绝对时间
182  * @par 依赖
183  * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
184  * @see 无。
185  */
186 typedef U64 (*SysTimeFunc)(void);
187 
188 /*
189  * 系统模块配置信息的结构体定义。
190  *
191  * 保存系统模块的配置项信息。
192  */
193 struct SysModInfo {
194     /* CPU主频,时钟周期 */
195     U32 systemClock;
196     /* 用户注册的获取系统时间函数 */
197     SysTimeFunc sysTimeHook;
198     /* CPU type */
199     U32 cpuType;
200 #if defined(OS_OPTION_HWI_MAX_NUM_CONFIG)
201     U32 hwiMaxNum;
202 #endif
203 };
204 
205 enum SysRndNumType {
206     OS_SYS_RND_STACK_PROTECT,     /* 栈保护的RND值 */
207     OS_SYS_RND_BUTT               /* 非法类型 */
208 };
209 
210 /*
211  * @brief 获取OS的版本号。
212  *
213  * @par 描述
214  * 获取OS的版本号。版本编号格式为UniProton xx.xx VERSIONID(XXX)。
215  *
216  * @attention 无
217  *
218  * @param 无。
219  *
220  * @retval 指向OS版本号的字符串指针。
221  * @par 依赖
222  * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
223  * @see 无
224  */
225 extern char *PRT_SysGetOsVersion(void);
226 
227 /*
228  * @brief 业务给OS传递RND值,用作后续相关功能模块的保护。
229  *
230  * @par 描述: 业务传递RND值给OS,OS用于运行时必要的保护。
231  *
232  * @attention
233  * <ul>
234  * <li>栈保护随机值设置必须在PRT_HardBootInit中调用。</li>
235  * </ul>
236  *
237  * @param type   [IN]  类型#enum SysRndNumType,设置的目标RND值的类型。
238  * @param rndNum [IN]  类型#U32,传递的RND值。
239  *
240  * @retval #OS_OK  0x00000000,操作成功。
241  * @retval #其它值,操作失败。
242  *
243  * @par 依赖
244  * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
245  */
246 extern U32 PRT_SysSetRndNum(enum SysRndNumType type, U32 rndNum);
247 
248 /*
249  * @brief 复位单板。
250  *
251  * @par 描述
252  * 复位单板,程序重新加载执行。
253  *
254  * @attention
255  * <ul>
256  * <li>并非直接复位单板,而是关中断,等待看门狗复位。</li>
257  * <li>用户可以通过配置项OS_SYS_REBOOT_HOOK挂接复位函数。</li>
258  * </ul>
259  *
260  * @param 无。
261  *
262  * @retval 无
263  * @par 依赖
264  * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
265  * @see 无
266  */
267 extern void PRT_SysReboot(void);
268 
269 /*
270  * @brief 获取当前核ID。
271  *
272  * @par 描述
273  * 获取当前核ID。
274  *
275  * @attention
276  * <ul>
277  * <li>获取的核ID为硬件寄存器中的ID号。</li>
278  * </ul>
279  *
280  * @param 无。
281  *
282  * @retval 物理核ID。
283  * @par 依赖
284  * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
285  * @see 无
286  */
PRT_SysGetCoreId(void)287 OS_SEC_ALW_INLINE INLINE U32 PRT_SysGetCoreId(void)
288 {
289     return 0;
290 }
291 
292 #ifdef __cplusplus
293 #if __cplusplus
294 }
295 #endif /* __cpluscplus */
296 #endif /* __cpluscplus */
297 
298 #endif /* PRT_SYS_H */
299