ReactOS 0.4.15-dev-8135-g1bc6c90
ipi.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: IPI code for x64
5 * COPYRIGHT: Copyright 2023 Timo Kreuzer <timo.kreuzer@reactos.org>
6 */
7
8/* INCLUDES *******************************************************************/
9
10#include <ntoskrnl.h>
11#define NDEBUG
12#include <debug.h>
13
14/* FUNCTIONS *****************************************************************/
15
16VOID
19 _In_ KAFFINITY TargetSet,
20 _In_ ULONG IpiRequest)
21{
22 /* Check if we can send the IPI directly */
23 if (IpiRequest == IPI_APC)
24 {
25 HalSendSoftwareInterrupt(TargetSet, APC_LEVEL);
26 }
27 else if (IpiRequest == IPI_DPC)
28 {
29 HalSendSoftwareInterrupt(TargetSet, DISPATCH_LEVEL);
30 }
31 else if (IpiRequest == IPI_FREEZE)
32 {
33 /* On x64 the freeze IPI is an NMI */
34 HalSendNMI(TargetSet);
35 }
36 else
37 {
39 }
40}
41
46 _In_ ULONG_PTR Argument)
47{
49 return 0;
50}
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
Definition: cdrom.h:1156
#define FALSE
Definition: types.h:117
ULONG_PTR KAFFINITY
Definition: compat.h:85
#define APC_LEVEL
Definition: env_spec_w32.h:695
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
#define ASSERT(a)
Definition: mode.c:44
#define _In_
Definition: ms_sal.h:308
#define IPI_FREEZE
Definition: ketypes.h:299
#define IPI_DPC
Definition: ketypes.h:298
#define IPI_APC
Definition: ketypes.h:297
#define FASTCALL
Definition: nt_native.h:50
ULONG_PTR NTAPI KeIpiGenericCall(_In_ PKIPI_BROADCAST_WORKER Function, _In_ ULONG_PTR Argument)
Definition: ipi.c:44
VOID FASTCALL KiIpiSend(_In_ KAFFINITY TargetSet, _In_ ULONG IpiRequest)
Definition: ipi.c:18
#define NTAPI
Definition: typedefs.h:36
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59
KIPI_BROADCAST_WORKER * PKIPI_BROADCAST_WORKER
Definition: ketypes.h:617