[Spice-devel] [PATCH qxl-wddm-dod v5 2/7] Code Analysis fix
Christophe Fergeau
cfergeau at redhat.com
Tue Sep 27 09:35:30 UTC 2016
Hey,
A huge part of this patch is adding +__declspec(code_seg("PAGE")) (and
removing #pragma code_seg()), which are probably related to this macro,
but which are added with no rationale.
The shortlog should probably be something different than "code analysis
fix", but more somethnig like "Use PAGED_CODE() at the beginning of each
pageable method".
Is it possible/desirable to prevent these methods from ending in
pageable memory?
Christophe
On Mon, Sep 26, 2016 at 04:00:06PM +0300, Sameeh Jubran wrote:
> The PAGED_CODE macro ensures that the calling thread is running at an
> IRQL that is low enough to permit paging. A call to this macro should
> be made at the beginning of every driver routine that either contains
> pageable code or accesses pageable code.
>
> Based on a patch by Sandy Stutsman <sstutsma at redhat.com>
>
> Signed-off-by: Sameeh Jubran <sameeh at daynix.com>
> ---
> qxldod/QxlDod.cpp | 224 ++++++++++++++++++++++++++++++++++++++++++++++++------
> qxldod/QxlDod.h | 149 ++++++++++++++++++++++++++++++++++--
> 2 files changed, 344 insertions(+), 29 deletions(-)
>
> diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp
> index 798b2f0..136daf7 100755
> --- a/qxldod/QxlDod.cpp
> +++ b/qxldod/QxlDod.cpp
> @@ -2,8 +2,6 @@
> #include "qxldod.h"
> #include "qxl_windows.h"
>
> -#pragma code_seg(push)
> -#pragma code_seg()
>
> #define WIN_QXL_INT_MASK ((QXL_INTERRUPT_DISPLAY) | \
> (QXL_INTERRUPT_CURSOR) | \
> @@ -47,7 +45,6 @@ BYTE PixelMask[BITS_PER_BYTE] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01
> ((ULONG)LOWER_5_BITS((Pixel)) << SHIFT_LOWER_5_IN_565_BACK))
>
>
> -#pragma code_seg(pop)
>
> struct QXLEscape {
> uint32_t ioctl;
> @@ -57,10 +54,12 @@ struct QXLEscape {
> };
> };
>
> +__declspec(code_seg("PAGE"))
> QxlDod::QxlDod(_In_ DEVICE_OBJECT* pPhysicalDeviceObject) : m_pPhysicalDevice(pPhysicalDeviceObject),
> m_MonitorPowerState(PowerDeviceD0),
> m_AdapterPowerState(PowerDeviceD0)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s\n", __FUNCTION__));
> *((UINT*)&m_Flags) = 0;
> RtlZeroMemory(&m_DxgkInterface, sizeof(m_DxgkInterface));
> @@ -71,7 +70,7 @@ QxlDod::QxlDod(_In_ DEVICE_OBJECT* pPhysicalDeviceObject) : m_pPhysicalDevice(pP
> DbgPrint(TRACE_LEVEL_INFORMATION, ("<--- %s\n", __FUNCTION__));
> }
>
> -
> +__declspec(code_seg("PAGE"))
> QxlDod::~QxlDod(void)
> {
> PAGED_CODE();
> @@ -80,6 +79,7 @@ QxlDod::~QxlDod(void)
> m_pHWDevice = NULL;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::CheckHardware()
> {
> PAGED_CODE();
> @@ -117,6 +117,7 @@ NTSTATUS QxlDod::CheckHardware()
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::StartDevice(_In_ DXGK_START_INFO* pDxgkStartInfo,
> _In_ DXGKRNL_INTERFACE* pDxgkInterface,
> _Out_ ULONG* pNumberOfViews,
> @@ -207,6 +208,7 @@ NTSTATUS QxlDod::StartDevice(_In_ DXGK_START_INFO* pDxgkStartInfo,
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::StopDevice(VOID)
> {
> PAGED_CODE();
> @@ -214,6 +216,7 @@ NTSTATUS QxlDod::StopDevice(VOID)
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDod::CleanUp(VOID)
> {
> PAGED_CODE();
> @@ -228,7 +231,7 @@ VOID QxlDod::CleanUp(VOID)
> }
> }
>
> -
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::DispatchIoRequest(_In_ ULONG VidPnSourceId,
> _In_ VIDEO_REQUEST_PACKET* pVideoRequestPacket)
> {
> @@ -240,11 +243,13 @@ NTSTATUS QxlDod::DispatchIoRequest(_In_ ULONG VidPnSourceId,
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> PCHAR
> DbgDevicePowerString(
> __in DEVICE_POWER_STATE Type
> )
> {
> + PAGED_CODE();
> switch (Type)
> {
> case PowerDeviceUnspecified:
> @@ -264,11 +269,13 @@ DbgDevicePowerString(
> }
> }
>
> +__declspec(code_seg("PAGE"))
> PCHAR
> DbgPowerActionString(
> __in POWER_ACTION Type
> )
> {
> + PAGED_CODE();
> switch (Type)
> {
> case PowerActionNone:
> @@ -292,6 +299,7 @@ DbgPowerActionString(
> }
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::SetPowerState(_In_ ULONG HardwareUid,
> _In_ DEVICE_POWER_STATE DevicePowerState,
> _In_ POWER_ACTION ActionType)
> @@ -325,6 +333,7 @@ NTSTATUS QxlDod::SetPowerState(_In_ ULONG HardwareUid,
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::QueryChildRelations(_Out_writes_bytes_(ChildRelationsSize) DXGK_CHILD_DESCRIPTOR* pChildRelations,
> _In_ ULONG ChildRelationsSize)
> {
> @@ -354,6 +363,7 @@ NTSTATUS QxlDod::QueryChildRelations(_Out_writes_bytes_(ChildRelationsSize) DXGK
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::QueryChildStatus(_Inout_ DXGK_CHILD_STATUS* pChildStatus,
> _In_ BOOLEAN NonDestructiveOnly)
> {
> @@ -389,6 +399,7 @@ NTSTATUS QxlDod::QueryChildStatus(_Inout_ DXGK_CHILD_STATUS* pChildStatus,
> }
>
> // EDID retrieval
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::QueryDeviceDescriptor(_In_ ULONG ChildUid,
> _Inout_ DXGK_DEVICE_DESCRIPTOR* pDeviceDescriptor)
> {
> @@ -401,6 +412,7 @@ NTSTATUS QxlDod::QueryDeviceDescriptor(_In_ ULONG ChildUid,
> return STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::QueryAdapterInfo(_In_ CONST DXGKARG_QUERYADAPTERINFO* pQueryAdapterInfo)
> {
> PAGED_CODE();
> @@ -445,6 +457,7 @@ NTSTATUS QxlDod::QueryAdapterInfo(_In_ CONST DXGKARG_QUERYADAPTERINFO* pQueryAda
> }
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition)
> {
> PAGED_CODE();
> @@ -463,6 +476,7 @@ NTSTATUS QxlDod::SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetP
>
> // Basic Sample Display Driver does not support hardware cursors, and reports such
> // in QueryAdapterInfo. Therefore this function should never be called.
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape)
> {
> PAGED_CODE();
> @@ -473,6 +487,7 @@ NTSTATUS QxlDod::SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointer
> return m_pHWDevice->SetPointerShape(pSetPointerShape);
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape)
> {
> PAGED_CODE();
> @@ -486,7 +501,7 @@ NTSTATUS QxlDod::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape)
> return Status;
> }
>
> -
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::PresentDisplayOnly(_In_ CONST DXGKARG_PRESENT_DISPLAYONLY* pPresentDisplayOnly)
> {
> PAGED_CODE();
> @@ -548,6 +563,7 @@ NTSTATUS QxlDod::PresentDisplayOnly(_In_ CONST DXGKARG_PRESENT_DISPLAYONLY* pPre
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::QueryInterface(_In_ CONST PQUERY_INTERFACE pQueryInterface)
> {
> PAGED_CODE();
> @@ -558,6 +574,7 @@ NTSTATUS QxlDod::QueryInterface(_In_ CONST PQUERY_INTERFACE pQueryInterface)
> return STATUS_NOT_SUPPORTED;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::StopDeviceAndReleasePostDisplayOwnership(_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
> _Out_ DXGK_DISPLAY_INFORMATION* pDisplayInfo)
> {
> @@ -582,7 +599,7 @@ NTSTATUS QxlDod::StopDeviceAndReleasePostDisplayOwnership(_In_ D3DDDI_VIDEO_PRE
> return StopDevice();
> }
>
> -
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::QueryVidPnHWCapability(_Inout_ DXGKARG_QUERYVIDPNHWCAPABILITY* pVidPnHWCaps)
> {
> PAGED_CODE();
> @@ -606,6 +623,7 @@ NTSTATUS QxlDod::QueryVidPnHWCapability(_Inout_ DXGKARG_QUERYVIDPNHWCAPABILITY*
>
>
> // TODO: Need to also check pinned modes and the path parameters, not just topology
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::IsSupportedVidPn(_Inout_ DXGKARG_ISSUPPORTEDVIDPN* pIsSupportedVidPn)
> {
> PAGED_CODE();
> @@ -668,6 +686,7 @@ NTSTATUS QxlDod::IsSupportedVidPn(_Inout_ DXGKARG_ISSUPPORTEDVIDPN* pIsSupported
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::RecommendFunctionalVidPn(_In_ CONST DXGKARG_RECOMMENDFUNCTIONALVIDPN* CONST pRecommendFunctionalVidPn)
> {
> PAGED_CODE();
> @@ -678,6 +697,7 @@ NTSTATUS QxlDod::RecommendFunctionalVidPn(_In_ CONST DXGKARG_RECOMMENDFUNCTIONAL
> return STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::RecommendVidPnTopology(_In_ CONST DXGKARG_RECOMMENDVIDPNTOPOLOGY* CONST pRecommendVidPnTopology)
> {
> PAGED_CODE();
> @@ -688,6 +708,7 @@ NTSTATUS QxlDod::RecommendVidPnTopology(_In_ CONST DXGKARG_RECOMMENDVIDPNTOPOLOG
> return STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::RecommendMonitorModes(_In_ CONST DXGKARG_RECOMMENDMONITORMODES* CONST pRecommendMonitorModes)
> {
> PAGED_CODE();
> @@ -696,7 +717,7 @@ NTSTATUS QxlDod::RecommendMonitorModes(_In_ CONST DXGKARG_RECOMMENDMONITORMODES*
> return AddSingleMonitorMode(pRecommendMonitorModes);
> }
>
> -
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::AddSingleSourceMode(_In_ CONST DXGK_VIDPNSOURCEMODESET_INTERFACE* pVidPnSourceModeSetInterface,
> D3DKMDT_HVIDPNSOURCEMODESET hVidPnSourceModeSet,
> D3DDDI_VIDEO_PRESENT_SOURCE_ID SourceId)
> @@ -753,6 +774,7 @@ NTSTATUS QxlDod::AddSingleSourceMode(_In_ CONST DXGK_VIDPNSOURCEMODESET_INTERFAC
> }
>
> // Add the current mode information (acquired from the POST frame buffer) as the target mode.
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::AddSingleTargetMode(_In_ CONST DXGK_VIDPNTARGETMODESET_INTERFACE* pVidPnTargetModeSetInterface,
> D3DKMDT_HVIDPNTARGETMODESET hVidPnTargetModeSet,
> _In_opt_ CONST D3DKMDT_VIDPN_SOURCE_MODE* pVidPnPinnedSourceModeInfo,
> @@ -805,7 +827,7 @@ NTSTATUS QxlDod::AddSingleTargetMode(_In_ CONST DXGK_VIDPNTARGETMODESET_INTERFAC
> return STATUS_SUCCESS;
> }
>
> -
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::AddSingleMonitorMode(_In_ CONST DXGKARG_RECOMMENDMONITORMODES* CONST pRecommendMonitorModes)
> {
> PAGED_CODE();
> @@ -925,6 +947,7 @@ NTSTATUS QxlDod::AddSingleMonitorMode(_In_ CONST DXGKARG_RECOMMENDMONITORMODES*
> }
>
> // Tell DMM about all the modes, etc. that are supported
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::EnumVidPnCofuncModality(_In_ CONST DXGKARG_ENUMVIDPNCOFUNCMODALITY* CONST pEnumCofuncModality)
> {
> PAGED_CODE();
> @@ -1283,6 +1306,7 @@ NTSTATUS QxlDod::EnumVidPnCofuncModality(_In_ CONST DXGKARG_ENUMVIDPNCOFUNCMODAL
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::SetVidPnSourceVisibility(_In_ CONST DXGKARG_SETVIDPNSOURCEVISIBILITY* pSetVidPnSourceVisibility)
> {
> PAGED_CODE();
> @@ -1315,6 +1339,7 @@ NTSTATUS QxlDod::SetVidPnSourceVisibility(_In_ CONST DXGKARG_SETVIDPNSOURCEVISIB
>
> // NOTE: The value of pCommitVidPn->MonitorConnectivityChecks is ignored, since BDD is unable to recognize whether a monitor is connected or not
> // The value of pCommitVidPn->hPrimaryAllocation is also ignored, since BDD is a display only driver and does not deal with allocations
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::CommitVidPn(_In_ CONST DXGKARG_COMMITVIDPN* CONST pCommitVidPn)
> {
> PAGED_CODE();
> @@ -1473,7 +1498,7 @@ NTSTATUS QxlDod::CommitVidPn(_In_ CONST DXGKARG_COMMITVIDPN* CONST pCommitVidPn)
>
> CommitVidPnExit:
>
> - NTSTATUS TempStatus;
> + NTSTATUS TempStatus(STATUS_SUCCESS);
> UNREFERENCED_PARAMETER(TempStatus);
>
> if ((pVidPnSourceModeSetInterface != NULL) &&
> @@ -1504,6 +1529,7 @@ CommitVidPnExit:
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::SetSourceModeAndPath(CONST D3DKMDT_VIDPN_SOURCE_MODE* pSourceMode,
> CONST D3DKMDT_VIDPN_PRESENT_PATH* pPath)
> {
> @@ -1559,6 +1585,7 @@ NTSTATUS QxlDod::SetSourceModeAndPath(CONST D3DKMDT_VIDPN_SOURCE_MODE* pSourceMo
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::IsVidPnPathFieldsValid(CONST D3DKMDT_VIDPN_PRESENT_PATH* pPath) const
> {
> PAGED_CODE();
> @@ -1607,6 +1634,7 @@ NTSTATUS QxlDod::IsVidPnPathFieldsValid(CONST D3DKMDT_VIDPN_PRESENT_PATH* pPath)
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::IsVidPnSourceModeFieldsValid(CONST D3DKMDT_VIDPN_SOURCE_MODE* pSourceMode) const
> {
> PAGED_CODE();
> @@ -1638,6 +1666,7 @@ NTSTATUS QxlDod::IsVidPnSourceModeFieldsValid(CONST D3DKMDT_VIDPN_SOURCE_MODE* p
> return STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::UpdateActiveVidPnPresentPath(_In_ CONST DXGKARG_UPDATEACTIVEVIDPNPRESENTPATH* CONST pUpdateActiveVidPnPresentPath)
> {
> PAGED_CODE();
> @@ -1663,8 +1692,6 @@ NTSTATUS QxlDod::UpdateActiveVidPnPresentPath(_In_ CONST DXGKARG_UPDATEACTIVEVID
> //
> // Non-Paged Code
> //
> -#pragma code_seg(push)
> -#pragma code_seg()
>
> VOID QxlDod::DpcRoutine(VOID)
> {
> @@ -1789,8 +1816,8 @@ VOID QxlDod::SystemDisplayWrite(_In_reads_bytes_(SourceHeight * SourceStride) VO
>
> }
>
> -#pragma code_seg(pop) // End Non-Paged Code
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::WriteHWInfoStr(_In_ HANDLE DevInstRegKeyHandle, _In_ PCWSTR pszwValueName, _In_ PCSTR pszValue)
> {
> PAGED_CODE();
> @@ -1834,7 +1861,8 @@ NTSTATUS QxlDod::WriteHWInfoStr(_In_ HANDLE DevInstRegKeyHandle, _In_ PCWSTR psz
> return Status;
> }
>
> -NTSTATUS QxlDod::RegisterHWInfo(ULONG Id)
> +__declspec(code_seg("PAGE"))
> +NTSTATUS QxlDod::RegisterHWInfo(_In_ ULONG Id)
> {
> PAGED_CODE();
>
> @@ -1913,6 +1941,7 @@ NTSTATUS QxlDod::RegisterHWInfo(ULONG Id)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDod::ReadConfiguration()
> {
> PAGED_CODE();
> @@ -1967,8 +1996,6 @@ NTSTATUS QxlDod::ReadConfiguration()
> //
> // Non-Paged Code
> //
> -#pragma code_seg(push)
> -#pragma code_seg()
> D3DDDI_VIDEO_PRESENT_SOURCE_ID QxlDod::FindSourceForTarget(D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId, BOOLEAN DefaultToZero)
> {
> UNREFERENCED_PARAMETER(TargetId);
> @@ -1983,12 +2010,10 @@ D3DDDI_VIDEO_PRESENT_SOURCE_ID QxlDod::FindSourceForTarget(D3DDDI_VIDEO_PRESENT_
> return DefaultToZero ? 0 : D3DDDI_ID_UNINITIALIZED;
> }
>
> -#pragma code_seg(pop) // End Non-Paged Code
> -
> //
> // Frame buffer map/unmap
> //
> -
> +__declspec(code_seg("PAGE"))
> NTSTATUS
> MapFrameBuffer(
> _In_ PHYSICAL_ADDRESS PhysicalAddress,
> @@ -2041,6 +2066,7 @@ MapFrameBuffer(
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS
> UnmapFrameBuffer(
> _In_reads_bytes_(Length) VOID* VirtualAddress,
> @@ -2343,8 +2369,10 @@ VOID BltBits (
> }
> }
>
> +__declspec(code_seg("PAGE"))
> VgaDevice::VgaDevice(_In_ QxlDod* pQxlDod)
> {
> + PAGED_CODE();
> m_pQxlDod = pQxlDod;
> m_ModeInfo = NULL;
> m_ModeCount = 0;
> @@ -2353,8 +2381,10 @@ VgaDevice::VgaDevice(_In_ QxlDod* pQxlDod)
> m_Id = 0;
> }
>
> +__declspec(code_seg("PAGE"))
> VgaDevice::~VgaDevice(void)
> {
> + PAGED_CODE();
> HWClose();
> delete [] reinterpret_cast<BYTE*>(m_ModeInfo);
> delete [] reinterpret_cast<BYTE*>(m_ModeNumbers);
> @@ -2365,6 +2395,7 @@ VgaDevice::~VgaDevice(void)
> m_Id = 0;
> }
>
> +__declspec(code_seg("PAGE"))
> BOOL VgaDevice::SetVideoModeInfo(UINT Idx, PVBE_MODEINFO pModeInfo)
> {
> PVIDEO_MODE_INFORMATION pMode = NULL;
> @@ -2402,6 +2433,7 @@ BOOL VgaDevice::SetVideoModeInfo(UINT Idx, PVBE_MODEINFO pModeInfo)
> return TRUE;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
> {
> PAGED_CODE();
> @@ -2593,8 +2625,10 @@ NTSTATUS VgaDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::QueryCurrentMode(PVIDEO_MODE RequestedMode)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> NTSTATUS Status = STATUS_SUCCESS;
> UNREFERENCED_PARAMETER(RequestedMode);
> @@ -2602,8 +2636,11 @@ NTSTATUS VgaDevice::QueryCurrentMode(PVIDEO_MODE RequestedMode)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::SetCurrentMode(ULONG Mode)
> {
> + PAGED_CODE();
> +
> NTSTATUS Status = STATUS_SUCCESS;
> DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s Mode = %x\n", __FUNCTION__, Mode));
> X86BIOS_REGISTERS regs = {0};
> @@ -2618,8 +2655,11 @@ NTSTATUS VgaDevice::SetCurrentMode(ULONG Mode)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::GetCurrentMode(ULONG* pMode)
> {
> + PAGED_CODE();
> +
> NTSTATUS Status = STATUS_SUCCESS;
> DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s\n", __FUNCTION__));
> X86BIOS_REGISTERS regs = {0};
> @@ -2634,8 +2674,11 @@ NTSTATUS VgaDevice::GetCurrentMode(ULONG* pMode)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* pDispInfo)
> {
> + PAGED_CODE();
> +
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> UNREFERENCED_PARAMETER(pResList);
> UNREFERENCED_PARAMETER(pDispInfo);
> @@ -2643,15 +2686,21 @@ NTSTATUS VgaDevice::HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION*
> return GetModeList(pDispInfo);
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::HWClose(void)
> {
> + PAGED_CODE();
> +
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> return STATUS_SUCCESS;
> }
>
> -NTSTATUS VgaDevice::SetPowerState(_In_ DEVICE_POWER_STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo)
> +__declspec(code_seg("PAGE"))
> +NTSTATUS VgaDevice::SetPowerState(DEVICE_POWER_STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo)
> {
> + PAGED_CODE();
> +
> DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s\n", __FUNCTION__));
>
> X86BIOS_REGISTERS regs = {0};
> @@ -2674,7 +2723,7 @@ NTSTATUS VgaDevice::SetPowerState(_In_ DEVICE_POWER_STATE DevicePowerState, DXG
> return STATUS_SUCCESS;
> }
>
> -
> +__declspec(code_seg("PAGE"))
> NTSTATUS
> VgaDevice::ExecutePresentDisplayOnly(
> _In_ BYTE* DstAddr,
> @@ -2876,6 +2925,7 @@ VgaDevice::ExecutePresentDisplayOnly(
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> VOID VgaDevice::BlackOutScreen(CURRENT_BDD_MODE* pCurrentBddMod)
> {
> PAGED_CODE();
> @@ -2941,27 +2991,35 @@ VOID VgaDevice::ResetDevice(VOID)
> {
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape)
> {
> + PAGED_CODE();
> UNREFERENCED_PARAMETER(pSetPointerShape);
> return STATUS_NOT_SUPPORTED;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition)
> {
> + PAGED_CODE();
> UNREFERENCED_PARAMETER(pSetPointerPosition);
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS VgaDevice::Escape(_In_ CONST DXGKARG_ESCAPE* pEscap)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> return STATUS_NOT_IMPLEMENTED;
> }
>
> +__declspec(code_seg("PAGE"))
> QxlDevice::QxlDevice(_In_ QxlDod* pQxlDod)
> {
> + PAGED_CODE();
> m_pQxlDod = pQxlDod;
> m_ModeInfo = NULL;
> m_ModeCount = 0;
> @@ -2972,8 +3030,10 @@ QxlDevice::QxlDevice(_In_ QxlDod* pQxlDod)
> m_Pending = 0;
> }
>
> +__declspec(code_seg("PAGE"))
> QxlDevice::~QxlDevice(void)
> {
> + PAGED_CODE();
> HWClose();
> delete [] reinterpret_cast<BYTE*>(m_ModeInfo);
> delete [] reinterpret_cast<BYTE*>(m_ModeNumbers);
> @@ -2983,6 +3043,7 @@ QxlDevice::~QxlDevice(void)
> m_ModeCount = 0;
> }
>
> +__declspec(code_seg("PAGE"))
> BOOL QxlDevice::SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo)
> {
> PVIDEO_MODE_INFORMATION pMode = NULL;
> @@ -3016,6 +3077,7 @@ BOOL QxlDevice::SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo)
> return TRUE;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp)
> {
> PVIDEO_MODE_INFORMATION pMode = NULL;
> @@ -3038,6 +3100,7 @@ void QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp)
> pMode->RedMask = pMode->GreenMask << color_bits;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
> {
> PAGED_CODE();
> @@ -3145,14 +3208,17 @@ NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::QueryCurrentMode(PVIDEO_MODE RequestedMode)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> NTSTATUS Status = STATUS_SUCCESS;
> UNREFERENCED_PARAMETER(RequestedMode);
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::SetCurrentMode(ULONG Mode)
> {
> PAGED_CODE();
> @@ -3173,6 +3239,7 @@ NTSTATUS QxlDevice::SetCurrentMode(ULONG Mode)
> return STATUS_UNSUCCESSFUL;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::GetCurrentMode(ULONG* pMode)
> {
> PAGED_CODE();
> @@ -3183,8 +3250,10 @@ NTSTATUS QxlDevice::GetCurrentMode(ULONG* pMode)
> return Status;
> }
>
> -NTSTATUS QxlDevice::SetPowerState(_In_ DEVICE_POWER_STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo)
> +__declspec(code_seg("PAGE"))
> +NTSTATUS QxlDevice::SetPowerState(DEVICE_POWER_STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> switch (DevicePowerState)
> {
> @@ -3198,8 +3267,10 @@ NTSTATUS QxlDevice::SetPowerState(_In_ DEVICE_POWER_STATE DevicePowerState, DXGK
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* pDispInfo)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> PDXGKRNL_INTERFACE pDxgkInterface = m_pQxlDod->GetDxgkInterface();
> UINT pci_range = QXL_RAM_RANGE_INDEX;
> @@ -3345,8 +3416,10 @@ NTSTATUS QxlDevice::HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION*
> return QxlInit(pDispInfo);
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::QxlInit(DXGK_DISPLAY_INFORMATION* pDispInfo)
> {
> + PAGED_CODE();
> NTSTATUS Status = STATUS_SUCCESS;
>
> if (!InitMemSlots()) {
> @@ -3372,13 +3445,17 @@ NTSTATUS QxlDevice::QxlInit(DXGK_DISPLAY_INFORMATION* pDispInfo)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::QxlClose()
> {
> + PAGED_CODE();
> DestroyMemSlots();
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::UnmapMemory(void)
> {
> + PAGED_CODE();
> PDXGKRNL_INTERFACE pDxgkInterface = m_pQxlDod->GetDxgkInterface();
> if (m_IoMapped && m_IoBase)
> {
> @@ -3404,8 +3481,10 @@ void QxlDevice::UnmapMemory(void)
> }
> }
>
> +__declspec(code_seg("PAGE"))
> BOOL QxlDevice::InitMemSlots(void)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> m_NumMemSlots = m_RomHdr->slots_end;
> m_SlotGenBits = m_RomHdr->slot_gen_bits;
> @@ -3423,14 +3502,17 @@ BOOL QxlDevice::InitMemSlots(void)
> return FALSE;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::DestroyMemSlots(void)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> delete [] reinterpret_cast<BYTE*>(m_MemSlots);
> m_MemSlots = NULL;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::CreatePrimarySurface(PVIDEO_MODE_INFORMATION pModeInfo)
> {
> PAGED_CODE();
> @@ -3454,23 +3536,29 @@ void QxlDevice::CreatePrimarySurface(PVIDEO_MODE_INFORMATION pModeInfo)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::DestroyPrimarySurface(void)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> // AsyncIo(QXL_IO_DESTROY_PRIMARY_ASYNC, 0);
> SyncIo(QXL_IO_DESTROY_PRIMARY, 0);
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> _inline QXLPHYSICAL QxlDevice::PA(PVOID virt, UINT8 slot_id)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--> %s\n", __FUNCTION__));
> MemSlot *pSlot = &m_MemSlots[slot_id];
> return pSlot->high_bits | ((UINT64)virt - pSlot->start_virt_addr);
> }
>
> +__declspec(code_seg("PAGE"))
> _inline UINT64 QxlDevice::VA(QXLPHYSICAL paddr, UINT8 slot_id)
> {
> + PAGED_CODE();
> UINT64 virt;
> MemSlot *pSlot = &m_MemSlots[slot_id];
>
> @@ -3481,8 +3569,10 @@ _inline UINT64 QxlDevice::VA(QXLPHYSICAL paddr, UINT8 slot_id)
> return virt;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::SetupHWSlot(UINT8 Idx, MemSlot *pSlot)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> m_RamHdr->mem_slot.mem_start = pSlot->start_phys_addr;
> m_RamHdr->mem_slot.mem_end = pSlot->end_phys_addr;
> @@ -3490,8 +3580,10 @@ void QxlDevice::SetupHWSlot(UINT8 Idx, MemSlot *pSlot)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> BOOL QxlDevice::CreateEvents()
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> KeInitializeEvent(&m_DisplayEvent,
> SynchronizationEvent,
> @@ -3511,8 +3603,10 @@ BOOL QxlDevice::CreateEvents()
> return TRUE;
> }
>
> +__declspec(code_seg("PAGE"))
> BOOL QxlDevice::CreateRings()
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> m_CommandRing = &(m_RamHdr->cmd_ring);
> m_CursorRing = &(m_RamHdr->cursor_ring);
> @@ -3521,8 +3615,10 @@ BOOL QxlDevice::CreateRings()
> return TRUE;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::AsyncIo(UCHAR Port, UCHAR Value)
> {
> + PAGED_CODE();
> LARGE_INTEGER timeout;
> BOOLEAN locked = FALSE;
> locked = WaitForObject(&m_IoLock, NULL);
> @@ -3532,16 +3628,20 @@ void QxlDevice::AsyncIo(UCHAR Port, UCHAR Value)
> ReleaseMutex(&m_IoLock, locked);
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::SyncIo(UCHAR Port, UCHAR Value)
> {
> + PAGED_CODE();
> BOOLEAN locked = FALSE;
> locked = WaitForObject(&m_IoLock, NULL);
> WRITE_PORT_UCHAR(m_IoBase + Port, Value);
> ReleaseMutex(&m_IoLock, locked);
> }
>
> +__declspec(code_seg("PAGE"))
> UINT8 QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend)
> {
> + PAGED_CODE();
> UINT64 high_bits;
> MemSlot *pSlot;
> UINT8 slot_index;
> @@ -3565,8 +3665,10 @@ UINT8 QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 va
> return slot_index;
> }
>
> +__declspec(code_seg("PAGE"))
> BOOL QxlDevice::CreateMemSlots(void)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s 3\n", __FUNCTION__));
> UINT64 len = m_RomHdr->surface0_area_size + m_RomHdr->num_pages * PAGE_SIZE;
> m_MainMemSlot = SetupMemSlot(0,
> @@ -3584,6 +3686,7 @@ BOOL QxlDevice::CreateMemSlots(void)
> return TRUE;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::InitDeviceMemoryResources(void)
> {
> PAGED_CODE();
> @@ -3593,6 +3696,7 @@ void QxlDevice::InitDeviceMemoryResources(void)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::InitMonitorConfig(void)
> {
> PAGED_CODE();
> @@ -3604,8 +3708,10 @@ void QxlDevice::InitMonitorConfig(void)
> *m_monitor_config_pa = PA(m_monitor_config, m_MainMemSlot);
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::InitMspace(UINT32 mspace_type, UINT8 *start, size_t capacity)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s type = %d, start = %p, capacity = %d\n", __FUNCTION__, mspace_type, start, capacity));
> m_MSInfo[mspace_type]._mspace = create_mspace_with_base(start, capacity, 0, this);
> m_MSInfo[mspace_type].mspace_start = start;
> @@ -3621,6 +3727,7 @@ void QxlDevice::ResetDevice(void)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS
> QxlDevice::ExecutePresentDisplayOnly(
> _In_ BYTE* DstAddr,
> @@ -3809,8 +3916,10 @@ QxlDevice::ExecutePresentDisplayOnly(
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::WaitForReleaseRing(void)
> {
> + PAGED_CODE();
> int wait;
>
> DbgPrint(TRACE_LEVEL_VERBOSE, ("--->%s\n", __FUNCTION__));
> @@ -3841,8 +3950,10 @@ void QxlDevice::WaitForReleaseRing(void)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("%s: <---\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FlushReleaseRing()
> {
> + PAGED_CODE();
> UINT64 output;
> int notify;
> int num_to_release = 50;
> @@ -3872,8 +3983,10 @@ void QxlDevice::FlushReleaseRing()
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::EmptyReleaseRing()
> {
> + PAGED_CODE();
> BOOLEAN locked = FALSE;
> locked = WaitForObject(&m_MemLock, NULL);
> while (m_FreeOutputs || !SPICE_RING_IS_EMPTY(m_ReleaseRing)) {
> @@ -3882,8 +3995,10 @@ void QxlDevice::EmptyReleaseRing()
> ReleaseMutex(&m_MemLock, locked);
> }
>
> +__declspec(code_seg("PAGE"))
> UINT64 QxlDevice::ReleaseOutput(UINT64 output_id)
> {
> + PAGED_CODE();
> QXLOutput *output = (QXLOutput *)output_id;
> Resource **now;
> Resource **end;
> @@ -3901,8 +4016,10 @@ UINT64 QxlDevice::ReleaseOutput(UINT64 output_id)
> return next;
> }
>
> +__declspec(code_seg("PAGE"))
> void *QxlDevice::AllocMem(UINT32 mspace_type, size_t size, BOOL force)
> {
> + PAGED_CODE();
> PVOID ptr;
> BOOLEAN locked = FALSE;
>
> @@ -3949,8 +4066,10 @@ void *QxlDevice::AllocMem(UINT32 mspace_type, size_t size, BOOL force)
> return ptr;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FreeMem(UINT32 mspace_type, void *ptr)
> {
> + PAGED_CODE();
> ASSERT(m_MSInfo[mspace_type]._mspace);
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
>
> @@ -3969,8 +4088,10 @@ void QxlDevice::FreeMem(UINT32 mspace_type, void *ptr)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> QXLDrawable *QxlDevice::GetDrawable()
> {
> + PAGED_CODE();
> QXLOutput *output;
>
> output = (QXLOutput *)AllocMem(MSPACE_TYPE_VRAM, sizeof(QXLOutput) + sizeof(QXLDrawable), TRUE);
> @@ -3981,8 +4102,10 @@ QXLDrawable *QxlDevice::GetDrawable()
> return(QXLDrawable *)output->data;
> }
>
> +__declspec(code_seg("PAGE"))
> QXLCursorCmd *QxlDevice::CursorCmd()
> {
> + PAGED_CODE();
> QXLCursorCmd *cursor_cmd;
> QXLOutput *output;
>
> @@ -3996,8 +4119,10 @@ QXLCursorCmd *QxlDevice::CursorCmd()
> return cursor_cmd;
> }
>
> +__declspec(code_seg("PAGE"))
> BOOL QxlDevice::SetClip(const RECT *clip, QXLDrawable *drawable)
> {
> + PAGED_CODE();
> Resource *rects_res;
>
> if (clip == NULL) {
> @@ -4025,37 +4150,47 @@ BOOL QxlDevice::SetClip(const RECT *clip, QXLDrawable *drawable)
> return TRUE;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::AddRes(QXLOutput *output, Resource *res)
> {
> + PAGED_CODE();
> res->refs++;
> output->resources[output->num_res++] = res;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::DrawableAddRes(QXLDrawable *drawable, Resource *res)
> {
> + PAGED_CODE();
> QXLOutput *output;
>
> output = (QXLOutput *)((UINT8 *)drawable - sizeof(QXLOutput));
> AddRes(output, res);
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::CursorCmdAddRes(QXLCursorCmd *cmd, Resource *res)
> {
> + PAGED_CODE();
> QXLOutput *output;
>
> output = (QXLOutput *)((UINT8 *)cmd - sizeof(QXLOutput));
> AddRes(output, res);
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FreeClipRectsEx(Resource *res)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--> %s\n", __FUNCTION__));
> QxlDevice* pqxl = (QxlDevice*)res->ptr;
> pqxl->FreeClipRects(res);
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FreeClipRects(Resource *res)
> {
> + PAGED_CODE();
> QXLPHYSICAL chunk_phys;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
>
> @@ -4069,15 +4204,19 @@ void QxlDevice::FreeClipRects(Resource *res)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FreeBitmapImageEx(Resource *res)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--> %s\n", __FUNCTION__));
> QxlDevice* pqxl = (QxlDevice*)res->ptr;
> pqxl->FreeBitmapImage(res);
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FreeBitmapImage(Resource *res)
> {
> + PAGED_CODE();
> InternalImage *internal;
> QXLPHYSICAL chunk_phys;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> @@ -4095,15 +4234,19 @@ void QxlDevice::FreeBitmapImage(Resource *res)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FreeCursorEx(Resource *res)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--> %s\n", __FUNCTION__));
> QxlDevice* pqxl = (QxlDevice*)res->ptr;
> pqxl->FreeCursor(res);
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::FreeCursor(Resource *res)
> {
> + PAGED_CODE();
> QXLPHYSICAL chunk_phys;
>
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> @@ -4118,8 +4261,10 @@ void QxlDevice::FreeCursor(Resource *res)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> QXLDrawable *QxlDevice::Drawable(UINT8 type, CONST RECT *area, CONST RECT *clip, UINT32 surface_id)
> {
> + PAGED_CODE();
> QXLDrawable *drawable;
>
> ASSERT(area);
> @@ -4145,7 +4290,10 @@ QXLDrawable *QxlDevice::Drawable(UINT8 type, CONST RECT *area, CONST RECT *clip,
> return drawable;
> }
>
> -void QxlDevice::PushDrawable(QXLDrawable *drawable) {
> +__declspec(code_seg("PAGE"))
> +void QxlDevice::PushDrawable(QXLDrawable *drawable)
> +{
> + PAGED_CODE();
> QXLCommand *cmd;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
>
> @@ -4160,8 +4308,10 @@ void QxlDevice::PushDrawable(QXLDrawable *drawable) {
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::PushCursorCmd(QXLCursorCmd *cursor_cmd)
> {
> + PAGED_CODE();
> QXLCommand *cmd;
>
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> @@ -4177,12 +4327,14 @@ void QxlDevice::PushCursorCmd(QXLCursorCmd *cursor_cmd)
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDevice::SetImageId(InternalImage *internal,
> BOOL cache_me,
> LONG width,
> LONG height,
> UINT8 format, UINT32 key)
> {
> + PAGED_CODE();
> UINT32 image_info = IMAGE_HASH_INIT_VAL(width, height, format);
>
> if (cache_me) {
> @@ -4196,6 +4348,7 @@ VOID QxlDevice::SetImageId(InternalImage *internal,
> }
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDevice::BltBits (
> BLT_INFO* pDst,
> CONST BLT_INFO* pSrc,
> @@ -4203,6 +4356,7 @@ VOID QxlDevice::BltBits (
> _In_reads_(NumRects) CONST RECT *pRects,
> POINT* pSourcePoint)
> {
> + PAGED_CODE();
> QXLDrawable *drawable;
> Resource *image_res;
> InternalImage *internal;
> @@ -4296,10 +4450,12 @@ VOID QxlDevice::BltBits (
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> + __declspec(code_seg("PAGE"))
> VOID QxlDevice::PutBytesAlign(QXLDataChunk **chunk_ptr, UINT8 **now_ptr,
> UINT8 **end_ptr, UINT8 *src, int size,
> size_t alloc_size, uint32_t alignment)
> {
> + PAGED_CODE();
> QXLDataChunk *chunk = *chunk_ptr;
> UINT8 *now = *now_ptr;
> UINT8 *end = *end_ptr;
> @@ -4335,6 +4491,7 @@ VOID QxlDevice::PutBytesAlign(QXLDataChunk **chunk_ptr, UINT8 **now_ptr,
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDevice::BlackOutScreen(CURRENT_BDD_MODE* pCurrentBddMod)
> {
> QXLDrawable *drawable;
> @@ -4362,15 +4519,19 @@ VOID QxlDevice::BlackOutScreen(CURRENT_BDD_MODE* pCurrentBddMod)
> }
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::HWClose(void)
> {
> + PAGED_CODE();
> QxlClose();
> UnmapMemory();
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s flag = %x\n", __FUNCTION__, pSetPointerShape->Flags.Value));
> DbgPrint(TRACE_LEVEL_INFORMATION, ("<--> %s flag = %d pitch = %d, pixels = %p, id = %d, w = %d, h = %d, x = %d, y = %d\n", __FUNCTION__,
> pSetPointerShape->Flags.Value,
> @@ -4452,8 +4613,10 @@ NTSTATUS QxlDevice::SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPoi
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition)
> {
> + PAGED_CODE();
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> DbgPrint(TRACE_LEVEL_INFORMATION, ("<--> %s flag = %d id = %d, x = %d, y = %d\n", __FUNCTION__,
> pSetPointerPosition->Flags.Value,
> @@ -4475,6 +4638,7 @@ NTSTATUS QxlDevice::SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pS
> return STATUS_SUCCESS;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::UpdateChildStatus(BOOLEAN connect)
> {
> PAGED_CODE();
> @@ -4489,6 +4653,7 @@ NTSTATUS QxlDevice::UpdateChildStatus(BOOLEAN connect)
> return Status;
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::SetCustomDisplay(QXLEscapeSetCustomDisplay* custom_display)
> {
> PAGED_CODE();
> @@ -4513,6 +4678,7 @@ NTSTATUS QxlDevice::SetCustomDisplay(QXLEscapeSetCustomDisplay* custom_display)
> return status;
> }
>
> +__declspec(code_seg("PAGE"))
> void QxlDevice::SetMonitorConfig(QXLHead * monitor_config)
> {
> PAGED_CODE();
> @@ -4529,8 +4695,10 @@ void QxlDevice::SetMonitorConfig(QXLHead * monitor_config)
> AsyncIo(QXL_IO_MONITORS_CONFIG_ASYNC, 0);
> }
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS QxlDevice::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape)
> {
> + PAGED_CODE();
> size_t data_size(sizeof(uint32_t));
> QXLEscape* pQXLEscape((QXLEscape*) pEscape->pPrivateDriverData);
> NTSTATUS status(STATUS_SUCCESS);
> @@ -4569,8 +4737,10 @@ NTSTATUS QxlDevice::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape)
> return status;
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDevice::WaitForCmdRing()
> {
> + PAGED_CODE();
> int wait;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
>
> @@ -4585,8 +4755,10 @@ VOID QxlDevice::WaitForCmdRing()
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDevice::PushCmd()
> {
> + PAGED_CODE();
> int notify;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> SPICE_RING_PUSH(m_CommandRing, notify);
> @@ -4596,8 +4768,10 @@ VOID QxlDevice::PushCmd()
> DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s notify = %d\n", __FUNCTION__, notify));
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDevice::WaitForCursorRing(VOID)
> {
> + PAGED_CODE();
> int wait;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
>
> @@ -4618,8 +4792,10 @@ VOID QxlDevice::WaitForCursorRing(VOID)
> }
> }
>
> +__declspec(code_seg("PAGE"))
> VOID QxlDevice::PushCursor(VOID)
> {
> + PAGED_CODE();
> int notify;
> DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> SPICE_RING_PUSH(m_CursorRing, notify);
> @@ -4736,8 +4912,10 @@ D3DDDIFORMAT PixelFormatFromBPP(UINT BPP)
> }
> }
>
> +__declspec(code_seg("PAGE"))
> UINT SpiceFromPixelFormat(D3DDDIFORMAT Format)
> {
> + PAGED_CODE();
> switch (Format)
> {
> case D3DDDIFMT_UNKNOWN:
> diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h
> index 24e0f64..8b90616 100755
> --- a/qxldod/QxlDod.h
> +++ b/qxldod/QxlDod.h
> @@ -215,23 +215,37 @@ class QxlDod;
>
> class HwDeviceInterface {
> public:
> + __declspec(code_seg("PAGE"))
> virtual ~HwDeviceInterface() {;}
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS QueryCurrentMode(PVIDEO_MODE RequestedMode) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS SetCurrentMode(ULONG Mode) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS GetCurrentMode(ULONG* Mode) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS SetPowerState(DEVICE_POWER_STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* pDispInfo) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS HWClose(void) = 0;
> virtual BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_ ULONG MessageNumber) = 0;
> virtual VOID DpcRoutine(PVOID) = 0;
> virtual VOID ResetDevice(void) = 0;
>
> + __declspec(code_seg("PAGE"))
> virtual ULONG GetModeCount(void) = 0;
> + __declspec(code_seg("PAGE"))
> PVIDEO_MODE_INFORMATION GetModeInfo(UINT idx) {return &m_ModeInfo[idx];}
> + __declspec(code_seg("PAGE"))
> USHORT GetModeNumber(USHORT idx) {return m_ModeNumbers[idx];}
> + __declspec(code_seg("PAGE"))
> USHORT GetCurrentModeIndex(void) {return m_CurrentMode;}
> + __declspec(code_seg("PAGE"))
> VOID SetCurrentModeIndex(USHORT idx) {m_CurrentMode = idx;}
> + __declspec(code_seg("PAGE"))
> virtual BOOLEAN EnablePointer(void) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS ExecutePresentDisplayOnly(_In_ BYTE* DstAddr,
> _In_ UINT DstBitPerPixel,
> _In_ BYTE* SrcAddr,
> @@ -243,13 +257,17 @@ public:
> _In_ RECT* pDirtyRect,
> _In_ D3DKMDT_VIDPN_PRESENT_PATH_ROTATION Rotation,
> _In_ const CURRENT_BDD_MODE* pModeCur) = 0;
> -
> + __declspec(code_seg("PAGE"))
> virtual VOID BlackOutScreen(CURRENT_BDD_MODE* pCurrentBddMod) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition) = 0;
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS Escape(_In_ CONST DXGKARG_ESCAPE* pEscap) = 0;
> ULONG GetId(void) { return m_Id; }
> protected:
> + __declspec(code_seg("PAGE"))
> virtual NTSTATUS GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo) = 0;
> protected:
> QxlDod* m_pQxlDod;
> @@ -265,16 +283,27 @@ class VgaDevice :
> public HwDeviceInterface
> {
> public:
> + __declspec(code_seg("PAGE"))
> VgaDevice(_In_ QxlDod* pQxlDod);
> + __declspec(code_seg("PAGE"))
> ~VgaDevice(void);
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryCurrentMode(PVIDEO_MODE RequestedMode);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetCurrentMode(ULONG Mode);
> + __declspec(code_seg("PAGE"))
> NTSTATUS GetCurrentMode(ULONG* Mode);
> + __declspec(code_seg("PAGE"))
> ULONG GetModeCount(void) {return m_ModeCount;}
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPowerState(DEVICE_POWER_STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo);
> + __declspec(code_seg("PAGE"))
> NTSTATUS HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* pDispInfo);
> + __declspec(code_seg("PAGE"))
> NTSTATUS HWClose(void);
> + __declspec(code_seg("PAGE"))
> BOOLEAN EnablePointer(void) { return TRUE; }
> + __declspec(code_seg("PAGE"))
> NTSTATUS ExecutePresentDisplayOnly(_In_ BYTE* DstAddr,
> _In_ UINT DstBitPerPixel,
> _In_ BYTE* SrcAddr,
> @@ -286,16 +315,22 @@ public:
> _In_ RECT* pDirtyRect,
> _In_ D3DKMDT_VIDPN_PRESENT_PATH_ROTATION Rotation,
> _In_ const CURRENT_BDD_MODE* pModeCur);
> + __declspec(code_seg("PAGE"))
> VOID BlackOutScreen(CURRENT_BDD_MODE* pCurrentBddMod);
> BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_ ULONG MessageNumber);
> VOID DpcRoutine(PVOID);
> VOID ResetDevice(VOID);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition);
> + __declspec(code_seg("PAGE"))
> NTSTATUS Escape(_In_ CONST DXGKARG_ESCAPE* pEscap);
> protected:
> + __declspec(code_seg("PAGE"))
> NTSTATUS GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo);
> private:
> + __declspec(code_seg("PAGE"))
> BOOL SetVideoModeInfo(UINT Idx, PVBE_MODEINFO pModeInfo);
> };
>
> @@ -438,16 +473,27 @@ class QxlDevice :
> public HwDeviceInterface
> {
> public:
> + __declspec(code_seg("PAGE"))
> QxlDevice(_In_ QxlDod* pQxlDod);
> + __declspec(code_seg("PAGE"))
> ~QxlDevice(void);
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryCurrentMode(PVIDEO_MODE RequestedMode);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetCurrentMode(ULONG Mode);
> + __declspec(code_seg("PAGE"))
> NTSTATUS GetCurrentMode(ULONG* Mode);
> + __declspec(code_seg("PAGE"))
> ULONG GetModeCount(void) {return m_ModeCount;}
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPowerState(DEVICE_POWER_STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo);
> + __declspec(code_seg("PAGE"))
> NTSTATUS HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* pDispInfo);
> + __declspec(code_seg("PAGE"))
> NTSTATUS HWClose(void);
> + __declspec(code_seg("PAGE"))
> BOOLEAN EnablePointer(void) { return FALSE; }
> + __declspec(code_seg("PAGE"))
> NTSTATUS ExecutePresentDisplayOnly(_In_ BYTE* DstAddr,
> _In_ UINT DstBitPerPixel,
> _In_ BYTE* SrcAddr,
> @@ -459,83 +505,140 @@ public:
> _In_ RECT* pDirtyRect,
> _In_ D3DKMDT_VIDPN_PRESENT_PATH_ROTATION Rotation,
> _In_ const CURRENT_BDD_MODE* pModeCur);
> + __declspec(code_seg("PAGE"))
> VOID BlackOutScreen(CURRENT_BDD_MODE* pCurrentBddMod);
> BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_ ULONG MessageNumber);
> VOID DpcRoutine(PVOID);
> VOID ResetDevice(VOID);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition);
> + __declspec(code_seg("PAGE"))
> NTSTATUS Escape(_In_ CONST DXGKARG_ESCAPE* pEscap);
> protected:
> + __declspec(code_seg("PAGE"))
> NTSTATUS GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo);
> + __declspec(code_seg("PAGE"))
> VOID BltBits (BLT_INFO* pDst,
> CONST BLT_INFO* pSrc,
> UINT NumRects,
> _In_reads_(NumRects) CONST RECT *pRects,
> POINT* pSourcePoint);
> + __declspec(code_seg("PAGE"))
> QXLDrawable *Drawable(UINT8 type,
> CONST RECT *area,
> CONST RECT *clip,
> UINT32 surface_id);
> + __declspec(code_seg("PAGE"))
> void PushDrawable(QXLDrawable *drawable);
> + __declspec(code_seg("PAGE"))
> void PushCursorCmd(QXLCursorCmd *cursor_cmd);
> + __declspec(code_seg("PAGE"))
> QXLDrawable *GetDrawable();
> + __declspec(code_seg("PAGE"))
> QXLCursorCmd *CursorCmd();
> + __declspec(code_seg("PAGE"))
> void *AllocMem(UINT32 mspace_type, size_t size, BOOL force);
> VOID UpdateArea(CONST RECT* area, UINT32 surface_id);
> + __declspec(code_seg("PAGE"))
> VOID SetImageId(InternalImage *internal,
> BOOL cache_me,
> LONG width,
> LONG height,
> UINT8 format, UINT32 key);
> private:
> + __declspec(code_seg("PAGE"))
> NTSTATUS QxlInit(DXGK_DISPLAY_INFORMATION* pDispInfo);
> + __declspec(code_seg("PAGE"))
> void QxlClose(void);
> + __declspec(code_seg("PAGE"))
> void UnmapMemory(void);
> + __declspec(code_seg("PAGE"))
> BOOL SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo);
> + __declspec(code_seg("PAGE"))
> void UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp);
> + __declspec(code_seg("PAGE"))
> BOOL InitMemSlots(void);
> + __declspec(code_seg("PAGE"))
> BOOL CreateMemSlots(void);
> + __declspec(code_seg("PAGE"))
> void DestroyMemSlots(void);
> + __declspec(code_seg("PAGE"))
> void CreatePrimarySurface(PVIDEO_MODE_INFORMATION pModeInfo);
> + __declspec(code_seg("PAGE"))
> void DestroyPrimarySurface(void);
> + __declspec(code_seg("PAGE"))
> void SetupHWSlot(UINT8 Idx, MemSlot *pSlot);
> + __declspec(code_seg("PAGE"))
> UINT8 SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend);
> + __declspec(code_seg("PAGE"))
> BOOL CreateEvents(void);
> + __declspec(code_seg("PAGE"))
> BOOL CreateRings(void);
> + __declspec(code_seg("PAGE"))
> UINT64 VA(QXLPHYSICAL paddr, UINT8 slot_id);
> + __declspec(code_seg("PAGE"))
> QXLPHYSICAL PA(PVOID virt, UINT8 slot_id);
> + __declspec(code_seg("PAGE"))
> void InitDeviceMemoryResources(void);
> + __declspec(code_seg("PAGE"))
> void InitMonitorConfig();
> + __declspec(code_seg("PAGE"))
> void InitMspace(UINT32 mspace_type, UINT8 *start, size_t capacity);
> + __declspec(code_seg("PAGE"))
> void FlushReleaseRing();
> + __declspec(code_seg("PAGE"))
> void FreeMem(UINT32 mspace_type, void *ptr);
> + __declspec(code_seg("PAGE"))
> UINT64 ReleaseOutput(UINT64 output_id);
> + __declspec(code_seg("PAGE"))
> void WaitForReleaseRing(void);
> + __declspec(code_seg("PAGE"))
> void EmptyReleaseRing(void);
> + __declspec(code_seg("PAGE"))
> BOOL SetClip(const RECT *clip, QXLDrawable *drawable);
> + __declspec(code_seg("PAGE"))
> void AddRes(QXLOutput *output, Resource *res);
> + __declspec(code_seg("PAGE"))
> void DrawableAddRes(QXLDrawable *drawable, Resource *res);
> + __declspec(code_seg("PAGE"))
> void CursorCmdAddRes(QXLCursorCmd *cmd, Resource *res);
> + __declspec(code_seg("PAGE"))
> void FreeClipRects(Resource *res);
> + __declspec(code_seg("PAGE"))
> void static FreeClipRectsEx(Resource *res);
> + __declspec(code_seg("PAGE"))
> void FreeBitmapImage(Resource *res);
> + __declspec(code_seg("PAGE"))
> void static FreeBitmapImageEx(Resource *res);
> + __declspec(code_seg("PAGE"))
> void static FreeCursorEx(Resource *res);
> + __declspec(code_seg("PAGE"))
> void FreeCursor(Resource *res);
> + __declspec(code_seg("PAGE"))
> void WaitForCmdRing(void);
> + __declspec(code_seg("PAGE"))
> void PushCmd(void);
> + __declspec(code_seg("PAGE"))
> void WaitForCursorRing(void);
> + __declspec(code_seg("PAGE"))
> void PushCursor(void);
> + __declspec(code_seg("PAGE"))
> void PutBytesAlign(QXLDataChunk **chunk_ptr, UINT8 **now_ptr,
> UINT8 **end_ptr, UINT8 *src, int size,
> size_t alloc_size, uint32_t alignment);
> BOOLEAN static DpcCallbackEx(PVOID);
> void DpcCallback(PDPC_CB_CONTEXT);
> + __declspec(code_seg("PAGE"))
> void AsyncIo(UCHAR Port, UCHAR Value);
> + __declspec(code_seg("PAGE"))
> void SyncIo(UCHAR Port, UCHAR Value);
> + __declspec(code_seg("PAGE"))
> NTSTATUS UpdateChildStatus(BOOLEAN connect);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetCustomDisplay(QXLEscapeSetCustomDisplay* custom_display);
> + __declspec(code_seg("PAGE"))
> void SetMonitorConfig(QXLHead* monitor_config);
>
> private:
> @@ -606,37 +709,41 @@ private:
> DWORD m_VgaCompatible;
> DWORD m_PointerCaps;
> public:
> + __declspec(code_seg("PAGE"))
> QxlDod(_In_ DEVICE_OBJECT* pPhysicalDeviceObject);
> + __declspec(code_seg("PAGE"))
> ~QxlDod(void);
> -#pragma code_seg(push)
> -#pragma code_seg()
> BOOLEAN IsDriverActive() const
> {
> return m_Flags.DriverStarted;
> }
> -#pragma code_seg(pop)
> -
> + __declspec(code_seg("PAGE"))
> NTSTATUS StartDevice(_In_ DXGK_START_INFO* pDxgkStartInfo,
> _In_ DXGKRNL_INTERFACE* pDxgkInterface,
> _Out_ ULONG* pNumberOfViews,
> _Out_ ULONG* pNumberOfChildren);
> + __declspec(code_seg("PAGE"))
> NTSTATUS StopDevice(VOID);
> // Must be Non-Paged
> VOID ResetDevice(VOID);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS DispatchIoRequest(_In_ ULONG VidPnSourceId,
> _In_ VIDEO_REQUEST_PACKET* pVideoRequestPacket);
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPowerState(_In_ ULONG HardwareUid,
> _In_ DEVICE_POWER_STATE DevicePowerState,
> _In_ POWER_ACTION ActionType);
> // Report back child capabilities
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryChildRelations(_Out_writes_bytes_(ChildRelationsSize) DXGK_CHILD_DESCRIPTOR* pChildRelations,
> _In_ ULONG ChildRelationsSize);
> -
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryChildStatus(_Inout_ DXGK_CHILD_STATUS* pChildStatus,
> _In_ BOOLEAN NonDestructiveOnly);
>
> // Return EDID if previously retrieved
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryDeviceDescriptor(_In_ ULONG ChildUid,
> _Inout_ DXGK_DEVICE_DESCRIPTOR* pDeviceDescriptor);
>
> @@ -647,37 +754,53 @@ public:
> VOID DpcRoutine(VOID);
>
> // Return DriverCaps, doesn't support other queries though
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryAdapterInfo(_In_ CONST DXGKARG_QUERYADAPTERINFO* pQueryAdapterInfo);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS Escape(_In_ CONST DXGKARG_ESCAPE* pEscape);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS PresentDisplayOnly(_In_ CONST DXGKARG_PRESENT_DISPLAYONLY* pPresentDisplayOnly);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryInterface(_In_ CONST PQUERY_INTERFACE QueryInterface);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS IsSupportedVidPn(_Inout_ DXGKARG_ISSUPPORTEDVIDPN* pIsSupportedVidPn);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS RecommendFunctionalVidPn(_In_ CONST DXGKARG_RECOMMENDFUNCTIONALVIDPN* CONST pRecommendFunctionalVidPn);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS RecommendVidPnTopology(_In_ CONST DXGKARG_RECOMMENDVIDPNTOPOLOGY* CONST pRecommendVidPnTopology);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS RecommendMonitorModes(_In_ CONST DXGKARG_RECOMMENDMONITORMODES* CONST pRecommendMonitorModes);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS EnumVidPnCofuncModality(_In_ CONST DXGKARG_ENUMVIDPNCOFUNCMODALITY* CONST pEnumCofuncModality);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetVidPnSourceVisibility(_In_ CONST DXGKARG_SETVIDPNSOURCEVISIBILITY* pSetVidPnSourceVisibility);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS CommitVidPn(_In_ CONST DXGKARG_COMMITVIDPN* CONST pCommitVidPn);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS UpdateActiveVidPnPresentPath(_In_ CONST DXGKARG_UPDATEACTIVEVIDPNPRESENTPATH* CONST pUpdateActiveVidPnPresentPath);
>
> + __declspec(code_seg("PAGE"))
> NTSTATUS QueryVidPnHWCapability(_Inout_ DXGKARG_QUERYVIDPNHWCAPABILITY* pVidPnHWCaps);
>
> // Part of PnPStop (PnP instance only), returns current mode information (which will be passed to fallback instance by dxgkrnl)
> + __declspec(code_seg("PAGE"))
> NTSTATUS StopDeviceAndReleasePostDisplayOwnership(_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
> _Out_ DXGK_DISPLAY_INFORMATION* pDisplayInfo);
>
> @@ -699,39 +822,52 @@ public:
> _In_ INT PositionY);
> PDXGKRNL_INTERFACE GetDxgkInterface(void) { return &m_DxgkInterface;}
> private:
> + __declspec(code_seg("PAGE"))
> VOID CleanUp(VOID);
> + __declspec(code_seg("PAGE"))
> NTSTATUS CheckHardware();
> + __declspec(code_seg("PAGE"))
> NTSTATUS WriteHWInfoStr(_In_ HANDLE DevInstRegKeyHandle, _In_ PCWSTR pszwValueName, _In_ PCSTR pszValue);
> // Set the given source mode on the given path
> + __declspec(code_seg("PAGE"))
> NTSTATUS SetSourceModeAndPath(CONST D3DKMDT_VIDPN_SOURCE_MODE* pSourceMode,
> CONST D3DKMDT_VIDPN_PRESENT_PATH* pPath);
>
> // Add the current mode to the given monitor source mode set
> + __declspec(code_seg("PAGE"))
> NTSTATUS AddSingleMonitorMode(_In_ CONST DXGKARG_RECOMMENDMONITORMODES* CONST pRecommendMonitorModes);
>
> // Add the current mode to the given VidPn source mode set
> + __declspec(code_seg("PAGE"))
> NTSTATUS AddSingleSourceMode(_In_ CONST DXGK_VIDPNSOURCEMODESET_INTERFACE* pVidPnSourceModeSetInterface,
> D3DKMDT_HVIDPNSOURCEMODESET hVidPnSourceModeSet,
> D3DDDI_VIDEO_PRESENT_SOURCE_ID SourceId);
>
> // Add the current mode (or the matching to pinned source mode) to the give VidPn target mode set
> + __declspec(code_seg("PAGE"))
> NTSTATUS AddSingleTargetMode(_In_ CONST DXGK_VIDPNTARGETMODESET_INTERFACE* pVidPnTargetModeSetInterface,
> D3DKMDT_HVIDPNTARGETMODESET hVidPnTargetModeSet,
> _In_opt_ CONST D3DKMDT_VIDPN_SOURCE_MODE* pVidPnPinnedSourceModeInfo,
> D3DDDI_VIDEO_PRESENT_SOURCE_ID SourceId);
> D3DDDI_VIDEO_PRESENT_SOURCE_ID FindSourceForTarget(D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId, BOOLEAN DefaultToZero);
> + __declspec(code_seg("PAGE"))
> NTSTATUS IsVidPnSourceModeFieldsValid(CONST D3DKMDT_VIDPN_SOURCE_MODE* pSourceMode) const;
> + __declspec(code_seg("PAGE"))
> NTSTATUS IsVidPnPathFieldsValid(CONST D3DKMDT_VIDPN_PRESENT_PATH* pPath) const;
> + __declspec(code_seg("PAGE"))
> NTSTATUS RegisterHWInfo(_In_ ULONG Id);
> + __declspec(code_seg("PAGE"))
> NTSTATUS ReadConfiguration();
> };
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS
> MapFrameBuffer(
> _In_ PHYSICAL_ADDRESS PhysicalAddress,
> _In_ ULONG Length,
> _Outptr_result_bytebuffer_(Length) VOID** VirtualAddress);
>
> +__declspec(code_seg("PAGE"))
> NTSTATUS
> UnmapFrameBuffer(
> _In_reads_bytes_(Length) VOID* VirtualAddress,
> @@ -739,6 +875,7 @@ UnmapFrameBuffer(
>
> UINT BPPFromPixelFormat(D3DDDIFORMAT Format);
> D3DDDIFORMAT PixelFormatFromBPP(UINT BPP);
> +__declspec(code_seg("PAGE"))
> UINT SpiceFromPixelFormat(D3DDDIFORMAT Format);
>
> VOID CopyBitsGeneric(
> --
> 2.7.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20160927/7355f976/attachment-0001.sig>
More information about the Spice-devel
mailing list