Description: add hook framework
Change-Id: I45c37c3c92e74e676818e713fa46b3a9fe970e68
This commit is contained in:
parent
9a9ffb0770
commit
62caa74382
|
@ -28,12 +28,14 @@
|
|||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "los_interrupt.h"
|
||||
#include <stdarg.h>
|
||||
#include "securec.h"
|
||||
#include "los_context.h"
|
||||
#include <stdarg.h>
|
||||
#include "los_arch_interrupt.h"
|
||||
#include "los_context.h"
|
||||
#include "los_debug.h"
|
||||
#include "los_hook.h"
|
||||
#include "los_task.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_membox.h"
|
||||
|
@ -176,6 +178,8 @@ LITE_OS_SEC_TEXT VOID HalInterrupt(VOID)
|
|||
|
||||
hwiIndex = HalIntNumGet();
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_ISR_ENTER, hwiIndex);
|
||||
|
||||
HalPreInterruptHandler(hwiIndex);
|
||||
|
||||
#if (OS_HWI_WITH_ARG == 1)
|
||||
|
@ -193,6 +197,8 @@ LITE_OS_SEC_TEXT VOID HalInterrupt(VOID)
|
|||
intSave = LOS_IntLock();
|
||||
g_intCount--;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_ISR_EXIT, hwiIndex);
|
||||
}
|
||||
|
||||
/* ****************************************************************************
|
||||
|
|
|
@ -28,12 +28,14 @@
|
|||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "los_interrupt.h"
|
||||
#include <stdarg.h>
|
||||
#include "securec.h"
|
||||
#include "los_context.h"
|
||||
#include <stdarg.h>
|
||||
#include "los_arch_interrupt.h"
|
||||
#include "los_context.h"
|
||||
#include "los_debug.h"
|
||||
#include "los_hook.h"
|
||||
#include "los_task.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_membox.h"
|
||||
|
@ -172,6 +174,8 @@ LITE_OS_SEC_TEXT VOID HalInterrupt(VOID)
|
|||
|
||||
hwiIndex = HalIntNumGet();
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_ISR_ENTER, hwiIndex);
|
||||
|
||||
HalPreInterruptHandler(hwiIndex);
|
||||
|
||||
#if (OS_HWI_WITH_ARG == 1)
|
||||
|
@ -189,6 +193,8 @@ LITE_OS_SEC_TEXT VOID HalInterrupt(VOID)
|
|||
intSave = LOS_IntLock();
|
||||
g_intCount--;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_ISR_EXIT, hwiIndex);
|
||||
}
|
||||
|
||||
/* ****************************************************************************
|
||||
|
|
|
@ -559,6 +559,14 @@ extern UINT8 *m_aucSysMem0;
|
|||
#define LOSCFG_KERNEL_TRACE 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @ingroup los_config
|
||||
* Configuration trace tool
|
||||
*/
|
||||
#ifndef LOSCFG_DEBUG_HOOK
|
||||
#define LOSCFG_DEBUG_HOOK 0
|
||||
#endif
|
||||
|
||||
/* =============================================================================
|
||||
printf configuration
|
||||
============================================================================= */
|
||||
|
|
|
@ -37,9 +37,10 @@
|
|||
#ifndef _LOS_TASK_H
|
||||
#define _LOS_TASK_H
|
||||
|
||||
#include "los_tick.h"
|
||||
#include "los_config.h"
|
||||
#include "los_context.h"
|
||||
#include "los_event.h"
|
||||
#include "los_tick.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
@ -1551,13 +1552,13 @@ extern UINT32 LOS_CpupUsageMonitor(CPUP_TYPE_E type, CPUP_MODE_E mode, UINT32 ta
|
|||
* @ingroup los_task
|
||||
* @brief the high-order mask of roll num.
|
||||
*/
|
||||
#define OS_TSK_HIGH_BITS_MASK (OS_TSK_SORTLINK_MASK << OS_TSK_LOW_BITS)
|
||||
#define OS_TSK_HIGH_BITS_MASK (OS_TSK_SORTLINK_MASK << OS_TSK_LOW_BITS)
|
||||
|
||||
/**
|
||||
* @ingroup los_task
|
||||
* @brief the low-order mask of roll num.
|
||||
*/
|
||||
#define OS_TSK_LOW_BITS_MASK (~OS_TSK_HIGH_BITS_MASK)
|
||||
#define OS_TSK_LOW_BITS_MASK (~OS_TSK_HIGH_BITS_MASK)
|
||||
|
||||
/**
|
||||
* @ingroup los_task
|
||||
|
@ -1580,7 +1581,7 @@ extern UINT32 LOS_CpupUsageMonitor(CPUP_TYPE_E type, CPUP_MODE_E mode, UINT32 ta
|
|||
* <ul><li>los_task_pri.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see
|
||||
*/
|
||||
#define OS_TSK_GET_INDEX(taskID) (taskID)
|
||||
#define OS_TSK_GET_INDEX(taskID) (taskID)
|
||||
|
||||
/**
|
||||
* @ingroup los_task
|
||||
|
@ -1614,8 +1615,8 @@ extern UINT32 LOS_CpupUsageMonitor(CPUP_TYPE_E type, CPUP_MODE_E mode, UINT32 ta
|
|||
* <ul><li>los_task_pri.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see
|
||||
*/
|
||||
#define OS_TCB_FROM_TID(taskID) (((LosTaskCB *)g_taskCBArray) + (taskID))
|
||||
#define OS_IDLE_TASK_ENTRY ((TSK_ENTRY_FUNC)OsIdleTask)
|
||||
#define OS_TCB_FROM_TID(taskID) (((LosTaskCB *)g_taskCBArray) + (taskID))
|
||||
#define OS_IDLE_TASK_ENTRY ((TSK_ENTRY_FUNC)OsIdleTask)
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -29,8 +29,11 @@
|
|||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "los_task.h"
|
||||
#include "los_event.h"
|
||||
#include "los_hook.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_task.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
|
@ -44,6 +47,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_EventInit(PEVENT_CB_S eventCB)
|
|||
}
|
||||
eventCB->uwEventID = 0;
|
||||
LOS_ListInit(&eventCB->stEventList);
|
||||
OsHookCall(LOS_HOOK_TYPE_EVENT_INIT);
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
@ -110,6 +114,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_EventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UIN
|
|||
}
|
||||
intSave = LOS_IntLock();
|
||||
ret = LOS_EventPoll(&(eventCB->uwEventID), eventMask, mode);
|
||||
OsHookCall(LOS_HOOK_TYPE_EVENT_READ, eventCB, eventMask, mode);
|
||||
if (ret == 0) {
|
||||
if (timeOut == 0) {
|
||||
LOS_IntRestore(intSave);
|
||||
|
@ -159,6 +164,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_EventWrite(PEVENT_CB_S eventCB, UINT32 events)
|
|||
}
|
||||
intSave = LOS_IntLock();
|
||||
eventCB->uwEventID |= events;
|
||||
OsHookCall(LOS_HOOK_TYPE_EVENT_WRITE, eventCB);
|
||||
if (!LOS_ListEmpty(&eventCB->stEventList)) {
|
||||
for (resumedTask = LOS_DL_LIST_ENTRY((&eventCB->stEventList)->pstNext, LosTaskCB, pendList);
|
||||
&resumedTask->pendList != (&eventCB->stEventList);) {
|
||||
|
@ -200,6 +206,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_EventDestroy(PEVENT_CB_S eventCB)
|
|||
eventCB->stEventList.pstNext = (LOS_DL_LIST *)NULL;
|
||||
eventCB->stEventList.pstPrev = (LOS_DL_LIST *)NULL;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_EVENT_DESTROY);
|
||||
return LOS_OK;
|
||||
}
|
||||
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_EventClear(PEVENT_CB_S eventCB, UINT32 events)
|
||||
|
@ -211,6 +218,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_EventClear(PEVENT_CB_S eventCB, UINT32 events)
|
|||
intSave = LOS_IntLock();
|
||||
eventCB->uwEventID &= events;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_EVENT_CLEAR, eventCB);
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,14 +29,14 @@
|
|||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "los_config.h"
|
||||
#include "stdarg.h"
|
||||
#include "los_arch.h"
|
||||
#include "los_queue.h"
|
||||
#include "los_config.h"
|
||||
#include "los_debug.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_mux.h"
|
||||
#include "los_queue.h"
|
||||
#include "los_sem.h"
|
||||
#include "los_debug.h"
|
||||
#include "stdarg.h"
|
||||
|
||||
#if (LOSCFG_PLATFORM_HWI == 1)
|
||||
#include "los_interrupt.h"
|
||||
|
|
|
@ -28,11 +28,13 @@
|
|||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include "los_config.h"
|
||||
#include "los_interrupt.h"
|
||||
|
||||
#include "los_mux.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_config.h"
|
||||
#include "los_debug.h"
|
||||
#include "los_hook.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_memory.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
@ -112,6 +114,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_MuxCreate(UINT32 *muxHandle)
|
|||
LOS_ListInit(&muxCreated->muxList);
|
||||
*muxHandle = (UINT32)muxCreated->muxID;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_MUX_CREATE, muxCreated);
|
||||
return LOS_OK;
|
||||
ERR_HANDLER:
|
||||
OS_RETURN_ERROR_P2(errLine, errNo);
|
||||
|
@ -152,6 +155,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_MuxDelete(UINT32 muxHandle)
|
|||
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_MUX_DELETE, muxDeleted);
|
||||
return LOS_OK;
|
||||
ERR_HANDLER:
|
||||
OS_RETURN_ERROR_P2(errLine, errNo);
|
||||
|
@ -207,13 +211,13 @@ LITE_OS_SEC_TEXT UINT32 LOS_MuxPend(UINT32 muxHandle, UINT32 timeout)
|
|||
muxPended->owner = runningTask;
|
||||
muxPended->priority = runningTask->priority;
|
||||
LOS_IntRestore(intSave);
|
||||
return LOS_OK;
|
||||
goto HOOK;
|
||||
}
|
||||
|
||||
if (muxPended->owner == runningTask) {
|
||||
muxPended->muxCount++;
|
||||
LOS_IntRestore(intSave);
|
||||
return LOS_OK;
|
||||
goto HOOK;
|
||||
}
|
||||
|
||||
if (!timeout) {
|
||||
|
@ -230,6 +234,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_MuxPend(UINT32 muxHandle, UINT32 timeout)
|
|||
OsTaskWait(&muxPended->muxList, OS_TASK_STATUS_PEND, timeout);
|
||||
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_MUX_PEND, muxPended);
|
||||
LOS_Schedule();
|
||||
|
||||
if (runningTask->taskStatus & OS_TASK_STATUS_TIMEOUT) {
|
||||
|
@ -241,6 +246,10 @@ LITE_OS_SEC_TEXT UINT32 LOS_MuxPend(UINT32 muxHandle, UINT32 timeout)
|
|||
|
||||
return LOS_OK;
|
||||
|
||||
HOOK:
|
||||
OsHookCall(LOS_HOOK_TYPE_MUX_PEND, muxPended);
|
||||
return LOS_OK;
|
||||
|
||||
ERROR_MUX_PEND:
|
||||
LOS_IntRestore(intSave);
|
||||
OS_RETURN_ERROR(retErr);
|
||||
|
@ -276,6 +285,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_MuxPost(UINT32 muxHandle)
|
|||
|
||||
if (--(muxPosted->muxCount) != 0) {
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_MUX_POST, muxPosted);
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
@ -294,6 +304,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_MuxPost(UINT32 muxHandle)
|
|||
OsTaskWake(resumedTask, OS_TASK_STATUS_PEND);
|
||||
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_MUX_POST, muxPosted);
|
||||
LOS_Schedule();
|
||||
} else {
|
||||
LOS_IntRestore(intSave);
|
||||
|
|
|
@ -28,14 +28,16 @@
|
|||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include "los_config.h"
|
||||
|
||||
#include "los_queue.h"
|
||||
#include "securec.h"
|
||||
#include "los_membox.h"
|
||||
#include "los_task.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_config.h"
|
||||
#include "los_debug.h"
|
||||
#include "los_hook.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_membox.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_task.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
@ -152,6 +154,8 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_QueueCreate(CHAR *queueName,
|
|||
|
||||
*queueID = queueCB->queueID;
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_QUEUE_CREATE, queueCB);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
@ -397,6 +401,9 @@ LITE_OS_SEC_TEXT UINT32 LOS_QueueRead(UINT32 queueID, VOID *bufferAddr, UINT32 b
|
|||
}
|
||||
|
||||
operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_READ, OS_QUEUE_HEAD, OS_QUEUE_POINT);
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_QUEUE_READ, (LosQueueCB *)GET_QUEUE_HANDLE(queueID));
|
||||
|
||||
return OsQueueOperate(queueID, operateType, bufferAddr, &bufferSize, timeOut);
|
||||
}
|
||||
|
||||
|
@ -413,6 +420,9 @@ LITE_OS_SEC_TEXT UINT32 LOS_QueueWrite(UINT32 queueID, VOID *bufferAddr, UINT32
|
|||
}
|
||||
|
||||
operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_WRITE, OS_QUEUE_TAIL, OS_QUEUE_POINT);
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_QUEUE_WRITE, (LosQueueCB *)GET_QUEUE_HANDLE(queueID));
|
||||
|
||||
return OsQueueOperate(queueID, operateType, &bufferAddr, &size, timeOut);
|
||||
}
|
||||
|
||||
|
@ -602,6 +612,8 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_QueueDelete(UINT32 queueID)
|
|||
LOS_ListAdd(&g_freeQueueList, &queueCB->readWriteList[OS_QUEUE_WRITE]);
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_QUEUE_DELETE, queueCB);
|
||||
|
||||
ret = LOS_MemFree(m_aucSysMem0, (VOID *)queue);
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -28,11 +28,14 @@
|
|||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include "los_config.h"
|
||||
|
||||
#include "los_sem.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_arch.h"
|
||||
#include "los_config.h"
|
||||
#include "los_debug.h"
|
||||
#include "los_hook.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_memory.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
@ -118,6 +121,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsSemCreate(UINT16 count, UINT16 maxCount, UINT32 *
|
|||
LOS_ListInit(&semCreated->semList);
|
||||
*semHandle = (UINT32)semCreated->semID;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_SEM_CREATE, semCreated);
|
||||
return LOS_OK;
|
||||
|
||||
ERR_HANDLER:
|
||||
|
@ -181,6 +185,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_SemDelete(UINT32 semHandle)
|
|||
LOS_ListAdd(&g_unusedSemList, &semDeleted->semList);
|
||||
semDeleted->semStat = OS_SEM_UNUSED;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_SEM_DELETE, semDeleted);
|
||||
return LOS_OK;
|
||||
ERR_HANDLER:
|
||||
OS_RETURN_ERROR_P2(errLine, errNo);
|
||||
|
@ -235,6 +240,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_SemPend(UINT32 semHandle, UINT32 timeout)
|
|||
if (semPended->semCount > 0) {
|
||||
semPended->semCount--;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_SEM_PEND, semPended, runningTask);
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
@ -247,6 +253,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_SemPend(UINT32 semHandle, UINT32 timeout)
|
|||
runningTask->taskSem = (VOID *)semPended;
|
||||
OsTaskWait(&semPended->semList, OS_TASK_STATUS_PEND, timeout);
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_SEM_PEND, semPended, runningTask);
|
||||
LOS_Schedule();
|
||||
|
||||
if (runningTask->taskStatus & OS_TASK_STATUS_TIMEOUT) {
|
||||
|
@ -297,10 +304,12 @@ LITE_OS_SEC_TEXT UINT32 LOS_SemPost(UINT32 semHandle)
|
|||
OsTaskWake(resumedTask, OS_TASK_STATUS_PEND);
|
||||
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_SEM_POST, semPosted, resumedTask);
|
||||
LOS_Schedule();
|
||||
} else {
|
||||
semPosted->semCount++;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_SEM_POST, semPosted, resumedTask);
|
||||
}
|
||||
|
||||
return LOS_OK;
|
||||
|
|
|
@ -28,18 +28,21 @@
|
|||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include "los_config.h"
|
||||
|
||||
#include "los_task.h"
|
||||
#include "securec.h"
|
||||
#include "los_config.h"
|
||||
#include "los_debug.h"
|
||||
#include "los_hook.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_mpu.h"
|
||||
#include "los_mux.h"
|
||||
#include "los_sem.h"
|
||||
#include "los_timer.h"
|
||||
#include "los_interrupt.h"
|
||||
#if (LOSCFG_BASE_CORE_CPUP == 1)
|
||||
#include "los_cpup.h"
|
||||
#endif
|
||||
#include "los_debug.h"
|
||||
#include "los_mpu.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
@ -270,10 +273,12 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTaskPriModify(LosTaskCB *taskCB, UINT16 priority)
|
|||
taskCB->taskStatus &= (~OS_TASK_STATUS_READY);
|
||||
taskCB->priority = priority;
|
||||
taskCB->taskStatus |= OS_TASK_STATUS_READY;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, taskCB);
|
||||
OsPriqueueEnqueue(&taskCB->pendList, taskCB->priority);
|
||||
} else {
|
||||
taskCB->priority = priority;
|
||||
}
|
||||
OsHookCall(LOS_HOOK_TYPE_TASK_PRIMODIFY, taskCB, taskCB->priority);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -379,6 +384,7 @@ LITE_OS_SEC_TEXT VOID OsTaskScan(VOID)
|
|||
|
||||
if (!(tempStatus & OS_TASK_STATUS_SUSPEND)) {
|
||||
taskCB->taskStatus |= OS_TASK_STATUS_READY;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, taskCB);
|
||||
OsPriqueueEnqueue(&taskCB->pendList, taskCB->priority);
|
||||
needSchedule = TRUE;
|
||||
}
|
||||
|
@ -987,6 +993,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreateOnly(UINT32 *taskID, TSK_INIT_PARAM_S
|
|||
}
|
||||
|
||||
*taskID = taskCB->taskID;
|
||||
OsHookCall(LOS_HOOK_TYPE_TASK_CREATE, taskCB);
|
||||
return retVal;
|
||||
|
||||
LOS_ERREND:
|
||||
|
@ -1006,6 +1013,7 @@ VOID OsTaskSchedule(VOID)
|
|||
#if (LOSCFG_BASE_CORE_TSK_MONITOR == 1)
|
||||
OsTaskSwitchCheck();
|
||||
#endif
|
||||
OsHookCall(LOS_HOOK_TYPE_TASK_SWITCHEDIN);
|
||||
HalTaskSchedule();
|
||||
}
|
||||
|
||||
|
@ -1087,6 +1095,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
|
|||
taskCB->taskStatus &= (~OS_TASK_STATUS_SUSPEND);
|
||||
if (!(taskCB->taskStatus & OS_CHECK_TASK_BLOCK)) {
|
||||
taskCB->taskStatus |= OS_TASK_STATUS_READY;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, taskCB);
|
||||
OsPriqueueEnqueue(&taskCB->pendList, taskCB->priority);
|
||||
if (g_taskScheduled) {
|
||||
LOS_IntRestore(intSave);
|
||||
|
@ -1147,6 +1156,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskSuspend(UINT32 taskID)
|
|||
}
|
||||
|
||||
taskCB->taskStatus |= OS_TASK_STATUS_SUSPEND;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOSUSPENDEDLIST, taskCB);
|
||||
if (taskID == g_losTask.runTask->taskID) {
|
||||
LOS_IntRestore(intSave);
|
||||
LOS_Schedule();
|
||||
|
@ -1201,6 +1211,8 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID)
|
|||
g_losTaskLock = 0;
|
||||
}
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_TASK_DELETE, taskCB);
|
||||
|
||||
if ((taskCB->taskStatus) & OS_TASK_STATUS_READY) {
|
||||
OsPriqueueDequeue(&taskCB->pendList);
|
||||
taskCB->taskStatus &= (~OS_TASK_STATUS_READY);
|
||||
|
@ -1262,6 +1274,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)
|
|||
return LOS_ERRNO_TSK_DELAY_IN_LOCK;
|
||||
}
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_TASK_DELAY, tick);
|
||||
if (tick == 0) {
|
||||
return LOS_TaskYield();
|
||||
} else {
|
||||
|
@ -1271,6 +1284,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)
|
|||
OsTaskAdd2TimerList((LosTaskCB *)g_losTask.runTask, tick);
|
||||
g_losTask.runTask->taskStatus |= OS_TASK_STATUS_DELAY;
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTODELAYEDLIST, g_losTask.runTask);
|
||||
LOS_Schedule();
|
||||
}
|
||||
|
||||
|
@ -1338,6 +1352,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskPriSet(UINT32 taskID, UINT16 taskPrio)
|
|||
taskCB->taskStatus &= (~OS_TASK_STATUS_READY);
|
||||
taskCB->priority = taskPrio;
|
||||
taskCB->taskStatus |= OS_TASK_STATUS_READY;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, taskCB);
|
||||
OsPriqueueEnqueue(&taskCB->pendList, taskCB->priority);
|
||||
} else {
|
||||
taskCB->priority = taskPrio;
|
||||
|
@ -1403,6 +1418,7 @@ VOID OsTaskWake(LosTaskCB *resumedTask, UINT32 taskStatus)
|
|||
}
|
||||
if (!(resumedTask->taskStatus & OS_TASK_STATUS_SUSPEND)) {
|
||||
resumedTask->taskStatus |= OS_TASK_STATUS_READY;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, resumedTask);
|
||||
OsPriqueueEnqueue(&resumedTask->pendList, resumedTask->priority);
|
||||
}
|
||||
}
|
||||
|
@ -1432,6 +1448,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskYield(VOID)
|
|||
if (taskCount > 1) {
|
||||
LOS_ListDelete(&(g_losTask.runTask->pendList));
|
||||
g_losTask.runTask->taskStatus |= OS_TASK_STATUS_READY;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, g_losTask.runTask);
|
||||
OsPriqueueEnqueue(&(g_losTask.runTask->pendList), g_losTask.runTask->priority);
|
||||
} else {
|
||||
LOS_IntRestore(intSave);
|
||||
|
@ -1677,6 +1694,7 @@ VOID LOS_Schedule(VOID)
|
|||
if (g_losTask.runTask != g_losTask.newTask) {
|
||||
if (LOS_CHECK_SCHEDULE) {
|
||||
LOS_IntRestore(intSave);
|
||||
OsHookCall(LOS_HOOK_TYPE_ISR_EXITTOSCHEDULER);
|
||||
OsTaskSchedule();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -29,15 +29,14 @@
|
|||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "securec.h"
|
||||
#include "los_config.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_arch.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_task.h"
|
||||
#include "securec.h"
|
||||
#include "los_arch.h"
|
||||
#include "los_config.h"
|
||||
#include "los_debug.h"
|
||||
#ifdef LOSCFG_LIB_LIBC
|
||||
#endif
|
||||
#include "los_hook.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_task.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
@ -911,6 +910,8 @@ UINT32 LOS_MemInit(VOID *pool, UINT32 size)
|
|||
LOS_TraceReg(LOS_TRACE_MEM_INFO, OsMemInfoTrace, LOS_TRACE_MEM_INFO_NAME, LOS_TRACE_ENABLE);
|
||||
#endif
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_MEM_INIT, pool, size);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
@ -932,6 +933,8 @@ UINT32 LOS_MemDeInit(VOID *pool)
|
|||
LOS_TraceUnreg(LOS_TRACE_MEM_INFO);
|
||||
#endif
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_MEM_DEINIT, pool);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
@ -1041,6 +1044,8 @@ VOID *LOS_MemAlloc(VOID *pool, UINT32 size)
|
|||
poolStatus.maxFreeNodeSize, poolStatus.usedNodeNum, poolStatus.freeNodeNum);
|
||||
#endif
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_MEM_ALLOC, pool, size);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
@ -1104,6 +1109,8 @@ VOID *LOS_MemAllocAlign(VOID *pool, UINT32 size, UINT32 boundary)
|
|||
LOS_Trace(LOS_TRACE_MEM_TIME, (UINTPTR)pool & MEM_POOL_ADDR_MASK, MEM_TRACE_MEMALIGN, timeUsed);
|
||||
#endif
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_MEM_ALLOCALIGN, pool, size, boundary);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
@ -1304,6 +1311,8 @@ UINT32 LOS_MemFree(VOID *pool, VOID *ptr)
|
|||
LOS_Trace(LOS_TRACE_MEM_TIME, (UINTPTR)pool & MEM_POOL_ADDR_MASK, MEM_TRACE_FREE, timeUsed);
|
||||
#endif
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_MEM_FREE, pool, ptr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1384,6 +1393,8 @@ VOID *LOS_MemRealloc(VOID *pool, VOID *ptr, UINT32 size)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
OsHookCall(LOS_HOOK_TYPE_MEM_REALLOC, pool, ptr, size);
|
||||
|
||||
if (ptr == NULL) {
|
||||
return LOS_MemAlloc(pool, size);
|
||||
}
|
||||
|
@ -1699,7 +1710,7 @@ STATIC VOID OsMemNodeInfo(const struct OsMemNodeHead *tmpNode,
|
|||
usedNode->header.sizeAndFlag);
|
||||
} else {
|
||||
freeNode = (struct OsMemFreeNodeHead *)tmpNode;
|
||||
PRINTK("\n broken node head: 0x%x 0x%x "
|
||||
PRINTK("\n broken node head: 0x%x 0x%x 0x%x "
|
||||
#if (LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK == 1)
|
||||
"0x%x "
|
||||
#endif
|
||||
|
@ -1725,7 +1736,7 @@ STATIC VOID OsMemNodeInfo(const struct OsMemNodeHead *tmpNode,
|
|||
usedNode->header.sizeAndFlag);
|
||||
} else {
|
||||
freeNode = (struct OsMemFreeNodeHead *)preNode;
|
||||
PRINTK("prev node head: 0x%x 0x%x "
|
||||
PRINTK("prev node head: 0x%x 0x%x 0x%x "
|
||||
#if (LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK == 1)
|
||||
"0x%x "
|
||||
#endif
|
||||
|
@ -1932,7 +1943,7 @@ STATIC VOID OsMemInfoPrint(VOID *pool)
|
|||
"max free node size used node num free node num UsageWaterLine\n");
|
||||
PRINTK("--------------- -------- ------- -------- "
|
||||
"-------------- ------------- ------------ ------------\n");
|
||||
PRINTK("%-16#x 0x%-8x 0x%-8x 0x%-8x 0x%-16x 0x%-13x 0x%-13x 0x%-13x\n",
|
||||
PRINTK("0x%-16x 0x%-8x 0x%-8x 0x%-8x 0x%-16x 0x%-13x 0x%-13x 0x%-13x\n",
|
||||
poolInfo->info.pool, LOS_MemPoolSizeGet(pool), status.totalUsedSize,
|
||||
status.totalFreeSize, status.maxFreeNodeSize, status.usedNodeNum,
|
||||
status.freeNodeNum, status.usageWaterLine);
|
||||
|
|
|
@ -2094,6 +2094,9 @@
|
|||
<file>
|
||||
<name>$PROJ_DIR$\..\..\..\utils\los_error.c</name>
|
||||
</file>
|
||||
<file>
|
||||
<name>$PROJ_DIR$\..\..\..\utils\los_hook.c</name>
|
||||
</file>
|
||||
</group>
|
||||
<file>
|
||||
<name>$PROJ_DIR$\..\..\..\kernel\src\los_event.c</name>
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
|
||||
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _LOS_HOOK_TYPES_H
|
||||
#define _LOS_HOOK_TYPES_H
|
||||
|
||||
#include "los_compiler.h"
|
||||
#include "los_config.h"
|
||||
#include "los_context.h"
|
||||
#include "los_event.h"
|
||||
#include "los_mux.h"
|
||||
#include "los_queue.h"
|
||||
#include "los_sem.h"
|
||||
#include "los_task.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#if (LOSCFG_DEBUG_HOOK == 1)
|
||||
#define LOS_HOOK_ALL_TYPES_DEF \
|
||||
/* Hook types supported by memory modules */ \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MEM_INIT, (VOID *pool, UINT32 size)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MEM_DEINIT, (VOID *pool)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MEM_ALLOC, (VOID *pool, UINT32 size)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MEM_FREE, (VOID *pool, VOID *ptr)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MEM_REALLOC, (VOID *pool, VOID *ptr, UINT32 size)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MEM_ALLOCALIGN, (VOID *pool, UINT32 size, UINT32 boundary)) \
|
||||
/* Hook types supported by event modules */ \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_EVENT_INIT, (VOID)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_EVENT_READ, (PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_EVENT_WRITE, (PEVENT_CB_S eventCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_EVENT_CLEAR, (PEVENT_CB_S eventCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_EVENT_DESTROY, (VOID)) \
|
||||
/* Hook types supported by queue modules */ \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_QUEUE_CREATE, (const LosQueueCB *queueCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_QUEUE_READ, (const LosQueueCB *queueCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_QUEUE_WRITE, (const LosQueueCB *queueCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_QUEUE_DELETE, (const LosQueueCB *queueCB)) \
|
||||
/* Hook types supported by semphore modules */ \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_SEM_CREATE, (const LosSemCB *semCreated)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_SEM_POST, (const LosSemCB *semPosted, const LosTaskCB *resumedTask)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_SEM_PEND, (const LosSemCB *semPended, const LosTaskCB *runningTask)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_SEM_DELETE, (const LosSemCB *semDeleted)) \
|
||||
/* Hook types supported by mutex modules */ \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MUX_CREATE, (const LosMuxCB *muxCreated)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MUX_POST, (const LosMuxCB *muxPosted)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MUX_PEND, (const LosMuxCB *muxPended)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MUX_DELETE, (const LosMuxCB *muxDeleted)) \
|
||||
/* Hook types supported by task modules */ \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_TASK_CREATE, (const LosTaskCB *taskCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_TASK_DELAY, (UINT32 tick)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_TASK_PRIMODIFY, (const LosTaskCB *pxTask, UINT32 uxNewPriority)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_TASK_DELETE, (const LosTaskCB *taskCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_TASK_SWITCHEDIN, (VOID)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, (const LosTaskCB *pstTaskCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MOVEDTASKTODELAYEDLIST, (const LosTaskCB *pstTaskCB)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_MOVEDTASKTOSUSPENDEDLIST, (const LosTaskCB *pstTaskCB)) \
|
||||
/* Hook types supported by interrupt modules */ \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_ISR_EXITTOSCHEDULER, (VOID)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_ISR_ENTER, (UINT32 hwiIndex)) \
|
||||
LOS_HOOK_TYPE_DEF(LOS_HOOK_TYPE_ISR_EXIT, (UINT32 hwiIndex))
|
||||
|
||||
/**
|
||||
* Defines the types of all hooks.
|
||||
*/
|
||||
#define LOS_HOOK_TYPE_DEF(type, paramList) type,
|
||||
|
||||
typedef enum {
|
||||
/* Used to manage hook pools */
|
||||
LOS_HOOK_TYPE_START = 0,
|
||||
/* All supported hook types */
|
||||
LOS_HOOK_ALL_TYPES_DEF
|
||||
/* Used to manage hook pools */
|
||||
LOS_HOOK_TYPE_END
|
||||
} HookType;
|
||||
|
||||
#undef LOS_HOOK_TYPE_DEF
|
||||
|
||||
/**
|
||||
* Declare the type and interface of the hook functions.
|
||||
*/
|
||||
#define LOS_HOOK_TYPE_DEF(type, paramList) \
|
||||
typedef VOID (*type##_FN) paramList; \
|
||||
extern UINT32 type##_RegHook(type##_FN func); \
|
||||
extern UINT32 type##_UnRegHook(type##_FN func); \
|
||||
extern VOID type##_CallHook paramList;
|
||||
|
||||
LOS_HOOK_ALL_TYPES_DEF
|
||||
|
||||
#undef LOS_HOOK_TYPE_DEF
|
||||
|
||||
#endif /* LOSCFG_DEBUG_HOOK */
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _LOS_HOOK_TYPES_H */
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
|
||||
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _LOS_HOOK_TYPES_PARSE_H
|
||||
#define _LOS_HOOK_TYPES_PARSE_H
|
||||
|
||||
#define ADDR(a) (&(a))
|
||||
#define ARGS(a) (a)
|
||||
#define ADDRn(...) _CONCAT(ADDR, _NARGS(__VA_ARGS__))(__VA_ARGS__)
|
||||
#define ARGSn(...) _CONCAT(ARGS, _NARGS(__VA_ARGS__))(__VA_ARGS__)
|
||||
#define ARGS0()
|
||||
#define ADDR0()
|
||||
#define ARGS1(a) ARGS(a)
|
||||
#define ADDR1(a) ADDR(a)
|
||||
|
||||
#define ARG_const _ARG_const(
|
||||
#define _ARG_const(a) ARG_CP_##a)
|
||||
#define ARG_CP_LosSemCB ADDR(
|
||||
#define ARG_CP_LosTaskCB ADDR(
|
||||
#define ARG_CP_UINT32 ADDR(
|
||||
#define ARG_CP_LosMuxCB ADDR(
|
||||
#define ARG_CP_LosQueueCB ADDR(
|
||||
#define ARG_UINT32 ARGS(
|
||||
#define ARG_PEVENT_CB_S ARGS(
|
||||
#define ARG_void ADDRn(
|
||||
#define ARG(a) ARG_##a)
|
||||
|
||||
#define PARAM_TO_ARGS1(a) ARG(a)
|
||||
#define PARAM_TO_ARGS2(a, b) ARG(a), PARAM_TO_ARGS1(b)
|
||||
#define PARAM_TO_ARGS3(a, b, c) ARG(a), PARAM_TO_ARGS2(b, c)
|
||||
#define PARAM_TO_ARGS4(a, b, c, d) ARG(a), PARAM_TO_ARGS3(b, c, d)
|
||||
#define PARAM_TO_ARGS5(a, b, c, d, e) ARG(a), PARAM_TO_ARGS4(b, c, d, e)
|
||||
#define PARAM_TO_ARGS6(a, b, c, d, e, f) ARG(a), PARAM_TO_ARGS5(b, c, d, e, f)
|
||||
#define PARAM_TO_ARGS7(a, b, c, d, e, f, g) ARG(a), PARAM_TO_ARGS6(b, c, d, e, f, g)
|
||||
|
||||
#define __NARGS(a, b, c, d, e, f, g, h, n, ...) n
|
||||
#define _NARGS(...) __NARGS(x, ##__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0, )
|
||||
#define __CONCAT(a, b) a##b
|
||||
#define _CONCAT(a, b) __CONCAT(a, b)
|
||||
|
||||
#define PARAM_TO_ARGS(...) _CONCAT(PARAM_TO_ARGS, _NARGS(__VA_ARGS__))(__VA_ARGS__)
|
||||
#define OS_HOOK_PARAM_TO_ARGS(paramList) (PARAM_TO_ARGS paramList)
|
||||
|
||||
#endif /* _LOS_HOOK_TYPES_PARSE_H */
|
|
@ -203,10 +203,11 @@ enum LOS_MOUDLE_ID {
|
|||
LOS_MOD_EVENT = 0x1c,
|
||||
LOS_MOD_MUX = 0X1d,
|
||||
LOS_MOD_CPUP = 0x1e,
|
||||
LOS_MOD_HOOK = 0x1f,
|
||||
LOS_MOD_SHELL = 0x31,
|
||||
LOS_MOD_BUTT
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @ingroup los_err
|
||||
* Define the error magic word.
|
||||
|
@ -288,7 +289,7 @@ enum LOS_MOUDLE_ID {
|
|||
goto ERR_HANDLER; \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
|
||||
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "los_hook.h"
|
||||
#include "internal/los_hook_types_parse.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#if (LOSCFG_DEBUG_HOOK == 1)
|
||||
#define LOS_HOOK_TYPE_DEF(type, paramList) \
|
||||
STATIC type##_FN g_fn##type; \
|
||||
UINT32 type##_RegHook(type##_FN func) { \
|
||||
if ((func) == NULL) { \
|
||||
return LOS_ERRNO_HOOK_REG_INVALID; \
|
||||
} \
|
||||
if (g_fn##type) { \
|
||||
return LOS_ERRNO_HOOK_POOL_IS_FULL; \
|
||||
} \
|
||||
g_fn##type = (func); \
|
||||
return LOS_OK; \
|
||||
} \
|
||||
UINT32 type##_UnRegHook(type##_FN func) { \
|
||||
if (((func) == NULL) || (g_fn##type != (func))) { \
|
||||
return LOS_ERRNO_HOOK_UNREG_INVALID; \
|
||||
} \
|
||||
g_fn##type = NULL; \
|
||||
return LOS_OK; \
|
||||
} \
|
||||
VOID type##_CallHook paramList { \
|
||||
if (g_fn##type) { \
|
||||
g_fn##type(PARAM_TO_ARGS paramList); \
|
||||
} \
|
||||
}
|
||||
|
||||
LOS_HOOK_ALL_TYPES_DEF;
|
||||
|
||||
#undef LOS_HOOK_TYPE_DEF
|
||||
|
||||
#endif /* LOSCFG_DEBUG_HOOK */
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
|
@ -0,0 +1,137 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
|
||||
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _LOS_HOOK_H
|
||||
#define _LOS_HOOK_H
|
||||
|
||||
#include "internal/los_hook_types.h"
|
||||
#include "los_config.h"
|
||||
#include "los_error.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#if (LOSCFG_DEBUG_HOOK == 1)
|
||||
/**
|
||||
* @ingroup los_hook
|
||||
* Hook error code: The hook pool is insufficient.
|
||||
*
|
||||
* Value: 0x02001f00
|
||||
*
|
||||
* Solution: Deregister the registered hook.
|
||||
*/
|
||||
#define LOS_ERRNO_HOOK_POOL_IS_FULL LOS_ERRNO_OS_ERROR(LOS_MOD_HOOK, 0x00)
|
||||
|
||||
/**
|
||||
* @ingroup los_hook
|
||||
* Hook error code: Invalid parameter.
|
||||
*
|
||||
* Value: 0x02001f01
|
||||
*
|
||||
* Solution: Check the input parameters of LOS_HookReg.
|
||||
*/
|
||||
#define LOS_ERRNO_HOOK_REG_INVALID LOS_ERRNO_OS_ERROR(LOS_MOD_HOOK, 0x01)
|
||||
|
||||
/**
|
||||
* @ingroup los_hook
|
||||
* Hook error code: Invalid parameter.
|
||||
*
|
||||
* Value: 0x02001f02
|
||||
*
|
||||
* Solution: Check the input parameters of LOS_HookUnReg.
|
||||
*/
|
||||
#define LOS_ERRNO_HOOK_UNREG_INVALID LOS_ERRNO_OS_ERROR(LOS_MOD_HOOK, 0x02)
|
||||
|
||||
/**
|
||||
* @ingroup los_hook
|
||||
* @brief Registration of hook function.
|
||||
*
|
||||
* @par Description:
|
||||
* This API is used to register hook function.
|
||||
*
|
||||
* @attention
|
||||
* <ul>
|
||||
* <li> None.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param hookType [IN] Register the type of the hook.
|
||||
* @param hookFn [IN] The function to be registered.
|
||||
*
|
||||
* @retval None.
|
||||
* @par Dependency:
|
||||
* <ul><li>los_hook.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see
|
||||
*/
|
||||
#define LOS_HookReg(hookType, hookFn) hookType##_RegHook(hookFn)
|
||||
|
||||
/**
|
||||
* @ingroup los_hook
|
||||
* @brief Deregistration of hook function.
|
||||
*
|
||||
* @par Description:
|
||||
* This API is used to deregister hook function.
|
||||
*
|
||||
* @attention
|
||||
* <ul>
|
||||
* <li> None.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param hookType [IN] Deregister the type of the hook.
|
||||
* @param hookFn [IN] The function to be deregistered.
|
||||
*
|
||||
* @retval None.
|
||||
* @par Dependency:
|
||||
* <ul><li>los_hook.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see
|
||||
*/
|
||||
#define LOS_HookUnReg(hookType, hookFn) hookType##_UnRegHook(hookFn)
|
||||
|
||||
/**
|
||||
* Call hook functions.
|
||||
*/
|
||||
#define OsHookCall(hookType, ...) hookType##_CallHook(__VA_ARGS__)
|
||||
|
||||
#else
|
||||
#define LOS_HookReg(hookType, hookFn)
|
||||
#define LOS_HookUnReg(hookType, hookFn)
|
||||
#define OsHookCall(hookType, ...)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _LOS_HOOK_H */
|
Loading…
Reference in New Issue