> On 27 Sep 2016, at 12:35 PM, Christophe Fergeau <cfergeau@xxxxxxxxxx> wrote: > > 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? Hi Christophe, #pragma code_seg() and __declspec(codes()) are interchangeable, in this specific case __declspec is more convenient. PAGED_CODE() is a run-time assertion to make sure that these functions are not used in high IRQL. I think you’re right and commit message should be improved. Ans answering your last question, it is desirable to have these functions in paged area to save non-pageable memory. ~Dmitry > > 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@xxxxxxxxxx> >> >> Signed-off-by: Sameeh Jubran <sameeh@xxxxxxxxxx> >> --- >> 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@xxxxxxxxxxxxxxxxxxxxx >> https://lists.freedesktop.org/mailman/listinfo/spice-devel _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel