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

📄 hwacproc.c

📁 marvell wifi driver CF-8385PN-NDIS-ARM4-WINCE50-5.24.17.p5-27.p11.src.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
            	PrepareAndSendCommand(
		    		Adapter,
		    		usCommand,
		    		0,
		    		HostCmd_OPTION_USE_INT,
		    		(NDIS_OID)0,
		    		HostCmd_PENDING_ON_NONE,
		    		0,
		    		FALSE,
		    		NULL,
		    		NULL,
		    		NULL,
		    		Adapter->CurrentBSSID);

		ResetDisconnectStatus(Adapter);
		
    	} 

	return;
}

/******************************************************************************
 *
 *  Name: HandleRFRegAccess()
 *
 *  Description: Patch offset 7 for rev 4 boards
 *
 *****************************************************************************/
#ifdef EVALBOARD_REV4_FIX
VOID HandleRFRegAccess(PHostCmd_DS_CMD_RF_REG_ACCESS pRegPtr, 
                       PMRVDRV_ADAPTER Adapter)
{
    	if ( Adapter->bApplyEvalBoardRev4Patch == TRUE )
    	{
       	OID_MRVL_DS_RF_REGISTER_ACCESS  RegAccBuffer;

        	// not applying the next access
        	Adapter->bApplyEvalBoardRev4Patch = FALSE;

        	RegAccBuffer.Oid = 0;
       	RegAccBuffer.usOffset = 0x7;
        	RegAccBuffer.usOffset = pRegPtr->Value | 0x1;

        	DBGPRINT(DBG_WARNING, ("EVALBOARD_REV4_FIX: set RF Reg offset 7 to 0x%x\n", 
              						  RegAccBuffer.usOffset));
        	// Rev 4 board patch
        	PrepareAndSendCommand(
			   		Adapter,
			    		HostCmd_CMD_RF_REG_ACCESS,
			    		HostCmd_ACT_SET,
			    		HostCmd_OPTION_USE_INT,
			    		0,
			    		0,
			    		0,
			    		FALSE,
			    		0,
			    		0,
			    		NULL,
			    		&RegAccBuffer);
    	}
}
#endif // #ifdef EVALBOARD_REV4_FIX

/******************************************************************************
 *
 *  Name: HandleCommandFinishedEvent()
 *
 *  Description: Command finished event handler
 * *  Arguments:	PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_FAILURE
 *      NDIS_STATUS_NOT_ACCEPTED
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
HandleCommandFinishedEvent(
	IN PMRVDRV_ADAPTER Adapter)
{
	USHORT Ret;
	BOOLEAN  timerStatus;
	PHostCmd_DS_GEN						 pRetPtr;
	PHostCmd_DS_GET_HW_SPEC				 pHWSpec;
	PHostCmd_DS_802_11_QUERY_STATUS		 pStatus;
	PHostCmd_DS_802_3_GET_STAT		     		 p3Stat;
	PHostCmd_DS_802_11_SCAN_RSP			 pScanResponse;
	PHostCmd_DS_802_11_ASSOCIATE_RESULT  	 pAssoResult;
	PHostCmd_DS_802_11_AD_HOC_RESULT	 	 pAdHocResult;
	USHORT								 	 Channel=0;
	LONG 								 	 lCurRSSI=0; 
	PHostCmd_DS_802_11_BAND_CONFIG 		 pBandConf;

    	DBGPRINT(DBG_CMDRESP , ("HWAC: Received cmd resp for 0x%x\n",Adapter->CurCmd->ExpectedRetCode));
//	RETAILMSG(1, (TEXT("HWAC: Received cmd resp for 0x%x \r\n"),Adapter->CurCmd->ExpectedRetCode));       

	// Get the command buffer
	pRetPtr = (PHostCmd_DS_GEN)Adapter->CurCmd->BufVirtualAddr;		

	DBGPRINT(DBG_CMDRESP , ("HWAC: Cmd resp for 0x%x\n",pRetPtr->Command));
	DBGPRINT(DBG_CMDRESP , ("HWAC: Received cmd resp for 0x%x\n",Adapter->CurCmd->ExpectedRetCode));
	
#ifdef CF_DRIVER
	// PDM: We need to read the responce from the card
       cf_ReadCommandResponse (Adapter,
                				       Adapter->CurCmd->BufVirtualAddr);
#endif
	
	Adapter->bIsDoingCmd = FALSE;

	Ret = pRetPtr->Command;

	if ( !Adapter->CurCmd ) 
       {
	       // False alarm
		DBGPRINT(DBG_CMDRESP | DBG_ERROR,
                		 ("**** hwacproc:  False trigger for command ****\n"));
		ResetCmdBuffer(Adapter);	
		return NDIS_STATUS_NOT_ACCEPTED;
	}

       // Now we got response from FW, cancel the command timer
	if ( Adapter->CommandTimerSet ) 
	{
		NdisMCancelTimer(
			&Adapter->MrvDrvCommandTimer, 
			&timerStatus);
		Adapter->CommandTimerSet = FALSE;
	}

       if ( Adapter->CurCmd->ExpectedRetCode != pRetPtr->Command )
       {
              DBGPRINT(DBG_ERROR, ("ERROR: Received different cmd response from "
              "expected!! Expected: 0x%x, Got: 0x%x\n", 
              Adapter->CurCmd->ExpectedRetCode, pRetPtr->Command));

		ReturnCmdNode(Adapter, Adapter->CurCmd);
		Adapter->CurCmd = NULL;
		GetCmdFromQueueToExecute (Adapter);
	
              return NDIS_STATUS_NOT_ACCEPTED;
       }

	// if the current return code is not 80xx, it's a time-out command
       if ( (Ret & HostCmd_RET_NONE) == 0 ) 
       {
		DBGPRINT(DBG_CMDRESP,("*** hwacproc: Command timeout from FW!!\n"));

		ReturnCmdNode(Adapter, Adapter->CurCmd);
		Adapter->CurCmd = NULL;
		GetCmdFromQueueToExecute (Adapter);

		return NDIS_STATUS_FAILURE;
	}

       // Command is not successful, return failure, clean-up command, and exit
	if ( pRetPtr->Result != HostCmd_RESULT_OK ) 
	{		
		return HandleHostCmdFailure(Ret, Adapter, pRetPtr);
	}

	switch( Ret ) 
	{

#ifdef BG_SCAN
    	case HostCmd_RET_802_11_BG_SCAN_CONFIG:
       	{
            		PHostCmd_DS_802_11_BG_SCAN_CONFIG   pCfg = (PHostCmd_DS_802_11_BG_SCAN_CONFIG) pRetPtr;

            		if ( pRetPtr->Result == HostCmd_RESULT_OK )
            		{
                		Adapter->bBgScanEnabled = pCfg->Enable;				
            		}
            		else
            		{
                		Adapter->bBgScanEnabled = FALSE;
            		}
					
                     //RETAILMSG(1, (TEXT("Got BG_SCAN_CONFIG command return [0x%x]  \r\n"), pRetPtr->Result));                      		
        	}            
        	break;
			
    	case HostCmd_RET_802_11_BG_SCAN_QUERY: 
		{
                    //RETAILMSG(1, (TEXT("HostCmd_RET_802_11_BG_SCAN_QUERY  [0x%x]  \r\n"), pRetPtr->Result));     
                   
			if ( pRetPtr->Result == HostCmd_RESULT_OK )
        		{
            			PHostCmd_DS_802_11_BG_SCAN_QUERY_RSP    pBgScanResponse; 
            			pBgScanResponse = (PHostCmd_DS_802_11_BG_SCAN_QUERY_RSP) pRetPtr;
            			{
                			PBSS_DESCRIPTION_SET_ALL_FIELDS     pDesc;
                			pDesc = (PBSS_DESCRIPTION_SET_ALL_FIELDS) (pBgScanResponse+1);
                		}
            			HandleBgScanResponse( pBgScanResponse, Adapter );
						
#ifdef ACTIVE_ROAMING
				if (Adapter->bActiveRoamingwithBGSCAN==TRUE)
		    	      	{
		    	             EnableBgScan(Adapter, FALSE);
                                  EnableBgScan(Adapter, TRUE);
			      	}				 
#endif	
                           	if (Adapter->bPSEnableBGScan==TRUE)
                           	{
                           		Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
 		 		    	Adapter->bPSEnableBGScan=FALSE;
                                	PSSleep(Adapter);  
                          	}				 
        		}
        		else
            			DBGPRINT( DBG_SCAN, ("[Mrvl] Failed to get background scan results!\n") );	
    		}	
        	break;
#endif 

	case HostCmd_RET_802_11_SUBSCRIBE_EVENT:
		{
			PHostCmd_DS_802_11_SUBSCRIBE_EVENT	pEventCmd;
			pEventCmd = (PHostCmd_DS_802_11_SUBSCRIBE_EVENT) pRetPtr;

			Adapter->SubscribeEvents = pEventCmd->Events;
			if (pEventCmd->Action == HostCmd_ACT_GET)
            {
				DBGPRINT(DBG_SUBSCRIBEEVENT, ("Adapter->SubscribeEvents = [%x]\n", 
                                              Adapter->SubscribeEvents));
			}
		}
		break;

#ifdef BCA
	case HostCmd_RET_802_11_BCA_CONFIG_TIMESHARE:
		TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_BCA_TIMESHARE, TrafficType, TimeShareInterval );
		break;
#endif //BCA
		
	case HostCmd_RET_802_11_LED_CONTROL:
		TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_LED_CONTROL, NumLed, data[0] );
		break;
		
#ifdef CAL_DATA
	case HostCmd_RET_802_11_CAL_DATA_EXT:
		TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_CAL_DATA_EXT, Revision, CalDataLen );
		break;
	case HostCmd_RET_802_11_CAL_DATA:
		TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_CAL_DATA, PAOption, Domain );
		break;
#endif //CAL_DATA

	case HostCmd_RET_802_11_PWR_CFG:
		TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_PWR_CFG, Enable, P2);
//		TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_DS_802_11_PWR_CFG, Enable, P2);
//		TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_PWR_CFG, P0, P1, P2 );
//		TT_CMDPARSE_SET_EVENT( Adapter );
		break;

	case HostCmd_RET_802_11_TPC_CFG:
		TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_TPC_CFG, Enable, P2);
//		TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_DS_802_11_TPC_CFG, Enable, P2);
//		TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_TPC_CFG, P0, P1, P2 );
//		TT_CMDPARSE_SET_EVENT( Adapter );
/*		{
			PHostCmd_DS_802_11_TPC_CFG		pCmdResult;
			
			NKDbgPrintfW( L"-v5- CMD_RSP: TPC_CFG, Result=%d\n",
				pCmdResult->Result );
		}
*/		break;
		
	case HostCmd_RET_802_11_RATE_ADAPT_RATESET:
		TT_CMDPARSE_CMD_RESP2(HostCmd_RATE_ADAPT_RATESET, EnableHwAuto, Bitmap);
//		TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_RATE_ADAPT_RATESET, EnableHwAuto );
//		TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_RATE_ADAPT_RATESET, EnableHwAuto, Bitmap, Bitmap );
//		TT_CMDPARSE_SET_EVENT( Adapter );
/*		{
			PHostCmd_RATE_ADAPT_RATESET	pCmdResult;

			pCmdResult = (PHostCmd_RATE_ADAPT_RATESET) pRetPtr;

			NKDbgPrintfW( L"-v5- CMD_RSP: RATE_ADAPT, Act=%d, Result=%d, Enable=%d, Bitmap=0x%x\n", 
				pCmdResult->Action, pCmdResult->Result, pCmdResult->EnableHwAuto, pCmdResult->Bitmap );

		}
*/		break;

//tt --

	
//#ifdef ADHOCAES
//		case HostCmd_RET_802_11_PWK_KEY:
//		{
//			PHostCmd_DS_802_11_PWK_KEY pCmd = (PHostCmd_DS_802_11_PWK_KEY)pRetPtr;
//			if (pCmd->Action == HostCmd_ACT_GET_AES)
//			{
//				HandleAdhocAES( Adapter,
//								  pCmd,
//			    					  Adapter->CurCmd->InformationBuffer,
//			    					  Adapter->CurCmd->BytesWritten);
//			}
//		}	
//
//		break;
//#endif		

		case HostCmd_RET_802_11_RSSI:

		{
            		PHostCmd_DS_802_11_RSSI pCmd = (PHostCmd_DS_802_11_RSSI)pRetPtr;
                		
  		        // store the non average value 
  		        Adapter->SNR[TYPE_BEACON][TYPE_NOAVG] = pCmd->SNR;
  		        Adapter->NF[TYPE_BEACON][TYPE_NOAVG]  = pCmd->NoiseFloor;
      
  		        Adapter->SNR[TYPE_BEACON][TYPE_AVG] = 
    		                CAL_AVG_SNR_NF(Adapter->SNR[TYPE_BEACON][TYPE_AVG],(pCmd->SNR));
  		        Adapter->NF[TYPE_BEACON][TYPE_AVG] = 
    		                CAL_AVG_SNR_NF(Adapter->NF[TYPE_BEACON][TYPE_AVG],(pCmd->NoiseFloor));

  		        // store the beacon values in SNRNF variable, which 
   		        // is present in adapter structure 

  		        Adapter->SNRNF[SNR_BEACON][TYPE_NOAVG]  = 
    		    	        (UCHAR)Adapter->SNR[TYPE_BEACON][TYPE_NOAVG];
  		        Adapter->SNRNF[SNR_BEACON][TYPE_AVG]  =
    		        Adapter->SNR[TYPE_BEACON][TYPE_AVG] / AVG_SCALE;

  		        Adapter->SNRNF[NF_BEACON][TYPE_NOAVG] = 
    		    	        (UCHAR)Adapter->NF[TYPE_BEACON][TYPE_NOAVG];
  		        Adapter->SNRNF[NF_BEACON][TYPE_AVG]   =
    		        Adapter->NF[TYPE_BEACON][TYPE_AVG] / AVG_SCALE;
   
  		        // NOTE: Adapter->SNRNF[SNR_RXPD][X] - represents RXPD for SNR
  		        //       Adapter->SNRNF[NF_RXPD][X] - represents RXPD for NF
    
  		        Adapter->RSSI[TYPE_BEACON][TYPE_NOAVG] = 
    		                CAL_RSSI(Adapter->SNR[TYPE_BEACON][TYPE_NOAVG],
        	        Adapter->NF[TYPE_BEACON][TYPE_NOAVG]);

  		        Adapter->RSSI[TYPE_BEACON][TYPE_AVG] = 
    		                CAL_RSSI(Adapter->SNR[TYPE_BEACON][TYPE_AVG] / AVG_SCALE,
      		        Adapter->NF[TYPE_BEACON][TYPE_AVG] / AVG_SCALE);

    		        if ((Adapter->RSSI[TYPE_BEACON][TYPE_AVG] > -10) || (Adapter->RSSI[TYPE_BEACON][TYPE_AVG] < -200))
            		{
            		        DBGPRINT(DBG_ERROR, ("ERROR: Incorrect RSSI Value1 - SNR = %d, "
                     	  		             "NF= %d, Adapter->RSSI[TYPE_BEACON][TYPE_AVG] = %d, Adapter->LastRSSI = %d\n", 
                        	             				   pCmd->SNR, 
                            	         			   pCmd->NoiseFloor,
                                 	             Adapter->RSSI[TYPE_BEACON][TYPE_AVG],
                                    	 			   Adapter->LastRSSI));
            		} 
            		else
            		{
                		if ( Adapter->LastRSSI == MRVL_DEFAULT_INITIAL_RSSI )
                		{
               		                 Adapter->LastRSSI = Adapter->RSSI[TYPE_BEACON][TYPE_AVG];                    
                		}
                		else
                		{
                   	                 Adapter->LastRSSI = ((Adapter->LastRSSI * 3)+(Adapter->RSSI[TYPE_BEACON][TYPE_AVG]))/4;
                		}
            		}    
            		
   		        DBGPRINT(DBG_CMDRESP, ("HostCmd_RET_802_11_RSSI: pCmd->SNR = %d,pCmd->NoiseFloor= %d,Adapter->RSSI[TYPE_BEACON][TYPE_NOAVG] = %d, Adapter->RSSI[TYPE_BEACON][TYPE_AVG]= %d, Adapter->LastRSSI=%d\n", 
              			               pCmd->SNR, 
                                  	       pCmd->NoiseFloor,
                                    	       Adapter->RSSI[TYPE_BEACON][TYPE_NOAVG],
                                    	       Adapter->RSSI[TYPE_BEACON][TYPE_AVG],
                                    	       Adapter->LastRSSI));
			break;
		}

		case HostCmd_RET_REGION_CODE:
			
#ifndef ENABLE_802_11D
			{
                     	PHostCmd_DS_CMD_REGION_CODE pCmd = (PHostCmd_DS_CMD_REGION_CODE)pRetPtr;
                            if (pCmd->Action == HostCmd_ACT_SET)
                            {
					Adapter->RegionCode = pCmd->RegionCode;
					SetRegionCode(Adapter);
                            }
				else
				{
            				POID_MRVL_DS_REGION_CODE    pUserBuffer;

            				pUserBuffer = (POID_MRVL_DS_REGION_CODE) Adapter->CurCmd->InformationBuffer;

            				pUserBuffer->ulRegionCode = pCmd->RegionCode;
            				*(Adapter->CurCmd->BytesWritten) = sizeof(OID_MRVL_DS_REGION_CODE);	
				}
			}
#endif		
			break;
			
		case HostCmd_RET_HW_SPEC_INFO:

			pHWSpec = (PHostCmd_DS_GET_HW_SPEC)pRetPtr;
			HandleHardwareSpec(pHWSpec, Adapter);

			break;

		case HostCmd_RET_802_11_RESET:

			DBGPRINT(DBG_CMDRESP,("HWAC - Reset command successful\n"));	
	

⌨️ 快捷键说明

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