mirror of
https://github.com/arehnman/yttrium-virtio-gpu.git
synced 2026-10-31 02:05:04 +00:00
Allocate RW lock in the constructor, if failed we will fail the context initialization. Free allocated CPU maps in the destructor, if allocated. No need in "IsRSSinitialized" anymore. Signed-off-by: Yuri Benditovich <[email protected]>
127 lines
2.4 KiB
C++
127 lines
2.4 KiB
C++
#include "ndis56common.h"
|
|
#include "kdebugprint.h"
|
|
#include "Trace.h"
|
|
#ifdef NETKVM_WPP_ENABLED
|
|
#include "ParaNdis_Util.tmh"
|
|
#endif
|
|
|
|
#ifdef DBG
|
|
void NetKvmAssert(bool Statement, ULONG Code)
|
|
{
|
|
if (!Statement)
|
|
{
|
|
KeBugCheckEx(0x0ABCDEF0,
|
|
0x0ABCDEF0,
|
|
Code,
|
|
NDIS_MINIPORT_MAJOR_VERSION,
|
|
NDIS_MINIPORT_MINOR_VERSION);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
bool CNdisSharedMemory::Allocate(ULONG Size, bool IsCached)
|
|
{
|
|
m_Size = Size;
|
|
m_IsCached = IsCached;
|
|
NdisMAllocateSharedMemory(m_DrvHandle, Size, m_IsCached, &m_VA, &m_PA);
|
|
return m_VA != nullptr;
|
|
}
|
|
|
|
CNdisSharedMemory::~CNdisSharedMemory()
|
|
{
|
|
if(m_VA != nullptr)
|
|
{
|
|
NdisMFreeSharedMemory(m_DrvHandle, m_Size, m_IsCached, m_VA, m_PA);
|
|
m_VA = nullptr;
|
|
}
|
|
}
|
|
|
|
//Generic delete operators
|
|
//Must never be called
|
|
void __CRTDECL operator delete(void *) throw()
|
|
{
|
|
NETKVM_ASSERT(FALSE);
|
|
#ifdef DBG
|
|
KeBugCheck(100);
|
|
#endif
|
|
}
|
|
|
|
void __CRTDECL operator delete(void *, UINT64) throw()
|
|
{
|
|
ASSERT(FALSE);
|
|
#ifdef DBG
|
|
KeBugCheck(100);
|
|
#endif
|
|
}
|
|
|
|
void __CRTDECL operator delete(void *, unsigned int) throw()
|
|
{
|
|
ASSERT(FALSE);
|
|
#ifdef DBG
|
|
KeBugCheck(100);
|
|
#endif
|
|
}
|
|
|
|
void __CRTDECL operator delete[](void *) throw()
|
|
{
|
|
NETKVM_ASSERT(FALSE);
|
|
#ifdef DBG
|
|
KeBugCheck(100);
|
|
#endif
|
|
}
|
|
|
|
#ifdef RW_LOCK_62
|
|
bool CNdisRWLock::Create(NDIS_HANDLE miniportHandle) {
|
|
m_pLock = NdisAllocateRWLock(miniportHandle);
|
|
if (!m_pLock)
|
|
{
|
|
DPrintf(0, "RSS RW lock allocation failed\n");
|
|
}
|
|
return m_pLock != 0;
|
|
}
|
|
#endif
|
|
|
|
|
|
ULONG ParaNdis_GetIndexFromAffinity(KAFFINITY affinity)
|
|
{
|
|
DWORD index = 0;
|
|
BOOLEAN result;
|
|
#ifdef _WIN64
|
|
result = BitScanForward64(&index, affinity);
|
|
#else
|
|
result = BitScanForward(&index, affinity);
|
|
#endif
|
|
if (result && ((KAFFINITY)1 << index) == affinity)
|
|
{
|
|
return index;
|
|
}
|
|
return INVALID_PROCESSOR_INDEX;
|
|
}
|
|
|
|
ULONG ParaNdis_GetSystemCPUCount()
|
|
{
|
|
ULONG nProcessors;
|
|
|
|
#if NDIS_SUPPORT_NDIS620
|
|
nProcessors = NdisGroupActiveProcessorCount(ALL_PROCESSOR_GROUPS);
|
|
#elif NDIS_SUPPORT_NDIS6
|
|
nProcessors = NdisSystemProcessorCount();
|
|
#else
|
|
#error not supported
|
|
#endif
|
|
|
|
return nProcessors;
|
|
}
|
|
|
|
void Parandis_UtilOnly_Trace(LONG level, LPCSTR s1, LPCSTR s2)
|
|
{
|
|
if (!s2)
|
|
{
|
|
TraceNoPrefix(level, "%s\n", s1);
|
|
}
|
|
else
|
|
{
|
|
TraceNoPrefix(level, "[%s] - format concatenation failed for %s", s1, s2);
|
|
}
|
|
}
|