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

📄 hwacproc.c

📁 marvell wifi driver CF-8385PN-NDIS-ARM4-WINCE50-5.24.17.p5-27.p11.src.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
		    		MRVDRV_ETH_ADDR_LEN);
	}
	
	NdisMoveMemory(
			(PVOID)TempBuf,
			(PVOID)pHWSpec->PermanentAddr,
			4);
		
#ifdef CF_DRIVER
		TempBuf[3] = MRVL_8100_COMPACTFLASH_VER_ID;
#else
		TempBuf[3] = MRVL_8100_PCI_VER_ID;
#endif
	
	NdisMoveMemory(
			(PVOID)&Adapter->VendorID,
			(PVOID)TempBuf,
			4);

    	Adapter->FWCapInfo = pHWSpec->fwCapInfo;

    	DBGPRINT(DBG_CMDRESP, ("FW Cap Info = 0x%x\n", Adapter->FWCapInfo));

	SetEvent( Adapter->hWaitForGetHwSpecEvent);		

}	

/******************************************************************************
 *
 *  Name: CopyBSSIDInfo()
 *
 *  Description: Copy BSSID Info
 *
 *  Arguments:  PCONDOR_ADAPTER Adapter
 *    			
 *
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
CopyBSSIDInfo(
	PMRVDRV_ADAPTER Adapter
	)
{
    	PNDIS_WLAN_BSSID_EX pBSSIDListSrc;
    	PMRV_BSSID_IE_LIST   pIESrc;

    	pBSSIDListSrc = Adapter->PSBSSIDList;
    	pIESrc = Adapter->PSIEBuffer;
    
    	NdisMoveMemory( 	&Adapter->CurrentBSSIDDesciptor,
       				&pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex],
              	      		sizeof(NDIS_WLAN_BSSID_EX));

    	NdisMoveMemory( 	&Adapter->CurrentBSSIDIEBuffer,
       	             		&pIESrc[Adapter->ulCurrentBSSIDIndex],
              	      		sizeof(MRV_BSSID_IE_LIST));

    		NdisMoveMemory( 	&Adapter->CurrentSSID,
       			      		&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].Ssid),
        			      		sizeof(NDIS_802_11_SSID));
		
	// Set the new BSSID (AP's MAC address) to current BSSID
	NdisMoveMemory( 	Adapter->CurrentBSSID,
				    	&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].MacAddress), 
				    	MRVDRV_ETH_ADDR_LEN);
		
	// Make a copy of current BSSID descriptor
	NdisMoveMemory( 	&(Adapter->CurrentBssDesciptor), 
					&(Adapter->PSBssDescList[Adapter->ulCurrentBSSIDIndex]), 
					sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));

	// Set the new configuration to the current config
	NdisMoveMemory(	&Adapter->CurrentConfiguration, 
					&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].Configuration),
					sizeof(NDIS_802_11_CONFIGURATION));

#ifdef ACTIVE_ROAMING

	if (Adapter->CurrentConfiguration .DSConfig > 5000)
     	{
       	Adapter->connected_channel= (UCHAR)((Adapter->CurrentConfiguration.DSConfig - 5000)/5);
	 	Adapter->connected_band  = MRVDRV_802_11_BAND_A;	 
     	}
     	else if (Adapter->CurrentConfiguration .DSConfig > 2407)
    	{
		Adapter->connected_channel  = (UCHAR)((Adapter->CurrentConfiguration.DSConfig  - 2407)/5);
#ifdef MRV_CHIP_8381
	      Adapter->connected_band  = MRVDRV_802_11_BAND_B;
#else
             Adapter->connected_band  = MRVDRV_802_11_BAND_BG; 
#endif
     	}
		
#endif  

}


/******************************************************************************
 *
 *  Name: HandleHostCmdFailure()
 *
 *  Description: Handle command failures
 *
 *  Arguments:	USHORT Ret
 *				PCONDOR_ADAPTER Adapter
 *    			PHostCmd_DS_GEN pRetPtr
 *
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
HandleHostCmdFailure(
	USHORT Ret, 
	PMRVDRV_ADAPTER Adapter,
	PHostCmd_DS_GEN pRetPtr
	)
{

       DBGPRINT(DBG_CMDRESP,("HWAC - command 0x%x Failed\n", Ret));

       // In some cases, we need to report hardware status
	switch( Ret )
	{
		case HostCmd_RET_HW_SPEC_INFO:
            		break;

		case HostCmd_RET_802_11_RESET:

			DBGPRINT(DBG_CMDRESP,("HWAC - Reset command Failed\n"));
			
			Adapter->HardwareStatus = NdisHardwareStatusNotReady;
			break;

		case HostCmd_RET_802_11_STATUS_INFO:
			Adapter->HardwareStatus = NdisHardwareStatusNotReady;
			break;

		case HostCmd_RET_802_11_SCAN:

			Adapter->bIsAssociationBlockedByScan = FALSE;	
                     Adapter->bIsScanInProgress = FALSE;
					 
			if (Adapter->PendingGetBssidOid.bIsPendingOID)
		       {
				Adapter->PendingGetBssidOid.bIsPendingOID = FALSE;
	       		*(Adapter->PendingGetBssidOid.BytesReadWrite) = 0;	

		       	NdisMQueryInformationComplete(
						Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_SUCCESS);		
	              }
			break;
			
	       case HostCmd_RET_802_11_ASSOCIATE:
	       case HostCmd_RET_802_11_REASSOCIATE:
	       case HostCmd_RET_802_11_AD_HOC_JOIN:
	       case HostCmd_RET_802_11_AD_HOC_START:

			Adapter->bIsAssociateInProgress = FALSE;
			
                     if (Adapter->PendingSetSssidOid.bIsPendingOID)
		       {
				Adapter->PendingSetSssidOid.bIsPendingOID = FALSE;
	       		*(Adapter->PendingSetSssidOid.BytesReadWrite) = 0;	

				NdisMSetInformationComplete(
				   	      Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_SUCCESS);		
                     }
			break;
	}

	// Return FAILURE for some pending OIDs
	if( Adapter->CurCmd->PendingInfo == HostCmd_PENDING_ON_CMD )
	{ 	
		switch(Ret)
		{
			case HostCmd_RET_MAC_REG_ACCESS:
			case HostCmd_RET_BBP_REG_ACCESS:
			case HostCmd_RET_RF_REG_ACCESS:
			case HostCmd_RET_802_11_RF_CHANNEL:
			case HostCmd_RET_802_11_RADIO_CONTROL:
			
				if( *((USHORT *)pRetPtr + 4)==HostCmd_ACT_GEN_READ) 
				{		
					NdisMQueryInformationComplete(
							Adapter->MrvDrvAdapterHdl,
							NDIS_STATUS_NOT_ACCEPTED);
				}
				else
				{		
					NdisMSetInformationComplete(
						Adapter->MrvDrvAdapterHdl,
						NDIS_STATUS_NOT_ACCEPTED);
				}				
				break;					
				 
			default:
				break;
		} 	
	}
	else if (  Adapter->CurCmd->PendingInfo == HostCmd_PENDING_ON_GET_OID ) 
	{
		if(pRetPtr->Result == HostCmd_RESULT_NOT_SUPPORT)
		{	
			NdisMQueryInformationComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_NOT_SUPPORTED);				
		}
		else if(pRetPtr->Result == HostCmd_RESULT_ERROR)
		{
			NdisMQueryInformationComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_NOT_ACCEPTED);
		}				
        	else
        	{
            		// generic error
            		NdisMQueryInformationComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_FAILURE);
       	 }

 	}
    	else if ( Adapter->CurCmd->PendingInfo == HostCmd_PENDING_ON_SET_OID )
    	{
       	if (pRetPtr->Result == HostCmd_RESULT_NOT_SUPPORT)
        	{			
			NdisMSetInformationComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_NOT_SUPPORTED);				
		}
		else if (pRetPtr->Result == HostCmd_RESULT_ERROR)
        	{
			NdisMSetInformationComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_NOT_ACCEPTED);
		}
        	else
        	{
            		// generic error
            		NdisMSetInformationComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_FAILURE);
        	}
    	}
	ReturnCmdNode(Adapter, Adapter->CurCmd); 
	Adapter->CurCmd = NULL;
    	//DBGPRINT(DBG_CMDRESP, ("CurCmd set to NULL at %s line %d\n", __FILE__, __LINE__));
	
    	GetCmdFromQueueToExecute (Adapter);
	
	return NDIS_STATUS_FAILURE;
}

/******************************************************************************
 *
 *  Name: MrvDrvAddCurrentSSID()
 *
 *  Description: Add current SSID to the scan list if it is not on the list
 *
 *  Arguments:  Adapter             Adapter structure
 *              bSetActiveScanSSID  specific scan or not
 *    			
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
MrvDrvAddCurrentSSID(PMRVDRV_ADAPTER Adapter,
                     BOOLEAN         bSetActiveScanSSID)
{
	ULONG i;

    	// try to find the current SSID in the new scan list
    	for (i=0; i<Adapter->ulPSNumOfBSSIDs; i++)
    	{
       	if ((NdisEqualMemory(Adapter->PSBSSIDList[i].Ssid.Ssid, 
              		                  Adapter->CurrentSSID.Ssid, 
                            		    Adapter->CurrentSSID.SsidLength)) &&
		    (NdisEqualMemory(Adapter->CurrentBSSID, 
                            		   &(Adapter->PSBSSIDList[i].MacAddress), 
                            		   MRVDRV_ETH_ADDR_LEN)))
              { 
              	break;
        	}
    	}

    	// if we found matching SSID, update the index
    	if (i < Adapter->ulPSNumOfBSSIDs)
    	{
		// Set the attempted BSSID Index to current
		Adapter->ulCurrentBSSIDIndex = i;

		// Set the new BSSID (AP's MAC address) to current BSSID
		NdisMoveMemory( Adapter->CurrentBSSID,
				             &(Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].MacAddress), 
				             MRVDRV_ETH_ADDR_LEN);
	
        	// Make a copy of current BSSID descriptor
		NdisMoveMemory( &(Adapter->CurrentBSSIDDesciptor), 
				             &(Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex]),
                        		      sizeof(NDIS_WLAN_BSSID_EX));

        	NdisMoveMemory( &(Adapter->CurrentBSSIDIEBuffer),
                        		      &(Adapter->PSIEBuffer[Adapter->ulCurrentBSSIDIndex]),
                        		      sizeof(MRV_BSSID_IE_LIST));
		
		NdisMoveMemory( &(Adapter->CurrentBSSIDDesciptor), 
				             &(Adapter->PSBssDescList[Adapter->ulCurrentBSSIDIndex]),
                        	 	      sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));
		
						
		// Set the new configuration to the current config
		NdisMoveMemory( &Adapter->CurrentConfiguration, 
				 	      &(Adapter->PSBSSIDList[Adapter->ulCurrentBSSIDIndex].Configuration),
					      sizeof(NDIS_802_11_CONFIGURATION));
    	}
    	// if the current associated SSID is not contained in the list, append it
    	else 
    	{
       	///if(bSetActiveScanSSID != TRUE)
        	{
            		DBGPRINT(DBG_CMDRESP,("HWAC - Append current SSID to SCAN list\n"));
            
            		if ( i < MRVDRV_MAX_BSSID_LIST )
            		{
                		Adapter->ulCurrentBSSIDIndex = i;
                		Adapter->ulPSNumOfBSSIDs++;
                
                		NdisMoveMemory( &(Adapter->PSBSSIDList[i]), 
                    					      &(Adapter->CurrentBSSIDDesciptor),      
                    					      sizeof(NDIS_WLAN_BSSID_EX));
                
                		NdisMoveMemory( &(Adapter->PSIEBuffer[i]),
                                			      &(Adapter->CurrentBSSIDIEBuffer),
                                			      sizeof(MRV_BSSID_IE_LIST));
				
				NdisMoveMemory( &Adapter->PSBssDescList[i], 
					           	      &(Adapter->CurrentBssDesciptor), 
                               			      sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));	
            		}
        	}
    	}
}

/******************************************************************************
 *
 *  Name: HandleScanResponse()
 *
 *  Description: Handle scan results
 *
 *  Arguments:	PHostCmd_DS_802_11_SCAN_RSP pRetPtr
 *				PMRVDRV_ADAPTER Adapter
 *    			
 *
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
HandleScanResponse(
	PHostCmd_DS_802_11_SCAN_RSP pScanResponse,
	PMRVDRV_ADAPTER Adapter
    )
{
	ULONG i,j;
	USHORT Flag = 0;
	ULONG TempV = 0,k;
	NDIS_STATUS Status, ndStat;
    	BOOLEAN bISAssociationBlockedByScan;
    	BOOLEAN bSetActiveScanSSID = Adapter->SetActiveScanSSID;

  	if (Adapter->CurCmd->Pad[1] & MRVDRV_ES_ASSOCIATIONBLOCKED)
    		bISAssociationBlockedByScan = TRUE;
    	else
    		bISAssociationBlockedByScan = FALSE;

	if (Adapter->CurCmd->Pad[0] & MRVDRV_ES_NOTSPECIFICSCAN)
       	bSetActiveScanSSID = FALSE;
    	else
       	bSetActiveScanSSID = TRUE;    

	DBGPRINT(DBG_SCAN,("-----------------------   HostCmd_RET_802_11_SCAN ------------------------\n" ));
	DBGPRINT(DBG_SCAN,("Command %x\n",(ULONG)pScanResponse->Command));
	DBGPRINT(DBG_SCAN,("Size %d  SeqNum %d  Result %d \n",
					  (ULONG)pScanResponse -> Size, 
					  (ULONG)pScanResponse -> SeqNum,
					  (ULONG)pScanResponse -> Result
					  ));
	//DBGPRINT(DBG_SCAN ,("BSSID: %02x:%02x:%02x:%02x:%02x:%02x\n",
	//				  (ULONG)pScanResponse -> BSSID[0],
	//				  (ULONG)pScanResponse -> BSSID[1],
	//				  (ULONG)pScanResponse -> BSSID[2],
	//				  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -