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

📄 hwacproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
                       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;
  }
 
//Ling++, 010906
//Mask the function HandleHostCmdFailure for the issue that OS will crash
//Reason: [1] For new method to QueryOID with a Command request, the retrun value will not be the original NDIS_STATUS_PENDING.
//            By using function TT_CMDPARSE_SYNC_STD_OID_QUERY_AND_RETURN, if we receive HostCmd_RESULT_NOT_SUPPORT :0x2, the function will handle this situation as below:
//                         if ( Adapter->nOidCmdResult != HostCmd_RESULT_OK )
//              {    
//              return NDIS_STATUS_NOT_ACCEPTED;
//               }
//        [2]Because driver will not  return NDIS_STATUS_PENDING by new method when QueryOID, if driver send NdisMQueryInformationComplete to OS under HandleHostCmdFailure, it will cause OS crash.
//
/*
    // Command is not successful, return failure, clean-up command, and exit
  if ( pRetPtr->Result != HostCmd_RESULT_OK ) 
  {   
    return HandleHostCmdFailure(Ret, Adapter, pRetPtr);
  }
*/  
//Ling--, 010906
                                 
  //dralee
  if ( pRetPtr->Result != HostCmd_RESULT_OK ) 
       RETAILMSG(1,(L"COMMAND FAIL:%x\n\r",Ret));

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

#ifdef WMM
    case HostCmd_RET_802_11_WMM_GET_STATUS:
        wmm_update_status_from_cmd_resp( Adapter );
        break;
#endif // WMM
//tt ++ v5 firmware
#ifdef BG_SCAN
        case HostCmd_RET_802_11_BG_SCAN_CONFIG:
        {
                    PHostCmd_DS_802_11_BG_SCAN_CONFIG   pCfg = (PHostCmd_DS_802_11_BG_SCAN_CONFIG) pRetPtr;

                    if ( pRetPtr->Result == HostCmd_RESULT_OK )
                    {
                        Adapter->bBgScanEnabled = pCfg->Enable;
                    }
                    else
                    {
                        Adapter->bBgScanEnabled = FALSE;
                    }
                    
                    //AllenDBGPRINT(DBG_ALLEN, ("BG_SCAN_CONFIG command return [0x%x] \n", pRetPtr->Result));
            
                     //RETAILMSG(1, (TEXT("Got BG_SCAN_CONFIG command return [0x%x]  \r\n"), pRetPtr->Result));          
        
                    //NKDbgPrintfW( L"[xx] Got BG_SCAN_CONFIG command return [0x%x]\n", pRetPtr->Result  );
            }            
            break;
            
        case HostCmd_RET_802_11_BG_SCAN_QUERY: 
        {
                //AllenDBGPRINT(DBG_ALLEN, ("HostCmd_RET_802_11_BG_SCAN_QUERY [0x%x] \n", pRetPtr->Result));
                     //RETAILMSG(1, (TEXT("HostCmd_RET_802_11_BG_SCAN_QUERY  [0x%x]  \r\n"), pRetPtr->Result));     

            if ( pRetPtr->Result == HostCmd_RESULT_OK )
                {
                        PHostCmd_DS_802_11_BG_SCAN_QUERY_RSP    pBgScanResponse; 
                        pBgScanResponse = (PHostCmd_DS_802_11_BG_SCAN_QUERY_RSP) pRetPtr;
                        {
                            PBSS_DESCRIPTION_SET_ALL_FIELDS     pDesc;
                            pDesc = (PBSS_DESCRIPTION_SET_ALL_FIELDS) (pBgScanResponse+1);
                            //NKDbgPrintfW( L"[xx] Got background scan results........\n" );
                            //NKDbgPrintfW( L"      BssSize=%d, NumOfSets=%d, ReportCond=0x%x\n", pBgScanResponse->BSSDescriptSize, pBgScanResponse->NumberOfSets, pBgScanResponse->ReportCondition);
                            //NKDbgPrintfW( L"      SSID=%c%c%c%c...\n", pDesc->SSID[0], pDesc->SSID[1], pDesc->SSID[2], pDesc->SSID[3] );
                        }
                        HandleBgScanResponse( pBgScanResponse, Adapter );
                       #ifdef ACTIVE_ROAMING
				if(Adapter->bActiveRoamingwithBGSCAN==TRUE)
		    	      {
		    	             EnableBgScan(Adapter, FALSE);
                                     EnableBgScan(Adapter, TRUE);
			       }				 
		       #endif	
                                if(Adapter->bPSEnableBGScan==TRUE)
                          	{
                                    Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
 		                    Adapter->PSMode_B = Ndis802_11PowerModeMAX_PSP;		
 		 		    Adapter->bPSEnableBGScan=FALSE;
                                    PSSleep(Adapter);  
                          	}
                }
                else
                        DBGPRINT( DBG_SCAN, ("[Mrvl] Failed to get background scan results!\n") );  
            }   
            break;
#endif 

#ifdef MRVL_DBG_PA_CFG_EXT
    	case HostCmd_RET_802_11_POWER_ADAPT_CFG_EXT:
        {
	     USHORT Size,i;		
	     POID_MRVL_DS_POWER_ADAPT_CFG_EXT   pACfg;		 
             PHostCmd_DS_802_11_POWER_ADAPT_CFG_EXT  pHostCmdPACfg;

	     pHostCmdPACfg = (PHostCmd_DS_802_11_POWER_ADAPT_CFG_EXT) pRetPtr;
  
	        if ( pRetPtr->Result == HostCmd_RESULT_OK )
               {
			 
                      if (pHostCmdPACfg->Action == HostCmd_ACT_GET)
                      {
                             NdisZeroMemory(Adapter->PACfg, LENGTH_PA_CFG);  
							 
         			 Size=pRetPtr->Size-sizeof(USHORT)*4;
                     	 pACfg = (POID_MRVL_DS_POWER_ADAPT_CFG_EXT) Adapter->PACfg;
                             NdisMoveMemory( (PUCHAR)(&(pACfg->Action)), 
         						       (PUCHAR)(&(pHostCmdPACfg->Action)), 
         						       Size); 
         			
                              pACfg->CmdLen =Size; 

				
					  
                            #ifdef MRVL_PRINT_DBG_MSG
                             MrvPrintFile("\n[Marvell]HostCmd_RET_802_11_POWER_ADAPT_CFG_EXT:Get OK !!\n");  			
                             MrvPrintFile("\n[Marvell]pACfg->CmdLen=0x%x,pACfg->Action=%d,pACfg->EnablePA=%d,pACfg->PowerAdaptGroup.Header.Type=0x%x, pACfg->PowerAdaptGroup.Header.Len=0x%x !!\n",pACfg->CmdLen,pACfg->Action,pACfg->EnablePA,pACfg->PowerAdaptGroup.Header.Type,pACfg->PowerAdaptGroup.Header.Len);  							
				 for(i=0;i<MAX_POWER_ADAPT_GROUP;i++)			 
				       MrvPrintFile("\n[Marvell]pACfg->PowerAdaptGroup.PA_Group[%d].PowerAdaptLevel=%d,pACfg->PowerAdaptGroup.PA_Group[%d].RateBitmap=0x%x !!\n",i,pACfg->PowerAdaptGroup.PA_Group[i].PowerAdaptLevel,i,pACfg->PowerAdaptGroup.PA_Group[i].RateBitmap);  	
                            #endif 
				 
                             }else
                      	{
          
                              #ifdef MRVL_PRINT_DBG_MSG
                                   MrvPrintFile("\n[Marvell]HostCmd_RET_802_11_POWER_ADAPT_CFG_EXT: Set OK !!\n");  
	                        #endif
                      	}	

	       }			  
        }
       break;
#endif

#ifdef CIPHER_TEST
    case HostCmd_RET_802_11_KEY_ENCRYPT:
        TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_KEY_ENCRYPT, EncType, KeyDataLen );
        break;
    case HostCmd_RET_802_11_CRYPTO:
         {        
             PHostCmd_DS_802_11_CRYPTO cmdcry;
             USHORT   *a;
 
             cmdcry =  (PHostCmd_DS_802_11_CRYPTO)pRetPtr;
                
             RETAILMSG(1,(L"CMD RESPONSE--------------------\n\r"));
             RETAILMSG(1,(L"Enc:%x,Agm:%x,KL:%x\n\r",
                          cmdcry->EncDec,cmdcry->Algorithm,cmdcry->KeyLength) );
              
             a = (USHORT *)(&cmdcry->Key[0]); 
             RETAILMSG(1,(L"%4x,%4x,%4x,%4x,%4x,%4x,%4x,%4x\n\r",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7] ));
             //RETAILMSG(1,(L"--%4x,%4x,%4x,%4x,%4x,%4x,%4x,%4x\n\r",a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]));

             RETAILMSG(1,(L"T:%x,L:%x\n\r",
                          cmdcry->TLVBuf.Header.Type,cmdcry->TLVBuf.Header.Len ) );

             a = (USHORT *)(&cmdcry->TLVBuf.payload[0]); 
             RETAILMSG(1,(L"%4x,%4x,%4x,%4x,%4x,%4x,%4x,%4x\n\r",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7] ));
             //RETAILMSG(1,(L"--%4x,%4x,%4x,%4x,%4x,%4x,%4x,%4x\n\r",a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]));
         }
        TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_CRYPTO, EncDec, Algorithm );
        break;
#endif

//ahan [2005-12-13] ++dralee_20060217
    case HostCmd_RET_802_11_SUBSCRIBE_EVENT:
        {
            PHostCmd_DS_802_11_SUBSCRIBE_EVENT  pEventCmd;
            pEventCmd = (PHostCmd_DS_802_11_SUBSCRIBE_EVENT) pRetPtr;

            Adapter->SubscribeEvents = pEventCmd->Events;
            if (pEventCmd->Action == HostCmd_ACT_GET)
            {
                DBGPRINT(DBG_SUBSCRIBEEVENT, ("Adapter->SubscribeEvents = [%x]\n", 
                                              Adapter->SubscribeEvents));
            }
        }
        break;
//ahan [2005-12-13] ++dralee_20060217

#ifdef BCA
    case HostCmd_RET_802_11_BCA_CONFIG_TIMESHARE:
        TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_BCA_TIMESHARE, TrafficType, TimeShareInterval );
        break;
#endif //BCA
        
    case HostCmd_RET_802_11_LED_CONTROL:
        TT_CMDPARSE_CMD_RESP2( HostCmd_DS_802_11_LED_CONTROL, NumLed, data[0] );
        break;
        
#ifdef CAL_DATA
    case HostCmd_RET_802_11_CAL_DATA_EXT:
        TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_CAL_DATA_EXT, Revision, CalDataLen );
        break;
    case HostCmd_RET_802_11_CAL_DATA:
        TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_CAL_DATA, PAOption, Domain );
        break;
#endif //CAL_DATA

    case HostCmd_RET_802_11_PWR_CFG:
        TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_PWR_CFG, Enable, P2);
//      TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_DS_802_11_PWR_CFG, Enable, P2);
//      TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_PWR_CFG, P0, P1, P2 );
//      TT_CMDPARSE_SET_EVENT( Adapter );
        break;

    case HostCmd_RET_802_11_TPC_CFG:
        TT_CMDPARSE_CMD_RESP2(HostCmd_DS_802_11_TPC_CFG, Enable, P2);
//      TT_CMDPARSE_QUERY_BACKUP_CMD_RESP( Adapter, HostCmd_DS_802_11_TPC_CFG, Enable, P2);
//      TT_CMDPARSE_DUMP_DATA3( Adapter->OidCmdRespBuf, OID_MRVL_DS_TPC_CFG, P0, P1, P2 );
//      TT_CMDPARSE_SET_EVENT( Adapter );
/*      {
            PHostCmd_DS_802_11_TPC_CFG      pCmdResult;
            
            NKDbgPrintfW( L"-v5- CMD_RSP: TPC_CFG, Result=%d\n",
                pCmdResult->Result );
        }
*/      break;
        
    case HostCmd_RET_802_11_RATE_ADAPT_RATESET:
        TT_CMDPARSE_CMD_RESP2(HostCmd_RATE_ADAPT_RATESET, EnableHwAuto, Bitmap);
//      TT_CMDPARSE_QUERY_BA

⌨️ 快捷键说明

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