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

📄 miscproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
			V5DbgMsg( (L"@ indicate get bssid fail\n") );
#ifdef WLAN_PMU_INFO_COMPLETE
			NdisMQueryInformationComplete(
						Adapter->MrvDrvAdapterHdl,
						NDIS_STATUS_FAILURE);
#endif
	  }
	}	

     if ((pRetPtr->Command == HostCmd_RET_802_11_ASSOCIATE)   &&
		(pRetPtr->Command == HostCmd_RET_802_11_REASSOCIATE) &&
	    (pRetPtr->Command == HostCmd_RET_802_11_REASSOCIATE) &&
	    (pRetPtr->Command == HostCmd_RET_802_11_AD_HOC_START))
    {
        Adapter->bIsAssociateInProgress = FALSE;
        Adapter->bIsAssociationBlockedByScan = FALSE;
		
		if (Adapter->PendingSetSssidOid.bIsPendingOID)
		{
#ifdef WLAN_PMU_INFO_COMPLETE
			NdisMQueryInformationComplete(
						Adapter->MrvDrvAdapterHdl,
						NDIS_STATUS_FAILURE);
#endif
		}
    }

	/// old code : verify later
    if ((pRetPtr->Command == HostCmd_RET_802_11_SCAN ) &&
	    (pRetPtr->Command == HostCmd_RET_802_11_ASSOCIATE)   &&
		(pRetPtr->Command == HostCmd_RET_802_11_REASSOCIATE) &&
	    (pRetPtr->Command == HostCmd_RET_802_11_REASSOCIATE) &&
	    (pRetPtr->Command == HostCmd_RET_802_11_AD_HOC_START))
    {
   	    // if there is a reset pending
		if (Adapter->bIsPendingReset == TRUE)
		{
			Adapter->bIsPendingReset = FALSE;
			DBGPRINT(DBG_TIMERS,("HWAC - Sending ResetComplete \n"));
			Adapter->HardwareStatus = NdisHardwareStatusReady;

			// Call SetMacPacketFilter()
		    SetMacPacketFilter(
			    	Adapter,
					Adapter->CurrentPacketFilter);
			NdisMResetComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_SUCCESS,
					FALSE);		
		}
    }

	// set the timer state variable to TRUE
	Adapter->isCommandTimerExpired = TRUE;

	if( pTempNode->PendingInfo == HostCmd_PENDING_ON_GET_OID )
    {
#ifdef WLAN_PMU_INFO_COMPLETE
		NdisMQueryInformationComplete(
				Adapter->MrvDrvAdapterHdl,
				NDIS_STATUS_NOT_ACCEPTED
            	);
#endif
        DBGPRINT(DBG_CMDRESP, ("Call NdisMQueryInformationComplete With FAILURE\n"));
		
	}
	else if( pTempNode->PendingInfo == HostCmd_PENDING_ON_SET_OID )
    {
#ifdef WLAN_PMU_INFO_COMPLETE
    #ifndef DEBUG_NIDIS_SETINFOR	
		NdisMSetInformationComplete(
				Adapter->MrvDrvAdapterHdl,
				NDIS_STATUS_RESOURCES
            	);
    #else        	
        Para_NdisMSetInformationComplete(
            TEXT(__FUNCTION__),__LINE__,
				Adapter->MrvDrvAdapterHdl,
				NDIS_STATUS_RESOURCES);
    #endif        	
#endif    
        DBGPRINT(DBG_CMDRESP, ("Call NdisMSetInformationComplete With FAILURE\n"));
	}

	// Clean up 
	ReturnCmdNode (Adapter,Adapter->CurCmd);
	Adapter->CurCmd = NULL;

	//// ExecuteNextCommand(Adapter);
	GetCmdFromQueueToExecute (Adapter);
	return;
}

/******************************************************************************
 *
 *  Name: SetStationPowerState()
 *
 *  Description: Set MrvDrv power state
 *
 *  Conditions for Use: Called by power state set OID handler
 *
 *  Arguments:           
 *      PMRVDRV_ADAPTER Adapter
 *      NDIS_DEVICE_POWER_STATE NewPowerState
 *      IN NDIS_OID Oid
 *      IN PULONG BytesRead
 *      IN PULONG BytesNeeded
 *      IN PVOID InformationBuffer
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
SetStationPowerState(
    PMRVDRV_ADAPTER Adapter,
	NDIS_DEVICE_POWER_STATE NewPowerState,
	IN NDIS_OID Oid,
	IN PULONG BytesRead,
	IN PULONG BytesNeeded,
	IN PVOID InformationBuffer)
{

#ifndef CONFIG_WLAN_PMU
    BOOLEAN     bFwReloaded = FALSE;
    USHORT          Action;
    IF_FW_STATUS  SpiFWStatus;
#endif
    BOOLEAN timerStatus;
    if( Adapter->CurPowerState == NewPowerState )
        return NDIS_STATUS_SUCCESS;
    if( NewPowerState != NdisDeviceStateD0 && NewPowerState != NdisDeviceStateD3)
        return NDIS_STATUS_SUCCESS;
	
    switch( Adapter->CurPowerState )
    {
        case NdisDeviceStateD0: // D0->D3
                DBGPRINT(DBG_LOAD,("D0->D3\n"));

#ifdef CONFIG_WLAN_PMU
/*
    if(Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
    {
//        USHORT  usCommand;

        if (Adapter->psState != PS_STATE_FULL_POWER)
        {
            PSWakeup(Adapter);  
            Adapter->psState = PS_STATE_FULL_POWER;
        }

        // disconnect the link 
        if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
            usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
        else
            usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;

        // send down deauthenticate
        PrepareAndSendCommand(
            Adapter,
            usCommand,
            0,
            HostCmd_OPTION_USE_INT,
            (NDIS_OID)0,
            HostCmd_PENDING_ON_NONE,
            0,
            FALSE,
            NULL,
            NULL,
            NULL,
            NULL);

    Sleep(500);

    }
 */
#ifdef PARA_SIP_UNREGISTER_AND_IP_REALEASE_BEFORE_SYS_SHUTDOWN
    {
	DWORD dwPowerState = 0;
	if (GetRegParaWifiPowerState(TEXT("Software\\paragon\\WifiPower"), TEXT("PowerState"), &dwPowerState))
	{
	  /*If wifi card is NOT turnned off during mobile phone SYS starts up,
	  * SIP module should Deregister and IP module should Release before it really turnned off.
	  */
	  if (dwPowerState != PARA_REG_WIFI_POWER_OFF)
	  {
		    // send message to sip module for logout
		    RETAILMSG(TRUE,(TEXT("Logout::Send Logout Message to SIP Module...\r\n")));
		    ED_PostMessage(EXDATNAME_SIP, SIP_CMD_LOGOUT, 0, 0);    
		    //wait until IP based APP and IP stack have rolled back to initial state.
		    WaitForSingleObject(priv.hStartTurnOffCardEvent, SIP_UNREGISTERATION_TIMEOUT+IP_DHCPRELEASE_TIMEOUT+RMM_DISCONNECT_TIMEOUT);
	  }
	}
    }
#endif
    g_bWLAN_FW_Downloaded = FALSE;
    wlan_PMUTurnOffCard();
#else

    if(Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
    {
    	USHORT  usCommand;

    	if (Adapter->psState != PS_STATE_FULL_POWER)
    	{
    		PSWakeup(Adapter);  
    		Adapter->psState = PS_STATE_FULL_POWER;
    	}

    	// disconnect the link 
    	if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
    		usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
    	else
    		usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;

    	// send down deauthenticate
    	PrepareAndSendCommand(
    		Adapter,
    		usCommand,
    		0,
    		HostCmd_OPTION_USE_INT,
    		(NDIS_OID)0,
    		HostCmd_PENDING_ON_NONE,
    		0,
    		FALSE,
    		NULL,
    		NULL,
    		NULL,
    		NULL);
    }
    //*********************
    //panyf add
    // clean up timer
    CleanUpTimers(Adapter); 

    // report link status change
    ResetDisconnectStatus(Adapter);

    // tx
    CleanUpSingleTxBuffer(Adapter);
    	   
    // rx
    ResetRxPDQ(Adapter);
    //**********************************
          // reset the Adapter object
           //ResetAdapterObject(Adapter); //panyf delete it

    Adapter->bIsScanInProgress 				= FALSE;
    Adapter->bIsAssociateInProgress 		= FALSE;

    Adapter->bIsAssociationBlockedByScan 	= FALSE;
    Adapter->bIsScanWhileConnect            = FALSE;
    Adapter->bIsConnectToAny				= FALSE;

    Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
    g_bWLAN_FW_Downloaded = FALSE;

    NdisMSleep(300);     //panyf add
    Omap730_PowerDownWlan();	//panyf add
#endif
			
			break;

        case NdisDeviceStateD1:
        case NdisDeviceStateD2:
            break;

        case NdisDeviceStateD3: // D3->D0
            DBGPRINT(DBG_LOAD|DBG_ALLEN,("D3->D0\n"));

#ifdef CONFIG_WLAN_PMU
    wlan_PMUTurnOnCard();
    Sleep(500);
#else

    	Omap730_PowerOnWlan();//panyf add
    Adapter->SurpriseRemoved = FALSE;

    g_spi_dummy_clk_reg = 0x05;
    g_spi_dummy_clk_data = 0x0e;
  dummy_clk_reg  = 0x05;
  dummy_clk_data = 0x0e;

    NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);//panyf add
    SpiFWStatus=If_IsFirmwareLoaded(Adapter);

    if(SpiFWStatus == FW_STATUS_READ_FAILED)
    {
    	DBGPRINT(DBG_LOAD,("Bootloader in invalid state!\n"));
    	return NDIS_STATUS_FAILURE;
    }
    else if(SpiFWStatus == FW_STATUS_UNINITIALIZED)
    {
    	DBGPRINT(DBG_LOAD,("Do FIRMWARE INITIALIZE!\n"));
    	bInterruptInitialize = TRUE;//panyf dont make Omap_interrupt_initialize run
    	SpiFWStatus = If_FirmwareDownload(Adapter);

    	if(SpiFWStatus != FW_STATUS_INITIALIZED)
    	{
    		DBGPRINT(DBG_LOAD, ("Failed to download the firmware\n"));
    		return NDIS_STATUS_FAILURE;
    	}

    		bFwReloaded = TRUE;
    }
    else
    {
    	DBGPRINT(DBG_LOAD,("Firmware aleady running!\n"));
    }

    Adapter->CurPowerState = NewPowerState;

    //Enable INT
    EnableInterrupt(Adapter); 

    //indicate to OS that the network is not connected
    g_bWLAN_FW_Downloaded = TRUE;

    g_spi_dummy_clk_reg = 0x01;
    g_spi_dummy_clk_data = 0x01;
      dummy_clk_reg  = 0x01;
      dummy_clk_data = 0x01;      

    //******************************************
    //panyf add
    	Action =   Adapter->usMacControlRecord | 
    			  HostCmd_STATUS_MAC_RX_ON | 
    			  HostCmd_STATUS_MAC_TX_ON |
    			  HostCmd_STATUS_MAC_INT_ENABLE;

    PrepareAndSendCommand(
    	          Adapter, 
    	          HostCmd_CMD_GSPI_BUS_CONFIG, 
    			  Action,  		 
    			  HostCmd_OPTION_USE_INT, 
    			  (NDIS_OID)0, 
    			  HostCmd_PENDING_ON_NONE,
    			  0, 
    			  FALSE, 
    			  NULL, 
    			  NULL, 
    			  NULL, 
    			  NULL);      
    //********************************************

    Adapter->RadioOn = TRUE;
    PrepareAndSendCommand(
    	          Adapter, 
    			  HostCmd_CMD_802_11_RADIO_CONTROL, 
    			  HostCmd_ACT_GEN_SET,
    		 	  HostCmd_OPTION_USE_INT, 
    			  (NDIS_OID)0,     //OID_MRVL_ENABLE_RADIO,
    			  HostCmd_PENDING_ON_NONE,
    			  0, 
    			  FALSE, 
    			  NULL, 
    			  NULL, 
    			  NULL, 
    			  NULL);		

    if(bFwReloaded)
    {
    	// Update HW status
    	Adapter->HardwareStatus = NdisHardwareStatusReady;

    	// setup mac address
    	PrepareAndSendCommand(
        			Adapter, 
        			HostCmd_CMD_GET_HW_SPEC, 
        			0, 
        			HostCmd_OPTION_USE_INT,
        			(NDIS_OID)0,
        			HostCmd_PENDING_ON_NONE,
        			0,
        			FALSE,
        			NULL,
        			NULL,
        			NULL,
        			NULL);        

    	DBGPRINT(DBG_LOAD, ("Reinitialize wireless config\n"));
    	InitializeWirelessConfig(Adapter);
    }  		
    NdisMCancelTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, &timerStatus);
    NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 100);
    Adapter->DisconnectTimerSet = TRUE;
    NdisMSleep(300000);//pan
#endif

			break;

		default:
	        DBGPRINT(DBG_POWER,("ERROR: Unknown power state\n"));
	        break;
	}
    
	Adapter->CurPowerState = NewPowerState;

	return NDIS_STATUS_SUCCESS;
}

/******************************************************************************
 *
 *  Name: CheckCurrentSationStatus()
 *
 *  Description: Check the current station operation status
 *
 *  Conditions for Use: called by the OID handler to get current station status
 *
 *  Arguments:           
 *      PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_ADAPTER_NOT_READY
 *      NDIS_STATUS_RESET_IN_PROGRESS
 *      NDIS_STATUS_MEDIA_DISCONNECT
 *
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
CheckCurrentSationStatus(
	IN PMRVDRV_ADAPTER Adapter
)
{
	//
	//      If the station is not available, return all NDIS packet with NDIS_STATUS_####,
	//      depends on the following situation:
	//      (1) If the hardware status is ready
	//      (2) If the media is connected
	//      (3) If the link is established
	//

	//      First check HW status
	switch( Adapter->HardwareStatus )
	{
	case NdisHardwareStatusReset:
		return NDIS_STATUS_RESET_IN_PROGRESS;
	case NdisHardwareStatusInitializing:
	case NdisHardwareStatusNotReady:
		return NDIS_STATUS_ADAPTER_NOT_READY;
	default:
		break;
	}

    //      Check Power management state
    if( Adapter->CurPowerState != NdisDeviceStateD0 )
        return NDIS_STATUS_ADAPTER_NOT_READY;

	//      Check media connected status
	if( Adapter->MediaConnectStatus == NdisMediaStateDisconnected ){
		return NDIS_STATUS_MEDIA_DISCONNECT;
	}

	//      Check link
	if( Adapter->LinkSpeed == MRVDRV_LINK_SPEED_0mbps ){
		return NDIS_STATUS_MEDIA_DISCONNECT;
	}

    //      Check device removal status
    if( Adapter->SurpriseRemoved == TRUE ){
        return NDIS_STATUS_ADAPTER_REMOVED;
    }

	//return Status;
	return NDIS_STATUS_SUCCESS;
}

/*
===============================================================================
                           CODED PRIVATE PROCEDURES
===============================================================================
*/

VOID
ResetDisconnectStatus(
	IN PMRVDRV_ADAPTER Adapter
)
{
// tt ++ v5 firmware test
	static DWORD	s_nCallCount=0;
	s_nCallCount ++;
// tt --

    DBGPRINT(DBG_CMDRESP, ("Connection reset!\n"));
    // TODO: remove this if FW supports PS when not associated!!
    //DraleeMsg((L"**Rst Disconnect Status\n"));

   //RETAILMSG(1,(TEXT("[Marvell]+ResetDisconnectStatus()")));
   #ifdef REASSOCIATE
      if (Adapter->CurrentSSID.SsidLength != 0)
       {
       	NdisMoveMemory(&Adapter->PreviousSSID, &Adapter->CurrentSSID,
					sizeof(NDIS_802_11_SSID));
       }
   #else
    NdisMoveMemory(&Adapter->PreviousSSID, &Adapter->CurrentSSID,
					sizeof(NDIS_802_11_SSID));
	NdisZeroMemory(&(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
	NdisZeroMemory(Adapter->CurrentBSSID, MRVDRV_ETH_ADDR_LEN);  
    NdisZeroMemory(&(Adapter->CurrentBSSIDDesciptor), sizeof(NDIS_WLAN_BSSID_EX));  
   #endif //REASSOCIATE	
	Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
#ifdef DEBUG_PARA_ROAMING_PRINT
	RETAILMSG(1,(TEXT("NdisMediaStateDisconnected is caused by ResetDisconnectStatus!...\n")));
#endif
	WriteCommonLogFile(WIFI_LOG,"AP is disconnected(Reason=3)  (ResetDisconnectStatus)!...\r\n",
					strlen("AP is disconnected(Reason=3)	(ResetDisconnectStatus)!...\r\n"));
	 if(g_AssociationDuration != 0)
	{
	  char logstr[200];
	  sprintf(logstr,"Association Duration is %d seconds\r\n", (GetTickCount() - g_AssociationDuration)/1000);
	  WriteCommonLogFile(WIFI_LOG,logstr, strlen(logstr));
	  g_AssociationDuration = 0;
	}


    Adapter->ulCurrentBSSIDIndex =0;
	Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps; //do not set to 0mbps
V5DbgMsg( (L"** before indicate (%d) (%d)\n", s_nCallCount, GetTickCount()) );

⌨️ 快捷键说明

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