📄 hwacproc.c
字号:
// TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_DS_802_11_PWR_CFG, Enable, P2);
// TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_PWR_CFG, P0, P1, P2 );
// TT_CMDPARSE_SET_EVENT( Adapter );
break;
case HostCmd_RET_802_11_TPC_CFG:
TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_TPC_CFG, Enable, P2);
// TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_DS_802_11_TPC_CFG, Enable, P2);
// TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_TPC_CFG, P0, P1, P2 );
// TT_CMDPARSE_SET_EVENT( Adapter );
/* {
PHostCmd_DS_802_11_TPC_CFG pCmdResult;
NKDbgPrintfW( L"-v5- CMD_RSP: TPC_CFG, Result=%d\n",
pCmdResult->Result );
}
*/ break;
case HostCmd_RET_802_11_RATE_ADAPT_RATESET:
TT_CMDPARSE_CMD_RESP2(HostCmd_RATE_ADAPT_RATESET, EnableHwAuto, Bitmap);
// TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_RATE_ADAPT_RATESET, EnableHwAuto );
// TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_RATE_ADAPT_RATESET, EnableHwAuto, Bitmap, Bitmap );
// TT_CMDPARSE_SET_EVENT( Adapter );
/* {
PHostCmd_RATE_ADAPT_RATESET pCmdResult;
pCmdResult = (PHostCmd_RATE_ADAPT_RATESET) pRetPtr;
NKDbgPrintfW( L"-v5- CMD_RSP: RATE_ADAPT, Act=%d, Result=%d, Enable=%d, Bitmap=0x%x\n",
pCmdResult->Action, pCmdResult->Result, pCmdResult->EnableHwAuto, pCmdResult->Bitmap );
}
*/ break;
//tt --
//#ifdef ADHOCAES
// case HostCmd_RET_802_11_PWK_KEY:
// {
// PHostCmd_DS_802_11_PWK_KEY pCmd = (PHostCmd_DS_802_11_PWK_KEY)pRetPtr;
// if (pCmd->Action == HostCmd_ACT_GET_AES)
// {
// HandleAdhocAES( Adapter,
// pCmd,
// Adapter->CurCmd->InformationBuffer,
// Adapter->CurCmd->BytesWritten);
// }
// }
//
// break;
//#endif
case HostCmd_RET_802_11_RSSI:
{
PHostCmd_DS_802_11_RSSI_RSP rssirsp = (PHostCmd_DS_802_11_RSSI_RSP)pRetPtr;
Adapter->SNR[TYPE_BEACON][TYPE_NOAVG] = rssirsp->SNR;
Adapter->NF[TYPE_BEACON][TYPE_NOAVG] = rssirsp->NoiseFloor;
Adapter->SNR[TYPE_BEACON][TYPE_AVG] = rssirsp->AvgSNR;
Adapter->NF[TYPE_BEACON][TYPE_AVG] = rssirsp->AvgNoiseFloor;
/// AllenDBGPRINT(DBG_RXDATA, ("rssirsp->SNR = %d \n rssirsp->NoiseFloor = %d \n rssirsp->AvgSNR = %d \n rssirsp->AvgNoiseFloor %d\n",
/// rssirsp->SNR,
/// rssirsp->NoiseFloor,
/// rssirsp->AvgSNR,
/// rssirsp->AvgNoiseFloor));
Adapter->RSSI[TYPE_BEACON][TYPE_NOAVG] =
CAL_RSSI(Adapter->SNR[TYPE_BEACON][TYPE_NOAVG],
Adapter->NF[TYPE_BEACON][TYPE_NOAVG]);
Adapter->RSSI[TYPE_BEACON][TYPE_AVG] =
CAL_RSSI(Adapter->SNR[TYPE_BEACON][TYPE_AVG] ,
Adapter->NF[TYPE_BEACON][TYPE_AVG]);
Adapter->LastRSSI = Adapter->RSSI[TYPE_BEACON][TYPE_AVG];
}
break;
case HostCmd_RET_REGION_CODE:
#ifndef ENABLE_802_11D
{
PHostCmd_DS_CMD_REGION_CODE pCmd = (PHostCmd_DS_CMD_REGION_CODE)pRetPtr;
if (pCmd->Action == HostCmd_ACT_SET)
{
Adapter->RegionCode = pCmd->RegionCode;
SetRegionCode(Adapter);
}
else
{
POID_MRVL_DS_REGION_CODE pUserBuffer;
pUserBuffer = (POID_MRVL_DS_REGION_CODE) Adapter->CurCmd->InformationBuffer;
pUserBuffer->ulRegionCode = pCmd->RegionCode;
*(Adapter->CurCmd->BytesWritten) = sizeof(OID_MRVL_DS_REGION_CODE);
}
}
#endif
break;
case HostCmd_RET_HW_SPEC_INFO:
pHWSpec = (PHostCmd_DS_GET_HW_SPEC)pRetPtr;
HandleHardwareSpec(pHWSpec, Adapter);
break;
case HostCmd_RET_802_11_RESET:
DBGPRINT(DBG_CMDRESP,("HWAC - Reset command successful\n"));
SetMacPacketFilter(
Adapter,
Adapter->CurrentPacketFilter);
break;
case HostCmd_RET_802_11_STATUS_INFO:
pStatus = (PHostCmd_DS_802_11_QUERY_STATUS)pRetPtr;
Adapter->HardwareStatus = NdisHardwareStatusReady;
Adapter->LinkSpeed = pStatus->MaxLinkSpeed;
Adapter->FWStatus = pStatus->FWStatus;
Adapter->MACStatus = pStatus->MACStatus;
Adapter->RFStatus = pStatus->RFStatus;
Adapter->CurentChannel = pStatus->CurentChannel;
break;
case HostCmd_RET_802_11_STAT:
// TODO: 802.11 stat in adapter object
/*
p11Stat = (PHostCmd_DS_802_11_GET_STAT)pRetPtr;
Adapter->TransmittedFragmentCount.LowPart = p11Stat->TXFragmentCnt;
Adapter->MulticastTransmittedFrameCount.LowPart = p11Stat->MCastTXFrameCnt;
Adapter->FailedCount.LowPart = p11Stat->FailedCnt;
Adapter->RetryCount.LowPart = p11Stat->RetryCnt;
Adapter->MultipleRetryCount.LowPart = p11Stat->MultipleRetryCnt;
Adapter->RTSSuccessCount.LowPart = p11Stat->RTSSuccessCnt;
Adapter->RTSFailureCount.LowPart = p11Stat->RTSFailureCnt;
Adapter->ACKFailureCount.LowPart = p11Stat->ACKFailureCnt;
Adapter->FrameDuplicateCount.LowPart = p11Stat->FrameDuplicateCnt;
Adapter->ReceivedFragmentCount.LowPart = p11Stat->RXFragmentCnt;
Adapter->MulticastReceivedFrameCount.LowPart = p11Stat->MCastRXFrameCnt;
Adapter->FCSErrorCount.LowPart = p11Stat->FCSErrorCnt;
*/
break;
case HostCmd_RET_802_3_STAT:
p3Stat = (PHostCmd_DS_802_3_GET_STAT)pRetPtr;
Adapter->XmitOK = p3Stat->XmitOK;
Adapter->RcvOK = p3Stat->RcvOK;
Adapter->XmitError = p3Stat->XmitError;
Adapter->RcvError = p3Stat->RcvError;
Adapter->RcvNoBuffer = p3Stat->RcvNoBuffer;
Adapter->RcvCRCError = p3Stat->RcvCRCError;
break;
case HostCmd_RET_802_11_PS_MODE:
DBGPRINT(DBG_NEWPS,("PS command response \n"));
// RETAILMSG(1, (TEXT("Response PS Command 0x%x >>> "), Ret));
// RETAILMSG(1, (TEXT("Response PS Result 0x%x >>> "), pRetPtr->Result));
{
USHORT PsSubCommand = 0;
PsSubCommand = ((PHostCmd_DS_802_11_PS_MODE)pRetPtr)->SubCommand;
if (PsSubCommand == HostCmd_SubCmd_Exit_PS)
{
UpdatePowerSaveState( Adapter, Adapter->CurCmd, 0);
}
}
break;
case HostCmd_RET_802_11_SCAN:
pScanResponse = (PHostCmd_DS_802_11_SCAN_RSP) pRetPtr;
HandleScanResponse(pScanResponse, Adapter);
break;
case HostCmd_RET_802_11_ASSOCIATE:
case HostCmd_RET_802_11_REASSOCIATE:
pAssoResult = (PHostCmd_DS_802_11_ASSOCIATE_RESULT)
(Adapter->CurCmd->BufVirtualAddr);
HandleAssocReassoc(pAssoResult, Adapter);
break;
case HostCmd_RET_802_11_AD_HOC_JOIN:
case HostCmd_RET_802_11_AD_HOC_START:
pAdHocResult = (PHostCmd_DS_802_11_AD_HOC_RESULT)
(Adapter->CurCmd->BufVirtualAddr);
HandleAdHocJoinStart(pAdHocResult, Ret, Adapter);
break;
case HostCmd_RET_802_11_DISASSOCIATE:
case HostCmd_RET_802_11_DEAUTHENTICATE:
ResetDisconnectStatus(Adapter);
CleanUpSingleTxBuffer(Adapter);
break;
#ifndef MRVL_RFCHANNEL
case HostCmd_RET_802_11_RF_CHANNEL:
pRF = (PHostCmd_DS_802_11_RF_CHANNEL)pRetPtr;
if (pRF)
{
Adapter->Channel = pRF->CurentChannel;
}
DBGPRINT(DBG_OID,("RETURN - HostCmd_RET_802_11_RF_CHANNEL, Adapter->Channel=0x%x ****\n",Adapter->Channel));
break;
#endif
case HostCmd_RET_802_11_ENABLE_QOS_WME:
HandleEnableQosWmeCommand(
(PHostCmd_CMD_QOS_WME_ENABLE_STATE)pRetPtr, Adapter);
break;
case HostCmd_RET_802_11_WME_AC_PARAMS:
HandleWmeACParamsCommand(
(PHostCmd_CMD_QOS_WME_ACCESS_CATEGORY_PARAMETERS)pRetPtr,
Adapter);
break;
case HostCmd_RET_802_11_GRP_KEY:
break;
case HostCmd_RET_802_11_QUERY_TRAFFIC:
case HostCmd_RET_MAC_CONTROL:
case HostCmd_RET_MAC_MULTICAST_ADR:
case HostCmd_RET_802_11_SNMP_MIB:
case HostCmd_RET_802_11_SET_WEP:
case HostCmd_RET_802_11_DEEP_SLEEP:
break;
#ifdef HOST_WAKEUP
case HostCmd_RET_802_11_HOST_SLEEP_CFG:
{
DBGPRINT(DBG_HOSTWAKEUP, ("HWAC : Host Wakeup Config cmd resp received\n"));
if (Adapter->bHostWakeCfgSet == 1)
{
Adapter->HostPowerState = HTWK_STATE_SLEEP;
}
else
{
Adapter->HostPowerState = HTWK_STATE_FULL_POWER;
}
}
break;
case HostCmd_RET_802_11_HOST_SLEEP_AWAKE_CONFIRM:
DBGPRINT(DBG_HOSTWAKEUP, ("HWAC : Host Awake Confirm cmd resp received\n"));
break;
#endif
case HostCmd_RET_802_11_BAND_CONFIG:
pBandConf = (PHostCmd_DS_802_11_BAND_CONFIG)pRetPtr;
DBGPRINT(DBG_CMDRESP,("*** pBandConf->BandSelection %d\n",pBandConf->BandSelection));
DBGPRINT(DBG_CMDRESP,("*** pBandConf->Command %x\n",pBandConf->Command));
DBGPRINT(DBG_CMDRESP,("*** pBandConf->Channel %d\n",pBandConf->Channel));
break;
default:
break;
} // end of switch
// Check pending OID or command
if ( Adapter->CurCmd->PendingInfo == HostCmd_PENDING_ON_GET_OID )
{
HandleHostPendGetOid(Ret,Adapter,pRetPtr);
}
else if ( Adapter->CurCmd->PendingInfo == HostCmd_PENDING_ON_SET_OID )
{
HandleHostPendSetOid(Ret,Adapter);
}
ReturnCmdNode(Adapter, Adapter->CurCmd);
Adapter->CurCmd = NULL;
GetCmdFromQueueToExecute (Adapter);
return NDIS_STATUS_SUCCESS;
}
/******************************************************************************
*
* Name: HandleHardwareSpec()
*
* Description: Handle hardware spec command
*
* Arguments: PHostCmd_DS_802_11_SCAN_RSP pRetPtr
* PMRVDRV_ADAPTER Adapter
*
*
* Return Value:
*
* Notes:
*
*****************************************************************************/
VOID
HandleHardwareSpec(
PHostCmd_DS_GET_HW_SPEC pHWSpec,
PMRVDRV_ADAPTER Adapter
)
{
ULONG i;
UCHAR TempBuf[4];
UCHAR ucA, ucB, ucC, ucP;
/*
#ifdef INTERFACE20
// check if the interface number is correct
if ( pHWSpec->HWIfVersion != 2 )
{
DBGPRINT(DBG_ERROR, ("Fatal error: HW interface version mismatch! \n"));
DBGPRINT(DBG_ERROR, ("Expected version 2, got %d\n", pHWSpec->HWIfVersion));
ASSERT(FALSE);
}
#endif
*/
Adapter->HardwareStatus = NdisHardwareStatusReady;
// permanent address should only be set once at start up
// if ( Adapter->PermanentAddr[0] == 0xff )
{
// permanent address has not been set yet, set it
NdisMoveMemory(
(PVOID)Adapter->PermanentAddr,
(PVOID)pHWSpec->PermanentAddr,
MRVDRV_ETH_ADDR_LEN);
// if( Adapter->CurrentAddr[0] == 0xff )
{
NdisMoveMemory(
(PVOID)Adapter->CurrentAddr,
(PVOID)pHWSpec->PermanentAddr,
MRVDRV_ETH_ADDR_LEN);
}
if (Adapter->bIsAddress == FALSE)
{
if (Adapter->PendingMacAddressOid.bIsPendingOID)
{
PPENDING_OID pPending;
DBGPRINT(DBG_LOAD,("HandleHardwareSpec Return PendingMacAddressOid \n"));
pPending = &(Adapter->PendingMacAddressOid);
pPending->bIsPendingOID = FALSE;
ETH_COPY_NETWORK_ADDRESS((PCHAR) pPending->InformationBuffer, Adapter->PermanentAddr);
*(pPending->BytesReadWrite) = MRVDRV_ETH_ADDR_LEN;
*(pPending->BytesNeeded) = 0;
NdisMQueryInformationComplete(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_SUCCESS);
}
}
Adapter->bIsAddress = TRUE;
DBGPRINT(DBG_CMDRESP | DBG_LOAD,("*** PermanentAddr %02x.%02x.%02x.%02x.%02x.%02x ***\n",
Adapter->PermanentAddr[0],
Adapter->PermanentAddr[1],
Adapter->PermanentAddr[2],
Adapter->PermanentAddr[3],
Adapter->PermanentAddr[4],
Adapter->PermanentAddr[5]
));
}
NdisMoveMemory(
&(Adapter->FWReleaseNumber),
&(pHWSpec->FWReleaseNumber),
4);
ucA = (UCHAR)((Adapter->FWReleaseNumber >> 16) & 0xff);
ucB = (UCHAR)((Adapter->FWReleaseNumber >> 8 ) & 0xff);
ucC = (UCHAR)((Adapter->FWReleaseNumber ) & 0xff);
ucP = (UCHAR)((Adapter->FWReleaseNumber >> 24) & 0xff);
DBGPRINT(DBG_CMDRESP | DBG_LOAD,("*** FW Release number (0x%x) %d.%d.%d.%d ***\n",
Adapter->FWReleaseNumber, ucA, ucB, ucC, ucP));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -