• 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  * 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