📄 hwacproc.c
字号:
{
NDIS_STATUS Status;
pPacket = &(Adapter->SendPackets[Adapter->TxPacketGet]);
Status = SendSinglePacket(Adapter,pPacket);
if (Status == NDIS_STATUS_SUCCESS)
{
//RETAILMSG(1,(TEXT("PS_AWAKE: Packet is Sent \r\n")));
Adapter->TxPacketGet++;
Adapter->TxPacketGet %= MAX_TX_PACKETS;
}
else
DBGPRINT(DBG_ERROR , ("PS_AWAKE:Send packet fail %d \r\n", Adapter->TxPacketGet));
}
LeaveCriticalSection(&Adapter->TxCriticalSection);
}
break;
#ifdef DEEP_SLEEP
case MACREG_INT_CODE_DS_AWAKE:
DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_DS_AWAKE\n"));
if (Adapter->IsDeepSleep == TRUE)
{
Adapter->IsDeepSleep = FALSE;
Adapter->IsDeepSleepRequired= FALSE;
}
InfraBssReconnectStart ( Adapter, RECONNECT_DEEP_SLEEP_AWAKE);
break;
#endif
#ifdef HOST_WAKEUP
case MACREG_INT_CODE_HOST_WAKE_UP:
{
DBGPRINT(DBG_MACEVENT | DBG_HOSTWAKEUP,("MACREG_INT_CODE_HOST_WAKE_UP\n"));
/// AllenDBGPRINT(DBG_ALLEN,("MACREG_INT_CODE_HOST_WAKE_UP\n"));
Adapter->HostPowerState = HTWK_STATE_FULL_POWER;
UpdatePowerSaveState(Adapter, NULL, MACREG_INT_CODE_PS_AWAKE);
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_HOST_SLEEP_AWAKE_CONFIRM,
0,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
}
break;
#endif
case MACREG_INT_CODE_CMD_FINISHED: // Command finished
DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_CMD_FINISHED\n"));
HandleCommandFinishedEvent(Adapter);
break;
case MACREG_INT_CODE_WPA_MIC_ERR_UNICAST:
DBGPRINT(DBG_MACEVENT | DBG_ALLEN, ("MACREG_INT_CODE_WPA_MIC_ERR_UNICAST\n"));
HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_UNICAST);
break;
case MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST:
DBGPRINT(DBG_MACEVENT | DBG_ALLEN, ("MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST\n"));
HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST);
break;
case MACREG_INT_CODE_RSSI_LOW:
//AllenDBGPRINT(DBG_ALLEN,("MACREG_INT_CODE_RSSI_LOW\n"));
#ifdef ACTIVE_ROAMING
Adapter->bIsActiveRoaming =TRUE;
ActiveRoamingStart (Adapter);
#endif
DBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_RSSI_LOW\n"));
break;
case MACREG_INT_CODE_SNR_LOW:
//AllenDBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_SNR_LOW\n"));
break;
case MACREG_INT_CODE_MAX_FAIL:
//AllenDBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_MAX_FAIL\n"));
break;
// PJG: not implemented in the firmware. (in original fw from marvell)
case MACREG_INT_CODE_MIB_CHANGED:
case MACREG_INT_CODE_INIT_DONE:
default:
break;
}
return;
}
/******************************************************************************
*
* Name: MacEventDisconnected()
*
* Description: MAC event handler for link lost condition, disassociation,
* deauthentication
*
* Arguments: PMRVDRV_ADAPTER Adapter
*
* Return Value:
*
* Notes:
*
*****************************************************************************/
VOID
MacEventDisconnected(
PMRVDRV_ADAPTER Adapter,
UINT TimerValue,
BOOLEAN PowerFlag
)
{
DBGPRINT(DBG_NEWPS | DBG_NEWCMD | DBG_ALLEN, ("MacEventDisconnected() \n"));
// need to clean up Rx and Tx first
CleanUpSingleTxBuffer(Adapter);
ResetRxPDQ(Adapter);
// need to report disconnect event if currently associated
if ( Adapter->MediaConnectStatus == NdisMediaStateConnected )
{
USHORT usCommand;
/*
// send a scan command to get the latest AP list
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SCAN,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
*/
if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
else
usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
PrepareAndSendCommand(
Adapter,
usCommand,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
Adapter->CurrentBSSID);
ResetDisconnectStatus(Adapter);
}
return;
}
/******************************************************************************
*
* Name: HandleRFRegAccess()
*
* Description: Patch offset 7 for rev 4 boards
*
*****************************************************************************/
#ifdef EVALBOARD_REV4_FIX
VOID HandleRFRegAccess(PHostCmd_DS_CMD_RF_REG_ACCESS pRegPtr,
PMRVDRV_ADAPTER Adapter)
{
if ( Adapter->bApplyEvalBoardRev4Patch == TRUE )
{
OID_MRVL_DS_RF_REGISTER_ACCESS RegAccBuffer;
// not applying the next access
Adapter->bApplyEvalBoardRev4Patch = FALSE;
RegAccBuffer.Oid = 0;
RegAccBuffer.usOffset = 0x7;
RegAccBuffer.usOffset = pRegPtr->Value | 0x1;
DBGPRINT(DBG_WARNING, ("EVALBOARD_REV4_FIX: set RF Reg offset 7 to 0x%x\n",
RegAccBuffer.usOffset));
// Rev 4 board patch
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_RF_REG_ACCESS,
HostCmd_ACT_SET,
HostCmd_OPTION_USE_INT,
0,
0,
0,
FALSE,
0,
0,
NULL,
&RegAccBuffer);
}
}
#endif // #ifdef EVALBOARD_REV4_FIX
/******************************************************************************
*
* Name: HandleCommandFinishedEvent()
*
* Description: Command finished event handler
* * Arguments: PMRVDRV_ADAPTER Adapter
*
* Return Value:
* NDIS_STATUS_SUCCESS
* NDIS_STATUS_FAILURE
* NDIS_STATUS_NOT_ACCEPTED
* Notes:
*
*****************************************************************************/
NDIS_STATUS
HandleCommandFinishedEvent(
IN PMRVDRV_ADAPTER Adapter)
{
USHORT Ret;
BOOLEAN timerStatus;
PHostCmd_DS_GEN pRetPtr;
PHostCmd_DS_GET_HW_SPEC pHWSpec;
PHostCmd_DS_802_11_QUERY_STATUS pStatus;
PHostCmd_DS_802_3_GET_STAT p3Stat;
PHostCmd_DS_802_11_SCAN_RSP pScanResponse;
PHostCmd_DS_802_11_ASSOCIATE_RESULT pAssoResult;
PHostCmd_DS_802_11_AD_HOC_RESULT pAdHocResult;
USHORT Channel=0;
LONG lCurRSSI=0;
PHostCmd_DS_802_11_BAND_CONFIG pBandConf;
// AllenDBGPRINT(DBG_CMDRESP , ("HWAC: Received cmd resp for 0x%x\n",Adapter->CurCmd->ExpectedRetCode));
// RETAILMSG(1, (TEXT("HWAC: Received cmd resp for 0x%x \r\n"),Adapter->CurCmd->ExpectedRetCode));
if ( !Adapter->CurCmd )
{
// False alarm
DBGPRINT(DBG_CMDRESP | DBG_ERROR,
("**** hwacproc: False trigger for command ****\n"));
ResetCmdBuffer(Adapter);
return NDIS_STATUS_NOT_ACCEPTED;
}
// Get the command buffer
pRetPtr = (PHostCmd_DS_GEN)Adapter->CurCmd->BufVirtualAddr;
DBGPRINT(DBG_CMDRESP , ("HWAC: Cmd resp for 0x%x\n",pRetPtr->Command));
DBGPRINT(DBG_CMDRESP , ("HWAC: Received cmd resp for 0x%x\n",Adapter->CurCmd->ExpectedRetCode));
#ifdef CF_DRIVER
// PDM: We need to read the responce from the card
cf_ReadCommandResponse (Adapter,
Adapter->CurCmd->BufVirtualAddr);
#endif
Adapter->bIsDoingCmd = FALSE;
Ret = pRetPtr->Command;
// Now we got response from FW, cancel the command timer
if ( Adapter->CommandTimerSet )
{
NdisMCancelTimer(
&Adapter->MrvDrvCommandTimer,
&timerStatus);
Adapter->CommandTimerSet = FALSE;
}
//AllenDBGPRINT(DBG_CMDRESP , ("HWAC: Cmd resp for 0x%x\n",pRetPtr->Command));
if ( Adapter->CurCmd->ExpectedRetCode != pRetPtr->Command )
{
DBGPRINT(DBG_ERROR, ("ERROR: Received different cmd response from "
"expected!! Expected: 0x%x, Got: 0x%x\n",
Adapter->CurCmd->ExpectedRetCode, pRetPtr->Command));
ReturnCmdNode(Adapter, Adapter->CurCmd);
Adapter->CurCmd = NULL;
GetCmdFromQueueToExecute (Adapter);
return NDIS_STATUS_NOT_ACCEPTED;
}
// if the current return code is not 80xx, it's a time-out command
if ( (Ret & HostCmd_RET_NONE) == 0 )
{
DBGPRINT(DBG_CMDRESP,("*** hwacproc: Command timeout from FW!!\n"));
ReturnCmdNode(Adapter, Adapter->CurCmd);
Adapter->CurCmd = NULL;
GetCmdFromQueueToExecute (Adapter);
return NDIS_STATUS_FAILURE;
}
// Command is not successful, return failure, clean-up command, and exit
if ( pRetPtr->Result != HostCmd_RESULT_OK )
{
return HandleHostCmdFailure(Ret, Adapter, pRetPtr);
}
switch( Ret )
{
#ifdef BG_SCAN
case HostCmd_RET_802_11_BG_SCAN_CONFIG:
{
PHostCmd_DS_802_11_BG_SCAN_CONFIG pCfg = (PHostCmd_DS_802_11_BG_SCAN_CONFIG) pRetPtr;
if ( pRetPtr->Result == HostCmd_RESULT_OK )
{
Adapter->bBgScanEnabled = pCfg->Enable;
}
else
{
Adapter->bBgScanEnabled = FALSE;
}
//RETAILMSG(1, (TEXT("Got BG_SCAN_CONFIG command return [0x%x] \r\n"), pRetPtr->Result));
}
break;
case HostCmd_RET_802_11_BG_SCAN_QUERY:
{
//RETAILMSG(1, (TEXT("HostCmd_RET_802_11_BG_SCAN_QUERY [0x%x] \r\n"), pRetPtr->Result));
if ( pRetPtr->Result == HostCmd_RESULT_OK )
{
PHostCmd_DS_802_11_BG_SCAN_QUERY_RSP pBgScanResponse;
pBgScanResponse = (PHostCmd_DS_802_11_BG_SCAN_QUERY_RSP) pRetPtr;
{
PBSS_DESCRIPTION_SET_ALL_FIELDS pDesc;
pDesc = (PBSS_DESCRIPTION_SET_ALL_FIELDS) (pBgScanResponse+1);
}
HandleBgScanResponse( pBgScanResponse, Adapter );
#ifdef ACTIVE_ROAMING
if (Adapter->bActiveRoamingwithBGSCAN==TRUE)
{
EnableBgScan(Adapter, FALSE);
EnableBgScan(Adapter, TRUE);
}
#endif
if (Adapter->bPSEnableBGScan==TRUE)
{
Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
Adapter->bPSEnableBGScan=FALSE;
PSSleep(Adapter);
}
}
else
DBGPRINT( DBG_SCAN, ("[Mrvl] Failed to get background scan results!\n") );
}
break;
#endif
case HostCmd_RET_802_11_SUBSCRIBE_EVENT:
{
PHostCmd_DS_802_11_SUBSCRIBE_EVENT pEventCmd;
pEventCmd = (PHostCmd_DS_802_11_SUBSCRIBE_EVENT) pRetPtr;
Adapter->SubscribeEvents = pEventCmd->Events;
if (pEventCmd->Action == HostCmd_ACT_GET)
{
DBGPRINT(DBG_SUBSCRIBEEVENT, ("Adapter->SubscribeEvents = [%x]\n",
Adapter->SubscribeEvents));
}
}
break;
#ifdef BCA
case HostCmd_RET_802_11_BCA_CONFIG_TIMESHARE:
TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_BCA_TIMESHARE, TrafficType, TimeShareInterval );
break;
#endif //BCA
case HostCmd_RET_802_11_LED_CONTROL:
TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_LED_CONTROL, NumLed, data[0] );
break;
#ifdef CAL_DATA
case HostCmd_RET_802_11_CAL_DATA_EXT:
TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_CAL_DATA_EXT, Revision, CalDataLen );
break;
case HostCmd_RET_802_11_CAL_DATA:
TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_CAL_DATA, PAOption, Domain );
break;
#endif //CAL_DATA
case HostCmd_RET_802_11_PWR_CFG:
TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_PWR_CFG, Enable, P2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -