📄 lan91c96_miniport.c
字号:
/*
*
*
*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 + -