📄 miscproc.c
字号:
status = SDReadWriteRegistersDirect(Adapter->hDevice,
SD_IO_READ ,
0, // function 0 for scratch register
PACKET_TYPE_MAC_EVENT_SCRATCH_REGISTER,
FALSE,
&ucCardStatus,
sizeof(ucCardStatus));
if (SD_API_SUCCESS(status))
{
DBGPRINT(DBG_UNLOAD, ("SetStationPower: Read register successful!\n"));
}
else
{
DBGPRINT(DBG_UNLOAD, ("SetStationPower: Read register failed!\n"));
}
*/
#else
///spi_ReadRegister(PACKET_TYPE_MAC_EVENT_SCRATCH_REGISTER, &ucCardStatus);
If_ReadRegister(NULL, NULL, PACKET_TYPE_MAC_EVENT_SCRATCH_REGISTER, FALSE, &ucCardStatus, sizeof(ucCardStatus));
#endif
#ifdef IF_GSPI
if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
{
USHORT usCommand;
if (Adapter->psState != PS_STATE_FULL_POWER)
{
//062805
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);
}
// reset the Adapter object
ResetAdapterObject(Adapter);
Adapter->bIsScanInProgress = FALSE;
Adapter->bIsAssociateInProgress = FALSE;
Adapter->bIsAssociationBlockedByScan = FALSE;
Adapter->bIsScanWhileConnect = FALSE;
Adapter->bIsConnectToAny = FALSE;
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
#if OMAP
//chenglong add for turn off VWifi
PowerDownWiFi(TRUE);
EnableVWiFi(FALSE);
#endif ///#if OMAP
///g_bWLAN_FW_Downloaded = FALSE;
#endif //IF_GSPI
#if 0
// clean up timer
CleanUpTimers(Adapter);
// report link status change
//ResetDisconnectStatus(Adapter);
// Enable interrupt
If_DisableInterrupt(Adapter);
// tx
//CleanUpSingleTxBuffer(Adapter);
// rx
ResetRxPDQ(Adapter);
// command
ResetCmdBuffer(Adapter);
// reset the Adapter object
ResetAdapterObject(Adapter);
Adapter->bIsScanInProgress = FALSE;
Adapter->bIsAssociateInProgress = FALSE;
Adapter->bIsAssociationBlockedByScan = FALSE;
Adapter->bIsScanWhileConnect = FALSE;
Adapter->bIsConnectToAny = FALSE;
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
#endif
break;
case NdisDeviceStateD1:
case NdisDeviceStateD2:
break;
case NdisDeviceStateD3: // D3->D0
#ifdef IF_SDIO
NdisMSleep(5000);
DBGPRINT(DBG_LOAD|DBG_ALLEN,("D3->D0\n"));
Adapter->SurpriseRemoved = FALSE;
#else ///IF_SDIO
//yz_add
//RETAILMSG(1,(TEXT("NdisDeviceStateD3\r\n")));
Adapter->SurpriseRemoved = FALSE;
//yz_add for low power
RETAILMSG(1,(TEXT("wifi power on\r\n")));
//PM_EnableAna2(ON); //wifi 3.3
//wifi_DS(OFF); //wifi 3.3
#if OMAP
//chenglong add for turn on VWifi
PowerDownWiFi(FALSE);
EnableVWiFi(TRUE);
#endif ///#if OMAP
//g_spi_dummy_clk_reg = 0x05;
g_spi_dummy_clk_reg = 0x07;
g_spi_dummy_clk_data = 0x0e;
#endif
// see if this is the problem
//NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
// tt cetk_2 SdioFWStatus=If_IsFirmwareLoaded(Adapter);
//yz_change
SdioFWStatus=If_IsFirmwareLoaded(Adapter);
RETAILMSG(1,(TEXT("state = %d!\r\n"),SdioFWStatus));
//if(SdioFWStatus == FW_STATUS_UNINITIALIZED)
//SdioFWStatus = If_FirmwareDownload(Adapter);
SdioFWStatus = FW_STATUS_INITIALIZED; // tt cetk_2
//SdioFWStatus = FW_STATUS_UNINITIALIZED;
if (SdioFWStatus == FW_STATUS_READ_FAILED)
{
DBGPRINT(DBG_LOAD,("Bootloader in invalid state!\n"));
RETAILMSG(1,(TEXT("Bootloader in invalid state!\r\n")));
// we could do a hardware reset here on the card to try to restart
// the boot loader.
return NDIS_STATUS_FAILURE;
}else if ( SdioFWStatus == FW_STATUS_UNINITIALIZED )
{
DBGPRINT(DBG_LOAD,("Do FIRMWARE INITIALIZE!\n"));
RETAILMSG(1,(TEXT("Do FIRMWARE INITIALIZE!\r\n")));
SdioFWStatus = If_FirmwareDownload(Adapter);
//yz_add for test
//SdioFWStatus = FW_STATUS_INITIALIZED;
if ( SdioFWStatus != FW_STATUS_INITIALIZED )
{
DBGPRINT(DBG_LOAD, ("Failed to download the firmware\n"));
RETAILMSG(1,(TEXT("Failed to download the firmware\r\n")));
return NDIS_STATUS_FAILURE;
}
bFwReloaded = TRUE;
}else
{
DBGPRINT(DBG_LOAD,("Firmware aleady running!\n"));
RETAILMSG(1,(TEXT("Firmware aleady running!\r\n")));
}
Adapter->CurPowerState = NewPowerState;
// Enable INT
If_EnableInterrupt(Adapter);
// indicate to OS that the network is not connected
#ifdef IF_GSPI
///g_bWLAN_FW_Downloaded = TRUE;
g_spi_dummy_clk_reg = 0x01;
g_spi_dummy_clk_data = 0x01;
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_GSPI_BUS_CONFIG,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
#endif
//NdisMSetTimer(&Adapter->MrvDrvIndicateDisconnectTimer, 100);
// Adapter->DisconnectTimerSet = TRUE;
//----------------------------------------------------------------------------
// If the FW required reloading, then we have to kick start the receiver again.
//----------------------------------------------------------------------------
// tt cetk_2
/*
{
USHORT Action;
Action = Adapter->usMacControlRecord |
HostCmd_STATUS_MAC_RX_ON |
HostCmd_STATUS_MAC_TX_ON |
HostCmd_STATUS_MAC_INT_ENABLE;
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
Action,
HostCmd_OPTION_USE_INT,
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);
//060105, test
#ifdef IF_SDIO
NdisMSleep(10000);
#endif ///IF_SDIO
DBGPRINT(DBG_LOAD, ("Reinitialize wireless config\n"));
InitializeWirelessConfig(Adapter);
}
#ifdef IF_SDIO
NdisMSleep(300000);
#else ///IF_SDIO
NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 100);
Adapter->DisconnectTimerSet = TRUE;
#endif
break;
default :
DBGPRINT(DBG_POWER,("ERROR: Unknown power state\n"));
break;
}
Adapter->CurPowerState = NewPowerState;
return NDIS_STATUS_SUCCESS;
}
#else
/******************************************************************************
*
* 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
)
{
//UCHAR TempAddr[MRVDRV_ETH_ADDR_LEN];
BOOLEAN bFwReloaded = FALSE;
//BOOLEAN TimerCancelled;
//NDIS_STATUS Status;
IX_STATUS ixStatus = IX_STATUS_SUCCESS;
PCF_OBJECT pCf = (PCF_OBJECT)Adapter -> hwIface;
/*#ifdef UNDER_CE
{
wchar_t buf[100];
swprintf(buf, TEXT("SET Power State from %d to %d"), Adapter->CurPowerState,
NewPowerState);
MessageBox(NULL, buf, TEXT("CF-25"), MB_OK);
}
#endif */
//yz_add
RETAILMSG(1,(TEXT("SetStationPowerState()::NewPowerState = %d\r\n"),NewPowerState));
if( Adapter->CurPowerState == NewPowerState )
return NDIS_STATUS_SUCCESS;
switch( Adapter->CurPowerState ){
case NdisDeviceStateD0:
NdisZeroMemory(&Adapter->PreviousSSID, sizeof(NDIS_802_11_SSID));
if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
{
USHORT usCommand;
if (Adapter->PSMode != Ndis802_11PowerModeCAM)
{
Adapter->NeedToWakeup = TRUE;
}
// Clean up Tx buffer
CleanUpSingleTxBuffer(Adapter);
Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;
Adapter->ulNumOfBSSIDs = 0;
Adapter->ulPSNumOfBSSIDs = 0;
/*// store the SSID information
NdisMoveMemory( &Adapter->PreviousSSID,
&Adapter->CurrentSSID,
sizeof(NDIS_802_11_SSID));*/
// clear out adapter
NdisZeroMemory( &Adapter->CurrentSSID,
sizeof(NDIS_802_11_SSID));
// Let WinCE ZC handle reconnect
NdisZeroMemory( &Adapter->PreviousSSID,
sizeof(NDIS_802_11_SSID));
DBGPRINT(DBG_LOAD, ("SetStationPower: Currently connected, set PreviousSSID to: %s\n",
Adapter->PreviousSSID.Ssid));
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);
// 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
} // if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
CleanUpTimers(Adapter);
// Rest command buffer
ResetCmdBuffer(Adapter);
Adapter->bIsScanInProgress = FALSE;
Adapter->bIsAssociateInProgress = FALSE;
Adapter->bIsAssociationBlockedByScan = FALSE;
Adapter->bIsScanWhileConnect = FALSE;
Adapter->bIsConnectToAny = FALSE;
Adapter->psState = PS_STATE_FULL_POWER; // the card gets powered off
#ifdef UNDER_CE
Adapter->bIsLastOIDSetEncryptionStatus = FALSE;
#endif
if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -