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

📄 lan91c111_miniport.c

📁 嵌入式网络芯片lan91c111的wince源码。
💻 C
📖 第 1 页 / 共 2 页
字号:
		ReturnData = MAX_FRAME_SIZE;
		break;
		
	case OID_GEN_RECEIVE_BUFFER_SPACE: 
		DEBUGMSG(ZONE_INIT, (TEXT("OID_GEN_RECEIVE_BUFFER_SPACE\r\n")));
		ReturnData = TOTAL_BUFFER_SIZE;		
		break;
		
	case OID_GEN_TRANSMIT_BLOCK_SIZE: 
		DEBUGMSG(ZONE_INIT, (TEXT("OID_GEN_TRANSMIT_BLOCK_SIZE\r\n")));
		ReturnData = MAX_FRAME_SIZE;
		break;
		
        
	case OID_GEN_RECEIVE_BLOCK_SIZE: 
		DEBUGMSG(ZONE_INIT, (TEXT("OID_GEN_RECEIVE_BLOCK_SIZE\r\n")));
		ReturnData = MAX_FRAME_SIZE;
		break;
		
       
	case OID_GEN_VENDOR_ID:
		DEBUGMSG(ZONE_INIT, (TEXT("OID_GEN_VENDOR_ID\r\n")));
		ReturnData = 0;
		NdisMoveMemory((void *) &ReturnData,(void *) &Adapter->MACAddress,	3);
		break;
		
  	case OID_GEN_VENDOR_DESCRIPTION: 
		DEBUGMSG(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:  
		DEBUGMSG(ZONE_INIT, (TEXT("OID_GEN_CURRENT_LOOKAHEAD\r\n")));
		ReturnData = Adapter->LookAhead;
		break;
		
	case OID_GEN_DRIVER_VERSION:  
		DEBUGMSG(ZONE_INIT, (TEXT("OID_GEN_DRIVER_VERSION\r\n")));
		BytesToMove = 2;
		ReturnData  = DRIVER_NDIS_VERSION;
		break;
		      
	case OID_GEN_MAXIMUM_TOTAL_SIZE:  
		DEBUGMSG(ZONE_INIT, (TEXT("OID_GEN_MAXIMUM_TOTAL_SIZE\r\n")));
		ReturnData = MAX_FRAME_SIZE;
		break;
        
	case OID_GEN_MAC_OPTIONS: 
		DEBUGMSG(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;
		if( Adapter->Duplex )
			ReturnData |= NDIS_MAC_OPTION_FULL_DUPLEX;
		break;
		
		
	case OID_802_3_PERMANENT_ADDRESS:
		DEBUGMSG(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: 
		DEBUGMSG(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:
		DEBUGMSG(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: 
		DEBUGMSG(ZONE_INIT, (TEXT("OID_802_3_MAXIMUM_LIST_SIZE\r\n")));
		ReturnData = MAX_MULTICAST_ADDRESS;
		break;

	case OID_802_3_RCV_ERROR_ALIGNMENT:
		DEBUGMSG(ZONE_INIT, (TEXT("OID_802_3_RCV_ERROR_ALIGNMENT\r\n")));
		ReturnData = Adapter->Stat_AlignError;		
		break;
		
	case OID_802_3_XMIT_ONE_COLLISION:
		DEBUGMSG(ZONE_INIT, (TEXT("OID_802_3_XMIT_ONE_COLLISION\r\n")));
		ReturnData = Adapter->Stat_SingleColl;
		break;		
        
	case OID_802_3_XMIT_MORE_COLLISIONS:
		DEBUGMSG(ZONE_INIT, (TEXT("OID_802_3_XMIT_MORE_COLLISIONS\r\n")));
		ReturnData = Adapter->Stat_MultiColl;
		break;
		
	case OID_GEN_MEDIA_CONNECT_STATUS:
		DEBUGMSG(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:
		DEBUGMSG(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:
		DEBUGMSG(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:
		DEBUGMSG(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);
    }
	
	
	DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111 <== MiniportQuery Information OID\r\n")));
	return Status;
}


/*
 Function Name : LAN91C111_MiniportSend
 Description   :
                This function transfers a protocol-supplied packet over the network.
 Parameters    : 
                NDIS_HANDLE  AdapterContext - Handle to the adapter structure
				PNDIS_PACKET NDISPacket - Points to a packet descriptor 
                                            specifying the data to be transmitted. 

				UINT         Flags - Specifies the packet flags, if any, set by the protocol. 
 Return Value  :
            NDIS_STATUS  Status
 */
NDIS_STATUS LAN91C111_MiniportSend		(
											NDIS_HANDLE  AdapterContext,
											PNDIS_PACKET NDISPacket,
											UINT         Flags
										)
{
	MINIPORT_ADAPTER	*Adapter = (MINIPORT_ADAPTER *) AdapterContext;
	UINT				BufferCount;
    UINT				PacketLength;
	MINIPORT_PACKET     *Packet;

	DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111 ==> Miniport Send\n")));

	if (Adapter->State != NORMAL_STATE)
	{
		DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111: Adapter not in normal state\n")));
		DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111 <== Miniport Send\n")));
		return (NDIS_STATUS_FAILURE);
	}
	NdisQueryPacket(NDISPacket,	(PUINT) &BufferCount,(PUINT) 0,(PNDIS_BUFFER *) 0,(PUINT) &PacketLength);
	if ((PacketLength > MAX_FRAME_SIZE) || (PacketLength < MIN_FRAME_SIZE))
	{
		DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111: Invalid Packet Size\n")));
		DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111 <== Miniport Send\n")));
		return (NDIS_STATUS_FAILURE);
	}

	Packet			= (MINIPORT_PACKET *) NDISPacket->MiniportReserved;
	Packet->Next	= (MINIPORT_PACKET *) 0;
	
	Adapter->TransmitQueueDepth++;
	QuePacket(Adapter->AllocPending, Packet);
	if(AllocateTxBuffer(Adapter, (MINIPORT_PACKET **) &Packet))
		AdapterWrite(Adapter, Packet);
	else
		DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111:==> ALLOCATE failed. No Writes allowed\r\n")));


	DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111 <== Miniport Send\n")));
	return NDIS_STATUS_SUCCESS;
}

/*
 Function Name : LAN91C111_MiniportReset
 Description   : This function is a required function that issues a hardware reset 
                    to the network adapter and/or resets the driver抯 software state.
 Parameters    : 
                PBOOLEAN    AddressingReset -Points to a variable that MiniportReset
                            sets to TRUE if the NDIS library should call 
                            MiniportSetInformation to restore addressing information 
                            to the current values. 
 				NDIS_HANDLE AdapterContext - Handle to the adapter structure

 Return Value  :
            NDIS_STATUS Status
 */
NDIS_STATUS	LAN91C111_MiniportReset		(
											PBOOLEAN    AddressingReset,
											NDIS_HANDLE AdapterContext
										)
{
	NDIS_STATUS          Status=NDIS_STATUS_SUCCESS;
	MINIPORT_ADAPTER	*Adapter = (MINIPORT_ADAPTER *) AdapterContext;
	DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111 ==> Miniport Reset\r\n")));
	Status = AdapterReset(Adapter);
	DEBUGMSG(ZONE_INIT, (TEXT("LAN91C111 <== Miniport Reset\r\n")));
	return Status;
}
 

/*
 Function Name : LAN91C111_MiniportTransferData
 Description   :
                This function is a required function in network adapter drivers that do 
                not indicate multipacket receives and/or media-specific information with 
                NdisMIndicateReceivePacket and in those that do not support WAN media
 Parameters    :    
            PNDIS_PACKET Packet - points to packet descriptor with chained buffers into 
                                which the data should be copied
            PUINT BytesTransferred -    no. of bytes of data actually copied by this function                
            NDIS_HANDLE MiniportAdapterContext - Handle to the adapter structure 
            NDIS_HANDLE MiniportReceiveContext - Handle tot he recieve context passed in 
                            previous NdisMIndicateRecieve function
            UINT ByteOffset - offset within the recieved packet
            UINT BytesToTransfer -  specifies how many bytes to copy
 Return Value  :
            NDIS_STATUS Status
 */
NDIS_STATUS LAN91C111_MiniportTransferData(
											PNDIS_PACKET Packet,
											PUINT BytesTransferred,
											NDIS_HANDLE MiniportAdapterContext,
											NDIS_HANDLE MiniportReceiveContext,
											UINT ByteOffset,
											UINT BytesToTransfer
											)
{
    /*
      Note : This function is not required since the driver transfers the complete packet
      in one function call using the NdisMEthIndicateReceive function, when there is a RX interrupt.
    */
	NDIS_STATUS				Status=NDIS_STATUS_FAILURE;
	return Status;
}


⌨️ 快捷键说明

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