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