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

📄 initproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
            {   
       
          NdisUnicodeStringToAnsiString(
            &DestinationANSIString, 
            (PUNICODE_STRING)(&(ReturnedValue->ParameterData.StringData))
          );   
            
          for(j=0;DestinationANSIString.Buffer[j] != '\0';j++)
          {
            *(pTmp)=DestinationANSIString.Buffer[j];
            pTmp++;
          } 
           
          *((PULONG)(pPtr-4))=j;           
  
      }                                     
        }  
        else if (RegInfoTab->Type == 3) {

      NdisReadConfiguration(
        &Status,
        &ReturnedValue,
        RegHdl,
        &RegInfoTab->ObjNSName,
        NdisParameterHexInteger);

      if (Status == NDIS_STATUS_SUCCESS) {

        Value = ReturnedValue->ParameterData.IntegerData;
        *((PINT)pPtr) = Value;
      }
    }
    }

  Adapter->WepKey1.KeyIndex=0x0;
  Adapter->WepKey2.KeyIndex=0x1;
  Adapter->WepKey3.KeyIndex=0x2;
  Adapter->WepKey4.KeyIndex=0x3;      
  switch(Adapter->TxWepKey){

    case 0:
      Adapter->WepKey1.KeyIndex |= 0x80000000;
      NdisMoveMemory(&(Adapter->CurrentWEPKey),&(Adapter->WepKey1) , 12 + Adapter->WepKey1.KeyLength);
      break;
    case 1:
      Adapter->WepKey2.KeyIndex |= 0x80000000;
      NdisMoveMemory(&(Adapter->CurrentWEPKey),&(Adapter->WepKey2) , 12 + Adapter->WepKey2.KeyLength);
      break;  
    case 2:
      Adapter->WepKey3.KeyIndex |= 0x80000000;
      NdisMoveMemory(&(Adapter->CurrentWEPKey),&(Adapter->WepKey3) , 12 + Adapter->WepKey3.KeyLength);
      break;
    case 3:
      Adapter->WepKey4.KeyIndex |= 0x80000000;
      NdisMoveMemory(&(Adapter->CurrentWEPKey),&(Adapter->WepKey4) , 12 + Adapter->WepKey4.KeyLength);
      break;                
    default:
      break;  
  }        

    return NDIS_STATUS_SUCCESS;
}

/******************************************************************************
 *
 *  Name: InitSyncObjects()
 *
 *  Description: Syncronization object initialization function
 *
 *  Arguments:  
 *      PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value: 
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_FAILURE
 * 
 *  Notes:        
 *
 *****************************************************************************/
NDIS_STATUS
InitSyncObjects(
  IN PMRVDRV_ADAPTER Adapter
  )
{  

        DWORD         threadID;  
        DWORD         waitStatus;
    MSGQUEUEOPTIONS msgOptions = {0};   
	HANDLE hNotifications = NULL;
#define QUEUE_ENTRIES   3
#define MAX_NAMELEN     200
#define QUEUE_SIZE      (QUEUE_ENTRIES * (sizeof(POWER_BROADCAST) + MAX_NAMELEN))


  // Allocate spinlock
  //NdisAllocateSpinLock(&Adapter->TxSpinLock); 
    
  InitializeCriticalSection(&Adapter->TxCriticalSection);
  InitializeCriticalSection(&Adapter->IntCriticalSection);
        
  Adapter->hControllerInterruptEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
  Adapter->hPMUEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
  Adapter->TxResourceControlEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
  msgOptions.dwSize = sizeof(MSGQUEUEOPTIONS);
  msgOptions.dwFlags = 0;
  msgOptions.dwMaxMessages = QUEUE_ENTRIES;
  msgOptions.cbMaxMessage = sizeof(POWER_BROADCAST) + MAX_NAMELEN;
  msgOptions.bReadAccess = TRUE;
  Adapter->hPowerNotify= CreateMsgQueue(NULL, &msgOptions);
  if (!Adapter->hPowerNotify) {
      DWORD dwErr = GetLastError();
      RETAILMSG(1, (TEXT("PMU ERR: CreateMessageQueue ERROR:%d\n"), dwErr));
  }
  hNotifications = RequestPowerNotifications(Adapter->hPowerNotify, PBT_TRANSITION); // Flags
  if (!hNotifications) {
      DWORD dwErr = GetLastError();
      RETAILMSG(TRUE, (TEXT("PMU ERR:RequestPowerNotifications ERROR:%d\n"), dwErr));
  }

//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)MrvSdioIstThread,
                                                      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 SDIO
  // Whenever we get an interrupt from SDIO device, we start
  // a timer to eventually form a DPC to handle interrupts. This
  // timer based DPC here is MrvDrvSdioIntTimerHandler().
#if 0 //dralee
  NdisMInitializeTimer(
    &Adapter->MrvDrvSdioIntTimer,
    Adapter->MrvDrvAdapterHdl,
    (PNDIS_TIMER_FUNCTION)MrvDrvSdioIntTimerHandler,
    (PVOID)Adapter
    ); 
#endif

  //Adapter->MrvDrvSdioIntTimerIsSet = FALSE;

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

  Adapter->MrvDrvSdioCheckFWReadyTimerIsSet = FALSE;   


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

  Adapter->RetQTimerIsSet = 0;   
#endif


#endif // SDIO

  ///crlo:modify-RETQ_TIMER ++
#ifndef SDIO
#ifdef RETQ_TIMER
  NdisMInitializeTimer(
    &Adapter->MrvRetQTimer,
    Adapter->MrvDrvAdapterHdl,
    (PNDIS_TIMER_FUNCTION)MrvRetQTimerFunction,
    (PVOID)Adapter
    );

  Adapter->RetQTimerIsSet = 0;   
#endif
#endif ///ndef SDIO
  ///crlo:modify-RETQ_TIMER --


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

#ifdef CONFIG_WLAN_DHCP_PROXY
  // Initialize the timer for command
  NdisMInitializeTimer(
      &Adapter->DHCPProxyRxPktTimer,
      Adapter->MrvDrvAdapterHdl,
      (PNDIS_TIMER_FUNCTION) wlan_DHCPProxyRxPktTimerFunc,
      (PVOID)Adapter
      );
    Adapter->DHCPProxyRxPktTimerSet = FALSE;
#endif    
  // 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;   

	NdisMInitializeTimer(
		&Adapter->MrvDrvRssiHighTimer,
		Adapter->MrvDrvAdapterHdl,
		(PNDIS_TIMER_FUNCTION) MrvDrvRssiHighTimerFunction,
		(PVOID)Adapter
		);
    Adapter->RssiHighTimerIsSet = FALSE;
#ifdef TX_PRY_Q  
       InitializeTxNodeQ(Adapter);
#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 


    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 SDIO
  //   #ifndef MRVL_WINCE50
  //      NdisAllocateSpinLock(&Adapter->lDPCLock);
  //   #endif
       //NdisAllocateSpinLock(&Adapter->lDPCPendingLock);
  //#endif  //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-

⌨️ 快捷键说明

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