📄 cmdsend.c
字号:
GetCmdFromQueueToExecute(Adapter);
cmd_index ++;
}
}
Adapter->SeqNum--;
NdisAcquireSpinLock(&Adapter->FreeQSpinLock);
CleanUpCmdCtrlNode(pTempCmd);
InsertQNodeAtTail(&Adapter->CmdFreeQ, (PQ_NODE)pTempCmd);
NdisReleaseSpinLock(&Adapter->FreeQSpinLock);
DBGPRINT(DBG_CMDRESP,("HWAC - Progressive SCAN commnad is ready\n"));
return NDIS_STATUS_SUCCESS;
}
break;
#else
case HostCmd_CMD_802_11_SCAN:
{
// RETAILMSG(1,(TEXT("Enter HostCmd_CMD_802_11_SCAN : 1 : \n")));
Adapter->SeqNum--;
NdisAcquireSpinLock(&Adapter->FreeQSpinLock);
CleanUpCmdCtrlNode(pTempCmd);
InsertQNodeAtTail(&Adapter->CmdFreeQ, (PQ_NODE)pTempCmd);
NdisReleaseSpinLock(&Adapter->FreeQSpinLock);
pTempCmd = NULL;
#ifdef AUTO_REASSOCIATION
SetupScanCommand (Adapter, PendingInfo );
#else
#ifdef ACTIVE_ROAMING
if((Adapter->bIsActiveRoaming == TRUE && Adapter->bActiveRoamingScanOneChannel==TRUE) || (Adapter->bIsBeaconLoseEvent== TRUE && Adapter->bLinkLostScanOneChannel==TRUE))
{
#ifdef MRVL_DBG_ACTIVE_ROAMING
#ifdef MRVL_PRINT_DBG_MSG
MrvPrintFile("\t\t[Marvell]HostCmd_CMD_802_11_SCAN: CallSetupScanOneChannelCommand!!\n");
#endif
#endif
SetupScanOneChannelCommand (Adapter);
}else
#endif
SetupScanCommand (Adapter );
#endif
}
break;
#endif
case HostCmd_CMD_802_11_SET_WEP:
pSetWEP = (PHostCmd_DS_802_11_SET_WEP)pCmdPtr;
pNewWEP = (PNDIS_802_11_WEP)InformationBuffer;
// RETAILMSG(1,(TEXT("Enter HostCmd_DS_802_11_SET_WEP : \n")));
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SET_WEP));
SetupWepKeys(
PendingOID,
pSetWEP,
pNewWEP,
InformationBuffer,
Adapter,
CmdOption);
break;
case HostCmd_CMD_802_11_SNMP_MIB:
switch (PendingOID)
{
case OID_802_11_INFRASTRUCTURE_MODE:
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->OID = (USHORT)DesiredBssType_i; // InfrastructureMode Index = 0
pSNMPMIB->BufSize = sizeof(UCHAR);
if( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
ucTemp = 1; // Infrastructure mode
else
ucTemp = 2; // Ad hoc mode
NdisMoveMemory(pSNMPMIB->Value, &ucTemp, sizeof(UCHAR));
break;
}
case OID_802_11_FRAGMENTATION_THRESHOLD:
{
NDIS_802_11_FRAGMENTATION_THRESHOLD ulTemp;
USHORT usTemp;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->OID = (USHORT)FragThresh_i;
if(PendingInfo==HostCmd_PENDING_ON_GET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_GET;
}
else if(PendingInfo==HostCmd_PENDING_ON_SET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
ulTemp=*((NDIS_802_11_FRAGMENTATION_THRESHOLD *)InformationBuffer);
*((PUSHORT)(pSNMPMIB->Value))=(USHORT)ulTemp;
DBGPRINT(DBG_OID,("OID: Setting Fragmentation threshold to %d\n", ulTemp ));
}
else if(PendingInfo==HostCmd_PENDING_ON_NONE){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
usTemp=(USHORT)Adapter->FragThsd;
NdisMoveMemory(pSNMPMIB->Value, &usTemp, sizeof(USHORT));
}
break;
}
case OID_802_11_RTS_THRESHOLD:
{
USHORT usTemp;
NDIS_802_11_RTS_THRESHOLD ulTemp;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->OID = (USHORT)RtsThresh_i;
if(PendingInfo==HostCmd_PENDING_ON_GET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_GET;
}
else if(PendingInfo==HostCmd_PENDING_ON_SET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
ulTemp=*((NDIS_802_11_RTS_THRESHOLD *)InformationBuffer);
*((PUSHORT)(pSNMPMIB->Value))=(USHORT)ulTemp;
DBGPRINT(DBG_OID,("OID: Setting RTS threshold to %d\n", ulTemp ));
}
else if(PendingInfo==HostCmd_PENDING_ON_NONE){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
usTemp=(USHORT)Adapter->RTSThsd;
NdisMoveMemory(pSNMPMIB->Value, &usTemp, sizeof(USHORT));
}
break;
}
#ifdef ENABLE_802_11D
case OID_802_11D_ENABLE:
{
USHORT usTemp;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->OID = Dot11D_i;
if( CmdOption == HostCmd_ACT_GEN_SET )
{
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
usTemp = *(USHORT*) InformationBuffer;
*((USHORT *) (pSNMPMIB->Value)) = usTemp;
//RETAILMSG(1,(L"CMD SET enable11d:%x\n\r",usTemp));
//dralee_20060613
if( Adapter->MediaConnectStatus == NdisMediaStateDisconnected )
ResetAllScanTypeAndPower(Adapter);
}
else
{
pSNMPMIB->QueryType = HostCmd_ACT_GEN_GET;
pSNMPMIB->BufSize = sizeof(USHORT);
//RETAILMSG(1,(L"CMD GET enable11d:%x\n\r"));
}
}
#endif
break;
default:
break;
}
break;
case HostCmd_CMD_802_11_AUTHENTICATE:
{
UCHAR ucAuth;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_AUTHENTICATE));
pAuthenticate = (PHostCmd_DS_802_11_AUTHENTICATE) pCmdPtr;
// if the authentication type need to be determined at initialization time
if(PendingInfo == HostCmd_PENDING_ON_NONE)
{
ucAuth = (UCHAR)Adapter->AuthenticationMode;
}
else
{
ucAuth = (UCHAR) (*((PNDIS_802_11_AUTHENTICATION_MODE) InformationBuffer));
}
switch (ucAuth)
{
case Ndis802_11AuthModeWPAPSK:
case Ndis802_11AuthModeWPA:
case Ndis802_11AuthModeOpen:
case Ndis802_11AuthModeWPA2:
case Ndis802_11AuthModeWPA2PSK:
pAuthenticate->AuthType = 0; // open authentication
break;
case Ndis802_11AuthModeShared:
pAuthenticate->AuthType = 1; // shared authentication
break;
default:
DBGPRINT(DBG_WARNING, ("Received unsupported authentication mode: %d\n",
ucAuth));
return NDIS_STATUS_FAILURE;
}
// set AP MAC address
NdisMoveMemory(pAuthenticate->MacAddr, Adapter->CurrentBSSID, MRVDRV_ETH_ADDR_LEN);
}
break;
case HostCmd_CMD_802_11_ASSOCIATE_EXT:
case HostCmd_CMD_802_11_ASSOCIATE:
case HostCmd_CMD_802_11_REASSOCIATE:
//dralee 081105, V4
//Size = (USHORT)(sizeof(HostCmd_DS_802_11_ASSOCIATE_EXT));
pAsso = (PHostCmd_DS_802_11_ASSOCIATE_EXT)pCmdPtr;
if ( Adapter->bIsAssociateInProgress == TRUE )
{
DBGPRINT(DBG_CMDRESP | DBG_WARNING,
("There is already an association command pending, "
"fail the current request!\n"));
NdisAcquireSpinLock(&Adapter->FreeQSpinLock);
CleanUpCmdCtrlNode(pTempCmd);
InsertQNodeAtTail(&Adapter->CmdFreeQ, (PQ_NODE)pTempCmd);
NdisReleaseSpinLock(&Adapter->FreeQSpinLock);
#ifdef REASSOCIATE
if (Adapter->bIsReconnectEnable == TRUE)
Adapter->bIsReConnectNow = FALSE;
Adapter->bIsSystemConnectNow = FALSE;
#endif //REASSOCIATE
return NDIS_STATUS_NOT_ACCEPTED;
}
Status = SetupAssociationExt(
(PHostCmd_DS_802_11_ASSOCIATE_EXT)pCmdPtr,
PendingInfo,
Adapter,
pTempCmd,
InformationBuffer
);
Size = pAsso->Size;
DBGPRINT(DBG_ALLEN, ("HostCmd_CMD_802_11_ASSOCIATE_EXT size = %d \n",Size));
#ifdef CCX_CCKM
if (Status == NDIS_STATUS_PENDING) {
DBGPRINT(DBG_CCX, ("[PrepareAndSendCommand] return NDIS_STATUS_PENDING\n"));
return Status;
}
#endif
if (Status != NDIS_STATUS_SUCCESS)
{
#ifdef REASSOCIATE
if (Adapter->bIsReconnectEnable == TRUE)
Adapter->bIsReConnectNow = FALSE;
Adapter->bIsSystemConnectNow = FALSE;
#endif //REASSOCIATE
return Status;
}
//HexDump(DBG_CMDRESP, "ASSO_EXT CMD Buffer: ",
// (PUCHAR)pCmdPtr, sizeof(HostCmd_DS_802_11_ASSOCIATE_EXT));
// DBGPRINT(DBG_CMDRESP,("HWAC - ASSOCIATION_EXT command to %2x-%2x-%2x-"
// "%2x-%2x-%2x is ready\n",
// pAsso->DestMacAddr[0],
// pAsso->DestMacAddr[1],
// pAsso->DestMacAddr[2],
// pAsso->DestMacAddr[3],
// pAsso->DestMacAddr[4],
// pAsso->DestMacAddr[5]));
break;
case HostCmd_CMD_802_11_AD_HOC_START:
Size = (USHORT)(sizeof(HostCmd_DS_802_11_AD_HOC_START));
pAdHocStart = (PHostCmd_DS_802_11_AD_HOC_START)pCmdPtr;
if (Adapter->ulPSNumOfBSSIDs >= MRVDRV_MAX_BSSID_LIST)
{
ReturnCmdNode(Adapter, pTempCmd);
return NDIS_STATUS_FAILURE;
}
SetupAdHocStart( pAdHocStart,
PendingInfo,
Adapter,
pTempCmd,
InformationBuffer
);
DBGPRINT(DBG_CMDRESP,("HWAC - AD HOC Start command is ready\n"));
break;
case HostCmd_CMD_802_11_AD_HOC_JOIN:
// The command structure is HostCmd_CMD_802_11_AD_HOC_JOIN
Size = (USHORT)(sizeof(HostCmd_DS_802_11_AD_HOC_JOIN));
pAdHocJoin = (PHostCmd_DS_802_11_AD_HOC_JOIN)pCmdPtr;
SetupAdHocJoin( pAdHocJoin,
PendingInfo,
Adapter,
pTempCmd,
InformationBuffer
);
DBGPRINT(DBG_CMDRESP,("HWAC - AD HOC Join command is ready\n"));
break;
case HostCmd_CMD_802_11_DEAUTHENTICATE:
case HostCmd_CMD_802_11_DISASSOCIATE:
if (Cmd == HostCmd_CMD_802_11_DEAUTHENTICATE)
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_DEAUTHENTICATE));
pDeAuthenticate = (PHostCmd_DS_802_11_DEAUTHENTICATE) pCmdPtr;
// set AP MAC address
NdisMoveMemory(pDeAuthenticate->MacAddr,Adapter->CurrentBSSID, MRVDRV_ETH_ADDR_LEN);
// Reason code 3 = Station is leaving
pDeAuthenticate->ReasonCode = 3;
#ifdef AvoidOidSetScan
if(Adapter->bAvoidScanAfterConnectedforMSecs == TRUE)
{
NdisMCancelTimer(&Adapter->MrvD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -