windows-nt/Source/XPSP1/NT/drivers/net/irda/mknet/sys/util.c
2020-09-26 16:20:57 +08:00

86 lines
2.3 KiB
C

/*****************************************************************************
** **
** COPYRIGHT (C) 2000, 2001 MKNET CORPORATION **
** DEVELOPED FOR THE MK7100-BASED VFIR PCI CONTROLLER. **
** **
*****************************************************************************/
/**********************************************************************
Module Name:
UTIL.C
Routines:
GetPacketInfo
ProcReturnedRpd
Comments:
Various utilities to assist in operating in the NDIS env.
**********************************************************************/
#include "precomp.h"
//#include "protot.h"
#pragma hdrstop
//-----------------------------------------------------------------------------
// Procedure: [GetPacketInfo]
//
//-----------------------------------------------------------------------------
PNDIS_IRDA_PACKET_INFO GetPacketInfo(PNDIS_PACKET packet)
{
MEDIA_SPECIFIC_INFORMATION *mediaInfo;
UINT size;
NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(packet, &mediaInfo, &size);
return (PNDIS_IRDA_PACKET_INFO)mediaInfo->ClassInformation;
}
//----------------------------------------------------------------------
// Procedure: [ProcReturnedRpd]
//
// Description: Process a RPD (previously indicated pkt) being returned
// to us from NDIS.
//
//----------------------------------------------------------------------
VOID ProcReturnedRpd(PMK7_ADAPTER Adapter, PRPD rpd)
{
NdisAdjustBufferLength(rpd->ReceiveBuffer, MK7_MAXIMUM_PACKET_SIZE);
//******************************
// If a RCB is waiting for a RPD, bind the RPD to the RCB-RRD
// and give the RCB-RRD to hw. Else, put the RPD on FreeRpdList.
//******************************
if (Adapter->rcbPendRpdCnt > 0) {
PRCB rcb;
rcb = Adapter->pRcbArray[Adapter->rcbPendRpdIdx];
rcb->rpd = rpd;
rcb->rrd->addr = rpd->databuffphys;
rcb->rrd->count = 0;
GrantRrdToHw(rcb->rrd);
Adapter->rcbPendRpdCnt--;
//****************************************
// If more RCBs waiting for RPDs then need to
// bump the index up, taking care of wrapping.
//****************************************
if (Adapter->rcbPendRpdCnt > 0) {
Adapter->rcbPendRpdIdx++;
Adapter->rcbPendRpdIdx %= Adapter->NumRcb;
}
}
else {
QueuePutTail(&Adapter->FreeRpdList, &rpd->link);
}
}