⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwacproc.c

📁 marvell wifi driver CF-8385PN-NDIS-ARM4-WINCE50-5.24.17.p5-27.p11.src.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
			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 + -