📄 miscproc.c
字号:
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
}
else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
}
else if ( Adapter->EncryptionStatus == Ndis802_11Encryption1Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption1KeyAbsent;
}
/*#ifdef CF_DRIVER
Adapter->SurpriseRemoved = TRUE;
#endif // #ifdef CF_DRIVER*/
//NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
// Disable INT
If_DisableInterrupt(Adapter);
break;
case NdisDeviceStateD1:
case NdisDeviceStateD2:
{
USHORT PsSubCommand;
// Exit power save mode
// Rest command buffer
ResetCmdBuffer(Adapter);
// Tell Station to enter D0 mode
PsSubCommand = HostCmd_SubCmd_Exit_PS;
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_PS_MODE,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_NO_INT,
Oid,
HostCmd_PENDING_ON_SET_OID,
0,
FALSE,
NULL,
BytesRead,
BytesNeeded,
&PsSubCommand);
// Update HW status
Adapter->HardwareStatus = NdisHardwareStatusReady;
// 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
// Enable INT
If_EnableInterrupt(Adapter);
break;
}
case NdisDeviceStateD3:
#ifndef UNDER_CE
// Tweak the card's hard coded base address by doing some of our
// own hard coding. The config registers start at 0x200 in the CIS
// and the upper byte of the hardware coded address is at offset 12.
//*(Adapter->MrvDrvVirtCISMemory+0x200+12) = 0;
DBGPRINT(DBG_LOAD,("Setting IO OFFSET to zero!\n"));
*(Adapter->MrvDrvVirtCISMemory) = 0;
#endif
#ifdef CF_DRIVER
Adapter->SurpriseRemoved = FALSE;
#endif // #ifdef CF_DRIVER
// see if this is the problem
NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
ixStatus = cf_IsFirmwareLoaded( Adapter -> hwIface );
if ( ixStatus == IX_STATUS_FAILURE )
{
DBGPRINT(DBG_LOAD,("Bootloader in invalid state!\n"));
// 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_BOOT_READY )
{
ixStatus = cf_FirmwareDownload((PCF_OBJECT)Adapter -> hwIface, Adapter);
if ( ixStatus != IX_STATUS_SUCCESS )
{
return NDIS_STATUS_FAILURE;
}
bFwReloaded = TRUE;
}
else if ( ixStatus == IX_STATUS_HOST_BOOT_READY )
{
#ifdef MRV_USE_HELPER_IMAGE
ixStatus = cf_DownloadHelperImage((PCF_OBJECT)Adapter -> hwIface, Adapter);
if ( ixStatus != NDIS_STATUS_SUCCESS )
{
DBGPRINT(DBG_LOAD, ("Download Helper Image failed!\n"));
return NDIS_STATUS_FAILURE;
}
ixStatus = cf_DownloadFWImageHelperMode((PCF_OBJECT)Adapter -> hwIface, Adapter);
if ( ixStatus != NDIS_STATUS_SUCCESS )
{
DBGPRINT(DBG_LOAD, ("Download Helper Image failed!\n"));
return NDIS_STATUS_FAILURE;
}
#else // MRV_USE_HELPER_IMAGE
ixStatus = cf_HostBootFirmwareDownload((PCF_OBJECT)Adapter -> hwIface, Adapter);
if ( ixStatus != IX_STATUS_SUCCESS )
{
return NDIS_STATUS_FAILURE;
}
#endif // MRV_USE_HELPER_IMAGE
bFwReloaded = TRUE;
}
else
{
DBGPRINT(DBG_LOAD,("Firmware aleady running!\n"));
}
Adapter->CurPowerState = NewPowerState;
// Enable INT
If_EnableInterrupt(Adapter);
// Update and report link status
Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;
Adapter->ulNumOfBSSIDs = 0;
Adapter->ulPSNumOfBSSIDs = 0;
// indicate to OS that the network is not connected
NdisMSetTimer(&Adapter->MrvDrvIndicateDisconnectTimer, 100);
Adapter->DisconnectTimerSet = TRUE;
//----------------------------------------------------------------------------
// If the FW required reloading, then we have to kick start the receiver again.
//----------------------------------------------------------------------------
if ( bFwReloaded )
{
// Update HW status
Adapter->HardwareStatus = NdisHardwareStatusReady;
//NdisScheduleWorkItem(&Adapter -> MrvDrvPMWorkItem);
// 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);
}
Adapter->bRetryAssociate = TRUE;
break;
default :
DBGPRINT(DBG_POWER,("ERROR: Unknown power state\n"));
break;
}
Adapter->CurPowerState = NewPowerState;
return NDIS_STATUS_SUCCESS;
}
#endif //IF_SDIO
/******************************************************************************
*
* 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"));
#ifdef BG_SCAN
if ( Adapter->bBgScanEnabled==TRUE)
{
EnableBgScan( Adapter, FALSE);
}
#endif
//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;
Adapter->ulCurrentBSSIDIndex =0;
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps; //do not set to 0mbps
V5DbgMsg( (L"** before indicate (%d) (%d)\n", s_nCallCount, GetTickCount()) );
Adapter->ulLastMICErrorTime = 0;
//35.p6++
#ifdef REASSOCIATE
if ((Adapter->bIsReconnectEnable == FALSE) &&
(Adapter->bIsBeaconLoseEvent == FALSE) &&
(Adapter->bIsDeauthenticationEvent == FALSE)
#ifdef ACTIVE_ROAMING
&&(Adapter->bIsActiveRoaming == FALSE)
#endif
)
{
NdisMIndicateStatus( Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_DISCONNECT,
(PVOID)NULL,
0);
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled ) // wpa
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
}
else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled ) // wpa2
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
}
}
#else
//original
NdisMIndicateStatus(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_DISCONNECT,
(PVOID)NULL,
0);
V5DbgMsg( (L"** after indicate1 (%d) (%d)\n", s_nCallCount, GetTickCount()) );
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
V5DbgMsg( (L"** after indicate2 (%d) (%d)\n", s_nCallCount, GetTickCount()) );
if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
}
else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
}
else if ( Adapter->EncryptionStatus == Ndis802_11Encryption1Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption1KeyAbsent;
}
#endif
//35.p6--
return;
}
VOID
ResetSingleTxDoneAck(
IN PMRVDRV_ADAPTER Adapter
)
{
}
NDIS_STATUS
SetMacPacketFilter(
IN PMRVDRV_ADAPTER Adapter,
IN ULONG CurrentPacketFilter
)
{
NDIS_STATUS Status;
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilter() 0x%x \n", CurrentPacketFilter));
// if the CurrentPacketFilter is 0, turn off Rx
if (CurrentPacketFilter == 0)
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
#ifdef WMM
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WMM_ENABLE;
#endif
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_INT_ENABLE);
}
else
{
// Set default MAC option
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON );
// need to check if currently the wep is on
if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
{
DBGPRINT(DBG_WEP,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
}
else
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;
}
if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_BROADCAST_ENABLE;
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -