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

📄 initproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
#else
    NdisMSleep(50); // Wait long enough
#endif
  NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
  NdisFillMemory(Adapter->PermanentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
    
  //Adapter->gotMACAddress = FALSE;
  PrepareAndSendCommand(
    Adapter, 
    HostCmd_CMD_GET_HW_SPEC, 
    0, 
    HostCmd_OPTION_USE_INT,
    (NDIS_OID)0,
    HostCmd_PENDING_ON_NONE,
    0,
    FALSE,
    NULL,
    NULL,
    NULL,
    NULL);

#ifndef IF_SPI
  NdisMSleep(2500000);
#else
	NdisMSleep(2500);
#endif

	/// Power-Save    
	//dralee_0110
	//if ( Adapter->PSMode != 0)
	{
	Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
	Adapter->PSMode = Ndis802_11PowerModeCAM;
	//PSSleep(Adapter);
	}
  //Plus 
  //Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
  DBGPRINT(DBG_NEWPS, ("Adapter PSMODE = %d\n", Adapter->PSMode));
  

#ifdef SDIO
    // give the interrupt timer a chance to execute
    NdisMSleep(10000);
#endif // SDIO

  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;

#if defined(SDIO)
      //AddKeyValues (TEXT("Comm\\EAGLEND5SDIO"), Vals);
      //lykao, 053005 
     #ifdef MRV_CHIP_8381PN
             AddKeyValues (TEXT("Comm\\SD8381PN"), Vals);
     #endif // #ifdef MRV_CHIP_8381PN
     
     #ifdef MRV_CHIP_8385PN
             AddKeyValues (TEXT("Comm\\SD8385PN"), Vals);
     #endif // #ifdef MRV_CHIP_8385PN
     
     #ifdef MRV_CHIP_8385H
             AddKeyValues (TEXT("Comm\\SD8385H"), Vals);
     #endif // #ifdef MRV_CHIP_8385H
     
     #ifdef MRV_CHIP_8305
             AddKeyValues (TEXT("Comm\\EAGLEND5SDIO"), Vals);
     #endif // #ifdef MRV_CHIP_8305

     #ifdef MRV_CHIP_8686PN    //dralee_1209
             AddKeyValues (TEXT("Comm\\SD8686PN"), Vals);
     #endif // #ifdef MRV_CHIP_8686PN

#elif defined (IF_SPI)
	///crlo:add ++
	 #ifdef MRV_CHIP_8381PN
             AddKeyValues (TEXT("Comm\\GSPI8381PN"), Vals);
     #endif // #ifdef MRV_CHIP_8381PN
     
     #ifdef MRV_CHIP_8385PN
             AddKeyValues (TEXT("Comm\\GSPI8385PN"), Vals);
     #endif // #ifdef MRV_CHIP_8385PN
     
     #ifdef MRV_CHIP_8385H
             AddKeyValues (TEXT("Comm\\GSPI8385H"), Vals);
     #endif // #ifdef MRV_CHIP_8385H
	///crlo:add --
#else //SDIO
     #ifdef MRV_CHIP_8381P
             AddKeyValues (TEXT("Comm\\CF8381P"), Vals);
     #endif // #ifdef MRV_CHIP_8381P
     
     #ifdef MRV_CHIP_8381PN
             AddKeyValues (TEXT("Comm\\CF8381PN"), Vals);
     #endif // #ifdef MRV_CHIP_8381PN
     
     #ifdef MRV_CHIP_8385PN
             AddKeyValues (TEXT("Comm\\CF8385PN"), Vals);
     #endif // #ifdef MRV_CHIP_8385PN
     
    #ifdef MRV_CHIP_8399
             AddKeyValues (TEXT("Comm\\SD8399"), Vals);
     #endif // #ifdef MRV_CHIP_8385PN
	 
     #ifdef MRV_CHIP_8385H
             AddKeyValues (TEXT("Comm\\CF8385H"), Vals);
     #endif // #ifdef MRV_CHIP_8385H
     
     #ifdef MRV_CHIP_8305
             AddKeyValues (TEXT("Comm\\EAGLEND5"), Vals);
     #endif // #ifdef MRV_CHIP_8305
#endif //SDIO
    }
#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

    // indicate to OS that the network is not connected after 1 second
   NdisMCancelTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, &timerStatus);
   NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 500);
    Adapter->DisconnectTimerSet = TRUE;

// tt ++ v5 firmware test
/*
	v5MrvPrintFileW( L"@@@ test oid start\n" );
	{
		static ULONG	ulByteNeeded, ulByteWritten;
		
		{
			static NDIS_802_11_RTS_THRESHOLD	FregValue;

			FregValue = 2520;
			MrvDrvSetInformation( Adapter, OID_802_11_RTS_THRESHOLD, &FregValue, sizeof(FregValue), &ulByteWritten, &ulByteNeeded );
			Sleep(2000);		
		}
		
		{
			static NDIS_802_11_RTS_THRESHOLD	InfoBuf;

			InfoBuf = 0;
		
			MrvDrvQueryInformation( Adapter, OID_802_11_RTS_THRESHOLD, &InfoBuf, sizeof(InfoBuf), &ulByteWritten, &ulByteNeeded );
			v5MrvPrintFileW( L">>> %d\n", InfoBuf );
			Sleep(2000);
		}

	}
	v5MrvPrintFileW( L"@@@ test oid end\n\n\n" );
*/
#ifdef CONFIG_WLAN_PMU_CAL_TX_POWER
    // Cal Tx Power
    {
       unsigned long BytesNeeded;

       BytesNeeded = sizeof(wlan_cal_data);
       memcpy(&wlan_cal_data[BytesNeeded-MRVDRV_ETH_ADDR_LEN], Adapter->PermanentAddr,MRVDRV_ETH_ADDR_LEN);
       Status=PrepareAndSendCommand(
                Adapter,
                HostCmd_CMD_802_11_CAL_DATA_EXT,
                HostCmd_ACT_GEN_SET,
                HostCmd_OPTION_USE_INT,
                0,
                HostCmd_PENDING_ON_NONE,
                0,
                FALSE,
                0,
                0,
                &BytesNeeded,
                &wlan_cal_data[0]
                );
        if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
        {
            RETAILMSG(1,(L"PMU ERROR:" L"HostCmd_CMD_802_11_CAL_DATA_EXT failed."));    
        }
        else
        {
            RETAILMSG(1,(L"PMU TRACE:" L"HostCmd_CMD_802_11_CAL_DATA_EXT successfully."));    
        }
    }
#endif
#ifdef CONFIG_WLAN_PMU_EXT_CLK
    {
       OID_MRVL_DS_SLEEP_PARAMS   Sp;
       unsigned long BytesNeeded;

       BytesNeeded = sizeof(OID_MRVL_DS_SLEEP_PARAMS);

       Sp.Error = 30;
       Sp.Offset = 500;
       Sp.StableTime = 2000;
       Sp.CalControl = 1;
       Sp.ExternalSleepClk = 2;
       Sp.Reserved = 0;
       
       Status=PrepareAndSendCommand(
                Adapter,
                HostCmd_CMD_802_11_SLEEP_PARAMS,
                HostCmd_ACT_GEN_SET,
                HostCmd_OPTION_USE_INT,
                0,
                HostCmd_PENDING_ON_NONE,
                0,
                FALSE,
                0,
                0,
                &BytesNeeded,
                &Sp
                );
        if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
        {
            RETAILMSG(1,(L"PMU ERROR:" L"HostCmd_CMD_802_11_SLEEP_PARAMS failed."));    
        }
        else
        {
            RETAILMSG(1,(L"PMU TRACE:" L"HostCmd_CMD_802_11_SLEEP_PARAMS successfully."));    
        }
    }
#endif
    GetMacAddr();
// tt --
	///crlo:add ++
#ifdef CONFIG_WLAN_PMU
    wlan_PMUInit(Adapter); 
#endif
#if defined(IF_SPI)
	isDrvInitialized = TRUE;
#endif ///IF_SPI
	///crlo:add --
    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 AUTO_REASSOCIATION
	Adapter->ReAssociationInProgress = FALSE;
	Adapter->bIsSendCmdImterSet = FALSE;
	Adapter->uDelayForReAssociation = 3000;
	Adapter->uRetryForReassociation = 5;
	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;
#ifdef DEBUG_PARA_ROAMING_PRINT
	RETAILMSG(1,(TEXT("NdisMediaStateDisconnected is caused by InitAdapterObject!...\n")));
#endif
  WriteCommonLogFile(WIFI_LOG,"AP is disconnected(Reason=3)  (InitAdapterObject)!...\r\n",
				  strlen("AP is disconnected(Reason=3)  (InitAdapterObject)!...\r\n"));
   if(g_AssociationDuration != 0)
  {
	char logstr[200];
	sprintf(logstr,"Association Duration is %d seconds\r\n", (GetTickCount() - g_AssociationDuration)/1000);
	WriteCommonLogFile(WIFI_LOG,logstr, strlen(logstr));
	g_AssociationDuration = 0;
  }


  Adapter->LinkSpeed = MRVDRV_LINK_SPEED_DEFAULT;//MRVDRV_LINK_SPEED_1mbps;
  Adapter->MediaInUse = NdisMedium802_3;
    NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);

⌨️ 快捷键说明

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