initproc.c

来自「此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有」· C语言 代码 · 共 2,040 行 · 第 1/5 页

C
2,040
字号
#endif
*/
//???-------------------------------------------------------------

  InitializeWirelessConfig(Adapter);
  if ( Adapter->EnableQOS ) 
  {
    DBGPRINT(DBG_QOS, ("QOS ENABLED.\n"));

    // send down command to enable QOS
    PrepareAndSendCommand(Adapter, 
      HostCmd_CMD_802_11_ENABLE_QOS_WME, 
      HostCmd_ACT_SET, 
      HostCmd_OPTION_USE_INT, 
      0,
      HostCmd_PENDING_ON_NONE,
      0,
      FALSE,
      NULL,
      NULL,
      NULL,
      NULL);
  }
  else
  {
    DBGPRINT(DBG_QOS, ("QOS DISABLED.\n"));
  }

/*
    //// L2 Roaming Configration Check ////
    if ( Adapter->RoamingMode > MRVL_L2ROAMING_MODE_AUTO )
    {
        Adapter->RoamingMode = MRVL_L2ROAMING_MODE_OFF;
    }

    if ( Adapter->RoamingPeriod < MRVL_L2ROAMING_MIN_PERIOD )
    {
        Adapter->RoamingPeriod = MRVL_L2ROAMING_MIN_PERIOD;
    }

    DBGPRINT(DBG_L2ROAMING, ("L2Roaming: Mode = %d, Level = %d, period = %d\n",
        Adapter->RoamingMode, Adapter->RoamingLevel, Adapter->RoamingPeriod));
*/
  /// Add the FW version and Driver Version to Registry   
  
#ifdef UNDER_CE

    {   // Add driver version to registry
        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;
///crlo:verdef ++
		///AddKeyValues ((TEXT("Comm\\") TEXT(IFSTRN) TEXT(CHIPSTRN) TEXT("_") TEXT(RFSTRN)), Vals);
		AddKeyValues ((TEXT("Comm\\") TEXT(IFSTRN) TEXT(CHIPSTRN)), Vals);
///crlo:verdef --
    }
#endif // UNDER_CE

 /// Set DTIM to FW : Need FIX later 
#ifdef MRVL_SET_REG_DTIM
   DBGPRINT(DBG_OID, ("*****1 reg MRVL_SET_REG_DTIM OK DTIMNum=%d\n",Adapter->DTIMNum));
   #ifdef MRVL_USE_MULTIPLE_DTIM
       Adapter->DTIMFlag=TRUE;
       Status=PrepareAndSendCommand(
                Adapter,
                HostCmd_CMD_802_11_MULTIPLE_DTIM,
                HostCmd_ACT_GET,
                HostCmd_OPTION_USE_INT,
                0,
                HostCmd_PENDING_ON_SET_OID,
                0,
                FALSE,
                NULL,
                0,
                0,
                            NULL
                );
        if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
        {     DBGPRINT(DBG_ERROR , ("MRVL_SET_REG_DTIM Fail\n"));
        }
        else
        {
              DBGPRINT(DBG_OID, ("2 reg MRVL_SET_REG_DTIM OK DTIMNum=%d\n",Adapter->DTIMNum));
        }  
   #endif   
#endif

#ifdef AUTO_REASSOCIATION
	Status = SubscribeMacEventForReAssoc( Adapter );
	if ( !NDIS_SUCCESS( Status ) )
		DBGPRINT( DBG_ERROR, ("[Error] Cannot subscribe events for re-association\n") );
#endif

#ifdef WMM_UAPSD
    Status = wmm_set_sleep_period( Adapter, WMM_UAPSD_DEFAULT_SLEEP_PERIOD );
    if ( Status != NDIS_STATUS_SUCCESS )
    {
        DbgWmmMsg( (L"+wmm+ Set SLEEP PERIOD failed!\n") );
    }
    else
    {
        DbgWmmMsg( (L"+wmm+ Set SLEEP PERIOD successfully!\n") );
    }
#endif 

    // indicate to OS that the network is not connected after 1 second
    //35.p6++
    	/// May be we don't need the timer : FIX Later
    	//NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 500);
    	//Adapter->DisconnectTimerSet = TRUE;
  //35.p6--

#if defined(IF_GSPI)
	isDrvInitialized = TRUE;
#endif ///IF_GSPI
#ifdef CCX
	wlan_ccx_init(Adapter);

	///crlo:fastroam ++
	#ifdef CCX_FASTROAM
	Adapter->EventRecord.RSSILowValue  = 60;
	#endif ///CCX_FASTROAM
	///crlo:fastroam --
#endif
    #ifdef ENABLE_802_11D  //dralee_20060524 
    Enable_11d(Adapter, (UCHAR)Adapter->Enable80211D);   
    ResetAllScanTypeAndPower(Adapter);
    #endif
    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
===============================================================================
*/

/******************************************************************************
 *
 *  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

  Adapter->nAssocRspCount = 0; //tt ra fail

#ifdef PMKID_CACHE_CAP
	ResetPmkidCache( Adapter );
	Adapter->RSNStatusIndicated.StatusType =  Ndis802_11StatusTypeMax;
#endif

#ifdef AUTO_REASSOCIATION
	Adapter->ReAssociationInProgress = FALSE;
	Adapter->bIsSendCmdImterSet = FALSE;
	Adapter->uDelayForReAssociation = 100;
	Adapter->uRetryForReassociation = 10;
	Adapter->uCurrentRetryForReassociation = 0;
#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; //by dralee
  Adapter->SentPacket            = NULL;

    // 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;

  // Set number of WEP keys
    Adapter->NoOfWEPEntry = 0;

    // Use system up time (in milli sec) for IV
    NdisGetSystemUpTime(&Adapter->IV);

  Adapter->SoftwareFilterOn = FALSE;
  Adapter->CurrentPacketFilter = NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_BROADCAST;
    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->AcceptAnySSID=0x1;
  Adapter->AutoConfig=0x1;
  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 // #ifdef WPA


    Adapter->ulDTIM = 10; // assume to be 100 ms

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

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

   #if defined(IF_SDIO) || defined(IF_GSPI)
     #ifndef MRVL_WINCE50
         #ifdef MRVL_SET_RF_RADIO
            Adapter->RadioFlag=0;
          Adapter->RadioControl=(USHORT)(Adapter->Preamble|Adapter->RadioOn);
       #endif 
       #ifdef MRVL_MACADDRESS
            Adapter->MrvlMacFlag = 0;
       #endif

       #ifdef MRVL_REGIONCODE
          Adapter->MrvlRegionFlag =0;
         #endif

       #ifdef MRVL_DATARATE
          Adapter->MrvlDataRateFlag=0;
       #endif

       #ifdef MRVL_RXTXANTENNA  
          //****modify RF_ANTENNA  :set initial value
          Adapter->MrvlRxAntennaFlag=0;
          Adapter->MrvlTxAntennaFlag=0;
       #endif  
  
       #ifdef MRVL_RFCHANNEL   
           Adapter->ChannelFlag=0; 
       #endif
     #endif //MRVL_WINCE50  

     #ifdef MRVL_PSCONFIRM
     Adapter->bPSConfirm=FALSE;
     #endif
   
   #endif //IF_SDIO
  
   
  Adapter->bIsPendingReset = FALSE;
    Adapter->bIsAssociationBlockedByScan = FALSE;
  Adapter->bIsScanWhileConnect = FALSE;
  Adapter->bIsConnectToAny = FALSE;
    
  Adapter->bIsScanInProgress = FALSE;
  Adapter->bIsAssociateInProgress = FALSE;

#if (defined(MRV_MODE_A) || defined(MRV_MODE_ABG))///#ifdef MRV_CHIP_8385H
#ifdef MRV_MODE_ABG
  Adapter->region_channel[0].Valid  = TRUE;
  Adapter->region_channel[0].Band   = MRVDRV_802_11_BAND_BG;  
  Adapter->region_channel[0].Region   = 0x40; //JPN
  Adapter->region_channel[0].CFP      = channel_freq_power_JPN_BG;
  Adapter->region_channel[0].NrCFP  = 14;
#endif
  Adapter->region_channel[1].Valid  = TRUE;
  Adapter->region_channel[1].Band   = MRVDRV_802_11_BAND_A;  
  Adapter->region_channel[1].Region   = 0x10; //USA
  Adapter->region_channel[1].CFP      = channel_freq_power_A;
  Adapter->region_channel[1].NrCFP  = 13;

    //lykao, 053005, set Adhoc Initial value

⌨️ 快捷键说明

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