1/*
2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#pragma once
8
9#include <config.h>
10#include <smp/ipi.h>
11
12#ifdef ENABLE_SMP_SUPPORT
13static inline void doRemoteStall(word_t cpu)
14{
15    doRemoteOp0Arg(IpiRemoteCall_Stall, cpu);
16}
17
18static inline void doRemoteswitchFpuOwner(user_fpu_state_t *new_owner, word_t cpu)
19{
20    doRemoteOp1Arg(IpiRemoteCall_switchFpuOwner, (word_t)new_owner, cpu);
21}
22
23static inline void doRemoteInvalidatePageStructureCacheASID(paddr_t root, asid_t asid, word_t mask)
24{
25    doRemoteMaskOp2Arg(IpiRemoteCall_InvalidatePageStructureCacheASID, root, asid, mask);
26}
27
28static inline void doRemoteInvalidateTranslationSingle(vptr_t vptr, word_t mask)
29{
30    doRemoteMaskOp1Arg(IpiRemoteCall_InvalidateTranslationSingle, vptr, mask);
31}
32
33static inline void doRemoteInvalidateTranslationSingleASID(vptr_t vptr, asid_t asid, word_t mask)
34{
35    doRemoteMaskOp2Arg(IpiRemoteCall_InvalidateTranslationSingleASID, vptr, asid, mask);
36}
37
38static inline void doRemoteInvalidateTranslationAll(word_t mask)
39{
40    doRemoteMaskOp0Arg(IpiRemoteCall_InvalidateTranslationAll, mask);
41}
42
43#ifdef CONFIG_VTX
44static inline void doRemoteClearCurrentVCPU(word_t cpu)
45{
46    doRemoteOp0Arg(IpiRemoteCall_ClearCurrentVCPU, cpu);
47}
48
49static inline void doRemoteVMCheckBoundNotification(word_t cpu, tcb_t *tcb)
50{
51    doRemoteOp1Arg(IpiRemoteCall_VMCheckBoundNotification, (word_t)tcb, cpu);
52}
53#endif
54
55#endif /* ENABLE_SMP_SUPPORT */
56
57