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

📄 initproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:

  // Allocate spinlock
  //NdisAllocateSpinLock(&Adapter->TxSpinLock); 

  InitializeCriticalSection(&Adapter->TxCriticalSection);
  InitializeCriticalSection(&Adapter->IntCriticalSection);
        
  Adapter->hControllerInterruptEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
  Adapter->TxResourceControlEvent = CreateEvent(NULL, FALSE, FALSE,NULL);

//tt ++ v5 firmware
	Adapter->hOidQueryEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
//tt
  
  //Adapter->hControllerInterruptEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
       if (NULL == Adapter->hControllerInterruptEvent)
       {
			///RETAILMSG(1,(TEXT("Null Interrupt EVENT \n")));
          return NDIS_STATUS_FAILURE;
       } 

       // Adapter->hTxEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
       //if (NULL == Adapter->hTxEvent)
       //{
       //   RETAILMSG(1,(TEXT("Null Tx EVENT \n")));
       //   return NDIS_STATUS_FAILURE;
       //} 

        Adapter->hThreadReadyEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
       if (NULL == Adapter->hThreadReadyEvent)
       {
          //RETAILMSG(1,(TEXT("Null ThreadReadyEvent \n")));
          return NDIS_STATUS_FAILURE;
       } 
  
  
  Adapter->hControllerInterruptThread = CreateThread(NULL,
                                                      0,
                                                      (LPTHREAD_START_ROUTINE)MrvIstThread,
                                                      Adapter,
                                                      0,
                                                      &threadID);

       if (NULL == Adapter->hControllerInterruptThread)
       {
          //RETAILMSG(1,(TEXT("Null Interrupt Thread \n")));
          return NDIS_STATUS_FAILURE;
       } 

       waitStatus = WaitForSingleObject(Adapter->hThreadReadyEvent, INFINITE);
   if (WAIT_OBJECT_0 != waitStatus)
   {
            //RETAILMSG(1,(TEXT("call WaitFor SingleObject Fail : \n")));
            return NDIS_STATUS_FAILURE;
        }
/*
  Adapter->hTxThread = CreateThread(NULL,
                                          0,
                                          (LPTHREAD_START_ROUTINE)MrvTransmitThread,
                                          Adapter,
                                          0,
                                          &threadID);

       if (NULL == Adapter->hTxThread)
       {
          RETAILMSG(1,(TEXT("Null Transmit Thread \n")));
          return NDIS_STATUS_FAILURE;
       } 

         waitStatus = WaitForSingleObject(Adapter->hThreadReadyEvent, INFINITE);
   if (WAIT_OBJECT_0 != waitStatus)
   {
            RETAILMSG(1,(TEXT("call WaitFor SingleObject Fail : \n")));
            return NDIS_STATUS_FAILURE;
        } 
*/



//tt ++ ra fail
//	NdisMInitializeTimer(
//		&Adapter->MrvDrvSendCompleteTimer,
//		Adapter->MrvDrvAdapterHdl,
//		(PNDIS_TIMER_FUNCTION) BatchIndicateRetQPkts,
//		(PVOID) Adapter
//		);
//tt --

  // Initialize Timer
#ifdef AUTO_REASSOCIATION
	Adapter->bIsSendCmdImterSet = FALSE;
	NdisMInitializeTimer(
		&Adapter->MrvDrvSendCmdTimer,
		Adapter->MrvDrvAdapterHdl,
		(PNDIS_TIMER_FUNCTION) MrvDrvSendCmdTimerHandler,
		(PVOID) Adapter
		);
#endif

#ifdef IF_SDIO    
//This Timer now is used to work around for interrupt missing issue. 
#if 0 //dralee_20060613                                                  
  NdisMInitializeTimer(
    &Adapter->MrvDrvIntWorkAroundTimer,
    Adapter->MrvDrvAdapterHdl,
    (PNDIS_TIMER_FUNCTION)IntWorkAroundTimer,
    (PVOID)Adapter
    );
  //Adapter->MrvDrvIntWorkAroundTimerIsSet = FALSE;
#endif

  //Adapter->MrvDrvSdioIntTimerIsSet = FALSE;

  NdisMInitializeTimer(
    &Adapter->MrvDrvSdioCheckFWReadyTimer,
    Adapter->MrvDrvAdapterHdl,
    (PNDIS_TIMER_FUNCTION)MrvDrvSdioCheckFWReadyTimerFunction,
    (PVOID)Adapter
    );

  Adapter->MrvDrvSdioCheckFWReadyTimerIsSet = FALSE;   
#endif // IF_SDIO

#ifdef RETQ_TIMER
  NdisMInitializeTimer(
    &Adapter->MrvRetQTimer,
    Adapter->MrvDrvAdapterHdl,
    (PNDIS_TIMER_FUNCTION)MrvRetQTimerFunction,
    (PVOID)Adapter
    );

  Adapter->RetQTimerIsSet = 0;   
#endif


  NdisInitializeWorkItem(
      &Adapter->MrvDrvPMWorkItem,
      (NDIS_PROC)MrvDrvPMCallback,
      (PVOID)Adapter
      );
    
  NdisMInitializeTimer(
      &Adapter->MrvDrvIndicateConnectStatusTimer,
      Adapter->MrvDrvAdapterHdl,
      (PNDIS_TIMER_FUNCTION)MrvDrvIndicateConnectStatusTimer,
      (PVOID)Adapter
      );
  Adapter->DisconnectTimerSet = FALSE;

  
  // Initialize the timer for command
  NdisMInitializeTimer(
      &Adapter->MrvDrvCommandTimer,
      Adapter->MrvDrvAdapterHdl,
      (PNDIS_TIMER_FUNCTION) MrvDrvCommandTimerFunction,
      (PVOID)Adapter
      );
    Adapter->CommandTimerSet = FALSE;
  
  // Initialize the timer for Tx
  NdisMInitializeTimer(
      &Adapter->MrvDrvTxPktTimer,
      Adapter->MrvDrvAdapterHdl,
      (PNDIS_TIMER_FUNCTION) MrvDrvTxPktTimerFunction,
      (PVOID)Adapter
      );
  Adapter->TxPktTimerIsSet = FALSE;   

#ifdef TX_PRY_Q  
       InitializeTxNodeQ(Adapter);
#endif


#ifdef AvoidOidSetScan
    // Initialize the timer for avoid scan when 802.1x authentication be not completed 
    NdisMInitializeTimer(
      &Adapter->MrvDrvAvoidScanAfterConnectedTimer,
      Adapter->MrvDrvAdapterHdl,
      (PNDIS_TIMER_FUNCTION)MrvDrvAvoidScanAfterConnectedTimer,
      (PVOID)Adapter
      );
  Adapter->bAvoidScanAfterConnectedforMSecs = FALSE;	
#endif
   // Initialize the timer for TX Check queued packed and send

   //lykao, 061605
   /*
  NdisMInitializeTimer(
      &Adapter->MrvDrvCheckTxQueueTimer,
      Adapter->MrvDrvAdapterHdl,
      (PNDIS_TIMER_FUNCTION) MrvDrvCheckTxQueueTimerFunction,
      (PVOID)Adapter
      );
  Adapter->CheckTxQueueTimerIsSet = FALSE;

      //lykao, 061505
     
  NdisMSetPeriodicTimer(
      &Adapter->MrvDrvCheckTxQueueTimer, 
                5
        );
   */     
      //NdisMSetPeriodicTimer(
  //    &Adapter->MrvDrvCheckTxQueueTimer, 
        //  1
    //    );
    
    //Adapter->CheckTxQueueTimerIsSet = TRUE;

   #ifdef REASSOCIATE
   // Initialize the timer for Reconnect 
	NdisMInitializeTimer(
			&Adapter->MrvReConnectTimer,
			Adapter->MrvDrvAdapterHdl,
			(PNDIS_TIMER_FUNCTION) MrvDrvReConnectTimerFunction,
			(PVOID)Adapter
			);
	Adapter->ReConnectTimerIsSet = FALSE;
	DBGPRINT(DBG_LOAD, (" MrvReConnectTimer success \n"));
   #endif //REASSOCIATE 
   #ifdef ACTIVE_ROAMING
     	// Initialize the timer for ActiveRoaming
	NdisMInitializeTimer(
			&Adapter->MrvActiveRoamingTimer,
			Adapter->MrvDrvAdapterHdl,
			(PNDIS_TIMER_FUNCTION) MrvDrvActiveRoamingTimerFunction,
			(PVOID)Adapter
			);
	Adapter->ActiveRoamingTimerIsSet = FALSE;
	DBGPRINT(DBG_LOAD, (" MrvReConnectTimer success \n"));

     #ifdef BG_SCAN
	 	// Initialize the timer for BGActiveRoaming
	NdisMInitializeTimer(
			&Adapter->MrvBGActiveRoamingTimer,
			Adapter->MrvDrvAdapterHdl,
			(PNDIS_TIMER_FUNCTION) MrvDrvBGActiveRoamingTimerFunction,
			(PVOID)Adapter
			);
	Adapter->BGActiveRoamingTimerIsSet = FALSE;
     #endif //BG_SCAN	
   #endif //ACTIVE_ROAMING

    if ( (Adapter->DefaultPerChannelScanTime < 20) || (Adapter->DefaultPerChannelScanTime > 1000) )
    {
        DBGPRINT(DBG_WARNING, ("Default channel time out of range: %d, set to default(%d)!\n",
               Adapter->DefaultPerChannelScanTime, HostCmd_SCAN_MAX_CH_TIME));

        Adapter->DefaultPerChannelScanTime = HostCmd_SCAN_MAX_CH_TIME;
    }

  //#ifdef IF_SDIO
  //   #ifndef MRVL_WINCE50
  //      NdisAllocateSpinLock(&Adapter->lDPCLock);
  //   #endif
       //NdisAllocateSpinLock(&Adapter->lDPCPendingLock);
  //#endif  //IF_SDIO

  return NDIS_STATUS_SUCCESS;
}

//tt ++ v5 firmware
/*
	Does the code need to delay for 10000 ms!!??
*/
VOID BCAInitialization( IN PMRVDRV_ADAPTER Adapter )
{
	if ( Adapter->BTMode != 0 )
	{
		// only send command if BT mode is not 0
		DBGPRINT(DBG_LOAD, ("Setting BT Mode parameters:\n"));
		DBGPRINT(DBG_LOAD, ("BTMode=0x%x, Antenna Config = 0x%x, Freq Config = 0x%x\n",
			Adapter->BTMode, Adapter->BTAntennaConfig, Adapter->BTFrequencyConfig));
		DBGPRINT(DBG_LOAD, ("TX Lo = 0x%x, TX Hi = 0x%x, RX Lo = 0x%x, RX Hi = 0x%x\n",
			Adapter->BTWLANTxPriorityLo, Adapter->BTWLANTxPriorityHi,
			Adapter->BTWLANRxPriorityLo, Adapter->BTWLANRxPriorityHi));

		PrepareAndSendCommand(
			Adapter,
			HostCmd_CMD_BCA_CONFIG,
			HostCmd_ACT_GEN_SET,
			HostCmd_OPTION_USE_INT,
			0,
			HostCmd_PENDING_ON_NONE,
			0,
			FALSE,
			NULL,
			NULL,
			NULL,
			NULL );   

		NdisMSleep(10000);

		DBGPRINT( DBG_LOAD, ("TrafficType=%d, TimeShareInterval=%d, BTTime=%d\n",
			Adapter->BTTrafficType, Adapter->BTTimeShareInterval, Adapter->BTTime) );
#ifdef BCA
		PrepareAndSendCommand(
			Adapter,
			HostCmd_CMD_802_11_BCA_CONFIG_TIMESHARE,
			HostCmd_ACT_GEN_SET,
			HostCmd_OPTION_USE_INT,
			0,
			HostCmd_PENDING_ON_NONE,
			0,
			FALSE,
			NULL,
			NULL,
			NULL,
			NULL );   

		NdisMSleep(10000);
#endif //BCA
	}

}
//tt --

//************************************************************************************
//* Function:     PostFwDownload
//* Description:  Perform all functions necessary to re-initialize device after a FW
//*                     download - this will be called from device init, and from
//*                     power management on wake from S3 sleep state.
//* Arguments:    PMRVDRV_ADAPTER Adapter and NDIS_HANDLE WrapperConfigurationContext
//* Returns     NDIS_STATUS_SUCCESS or NDIS failure code.
//* Date:     07/10/2003
//************************************************************************************
NDIS_STATUS PostFwDownload ( IN PMRVDRV_ADAPTER Adapter )
{
  ULONG BytesWritten,BytesNeeded;
  HostCmd_DS_802_11_RADIO_CONTROL RadioControl;
    
    //------------------------------------------------------------------------------------
  // PJG: Setup FW with our configured Fragmentation and RTS thresholds.
  //------------------------------------------------------------------------------------

  DBGPRINT(DBG_LOAD,("Setting fragmentation threshold\n"));
  PrepareAndSendCommand(
      Adapter,
      HostCmd_CMD_802_11_SNMP_MIB,
      0,
      HostCmd_OPTION_USE_INT,
      OID_802_11_FRAGMENTATION_THRESHOLD,
      HostCmd_PENDING_ON_NONE,
      0,
      FALSE,
      NULL,
      NULL,
      NULL,
      NULL );   
  NdisMSleep(10000);  
  
  DBGPRINT(DBG_LOAD,("Setting RTS threshold\n"));
  PrepareAndSendCommand(
      Adapter,
      HostCmd_CMD_802_11_SNMP_MIB,
      0,
      HostCmd_OPTION_USE_INT,
      OID_802_11_RTS_THRESHOLD,
      HostCmd_PENDING_ON_NONE,
      0,
      FALSE,
      NULL,
      NULL,
      NULL,
      NULL );   
  NdisMSleep(10000);  

    // BT Co-existence
//tt ++ v5 firmware
	BCAInitialization( Adapter );
//tt --

#if 0 //tt ++ v5 firmware
    if ( Adapter->BTMode != 0 )
    {
        // only send command if BT mode is not 0
        DBGPRINT(DBG_LOAD, ("Setting BT Mode parameters:\n"));
        DBGPRINT(DBG_LOAD, ("BTMode=0x%x, Antenna Config = 0x%x, Freq Config = 0x%x\n",
                    Adapter->BTMode, Adapter->BTAntennaConfig, Adapter->BTFrequencyConfig));
        DBGPRINT(DBG_LOAD, ("TX Lo = 0x%x, TX Hi = 0x%x, RX Lo = 0x%x, RX Hi = 0x%x\n",
            Adapter->BTWLANTxPriorityLo, Adapter->BTWLANTxPriorityHi,
            Adapter->BTWLANRxPriorityLo, Adapter->BTWLANRxPriorityHi));

        PrepareAndSendCommand(
        Adapter,
        HostCmd_CMD_BCA_CONFIG,
        HostCmd_ACT_GEN_SET,
        HostCmd_OPTION_USE_INT,
        0,
        HostCmd_PENDING_ON_NONE,
        0,
        FALSE,
        NULL,
        NULL,
        NULL,
        NULL );   

        NdisMSleep(10000);
    }
#endif //0 //tt -- firmware

    //------------------------------------------------------------------------------------
  // PJG: Setup FW for either short, long or automatic preamble 
  //------------------------------------------------------------------------------------
  DBGPRINT(DBG_LOAD,("Setting preamble\n"));
  RadioControl.Command=HostCmd_CMD_802_11_RADIO_CONTROL;
  RadioControl

⌨️ 快捷键说明

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