📄 miscproc.c
字号:
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 + -