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

📄 request.c

📁 三星2410的BSP开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:  

Abstract:  
    


Functions:
    

    
--*/


#include <ndis.h>
#include <VMini.h>
#include "zone.h"


UCHAR   VendorDescription[] = "MICROSOFT NULL ETHER PORT";
DWORD	g_dwLookAhead		= VMINI_INDICATE_MAXIMUM - MAC_HEADER_SIZE;
DWORD	g_dwMediaStatus		= NDIS_STATUS_MEDIA_CONNECT;


////////////////////////////////////////////////////////////////////////////////
//  InternalVMiniQueryInformation()
//  We emulate 802.3 10Mbps.
//  VMiniQuerylInformation process a Query request for NDIS_OIDs that are 
//  specific to a binding about the mini-port.
//
//  Arguments:
//  MiniportAdapterContext -  a pointer to the adapter.
//  Oid                    -  the NDIS_OID to process.
//  InfoBuffer             -  a pointer into the NdisRequest->InformationBuffer
//                               into which store the result of the query.
//  BytesLeft              -  The number of bytes left in the InformationBuffer.
//  BytesNeeded            -  If there is not enough room in the information
//                               buffer then this will contain the number of 
//                               bytes needed to complete the request.
//  BytesWritten           -  A pointer to the number of bytes written into the
//                               InformationBuffer.
//
//
NDIS_STATUS
InternalVMiniQueryInformation(
    IN  NDIS_HANDLE         MiniportAdapterContext,
    IN  NDIS_OID            Oid,
    IN  PVOID               InformationBuffer,
    IN  ULONG               InformationBufferLength,
    OUT PULONG              BytesWritten,
    OUT PULONG              BytesNeeded
    )
{
    static NDIS_OID VMiniGlobalSupportedOids[] = 
    {
        OID_GEN_SUPPORTED_LIST,
        OID_GEN_HARDWARE_STATUS,
        OID_GEN_MEDIA_SUPPORTED,
        OID_GEN_MEDIA_IN_USE,
        OID_GEN_MEDIA_CONNECT_STATUS,
        OID_GEN_MAXIMUM_SEND_PACKETS,
        OID_GEN_VENDOR_DRIVER_VERSION,
        OID_GEN_MAXIMUM_LOOKAHEAD,
        OID_GEN_MAXIMUM_FRAME_SIZE,
        OID_GEN_MAC_OPTIONS,
        OID_GEN_PROTOCOL_OPTIONS,
        OID_GEN_LINK_SPEED,
        OID_GEN_TRANSMIT_BUFFER_SPACE,
        OID_GEN_RECEIVE_BUFFER_SPACE,
        OID_GEN_TRANSMIT_BLOCK_SIZE,
        OID_GEN_RECEIVE_BLOCK_SIZE,
        OID_GEN_VENDOR_ID,
        OID_GEN_VENDOR_DESCRIPTION,
        OID_GEN_CURRENT_PACKET_FILTER,
        OID_GEN_CURRENT_LOOKAHEAD,
        OID_GEN_DRIVER_VERSION,
        OID_GEN_MAXIMUM_TOTAL_SIZE,                 
        OID_GEN_XMIT_OK,
        OID_GEN_RCV_OK,
        OID_GEN_XMIT_ERROR,
        OID_GEN_RCV_ERROR,
        OID_GEN_RCV_NO_BUFFER,
        OID_802_3_PERMANENT_ADDRESS,
        OID_802_3_CURRENT_ADDRESS,
        OID_802_3_MULTICAST_LIST,
        OID_802_3_MAXIMUM_LIST_SIZE,
        OID_802_3_RCV_ERROR_ALIGNMENT,
        OID_802_3_XMIT_ONE_COLLISION,

#ifdef NDIS50_MINIPORT
        OID_PNP_CAPABILITIES,
        OID_PNP_QUERY_POWER,
        OID_PNP_SET_POWER,
#endif
        OID_802_3_XMIT_MORE_COLLISIONS
    };

    PVOID                   SourceBuffer;
    ULONG                   SourceBufferLength;
    PNDIS_OID               SupportedOidArray;
    INT                     SupportedOids;
    ULONG                   GenericUlong;
    USHORT                  GenericUshort;
    NDIS_STATUS             Status;
    UCHAR                   VendorId[4];
    PSTRUCT_VMINI           Adapter = MiniportAdapterContext;

#ifdef NDIS50_MINIPORT
    NDIS_PNP_CAPABILITIES   ndis_pnp_capablities;
#endif
    
    DEBUGMSG (ZONE_GET, (TEXT("VMini:: VMiniQueryInformation() OID = [0x%x] \r\n"),
        Oid));  

    Status              = NDIS_STATUS_SUCCESS;
    SupportedOidArray   = (PNDIS_OID)VMiniGlobalSupportedOids;
    SupportedOids       = sizeof(VMiniGlobalSupportedOids)/sizeof(ULONG);

    SourceBuffer        = &GenericUlong;    
    SourceBufferLength  = sizeof(ULONG);


    ////////////////////////////////////////////////////////////////////////////
    //  Switch on request type
    //
    
	switch (Oid) 
    {
        
        ////////////////////////////////////////////////////////////////
        
		case OID_GEN_MAC_OPTIONS:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_MAC_OPTIONS.\r\n")));
            GenericUlong = (ULONG)(NDIS_MAC_OPTION_TRANSFERS_NOT_PEND   |
                                NDIS_MAC_OPTION_RECEIVE_SERIALIZED      |
                                NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA     |
                                NDIS_MAC_OPTION_NO_LOOPBACK);
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_SUPPORTED_LIST:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_SUPPORTED_LIST.\r\n")));
            SourceBuffer        =   SupportedOidArray;
            SourceBufferLength  =   sizeof(VMiniGlobalSupportedOids);
            break;

        ////////////////////////////////////////////////////////////////
        //  NULL Ethernet is ALWAYS ready...
        //  

        case OID_GEN_HARDWARE_STATUS:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_HARDWARE_STATUS.\r\n")));                    
            GenericUlong = NdisHardwareStatusReady;                     
            break;

        ////////////////////////////////////////////////////////////////
        //  NULL Ethernet supports 802.3 only.
        //

        case OID_GEN_MEDIA_SUPPORTED:               
        case OID_GEN_MEDIA_IN_USE:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_MEDIA_SUPPORT | OID_GEN_MEDIA_IN_USE.\r\n")));
            GenericUlong = NdisMedium802_3;
            break;

    
        ////////////////////////////////////////////////////////////////

        case OID_GEN_MAXIMUM_LOOKAHEAD:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_MAXIMUM_LOOKAHEAD.\r\n")));
            GenericUlong = VMINI_INDICATE_MAXIMUM - MAC_HEADER_SIZE;
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_MAXIMUM_FRAME_SIZE:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_MAXIMUM_FRAME_SIZE.\r\n")));
            GenericUlong = VMINI_INDICATE_MAXIMUM - MAC_HEADER_SIZE;
        break;


        ////////////////////////////////////////////////////////////////

        case OID_GEN_MAXIMUM_TOTAL_SIZE:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_MAXIMUM_TOTAL_SIZE.\r\n")));
            GenericUlong = VMINI_INDICATE_MAXIMUM;
            break;


        ////////////////////////////////////////////////////////////////

        case OID_GEN_MEDIA_CONNECT_STATUS:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_MEDIA_CONNECT_STATUS.\r\n")));
			if (g_dwMediaStatus == NDIS_STATUS_MEDIA_CONNECT)
				GenericUlong = NdisMediaStateConnected;
			else
				GenericUlong = NdisMediaStateDisconnected;
            break;

        
		////////////////////////////////////////////////////////////////

        case OID_GEN_MAXIMUM_SEND_PACKETS:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_MAXIMUM_SEND_PACKETS.\r\n")));
            GenericUlong = MAX_SEND_PACKETS;
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_VENDOR_DRIVER_VERSION:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_VENDOR_DRIVER_VERSION.\r\n")));
            GenericUshort = (VMini_DRIVER_MAJOR_VERSION << 8) + VMini_DRIVER_MINOR_VERSION;
            SourceBuffer = &GenericUshort;
            SourceBufferLength = sizeof(USHORT);
            break;


        ////////////////////////////////////////////////////////////////
        //  Virtual Ethernet supports 10Mbps.
        //  in 100bps units
        //

        case OID_GEN_LINK_SPEED:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_LINK_SPEED.\r\n")));                                     
            GenericUlong = 10 * 10000; 
            break;
        
        case OID_GEN_TRANSMIT_BUFFER_SPACE:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_TRANSMIT_BUFFER_SPACE.\r\n")));
            GenericUlong = TRANSMIT_BUFFER_SIZE * TRANSMIT_BUFFERS;
            break;
            
        case OID_GEN_RECEIVE_BUFFER_SPACE:                  
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_RECEIVE_BUFFER_SPACE.\r\n")));
            GenericUlong = RECEIVE_BUFFER_SIZE * RECEIVE_BUFFERS;
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_TRANSMIT_BLOCK_SIZE:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_TRANSMIT_BLOCK_SIZE.\r\n")));
            GenericUlong = TRANSMIT_BUFFER_SIZE;
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_RECEIVE_BLOCK_SIZE:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_RECEIVE_BLOCK_SIZE.\r\n")));
            GenericUlong = RECEIVE_BUFFER_SIZE;
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_VENDOR_ID:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_VENDOR_ID.\r\n")));                  
            NdisMoveMemory(VendorId, Adapter->vm_PermanentNetworkAddress, 3);
            VendorId[3] = 0x0;
            SourceBuffer = VendorId;
            SourceBufferLength = sizeof(VendorId);
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_VENDOR_DESCRIPTION:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_VENDOR_DESCRIPTION...\r\n")));
            SourceBuffer = (PVOID)VendorDescription;
            SourceBufferLength = sizeof(VendorDescription);
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_DRIVER_VERSION:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_DRIVER_VERSION...\r\n")));
            GenericUshort = (VMini_DRIVER_MAJOR_VERSION << 8) + VMini_DRIVER_MINOR_VERSION;
            SourceBuffer = &GenericUshort;
            SourceBufferLength = sizeof(USHORT);
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_CURRENT_LOOKAHEAD:					
			GenericUlong = g_dwLookAhead; 
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_CURRENT_LOOKAHEAD. = %d\r\n"), GenericUlong));                   
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_CURRENT_PACKET_FILTER:                 
            GenericUlong = Adapter->vm_CurrentPacketFilter;            
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: Virtual Mini:: returning filter type: 0x%x\r\n"),
                GenericUlong));
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_CURRENT_PACKET_FILTER. = %d\r\n"), GenericUlong));
            break;    
        
        ////////////////////////////////////////////////////////////////

        case OID_GEN_XMIT_OK:                   
            GenericUlong = 0x00;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_XMIT_OK:: Returning BOGUS\r\n")));
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_RCV_OK:                    
            GenericUlong = 0x00;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_RCV_OK:: Returning BOGUS\r\n")));
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_XMIT_ERROR:                    
            GenericUlong = 0x00;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_XMIT_ERROR:: Returning BOGUS\r\n")));
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_RCV_ERROR:                 
            GenericUlong = 0x00;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_RCV_ERROR:: Returning BOGUS\r\n")));
            break;

        ////////////////////////////////////////////////////////////////

        case OID_GEN_RCV_NO_BUFFER:                 
            GenericUlong = 0x00;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_GEN_RCV_NO_BUFFER:: Returning BOGUS\r\n")));
            break;        
        
        ////////////////////////////////////////////////////////////////

        case OID_802_3_PERMANENT_ADDRESS:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_802_3_PERMANENT_ADDRESS.\r\n")));
            SourceBuffer = Adapter->vm_PermanentNetworkAddress;             
            SourceBufferLength = 6;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: PermanentNetworkAddress = %x%x%x%x%x%x\r\n"),
                Adapter->vm_PermanentNetworkAddress[0],
                Adapter->vm_PermanentNetworkAddress[1],
                Adapter->vm_PermanentNetworkAddress[2],
                Adapter->vm_PermanentNetworkAddress[3],
                Adapter->vm_PermanentNetworkAddress[4],
                Adapter->vm_PermanentNetworkAddress[5]));                   
            break;

        ////////////////////////////////////////////////////////////////

        case OID_802_3_CURRENT_ADDRESS:
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_802_3_CURRENT_ADDRESS...\r\n")));
            SourceBuffer = Adapter->vm_CurrentNetworkAddress;
            SourceBufferLength = 6;                 
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: CurrentNetworkAddress = %x%x%x%x%x%x\r\n"),
                Adapter->vm_CurrentNetworkAddress[0],
                Adapter->vm_CurrentNetworkAddress[1],
                Adapter->vm_CurrentNetworkAddress[2],
                Adapter->vm_CurrentNetworkAddress[3],
                Adapter->vm_CurrentNetworkAddress[4],
                Adapter->vm_CurrentNetworkAddress[5]));
            break;

        ////////////////////////////////////////////////////////////////                    

        case OID_802_3_MAXIMUM_LIST_SIZE:
            GenericUlong = Adapter->vm_MaxListSize; 
            DEBUGMSG (ZONE_GET, 
				(TEXT("VMini:: OID_802_3_MAXIMUM_LIST_SIZE = 0x%x\r\n"), GenericUlong));
            break;

		////////////////////////////////////////////////////////////////

		case OID_802_3_MULTICAST_LIST:					
			SourceBuffer	   = (PVOID)(Adapter->vm_MulticastAddresses);
			SourceBufferLength = Adapter->vm_MulticastAddressesInUse * 6;
			DEBUGMSG (ZONE_GET, 
				(TEXT("VMini: Qry Multicast returning [%d]bytes\r\n"),
				SourceBufferLength));
			break;

        ////////////////////////////////////////////////////////////////
                
        case OID_802_3_RCV_ERROR_ALIGNMENT:                 
            GenericUlong = 0x00;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_802_3_RCV_ERROR_ALIGNMENT:: Returning: BOGUS\r\n")));
            break;

        ////////////////////////////////////////////////////////////////

        case OID_802_3_XMIT_ONE_COLLISION:                  
            GenericUlong = 0x00;
            DEBUGMSG (ZONE_GET, (TEXT("VMini:: OID_802_3_XMIT_ONE_COLLISION:: Returning: BOGUS\r\n")));

⌨️ 快捷键说明

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