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

📄 oidproc.c

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

  return Status;
}

#endif // #ifdef WPA


/******************************************************************************
 *
 *  Name: MrvDrvQueryInformation()
 *
 *  Description: NDIS miniport get information handler
 *
 *  Conditions for Use: NDIS wrapper will call this handler to get device information
 *
 *  Arguments:
 *      IN NDIS_HANDLE MiniportAdapterContext
 *      IN NDIS_OID Oid
 *      IN PVOID InformationBuffer
 *      IN ULONG InformationBufferLength
 *      OUT PULONG BytesWritten
 *      OUT PULONG BytesNeeded
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_PENDING
 *      NDIS_STATUS_BUFFER_TOO_SHORT
 *      NDIS_STATUS_NOT_SUPPORTED
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
MrvDrvQueryInformation(
  IN NDIS_HANDLE MiniportAdapterContext,
  IN NDIS_OID Oid,
  IN PVOID InformationBuffer,
  IN ULONG InformationBufferLength,
  OUT PULONG BytesWritten,
  OUT PULONG BytesNeeded
  )
{
	//      String describing our adapter
	char VendorDescriptor[] = VENDORDESCRIPTOR;
	PMRVDRV_ADAPTER Adapter;

	//UCHAR VendorId[4];
	ULONGLONG GenericULONGLONG;
	ULONG GenericULONG;
	LONG GenericLONG;
	USHORT GenericUSHORT;
	UCHAR GenericArray[6];
	NDIS_STATUS Status;

	NDIS_PNP_CAPABILITIES PMCap;
	NDIS_DEVICE_POWER_STATE NewPowerState;
	// NDIS_PM_PACKET_PATTERN PMPattern;
	PNDIS_802_11_STATISTICS pn11Stat;
	// PUCHAR PUchar;

	PVOID MoveSource;
	ULONG MoveBytes;
	ULONG ulRequiredSize;
#ifdef WMM
	POID_MRVL_DS_WMM_STATE pWmmState;
#endif
	POID_MRVL_DS_GET_RX_INFO pGetRxInfo;

	//      Common variables for pointing to result of query
	MoveSource = (PVOID) (&GenericULONG);
	MoveBytes = sizeof(GenericULONG);
	//DBGPRINT(DBG_OID,("REQUEST - Enter MrvDrvQueryInformation - 0x%x \n", Oid));
	Adapter = (PMRVDRV_ADAPTER)(MiniportAdapterContext);


#ifdef DEEP_SLEEP 
    // In Deep Sleep Mode no packet can be sent out 
    //Ling++, 012706, DeepSleep, modify : under DeepSleep, only query Oid==OID_MRVL_DEEP_SLEEP can be executed
    // if (Adapter->IsDeepSleep)
   // {
   //   Status = NDIS_STATUS_FAILURE;
   // }

     if (Adapter->IsDeepSleepRequired || Adapter->IsDeepSleep)
    {
        
      if (Oid != OID_MRVL_DEEP_SLEEP)
        {     
                DBGPRINT(DBG_OID | DBG_ALLEN ,("Not OID_MRVL_DEEP_SLEEP OID\n"));
                return NDIS_STATUS_FAILURE;
        }       
    }   
   //Ling--, 012706  
#endif

#ifndef NDIS50_MINIPORT
	//      Check device removal status
	if( Adapter->SurpriseRemoved == TRUE ){
		return NDIS_STATUS_ADAPTER_REMOVED;
	}
#else
{
	#ifdef IF_SDIO
	//Ling++, 012706, DeepSleep, modify or remove this part for SDIO ? 
	if (!(Adapter->IsDeepSleepRequired)&&!(Adapter->IsDeepSleep))  
	{ 
		if ( sdio_IsFirmwareLoaded(Adapter) == FW_STATUS_READ_FAILED)
		{
			DBGPRINT(DBG_OID,("card removed !  ****\n"));
			return NDIS_STATUS_ADAPTER_REMOVED;       
		}    
	}      
	#elif defined(IF_GSPI)
	if ( spi_IsFirmwareLoaded(Adapter) == FW_STATUS_READ_FAILED)
	{
		DBGPRINT(DBG_OID,("card removed !  ****\n"));
		return NDIS_STATUS_ADAPTER_REMOVED;       
	} 
	#endif // IF_SDIO
 
}
#endif
 
	//      Initialize the result variables
	*BytesWritten = 0;
	*BytesNeeded = 0;
	Status = NDIS_STATUS_SUCCESS;

#ifdef UNDER_CE
	if ( Adapter->CurPowerState == NdisDeviceStateD3 )
	{
		// card powered off
		return NDIS_STATUS_ADAPTER_REMOVED;
	}
#endif // #ifdef UNDER_CE

//lykao, 061805
//RETAILMSG(1,(TEXT("[Marvell]+MrvDrvQueryInformation ")));
//NKDbgPrintfW(L"[Marvell]+MrvDrvQueryInformation Oid= 0x%x", (ULONG)Oid);          

	V5DbgMsg( (L"   > OID qry: 0x%x\n", Oid) );

	// Switch on request type
	switch (Oid)
	{
#ifdef PMKID_CACHE_CAP
    case OID_802_11_PMKID:
        {
            PNDIS_802_11_PMKID  pPmkid = (PNDIS_802_11_PMKID) InformationBuffer;

            DBGPRINT( DBG_OID|DBG_MACEVENT, ("QUERY - OID_802_11_PMKID\n") );

            if ( InformationBufferLength < sizeof(NDIS_802_11_PMKID) )
            {
                DBGPRINT(DBG_OID|DBG_MACEVENT, ("    Buffer too small, return.\n") );
                *BytesNeeded = sizeof(NDIS_802_11_PMKID);
                return NDIS_STATUS_INVALID_LENGTH;
            }

            pPmkid->Length = sizeof(NDIS_802_11_PMKID);
            pPmkid->BSSIDInfoCount = 0;

            return NDIS_STATUS_SUCCESS;
        }
        break;
        
    case OID_802_11_CAPABILITY:
        {
            PNDIS_802_11_CAPABILITY     pCap = (PNDIS_802_11_CAPABILITY) InformationBuffer;
            ULONG   nNeedLen;
            const ULONG nNumOfModes = 12;

            DBGPRINT( DBG_OID|DBG_MACEVENT, ("QUERY - OID_802_11_CAPABILITY\n") );

            nNeedLen = sizeof(NDIS_802_11_CAPABILITY) + 
                        ((nNumOfModes-1) * sizeof(NDIS_802_11_AUTHENTICATION_ENCRYPTION) );

            if (InformationBufferLength < nNeedLen)
            {
                DBGPRINT(DBG_OID|DBG_MACEVENT, ("    Buffer too small, return.\n") );
                *BytesNeeded = nNeedLen;
                return NDIS_STATUS_INVALID_LENGTH;
            }

            pCap->Length = nNeedLen;
            pCap->Version = 2;
            pCap->NoOfPmkid = MAX_PMKID_CACHE;
            pCap->NoOfAuthEncryptPairsSupported = nNumOfModes;

            DBGPRINT(DBG_OID|DBG_MACEVENT, ("    Copy data... [Len=%d, Pmkid=%d, Modes=%d]\n",
                        pCap->Length, pCap->NoOfPmkid, pCap->NoOfAuthEncryptPairsSupported ) );

            pCap->AuthEncryptSupported[0].AuthMode = Ndis802_11AuthModeOpen;
            pCap->AuthEncryptSupported[0].EncryptStatus = Ndis802_11EncryptionDisabled;

            pCap->AuthEncryptSupported[1].AuthMode = Ndis802_11AuthModeOpen;
            pCap->AuthEncryptSupported[1].EncryptStatus = Ndis802_11Encryption1Enabled;
            
            pCap->AuthEncryptSupported[2].AuthMode = Ndis802_11AuthModeShared;
            pCap->AuthEncryptSupported[2].EncryptStatus = Ndis802_11EncryptionDisabled;
            
            pCap->AuthEncryptSupported[3].AuthMode = Ndis802_11AuthModeShared;
            pCap->AuthEncryptSupported[3].EncryptStatus = Ndis802_11Encryption1Enabled;
            
            pCap->AuthEncryptSupported[4].AuthMode = Ndis802_11AuthModeWPA;
            pCap->AuthEncryptSupported[4].EncryptStatus = Ndis802_11Encryption2Enabled;

            pCap->AuthEncryptSupported[5].AuthMode = Ndis802_11AuthModeWPA;
            pCap->AuthEncryptSupported[5].EncryptStatus = Ndis802_11Encryption3Enabled;
            
            pCap->AuthEncryptSupported[6].AuthMode = Ndis802_11AuthModeWPAPSK;
            pCap->AuthEncryptSupported[6].EncryptStatus = Ndis802_11Encryption2Enabled;
            
            pCap->AuthEncryptSupported[7].AuthMode = Ndis802_11AuthModeWPAPSK;
            pCap->AuthEncryptSupported[7].EncryptStatus = Ndis802_11Encryption3Enabled;
            
            pCap->AuthEncryptSupported[8].AuthMode = Ndis802_11AuthModeWPA2;
            pCap->AuthEncryptSupported[8].EncryptStatus = Ndis802_11Encryption2Enabled;

            pCap->AuthEncryptSupported[9].AuthMode = Ndis802_11AuthModeWPA2;
            pCap->AuthEncryptSupported[9].EncryptStatus = Ndis802_11Encryption3Enabled;
            
            pCap->AuthEncryptSupported[10].AuthMode = Ndis802_11AuthModeWPA2PSK;
            pCap->AuthEncryptSupported[10].EncryptStatus = Ndis802_11Encryption2Enabled;

            pCap->AuthEncryptSupported[11].AuthMode = Ndis802_11AuthModeWPA2PSK;
            pCap->AuthEncryptSupported[11].EncryptStatus = Ndis802_11Encryption3Enabled;

            *BytesWritten = nNeedLen;

            return NDIS_STATUS_SUCCESS;
        }
        break;
#endif //PMKID_CACHE_CAP
#ifdef BG_SCAN
        case OID_MRVL_BG_SCAN_QUERY:
		{
			POID_MRVL_DS_BG_SCAN_CONFIG pOidBG;
			pOidBG = (POID_MRVL_DS_BG_SCAN_CONFIG)Adapter->BgScanCfg;

			if (Adapter->bBgScanEnabled)
				pOidBG->Enable = 1;
			else
				pOidBG->Enable = 0;

			MoveSource = (PVOID) (Adapter->BgScanCfg);
        		MoveBytes = Adapter->nBgScanCfg;
        	}		
            break;
#endif 
   
     case OID_MRVL_GET_RX_INFO:
	 {
	 	
	   if( InformationBufferLength < sizeof(OID_MRVL_DS_GET_RX_INFO) )
            {
                   *BytesNeeded = sizeof(OID_MRVL_DS_GET_RX_INFO);		   
                   return NDIS_STATUS_INVALID_LENGTH;
             }
              pGetRxInfo = (POID_MRVL_DS_GET_RX_INFO)InformationBuffer;
              pGetRxInfo->RXPDSNR = Adapter->SNR[TYPE_RXPD][TYPE_NOAVG] ;
	      pGetRxInfo->RXPDRate = Adapter->RxPDRate ;	

	      MoveBytes=sizeof(OID_MRVL_DS_GET_RX_INFO); 	  
              Status = NDIS_STATUS_SUCCESS; 
              *BytesWritten=sizeof(OID_MRVL_DS_GET_RX_INFO);  
	      return NDIS_STATUS_SUCCESS;		
     	}		
       break;

#ifdef PA_CFG_EXT
      case OID_MRVL_POWER_ADAPT_CFG_EXT:
	 {
	   
	 #ifdef MRVL_DBG_PA_CFG_EXT
                   #ifdef MRVL_PRINT_DBG_MSG
			   MrvPrintFile("\n[Marvell]Query: OID_MRVL_POWER_ADAPT_CFG_EXT: \n");  						
                        MrvPrintFile("\n[Marvell]sizeof(OID_MRVL_DS_POWER_ADAPT_CFG_EXT)=0x%x, InformationBufferLength=0x%x !!\n",sizeof(OID_MRVL_DS_POWER_ADAPT_CFG_EXT),InformationBufferLength);  							
	             #endif
	 #endif
	  GetPACFGValue(Adapter);   
         TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_POWER_ADAPT_CFG_EXT, OID_MRVL_POWER_ADAPT_CFG_EXT, 
         sizeof(OID_MRVL_DS_POWER_ADAPT_CFG_EXT), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
         TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_POWER_ADAPT_CFG_EXT, Action, SIZEOF_OID_DS_LEADING );
      	}	 
    break;
#endif	
//tt ++ v5 firmware
  case OID_MRVL_LED_CONTROL:
    TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_LED_CONTROL, OID_MRVL_LED_CONTROL, 
      sizeof(OID_MRVL_DS_LED_CONTROL), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
    TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_LED_CONTROL, NumLed, SIZEOF_OID_DS_LEADING );
    break;
    
#ifdef CAL_DATA
  case OID_MRVL_CAL_DATA:
    TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_CAL_DATA, OID_MRVL_CAL_DATA, 
      sizeof(OID_MRVL_DS_CAL_DATA), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
    TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_CAL_DATA, Reserved1[0], SIZEOF_OID_DS_LEADING );
    break;
  case OID_MRVL_CAL_DATA_EXT:
    TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_CAL_DATA_EXT, OID_MRVL_CAL_DATA_EXT, 
      sizeof(OID_MRVL_DS_CAL_DATA_EXT), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
    TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_CAL_DATA_EXT, Revision, SIZEOF_OID_DS_LEADING );
    break;
#endif //CAL_DATA

  case OID_MRVL_PWR_CFG:
    TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_PWR_CFG, OID_MRVL_PWR_CFG, 
      sizeof(OID_MRVL_DS_PWR_CFG), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
    TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_PWR_CFG, Enable, SIZEOF_OID_DS_LEADING );
    break;
  case OID_MRVL_TPC_CFG:
    TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_TPC_CFG, OID_MRVL_TPC_CFG, 
      sizeof(OID_MRVL_DS_TPC_CFG), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
    TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_TPC_CFG, Enable, SIZEOF_OID_DS_LEADING );
    break;
  case OID_MRVL_RATE_ADAPT_RATESET:
    TT_CMDPARSE_SYNC_OID( HostCmd_CMD_802_11_RATE_ADAPT_RATESET, OID_MRVL_RATE_ADAPT_RATESET, 
      sizeof(OID_MRVL_DS_RATE_ADAPT_RATESET), HostCmd_ACT_GET, HostCmd_PENDING_ON_GET_OID, BytesWritten );
    TT_CMDPARSE_QUERY_WAIT_COMPLETE_AND_RETURN( Adapter, OID_MRVL_DS_RATE_ADAPT_RATESET, EnableHwAuto, SIZEOF_OID_DS_LEADING );
    break;
//tt --

    case OID_GEN_MAC_OPTIONS:
        //      NOTE: Don't set NDIS_MAC_OPTION_RECEIVE_SERIALIZED if we
        //      are doing multipacket (ndis4) style receives.
        
    GenericULONG = (ULONG)NDIS_MAC_OPTION_NO_LOOPBACK |
        NDIS_MAC_OPTION_TRANSFERS_NOT_PEND;

    if ( Adapter->EnableQOS )
    {
      GenericULONG = GenericULONG | NDIS_MAC_OPTION_8021P_PRIORITY;
    }

    break;

    case OID_GEN_CURRENT_PACKET_FILTER:

  GenericULONG = Adapter->CurrentPacketFilter;
/* tt
        //      Verify the Length
        if (InformationBufferLength < 4){
            *BytesNeeded = 4;

 
            return (NDIS_STATUS_INVALID_LENGTH);
        }

        //      Now call the filter function to set the packet filter.
        NdisMoveMemory(InformationBuffer, (PVOID)&(Adapter->CurrentPacketFilter), sizeof(ULONG));
*/
    break;

    case OID_GEN_SUPPORTED_LIST:

        MoveSource = (PVOID) (MrvDrvGlobalSupportedOids);
        MoveBytes = sizeof(MrvDrvGlobalSupportedOids);
        break;


    case OID_GEN_HARDWARE_STATUS:

        GenericULONG = (ULONG)Adapter->HardwareStatus;
        break;


    case OID_GEN_MEDIA_SUPPORTED:

        MoveSource = (PVOID)MediaSupported;
        MoveBytes = sizeof(NDIS_MEDIUM); // need to change for 802.11
        break;

    case OID_GEN_MEDIA_IN_USE:
    GenericULONG = Adapter->MediaInUse;
        //MoveSource = (PVOID)MediaSupported;
        //MoveBytes = sizeof(NDIS_MEDIUM); // need to change for 802.11
        break;

    case OID_GEN_MAXIMUM_FRAME_SIZE:
  // this is a work around for the ping problem.
//        GenericULONG = (ULONG)(MRVDRV_MAXIMUM_ETH_PACKET_SIZE - MRVDRV_ETH_HEADER_SIZE);
        //GenericULONG = (ULONG)CF_MAX_PACKET_SIZE;
#ifdef IF_GSPI
        ///crlo:MTU ++
        ///If this value is incorrect, the TCP layer will not fragment the packets correct
        ///The sent packets will be discarded by the other side (eg: AP) and big-size ping (eg: 10000) will fail 
        GenericULONG = (ULONG)MRVDRV_MTU;
            ///GenericULONG = (ULONG)CF_MAX_PACKET_SIZE;
        ///crlo:MTU ++
#else
        GenericULONG = (ULONG)CF_MAX_PACKET_SIZE;
#endif ///IF_GSPI
        break;

    case OID_GEN_MAXIMUM_LOOKAHEAD:
        GenericULONG = (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE - MRVDRV_ETH_HEADER_SIZE;
        DBGPRINT(DBG_RXDATA, ("OID: Return OID_GEN_MAXIMUM_LOOKAHEAD to %d\n", 
            MRVDRV_MAXIMUM_ETH_PACKET_SIZE- MRVDRV_ETH_HEADER_SIZE));
        break;

⌨️ 快捷键说明

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