⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rxproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 2 页
字号:
    {
        DBGPRINT(DBG_ERROR, ("ERROR: numOutstandingPacket already 0 before subtraction!!\n"));
        NdisReleaseSpinLock(&Adapter->RxQueueSpinLock);
        return;
    }

    //lykao, 062005
    if(Adapter->sNumOutstandingRxPacket>1)
      {
          //NKDbgPrintfW(L"[Marvell]ReturnRxPacketDesc:Error!!NumOutstandingRxPacket = %d\n", Adapter->sNumOutstandingRxPacket);
      }
  
    Adapter->sNumOutstandingRxPacket--;
    DBGPRINT(DBG_RXDATA, ("PacketNode(0x%x) with Packet(0x%x) returned, NumOutstandingRxPacket = %d\n", 
                            pPacketNode,
                            pPacketNode->pPacket,
                            Adapter->sNumOutstandingRxPacket));
    
    NdisReleaseSpinLock(&Adapter->RxQueueSpinLock);
    //RETAILMSG(1,(TEXT("[Marvell]-ReturnRxPacketDesc")));
}

#ifdef NEW_RSSI
/******************************************************************************
 *
 *  Name: wlan_compute_rssi()
 *
 *  Description: This function computes the RSSI in received packet
 *
 *  Arguments:  PMRVDRV_ADAPTER Adapter:  A pointer to wlan adapter structure
                        RxPD   pRxPDCurrent: A pointer to RxPD structure of received packet
 *    
 *  Return Value: NONE
 * 
 *  Notes:        
 *
 *****************************************************************************/
__inline 
VOID
wlan_compute_rssi(PMRVDRV_ADAPTER Adapter, PRxPD   pRxPDCurrent)
{

    DBGPRINT(DBG_RXDATA ,("RxPD: SNR = %d, NF = %d\n", pRxPDCurrent->SNR, pRxPDCurrent->NF));
    DBGPRINT(DBG_RXDATA ,("Before computing SNR and NF\n"));
    DBGPRINT(DBG_RXDATA,("Adapter: SNR- avg = %d, NF-avg = %d\n", Adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, Adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE));
   //Ling++, 012006
   // V5DbgMsg( (L"[Marvell]NEW_RSSI:RxPD: SNR = %d, NF = %d\n", pRxPDCurrent->SNR, pRxPDCurrent->NF));
   // V5DbgMsg( (L"[Marvell]NEW_RSSI:Befroe computing SNR: SNR- avg = %d, NF-avg = %d\n", Adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, Adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE) );
  //Ling--, 012006
  
     Adapter->SNR[TYPE_RXPD][TYPE_NOAVG] = pRxPDCurrent->SNR;
     Adapter->NF[TYPE_RXPD][TYPE_NOAVG] = pRxPDCurrent->NF;
     Adapter->RxPDRate = pRxPDCurrent->RxRate;
     //Adapter->RxPDSNRAge = os_time_get();

      /* Average out the SNR from the received packet */
      Adapter->SNR[TYPE_RXPD][TYPE_AVG] =
        CAL_AVG_SNR_NF(Adapter->SNR[TYPE_RXPD][TYPE_AVG], pRxPDCurrent->SNR,Adapter->data_avg_factor);

      /* Average out the NF value */
      Adapter->NF[TYPE_RXPD][TYPE_AVG] = 
        CAL_AVG_SNR_NF(Adapter->NF[TYPE_RXPD][TYPE_AVG], pRxPDCurrent->NF, Adapter->data_avg_factor);
    
      DBGPRINT(DBG_RXDATA ,("After computing SNR and NF\n"));
      DBGPRINT(DBG_RXDATA ,("Adapter: SNR- avg = %d, NF-avg = %d\n", (Adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE), (Adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE)));

      //Ling++, 012006	
      //V5DbgMsg( (L"[Marvell]NEW_RSSI:Aftter computing SNR: SNR- avg = %d, NF-avg = %d\n", Adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE, Adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE) );
      //Ling--, 012006
	  
      Adapter->RSSI[TYPE_RXPD][TYPE_NOAVG] = 
    		(SHORT)CAL_RSSI(Adapter->SNR[TYPE_RXPD][TYPE_NOAVG],
    			Adapter->NF[TYPE_RXPD][TYPE_NOAVG]);

      //Ling++, 012706, update RSSI[TYPE_RXPD][TYPE_AVG]
      if(Adapter->LastRSSI==Adapter->RSSI[TYPE_BEACON][TYPE_AVG] )
      	{
      	     if((Adapter->RSSI[TYPE_RXPD][TYPE_AVG]-Adapter->LastRSSI)>Adapter->RSSI_Range ||(Adapter->RSSI[TYPE_RXPD][TYPE_AVG] -Adapter->LastRSSI)< Adapter->NegativeRSSI_Range )
               Adapter->RSSI[TYPE_RXPD][TYPE_AVG] = Adapter->RSSI[TYPE_BEACON][TYPE_AVG];
      	}	
      //Ling--, 012706
      Adapter->RSSI[TYPE_RXPD][TYPE_AVG] = 
    		(SHORT)CAL_RSSI(Adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE,
    			Adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE);

    
	  Adapter->ulRSSITickCount=GetTickCount();
    //Ling++, 012006	
       //V5DbgMsg( (L"[Marvell]NEW_RSSI:Aftter computing   Adapter->ulRSSITickCount=%ld, RSSI-Avg = %d, RSSI-noAvg = %d\n", Adapter->ulRSSITickCount, Adapter->RSSI[TYPE_RXPD][TYPE_AVG],  Adapter->RSSI[TYPE_RXPD][TYPE_NOAVG]) );
    //Ling--, 012006
         if ((Adapter->RSSI[TYPE_RXPD][TYPE_AVG] > -10) || (Adapter->RSSI[TYPE_RXPD][TYPE_AVG] < -200))
            {
    
    	    //Ling++, 011206
    	     if(Adapter->MediaConnectStatus == NdisMediaStateConnected)
                	{
                DBGPRINT(DBG_ERROR, ("ERROR: Incorrect RSSI Value2 - SNR = %d, "
                                     "NF= %d, Adapter->RSSI[TYPE_RXPD][TYPE_AVG] = %d, Adapter->LastRSSI = %d\n", 
                                     pRxPDCurrent->SNR, 
                                     pRxPDCurrent->NF,
                                     Adapter->RSSI[TYPE_RXPD][TYPE_AVG],
                                     Adapter->LastRSSI));
                     //Ling++, 011206
                   V5DbgMsg( (L"[Marvell]NEW_RSSI:RSSI-Avg = %d, >-10 and <-200\n", Adapter->RSSI[TYPE_RXPD][TYPE_AVG]) );
    	     //Ling--, 011206		 
                	}
    	     //Ling--, 011206	
    	  	
            }
            else
            {           
                    Adapter->LastRSSI = (LONG)Adapter->RSSI[TYPE_RXPD][TYPE_AVG];                      
            }
        
       if (Adapter->LastRSSI <= Adapter->RSSITriggerValue)
        {
          // Increment RSSITriggerCounter
          Adapter->RSSITriggerCounter++;
        }
        else
        {
          // Reset the counter if RSSI goes above the trigger level
          if (Adapter->RSSITriggerCounter !=0)
            Adapter->RSSITriggerCounter=0;
        }
      
        // If the trigger occurs many times, send indication above
      if (Adapter->RSSITriggerCounter >= MRVDRV_RSSI_INDICATION_THRESHOLD)
        {     
          // Indicate to protocol driver about RSSI status
          NdisMIndicateStatus(Adapter->MrvDrvAdapterHdl,
                NDIS_STATUS_MEDIA_SPECIFIC_INDICATION,
                &(Adapter->LastRSSI),
                sizeof(LONG));
          NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
      //Ling++, 012006
     //	V5DbgMsg( (L"[Marvell]NEW_RSSI:Adapter->RSSITriggerCounter = %d, Adapter->RSSITriggerValue=%d, indicate RSSI status\n", Adapter->RSSITriggerCounter, Adapter->RSSITriggerValue) );
     //Ling--, 012006
          // Reset the counter
          Adapter->RSSITriggerCounter=0;
    
        }

}
#endif


/******************************************************************************
 *
 *  Name: HandleRxReadyEvent()
 *
 *  Description: Rx ready event handler
 *
 *  Arguments:  PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
HandleRxReadyEvent(
  IN PMRVDRV_ADAPTER Adapter)
{
  int                         IsRxOK = 0;
  PRxPD                   pRxPDCurrent;
  PNDIS_PACKET      pPacket;
  NDIS_STATUS        pStatus;

  #ifndef NEW_RSSI
       SHORT    sNF; 
       LONG     CurRSSI;
      #ifndef MRV_CHIP_8385		///#ifndef MRV_CHIP_8385PN 
        SHORT    sSNR;
      #endif    
  #endif
     //USHORT i;

  DBGPRINT(DBG_RXDATA | DBG_CRLF,("+HandleRxReadyEvent()\n"));
      // RETAILMSG(1,(TEXT("[Marvell]+HandleRxReadyEvent")));
    /// Check RxPD status and update 802.3 stat, we should have more bits to test

  
  //pRxPDCurrent = (PRxPD)(&Adapter->RxPD1);
  pRxPDCurrent = (PRxPD)(Adapter->pRxPD1);

/* dralee mask out, dummy checking 
//lykao, 061605
if ( Adapter->ulRxSize == 0 ||
     Adapter->ulRxSize > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE )                         
{
      DBGPRINT(DBG_ERROR,("RECV Got Huge packet size %d discarding\n", 
                Adapter->ulRxSize));
                RETAILMSG(1, (L"[Marvell]HandleRxReadyEvent:Error!! Adapter->ulRxSize = %ld", Adapter->ulRxSize ));
        
      return;
    }  
*/



//HexDump(DBG_RXDATADUMP, "RX Buffer", (PUCHAR)(&Adapter->RxPD1), sizeof(RxPD));
//HexDump(DBG_RXDATADUMP, "RX Buffer", (PUCHAR)Adapter->pRxBuf, Adapter->ulRxSize);

//lykao, 060905, begin
if (pRxPDCurrent->Status & MRVDRV_RXPD_STATUS_OK)
  {
     
      Adapter->RcvOK++;
      Adapter->DirectedFramesRcvOK++;
   #ifdef NEW_RSSI
     wlan_compute_rssi(Adapter,pRxPDCurrent);
   #else //NEW_RSSI     

           #if (defined(MRV_CHIP_8385)||defined(MRV_CHIP_8388)||defined(MRV_CHIP_8686))		
		///#ifdef MRV_CHIP_8385PN / defined(MRV_CHIP_8388) / #elif defined( MRV_CHIP_8686PN)   //dralee_1209
            {
				sNF =-((SHORT)((pRxPDCurrent->NF & 0X7F) + 5));                    
				CurRSSI = -((SHORT)((pRxPDCurrent->SNR & 0X7F) + 5));
            }
           #else  
            {
                sNF = -((SHORT)((pRxPDCurrent->NF & 0X7F) + 30 + 5));
                     sSNR = (SHORT)((pRxPDCurrent->SNR & 0X7F)
                     CurRSSI = sSNR + sNF;
            }    
           #endif 

                Adapter->RxPDRate = pRxPDCurrent->RxRate;
                DBGPRINT(DBG_RXDATA, ("Print Rx RSSI Value - SNR = %d, "
                                     "NFRaw = %d, NF = %d, RSSI = %d\n", 
                                     pRxPDCurrent->SNR, 
                                     pRxPDCurrent->NF,
                                     sNF,
                                     Adapter->LastRSSI));
         
                if ((CurRSSI > 0) || (CurRSSI < -200))
                {
                    DBGPRINT(DBG_ERROR, ("ERROR: Incorrect RSSI Value2 -CurRSSI = %d, SNR = %d, "
                                         "NFRaw = %d, NF = %d, Ave = %d\n",
                                         CurRSSI,
                                         pRxPDCurrent->SNR, 
                                         pRxPDCurrent->NF,
                                         sNF,
                                         Adapter->LastRSSI));
                }
                else
                {
                    if (Adapter->LastRSSI == MRVL_DEFAULT_INITIAL_RSSI)
                    {
                        Adapter->LastRSSI = CurRSSI;                    
                    }
                    else
                    {
                    Adapter->LastRSSI = ((Adapter->LastRSSI*7)+CurRSSI)>>3;
                    }
                }
            
            if (Adapter->LastRSSI <= Adapter->RSSITriggerValue)
            {
              // Increment RSSITriggerCounter
              Adapter->RSSITriggerCounter++;
            }
            else
            {
              // Reset the counter if RSSI goes above the trigger level
              if (Adapter->RSSITriggerCounter !=0)
                Adapter->RSSITriggerCounter=0;
            }
          
            // If the trigger occurs many times, send indication above
            if (Adapter->RSSITriggerCounter >= MRVDRV_RSSI_INDICATION_THRESHOLD)
            {     
              // Indicate to protocol driver about RSSI status
              NdisMIndicateStatus(Adapter->MrvDrvAdapterHdl,
                    NDIS_STATUS_MEDIA_SPECIFIC_INDICATION,
                    &(Adapter->LastRSSI),
                    sizeof(LONG));
              NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
            
              // Reset the counter
              Adapter->RSSITriggerCounter=0;
            }
          //lykao, 060905, end
#endif //NEW_RSSI  
    }
   else
  {
    DBGPRINT(DBG_RXDATA | DBG_WARNING,("WARNING: frame received with bad status\n"));
    RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent:WARNING: frame received with bad status")));

#ifdef TX_PRY_Q_EXTRA
    //dralee++ 09212005 for error handling 
    pPacket = Adapter->pRxCurPkt;
    Adapter->pRxCurPkt = NULL; 
    if( pPacket )
        ReturnRxPacketDesc(Adapter,pPacket);
#endif



    return;
  }
        
     
    pPacket = Adapter->pRxCurPkt;
    Adapter->pRxCurPkt = NULL;  

    if (Adapter->MediaConnectStatus == NdisMediaStateConnected)
    {              
               
        //PRxPD pRxPD = (PRxPD)(Adapter->pRxPD1);

        Adapter->ulRxByteInLastPeriod += Adapter->ulRxSize;  

        //pPacket = Adapter->pRxCurPkt;

        
        NDIS_SET_PACKET_STATUS(pPacket, NDIS_STATUS_SUCCESS);


        //NdisAdjustBufferLength(pBuffer, Adapter->ulRxSize);

    //NdisMoveMemory( pRxBufVM, Adapter->pRxBuf, Adapter->ulRxSize);

   //lykao, 062005  
        //NDIS_SET_PACKET_STATUS(pPacket, NDIS_STATUS_SUCCESS);
        //NDIS_SET_PACKET_STATUS(pPacket, NDIS_STATUS_RESOURCES);
              //RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent: before NdisMIndicateReceivePacket ")));
        NdisMIndicateReceivePacket(Adapter->MrvDrvAdapterHdl, &pPacket, 1);
    //RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent: after NdisMIndicateReceivePacket ")));
          //lykao, 061805
    // for(i=0;i<50;i++);
      
        pStatus = NDIS_GET_PACKET_STATUS(pPacket);
        
        if ((pStatus == NDIS_STATUS_RESOURCES) || (pStatus == NDIS_STATUS_SUCCESS))
        {
      // return packet
            DBGPRINT(DBG_RXDATA, ("Packet returned success or resources...\n"));
              //lykao, 062005
    //if(pStatus == NDIS_STATUS_RESOURCES)
              //{
          // RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent:Packet returned Resources")));    
              //}else
              //{
         //  //RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent:Packet returned Success")));    
            //  }
              
       //RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent: ReturnRxpacketDesc")));
            ReturnRxPacketDesc(Adapter,pPacket);            
        }
        else
        {
           RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent:Packet returned pending...")));
            DBGPRINT(DBG_RXDATA, ("Packet returned pending...\n"));
        }
    }
    else
    {
        DBGPRINT(DBG_RXDATA, ("Not connected, packet was dropped...\n"));
        RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent:Not connected, packet was dropped...ReturnRxPacketDesc  ")));
        ReturnRxPacketDesc(Adapter,pPacket);
    }
       //RETAILMSG(1,(TEXT("[Marvell]-HandleRxReadyEvent")));
  DBGPRINT(DBG_RXDATA,("-HandleRxReadyEvent()\n\n")); 
  
  return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -