更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_mp.h
浏览该文件的文档.
1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef _LOS_MP_H
33#define _LOS_MP_H
34
35#include "los_config.h"
36#include "los_list.h"
37
38#ifdef __cplusplus
39#if __cplusplus
40extern "C" {
41#endif /* __cplusplus */
42#endif /* __cplusplus */
43
44#define OS_MP_CPU_ALL LOSCFG_KERNEL_CPU_MASK
45
46#define OS_MP_GC_PERIOD 100 /* ticks */
47
48/// 核间中断
49typedef enum {
50 LOS_MP_IPI_WAKEUP, ///!< 唤醒CPU
51 LOS_MP_IPI_SCHEDULE, ///!< 调度CPU
52 LOS_MP_IPI_HALT, ///!< 停止CPU
53#ifdef LOSCFG_KERNEL_SMP_CALL
54 LOS_MP_IPI_FUNC_CALL, ///!< 触发CPU的回调函数,这些回调函数都挂到了cpu的链表上
55#endif
57
58typedef VOID (*SMP_FUNC_CALL)(VOID *args);
59
60#ifdef LOSCFG_KERNEL_SMP
61extern VOID LOS_MpSchedule(UINT32 target);
62extern VOID OsMpWakeHandler(VOID);
63extern VOID OsMpScheduleHandler(VOID);
64extern VOID OsMpHaltHandler(VOID);
65extern UINT32 OsMpInit(VOID);
66#else
67STATIC INLINE VOID LOS_MpSchedule(UINT32 target)
68{
69 (VOID)target;
70}
71#endif
72
73#ifdef LOSCFG_KERNEL_SMP_CALL //多核下的回调开关
74typedef struct {
75 LOS_DL_LIST node; ///< 链表节点,将挂到 g_percpu[cpuid]上
76 SMP_FUNC_CALL func; ///< 回调函数地址
77 VOID *args; ///< 回调函数的参数
79
80/**
81 * It is used to call function on target cpus by sending ipi, and the first param is target cpu mask value.
82 */
83extern VOID OsMpFuncCall(UINT32 target, SMP_FUNC_CALL func, VOID *args);
84extern VOID OsMpFuncCallHandler(VOID);
85#else
86INLINE VOID OsMpFuncCall(UINT32 target, SMP_FUNC_CALL func, VOID *args)
87{
88 (VOID)target;
89 if (func != NULL) {
90 func(args);
91 }
92}
93#endif /* LOSCFG_KERNEL_SMP_CALL */
94
95#ifdef __cplusplus
96#if __cplusplus
97}
98#endif /* __cplusplus */
99#endif /* __cplusplus */
100
101#endif /* _LOS_MP_H_ */
双向链表由内联函数实现 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-apx-dll....
VOID OsMpWakeHandler(VOID)
硬中断唤醒处理函数
Definition: los_mp.c:83
UINT32 OsMpInit(VOID)
Definition: los_mp.c:214
VOID OsMpFuncCallHandler(VOID)
OsMpFuncCallHandler 回调向当前CPU注册过的函数
Definition: los_mp.c:182
VOID LOS_MpSchedule(UINT32 target)
Definition: los_mp.h:67
VOID OsMpFuncCall(UINT32 target, SMP_FUNC_CALL func, VOID *args)
Definition: los_mp.h:86
VOID OsMpScheduleHandler(VOID)
硬中断调度处理函数
Definition: los_mp.c:88
VOID OsMpHaltHandler(VOID)
硬中断暂停处理函数
Definition: los_mp.c:97
VOID(* SMP_FUNC_CALL)(VOID *args)
Definition: los_mp.h:58
MP_IPI_TYPE
核间中断
Definition: los_mp.h:49
@ LOS_MP_IPI_SCHEDULE
!< 唤醒CPU
Definition: los_mp.h:51
@ LOS_MP_IPI_WAKEUP
Definition: los_mp.h:50
@ LOS_MP_IPI_FUNC_CALL
!< 停止CPU
Definition: los_mp.h:54
@ LOS_MP_IPI_HALT
!< 调度CPU
Definition: los_mp.h:52
unsigned int UINT32
Definition: los_typedef.h:57
SMP_FUNC_CALL func
回调函数地址
Definition: los_mp.h:76
VOID * args
回调函数的参数
Definition: los_mp.h:77
LOS_DL_LIST node
链表节点,将挂到 g_percpu[cpuid]上
Definition: los_mp.h:75