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

📄 hwacproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
    }
    #endif
#ifdef WMM_UAPSD
    else if(Adapter->WmmDesc.enabled && Adapter->TxPacketCount == 0 )
    {    
          Adapter->bNullFrameSent = 1;
          SendNullPacket(Adapter, MRVDRV_TxPD_POWER_MGMT_NULL_PACKET|MRVDRV_TxPD_POWER_MGMT_LAST_PACKET);
    }
#endif

    LeaveCriticalSection(&Adapter->TxCriticalSection);
      
    break;
#ifdef DEEP_SLEEP
  case MACREG_INT_CODE_DS_AWAKE:

    if (Adapter->IsDeepSleep == TRUE) 
    {
      Adapter->IsDeepSleep = FALSE;
    } 
    #ifdef SDIO
          regValue = 0x0;  //Configuration: Host Offset: 0x03
        
          sdStatus = If_WriteRegister(Adapter,
                                            //SD_IO_WRITE,          
                                            1,     
                                            HCR_HOST_CONFIGURATION_REGISTER,  //0x03 
                                            FALSE,
                                            &regValue,   // reg
                                            1);   
    
        if (!SD_API_SUCCESS(sdStatus)) {
             DBGPRINT(DBG_ERROR, 
                 ("OID_MRVL_DEEP_SLEEP Exit Deep Sleep Fail: 0x%08X  \n",sdStatus));
    }else{
      
      DBGPRINT(DBG_DEEPSLEEP , ("MarEvent MACREG_INT_CODE_DS_AWAKE clear reg 0x3=0\n"));
    }
        
    #elif defined(IF_SPI)
    //+dzj
        sbi_exit_deep_sleep_clean();
    #endif //SDIO

#ifdef CONFIG_WLAN_PMU
       wlan_PMUGetDeepSleepAwake();
#else
#ifdef DEBUG_PARA_ROAMING
#ifdef PARA_WPA_1X
if(!IsRoamingWantWZCWorkProperly()){
#endif
      if((!priv.bAutoRoamingInProcess) && (!priv.bManualRoamingInProcess))
      {
#ifdef DEBUG_PARA_ROAMING_PRINT
		RETAILMSG(1,(TEXT("Wake up auto-roaming!Caused by HWAC - Disassociated...\n")));
#endif
		// when disassociated, the number of bssid should be 0
		Adapter->ulNumOfBSSIDs = 0;
		Adapter->ulPSNumOfBSSIDs = 0;
		priv.bFastAutoRoaming = FALSE;
		SetEvent(priv.hAutoRoamingEvent);
      	}
#ifdef PARA_WPA_1X
      	}
#endif
#endif	
#endif
    
    break;
#endif

#ifdef HOST_SLEEP
  case MACREG_INT_CODE_HOST_SLEEP_AWAKE:
     {                       
#ifdef CONFIG_WLAN_PMU
       wlan_PMUHostSleepAwake();     
#endif
       DBGPRINT(DBG_MACEVENT,("HOST_WAKEUP!!\n"));

       #ifdef HOST_SLEEP_PS
       Adapter->HostPowerState = HTWK_STATE_FULL_POWER; 
       Adapter->HostSleepAwake = 1;
       UpdatePowerSaveState( Adapter, NULL, MACREG_INT_CODE_PS_AWAKE);
       Adapter->HostSleepAwake = 0;
       #else
       Adapter->bHostWakeupDevRequired = FALSE;
       #endif 
       PrepareAndSendCommand(
                             Adapter,
                             HostCmd_CMD_802_11_HOST_SLEEP_AWAKE_CONFIRM,
                             0,          
                             HostCmd_OPTION_USE_INT,
                             0,
                             HostCmd_PENDING_ON_NONE,
                             0,
                             FALSE,
                             NULL,
                             NULL,
                             NULL,
                             NULL); 
      Adapter->bPowerUpDevice = 1;
      RETAILMSG(1,(TEXT("MACEvent: HOST_WAKE_UP...")));
    }
    break;
#endif

// **********************************************************************************

  case MACREG_INT_CODE_CMD_FINISHED: // Command finished
    DBGPRINT(DBG_MACEVENT,("MACREG_INT_CODE_CMD_FINISHED\n"));
    HandleCommandFinishedEvent(Adapter);
    break;

    case MACREG_INT_CODE_WPA_MIC_ERR_UNICAST:
        DBGPRINT(DBG_MACEVENT, ("*** Received UNICAST MIC error ***\n"));
    HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_UNICAST); 
        break;

    case MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST:
        DBGPRINT(DBG_MACEVENT, ("*** Received MULTICAST MIC error ***\n"));
        HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST);
        break;
	case MACREG_INT_CODE_RSSI_LOW:
		{
			BOOLEAN timerStatus;
			RETAILMSG(1, (L"MACREG_INT_CODE_RSSI_LOW\n"));
			if(Adapter->RssiHighTimerIsSet)
			{
				NdisMCancelTimer(&Adapter->MrvDrvRssiHighTimer, &timerStatus);
				NdisMSetTimer(&Adapter->MrvDrvRssiHighTimer, 
					   MRVDRV_DEFAULT_RSSI_HIGH_TIME_OUT);

			}
			else
			{		
				NdisMSetTimer(&Adapter->MrvDrvRssiHighTimer, 
					   MRVDRV_DEFAULT_RSSI_HIGH_TIME_OUT);
				Adapter->RssiHighTimerIsSet = TRUE;
				ED_PostMessage(EXDATNAME_PRM, PRM_WLAN_SIGNAL_CHANGE_LOW, 0, 0);
			}
			break;
		}
    #ifdef SDIO
      case MACREG_INT_CODE_TX_DONE:
    HandleTxSingleDoneEvent(Adapter);
    break;
  #endif
  default:
  // PJG: not implemented in the firmware. (in original fw from marvell)
  case MACREG_INT_CODE_MIB_CHANGED:
  case MACREG_INT_CODE_INIT_DONE:
    break;
  }
  // RETAILMSG(1,(TEXT("[Marvell]-HandleMACEvent"))); 
  return;

}


/******************************************************************************
 *
 *  Name: MacEventDisconnected()
 *
 *  Description: MAC event handler for link lost condition, disassociation,
 *          deauthentication
 *
 *  Arguments:  PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
MacEventDisconnected(
  PMRVDRV_ADAPTER Adapter,
  UINT TimerValue,
  BOOLEAN PowerFlag
  )
{
  DBGPRINT(DBG_NEWPS | DBG_NEWCMD, ("MacEventDisconnected() \n"));
  //RETAILMSG(1, (TEXT("MacEventDisconnected()******** \n\r")));

  //  need to clean up Rx and Tx first  
#if 0 //dralee_20051128
  CleanUpSingleTxBuffer(Adapter);
  ResetRxPDQ(Adapter);
#endif

    if ((Adapter->MediaConnectStatus != NdisMediaStateDisconnected) && 
        (Adapter->PSMode == Ndis802_11PowerModeMAX_PSP))
    {
        PSWakeup(Adapter);
    }
 
    Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
#ifdef DEBUG_PARA_ROAMING_PRINT
	RETAILMSG(1,(TEXT("NdisMediaStateDisconnected is caused by MacEventDisconnected!...\n")));
#endif
	NdisMIndicateStatus(
		Adapter->MrvDrvAdapterHdl,
		NDIS_STATUS_MEDIA_DISCONNECT,
		(PVOID)NULL,
		0); 	
	NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);

  //dralee_20051128
  //  need to report disconnect event if currently associated
  //if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
  //  {       
        ResetDisconnectStatus(Adapter);
  /* dralee_20051128
      // send a scan command to get the latest AP list 
      PrepareAndSendCommand(
          Adapter,
          HostCmd_CMD_802_11_SCAN,
          0,
          HostCmd_OPTION_USE_INT,
          (NDIS_OID)0,
          HostCmd_PENDING_ON_NONE,
          0,
          FALSE,
          NULL,
          NULL,
          NULL,
          NULL);
    } // if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
  */
  return; 
}

/******************************************************************************
 *
 *  Name: HandleRFRegAccess()
 *
 *  Description: Patch offset 7 for rev 4 boards
 *
 *****************************************************************************/
#ifdef EVALBOARD_REV4_FIX
VOID HandleRFRegAccess(PHostCmd_DS_CMD_RF_REG_ACCESS pRegPtr, 
                       PMRVDRV_ADAPTER Adapter)
{
    if ( Adapter->bApplyEvalBoardRev4Patch == TRUE )
    {
        OID_MRVL_DS_RF_REGISTER_ACCESS  RegAccBuffer;

        // not applying the next access
        Adapter->bApplyEvalBoardRev4Patch = FALSE;

        RegAccBuffer.Oid = 0;
        RegAccBuffer.usOffset = 0x7;
        RegAccBuffer.usOffset = pRegPtr->Value | 0x1;

        DBGPRINT(DBG_WARNING, 
                ("EVALBOARD_REV4_FIX: set RF Reg offset 7 to 0x%x\n", 
                RegAccBuffer.usOffset));

        // Rev 4 board patch
        PrepareAndSendCommand(
          Adapter,
          HostCmd_CMD_RF_REG_ACCESS,
          HostCmd_ACT_SET,
          HostCmd_OPTION_USE_INT,
          0,
          0,
          0,
          FALSE,
          0,
          0,
          NULL,
          &RegAccBuffer);
    }
}
#endif // #ifdef EVALBOARD_REV4_FIX

/******************************************************************************
 *
 *  Name: HandleCommandFinishedEvent()
 *
 *  Description: Command finished event handler
 * *  Arguments:  PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_FAILURE
 *      NDIS_STATUS_NOT_ACCEPTED
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
HandleCommandFinishedEvent(
  IN PMRVDRV_ADAPTER Adapter)
{
  USHORT Ret;
  BOOLEAN  timerStatus;
  PHostCmd_DS_GEN            pRetPtr;
  PHostCmd_DS_GET_HW_SPEC        pHWSpec;
  PHostCmd_DS_802_11_QUERY_STATUS    pStatus;
  PHostCmd_DS_802_3_GET_STAT         p3Stat;
  PHostCmd_DS_802_11_SCAN_RSP      pScanResponse;
  PHostCmd_DS_802_11_ASSOCIATE_RESULT  pAssoResult;
  PHostCmd_DS_802_11_AD_HOC_RESULT   pAdHocResult;
  USHORT                 Channel=0;
  LONG                 lCurRSSI=0; 
  PHostCmd_DS_802_11_BAND_CONFIG     pBandConf;
  #ifndef MRVL_RFCHANNEL
    PHostCmd_DS_802_11_RF_CHANNEL        pRF; 
  #endif
  
  DBGPRINT(DBG_CMDRESP, ("HWAC: Received cmd resp for 0x%x\n",Adapter->CurCmd->ExpectedRetCode));
      //lykao, 061805
     // NKDbgPrintfW(L"[Marvell]+HandleCommandFinishedEvent Received cmd resp for 0x%x\n",Adapter->CurCmd->ExpectedRetCode);          

     //RETAILMSG(1,(TEXT("[Marvell]+HandleCommandFinishedEvent"))); 

  // Get the command buffer
  pRetPtr = (PHostCmd_DS_GEN)Adapter->CurCmd->BufVirtualAddr;   
  
  Ret = pRetPtr->Command;

  //NKDbgPrintfW(L"[Marvell]+HandleCommandFinishedEvent Received cmd resp for :0x%x pRetPtr->Command=0x%x,pRetPtr->Size=0x%x  \n",Adapter->CurCmd->ExpectedRetCode,pRetPtr->Command,pRetPtr->Size);          

  if ( !Adapter->CurCmd ) 
    {
       // False alarm
       DBGPRINT(DBG_CMDRESP | DBG_ERROR,
                ("**** hwacproc:  False trigger for command ****\n"));
       NdisAcquireSpinLock(&Adapter->FreeQSpinLock);
       ResetCmdBuffer(Adapter);  
       NdisReleaseSpinLock(&Adapter->FreeQSpinLock);

    return NDIS_STATUS_NOT_ACCEPTED;
  }


    if ( Adapter->CurCmd->ExpectedRetCode != pRetPtr->Command )
    {
        DBGPRINT(DBG_ERROR, ("ERROR: Received different cmd response from "
            "expected!! Expected: 0x%x, Got: 0x%x\n", 
            Adapter->CurCmd->ExpectedRetCode, pRetPtr->Command));
        ReturnCmdNode(Adapter, Adapter->CurCmd);
        Adapter->CurCmd = NULL;
        GetCmdFromQueueToExecute (Adapter);
  
        return NDIS_STATUS_NOT_ACCEPTED;
    }

  // Now we got response from FW, cancel the command timer
  if (Adapter->CommandTimerSet)
  {
  
    NdisMCancelTimer(
      &Adapter->MrvDrvCommandTimer, 
      &timerStatus);

    Adapter->CommandTimerSet = FALSE;
  }


  // if the current return code is not 80xx, it's a time-out command
  if ( (Ret & HostCmd_RET_NONE) == 0 ) 
  {
    DBGPRINT(DBG_CMDRESP,("*** hwacproc: Command timeout from FW!!\n"));

    ReturnCmdNode(Adapter, Adapter->CurCmd);
    Adapter->CurCmd = NULL;
    GetCmdFromQueueToExecute (Adapter);

    return NDIS_STATUS_FAILURE;
  }
 
  
    // Command is not successful, return failure, clean-up command, and exit
  if ( pRetPtr->Result != HostCmd_RESULT_OK ) 
  {   
    return HandleHostCmdFailure(Ret, Adapter, pRetPtr);
  }

  //dralee_20051119. Just force MrvSdioIstThread get CPU time
  //if MrvSdioIstThread occupy CmdQueueExeSection critical section.
//  EnterCriticalSection(&Adapter->CmdQueueExeSection);
//  LeaveCriticalSection(&Adapter->CmdQueueExeSection); 
 
  switch( Ret ) {

//tt ++ v5 firmware

    case HostCmd_RET_802_11_SUBSCRIBE_EVENT:
        {
            PHostCmd_DS_802_11_SUBSCRIBE_EVENT  pEventCmd;
            pEventCmd = (PHostCmd_DS_802_11_SUBSCRIBE_EVENT) pRetPtr;
            NKDbgPrintfW( L"### HostCmd_RET_802_11_SUBSCRIBE_EVENT, result=%x, event=%x\n", pEventCmd->Result, pEventCmd->Events );
        }
        break;

#ifdef BCA
    case HostCmd_RET_802_11_BCA_CONFIG_TIMESHARE:
        TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_BCA_TIMESHARE, TrafficType, TimeShareInterval );

⌨️ 快捷键说明

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