/*****************************************************************************
 **																			**
 **	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);
	}

}