mirror of
https://github.com/arehnman/yttrium-virtio-gpu.git
synced 2026-10-31 02:05:04 +00:00
106 lines
2.0 KiB
C++
106 lines
2.0 KiB
C++
#include "ParaNdis-Util.h"
|
|
#include "ndis56common.h"
|
|
|
|
void CNdisRefCounter::AddRef(ULONG RefCnt)
|
|
{
|
|
for (auto i = 0UL; i < RefCnt; ++i)
|
|
{
|
|
AddRef();
|
|
}
|
|
}
|
|
|
|
LONG CNdisRefCounter::Release(ULONG RefCnt)
|
|
{
|
|
LONG res = m_Counter;
|
|
|
|
for (auto i = 0UL; i < RefCnt; ++i)
|
|
{
|
|
res = Release();
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
//Generic delete operators
|
|
//Must never be called
|
|
void __CRTDECL operator delete(void *) throw()
|
|
{
|
|
ASSERT(FALSE);
|
|
#ifdef DBG
|
|
#pragma warning (push)
|
|
#pragma warning (disable:28159)
|
|
KeBugCheck(100);
|
|
#pragma warning (pop)
|
|
#endif
|
|
}
|
|
|
|
void __CRTDECL operator delete[](void *) throw()
|
|
{
|
|
ASSERT(FALSE);
|
|
#ifdef DBG
|
|
#pragma warning (push)
|
|
#pragma warning (disable:28159)
|
|
KeBugCheck(100);
|
|
#pragma warning (pop)
|
|
#endif
|
|
}
|
|
|
|
#ifdef RW_LOCK_62
|
|
bool CNdisRWLock::Create(NDIS_HANDLE miniportHandle) {
|
|
m_pLock = NdisAllocateRWLock(miniportHandle);
|
|
return m_pLock != 0;
|
|
}
|
|
#endif
|
|
|
|
|
|
ULONG ParaNdis_GetIndexFromAffinity(KAFFINITY affinity)
|
|
{
|
|
int shift = 0;
|
|
|
|
while (shift < sizeof(affinity) * 8)
|
|
{
|
|
switch (affinity & 0xff)
|
|
{
|
|
case 0:
|
|
break;
|
|
case 0x01:
|
|
return shift ;
|
|
case 0x02:
|
|
return shift + 1;
|
|
case 0x04:
|
|
return shift + 2;
|
|
case 0x08:
|
|
return shift + 3;
|
|
case 0x10:
|
|
return shift + 4;
|
|
case 0x20:
|
|
return shift + 5;
|
|
case 0x40:
|
|
return shift + 6;
|
|
case 0x80:
|
|
return shift + 7;
|
|
default:
|
|
return INVALID_PROCESSOR_INDEX;
|
|
}
|
|
affinity >>= 8;
|
|
shift += 8;
|
|
}
|
|
return INVALID_PROCESSOR_INDEX;
|
|
}
|