• 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_HOOK_H
16 #define PRT_HOOK_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  * HOOK错误码:HOOK类型错误。
29  *
30  * 值: 0x02000901
31  *
32  * 解决方案:确认输入钩子是否为有效的OS_HOOK_TYPE_E类型。
33  */
34 #define OS_ERRNO_HOOK_TYPE_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_HOOK, 0x01)
35 
36 /*
37  * HOOK错误码:内存不足。
38  *
39  * 值: 0x02000902
40  *
41  * 解决方案:增加缺省分区大小。
42  */
43 #define OS_ERRNO_HOOK_NO_MEMORY OS_ERRNO_BUILD_ERROR(OS_MID_HOOK, 0x02)
44 
45 /*
46  * HOOK错误码:HOOK指针空。
47  *
48  * 值: 0x02000903
49  *
50  * 解决方案:检查入参的钩子,NULL指针不允许进行添加或删除。
51  */
52 #define OS_ERRNO_HOOK_PTR_NULL OS_ERRNO_BUILD_ERROR(OS_MID_HOOK, 0x03)
53 
54 /*
55  * HOOK错误码:HOOK已存在。
56  *
57  * 值: 0x02000904
58  *
59  * 解决方案:确认该钩子之前是否已经成功注册,所以再次注册失败。
60  */
61 #define OS_ERRNO_HOOK_EXISTED OS_ERRNO_BUILD_ERROR(OS_MID_HOOK, 0x04)
62 
63 /*
64  * HOOK错误码:HOOK已满。
65  *
66  * 值: 0x02000905
67  *
68  * 解决方案:若为多钩子可以增大配置,或删掉一部分钩子;若为单钩子则表示重复注册,建议先删除再注册。
69  */
70 #define OS_ERRNO_HOOK_FULL OS_ERRNO_BUILD_ERROR(OS_MID_HOOK, 0x05)
71 
72 /*
73  * HOOK错误码:HOOK不存在。
74  *
75  * 值: 0x02000906
76  *
77  * 解决方案:确认该钩子之前是否已经成功注册。
78  */
79 #define OS_ERRNO_HOOK_NOT_EXISTED OS_ERRNO_BUILD_ERROR(OS_MID_HOOK, 0x06)
80 
81 /*
82  * HOOK错误码:HOOK配置个数为0。
83  *
84  * 值: 0x02000907
85  *
86  * 解决方案:该类型钩子个数配置为0,添加或者删除某类型钩子前,需要先对其个数进行正确配置。
87  */
88 #define OS_ERRNO_HOOK_NOT_CFG OS_ERRNO_BUILD_ERROR(OS_MID_HOOK, 0x07)
89 
90 /*
91  * 用户可使用钩子类型枚举。
92  */
93 enum HookType {
94     OS_HOOK_HWI_ENTRY = 0,  // 硬中断进入钩子
95     OS_HOOK_HWI_EXIT,       // 硬中断退出钩子
96     OS_HOOK_TSK_SWITCH,     // 任务切换钩子
97     OS_HOOK_IDLE_PERIOD,    // IDLE钩子
98     OS_HOOK_TYPE_NUM        // 钩子总数
99 };
100 
101 /*
102  * 钩子模块配置信息的结构体定义。
103  */
104 struct HookModInfo {
105     U8 maxNum[(U32)OS_HOOK_TYPE_NUM];
106 };
107 
108 #ifdef __cplusplus
109 #if __cplusplus
110 }
111 #endif /* __cpluscplus */
112 #endif /* __cpluscplus */
113 
114 #endif /* PRT_HOOK_H */
115