• 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_HWI_H
16 #define PRT_HWI_H
17 
18 #include "prt_module.h"
19 #include "prt_errno.h"
20 #include "prt_buildef.h"
21 
22 #ifdef __cplusplus
23 #if __cplusplus
24 extern "C" {
25 #endif /* __cpluscplus */
26 #endif /* __cpluscplus */
27 
28 /*
29  * IPI触发类型。
30  */
31 enum OsHwiIpiType {
32     OS_TYPE_TRIGGER_BY_MASK = 0, /* 通过mask确定需要触发的目标核 */
33     OS_TYPE_TRIGGER_TO_OTHER, /* 触发除本核外的其他核 */
34     OS_TYPE_TRIGGER_TO_SELF, /* 触发本核 */
35     OS_TYPE_TRIGGER_BUTT /* 非法 */
36 };
37 
38 /*
39  * 支持的SGI中断编号为[0,15]
40  * 可用的核间中断号定义。
41  */
42 #define OS_HWI_IPI_NO_00                                  0
43 
44 /*
45  * 可用的核间中断号定义[OS占用1号:触发它核响应一次调度的IPI中断号]。
46  */
47 #define OS_HWI_IPI_NO_01                                  1
48 
49 /*
50  * 可用的核间中断号定义[OS占用2号:一个核异常后将其它核停住的IPI中断号]。
51  */
52 #define OS_HWI_IPI_NO_02                                  2
53 
54 /*
55  * 可用的核间中断号定义[OS占用3号:响应tick中断的核触发它核的模拟tickIPI中断号]。
56  */
57 #define OS_HWI_IPI_NO_03                                  3
58 
59 /*
60  * 可用的核间中断号定义[OS占用4号:核间通信用于核间通知的中断号]。
61  */
62 #define OS_HWI_IPI_NO_04                                  4
63 
64 /*
65  * 可用的核间中断号定义。
66  */
67 #define OS_HWI_IPI_NO_05                                  5
68 #define OS_HWI_IPI_NO_06                                  6
69 
70 /*
71  * 可用的核间中断号定义[OS占用7号:openamp要求Linux和从核使用同一个IPI,Linux核目前只能使用7号]。
72  */
73 #define OS_HWI_IPI_NO_07                                  7
74 
75 /*
76  * 可用的核间中断号定义。
77  */
78 #define OS_HWI_IPI_NO_08                                  8
79 #define OS_HWI_IPI_NO_09                                  9
80 #define OS_HWI_IPI_NO_10                                  10
81 #define OS_HWI_IPI_NO_011                                 11
82 #define OS_HWI_IPI_NO_012                                 12
83 #define OS_HWI_IPI_NO_013                                 13
84 #define OS_HWI_IPI_NO_014                                 14
85 #define OS_HWI_IPI_NO_015                                 15
86 
87 /*
88  * 硬中断错误码:中断号非法。
89  *
90  * 值: 0x02000801
91  *
92  * 解决方案:确保中断号合法,中断号请查看硬件手册。
93  */
94 #define OS_ERRNO_HWI_NUM_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x01)
95 
96 /*
97  * 硬中断错误码:优先级非法。
98  *
99  * 值: 0x02000802
100  *
101  * 解决方案:确保优先级合法。
102  */
103 #define OS_ERRNO_HWI_PRI_ERROR OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x02)
104 
105 /*
106  * 硬中断错误码:硬中断已被创建或相应中断向量号已被其它中断占用。
107  *
108  * 值: 0x02000803
109  *
110  * 解决方案:更换中断号
111  */
112 #define OS_ERRNO_HWI_ALREADY_CREATED OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x03)
113 
114 /*
115  * 硬中断错误码:硬中断处理函数为空。
116  *
117  * 值: 0x02000804
118  *
119  * 解决方案:传入非空的有效处理函数
120  */
121 #define OS_ERRNO_HWI_PROC_FUNC_NULL OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x04)
122 
123 /*
124  * 硬中断错误码:未创建的硬中断被响应。
125  *
126  * 值: 0x03000805
127  *
128  * 解决方案:先创建硬中断,然后使能并触发该中断使其得到响应
129  */
130 #define OS_ERRNO_HWI_UNCREATED OS_ERRNO_BUILD_FATAL(OS_MID_HWI, 0x05)
131 
132 /*
133  * 硬中断错误码:设置硬中断属性时,属性设置与之前设置值不一致
134  *
135  * 值: 0x02000806
136  *
137  * 解决方案:确认当前设置属性值与之前是否一致。如果确需修改属性,请先删除该硬中断。
138  */
139 #define OS_ERRNO_HWI_ATTR_CONFLICTED OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x06)
140 
141 /*
142  * 硬中断错误码:组合型中断创建失败,为组合型中断节点申请系统默认私有FSC内存失败,或申请中断描述信息失败。
143  *
144  * 值: 0x02000807
145  *
146  * 解决方案: 增大系统默认私有FSC分区大小
147  */
148 #define OS_ERRNO_HWI_MEMORY_ALLOC_FAILED OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x07)
149 
150 /*
151  * 硬中断错误码:组合型中断函数注册失败,该组合型中断已创建了相同的中断处理函数。
152  *
153  * 值: 0x02000808
154  *
155  * 解决方案: 更换中断处理函数
156  */
157 #define OS_ERRNO_HWI_COMBINEHOOK_ALREADY_CREATED OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x08)
158 
159 /*
160  * 硬中断错误码:创建的中断函数即不是独立型,也不是组合型
161  *
162  * 值: 0x02000809
163  *
164  * 解决方案: 硬中断模式只能设置为独立型或组合型
165  */
166 #define OS_ERRNO_HWI_MODE_ERROR OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x09)
167 
168 /*
169  * 硬中断错误码:删除未创建或者已经被删除的硬中断。
170  *
171  * 值: 0x0200080a
172  *
173  * 解决方案: 删除已创建并且未被删除的硬中断
174  */
175 #define OS_ERRNO_HWI_DELETED OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x0a)
176 
177 /*
178  * 硬中断错误码:未进行硬中断模式设置。
179  *
180  * 值: 0x0200080b
181  *
182  * 解决方案: 调用中断创建函数前,需要先调用中断模式设置函数,进行模式参数设置
183  */
184 #define OS_ERRNO_HWI_MODE_UNSET OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x0b)
185 
186 /*
187  * 硬中断错误码:硬中断触发接口入参错误,输入无效的核号。
188  *
189  * 值: 0x0200080c
190  *
191  * 解决方案: 输入本核核号
192  */
193 #define OS_ERRNO_HWI_CORE_ID_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x0c)
194 
195 /*
196  * 硬中断错误码:硬件上报错误中断。
197  *
198  * 值: 0x0200080d
199  *
200  * 解决方案:无。
201  */
202 #define OS_ERRNO_HWI_HW_REPORT_HWINO_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x0d)
203 
204 /*
205  * 系统基本功能错误码:注册不可删除的中断失败
206  *
207  * 值: 0x0300080e
208  *
209  * 解决方案: 请确保传是独立型中断,或者修改OS_HWI_INTERNAL_NUM值
210  */
211 #define OS_ERROR_HWI_INT_REGISTER_FAILED OS_ERRNO_BUILD_FATAL(OS_MID_HWI, 0x0e)
212 
213 /*
214  * 硬中断错误码:中断内存资源申请失败
215  *
216  * 值: 0x0200080f
217  *
218  * 解决方案: 检查默认分区大小配置是否正确
219  */
220 #define OS_ERRNO_HWI_RESOURCE_ALLOC_FAILED OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x0f)
221 
222 /*
223  * 核间中断错误码:中断目标核不支持1-N
224  *
225  * 值: 0x02000810
226  *
227  * 解决方案:目标核掩码只描述1个目标核,不能描述多个目标核
228  */
229 #define OS_ERRNO_MULTI_TARGET_CORE OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x10)
230 
231 /*
232  * 硬中断错误码:删除os内部硬中断。
233  *
234  * 值: 0x02000811
235  *
236  * 解决方案:不允许删除os内部硬中断
237  */
238 #define OS_ERRNO_HWI_DELETE_INT OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x11)
239 
240 /*
241  * 硬中断错误码:硬中断地址信息配置错误
242  *
243  * 值: 0x02000812
244  *
245  * 解决方案: 根据核手册正确配置OS_GIC_BASE_ADDR/OS_GICR_OFFSET/OS_GICR_STRIDE
246  */
247 #define OS_ERROR_HWI_BASE_ADDR_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_HWI, 0x12)
248 
249 /*
250  * 硬中断优先级的类型定义。
251  */
252 typedef U16 HwiPrior;
253 
254 /*
255  * 硬中断模式配置信息的类型定义。
256  */
257 typedef U16 HwiMode;
258 
259 /*
260  * 硬中断处理函数的参数类型定义。
261  */
262 typedef uintptr_t HwiArg;
263 
264 /*
265  * 硬中断号的类型定义。
266  */
267 typedef U32 HwiHandle;
268 
269 /*
270  * 组合型硬中断。
271  */
272 #define OS_HWI_MODE_COMBINE 0x8000
273 
274 /*
275  * 独立型硬中断。
276  */
277 #define OS_HWI_MODE_ENGROSS 0x4000
278 
279 /*
280  * 缺省硬中断模式。
281  */
282 #define OS_HWI_MODE_DEFAULT OS_HWI_MODE_ENGROSS
283 
284 /*
285  * 普通硬中断。
286  */
287 #define OS_HWI_TYPE_NORMAL 0x00
288 
289 /*
290  * 中断属性组装宏(共8bit)。
291  */
292 #define OS_HWI_ATTR(mode, type) (HwiMode)((HwiMode)(mode) | (HwiMode)(type))
293 
294 /*
295  * @brief 硬中断处理函数的类型定义。
296  *
297  * @par 描述
298  * 通过硬中断处理函数的类型定义硬中断处理函数,在硬中断触发时调用该中断处理函数。
299  *
300  * @attention 无。
301  *
302  * @param  param1 [IN] 类型#HwiArg,硬中断处理函数的参数。
303  *
304  * @retval 无。
305  * @par 依赖
306  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
307  * @see 无。
308  */
309 typedef void (*HwiProcFunc)(HwiArg);
310 
311 /*
312  * @brief 硬中断调用处理函数钩子函数类型定义。
313  *
314  * @par 描述
315  * 用户通过硬中断调用钩子处理函数类型定义硬中断调用处理函数钩子,在硬中断调用处理函数时,调用该钩子。
316  * @attention 无。
317  *
318  * @param hwiNum [IN]  类型#U32,硬中断号。
319  *
320  * @retval 无。
321  * @par 依赖
322  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
323  */
324 typedef void (*HwiEntryHook)(U32 hwiNum);
325 
326 /*
327  * @brief 硬中断退出处理函数钩子函数类型定义。
328  *
329  * @par 描述
330  * 用户通过硬中断退出钩子处理函数类型定义硬中断退出处理函数钩子,在硬中断退出处理函数时,调用该钩子。
331  * @attention 无。
332  *
333  * @param hwiNum [IN]  类型#U32,硬中断号。
334  *
335  * @retval 无。
336  * @par 依赖
337  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
338  */
339 typedef void (*HwiExitHook)(U32 hwiNum);
340 
341 /*
342  * @brief 设置硬中断属性接口。
343  *
344  * @par 描述
345  * 在创建硬中断前,必须要配置好硬中断的优先级和模式,包括独立型(#OS_HWI_MODE_ENGROSS)和
346  * 组合型(#OS_HWI_MODE_COMBINE)两种配置模式。
347  *
348  * @attention
349  * <ul>
350  * <li>OS已经占用的不能被使用</li>
351  * </ul>
352  *
353  * @param hwiNum  [IN]  类型#HwiHandle,硬中断号。
354  * @param hwiPrio [IN]  类型#HwiPrior,硬中断优先级。
355  * @param mode    [IN]  类型#HwiMode,设置的中断模式,为独立型(#OS_HWI_MODE_ENGROSS)或者组合型(#OS_HWI_MODE_COMBINE)。
356  *
357  * @retval #OS_OK  0x00000000,硬中断属性设置成功。
358  * @retval #其它值,属性设置失败。
359  * @par 依赖
360  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
361  * @see PRT_HwiCreate
362  */
363 extern U32 PRT_HwiSetAttr(HwiHandle hwiNum, HwiPrior hwiPrio, HwiMode mode);
364 
365 /*
366  * @brief 创建硬中断函数。
367  *
368  * @par 描述
369  * 注册硬中断的处理函数。
370  *
371  * @attention
372  * <ul>
373  * <li>在调用该函数之前,请先确保已经设置了中断属性。</li>
374  * <li>硬中断创建成功后,并不使能相应向量的中断,需要显式调用#PRT_HwiEnable单独使能。</li>
375  * </ul>
376  *
377  * @param hwiNum  [IN]  类型#HwiHandle,硬中断号。
378  * @param handler [IN]  类型#HwiProcFunc,硬中断触发时的处理函数。
379  * @param arg     [IN]  类型#HwiArg,调用硬中断处理函数时传递的参数。
380  *
381  * @retval #OS_OK  0x00000000,硬中断创建成功。
382  * @retval #其它值,创建失败。
383  * @par 依赖
384  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
385  * @see PRT_HwiDelete
386  */
387 extern U32 PRT_HwiCreate(HwiHandle hwiNum, HwiProcFunc handler, HwiArg arg);
388 
389 /*
390  * @brief 删除硬中断函数。
391  *
392  * @par 描述
393  * 屏蔽相应硬中断或事件,取消硬中断处理函数的注册。
394  *
395  * @attention
396  * <ul>
397  * <li>不能删除OS占用的中断号。</li>
398  * </ul>
399  *
400  * @param hwiNum [IN]  类型#HwiHandle,硬中断号。
401  *
402  * @retval #OS_OK  0x00000000,硬中断删除成功。
403  * @retval #其它值,删除失败。
404  * @par 依赖
405  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
406  * @see PRT_HwiCreate
407  */
408 extern U32 PRT_HwiDelete(HwiHandle hwiNum);
409 
410 /*
411  * @brief 激活指定核号内的硬中断。
412  *
413  * @par 描述
414  * 激活指定核号内的软件可触发的硬中断
415  *
416  * @attention
417  *
418  * @param dstCore [IN]  类型#U32,目标核号。目前只支持指定为本核。
419  * @param hwiNum  [IN]  类型#HwiHandle,硬中断号,只支持软件可触发的中断号。
420  *
421  * @retval #OS_OK  0x00000000,硬中断激活成功。
422  * @retval #其它值,激活失败。
423  * @par 依赖
424  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
425  */
426 extern U32 PRT_HwiTrigger(U32 dstCore, HwiHandle hwiNum);
427 
428 /*
429  * @brief 清空中断请求位。
430  *
431  * @par 描述
432  * 清除所有的中断请求位。即放弃当前已触发中断的的响应。
433  *
434  * @attention
435  * <ul>
436  * 清除所有的中断请求位(对于NMI中断无效)。
437  * </ul>
438  *
439  * @param 无。
440  *
441  * @retval 无。
442  * @par 依赖
443  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
444  * @see PRT_HwiClearPendingBit
445  */
446 extern void PRT_HwiClearAllPending(void);
447 
448 /*
449  * @brief 清除硬中断的Pending位。
450  *
451  * @par 描述
452  * 显式清除硬中断或事件的请求位,因为有的硬件响应中断后不会自动清Pending位。
453  *
454  * @attention
455  *
456  * @param hwiNum [IN]  类型#HwiHandle,硬中断号。
457  *
458  * @retval #OS_OK  0x00000000,硬中断请求位清除成功。
459  * @retval #其它值,清除失败。
460  * @par 依赖
461  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
462  * @see PRT_HwiCreate
463  */
464 extern U32 PRT_HwiClearPendingBit(HwiHandle hwiNum);
465 
466 /*
467  * @brief 屏蔽指定的硬中断。
468  *
469  * @par 描述
470  * 禁止核响应指定硬中断的请求。
471  *
472  * @attention
473  *
474  * @param hwiNum [IN]  类型#HwiHandle,依据不同的芯片,硬中断号或中断向量号,见注意事项。
475  *
476  * @retval #OS_OK  0x00000000,硬中断去使能成功。
477  * @retval #其它值,硬中断去使能失败。
478  * @par 依赖
479  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
480  * @see PRT_HwiEnable
481  */
482 extern U32 PRT_HwiDisable(HwiHandle hwiNum);
483 
484 /*
485  * @brief 使能指定的硬中断。
486  *
487  * @par 描述
488  * 允许核响应指定硬中断的请求。
489  *
490  * @attention
491  * <ul>
492  * <li>对于不同芯片,此返回值代表的意义有所差异,差异细节见下面返回值说明</li>
493  * </ul>
494  *
495  * @param hwiNum [IN]  类型#HwiHandle,依据不同的芯片,硬中断号或中断向量号,见注意事项。
496  *
497  * @retval #OS_OK  0x00000000,硬中断使能成功。
498  * @retval #其它值,硬中断使能失败。
499  * @par 依赖
500  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
501  * @see PRT_HwiDisable
502  */
503 extern U32 PRT_HwiEnable(HwiHandle hwiNum);
504 
505 /*
506  * @brief 添加硬中断进入钩子
507  *
508  * @par 描述
509  * 添加硬中断进入钩子。该钩子函数在进入硬中断ISR前被调用。
510  *
511  * @attention
512  * <ul>
513  * <li>不同钩子函数间执行的先后顺序,不应当存在依赖关系。</li>
514  * <li>不应在钩子函数里调用可能引起线程调度或阻塞的OS接口。</li>
515  * <li>最大支持钩子数需静态配置</li>
516  * </ul>
517  *
518  * @param hook [IN]  类型#HwiEntryHook,中断进入钩子函数。
519  *
520  * @par 依赖
521  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
522  * @see PRT_HwiDelEntryHook | PRT_HookAdd | PRT_HwiAddExitHook
523  */
524 extern U32 PRT_HwiAddEntryHook(HwiEntryHook hook);
525 
526 /*
527  * @brief 删除硬中断进入钩子
528  *
529  * @par 描述
530  * 删除硬中断进入钩子。该钩子函数将停止在进入硬中断ISR前的调用。
531  *
532  * @attention
533  * <ul>
534  * <li>不同钩子函数间执行的先后顺序,不应当存在依赖关系。</li>
535  * <li>不应在钩子函数里调用可能引起线程调度或阻塞的OS接口。</li>
536  * <li>最大支持钩子数需静态配置</li>
537  * </ul>
538  *
539  * @param hook [IN]  类型#HwiEntryHook,中断进入钩子函数。
540  *
541  * @par 依赖
542  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
543  * @see PRT_HwiAddEntryHook | PRT_HookDel
544  */
545 extern U32 PRT_HwiDelEntryHook(HwiEntryHook hook);
546 
547 /*
548  * @brief 添加硬中断退出钩子
549  *
550  * @par 描述
551  * 添加硬中断退出钩子。该钩子函数在退出硬中断ISR后被调用。
552  *
553  * @attention
554  * <ul>
555  * <li>不同钩子函数间执行的先后顺序,不应当存在依赖关系。</li>
556  * <li>不应在钩子函数里调用可能引起线程调度或阻塞的OS接口。</li>
557  * <li>最大支持钩子数需静态配置</li>
558  * </ul>
559  *
560  * @param hook [IN]  类型#HwiExitHook,中断退出钩子函数。
561  *
562  * @par 依赖
563  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
564  * @see PRT_HwiDelExitHook | PRT_HookAdd | PRT_HwiAddEntryHook
565  */
566 extern U32 PRT_HwiAddExitHook(HwiExitHook hook);
567 
568 /*
569  * @brief 删除硬中断退出钩子
570  *
571  * @par 描述
572  * 删除硬中断退出钩子。该钩子函数将停止在退出硬中断ISR后的调用。
573  *
574  * @attention
575  * <ul>
576  * <li>不同钩子函数间执行的先后顺序,不应当存在依赖关系。</li>
577  * <li>不应在钩子函数里调用可能引起线程调度或阻塞的OS接口。</li>
578  * <li>最大支持钩子数需静态配置</li>
579  * </ul>
580  *
581  * @param hook [IN]  类型#HwiExitHook,中断退出钩子函数。
582  *
583  * @par 依赖
584  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
585  * @see PRT_HwiAddExitHook | PRT_HookDel
586  */
587 extern U32 PRT_HwiDelExitHook(HwiExitHook hook);
588 
589 /*
590  * @brief 开中断。
591  *
592  * @par 描述
593  * 开启全局可屏蔽中断。
594  *
595  * @attention 中断服务函数里慎用该接口,会引起中断优先级反转
596  *
597  * @param 无。
598  *
599  * @retval 开启全局中断前的中断状态值。
600  * @par 依赖
601  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
602  * @see PRT_HwiLock | PRT_HwiRestore
603  */
604 extern uintptr_t PRT_HwiUnLock(void);
605 
606 /*
607  * @brief 关中断。
608  *
609  * @par 描述
610  * 关闭全局可屏蔽中断。
611  *
612  * @attention 在关全局中断后,禁止调用引起内核调度的相关接口,如PRT_TaskDelay接口
613  *
614  * @param 无。
615  *
616  * @retval 关闭全局中断前的中断状态值。
617  * @par 依赖
618  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
619  * @see PRT_HwiUnLock | PRT_HwiRestore
620  */
621 extern uintptr_t PRT_HwiLock(void);
622 
623 /*
624  * @brief 恢复中断状态接口。
625  *
626  * @par 描述
627  * 恢复原中断状态寄存器。
628  *
629  * @attention
630  * <ul>
631  * <li>该接口必须和关闭全局中断或者是开启全局中断接口成对使用,以关全局中断或者开全局中断操作的返回值为入参</li>
632  * <li>以保证中断可以恢复到关全局中断或者开全局中断操作前的状态</li>
633  * </ul>
634  * @param intSave [IN]  类型#uintptr_t,关全局中断PRT_HwiLock和开全局中断PRT_HwiUnLock的返回值。
635  *
636  * @retval 无
637  * @par 依赖
638  * <ul><li>prt_hwi.h:该接口声明所在的头文件。</li></ul>
639  * @see PRT_HwiUnLock | PRT_HwiLock
640  */
641 extern void PRT_HwiRestore(uintptr_t intSave);
642 
643 #ifdef __cplusplus
644 #if __cplusplus
645 }
646 #endif /* __cpluscplus */
647 #endif /* __cpluscplus */
648 
649 #endif /* PRT_HWI_H */
650