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

📄 hwacproc.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 5 页
字号:
    		{  
       		    NDIS_STATUS Status;
		
       		pPacket = &(Adapter->SendPackets[Adapter->TxPacketGet]);
       		    Status = SendSinglePacket(Adapter,pPacket);
       		    if (Status == NDIS_STATUS_SUCCESS)
       		    {
           			//RETAILMSG(1,(TEXT("PS_AWAKE: Packet is Sent \r\n")));
           			Adapter->TxPacketGet++;
           			Adapter->TxPacketGet %= MAX_TX_PACKETS;
       		    }
       		    else
           	 		DBGPRINT(DBG_ERROR , ("PS_AWAKE:Send packet fail %d \r\n", Adapter->TxPacketGet));
    		}
    		LeaveCriticalSection(&Adapter->TxCriticalSection);
              }

		break;

#ifdef DEEP_SLEEP
	case MACREG_INT_CODE_DS_AWAKE:
		
 		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_DS_AWAKE\n"));
		
		if (Adapter->IsDeepSleep == TRUE) 
		{
			Adapter->IsDeepSleep = FALSE;
			Adapter->IsDeepSleepRequired= FALSE;
		}		

		InfraBssReconnectStart ( Adapter, RECONNECT_DEEP_SLEEP_AWAKE);
		
		break;
#endif

#ifdef HOST_WAKEUP
	case MACREG_INT_CODE_HOST_WAKE_UP:
        	{
            		DBGPRINT(DBG_MACEVENT | DBG_HOSTWAKEUP,("MACREG_INT_CODE_HOST_WAKE_UP\n"));
///                     AllenDBGPRINT(DBG_ALLEN,("MACREG_INT_CODE_HOST_WAKE_UP\n"));
            		Adapter->HostPowerState = HTWK_STATE_FULL_POWER;
        
            		UpdatePowerSaveState(Adapter, NULL, MACREG_INT_CODE_PS_AWAKE);

			PrepareAndSendCommand(
		       		Adapter,
		        		HostCmd_CMD_802_11_HOST_SLEEP_AWAKE_CONFIRM,
		        		0,					
		        		HostCmd_OPTION_USE_INT,
		        		0,
		        		HostCmd_PENDING_ON_NONE,
		        		0,
		        		FALSE,
		       	 	NULL,
		        		NULL,
		        		NULL,
		        		NULL); 

        	}    
		break;
#endif

	case MACREG_INT_CODE_CMD_FINISHED: // Command finished

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_CMD_FINISHED\n"));
		HandleCommandFinishedEvent(Adapter);
		break;

       case MACREG_INT_CODE_WPA_MIC_ERR_UNICAST:

	       DBGPRINT(DBG_MACEVENT | DBG_ALLEN, ("MACREG_INT_CODE_WPA_MIC_ERR_UNICAST\n"));
              HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_UNICAST);
              break;

       case MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST:

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN, ("MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST\n"));
              HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST);
              break;

	case MACREG_INT_CODE_RSSI_LOW:

		//AllenDBGPRINT(DBG_ALLEN,("MACREG_INT_CODE_RSSI_LOW\n"));	  
#ifdef ACTIVE_ROAMING
		Adapter->bIsActiveRoaming =TRUE;
		ActiveRoamingStart (Adapter);	
#endif 		
		DBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_RSSI_LOW\n"));
		break;
	case MACREG_INT_CODE_SNR_LOW:
		//AllenDBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_SNR_LOW\n"));
		break;
	case MACREG_INT_CODE_MAX_FAIL:
		//AllenDBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_MAX_FAIL\n"));
		break;

	// PJG: not implemented in the firmware. (in original fw from marvell)
	case MACREG_INT_CODE_MIB_CHANGED:
	case MACREG_INT_CODE_INIT_DONE:
	default: 
		break;
	}
    
	return;
}


/******************************************************************************
 *
 *  Name: MacEventDisconnected()
 *
 *  Description: MAC event handler for link lost condition, disassociation,
 *					deauthentication
 *
 *  Arguments:	PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
MacEventDisconnected(
	PMRVDRV_ADAPTER Adapter,
	UINT TimerValue,
	BOOLEAN PowerFlag
	)
{
	DBGPRINT(DBG_NEWPS | DBG_NEWCMD | DBG_ALLEN, ("MacEventDisconnected() \n"));

	//  need to clean up Rx and Tx first
	CleanUpSingleTxBuffer(Adapter);
	ResetRxPDQ(Adapter);

    	//  need to report disconnect event if currently associated
	if ( Adapter->MediaConnectStatus == NdisMediaStateConnected )
    	{				
		USHORT usCommand;
		/*
	    	// send a scan command to get the latest AP list 
	    	PrepareAndSendCommand(
		    		Adapter,
		    		HostCmd_CMD_802_11_SCAN,
		    		0,
		    		HostCmd_OPTION_USE_INT,
		    		(NDIS_OID)0,
		    		HostCmd_PENDING_ON_NONE,
		    		0,
		    		FALSE,
		    		NULL,
		    		NULL,
		    		NULL,
		    		NULL);
		*/		    		

		if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
              	usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
            	else
              	usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;

             	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;

//    	AllenDBGPRINT(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));       

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

	// 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;

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

	//AllenDBGPRINT(DBG_CMDRESP , ("HWAC: Cmd resp for 0x%x\n",pRetPtr->Command));
       
       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);

⌨️ 快捷键说明

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