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

📄 miscproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
/******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
 *
 *  Purpose:    This module provides the implementation of power managment 
 *              and timer routines
 *
 *	$Author: heb $
 *
 *	$Date: 2007/07/13 08:01:36 $
 *
 *	$Revision: 1.15.2.5 $
 *
 *****************************************************************************/
 

/*
===============================================================================
                                 INCLUDE FILES
===============================================================================
*/
#include "precomp.h"
#include "if.h"
#include "omap730_gspx.h"//panyf for turn on /turn off
#include "ParaRoamingProc.h"
#include "logmain.h"
extern DWORD g_AssociationDuration;

extern PRIVATE_PARAROAMING_ADAPTER priv;

extern BOOL g_bWLAN_FW_Downloaded;

extern BOOL bInterruptInitialize; //panyf add for Interrupt Initialize

#ifdef REASSOCIATE
NDIS_STATUS 
MrvDrvSetEncryptionStatus(
  IN PMRVDRV_ADAPTER          Adapter,
  IN NDIS_802_11_ENCRYPTION_STATUS  EncryptionStatus,
    IN NDIS_OID Oid,
  IN PVOID InformationBuffer,
  OUT PULONG BytesRead,
  OUT PULONG BytesNeeded
);
#endif
/*
===============================================================================
                                  DEFINITIONS
===============================================================================
*/

/*
===============================================================================
                           CODED PUBLIC PROCEDURES
===============================================================================
*/
/******************************************************************************
 *
 *  Name: MrvDrvPMCallback()
 *
 *  Description: Timer that will be fired after initialize routine is done
 *				 to indicate disconnect
 *
 *  Return Value: None
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
MrvDrvPMCallback(
    IN struct _NDIS_WORK_ITEM *pWorkItem,
    IN PVOID  Context
	)
{
	// get the adpater context
	PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) Context;

	//--------------------------------------------------------------------------------
	// Reinitialize all config parameters.
	//--------------------------------------------------------------------------------
    PostFwDownload( Adapter );

	//--------------------------------------------------------------------------------
    //      Update and report link status
	//--------------------------------------------------------------------------------
    Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
#ifdef DEBUG_PARA_ROAMING_PRINT
	RETAILMSG(1,(TEXT("NdisMediaStateDisconnected is caused by MrvDrvPMCallback!...\n")));
#endif
	WriteCommonLogFile(WIFI_LOG,"AP is disconnected(Reason=3)  (MrvDrvPMCallback)!...\r\n",
					strlen("AP is disconnected(Reason=3)	(MrvDrvPMCallback)!...\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->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;

    Adapter->ulNumOfBSSIDs = 0;
    Adapter->ulPSNumOfBSSIDs = 0;
    
	//--------------------------------------------------------------------------------
    //      Report link status change
	//--------------------------------------------------------------------------------
  	NdisMIndicateStatus(
		Adapter->MrvDrvAdapterHdl,
    	NDIS_STATUS_MEDIA_DISCONNECT,
		(PVOID)NULL,
		0);
    NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);

#ifdef MRVL_GUI_INTERFACE
	MrvlNotifyApplication(
		COMMAND_EVENT_DISCONNECT,
		NULL,
		0);
#endif // MRVL_GUI_INTERFACE
}

#ifdef WHQL_FIX
/******************************************************************************
 *
 *  Name: MrvDrvIndicateConnectStatusTimer()
 *
 *  Description: Timer that will be fired after initialize routine is done
 *				 to indicate disconnect
 *
 *
 *  Arguments:           
 *	    IN PVOID SystemSpecific1
 *	    IN PVOID FunctionContext
 *	    IN PVOID SystemSpecific2
 *	    IN PVOID SystemSpecific3
 *    
 *  Return Value: None
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
MrvDrvIndicateConnectStatusTimer(
	IN PVOID SystemSpecific1,
	IN NDIS_HANDLE MiniportAdapterContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
{

	PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) MiniportAdapterContext;

	if  (Adapter->bIsPendingReset == TRUE)  //  used for rest 
	{
		Adapter->MediaConnectStatus = NdisMediaStateConnected ;
		{
		  char logstr[200];
		  sprintf(logstr,"AP is connected! SSID = %32s BSSID = %2x-%2x-%2x-%2x-%2x-%2x RSSI =%d\r\n", 
					Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].Ssid.Ssid,
			  Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].MacAddress[0],
			  Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].MacAddress[1],
			  Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].MacAddress[2],
			  Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].MacAddress[3],
			  Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].MacAddress[4],
			  Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].MacAddress[5],
			  Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].Rssi);
		  WriteCommonLogFile(WIFI_LOG,logstr, strlen(logstr));
		  g_AssociationDuration = GetTickCount();
		}



// tt cetk_1
/*
		NdisMIndicateStatus(
						Adapter->MrvDrvAdapterHdl,
						NDIS_STATUS_MEDIA_CONNECT,
						(PVOID)NULL,
						0);

		NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
*/
		Adapter->bIsPendingReset = FALSE;
	}
	else   // used for initialize
	{
		if ( Adapter->MediaConnectStatus == NdisMediaStateDisconnected )
		{
			// Need to indicate media status because initially, the card is always
			// at disconnected state
			NdisMIndicateStatus(
						Adapter->MrvDrvAdapterHdl,
						NDIS_STATUS_MEDIA_DISCONNECT,
						(PVOID)NULL,
						0);

			NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
#ifdef DEBUG_PARA_ROAMING_PRINT
				RETAILMSG(1,(TEXT("IndicateDisconnectTimer: Indicated disconnect!!!\n")));
#endif
              	DBGPRINT(DBG_CMDRESP, ("IndicateDisconnectTimer: Indicated disconnect\n"));

#ifdef MRVL_GUI_INTERFACE
			MrvlNotifyApplication(
					COMMAND_EVENT_DISCONNECT,
					NULL,
					0);
#endif 

		}
	}	

	Adapter->DisconnectTimerSet = FALSE;
}

#endif

/******************************************************************************
 *
 *  Name: MrvDrvTxPktTimerFunction()
 *
 *  Description: Tx Timer routine
 *
 *  Conditions for Use: (Not used in the current verison of driver)
 *
 *  Arguments:           
 *	    IN PVOID SystemSpecific1
 *	    IN PVOID FunctionContext
 *	    IN PVOID SystemSpecific2
 *	    IN PVOID SystemSpecific3
 *    
 *  Return Value: None
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID MrvDrvTxPktTimerFunction(
	IN PVOID SystemSpecific1,
	IN PVOID FunctionContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
{
	#ifdef IF_SPI
	USHORT ucHostIntStatus=0;
	SD_API_STATUS    status;
	USHORT           ucCardStatus;
	#endif ///IF_SPI
   
	  PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;

	  DBGPRINT(DBG_TIMERS | DBG_WARNING,("- TX Pkt timeout, Tx Done does not response \n"));

    Adapter->TxPktTimerIsSet=FALSE;

/*
	dralee suggested: don't need this block
*/
#if 0
    if ( Adapter->PSMode != Ndis802_11PowerModeCAM )
    {
        // in power save mode, it's safer to just fail the packet
        if (Adapter->SentPacket)
        {
	        Adapter->XmitError++;
          DBGPRINT(DBG_TIMERS, ("MrvDrvTxPktTimerFunction: Indicate failure for SentPacket\n"));
	        NDIS_SET_PACKET_STATUS(Adapter->SentPacket, NDIS_STATUS_RESOURCES);
	        NdisMSendComplete(
		                         Adapter->MrvDrvAdapterHdl, 
		                         Adapter->SentPacket, 
		                         NDIS_STATUS_RESOURCES);
               
	        Adapter->SentPacket = NULL;

            /*Adapter->QueuedPacket = Adapter->SentPacket;
            Adapter->SentPacket = NULL;*/
        }
        return;
    }
#endif //0

#ifdef UNDER_CE
	//MessageBox(NULL, TEXT("Pkt Timeout"), TEXT("MrvDrvND5"), MB_OK);
#endif // UNDER_CE

	#ifdef SDIO
	if( Adapter->SentPacket !=NULL )
	{
      RETAILMSG(1,(L"SDIO Tx Timeout: #%d pkts in Queue\n\r",Adapter->TxPacketCount));
      // clean up the timed out pkt
 		  HandleTxSingleDoneEvent(Adapter);	 				
	}
	#elif defined (IF_SPI)

	///crlo:test ++
	/*{
		int intrval = gspi_read_intstatue();
		RETAILMSG(1,(TEXT("IntrSignal: %d\r"), intrval));
	}*/
	///crlo:test --
	//if( Adapter->SentPacket !=NULL )
	{   
  	  RETAILMSG(1,(L"--SDIO Tx Timeout: #%d pkts in Queue\n\r",Adapter->TxPacketCount));
         
    EnterCriticalSection(&Adapter->IntCriticalSection);   

    status = If_ReadRegister(Adapter,
                             //SD_IO_READ ,
                             1, // function 1
                             HCR_HOST_INT_STATUS_REGISTER, 
                             FALSE,
                             &ucHostIntStatus,
                             sizeof(ucHostIntStatus)); 

    

    if(ucHostIntStatus)
    {

      //EnterCriticalSection(&Adapter->IntCriticalSection);   
      Adapter->ucGHostIntStatus |= ucHostIntStatus; 
      //LeaveCriticalSection(&Adapter->IntCriticalSection);  
      //dralee_1226
      ucCardStatus = ~ucHostIntStatus;    
      ucCardStatus &= 0x1f;

      status = If_WriteRegister(Adapter,
                              //SD_IO_WRITE,          
                              1,     
                              HCR_HOST_INT_STATUS_REGISTER,
                              FALSE,
                              &ucCardStatus,   // reg
                              sizeof(ucCardStatus));    

      LeaveCriticalSection(&Adapter->IntCriticalSection);    

      RETAILMSG(1,(L"HOST INT status:%x:%x\n",ucHostIntStatus, status)); 
      SetEvent(Adapter->hControllerInterruptEvent);
    } 
    else 
    {   
        LeaveCriticalSection(&Adapter->IntCriticalSection);   
		// clean up the timed out pkt
		HandleTxSingleDoneEvent(Adapter);	 				
    } 

   }
	#endif ///IF_SPI
	//return;
} 

VOID MrvDrvRssiHighTimerFunction(
	IN PVOID SystemSpecific1,
	IN PVOID FunctionContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
{
	PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;
	Adapter->RssiHighTimerIsSet = FALSE;
    if(Adapter->MediaConnectStatus ==  NdisMediaStateConnected)
		ED_PostMessage(EXDATNAME_PRM, PRM_WLAN_SIGNAL_CHANGE_HIGH, 0, 0);

} 
#ifdef REASSOCIATE
 VOID MrvDrvReConnectTimerFunction(
	IN PVOID SystemSpecific1,
	IN PVOID FunctionContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
{

//    	NDIS_STATUS Status;
	
	PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;

	DBGPRINT(DBG_TIMERS | DBG_ALLEN|DBG_DEBUGUSE,("++ MrvDrvReConnectTimerFunction\n"));

    	ReConnectHandler(Adapter);
	
	DBGPRINT(DBG_TIMERS | DBG_ALLEN,("-- MrvDrvReConnectTimerFunction\n"));
	
	return;
}
#endif //REASSOCIATE

 
/* dralee, unused 
VOID MrvDrvCheckTxQueueTimerFunction(
	IN PVOID SystemSpecific1,
	IN PVOID FunctionContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
{

    NDIS_STATUS Status;
	
	PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;

	DBGPRINT(DBG_TIMERS | DBG_TXDATA,("++ MrvDrvCheckTxQueueTimerFunction\n"));
      //RETAILMSG(1,(TEXT("[Marvell]+MrvDrvCheckTxQueueTimerFunction")));

    
  #ifndef CHECK_LATER 
    if ((Adapter->QueuedPacket) && 
		(Adapter->MediaConnectStatus == NdisMediaStateConnected))
    {
		DBGPRINT(DBG_TIMERS | DBG_TXDATA,("Have a queued packed packet need to send\n"));
		Status = SendSinglePacket(Adapter,Adapter->QueuedPacket);

    	if (Status == NDIS_STATUS_SUCCESS)
		{	
		    Adapter->SentPacket = Adapter->QueuedPacket;
			Adapter->QueuedPacket = NULL;
		}
	}
  #endif

	GetCmdFromQueueToExecute(Adapter);
     
	//RETAILMSG(1,(TEXT("[Marvell]-MrvDrvCheckTxQueueTimerFunction")));
	DBGPRINT(DBG_TIMERS | DBG_TXDATA,("-- MrvDrvCheckTxQueueTimerFunction\n"));
	
	return;
}
*/ 
 

/******************************************************************************
 *
 *  Name: MrvDrvCommandTimerFunction()
 *
 *  Description: Command time-out routine
 *
 *  Conditions for Use: When current command exceeds expected execution time limit,
 *                      commad will expire and call the command time-out ruotine
 *
 *  Arguments:           
 *	    IN PVOID SystemSpecific1
 *	    IN PVOID FunctionContext
 *	    IN PVOID SystemSpecific2
 *	    IN PVOID SystemSpecific3
 *    
 *  Return Value: None
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID MrvDrvCommandTimerFunction(
	IN PVOID SystemSpecific1,
	IN PVOID FunctionContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
{
	CmdCtrlNode *pTempNode;
	PHostCmd_DS_GEN pRetPtr;

	// get the adpater context
	PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;


	if( !Adapter->CurCmd ) // False alarm
	{
    	DBGPRINT(DBG_TIMERS,("MrvDrvCommandTimerFunction() Timer fired, but no current command.\n"));

//lykao, 051305, begin		
#ifdef SDIO
		// Check CmdWaitQ and execute the next command
		GetCmdFromQueueToExecute(Adapter);
#endif // SDIO
//lykao, 051305, end
		return;
	}   
 

    Adapter->ucNumCmdTimeOut++;
	DBGPRINT(DBG_TIMERS | DBG_CMDRESP | DBG_ERROR,("MISC - Command TIME OUT !! \n"));
	pTempNode = Adapter->CurCmd;
	pRetPtr = (PHostCmd_DS_GEN)(pTempNode->BufVirtualAddr);

//lykao, 051305, begin
#ifdef SDIO
 if (Adapter->ucNumCmdTimeOut > 2)
   {
        DBGPRINT(DBG_CMDRESP, ("Cmd Timer: More than 2 time out! set AdapterRemoved To TRUE!\n"));
        Adapter->SurpriseRemoved = TRUE;
    }
#endif 

    DraleeMsg((L"Command Timeout\n"));

	
    // if the current command uses NO_INT option and is already finished
	if ((pRetPtr->Command & HostCmd_RET_NONE) != 0 &&
		   pTempNode->INTOption == HostCmd_OPTION_NO_INT )
	{
	    DBGPRINT(DBG_CMDRESP,("NO INT COMMAND: calling HandleCommand FinishedEvent from timeout\n"));
		  HandleCommandFinishedEvent(Adapter);
		return;
	}

  if ((pRetPtr->Command == HostCmd_RET_802_11_SCAN ) &&
		 (Adapter->CurCmd->Pad[2] |= MRVDRV_SCAN_CMD_END))
	{
                                     
/* dralee_0112, dummy    //dralee
    if( Adapter->ResourcesEvts & RSC_SCANNING )
    {  
        Adapter->ResourcesEvts &= ~RSC_SCANNING;
        if( Adapter->ResourcesEvts == 0 )
            NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
    } 
*/

		Adapter->bIsScanInProgress = FALSE;
    Adapter->bIsAssociationBlockedByScan = FALSE;
		 
	  if (Adapter->PendingGetBssidOid.bIsPendingOID)
		{

⌨️ 快捷键说明

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