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

📄 initproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 5 页
字号:

  // 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(SDIO) || defined(IF_SPI)
     #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 //SDIO
  
   
  Adapter->bIsPendingReset = FALSE;
    Adapter->bIsAssociationBlockedByScan = FALSE;
  Adapter->bIsScanWhileConnect = FALSE;
  Adapter->bIsConnectToAny = FALSE;
    
  Adapter->bIsScanInProgress = FALSE;
  Adapter->bIsAssociateInProgress = FALSE;

#ifdef MRV_CHIP_8385H
  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;
  
  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
  Adapter->AdhocDefaultBand         = MRVDRV_802_11_BAND_BG;
#elif defined(MRV_CHIP_8385PN)

#ifdef DEBUG_PARA_ROAMING
  Adapter->region_channel[0].Valid  = TRUE;
  Adapter->region_channel[0].Band   = MRVDRV_802_11_BAND_BG;  
  Adapter->region_channel[0].Region   = 0x10; //USA
  Adapter->region_channel[0].CFP      = channel_freq_power_US_BG;
  Adapter->region_channel[0].NrCFP  = 11;
 //Do NOT support 802.11 a here! 
  Adapter->region_channel[1].Valid  = FALSE;
  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;

#else


  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


#elif defined(MRV_CHIP_8686PN)      //dralee_1209
  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;
 #elif defined(MRV_CHIP_8399)
  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; 
#else 
  Adapter->region_channel[0].Valid  = TRUE;
  Adapter->region_channel[0].Band   = MRVDRV_802_11_BAND_B;  
  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->cur_region_channel = &(Adapter->region_channel[0]);
  Adapter->connected_band  = MRVDRV_802_11_BAND_BG;
  Adapter->connected_channel = 1;

  //lykao, 053005, set Adhoc Initial value
    Adapter->AdhocDefaultChannel      = 6;
  Adapter->AdhocWiFiDataRate          = 0; //set adhoc Band=MRVDRV_802_11_BAND_B

   
    Adapter->SetSD4BIT                  =0;  //Default setSD1BIT =4 bit mode
    #ifdef MRVL_WINCE50
      Adapter->RegionTableIndex = 0;
      Adapter->RegionCode = 0x10;
    #endif 
#if defined (IF_SPI)
	Adapter->SdioIstThread = 100;
#else

	Adapter->SdioIstThread=150;
#endif ///IF_SPI
      //Adapter->SendPSFlag=FALSE;  

    #ifdef REASSOCIATE
        Adapter->bIsSystemConnectNow = FALSE;
    #endif //REASSOCIATE	
		  
#ifdef CONFIG_WLAN_PMU
    Adapter->DTIMNum = 1;
#endif	
    return;
}

/******************************************************************************
 *
 *  Name: AllocateAdapterBuffer()
 *
 *  Description: Device object buffer initialization function
 *
 *  Arguments:  
 *      PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value: NDIS_STATUS_SUCCESS or NDIS_STATUS_FAILURE
 * 
 *  Notes:       
 *
 *****************************************************************************/
NDIS_STATUS AllocateAdapterBuffer(
    IN PMRVDRV_ADAPTER Adapter
  )
{
    NDIS_STATUS Status;
  // ULONG i;
  //ULONG ulBufSize;
  // PUCHAR pTempVirtualAddr;
  // NDIS_PHYSICAL_ADDRESS TempPhyAddr;
  //PNDIS_WLAN_BSSID_EX pTempBSSIDList;
    //PBSS_DESCRIPTION_SET_ALL_FIELDS pTempBssDescList;

  //  We are going to use non-cached shared memory for Rx buffers, no need to 
  //  check cache fill size offset
  ULONG Offset;

  Offset = 0;

  Adapter->InitializationStatus |= MRVDRV_INIT_STATUS_MAP_REGISTER_ALLOCATED;

  
  // Build up TxQ
  if(AllocateSingleTx(Adapter) != NDIS_STATUS_SUCCESS)
  {
    FreeAdapterObject(Adapter);
    return NDIS_STATUS_RESOURCES; 
  }

  // Build up RxQ
  Status = AllocateRxQ(Adapter);
  if( Status != NDIS_STATUS_SUCCESS ){
    FreeAdapterObject(Adapter);
    return NDIS_STATUS_RESOURCES;
  }
#ifdef CONFIG_WLAN_PMU  
  Status = wlan_PMUAllocateTxQ(Adapter);
  if( Status != NDIS_STATUS_SUCCESS ){
    FreeAdapterObject(Adapter);
    return NDIS_STATUS_RESOURCES;
  }
#endif  
  // Build up command buffers
  Status = AllocateCmdBuffer(Adapter);
  if( Status != NDIS_STATUS_SUCCESS ){
    FreeAdapterObject(Adapter);
    return NDIS_STATUS_RESOURCES;
  }

  return NDIS_STATUS_SUCCESS;
}

/******************************************************************************
 *
 *  Name: ReadRegistryInfo()
 *
 *  Description: Device registry read function
 *
 *  Arguments: 
 *      PMRVDRV_ADAPTER Adapter
 *      NDIS_HANDLE RegHdl
 *
 *    
 *  Return Value: 
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_FAILURE
 * 
 *  Notes:        
 *
 *****************************************************************************/

NDIS_STATUS ReadRegistryInfo(
    IN PMRVDRV_ADAPTER Adapter,
    IN NDIS_HANDLE RegHdl
  )
{
    NDIS_STATUS Status;
    REGINFOTAB *RegInfoTab;
    UINT i;
    ULONG j;
    // ULONG ul;
    UINT Value;
    PUCHAR pPtr;
    PUCHAR pTmp;
    // PUCHAR stopstring;
    NDIS_CONFIGURATION_PARAMETER NdisConfigParam,*ReturnedValue;
    ANSI_STRING  DestinationANSIString;
    char UnicodeBuffer[512];//to save the UNICODE string. 
    char AnsiBuffer[128];//to save the ANSI string. 
    PUCHAR NetworkAddress;

    // Read registry network address, if there is a good one, put it itno Adapter->CurrentAddr array
    NdisReadNetworkAddress(&Status, &NetworkAddress, &i, RegHdl);
    if( Status == NDIS_STATUS_SUCCESS )
  {
        if( i == MRVDRV_ETH_ADDR_LEN )
    {
            NdisMoveMemory(Adapter->CurrentAddr, NetworkAddress, MRVDRV_ETH_ADDR_LEN);
      DBGPRINT(DBG_LOAD,("*** Got registry soft addr: %2x %2x %2x %2x %2x %2x ***\n", 
      Adapter->CurrentAddr[0],
      Adapter->CurrentAddr[1],
      Adapter->CurrentAddr[2],
      Adapter->CurrentAddr[3],
      Adapter->CurrentAddr[4],
      Adapter->CurrentAddr[5]));            
        }
    }

  RegInfoTab = MrvDrvRegInfoTab;
  ReturnedValue = &NdisConfigParam;
  
  DestinationANSIString.Buffer=AnsiBuffer; 
  DestinationANSIString.MaximumLength=0x21;
  ReturnedValue->ParameterData.StringData.Buffer=(PWSTR)UnicodeBuffer;
    for(i=0; i<SIZE_OF_REG_TAB; i++, RegInfoTab++)
    {
        pPtr = ((PUCHAR)Adapter) + RegInfoTab->Offset;
        pTmp = pPtr;
        if (RegInfoTab->Type == 0)
        {
          NdisReadConfiguration(
        &Status,
              &ReturnedValue,
              RegHdl,
              &RegInfoTab->ObjNSName,
              NdisParameterInteger);
            if (Status == NDIS_STATUS_SUCCESS)
            {             
            Value = ReturnedValue->ParameterData.IntegerData;
            *((PULONG)pPtr) = (ULONG)Value;
          }
        }
        else if(RegInfoTab->Type == 1)
        {
          
          NdisReadConfiguration(
        &Status,
              &ReturnedValue,
              RegHdl,
              &RegInfoTab->ObjNSName,
              NdisParameterString);
            if (Status == NDIS_STATUS_SUCCESS)

⌨️ 快捷键说明

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