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 * OS版本号
146 */
147 #define OS_SYS_OS_VER_LEN 48
148
149 /*
150 * 产品版本号
151 */
152 #define OS_SYS_APP_VER_LEN 64
153
154 /*
155 * 系统模块线程类型获取枚举结构定义
156 *
157 * 系统模块线程类型获取
158 */
159 enum SysThreadType {
160 SYS_HWI, /* 当前线程类型属于硬中断 */
161 SYS_TASK, /* 当前线程类型属于任务 */
162 SYS_KERNEL, /* 当前线程类型属于内核 */
163 SYS_BUTT
164 };
165
166 /*
167 * 系统模块配置信息的结构体定义。
168 *
169 * 保存系统模块的配置项信息。
170 */
171 struct SysModInfo {
172 /* CPU主频,时钟周期 */
173 U32 systemClock;
174 /* CPU type */
175 U32 cpuType;
176 #if defined(OS_OPTION_HWI_MAX_NUM_CONFIG)
177 U32 hwiMaxNum;
178 #endif
179 };
180
181 enum SysRndNumType {
182 OS_SYS_RND_STACK_PROTECT, /* 栈保护的RND值 */
183 OS_SYS_RND_BUTT /* 非法类型 */
184 };
185
186 /*
187 * @brief 获取OS的版本号。
188 *
189 * @par 描述
190 * 获取OS的版本号。版本编号格式为UniProton xx.xx VERSIONID(XXX)。
191 *
192 * @attention 无
193 *
194 * @param 无。
195 *
196 * @retval 指向OS版本号的字符串指针。
197 * @par 依赖
198 * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
199 * @see 无
200 */
201 extern char *PRT_SysGetOsVersion(void);
202
203 /*
204 * @brief 业务给OS传递RND值,用作后续相关功能模块的保护。
205 *
206 * @par 描述: 业务传递RND值给OS,OS用于运行时必要的保护。
207 *
208 * @attention
209 * <ul>
210 * <li>栈保护随机值设置必须在PRT_HardBootInit中调用。</li>
211 * </ul>
212 *
213 * @param type [IN] 类型#enum SysRndNumType,设置的目标RND值的类型。
214 * @param rndNum [IN] 类型#U32,传递的RND值。
215 *
216 * @retval #OS_OK 0x00000000,操作成功。
217 * @retval #其它值,操作失败。
218 *
219 * @par 依赖
220 * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
221 */
222 extern U32 PRT_SysSetRndNum(enum SysRndNumType type, U32 rndNum);
223
224 /*
225 * @brief 复位单板。
226 *
227 * @par 描述
228 * 复位单板,程序重新加载执行。
229 *
230 * @attention
231 * <ul>
232 * <li>并非直接复位单板,而是关中断,等待看门狗复位。</li>
233 * <li>用户可以通过配置项OS_SYS_REBOOT_HOOK挂接复位函数。</li>
234 * </ul>
235 *
236 * @param 无。
237 *
238 * @retval 无
239 * @par 依赖
240 * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
241 * @see 无
242 */
243 extern void PRT_SysReboot(void);
244
245 /*
246 * @brief 获取当前核ID。
247 *
248 * @par 描述
249 * 获取当前核ID。
250 *
251 * @attention
252 * <ul>
253 * <li>获取的核ID为硬件寄存器中的ID号。</li>
254 * </ul>
255 *
256 * @param 无。
257 *
258 * @retval 物理核ID。
259 * @par 依赖
260 * <ul><li>prt_sys.h:该接口声明所在的头文件。</li></ul>
261 * @see 无
262 */
PRT_SysGetCoreId(void)263 OS_SEC_ALW_INLINE INLINE U32 PRT_SysGetCoreId(void)
264 {
265 return 0;
266 }
267
268 #ifdef __cplusplus
269 #if __cplusplus
270 }
271 #endif /* __cpluscplus */
272 #endif /* __cpluscplus */
273
274 #endif /* PRT_SYS_H */
275