📄 hwacproc.c
字号:
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_MAC_REG_ACCESS:
case HostCmd_RET_BBP_REG_ACCESS:
case HostCmd_RET_RF_REG_ACCESS:
{
if(*((USHORT *)pRetPtr +4) == HostCmd_ACT_GEN_READ)
{
if((Ret == HostCmd_RET_BBP_REG_ACCESS) || (Ret == HostCmd_RET_RF_REG_ACCESS))
{
#ifdef MRVL_GUI_INTERFACE
MrvlNotifyApplication(
COMMAND_EVENT_READ_REG_DONE,
(UCHAR *)((USHORT *)pRetPtr +6),
1);
#endif //MRVL_GUI_INTERFACE
}
else
{
#ifdef MRVL_GUI_INTERFACE
MrvlNotifyApplication(
COMMAND_EVENT_READ_REG_DONE,
(UCHAR *)((USHORT *)pRetPtr +6),
4);
#endif //MRVL_GUI_INTERFACE
}
}
#ifdef EVALBOARD_REV4_FIX
if ( pRetPtr->Command == HostCmd_RET_RF_REG_ACCESS )
{
HandleRFRegAccess((PHostCmd_DS_CMD_RF_REG_ACCESS)pRetPtr, Adapter);
}
#endif
}
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 == 0)
{
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_CMD )
HandleHostPendCommand(Ret,Adapter,pRetPtr);
else 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
*/
HexDump(DBG_ALLEN, "HostCmd_DS_GET_HW_SPEC: ", (UCHAR *)pHWSpec, sizeof(HostCmd_DS_GET_HW_SPEC));
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));
#ifdef UNDER_CE
{ // Add FW version to registry
REG_VALUE_DESCR Vals[2];
wchar_t buf[50];
swprintf(buf, TEXT("%d.%d.%d.%d"), ucA, ucB, ucC, ucP);
Vals[0].val_data = (PBYTE)buf;
Vals[0].val_name = TEXT("FWVersion");
Vals[0].val_type = REG_SZ;
Vals[1].val_name = NULL;
#ifdef MRV_CHIP_8385H
AddKeyValues (TEXT("Comm\\CF8385H"), Vals); // CF8385H
#elif defined(MRV_CHIP_8385PN)
AddKeyValues (TEXT("Comm\\CF8385PN"), Vals); // CF8385PN
#elif defined(MRV_CHIP_8381PN)
AddKeyValues (TEXT("Comm\\CF8381PN"), Vals); // CF8381PN
#elif defined(MRV_CHIP_8381P)
AddKeyValues (TEXT("Comm\\CF8381P"), Vals); // CF8381P
#else
AddKeyValues (TEXT("Comm\\EAGLEND5"), Vals); // CF8305
#endif
}
#endif // UNDER_CE
DBGPRINT(DBG_CMDRESP,("*** Got permanent addr: %2x %2x %2x %2x %2x %2x ***\n",
pHWSpec->PermanentAddr[0],
pHWSpec->PermanentAddr[1],
pHWSpec->PermanentAddr[2],
pHWSpec->PermanentAddr[3],
pHWSpec->PermanentAddr[4],
pHWSpec->PermanentAddr[5]));
// Get the region code
// if it's unidentified region code, use the default (USA)
Adapter->RegionTableIndex = 0;
// the upper byte is the primary region code
Adapter->RegionCode = pHWSpec->RegionCode >> 8;
DBGPRINT(DBG_LOAD, ("Region code = 0x%x \n", Adapter->RegionCode));
for (i=0; i<MRVDRV_MAX_REGION_CODE; i++)
{
// use the region code to search for the index
if ( Adapter->RegionCode == RegionCodeToIndex[i] )
{
Adapter->RegionTableIndex = (USHORT) i;
break;
}
}
// if it's unidentified region code, use the default (USA)
if (i == MRVDRV_MAX_REGION_CODE)
{
Adapter->RegionCode = 0x10;
Adapter->RegionTableIndex = 0;
}
DBGPRINT(DBG_LOAD, ("Region code = 0x%x \n", Adapter->RegionCode));
SetRegionCode(Adapter); //set region band
// if( Adapter->CurrentAddr[0] == 0xff )
{
NdisMoveMemory(
(PVOID)Adapter->CurrentAddr,
(PVOID)pHWSpec->PermanentAddr,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -