e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync/* $Id$ */
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync/** @file
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * IPRT - Internal Header for the NT Ring-0 Driver Code.
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync */
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2008-2010 Oracle Corporation
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync *
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * available from http://www.virtualbox.org. This file is free software;
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * General Public License (GPL) as published by the Free Software
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync *
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * The contents of this file may alternatively be used under the terms
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * of the Common Development and Distribution License Version 1.0
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * VirtualBox OSE distribution, in which case the provisions of the
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * CDDL are applicable instead of those of the GPL.
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync *
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * You may elect to license modified versions of this file under the
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync * terms and conditions of either the GPL or the CDDL or both.
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync */
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync#ifndef ___internal_r0drv_h
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync#define ___internal_r0drv_h
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync#include <iprt/cpuset.h>
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsync#include <iprt/nt/nt.h>
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsyncRT_C_DECLS_BEGIN
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
7f49c2ea5ca960f40173fff078dc79bf40bd7ae2vboxsync/*******************************************************************************
7f49c2ea5ca960f40173fff078dc79bf40bd7ae2vboxsync* Structures and Typedefs *
7f49c2ea5ca960f40173fff078dc79bf40bd7ae2vboxsync*******************************************************************************/
7f49c2ea5ca960f40173fff078dc79bf40bd7ae2vboxsynctypedef ULONG (__stdcall *PFNMYEXSETTIMERRESOLUTION)(ULONG, BOOLEAN);
7f49c2ea5ca960f40173fff078dc79bf40bd7ae2vboxsynctypedef VOID (__stdcall *PFNMYKEFLUSHQUEUEDDPCS)(VOID);
41c15aa44c4acfe6760552150eb931319835cfafvboxsynctypedef VOID (__stdcall *PFNHALSENDSOFTWAREINTERRUPT)(ULONG ProcessorNumber, KIRQL Irql);
41c15aa44c4acfe6760552150eb931319835cfafvboxsynctypedef int (__stdcall *PFNRTSENDIPI)(RTCPUID idCpu);
41c15aa44c4acfe6760552150eb931319835cfafvboxsynctypedef ULONG_PTR (__stdcall *PFNRTKEIPIGENERICCALL)(PKIPI_BROADCAST_WORKER BroadcastFunction, ULONG_PTR Context);
2ccca012d772c237b97e06a362720b3fb6c236b8vboxsynctypedef ULONG (__stdcall *PFNRTRTLGETVERSION)(PRTL_OSVERSIONINFOEXW pVerInfo);
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsync#ifndef RT_ARCH_AMD64
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsynctypedef ULONGLONG (__stdcall *PFNRTKEQUERYINTERRUPTTIME)(VOID);
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsynctypedef VOID (__stdcall *PFNRTKEQUERYSYSTEMTIME)(PLARGE_INTEGER pTime);
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsync#endif
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsynctypedef ULONG64 (__stdcall *PFNRTKEQUERYINTERRUPTTIMEPRECISE)(PULONG64 pQpcTS);
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsynctypedef VOID (__stdcall *PFNRTKEQUERYSYSTEMTIMEPRECISE)(PLARGE_INTEGER pTime);
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsync
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync/*******************************************************************************
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync* Global Variables *
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync*******************************************************************************/
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern RTCPUSET g_rtMpNtCpuSet;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNMYEXSETTIMERRESOLUTION g_pfnrtNtExSetTimerResolution;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNMYKEFLUSHQUEUEDDPCS g_pfnrtNtKeFlushQueuedDpcs;
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsyncextern PFNHALREQUESTIPI_W7PLUS g_pfnrtHalRequestIpiW7Plus;
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsyncextern PFNHALREQUESTIPI_PRE_W7 g_pfnrtHalRequestIpiPreW7;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNHALSENDSOFTWAREINTERRUPT g_pfnrtNtHalSendSoftwareInterrupt;
14565f279fb52d17994857f5b68f261cca3a0ba9vboxsyncextern PFNRTSENDIPI g_pfnrtMpPokeCpuWorker;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNRTKEIPIGENERICCALL g_pfnrtKeIpiGenericCall;
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsyncextern PFNKEINITIALIZEAFFINITYEX g_pfnrtKeInitializeAffinityEx;
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsyncextern PFNKEADDPROCESSORAFFINITYEX g_pfnrtKeAddProcessorAffinityEx;
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsyncextern PFNKEGETPROCESSORINDEXFROMNUMBER g_pfnrtKeGetProcessorIndexFromNumber;
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsync
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNRTRTLGETVERSION g_pfnrtRtlGetVersion;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsync#ifndef RT_ARCH_AMD64
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNRTKEQUERYINTERRUPTTIME g_pfnrtKeQueryInterruptTime;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNRTKEQUERYSYSTEMTIME g_pfnrtKeQuerySystemTime;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsync#endif
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNRTKEQUERYINTERRUPTTIMEPRECISE g_pfnrtKeQueryInterruptTimePrecise;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern PFNRTKEQUERYSYSTEMTIMEPRECISE g_pfnrtKeQuerySystemTimePrecise;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern uint32_t g_offrtNtPbQuantumEnd;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern uint32_t g_cbrtNtPbQuantumEnd;
5a8ae0443b7be3b1a5501bd101b1533daa844c23vboxsyncextern uint32_t g_offrtNtPbDpcQueueDepth;
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
41c15aa44c4acfe6760552150eb931319835cfafvboxsync
14565f279fb52d17994857f5b68f261cca3a0ba9vboxsyncint rtMpPokeCpuUsingDpc(RTCPUID idCpu);
14565f279fb52d17994857f5b68f261cca3a0ba9vboxsyncint rtMpPokeCpuUsingBroadcastIpi(RTCPUID idCpu);
14565f279fb52d17994857f5b68f261cca3a0ba9vboxsyncint rtMpPokeCpuUsingHalSendSoftwareInterrupt(RTCPUID idCpu);
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsyncint rtMpPokeCpuUsingHalReqestIpiW7Plus(RTCPUID idCpu);
3a11c660d37a68f1ba83d8f08ee6516ebc5aaa05vboxsyncint rtMpPokeCpuUsingHalReqestIpiPreW7(RTCPUID idCpu);
41c15aa44c4acfe6760552150eb931319835cfafvboxsync
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsyncRT_C_DECLS_END
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync#endif
e6e2974634808306e2557acf7b9faae14ff5b93bvboxsync