- Implement NdisDprAllocatePacket

svn path=/branches/aicom-network-fixes/; revision=36190
This commit is contained in:
Cameron Gutman 2008-09-13 16:33:23 +00:00
parent c875c6ffac
commit 08c2fa4ccb

View file

@ -694,7 +694,7 @@ NdisCopyFromPacketToPacket(
/*
* @unimplemented
* @implemented
*/
VOID
EXPORT
@ -710,7 +710,37 @@ NdisDprAllocatePacket(
* PoolHandle = Handle returned by NdisAllocatePacketPool
*/
{
*Status = NDIS_STATUS_FAILURE;
PNDIS_PACKET Temp;
PNDISI_PACKET_POOL Pool = (PNDISI_PACKET_POOL)PoolHandle;
NDIS_DbgPrint(MAX_TRACE, ("Status (0x%X) Packet (0x%X) PoolHandle (0x%X).\n",
Status, Packet, PoolHandle));
*Packet = NULL;
if (Pool == NULL)
{
*Status = NDIS_STATUS_FAILURE;
return;
}
KeAcquireSpinLockAtDpcLevel(&Pool->SpinLock.SpinLock);
if (Pool->FreeList) {
Temp = Pool->FreeList;
Pool->FreeList = (PNDIS_PACKET)Temp->Private.Head;
KeReleaseSpinLockFromDpcLevel(&Pool->SpinLock.SpinLock);
RtlZeroMemory(&Temp->Private, sizeof(NDIS_PACKET_PRIVATE));
Temp->Private.Pool = Pool;
*Packet = Temp;
*Status = NDIS_STATUS_SUCCESS;
} else {
*Status = NDIS_STATUS_RESOURCES;
KeReleaseSpinLockFromDpcLevel(&Pool->SpinLock.SpinLock);
}
}