📄 miscproc.c
字号:
PCF_OBJECT pCf = (PCF_OBJECT)Adapter->hwIface;
//int i;
//CmdCtrlNode *TempCmdArray;
if( Adapter->CurPowerState == NewPowerState )
return NDIS_STATUS_SUCCESS;
#ifdef HOST_WAKEUP
if (Adapter->bHostWakeCfgSet == 1)
return NDIS_STATUS_SUCCESS;
#endif
switch( Adapter->CurPowerState )
{
case NdisDeviceStateD0: // D0->D3
//AllenDBGPRINT(1,("D0->D3 >>> Enter \n"));
//RETAILMSG(1, (TEXT("D0->D3 >>> Enter")));
InfraBssReconnectStop(Adapter);
Adapter->bIsEnterD3 = TRUE;
if (Adapter->MediaConnectStatus == NdisMediaStateConnected)
{
USHORT usCommand;
if (Adapter->psState != PS_STATE_FULL_POWER)
PSWakeup( Adapter);
if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
else
usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
// completely clean up
PrepareAndSendCommand(
Adapter,
usCommand,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
Adapter->CurrentBSSID);
Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
NdisMIndicateStatus( Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_DISCONNECT,
(PVOID)NULL,
0);
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
}
{
int jj;
for (jj=0; jj<1000; jj++)
NdisMSleep(1000);
}
NdisZeroMemory(&Adapter->PreviousSSID, sizeof(NDIS_802_11_SSID));
{
// Memorize the previous SSID and BSSID
NdisMoveMemory( &(Adapter->PreviousSSID),
&(Adapter->CurrentSSID),
sizeof(NDIS_802_11_SSID));
//RETAILMSG(1, (TEXT("indicate NDIS_STATUS_MEDIA_DISCONNECT 3\r\n")));
ResetAdapterObject (Adapter);
Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
Adapter->ulCurrentBSSIDIndex =0;
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps; //do not set to 0mbps
Adapter->ulLastMICErrorTime = 0;
Adapter->EncryptionStatus = Ndis802_11EncryptionDisabled;
Adapter->psState = PS_STATE_FULL_POWER;
}
Adapter->bIsInDPC = FALSE;
if (Adapter->bAvoidScanAfterConnectedforMSecs == TRUE)
{
BOOLEAN timerStatus;
NdisMCancelTimer(&Adapter->MrvDrvAvoidScanAfterConnectedTimer, &timerStatus);
Adapter->bAvoidScanAfterConnectedforMSecs=FALSE;
}
ResetCmdBuffer(Adapter);
Adapter->bIsScanInProgress = FALSE;
Adapter->bIsAssociateInProgress = FALSE;
//RETAILMSG(1, (TEXT("D0->D3 >>> Exit")));
//AllenDBGPRINT(1,("D0->D3 >>> Exit \n"));
break;
case NdisDeviceStateD1:
case NdisDeviceStateD2:
break;
case NdisDeviceStateD3: // D3->D0
DBGPRINT(DBG_LOAD| DBG_SP,("D3->D0\n"));
//AllenDBGPRINT(1,("D3->D0 >>> \n"));
//RETAILMSG(1, (TEXT("D3->D0 >>> ")));
Adapter->bIsEnterD3 = FALSE;
// see if this is the problem
// NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
ixStatus = cf_IsFirmwareLoaded( Adapter->hwIface );
//RETAILMSG(1, (TEXT("ixStatus 0x%x >>> "), ixStatus));
if ( ixStatus == IX_STATUS_FAILURE )
{
// we could do a hardware reset here on the card to try to restart
// the boot loader.
return NDIS_STATUS_FAILURE;
}
else if ( ixStatus == IX_STATUS_HOST_BOOT_READY )
{
ixStatus = cf_DownloadHelperImage((PCF_OBJECT)Adapter->hwIface, Adapter);
if (ixStatus != NDIS_STATUS_SUCCESS)
{
return NDIS_STATUS_FAILURE;
}
ixStatus = cf_DownloadFWImageHelperMode((PCF_OBJECT)Adapter->hwIface, Adapter);
if (ixStatus != NDIS_STATUS_SUCCESS)
{
DBGPRINT(DBG_LOAD| DBG_SP, ("Download Helper Image failed!\n"));
return NDIS_STATUS_FAILURE;
}
bFwReloaded = TRUE;
}
else if (ixStatus == IX_STATUS_BOOT_READY)
{
return NDIS_STATUS_FAILURE;
}
else
{
DBGPRINT(DBG_LOAD | DBG_SP,("Firmware aleady running!\n"));
}
// InitAdapterObject(Adapter);
// Adapter->ListBufferLen = 0;
// Adapter->ulPSNumOfBSSIDs = 0;
// Enable INT
EnableInterrupt(Adapter);
// indicate to OS that the network is not connected
// NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 100);
// Adapter->DisconnectTimerSet = TRUE;
//----------------------------------------------------------------------------
// If the FW required reloading, then we have to kick start the receiver again.
//----------------------------------------------------------------------------
{
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);
}
// completely clean up
//InitializeWirelessConfig(Adapter);
{
USHORT usCommand;
usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
// completely clean up
PrepareAndSendCommand(
Adapter,
usCommand,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
Adapter->CurrentBSSID);
}
{
PVOID InfoBuffer = NULL;
DBGPRINT(DBG_LOAD ,("Init: Setting fragmentation threshold to %d\n", Adapter->FragThsd ));
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)OID_802_11_FRAGMENTATION_THRESHOLD,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
DBGPRINT(DBG_LOAD ,("Init: Setting RTS threshold to %d\n", Adapter->RTSThsd ));
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)OID_802_11_RTS_THRESHOLD,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
Adapter->usMacControlRecord,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
// BT Co-existence
if ( Adapter->BTMode != 0 )
{
// only send command if BT mode is not 0
DBGPRINT(DBG_LOAD, ("Setting BT Mode parameters:\n"));
DBGPRINT(DBG_LOAD, ("BTMode=0x%x, Antenna Config = 0x%x, Freq Config = 0x%x\n",
Adapter->BTMode, Adapter->BTAntennaConfig, Adapter->BTFrequencyConfig));
DBGPRINT(DBG_LOAD, ("TX Lo = 0x%x, TX Hi = 0x%x, RX Lo = 0x%x, RX Hi = 0x%x\n",
Adapter->BTWLANTxPriorityLo, Adapter->BTWLANTxPriorityHi,
Adapter->BTWLANRxPriorityLo, Adapter->BTWLANRxPriorityHi));
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_BCA_CONFIG,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL );
NdisMSleep(10000);
}
}
// Adapter->bIsD3ToD0reconnect = TRUE;
//InfraBssReconnectStart ( Adapter, RECONNECT_D3_TO_D0);
// AllenDBGPRINT(1,("D3->D0 <<< \n"));
break;
default :
break;
}
Adapter->CurPowerState = NewPowerState;
//RETAILMSG(1, (TEXT("Adapter->CurPowerState = %d\n"), Adapter->CurPowerState));
return NDIS_STATUS_SUCCESS;
}
/*
===============================================================================
CODED PRIVATE PROCEDURES
===============================================================================
*/
VOID
ResetDisconnectStatus(
IN PMRVDRV_ADAPTER Adapter
)
{
// RETAILMSG(1, (TEXT("ResetDisconnectStatus() \r\n")));
DBGPRINT(DBG_CMDRESP, ("Connection reset!\n"));
#ifdef TT_WEP_1
TurnOnWepBit( Adapter, FALSE );
#endif
#ifdef BG_SCAN
if ( Adapter->bBgScanEnabled==TRUE)
{
EnableBgScan( Adapter, FALSE);
}
#endif
if (Adapter->CurrentSSID.SsidLength != 0)
{
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));
if ( (Adapter->psState != PS_STATE_FULL_POWER) &&
(Adapter->MediaConnectStatus == NdisMediaStateConnected ))
{
//Adapter->psState = PS_STATE_FULL_POWER;
PSWakeup(Adapter);
}
Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
Adapter->ulCurrentBSSIDIndex =0;
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps; //do not set to 0mbps
if ((Adapter->bIsReconnectEnable == FALSE) &&
(Adapter->bIsBeaconLoseEvent == FALSE) &&
(Adapter->bIsDeauthenticaticationEvent == FALSE) &&
(Adapter->bIsD3ToD0reconnect == FALSE)
#ifdef ACTIVE_ROAMING
&& (Adapter->bIsActiveRoaming == FALSE)
#endif
)
{
// RETAILMSG(1, (TEXT("indicate NDIS_STATUS_MEDIA_DISCONNECT 4\r\n")));
NdisMIndicateStatus( Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_DISCONNECT,
(PVOID)NULL,
0);
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
}
Adapter->ulLastMICErrorTime = 0;
if ((Adapter->bIsReconnectEnable == FALSE) &&
(Adapter->bIsBeaconLoseEvent == FALSE) &&
(Adapter->bIsDeauthenticaticationEvent == FALSE) &&
(Adapter->bIsD3ToD0reconnect == FALSE)
#ifdef ACTIVE_ROAMING
&&(Adapter->bIsActiveRoaming == FALSE)
#endif
)
{
//RETAILMSG(1, (TEXT("change EncryptionStatus %d\r\n"), Adapter->EncryptionStatus));
//RETAILMSG(1, (TEXT("change ReEncryptionStatus %d\r\n"), Adapter->ReEncryptionStatus));
if ( (Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled ) ||
(Adapter->EncryptionStatus == Ndis802_11Encryption2KeyAbsent)) // wpa
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
}
else if ( (Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled ) ||
(Adapter->EncryptionStatus == Ndis802_11Encryption3KeyAbsent)) // wpa2
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
}
else if ( (Adapter->EncryptionStatus == Ndis802_11Encryption1Enabled ) ||
(Adapter->EncryptionStatus == Ndis802_11Encryption1KeyAbsent )) // wep
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption1KeyAbsent;
}
}
NdisZeroMemory(Adapter->SNR, sizeof(Adapter->SNR));
NdisZeroMemory(Adapter->NF, sizeof(Adapter->NF));
NdisZeroMemory(Adapter->RSSI, sizeof(Adapter->RSSI));
NdisZeroMemory(Adapter->rawSNR, sizeof(Adapter->rawSNR));
NdisZeroMemory(Adapter->rawNF, sizeof(Adapter->rawNF));
Adapter->numSNRNF = 0;
Adapter->nextSNRNF = 0;
return;
}
VOID
ResetSingleTxDoneAck(
IN PMRVDRV_ADAPTER Adapter
)
{
}
/******************************************************************************
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -