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

📄 lan91c96_miniport.c

📁 ARM9基于WINDOWSCE的BSP源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 *
 *
 *Description:
 *              Functions exposed to the NDIS wrapper, ie., MiniportXXX functions.
 *
 *
 */
#include <Ndis.h>
#include <PKFuncs.h>
#include "LAN91C96_Adapter.h"
#include "LAN91C96_Proto.h"
#define ZQ 0
extern  NDIS_STATUS CopyInfo            (UCHAR *, UCHAR *, UINT, UINT, UINT  *, UINT  *);
extern  void        BackOut             (MINIPORT_ADAPTER *Adapter);
extern  BOOLEAN     AdapterReset        (MINIPORT_ADAPTER *);

/*
 Function Name : LAN91C96-MiniportHalt       
 Description   :
                    MiniportHalt is a required function that de-allocates resources 
                    when the network adapter is removed and halts the network adapter
 Parameters    :    
                  NDIS_HANDLE AdapterContext - Specifies the handle to a 
                                                miniport-allocated context area 
 Return Value  :
                  VOID
 */
VOID            LAN91C96_MiniportHalt           (NDIS_HANDLE AdapterContext)
{
    PMINIPORT_ADAPTER   Adapter = (MINIPORT_ADAPTER *) AdapterContext;
    BackOut(Adapter);
    return;
}


/*
 Function Name : LAN91C96_MiniportQueryInformation
 Description   : This function is a required function 
     that returns information about the capabilities 
     and status of the driver and/or its network adapter.
 Parameters    :
    NDIS_HANDLE AdapterContext - Handle to the adapter structure
    NDIS_OID    Oid - OID code designation the query operation that the driver should carr out
    PVOID       InformationBuffer - pointer to the buffer in which the driver return the value
    ULONG       InformationBufferLength - lenght of the buffer
    PULONG      BytesWritten - number of bytes the driver is returning
    PULONG      BytesNeeded - additional bytes, if needed, to satisfy the query.
 Return Value  :
            NDIS_STATUS Status
 */
NDIS_STATUS     LAN91C96_MiniportQueryInformation(
                                                        NDIS_HANDLE AdapterContext,
                                                        NDIS_OID    Oid,
                                                        PVOID       InformationBuffer,
                                                        ULONG       InformationBufferLength,
                                                        PULONG      BytesWritten,
                                                        PULONG      BytesNeeded
                                                 )
{
    MINIPORT_ADAPTER  *Adapter     = (MINIPORT_ADAPTER *) AdapterContext;
    NDIS_STATUS        Status      = NDIS_STATUS_SUCCESS;
    NDIS_OID           ReturnData;
    void              *Source      = &ReturnData;
    UINT               BytesToMove = sizeof(NDIS_OID);
        
    
    RETAILMSG(ZONE_INIT, (TEXT("LAN91C96 ==> MiniportQuery Information OID=%x, "), Oid));
    switch(Oid)
    {
                
        case OID_GEN_SUPPORTED_LIST:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_SUPPORTED_LIST\r\n")));
                Source      = (void *) &GlobalObjects;
                BytesToMove = sizeof(GlobalObjects);
                break;
                
        case OID_GEN_MEDIA_SUPPORTED:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MEDIA_SUPPORTED\r\n")));
                ReturnData = NdisMedium802_3;
                break;
                
        case OID_GEN_MEDIA_IN_USE:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MEDIA_IN_USE\r\n")));
                ReturnData = NdisMedium802_3;
                break;
                
        case OID_GEN_MAXIMUM_LOOKAHEAD:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_LOOKAHEAD\r\n")));
                ReturnData = MAX_LOOKAHEAD_SIZE;
                break;

        case OID_GEN_MAXIMUM_FRAME_SIZE:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_FRAME_SIZE\r\n")));
                ReturnData = MAX_FRAME_DATA_SIZE;
                break;          
       
        case OID_GEN_LINK_SPEED:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_LINK_SPEED\r\n")));
                ReturnData = 100000;
                break;          
       
        case OID_GEN_TRANSMIT_BUFFER_SPACE: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_TRANSMIT_BUFFER_SPACE\r\n")));
                ReturnData = MAX_FRAME_SIZE;
                break;
                
        case OID_GEN_RECEIVE_BUFFER_SPACE: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_RECEIVE_BUFFER_SPACE\r\n")));
                ReturnData = TOTAL_BUFFER_SIZE;         
                break;
                
        case OID_GEN_TRANSMIT_BLOCK_SIZE: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_TRANSMIT_BLOCK_SIZE\r\n")));
                ReturnData = MAX_FRAME_SIZE;
                break;
                
        
        case OID_GEN_RECEIVE_BLOCK_SIZE: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_RECEIVE_BLOCK_SIZE\r\n")));
                ReturnData = MAX_FRAME_SIZE;
                break;
                
       
        case OID_GEN_VENDOR_ID:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_VENDOR_ID\r\n")));
                ReturnData = 0;
                NdisMoveMemory((void *) &ReturnData,(void *) &Adapter->MACAddress,      3);
                break;
                
        case OID_GEN_VENDOR_DESCRIPTION: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_VENDOR_DESCRIPTION\r\n")));
                Source      = (void *) DRV_VENDOR_NAME;
                BytesToMove = SIZE_DRV_VENDOR_NAME;
                break;
                
        case OID_GEN_CURRENT_LOOKAHEAD:  
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_CURRENT_LOOKAHEAD\r\n")));
                ReturnData = Adapter->LookAhead;
                break;
                
        case OID_GEN_DRIVER_VERSION:  
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_DRIVER_VERSION\r\n")));
                BytesToMove = 2;
                ReturnData  = DRIVER_NDIS_VERSION;
                break;
                      
        case OID_GEN_MAXIMUM_TOTAL_SIZE:  
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_TOTAL_SIZE\r\n")));
                ReturnData = MAX_FRAME_SIZE;
                break;
        
        case OID_GEN_MAC_OPTIONS: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MAC_OPTIONS\r\n")));
                ReturnData = NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
                        NDIS_MAC_OPTION_RECEIVE_SERIALIZED  |
                        NDIS_MAC_OPTION_NO_LOOPBACK;
                break;
                
                
        case OID_802_3_PERMANENT_ADDRESS:
                RETAILMSG(ZONE_INIT, (TEXT("OID_802_3_PERMANENT_ADDRESS\r\n")));
                Source      = (void *) &Adapter->MACAddress;
                BytesToMove = MAC_ADDRESS_SIZE;
                break;
                
    case OID_802_3_CURRENT_ADDRESS: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_802_3_CURRENT_ADDRESS\r\n")));
                Source      = (void *) &Adapter->MACAddress;
                BytesToMove = MAC_ADDRESS_SIZE;
                break;
                
        case OID_802_3_MULTICAST_LIST:
                RETAILMSG(ZONE_INIT, (TEXT("OID_802_3_MULTICAST_LIST\r\n")));
                BytesToMove = Adapter->MulticastTable.MulticastTableEntryCount 
                        * ETH_LENGTH_OF_ADDRESS;
                Source = (void *) Adapter->MulticastTable.MulticastTableEntry;
                break;
                
        case OID_802_3_MAXIMUM_LIST_SIZE: 
                RETAILMSG(ZONE_INIT, (TEXT("OID_802_3_MAXIMUM_LIST_SIZE\r\n")));
                ReturnData = MAX_MULTICAST_ADDRESS;
                break;

        case OID_802_3_RCV_ERROR_ALIGNMENT:
                RETAILMSG(ZONE_INIT, (TEXT("OID_802_3_RCV_ERROR_ALIGNMENT\r\n")));
                ReturnData = Adapter->Stat_AlignError;          
                break;
                
        case OID_802_3_XMIT_ONE_COLLISION:
                RETAILMSG(ZONE_INIT, (TEXT("OID_802_3_XMIT_ONE_COLLISION\r\n")));
                ReturnData = Adapter->Stat_SingleColl;
                break;          
        
        case OID_802_3_XMIT_MORE_COLLISIONS:
                RETAILMSG(ZONE_INIT, (TEXT("OID_802_3_XMIT_MORE_COLLISIONS\r\n")));
                ReturnData = Adapter->Stat_MultiColl;
                break;
                
        case OID_GEN_MEDIA_CONNECT_STATUS:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MEDIA_CONNECT_STATUS\r\n")));
                if(Adapter->LinkStatus == MEDIA_DISCONNECTED)
                {
                        ReturnData = NdisMediaStateDisconnected;
                }
                else
                {
                        ReturnData = NdisMediaStateConnected;
                }
                break;

        case OID_GEN_VENDOR_DRIVER_VERSION:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_VENDOR_DRIVER_VERSION\r\n")));
                ReturnData = ((DRIVER_NDIS_MINOR_VERSION >> 16 ) | 
                        DRIVER_NDIS_MAJOR_VERSION);
                break;
                
        case OID_GEN_MAXIMUM_SEND_PACKETS:
                RETAILMSG(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_SEND_PACKETS\r\n")));
                ReturnData = 1;
                break;

        case OID_GEN_XMIT_OK:
                ReturnData = Adapter->Stat_TxOK;
                break;          

        case OID_GEN_RCV_OK:
                ReturnData = Adapter->Stat_RxOK;
                break;

        case OID_GEN_XMIT_ERROR:
                ReturnData = Adapter->Stat_TxError;
                break;

        case OID_GEN_RCV_ERROR:
                ReturnData = Adapter->Stat_RxError;
                break;

        case OID_GEN_RCV_NO_BUFFER:
                ReturnData = Adapter->Stat_RxOvrn;
                break;

        case OID_GEN_HARDWARE_STATUS:
                if (Adapter->State == NORMAL_STATE)
                                ReturnData = NdisHardwareStatusReady;
                else
                {
                        if(Adapter->State == INITIALIZING_STATE)
                                ReturnData = NdisHardwareStatusNotReady;
                        if(Adapter->State == RESET_STATE)

⌨️ 快捷键说明

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