📄 lan91c111_miniport.c
字号:
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 + -