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

📄 cmdsend.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
 /******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
 *
 *  Purpose:    This module has implmentation of station command sending 
 *              function
 *
 *  $Author: schiu $
 *
 *  $Date: 2005/01/19 $
 *
 *  $Revision: #17 $
 *
 *****************************************************************************/

#include "precomp.h"

#ifdef WMM
static UCHAR WMM_IE[WMM_IE_LENGTH] = {0xDD,0x07,0x00,0x50,0xf2,0x02,0x00,0x01,0x00};
#endif
#ifdef WPA2
int SetupKeyMaterial(
    PMRVDRV_ADAPTER Adapter, 
    PHostCmd_DS_802_11_KEY_MATERIAL  pKeyMaterial, 
    USHORT option, 
    USHORT enable, 
    void *InformationBuffer);
#endif ///WPA2
/******************************************************************************
 *
 *  Name: PrepareAndSendCommand()
 *
 *  Description: Prepare and send host command to station
 *
 *  Arguments:  PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:
 *      NDIS_STATUS_RESOURCES
 *      NDIS_STATUS_SUCCESS
 * 
 *  Notes: Driver will prepare and send the command to station
 *
 *****************************************************************************/
NDIS_STATUS
PrepareAndSendCommand(
  IN PMRVDRV_ADAPTER Adapter,
  IN USHORT Cmd,
  IN USHORT CmdOption,
  IN USHORT INTOption,
  IN  NDIS_OID PendingOID,
  IN  USHORT PendingInfo,
  IN  USHORT BatchQNum,
  IN  BOOLEAN IsLastBatchCmd,
  IN  PULONG BytesWritten,
  IN  PULONG BytesRead,
  IN  PULONG BytesNeeded,
  IN  PVOID InformationBuffer
)
{
  //ULONG  i,j;
  USHORT Size = 0;
  PHostCmd_DS_GEN pCmdPtr;
  UCHAR ucTemp;
  CmdCtrlNode *pTempCmd;
  NDIS_STATUS Status;
  PNDIS_802_11_WEP pNewWEP;

  PHostCmd_DS_GET_HW_SPEC              pHWSpec;
  PHostCmd_DS_802_11_RESET             pReset;
  PHostCmd_DS_802_11_QUERY_STATUS      pStatus;
  PHostCmd_DS_802_11_QUERY_TRAFFIC     pTraffic;
  PHostCmd_DS_MAC_CONTROL              pControl;
  PHostCmd_DS_MAC_MULTICAST_ADR        pMCastAdr;
  PHostCmd_DS_802_11_GET_STAT          p11Stat;
  PHostCmd_DS_802_3_GET_STAT           p3Stat;
  PHostCmd_DS_802_11_DATA_RATE         pDataRate;
  PHostCmd_DS_802_11_PS_MODE           pPSMode;
  //PHostCmd_DS_802_11_SCAN              pScan;
  PHostCmd_DS_802_11_SET_WEP           pSetWEP;
  PHostCmd_DS_802_11_SNMP_MIB          pSNMPMIB;
  PHostCmd_DS_802_11_AUTHENTICATE    pAuthenticate;
  PHostCmd_DS_802_11_ASSOCIATE_EXT     pAsso;
  PHostCmd_DS_802_11_DISASSOCIATE      pDisasso;
  PHostCmd_DS_802_11_RF_ANTENNA    pAntenna;
  PHostCmd_DS_802_11_RF_TX_POWER       pRTP;
  PHostCmd_DS_802_11_DEAUTHENTICATE  pDeAuthenticate;
  PHostCmd_DS_802_11_AD_HOC_JOIN     pAdHocJoin;
  PHostCmd_DS_802_11_AD_HOC_START    pAdHocStart;
  PHostCmd_DS_802_11_RADIO_CONTROL   pRadioControl;
  PHostCmd_DS_802_11_RF_CHANNEL      pRFChannel;
  PHostCmd_DS_802_11_BAND_CONFIG       pBandConfig;
  PHostCmd_DS_802_11D_DOMAIN_INFO      pDomainInfo;
  PHostCmd_DS_802_11_KEY_MATERIAL      pKeyMaterial;
#ifdef WMM	
        PHostCmd_DS_802_11_WMM_ACK_POLICY    pWmmAckPolicy;
        PHostCmd_DS_802_11_WMM_GET_STATUS    pWmmGetStatus;
        POID_MRVL_DS_WMM_ACK_POLICY          pAckPolicy;
        ///POID_MRVL_DS_WMM_AC_STATUS           pAcStatus;
#endif    
#ifdef NEW_RSSI
       PHostCmd_DS_802_11_RSSI			prssi;
#endif
#ifdef AvoidOidSetScan
    BOOLEAN                            timerStatus;
#endif
#ifdef CCX_v4
/*	PHostCmd_DS_802_11_GET_TSF				pGetTSF;
	PHostCmd_DS_802_11_WMM_ADDTS			pAddTS;
	PHostCmd_DS_802_11_WMM_DELTS			pDelTS;
	PHostCmd_DS_802_11_WMM_QUEUE_CONFIG		pQueueCfg;
	PHostCmd_DS_802_11_WMM_QUEUE_STATS		pQueueStats;
*/
#endif ///CCX_v4

  // Get next free command control node
  
    pTempCmd = GetFreeCmdCtrlNode(Adapter);
  
    //AllenDBGPRINT(DBG_ALLEN, ("PrepareAndSendCommand _0 \n"));
  
  if( !pTempCmd) 
  {

  	//AllenDBGPRINT(DBG_ALLEN, ("PrepareAndSendCommand _1 \n"));
  
      ResetCmdBuffer(Adapter);
      return NDIS_STATUS_RESOURCES;
  }

  pTempCmd->ExpectedRetCode = GetExpectedRetCode(Cmd);
  pTempCmd->Next = NULL;

  //AllenDBGPRINT(DBG_ALLEN, ("PrepareAndSendCommand _2 \n"));

  // Set other command information
  SetCmdCtrlNode( 
      Adapter,
      pTempCmd, 
      PendingOID, 
      PendingInfo, 
      INTOption, 
      BatchQNum, 
      IsLastBatchCmd, 
      BytesWritten,
      BytesRead,
      BytesNeeded, 
      InformationBuffer
      );

  pCmdPtr = (PHostCmd_DS_GEN)pTempCmd->BufVirtualAddr;

  // Set sequnece number, command and INT option
  Adapter->SeqNum++;
  pCmdPtr->SeqNum = Adapter->SeqNum;
  pCmdPtr->Command = Cmd;
  pCmdPtr->Result = INTOption;

  //AllenDBGPRINT(DBG_ALLEN, ("PrepareAndSendCommand _2 \n"));
 
      /// V5DbgMsg( (L"   # pre: 0x%x (ps=%d, cfm=%d)\n", Cmd, Adapter->psState, Adapter->bPSConfirm) );

  // Check and prepare command
  switch( Cmd ) {

#ifdef BG_SCAN

	case HostCmd_CMD_802_11_BG_SCAN_CONFIG:

       	{
			POID_MRVL_DS_BG_SCAN_CONFIG   pBgCfg;
			PHostCmd_DS_802_11_BG_SCAN_CONFIG   pHostCmdBgScanCfg;
    
			//AllenDBGPRINT(DBG_ALLEN, ("HostCmd_CMD_802_11_BG_SCAN_CONFIG _1 \n"));

            		pBgCfg = (POID_MRVL_DS_BG_SCAN_CONFIG) Adapter->BgScanCfg;
			pHostCmdBgScanCfg = 	(PHostCmd_DS_802_11_BG_SCAN_CONFIG)(pTempCmd->BufVirtualAddr);

			NdisMoveMemory( (PUCHAR)(&(pHostCmdBgScanCfg->Action)), 
						       (PUCHAR)(&(pBgCfg->Action)), 
						       pBgCfg->CmdLen); 

			Size = pBgCfg->CmdLen + sizeof(USHORT)*4;       

			// Set command size
                     pCmdPtr->Size = Size;
/*
			{     
				ULONG i;
			
				//AllenDBGPRINT(DBG_ALLEN, ("pHostCmdBgScanCfg \n"));
			
				for (i=0; i<Size; i++)
				{
					if (((i %16) == 0) && i)
					{
						AllenDBGPRINT(DBG_ALLEN, ("\n"));
					}
					AllenDBGPRINT(DBG_ALLEN, ("%02x  ", *(((UCHAR *)(pHostCmdBgScanCfg))+ i)));
	       		}	
				AllenDBGPRINT(DBG_ALLEN, ("\n"));
			}
*/       				
        	}

        break;
		
    	case HostCmd_CMD_802_11_BG_SCAN_QUERY:

		TT_CMDPARSE_SEND_CMD_NO_ACTION( HostCmd_DS_802_11_BG_SCAN_QUERY, OID_MRVL_DS_BG_SCAN_QUERY, Flush );

		break;
#endif 

#ifdef PA_CFG_EXT
case HostCmd_CMD_802_11_POWER_ADAPT_CFG_EXT:
       	{
			POID_MRVL_DS_POWER_ADAPT_CFG_EXT   pPACfg;
			PHostCmd_DS_802_11_POWER_ADAPT_CFG_EXT   pHostCmdPACfg;
    
			//AllenDBGPRINT(DBG_ALLEN, ("HostCmd_CMD_802_11_BG_SCAN_CONFIG _1 \n"));

            		pPACfg = (POID_MRVL_DS_POWER_ADAPT_CFG_EXT) Adapter->PACfg;
			pHostCmdPACfg = 	(PHostCmd_DS_802_11_POWER_ADAPT_CFG_EXT)(pTempCmd->BufVirtualAddr);

                      #ifdef MRVL_DBG_PA_CFG_EXT
                            #ifdef MRVL_PRINT_DBG_MSG
                            if ( CmdOption == HostCmd_ACT_GET )
                             { 	                
			         MrvPrintFile("\n[Marvell]Get: HostCmd_CMD_802_11_POWER_ADAPT_CFG_EXT: \n");  						
                              MrvPrintFile("\n[Marvell]pPACfg->CmdLen=0x%x,pPACfg->Action=%d,pPACfg->EnablePA=%d,pPACfg->PowerAdaptGroup.Header.Type=0x%x !!\n",pPACfg->CmdLen,pPACfg->Action,pPACfg->EnablePA,pPACfg->PowerAdaptGroup.Header.Type);  							
                             }
                            #endif
	              #endif

			NdisMoveMemory( (PUCHAR)(&(pHostCmdPACfg->Action)), 
						       (PUCHAR)(&(pPACfg->Action)), 
						       pPACfg->CmdLen); 

			Size = pPACfg->CmdLen + sizeof(USHORT)*4;       

			// Set command size
                     pCmdPtr->Size = Size;
    				
	             #ifdef MRVL_DBG_PA_CFG_EXT
			    #ifdef MRVL_PRINT_DBG_MSG
                            MrvPrintFile("\t[Marvell]HostCmd_CMD_802_11_POWER_ADAPT_CFG_EXT:pHostCmdPACfg->Action= %d,pHostCmdPACfg->EnablePA= %d,pCmdPtr->Size=0x%x\n",pHostCmdPACfg->Action,pHostCmdPACfg->EnablePA,pCmdPtr->Size);
	                  #endif
	               #endif	
        	}

        break;
#endif

//tt ++ v5 firmware
	case HostCmd_CMD_802_11_SUBSCRIBE_EVENT:
    //ahan [2005-12-13]  ++dralee_20060217
        {
            PHostCmd_DS_802_11_SUBSCRIBE_EVENT    pCmdSubscribeEvent;

            pCmdSubscribeEvent = (PHostCmd_DS_802_11_SUBSCRIBE_EVENT)pCmdPtr;

            Size = sizeof(HostCmd_DS_802_11_SUBSCRIBE_EVENT);
            pCmdSubscribeEvent->Size = sizeof(HostCmd_DS_802_11_SUBSCRIBE_EVENT);

            /* Fill the command node with data in private structure */
            pCmdSubscribeEvent->Action = CmdOption;
            pCmdSubscribeEvent->Events = Adapter->EventRecord.EventMap;

            pCmdSubscribeEvent->RssiLow.Header.Type = TLV_TYPE_RSSI;
            pCmdSubscribeEvent->RssiLow.Header.Len  = TLV_PAYLOAD_SIZE;
            pCmdSubscribeEvent->RssiLow.RSSIValue   = Adapter->EventRecord.RSSILowValue;
            pCmdSubscribeEvent->RssiLow.RSSIFreq    = Adapter->EventRecord.RSSILowFreq;

            pCmdSubscribeEvent->SnrLow.Header.Type = TLV_TYPE_SNR;
            pCmdSubscribeEvent->SnrLow.Header.Len  = TLV_PAYLOAD_SIZE;
            pCmdSubscribeEvent->SnrLow.SNRValue    = Adapter->EventRecord.SNRLowValue;
            pCmdSubscribeEvent->SnrLow.SNRFreq     = Adapter->EventRecord.SNRLowFreq;

            pCmdSubscribeEvent->FailCnt.Header.Type = TLV_TYPE_FAILCOUNT;
            pCmdSubscribeEvent->FailCnt.Header.Len  = TLV_PAYLOAD_SIZE;
            pCmdSubscribeEvent->FailCnt.FailValue   = Adapter->EventRecord.FailValue;
            pCmdSubscribeEvent->FailCnt.FailFreq    = Adapter->EventRecord.FailFreq;

            pCmdSubscribeEvent->BcnMiss.Header.Type  = TLV_TYPE_BCNMISS;
            pCmdSubscribeEvent->BcnMiss.Header.Len   = TLV_PAYLOAD_SIZE;
            pCmdSubscribeEvent->BcnMiss.BeaconMissed = Adapter->EventRecord.BeaconMissed;
            pCmdSubscribeEvent->BcnMiss.Reserved     = Adapter->EventRecord.Reserved;

	     #ifdef SubEvent_RSSI_SNR_HIGH
            pCmdSubscribeEvent->RssiHigh.Header.Type = TLV_TYPE_RSSI;
            pCmdSubscribeEvent->RssiHigh.Header.Len  = TLV_PAYLOAD_SIZE;
            pCmdSubscribeEvent->RssiHigh.RSSIValue   = Adapter->EventRecord.RSSIHighValue;
            pCmdSubscribeEvent->RssiHigh.RSSIFreq    = Adapter->EventRecord.RSSIHighFreq;

            pCmdSubscribeEvent->SnrHigh.Header.Type = TLV_TYPE_SNR;
            pCmdSubscribeEvent->SnrHigh.Header.Len  = TLV_PAYLOAD_SIZE;
            pCmdSubscribeEvent->SnrHigh.SNRValue    = Adapter->EventRecord.SNRHighValue;
            pCmdSubscribeEvent->SnrHigh.SNRFreq     = Adapter->EventRecord.SNRHighFreq;
            #endif
            HexDump(DBG_SUBSCRIBEEVENT,"HostCmd_CMD_802_11_SUBSCRIBE_EVENT: ",
                         (PUCHAR)pCmdSubscribeEvent, sizeof(HostCmd_DS_802_11_SUBSCRIBE_EVENT));
        }
    //ahan [2005-12-13] ++dralee_20060217
		break;

#ifdef IF_GSPI
    case HostCmd_CMD_GSPI_BUS_CONFIG:
        {
            PHostCmd_DS_CMD_GSPI_BUS_CONFIG pCmdGSPIBusConfig;

            pCmdGSPIBusConfig = (PHostCmd_DS_CMD_GSPI_BUS_CONFIG)pCmdPtr;
            Size = sizeof(HostCmd_DS_CMD_GSPI_BUS_CONFIG);

            pCmdGSPIBusConfig->Action = CmdOption;

            if ( CmdOption == HostCmd_ACT_GEN_SET )
            {
                pCmdGSPIBusConfig->BusDelayMode = 0x06 | B_BIT_4;
                pCmdGSPIBusConfig->HostTimeDelayToReadPort = g_spi_dummy_clk_data*16;//1*16;
                pCmdGSPIBusConfig->HostTimeDelayToReadregister = g_spi_dummy_clk_reg*16;
            }

        }
        break;


#endif

#ifdef BCA
	case HostCmd_CMD_802_11_BCA_CONFIG_TIMESHARE:
		{
			PHostCmd_DS_802_11_BCA_TIMESHARE   pCmdBCATime;

			pCmdBCATime = (PHostCmd_DS_802_11_BCA_TIMESHARE)pCmdPtr;
			Size = sizeof(HostCmd_DS_802_11_BCA_TIMESHARE);

			pCmdBCATime->Action = CmdOption;

			if ( CmdOption == HostCmd_ACT_GEN_SET )
			{
				pCmdBCATime->TrafficType = (USHORT) Adapter->BTTrafficType;
				pCmdBCATime->TimeShareInterval = Adapter->BTTimeShareInterval;
				pCmdBCATime->BTTime = Adapter->BTTime;
			}
		}
		break;
#endif //BCA

	case HostCmd_CMD_802_11_LED_CONTROL:
		TT_CMDPARSE_SEND_CMD( HostCmd_DS_802_11_LED_CONTROL, OID_MRVL_DS_LED_CONTROL, NumLed );
		break;
		

⌨️ 快捷键说明

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