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

📄 oidproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
    case OID_GEN_CURRENT_LOOKAHEAD:
        GenericULONG = (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE - MRVDRV_ETH_HEADER_SIZE;
        DBGPRINT(DBG_RXDATA, ("OID: Return OID_GEN_CURRENT_LOOKAHEAD to %d\n", 
            MRVDRV_MAXIMUM_ETH_PACKET_SIZE- MRVDRV_ETH_HEADER_SIZE));
        break;

    
    case OID_GEN_MAXIMUM_TOTAL_SIZE:
    case OID_GEN_RECEIVE_BLOCK_SIZE:
    case OID_GEN_TRANSMIT_BLOCK_SIZE:
        ///crlo:MTU ++
#ifdef IF_GSPI
        GenericULONG = (ULONG)MRVDRV_MTU_TOTAL;
        
#else
        GenericULONG = (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE;
#endif
        ///crlo:MTU --
        break;

    case OID_GEN_LINK_SPEED:
    // should never return 0mbps according to spec
    if ( Adapter->LinkSpeed == MRVDRV_LINK_SPEED_0mbps )
    {
      GenericULONG = (ULONG) MRVDRV_LINK_SPEED_1mbps;
    }
    else
    {
      GenericULONG = (ULONG) Adapter->LinkSpeed;
    }
              //NKDbgPrintfW(L"[Marvell]Query+OID_GEN_LINK_SPEED= %d", (ULONG)GenericULONG);  
         break;


    case OID_GEN_TRANSMIT_BUFFER_SPACE:

        GenericULONG = (ULONG)0;
        break;


  case OID_GEN_RECEIVE_BUFFER_SPACE:
//        GenericULONG = (ULONG) MRVDRV_MAXIMUM_ETH_PACKET_SIZE*MRVDRV_NUM_OF_RXPD; // 1514 * 8
        GenericULONG = (ULONG) MRVDRV_MAXIMUM_ETH_PACKET_SIZE; // 1514 * 8
        break;


    case OID_GEN_VENDOR_ID:

        MoveSource = (PVOID) (&Adapter->VendorID);
        MoveBytes = 4;
    break;


    case OID_GEN_VENDOR_DESCRIPTION:

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


    case OID_GEN_DRIVER_VERSION:

        GenericUSHORT = (USHORT) MRVDRV_DRIVER_VERSION;
        MoveSource = (PVOID)(&GenericUSHORT);
        MoveBytes = sizeof(GenericUSHORT);
        break;

  case OID_GEN_VENDOR_DRIVER_VERSION:
        // CF8381/8385 only uses the last 3 bytes
        GenericULONG = Adapter->FWReleaseNumber << 8;  
        break;

    //      WMI support
    case OID_GEN_SUPPORTED_GUIDS:
    MoveSource = (PUCHAR)&GUIDList;
        MoveBytes =  sizeof(GUIDList);
        break;

    //      Task Offload
    //case OID_GEN_TASK_OFFLOAD:
  //
    //  Status = NDIS_STATUS_NOT_SUPPORTED;
    //  break;

    case OID_802_3_MULTICAST_LIST:
		DBGPRINT(DBG_OID,("REQUEST - OID_802_3_MULTICAST_LIST \n"));
		if (InformationBufferLength < (Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS))
		{
			*BytesNeeded = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;
			return NDIS_STATUS_INVALID_LENGTH;
		}

		MoveSource = (PVOID) Adapter->MulticastList;
		MoveBytes = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;
		break;
/* tt
        //      The data must be a multiple of the Ethernet address size.
        if (InformationBufferLength < (Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS)){
            *BytesNeeded = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;
           

      return NDIS_STATUS_INVALID_LENGTH;
        }

        //      Save these new MC addresses to our adapter object
        NdisMoveMemory(InformationBuffer,
            Adapter->MulticastList,
            Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS);

        *BytesWritten = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;

    PrepareAndSendCommand(
      Adapter,
      HostCmd_CMD_MAC_MULTICAST_ADR,
      HostCmd_ACT_GEN_GET,
      HostCmd_OPTION_USE_INT,
      Oid,
      HostCmd_PENDING_ON_GET_OID,
      0,
      FALSE,
      NULL,
      NULL,
      NULL,
      NULL);

    if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES){

      return Status;
    }
    else {
    
      Status = NDIS_STATUS_PENDING;
    }
*/

//        //      Save the number of MC address in our adapter object
//        Adapter->NumOfMulticastMACAddr = (InformationBufferLength / ETH_LENGTH_OF_ADDRESS);
    case OID_802_3_PERMANENT_ADDRESS:

        ETH_COPY_NETWORK_ADDRESS((PCHAR) GenericArray, Adapter->PermanentAddr);

        MoveSource = (PVOID) (GenericArray);
        MoveBytes = MRVDRV_ETH_ADDR_LEN;

#ifdef DBG
    DBGPRINT(DBG_OID,("*** OID return permanent addr: %2x %2x %2x %2x %2x %2x ***\n", 
      Adapter->PermanentAddr[0],
      Adapter->PermanentAddr[1],
      Adapter->PermanentAddr[2],
      Adapter->PermanentAddr[3],
      Adapter->PermanentAddr[4],
      Adapter->PermanentAddr[5]));
#endif

        break;

    case OID_802_3_CURRENT_ADDRESS:

        ETH_COPY_NETWORK_ADDRESS(GenericArray, Adapter->CurrentAddr);

        MoveSource = (PVOID) (GenericArray);
        MoveBytes = MRVDRV_ETH_ADDR_LEN;
        break;

    case OID_802_3_MAXIMUM_LIST_SIZE:

        GenericULONG = (ULONG)MRVDRV_MAX_MULTICAST_LIST_SIZE;
        break;

    case OID_GEN_MAXIMUM_SEND_PACKETS:
 
    GenericULONG = 1;//MiniportSend only 

#ifdef USE_TX_QUEUE
        GenericULONG = 10;
#endif // #ifdef USE_TX_QUEUE
        break;

  case OID_GEN_MEDIA_CONNECT_STATUS:
        DBGPRINT(DBG_OID, ("Request - OID_GEN_MEDIA_CONNECT_STATUS : %d\n",
                            Adapter->MediaConnectStatus));
     #ifdef REASSOCIATE
       if ((Adapter->bIsReconnectEnable == TRUE) || 
            (Adapter->bIsBeaconLoseEvent == TRUE) || 
            (Adapter->bIsDeauthenticationEvent == TRUE)
            #ifdef ACTIVE_ROAMING
             ||(Adapter->bIsActiveRoaming== TRUE)
	     #endif
	   )
       {
         GenericLONG = (ULONG) NdisMediaStateConnected;
       }
      else
     #endif     
      {
         GenericLONG = (ULONG) Adapter->MediaConnectStatus;
      }
  
    MoveSource = (PVOID) (&GenericLONG);
    MoveBytes = sizeof(GenericLONG);

        break;

    case OID_PNP_CAPABILITIES:
        DBGPRINT(DBG_POWER,("OID_PNP_CAPABILITIES\n"));

        //return NDIS_STATUS_NOT_SUPPORTED;

/*
#ifdef UNDER_CE
*/                    
        PMCap.WakeUpCapabilities.MinMagicPacketWakeUp   = NdisDeviceStateUnspecified;
        PMCap.WakeUpCapabilities.MinPatternWakeUp       = NdisDeviceStateUnspecified;
        PMCap.WakeUpCapabilities.MinLinkChangeWakeUp    = NdisDeviceStateUnspecified;

/*
#else    
        // PNP support for XP is broken, return NDIS_STATUS_NOT_SUPPORTED for now
        return NDIS_STATUS_NOT_SUPPORTED;
#endif 
*/
        MoveSource = (PVOID) &PMCap;
        MoveBytes = sizeof(NDIS_PNP_CAPABILITIES);

        break;

    case OID_PNP_QUERY_POWER:
        DBGPRINT(DBG_POWER,("OID_PNP_QUERY_POWER\n"));

        //return NDIS_STATUS_NOT_SUPPORTED;

        NewPowerState = (NDIS_DEVICE_POWER_STATE)*(PNDIS_DEVICE_POWER_STATE)InformationBuffer;

        if ( NewPowerState == NdisDeviceStateUnspecified )
        {
            DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateUnspecified\n"));
        }
        else if ( NewPowerState == NdisDeviceStateD0 )
        {
            DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD0\n"));
        }
        else if ( NewPowerState == NdisDeviceStateD1  )
        {
            DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD1\n"));
        }
        else if ( NewPowerState == NdisDeviceStateD2 )
        {
            DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD2\n"));
        }
        else if ( NewPowerState == NdisDeviceStateD3 )
        {
            DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD3\n"));
        }
        else
        {
            DBGPRINT(DBG_POWER,("UNKNOWN POWER STATE REQUESTED %x\n", NewPowerState));
        }

    //      Determine if Station can suuport this state
    if( ( NewPowerState == NdisDeviceStateD0 ) || ( NewPowerState == NdisDeviceStateD3 ) )
    {
            DBGPRINT(DBG_POWER,("REQUESTED POWER STATE SUPPORTED!\n"));
      return NDIS_STATUS_SUCCESS;
    }
    else //         We don't know hot to handle NdisDeviceStateD2 yet
    {
            DBGPRINT(DBG_POWER,("REQUESTED POWER STATE NOT SUPPORTED %x\n",NewPowerState ));
      return NDIS_STATUS_NOT_SUPPORTED;
    }
        break;

#ifndef WHQL_FIX
  case OID_PNP_WAKE_UP_PATTERN_LIST:
        DBGPRINT(DBG_POWER | DBG_ALLEN,("REQUESTED POWER STATE NOT SUPPORTED %x\n",NewPowerState ));
      return NDIS_STATUS_NOT_SUPPORTED;
    break;
#endif

  case OID_GEN_PHYSICAL_MEDIUM:

    GenericULONG = (ULONG)NdisPhysicalMediumWirelessLan;
    break;

    case OID_802_11_NETWORK_TYPES_SUPPORTED:
        {
            NDIS_802_11_NETWORK_TYPE_LIST *pNetworkTypeList;

            DBGPRINT(DBG_OID, ("Requst - OID_802_11_NETWORK_TYPES_SUPPORTED ****\n"));
            
            if( InformationBufferLength < sizeof(NDIS_802_11_NETWORK_TYPE_LIST) )
            {
          *BytesNeeded = sizeof(NDIS_802_11_NETWORK_TYPE_LIST);
          return NDIS_STATUS_INVALID_LENGTH;
            }

            // only 1 item
            pNetworkTypeList = (NDIS_802_11_NETWORK_TYPE_LIST *)InformationBuffer;
            pNetworkTypeList->NumberOfItems = 1;
            pNetworkTypeList->NetworkType[0] = Ndis802_11DS;

    *BytesWritten = sizeof(NDIS_802_11_NETWORK_TYPE_LIST);
    return NDIS_STATUS_SUCCESS;
/* tt
            MoveBytes = sizeof(NDIS_802_11_NETWORK_TYPE_LIST);
*/
        }
        break;

  case OID_802_11_NETWORK_TYPE_IN_USE:

    //DBGPRINT(DBG_OID,("REQUEST - OID_802_11_NETWORK_TYPE_IN_USE ****\n"));
    if( InformationBufferLength < sizeof(NDIS_802_11_NETWORK_TYPE) ){
      *BytesNeeded = sizeof(NDIS_802_11_NETWORK_TYPE);
      return NDIS_STATUS_INVALID_LENGTH;
    }     
    GenericULONG = (ULONG)Ndis802_11DS;
    break;

  case OID_802_11_BSSID:
    
    //DBGPRINT(DBG_OID,("REQUEST - OID_802_11_BSSID ****\n"));
    
    // if the CurrentBSSID is a NULL string
    if ( NdisEqualMemory(Adapter->CurrentBSSID, 
               Adapter->NullBSSID, 
               MRVDRV_ETH_ADDR_LEN) )
    {
      Status = NDIS_STATUS_ADAPTER_NOT_READY;
    }
    else if( InformationBufferLength < MRVDRV_ETH_ADDR_LEN )
    {
      
      *BytesNeeded = MRVDRV_ETH_ADDR_LEN;
      return NDIS_STATUS_INVALID_LENGTH;
    }
    else{
      MoveSource = (PVOID)Adapter->CurrentBSSID;
      MoveBytes = MRVDRV_ETH_ADDR_LEN;
    }
    break;

  case OID_802_11_SSID:
    
    DBGPRINT(DBG_OID,("REQUEST - OID_802_11_SSID ****\n"));
        
    if( InformationBufferLength < sizeof(NDIS_802_11_SSID))
    {
      *BytesNeeded = sizeof(NDIS_802_11_SSID);
      return NDIS_STATUS_INVALID_LENGTH;
    }   

    if ( NdisEqualMemory(&(Adapter->CurrentSSID), 
               &(Adapter->NullSSID), 
               sizeof(NDIS_802_11_SSID)))
    {
      MoveBytes = 0;
            DBGPRINT(DBG_OID,("Current SSID is null!\n"));
    }
    else
    {   
            DBGPRINT(DBG_OID,("Current SSID is %s\n", Adapter->CurrentSSID.Ssid));
      MoveSource = (PVOID)&Adapter->CurrentSSID;
      MoveBytes = sizeof(NDIS_802_11_SSID);
            // HexDump(DBG_OID, "CurrentSSID: ", (PUCHAR)&Adapter->CurrentSSID,
            //         sizeof(NDIS_802_11_SSID));
    }
    break;

  case OID_802_11_POWER_MODE:
    
    DBGPRINT(DBG_OID,("REQUEST - OID_802_11_POWER_MODE ****\n"));
    if( InformationBufferLength < sizeof(NDIS_802_11_POWER_MODE) )
    {
      *BytesNeeded = sizeof(NDIS_802_11_POWER_MODE);
      return NDIS_STATUS_INVALID_LENGTH;
    } 
    //Ling++, 012706, PSMode_B, For query OID_802_11_POWER_MODE when if( Adapter->PSMode == Ndis802_11PowerModeMAX_PSP)
    if((Adapter->PSMode==Ndis802_11PowerModeCAM)&&(Adapter->PSMode_B== Ndis802_11PowerModeMAX_PSP))
    {
              MoveSource = (PVOID)&Adapter->PSMode_B;
    }else
        {
                    MoveSource = (PVOID)&Adapter->PSMode;
        }   
    //MoveSource = (PVOID)&Adapter->PSMode;
   //Ling--, 012706 
    
    MoveBytes = sizeof(NDIS_802_11_POWER_MODE);  
    break;

 case OID_802_11_RSSI:
  {
    #ifdef NEW_RSSI
      ULONG ulTimeDiff;
      if( (ulTimeDiff=GetTickCount())>Adapter->ulRSSITickCount)
        {
                    ulTimeDiff=ulTimeDiff-Adapter->ulRSSITickCount;
        }
      else
        {
                   ulTimeDiff=0xFFFFFFFF-ulTimeDiff+Adapter->ulRSSITickCount; 
        }

    

⌨️ 快捷键说明

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