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

📄 lan91c111_miniport.c

📁 wince LAN91C11 网卡驱动 wince 4.2 5.0 6.0都可用,没有原来驱动引起PPPOE拨号引起网络崩溃问题
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*
*    Copyright (c) Standard MicroSystems Corporation.  All Rights Reserved.
*
*				    LAN91C111 Driver for Windows CE .NET
*
*							 Revision History
*_______________________________________________________________________________
*     Author		  Date		Version		Description
*_______________________________________________________________________________
* Pramod Bhardwaj  6/18/2002	  0.1		Beta Release 
* Pramod Bhardwaj	7/15/2002	  1.0       Release 
* Pramod Bhardwaj  1/22/2003      1.1		Removed some platform dependencies
* Pramod Bhardwaj  4/15/2003      2.0		Added support for alloc interrupt
*_______________________________________________________________________________
*
*
*Description:
*              Functions exposed to the NDIS wrapper, ie., MiniportXXX functions.
*
*
*/
#include <Ndis.h>
#include <PKFuncs.h>
#include "LAN91C111_Adapter.h"
#include "LAN91C111_Proto.h"

extern	NDIS_STATUS CopyInfo	(UCHAR *, UCHAR *, UINT, UINT, UINT  *, UINT  *);
extern  void        BackOut		(MINIPORT_ADAPTER *Adapter);
#define SMSC_32BIT_RW 1
/*
Function Name : LAN91C111-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		LAN91C111_MiniportHalt		(NDIS_HANDLE AdapterContext)
{
    PMINIPORT_ADAPTER   Adapter = (MINIPORT_ADAPTER *) AdapterContext;
    BackOut(Adapter);
	return;
}


/*
Function Name : LAN91C111_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 LAN91C111_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);
	
    
	PrintDebugMsg(ZONE_INIT, (TEXT("LAN91C111 ==> MiniportQuery Information OID=%x, "), Oid));
	switch(Oid)
    {
		
	case OID_GEN_SUPPORTED_LIST:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_SUPPORTED_LIST\r\n")));
        Source      = (void *) &GlobalObjects;
        BytesToMove = sizeof(GlobalObjects);
		break;
		
	case OID_GEN_MEDIA_SUPPORTED:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_MEDIA_SUPPORTED\r\n")));
		ReturnData = NdisMedium802_3;
		break;
		
	case OID_GEN_MEDIA_IN_USE:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_MEDIA_IN_USE\r\n")));
		ReturnData = NdisMedium802_3;
		break;
		
	case OID_GEN_MAXIMUM_LOOKAHEAD:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_LOOKAHEAD\r\n")));
		ReturnData = MAX_LOOKAHEAD_SIZE;
		break;
		
	case OID_GEN_MAXIMUM_FRAME_SIZE:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_FRAME_SIZE\r\n")));
		ReturnData = MAX_FRAME_DATA_SIZE;
		break;		
		
	case OID_GEN_LINK_SPEED:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_LINK_SPEED\r\n")));
		ReturnData = Adapter->Speed;
		break;		
		
	case OID_GEN_TRANSMIT_BUFFER_SPACE: 
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_TRANSMIT_BUFFER_SPACE\r\n")));
		ReturnData = MAX_FRAME_SIZE;
		break;
		
	case OID_GEN_RECEIVE_BUFFER_SPACE: 
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_RECEIVE_BUFFER_SPACE\r\n")));
		ReturnData = TOTAL_BUFFER_SIZE;		
		break;
		
	case OID_GEN_TRANSMIT_BLOCK_SIZE: 
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_TRANSMIT_BLOCK_SIZE\r\n")));
		ReturnData = MAX_FRAME_SIZE;
		break;
		
        
	case OID_GEN_RECEIVE_BLOCK_SIZE: 
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_RECEIVE_BLOCK_SIZE\r\n")));
		ReturnData = MAX_FRAME_SIZE;
		break;
		
		
	case OID_GEN_VENDOR_ID:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_VENDOR_ID\r\n")));
		ReturnData = 0;
		NdisMoveMemory((void *) &ReturnData,(void *) &Adapter->MACAddress,	3);
		break;
		
	case OID_GEN_VENDOR_DESCRIPTION: 
		PrintDebugMsg(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:  
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_CURRENT_LOOKAHEAD\r\n")));
		ReturnData = Adapter->LookAhead;
		break;
		
	case OID_GEN_DRIVER_VERSION:  
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_DRIVER_VERSION\r\n")));
		BytesToMove = 2;
		ReturnData  = DRIVER_NDIS_VERSION;
		break;
		      
	case OID_GEN_MAXIMUM_TOTAL_SIZE:  
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_TOTAL_SIZE\r\n")));
		ReturnData = MAX_FRAME_SIZE;
		break;
        
	case OID_GEN_MAC_OPTIONS: 
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_GEN_MAC_OPTIONS\r\n")));
		ReturnData = NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
			NDIS_MAC_OPTION_RECEIVE_SERIALIZED  |
			NDIS_MAC_OPTION_TRANSFERS_NOT_PEND  |
			NDIS_MAC_OPTION_NO_LOOPBACK;
		break;
		
		
	case OID_802_3_PERMANENT_ADDRESS:
		PrintDebugMsg(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: 
		PrintDebugMsg(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:
		PrintDebugMsg(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: 
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_802_3_MAXIMUM_LIST_SIZE\r\n")));
		ReturnData = MAX_MULTICAST_ADDRESS;
		break;
		
	case OID_802_3_RCV_ERROR_ALIGNMENT:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_802_3_RCV_ERROR_ALIGNMENT\r\n")));
		ReturnData = Adapter->Stat_AlignError;		
		break;
		
	case OID_802_3_XMIT_ONE_COLLISION:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_802_3_XMIT_ONE_COLLISION\r\n")));
		ReturnData = Adapter->Stat_SingleColl;
		break;		
        
	case OID_802_3_XMIT_MORE_COLLISIONS:
		PrintDebugMsg(ZONE_INIT, (TEXT("OID_802_3_XMIT_MORE_COLLISIONS\r\n")));
		ReturnData = Adapter->Stat_MultiColl;
		break;
		
	case OID_GEN_MEDIA_CONNECT_STATUS:
		PrintDebugMsg(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:
		PrintDebugMsg(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:
		PrintDebugMsg(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)
				ReturnData = NdisHardwareStatusReset;
		}
		break;
		
	default:
		PrintDebugMsg(ZONE_INIT, (TEXT("Unknown or Unsupported OID Statistics Query\r\n")));
		BytesToMove = 0;
		Status      = NDIS_STATUS_NOT_SUPPORTED;
		break;
	}
	
	
	if(BytesToMove)
    {
        Status = CopyInfo(InformationBuffer,
			Source,
			InformationBufferLength,
			BytesToMove,
			BytesWritten,
			BytesNeeded);
    }
	
	
	PrintDebugMsg(ZONE_INIT, (TEXT("LAN91C111 <== MiniportQuery Information OID\r\n")));
	return Status;
}


NDIS_STATUS     LAN91C111_MiniportSend               (
													  NDIS_HANDLE  AdapterContext,
													  PNDIS_PACKET pNDISPacket,
													  UINT         Flags
													  )
{
	MINIPORT_ADAPTER        *Adapter = (MINIPORT_ADAPTER *) AdapterContext;
	MINIPORT_PACKET			*Packet;
	ULONG                   IOBase;
	UINT                    PacketLength;
	USHORT					PacketNumber;
	NDIS_STATUS			RetVal;
	
	PrintDebugMsg(ZONE_TX, (TEXT("LAN91C111 ==> Miniport Send\r\n")));
	
	IOBase = Adapter->IOBase;
	
	//Make sure that the packet size is in legal limits.
	NdisQueryPacket(pNDISPacket,NULL,NULL,NULL,(PUINT) &PacketLength);
	if ((PacketLength > MAX_FRAME_SIZE) || (PacketLength < MIN_FRAME_SIZE))
	{
		PrintDebugMsg(ZONE_TX, (TEXT("LAN91C111: Invalid Packet Size\r\n")));
		PrintDebugMsg(ZONE_TX, (TEXT("LAN91C111 <== Miniport Send\r\n")));

⌨️ 快捷键说明

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