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

📄 initproc.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 5 页
字号:
       Adapter->MrvDrvWrapperConfigurationContext = WrapperConfigurationContext;
       
#ifdef MRVL_WINXP_NDIS51
       NdisMSetAttributesEx(
          	      		Adapter->MrvDrvAdapterHdl,
        	      		(NDIS_HANDLE) Adapter,
        	      		MRVL_CHECK_FOR_HANG_TIME,
				(ULONG)NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK,
        	      		NdisInterfacePcMcia); 
#else
       NdisMSetAttributesEx(
        	      		Adapter->MrvDrvAdapterHdl,
        	      		(NDIS_HANDLE) Adapter,
        	      		6,  
		      		0,
        	      		NdisInterfacePcMcia); 
#endif

	/// Read configuration from registry 
       NdisOpenConfiguration(
	 			&Status,
        	       	&RegHdl,
        	       	WrapperConfigurationContext);
       if (Status != NDIS_STATUS_SUCCESS)
	{	
		DBGPRINT(DBG_LOAD ,(" NdisOpenConfiguration error\n"));
		FreeAdapter(Adapter);   
		NdisTerminateWrapper(WrapperConfigurationContext, NULL);  
		gNdisWrapperHandle=NULL;
           	return NDIS_STATUS_FAILURE;
       }   
	Status = ReadRegistryInfo(Adapter, RegHdl);
	if (Status != NDIS_STATUS_SUCCESS )
	{
		DBGPRINT(DBG_LOAD ,(" ReadRegistryInfo error\n"));
		FreeAdapter(Adapter);   
		NdisTerminateWrapper(WrapperConfigurationContext, NULL);  
		gNdisWrapperHandle=NULL;
           	return NDIS_STATUS_FAILURE;
	}
        NdisCloseConfiguration(RegHdl);

	/// Initialize sync object
	InitSyncObjects(Adapter);

	/// Set up NIC HW (include firmwware download) 
	Status = SetUpStationHW(Adapter, WrapperConfigurationContext );
       if( Status != NDIS_STATUS_SUCCESS )
       {
       	DBGPRINT(DBG_LOAD ,(" SetUpStationHW error\n"));
		FreeAdapter(Adapter);   
		NdisTerminateWrapper(WrapperConfigurationContext, NULL);  
		gNdisWrapperHandle=NULL;
		return NDIS_STATUS_FAILURE;
       }
	   
	{
		DWORD		dwWaitStatus;
		dwWaitStatus = WaitForSingleObject( Adapter->hWaitForGetHwSpecEvent, 10000 );
	}
	   
	/// Power-Save
	if ( Adapter->PSMode != 0)
	{
 		Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
	}
	DBGPRINT(DBG_NEWPS, ("Adapter PSMODE = %d\n", Adapter->PSMode));
	
       /// Other paramenters
	InitializeWirelessConfig(Adapter);

       /// Add the FW version and Driver Version to Registry 	
#ifdef UNDER_CE
      	{   
      		REG_VALUE_DESCR Vals[2];

         	Vals[0].val_data = (PBYTE)TEXT(MRVDRV_DRIVER_BUILD_VERSION);
         	Vals[0].val_name = TEXT("DriverVersion");
         	Vals[0].val_type = REG_SZ;
         	Vals[1].val_name = NULL;

#ifdef MRV_CHIP_8381P
         	AddKeyValues (TEXT("Comm\\CF8381P"), Vals);
#endif 
#ifdef MRV_CHIP_8381PN
         	AddKeyValues (TEXT("Comm\\CF8381PN"), Vals);
#endif 
#ifdef MRV_CHIP_8385PN
         	AddKeyValues (TEXT("Comm\\CF8385PN"), Vals);
#endif 
#ifdef MRV_CHIP_8385H
         	AddKeyValues (TEXT("Comm\\CF8385H"), Vals);
#endif 
#ifdef MRV_CHIP_8305
         	AddKeyValues (TEXT("Comm\\EAGLEND5"), Vals);
#endif 
	}
#endif 

    	/// indicate to OS that the network is not connected after 1 second
    	/// Maay be we don't need the timer : FIX Later
    	//NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 500);
    	//Adapter->DisconnectTimerSet = TRUE;
       
 	DBGPRINT(DBG_LOAD ,("<<< INIT - Enter MrvDrvInitialize \n"));

    	return NDIS_STATUS_SUCCESS; 
}

/******************************************************************************
 *
 *  Name: MrvDrvAllocateComplete()
 *
 *  Description: 
 *      NDIS miniport memory allocation complete event handler
 *
 *  Conditions for Use:
 *      NDIS wrapper will call this function when an async memory allocation is completed.
 *
 *  Arguments:   
 *    
 *	    NDIS_HANDLE MiniportAdapterContext
 *	    IN PVOID VirtualAddress
 *	    IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress
 *	    IN ULONG Length
 *	    IN PVOID Context
 *
 *  Return Value: None
 * 
 *  Notes: This routine is not implemented in this version of driver.
 *
 *****************************************************************************/
VOID
MrvDrvAllocateComplete(
	NDIS_HANDLE MiniportAdapterContext,
	IN PVOID VirtualAddress,
	IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
	IN ULONG Length,
	IN PVOID Context
	)
{
	DBGPRINT(DBG_LOAD,("INIT - Enter MrvDrvAllocateComplete \n"));
	return;
}

/*
===============================================================================
                           CODED PRIVATE PROCEDURES
===============================================================================
*/

PMRVDRV_ADAPTER AllocateAdapter()
{
	NDIS_STATUS 	    Status;
	PMRVDRV_ADAPTER   Adapter;

       DBGPRINT(DBG_LOAD, (">>> AllocateAdapter()  \n"));

       // 
	/// Allocate adapter handler
	//
	Status = MRVDRV_ALLOC_MEM(&Adapter, sizeof(MRVDRV_ADAPTER));
	
	if ( Status != NDIS_STATUS_SUCCESS )
       {
           	DBGPRINT(DBG_ERROR | DBG_LOAD, ("Unable to allocate adapter memory, "
              	                                                   "Status = 0x%x\n", Status));
		goto err1;
       }
	NdisZeroMemory(Adapter, sizeof(MRVDRV_ADAPTER));
	DBGPRINT(DBG_LOAD, ("MRVDRV_ALLOC_MEM ()  success \n"));
	
	// Assign default adapter object value and allocate buffer
	InitAdapterObject(Adapter);

	//
	/// Allocate spinlock
	//
       // command
	NdisAllocateSpinLock(&Adapter->FreeQSpinLock); 
	NdisAllocateSpinLock(&Adapter->PriorityQSpinLock);
	// rx
#ifdef USE_RX_QUEUE		
       NdisAllocateSpinLock(&Adapter->RxQueueSpinLock);
#endif
	NdisAllocateSpinLock(&Adapter->RxSpinLock); 
       // tx
       NdisAllocateSpinLock(&Adapter->TxSpinLock); 
       NdisAllocateSpinLock(&Adapter->lCFInterfaceLock);

	//
	/// Allocate Tx, Rx, Command data structure
	//
	Status = AllocateAdapterBuffer(Adapter);

	if ( Status != NDIS_STATUS_SUCCESS )
	{	DBGPRINT(DBG_LOAD, ("AllocateAdapterBuffer ()  error \n"));
		goto err2;
	}	

	DBGPRINT(DBG_LOAD, ("<<<< AllocateAdapter() success \n"));
	
	return Adapter;

err2:
	NdisFreeSpinLock(&Adapter->FreeQSpinLock);
	NdisFreeSpinLock(&Adapter->PriorityQSpinLock);	
#ifdef USE_RX_QUEUE		
	NdisFreeSpinLock(&Adapter->RxQueueSpinLock);
#endif
	NdisFreeSpinLock(&Adapter->RxSpinLock);
	NdisFreeSpinLock(&Adapter->TxSpinLock);	
    	NdisFreeSpinLock(&Adapter->lCFInterfaceLock);
	
	/// Free the adapter object 
    	MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));

err1:
	DBGPRINT(DBG_LOAD, ("AllocateAdapter() failed \n"));

       return NULL;
}

/******************************************************************************
 *
 *  Name: InitAdapterObject()
 *
 *  Description: Device object initialization function
 *
 *  Arguments:  
 *      PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value: 
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_FAILURE
 * 
 *  Notes:
 *
 *****************************************************************************/
VOID InitAdapterObject(
    IN PMRVDRV_ADAPTER Adapter
	)
{
        USHORT i;

        // Device information
        Adapter->VendorID  				= 0xffffffff; // Will be filled with real data

#ifdef MRVL_MIC_ERROR
    Adapter->bMicErrorIsHappened = FALSE;
    Adapter->ulMicErrorStartTime = 0;
#endif

#ifdef PMKID_CACHE_CAP
        ResetPmkidCache( Adapter );
	 Adapter->RSNStatusIndicated.StatusType =  Ndis802_11StatusTypeMax;
#endif
        // NDIS Timer variables
        Adapter->TimerInterval  			= MRVDRV_DEFAULT_TIMER_INTERVAL;
        Adapter->isCommandTimerExpired  = FALSE;
 
        // Operation characteristics
        Adapter->CurrentLookAhead  		= (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE - MRVDRV_ETH_HEADER_SIZE;
        Adapter->ProtocolOptions 			= 0;
        Adapter->MACOptions 			= (ULONG)NDIS_MAC_OPTION_NO_LOOPBACK;
        Adapter->MediaConnectStatus  	= NdisMediaStateDisconnected;
        Adapter->LinkSpeed 				= MRVDRV_LINK_SPEED_1mbps;
        Adapter->MediaInUse 			= NdisMedium802_3;
        NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);

        // Status variables
        Adapter->HardwareStatus 			= NdisHardwareStatusInitializing;

        // 802.11 specific
        Adapter->WEPStatus 				= Ndis802_11WEPDisabled;
        Adapter->AuthenticationMode 		= Ndis802_11AuthModeOpen;
        Adapter->InfrastructureMode 		= Ndis802_11Infrastructure;
        Adapter->PrivacyFilter 			= Ndis802_11PrivFilterAcceptAll;
        Adapter->ulNumOfBSSIDs         	= 0;
        Adapter->ulCurrentBSSIDIndex   	= 0;
        Adapter->ulAttemptedBSSIDIndex	= 0;
        /// Adapter->bAutoAssociation  		= FALSE;
        Adapter->LastRSSI              		= MRVDRV_RSSI_DEFAULT_NOISE_VALUE;
        // Adapter->RxPDIndex          		= 0;
        Adapter->ulLastScanRequestTime 	= 0;

        NdisZeroMemory(&(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
        NdisZeroMemory(&(Adapter->NullSSID), sizeof(NDIS_802_11_SSID));
        NdisZeroMemory(Adapter->NullBSSID, MRVDRV_ETH_ADDR_LEN);

        // Initialize RSSI-related variables
        Adapter->RSSITriggerValue      	= MRVDRV_RSSI_TRIGGER_DEFAULT;
        Adapter->RSSITriggerCounter    	= 0;

        // Tx related varables
        Adapter->QueuedPacket          		= NULL;
        Adapter->SentPacket            		= NULL;
	 Adapter->IsReturnResources      	= FALSE;
 
        // Power management state
        Adapter->CurPowerState         		= NdisDeviceStateD0;

        // PnP and power profile
        Adapter->SurpriseRemoved       	= FALSE;
        for ( i=0; i<MRVDRV_TX_POWER_LEVEL_TOTAL ; i++)
        {
		Adapter->PowerLevelList[i] = 
			HostCmd_ACT_TX_POWER_LEVEL_MIN + i * HostCmd_ACT_TX_POWER_LEVEL_GAP;
        }
        Adapter->SupportTxPowerLevel   	= MRVDRV_TX_POWER_LEVEL_TOTAL;
        Adapter->CurrentTxPowerLevel   	= HostCmd_ACT_TX_POWER_INDEX_MID;

        Adapter->TxPowerLevel          		= 0;
        Adapter->TxPowerLevelIsSetByOS 	= FALSE;

        Adapter->CurrentPacketFilter        	= NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_BROADCAST| NDIS_PACKET_TYPE_MULTICAST;
	 Adapter->usMacControlRecord       	= HostCmd_ACT_MAC_RX_ON | 
	 	                                    		   HostCmd_ACT_MAC_TX_ON |
	 	                                    		   HostCmd_ACT_MAC_INT_ENABLE|
	 	                                    		   HostCmd_ACT_MAC_MULTICAST_ENABLE|
						    	 		   HostCmd_ACT_MAC_BROADCAST_ENABLE ;
        Adapter->SetActiveScanSSID	       = 0x0;

        Adapter->RadioOn 			       = TRUE;
        Adapter->TxAntenna 			       = 2;
        Adapter->RxAntenna 			       = 0x0000ffff;
        Adapter->DataRate 			       = 0; 
        Adapter->FragThsd 			       = 2346; 
        Adapter->RTSThsd 			       = 2346;
        Adapter->Preamble 			       = HostCmd_TYPE_LONG_PREAMBLE; 
        Adapter->TxPowerLevel 		       = 100;  // 100 mW

        Adapter->Channel 			       = 1;    //default

        // Power Save 
        Adapter->PSMode 			       = Ndis802_11PowerModeCAM;
        Adapter->psState  			       = PS_STATE_FULL_POWER;
        Adapter->ulDTIM   			       = 1;   	
        Adapter->ulAwakeTimeStamp 	       = 0;   

#ifdef WPA
        Adapter->EncryptionStatus 		= Ndis802_11EncryptionDisabled;

        // setup association information buffer
        {
            PNDIS_802_11_ASSOCIATION_INFORMATION pAssoInfo;
            // ULONG   ulLength;
        
            pAssoInfo = (PNDIS_802_11_ASSOCIATION_INFORMATION)  Adapter->AssocInfoBuffer;

            // ulLength = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION);
            // ulLength = (ulLength) + 3

            DBGPRINT(DBG_LOAD, ("pAssoInfo = 0x%x, pAssoInfo->Length = 0x%x\n", pAssoInfo, 
                                                 &(pAssoInfo->Length)));
            // assume the buffer has already been zero-ed
            // no variable IE, so both request and response IE are
            // pointed to the end of the buffer, 4 byte aligned
            pAssoInfo->OffsetRequestIEs = 
            pAssoInfo->OffsetResponseIEs = 
            pAssoInfo->Length = ((sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + 3)  /4) * 4 ;
        }
#endif 

	 Adapter->DTIMNum  	= 1;
        Adapter->DTIMFlag   	= FALSE;
        Adapter->ulDTIM 	    	= 10; 

#ifdef DEEP_SLEEP
        Adapter->IsDeepSleep = FALSE;
        Adapter->IsDeepSleepRequired = FALSE;
#endif

#ifdef ADHOCAES
        Adapter->AdhocAESEnabled = FALSE;
#endif
 

⌨️ 快捷键说明

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