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

📄 oidproc.c

📁 marvell wifi driver CF-8385PN-NDIS-ARM4-WINCE50-5.24.17.p5-27.p11.src.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
				        	NULL,    
				        	NULL);  
        	}

        	if ((Adapter->bIsReconnectEnable == TRUE) || 
		    (Adapter->bIsBeaconLoseEvent == TRUE) || 
		    (Adapter->bIsDeauthenticaticationEvent == TRUE)
#ifdef ACTIVE_ROAMING
		    ||(Adapter->bIsActiveRoaming== TRUE)
#endif		    
		    )
		{
                     Adapter->EncryptionStatus = EncryptionStatus;
		}
                else
                {
			if ((EncryptionStatus == Ndis802_11Encryption2Enabled) ||
			    (EncryptionStatus == Ndis802_11Encryption2KeyAbsent))
			{
                    Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
                }
			else
			{
				Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
			}
              }
        	
              Status = NDIS_STATUS_SUCCESS;

		break;

    	case Ndis802_11Encryption1Enabled:
    	case Ndis802_11Encryption1KeyAbsent:

        	Adapter->WPAEnabled = FALSE;

        	// disable RSN if previous status is 2 or 3
        	if ( (PrevEncryptionStatus == Ndis802_11Encryption2Enabled)     ||
             	     (PrevEncryptionStatus == Ndis802_11Encryption3Enabled)     ||
             	     (PrevEncryptionStatus == Ndis802_11Encryption2KeyAbsent) ||
             	     (PrevEncryptionStatus == Ndis802_11Encryption3KeyAbsent))
        	{
                		Status = PrepareAndSendCommand(
	                     			   	Adapter,
			       	     			HostCmd_CMD_802_11_ENABLE_RSN,
			            				HostCmd_ACT_SET,
	                        				HostCmd_OPTION_USE_INT,
	                        				Oid,
	                        				HostCmd_PENDING_ON_NONE,
	                        				0,
	                        				FALSE,
	                        				NULL,
	                        				NULL,
	                        				NULL,
	                        				NULL);
              }

        	// Enable WEP
		Adapter->usMacControlRecord |= 
			               	(HostCmd_ACT_MAC_RX_ON | 
				         	HostCmd_ACT_MAC_TX_ON |
					  	HostCmd_ACT_MAC_WEP_ENABLE |
				  	  	HostCmd_ACT_MAC_INT_ENABLE);

		//BugFix
              if(Adapter->LastAddedWEPKey.KeyLength==13)
		{
                    //WEP 128bit
                    Adapter->usMacControlRecord = Adapter->usMacControlRecord|HostCmd_ACT_MAC_WEP_TYPE;
                    DBGPRINT(DBG_OID,("MrvDrvSetEncryptionStatus: SetCMD 0x28 WEP 128bit\n"));
		}
              else
		{  
                    //WEP 64bit
                    Adapter->usMacControlRecord = Adapter->usMacControlRecord&(~HostCmd_ACT_MAC_WEP_TYPE);
                    DBGPRINT(DBG_OID,("MrvDrvSetEncryptionStatus: SetCMD 0x28 WEP 64bit\n"));
              }

		Status = PrepareAndSendCommand(
						Adapter,
						HostCmd_CMD_MAC_CONTROL,
						Adapter->usMacControlRecord,
						HostCmd_OPTION_USE_INT,
						Oid,
						HostCmd_PENDING_ON_NONE, 
						0,
						FALSE,
						NULL,
						NULL,    
				        	NULL,    
				        	NULL);  
		
		if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES) 
        	{			
			 Status = NDIS_STATUS_FAILURE;
		}
		else 
        	{
			Status = NDIS_STATUS_SUCCESS;
		}

		Adapter->EncryptionStatus = Ndis802_11Encryption1Enabled;
        	Adapter->WEPStatus = Ndis802_11WEPEnabled;
        
		break;

	case Ndis802_11EncryptionDisabled:

        	Adapter->WPAEnabled = FALSE;

        	switch ( Adapter->EncryptionStatus )
        	{
        	case Ndis802_11Encryption3Enabled:
        	case Ndis802_11Encryption2Enabled:
        	case Ndis802_11Encryption2KeyAbsent:
        	case Ndis802_11Encryption3KeyAbsent:

            		// disable TKIP/WPA
            		Status = PrepareAndSendCommand(
					            	Adapter,
			            			HostCmd_CMD_802_11_ENABLE_RSN,
			            			HostCmd_ACT_SET,
			            			HostCmd_OPTION_USE_INT,
			            			Oid,
			            			HostCmd_PENDING_ON_NONE, 
			            			0,
			            			FALSE,
			            			NULL,
			            			NULL,    
				        		NULL,    
				        		NULL);  

            		if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES) 
            		{			
				Status = NDIS_STATUS_FAILURE;
		    	}
		    	else 
            		{
				Status = NDIS_STATUS_SUCCESS;
		    	}

            		break;

        	case Ndis802_11Encryption1Enabled:
        	case Ndis802_11Encryption1KeyAbsent:

            		// disable WEP
			Adapter->usMacControlRecord |=
                     		              (HostCmd_ACT_MAC_RX_ON | 
					   		 HostCmd_ACT_MAC_TX_ON |
					   		 HostCmd_ACT_MAC_INT_ENABLE);
			Adapter->usMacControlRecord &=
                                      		~HostCmd_STATUS_MAC_WEP_ENABLE;	

			Status = PrepareAndSendCommand(
					        	 Adapter,
				       	 	 HostCmd_CMD_MAC_CONTROL,
				        		 Adapter->usMacControlRecord,
				       		 HostCmd_OPTION_USE_INT,
				        		 Oid,
				        		 HostCmd_PENDING_ON_NONE, 
				        		 0,
				        		 FALSE,
				        		 NULL,
				        		 NULL,    
				        		 NULL,    
				        		 NULL);  
			
			if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES) 
            		{				
				Status = NDIS_STATUS_FAILURE;
			}
			else 
            		{				
				Status = NDIS_STATUS_SUCCESS;
			}

            		break;

        	default:

			// do nothing
            		Status = NDIS_STATUS_SUCCESS;
           		break;
        	} 
        	Adapter->EncryptionStatus = Ndis802_11EncryptionDisabled;
        	Adapter->WEPStatus = Ndis802_11WEPDisabled;

		break;

	default:

		DBGPRINT(DBG_OID | DBG_WPA, ("Not supported EncryptionStatus: %d\n", 
                                        EncryptionStatus));
		Status = NDIS_STATUS_INVALID_DATA;
	}
	
	DBGPRINT(DBG_OID , (" --- MrvDrvSetEncryptionStatus() \n"));

	return Status;

}

#endif // #ifdef WPA


/******************************************************************************
 *
 *  Name: MrvDrvQueryInformation()
 *
 *  Description: NDIS miniport get information handler
 *
 *  Conditions for Use: NDIS wrapper will call this handler to get device information
 *
 *  Arguments:
 *	    IN NDIS_HANDLE MiniportAdapterContext
 *	    IN NDIS_OID Oid
 *	    IN PVOID InformationBuffer
 *	    IN ULONG InformationBufferLength
 *	    OUT PULONG BytesWritten
 *	    OUT PULONG BytesNeeded
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_PENDING
 *      NDIS_STATUS_BUFFER_TOO_SHORT
 *      NDIS_STATUS_NOT_SUPPORTED
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
MrvDrvQueryInformation(
	IN NDIS_HANDLE MiniportAdapterContext,
	IN NDIS_OID Oid,
	IN PVOID InformationBuffer,
	IN ULONG InformationBufferLength,
	OUT PULONG BytesWritten,
	OUT PULONG BytesNeeded
	)
{
    	// String describing our adapter
    	char VendorDescriptor[] = VENDORDESCRIPTOR;

    	PMRVDRV_ADAPTER Adapter;

    	// UCHAR VendorId[4];

	ULONGLONG GenericULONGLONG;
    	ULONG GenericULONG;
	LONG GenericLONG;
    	USHORT GenericUSHORT;
    	UCHAR GenericArray[6];

    	NDIS_STATUS Status;

    	NDIS_PNP_CAPABILITIES PMCap;
	NDIS_DEVICE_POWER_STATE NewPowerState;
	// NDIS_PM_PACKET_PATTERN PMPattern;
	PNDIS_802_11_STATISTICS pn11Stat;
	// PUCHAR PUchar;

    	PVOID MoveSource;
   	ULONG MoveBytes;
	//ULONG ulRequiredSize;

    	// ULONG ulRcvOK;

//RETAILMSG(1, (TEXT("Query OID = %x  \r\n"), Oid));

    	// Common variables for pointing to result of query
   	MoveSource = (PVOID) (&GenericULONG);
    	MoveBytes = sizeof(GenericULONG);

	// DBGPRINT(DBG_OID,("REQUEST - Enter MrvDrvQueryInformation - 0x%x \n", Oid));

	Adapter = (PMRVDRV_ADAPTER)(MiniportAdapterContext);

	if (Adapter->bIsFreeNow == TRUE)
		return NDIS_STATUS_SUCCESS;

#ifdef DEEP_SLEEP 
    	// In Deep Sleep Mode no packet can be sent out 
    	if (Adapter->IsDeepSleepRequired 
|| Adapter->IsDeepSleep)
    	{ 
    		DBGPRINT(DBG_OID | DBG_ALLEN ,("Set OID in Adapter->IsDeepSleepRequired == TRUE\n"));
    		if (Oid != OID_MRVL_DEEP_SLEEP)
    		{     
    			DBGPRINT(DBG_OID | DBG_ALLEN ,("Not OID_MRVL_DEEP_SLEEP OID\n"));
    			return NDIS_STATUS_FAILURE;
    		}		
    	}
#endif


    	// Check device removal status
    	if ( Adapter->SurpriseRemoved == TRUE )
	{
       	return NDIS_STATUS_FAILURE;
    	}
 
    	// Initialize the result variables
    	*BytesWritten = 0;
    	*BytesNeeded = 0;
    	Status = NDIS_STATUS_SUCCESS;

#ifdef UNDER_CE
    	if ( Adapter->CurPowerState == NdisDeviceStateD3 )
    	{
       	// card powered off
        	return NDIS_STATUS_SUCCESS;
    	}
#endif 

    	// Switch on request type
    	switch (Oid)
    	{

#ifdef BG_SCAN
        case OID_MRVL_BG_SCAN_QUERY:
		{
			POID_MRVL_DS_BG_SCAN_CONFIG pOidBG;
			pOidBG = (POID_MRVL_DS_BG_SCAN_CONFIG)Adapter->BgScanCfg;

			if (Adapter->bBgScanEnabled)
				pOidBG->Enable = 1;
			else
				pOidBG->Enable = 0;

			MoveSource = (PVOID) (Adapter->BgScanCfg);
        		MoveBytes = Adapter->nBgScanCfg;
        	}		
            break;
#endif 

//tt ++ v5 firmware
	case OID_MRVL_LED_CONTROL:
		TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_LED_CONTROL, OID_MRVL_LED_CONTROL, 
			sizeof(OID_MRVL_DS_LED_CONTROL), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
		TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_LED_CONTROL, NumLed, SIZEOF_OID_DS_LEADING );
		break;
		
#ifdef CAL_DATA
	case OID_MRVL_CAL_DATA:
		TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_CAL_DATA, OID_MRVL_CAL_DATA, 
			sizeof(OID_MRVL_DS_CAL_DATA), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
		TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_CAL_DATA, Reserved1[0], SIZEOF_OID_DS_LEADING );
		break;
	case OID_MRVL_CAL_DATA_EXT:
		TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_CAL_DATA_EXT, OID_MRVL_CAL_DATA_EXT, 
			sizeof(OID_MRVL_DS_CAL_DATA_EXT), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
		TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_CAL_DATA_EXT, Revision, SIZEOF_OID_DS_LEADING );
		break;
#endif //CAL_DATA

	case OID_MRVL_PWR_CFG:
		TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_PWR_CFG, OID_MRVL_PWR_CFG, 
			sizeof(OID_MRVL_DS_PWR_CFG), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
		TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_PWR_CFG, Enable, SIZEOF_OID_DS_LEADING );
		break;
	case OID_MRVL_TPC_CFG:
		TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_TPC_CFG, OID_MRVL_TPC_CFG, 
			sizeof(OID_MRVL_DS_TPC_CFG), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
		TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_TPC_CFG, Enable, SIZEOF_OID_DS_LEADING );
		break;
	case OID_MRVL_RATE_ADAPT_RATESET:
		TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_RATE_ADAPT_RATESET, OID_MRVL_RATE_ADAPT_RATESET, 
			sizeof(OID_MRVL_DS_RATE_ADAPT_RATESET), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
		TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_RATE_ADAPT_RATESET, EnableHwAuto, SIZEOF_OID_DS_LEADING );
		break;
//tt --
		
#ifdef PMKID_CACHE_CAP
	   case OID_802_11_PMKID:
		{
			PNDIS_802_11_PMKID	pPmkid = (PNDIS_802_11_PMKID) InformationBuffer;

			DBGPRINT( DBG_OID|DBG_MACEVENT, ("QUERY - OID_802_11_PMKID\n") );

			if ( InformationBufferLength < sizeof(NDIS_802_11_PMKID) )
			{
				DBGPRINT(DBG_OID|DBG_MACEVENT, ("    Buffer too small, return.\n") );
				*BytesNeeded = sizeof(NDIS_802_11_PMKID);
				return NDIS_STATUS_INVALID_LENGTH;
			}

			pPmkid->Length = sizeof(NDIS_802_11_PMKID);
			pPmkid->BSSIDInfoCount = 0;

			return NDIS_STATUS_SUCCESS;
		}
		break;
		
	  case OID_802_11_CAPABILITY:
		{
			PNDIS_802_11_CAPABILITY		pCap = (PNDIS_802_11_CAPABILITY) InformationBuffer;
			ULONG	nNeedLen;
			const ULONG	nNumOfModes = 12;

			DBGPRINT( DBG_OID|DBG_MACEVENT, ("QUERY - OID_802_11_CAPABILITY\n") );

			nNeedLen = sizeof(NDIS_802_11_CAPABILITY) + 
						((nNumOfModes-1) * sizeof(NDIS_802_11_AUTHENTICATION_ENCRYPTION) );

			if (InformationBufferLength < nNeedLen)
			{
				DBGPRINT(DBG_OID|DBG_MACEVENT, ("    Buffer too small, return.\n") );
				*BytesNeeded = nNeedLen;
				return NDIS_STATUS_INVALID_LENGTH;
			}

			pCap->Length = nNeedLen;
			pCap->Version = 2;
			pCap->NoOfPmkid = MAX_PMKID_CACHE;
			pCap->NoOfAuthEncryptPairsSupported = nNumOfModes;

			DBGPRINT(DBG_OID|DBG_MACEVENT, ("    Copy data... [Len=%d, Pmkid=%d, Modes=%d]\n",
						pCap->Length, pCap->NoOfPmkid, pCap->NoOfAuthEncryptPairsSupported ) );

			pCap->AuthEncryptSupported[0].AuthMode = Ndis802_11AuthModeOpen;
			pCap->AuthEncryptSupported[0].EncryptStatus = Ndis802_11EncryptionDisabled;

			pCap->AuthEncryptSupported[1].AuthMode = Ndis802_11AuthModeOpen;

⌨️ 快捷键说明

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