📄 miscproc.c
字号:
/******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
*
* Purpose: This module provides the implementation of power managment
* and timer routines
*
* $Author: schiu $
*
* $Date: 2004/12/15 $
*
* $Revision: #12 $
*
*****************************************************************************/
/*
===============================================================================
INCLUDE FILES
===============================================================================
*/
#include "precomp.h"
//yz_add
//#include "powermanagement.h"
#include <winioctl.h>
#include "nuiouser.h"
#define ON 1
#define OFF 0
//yz_end
#ifdef IF_GSPI
///extern BOOL g_bWLAN_FW_Downloaded;
#if OMAP
//chenglong add for wifi
extern void EnableVWiFi(BOOL bEnable);
extern void PowerDownWiFi(BOOL bEnable);
#endif //OMAP
#endif
#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;
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 ;
// tt cetk_1
/*
NdisMIndicateStatus(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_CONNECT,
(PVOID)NULL,
0);
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
*/
Adapter->bIsPendingReset = FALSE;
}
//35.p6++
/*
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);
DBGPRINT(DBG_CMDRESP, ("IndicateDisconnectTimer: Indicated disconnect\n"));
#ifdef MRVL_GUI_INTERFACE
MrvlNotifyApplication(
COMMAND_EVENT_DISCONNECT,
NULL,
0);
#endif
}
}
*/
//35.p6--
Adapter->DisconnectTimerSet = FALSE;
}
#endif
#ifdef AvoidOidSetScan
/******************************************************************************
*
* Name: MrvDrvAvoidScanAfterConnectedTimer()
*
* Description: Timer that will be fired after initialize routine is done
* to indicate connected
*
*
* Arguments:
* IN PVOID SystemSpecific1
* IN PVOID FunctionContext
* IN PVOID SystemSpecific2
* IN PVOID SystemSpecific3
*
* Return Value: None
*
* Notes:
*
*****************************************************************************/
VOID
MrvDrvAvoidScanAfterConnectedTimer(
IN PVOID SystemSpecific1,
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3
)
{
PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) MiniportAdapterContext;
Adapter->bAvoidScanAfterConnectedforMSecs = 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_GSPI
USHORT ucHostIntStatus=0;
SD_API_STATUS status;
USHORT ucCardStatus;
#else
//dralee_0126
UCHAR ucHostIntStatus=0;
SD_API_STATUS status;
UCHAR ucCardStatus;
#endif ///
PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;
DBGPRINT(DBG_TIMERS | DBG_WARNING,("- TX Pkt timeout, Tx Done does not response \n"));
Adapter->TxPktTimerIsSet=FALSE;
#if 1 //dralee_0126
{
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);
}
}
#else
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);
}
#endif
//return;
}
#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
#ifdef ACTIVE_ROAMING
VOID MrvDrvActiveRoamingTimerFunction(
IN PVOID SystemSpecific1,
IN PVOID FunctionContext,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3
)
{
PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;
ActiveRoamingHandler(Adapter);
return;
}
#ifdef BG_SCAN
VOID MrvDrvBGActiveRoamingTimerFunction(
IN PVOID SystemSpecific1,
IN PVOID FunctionContext,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3
)
{
BOOLEAN timerStatus;
PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;
//ActiveRoamingHandler(Adapter);
#ifdef MRVL_DBG_BG_SCAN
#ifdef MRVL_PRINT_DBG_MSG
MrvPrintFile("\t\t[Marvell]MrvDrvBGActiveRoamingTimerFunction:Begin!!\n" );
#endif
#endif
if ( Adapter->MediaConnectStatus == NdisMediaStateConnected )
{
//preset
if((Adapter->bBgScanEnabled==TRUE) )
{
EnableBgScan(Adapter,FALSE);
}
SetupBgScanCurrentSSID(Adapter,Adapter->ulScanInterval);
//DumpBgScanConfig( (POID_MRVL_DS_BG_SCAN_CONFIG)(Adapter->BgScanCfg) );
EnableBgScan(Adapter,TRUE);
}
NdisMCancelTimer(&Adapter->MrvBGActiveRoamingTimer, &timerStatus);
Adapter->BGActiveRoamingTimerIsSet = FALSE;
return;
}
#endif //BG_SCAN
#endif //ACTIVE_ROAMING
/******************************************************************************
*
* 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 IF_SDIO
// Check CmdWaitQ and execute the next command
GetCmdFromQueueToExecute(Adapter);
#endif // IF_SDIO
//lykao, 051305, end
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -