📄 rtsnt.c
字号:
}
}
else*/
{
GenericULong = (ULONG)(1000000);
}
break;
case OID_GEN_TRANSMIT_BUFFER_SPACE:
#if DBG
//DbgPrint("*** OID_GEN_TRANSMIT_BUFFER_SPACE !\n");
#endif
GenericULong = (ULONG)( MAX_WRITE_BUFS * TX_BUF_SIZE);
break;
case OID_GEN_RECEIVE_BUFFER_SPACE:
#if DBG
//DbgPrint("*** OID_GEN_RECEIVE_BUFFER_SPACE !\n");
#endif
GenericULong = (ULONG)(RX_BUF_SIZE);
// GenericULong = (ULONG)(0x2000 - (Adapter->NumBuffers * TX_BUF_SIZE));
break;
case OID_GEN_TRANSMIT_BLOCK_SIZE:
#if DBG
//DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
GenericULong = (ULONG)(TX_BUF_SIZE);
break;
case OID_GEN_RECEIVE_BLOCK_SIZE:
#if DBG
//DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
GenericULong = (ULONG)(256);
break;
case OID_GEN_VENDOR_ID:
#if DBG
DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
GenericULong = Adapter->PermanentAddress[0] << 24;
GenericULong = GenericULong + (Adapter->PermanentAddress[1] << 16);
GenericULong = GenericULong + (Adapter->PermanentAddress[2] << 8);
GenericULong &= 0xFFFFFF00;
MoveSource = (PVOID)(&GenericULong);
MoveBytes = sizeof(GenericULong);
break;
case OID_GEN_VENDOR_DESCRIPTION:
#if DBG
//DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
MoveSource = (PVOID)(VER_FILEDESCRIPTION_STR);
MoveBytes = sizeof(VER_FILEDESCRIPTION_STR);
break;
case OID_GEN_DRIVER_VERSION:
#if DBG
//DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
GenericUShort = ((USHORT)RTFAST_NDIS_MAJOR_VERSION << 8) |
RTFAST_NDIS_MINOR_VERSION;
MoveSource = (PVOID)(&GenericUShort);
MoveBytes = sizeof(GenericUShort);
break;
case OID_GEN_VENDOR_DRIVER_VERSION:
#if DBG
//DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
GenericULong = (ULONG)( (VER_FILEVERSION_High << 16) | VER_FILEVERSION_Low );
break;
case OID_GEN_MEDIA_CONNECT_STATUS:
#if 0
DbgPrint("*** OID_GEN_MEDIA_CONNECT_STATUS !");
#endif
//if(Adapter->LinkStatus == LINK_CONNECT)
GenericULong = NdisMediaStateConnected;
//else
// GenericULong = NdisMediaStateDisconnected;
/* if( Adapter->NwayInProgress )
{
GenericULong = NdisMediaStateConnected;
#if DBG
DbgPrint("*** Nway in progress:up !\n");
#endif
}
else
{
if(Adapter->MediaLinkStatus == NDIS_STATUS_MEDIA_CONNECT)
{ //Link OK
GenericULong = NdisMediaStateConnected;
#if DBG
DbgPrint("*** :up !\n");
#endif
}
else //Link Fail
{
GenericULong = NdisMediaStateDisconnected;
#if DBG
DbgPrint("*** down:up !\n");
#endif
}
}
*/
break;
case OID_GEN_CURRENT_LOOKAHEAD:
#if DBG
//DbgPrint("*** OID_GEN_CURRENT_LOOKAHEAD!\n");
#endif
GenericULong = (ULONG)(Adapter->MaxLookAhead);
break;
case OID_802_3_PERMANENT_ADDRESS:
#if DBG
//DbgPrint("*** OID_802_3_PERMANENT_ADDRESS !\n");
#endif
RTFAST_MOVE_MEM((PCHAR)GenericArray,
Adapter->PermanentAddress,
RTFAST_LENGTH_OF_ADDRESS);
MoveSource = (PVOID)(GenericArray);
MoveBytes = sizeof(Adapter->PermanentAddress);
break;
case OID_802_3_CURRENT_ADDRESS:
#if DBG
DbgPrint("*** OID_802_3_CURRENT_ADDRESS !\n");
#endif
//CardReadEthernetAddress(Adapter);
RTFAST_MOVE_MEM((PCHAR)GenericArray,
Adapter->StationAddress,
RTFAST_LENGTH_OF_ADDRESS);
MoveSource = (PVOID)(GenericArray);
MoveBytes = sizeof(Adapter->StationAddress);
break;
case OID_802_3_MAXIMUM_LIST_SIZE:
#if DBG
//DbgPrint("*** OID_802_3_MAXIMUM_LIST_SIZE !\n");
#endif
GenericULong = (ULONG) (Adapter->MulticastListMax);
break;
case OID_GEN_XMIT_OK:
#if DBG
//DbgPrint("*** OID_GEN_XMIT_OK !\n");
#endif
GenericULong = (UINT)(Adapter->FramesXmitGood);
break;
case OID_GEN_RCV_OK:
#if DBG
//DbgPrint("*** OID_GEN_RCV_OK !\n");
#endif
GenericULong = (UINT)(Adapter->FramesRcvGood);
break;
case OID_GEN_XMIT_ERROR:
#if DBG
//DbgPrint("*** OID_GEN_XMIT_ERROR !\n");
#endif
GenericULong = (UINT)(Adapter->FramesXmitBad);
break;
case OID_GEN_RCV_CRC_ERROR:
case OID_GEN_RCV_ERROR:
#if DBG
//DbgPrint("*** OID_GEN_RCV_CRC_ERROR !\n");
#endif
GenericULong = (UINT)(Adapter->CrcErrors);
break;
case OID_GEN_RCV_NO_BUFFER:
#if DBG
//DbgPrint("*** OID_GEN_RCV_NO_BUFFER !\n");
#endif
GenericULong = (UINT)(Adapter->MissedPackets);
break;
case OID_GEN_DIRECTED_BYTES_XMIT:
#if DBG
//DbgPrint("*** OID_GEN_DIRECTED_BYTES_XMIT !\n");
#endif
MoveSource = (PVOID)(&(Adapter->TotalTransmitBytes.LowPart));
MoveBytes = sizeof(RTL_LARGE_INTEGER);
break;
case OID_GEN_DIRECTED_BYTES_RCV:
#if DBG
//DbgPrint("*** OID_GEN_DIRECTED_BYTES_RCV !\n");
#endif
MoveSource = (PVOID)(&(Adapter->TotalReceiveBytes.LowPart));
MoveBytes = sizeof(RTL_LARGE_INTEGER);
break;
case OID_802_3_RCV_ERROR_ALIGNMENT:
#if DBG
//DbgPrint("*** OID_802_3_RCV_ERROR_ALIGNMENT !\n");
#endif
GenericULong = (UINT)(Adapter->FrameAlignmentErrors);
break;
case OID_802_3_XMIT_ONE_COLLISION:
#if DBG
//DbgPrint("*** OID_802_3_XMIT_ONE_COLLISION !\n");
#endif
GenericULong = (UINT)(Adapter->FramesXmitOneCollision);
break;
case OID_802_3_XMIT_MORE_COLLISIONS:
#if DBG
//DbgPrint("*** OID_802_3_XMIT_MORE_COLLISIONS !\n");
#endif
GenericULong = (UINT)(Adapter->FramesXmitManyCollisions);
break;
case OID_GEN_MAXIMUM_SEND_PACKETS:
#if DBG
//DbgPrint("*** OID_GEN_MAXIMUM_SEND_PACKETS !\n");
#endif
GenericULong = (UINT)(4);
break;
#if NDIS50_MINIPORT
#ifdef POWER_MANAGMENT
case OID_PNP_CAPABILITIES:
// since we are stubbing power management, return only the
// D0 power state indicating that the lowest power state we
// support is D0 (full power)
//
/*RTFAST_DbgMessage("OID_PNP_CAPABILITIES!\n");
switch(Adapter->ChipType)
{
case RTL8139:
case RTL8139REVK:
Power_Management_Capabilities.WakeUpCapabilities.MinMagicPacketWakeUp = NdisDeviceStateUnspecified;
Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified;
Power_Management_Capabilities.WakeUpCapabilities.MinLinkChangeWakeUp = NdisDeviceStateUnspecified;
RTFAST_DbgMessage(" chip version:RTL8139K: power capability not supported !\n");
break;
case RTL8139A:
case RTL8130:
Power_Management_Capabilities.WakeUpCapabilities.MinMagicPacketWakeUp = NdisDeviceStateD2;
if(Adapter->AddWakeUpFrame == ENABLE)
Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateD2;
else
Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified;
Power_Management_Capabilities.WakeUpCapabilities.MinLinkChangeWakeUp = NdisDeviceStateD2;
RTFAST_DbgMessage(" chip version:RTL8139A: support D2 !\n");
break;
case RTL8139B:
case RTL8139C:
default:
Power_Management_Capabilities.WakeUpCapabilities.MinMagicPacketWakeUp = NdisDeviceStateD3;
if(Adapter->AddWakeUpFrame==ENABLE)
Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateD3;
else
Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified;
Power_Management_Capabilities.WakeUpCapabilities.MinLinkChangeWakeUp = NdisDeviceStateD3;
RTFAST_DbgMessage(" chip version:RTL8139B/C: support D3 !\n");
}*/
//MoveSource = (PVOID) &Power_Management_Capabilities;
//MoveBytes = sizeof(NDIS_PNP_CAPABILITIES);
//StatusToReturn = NDIS_STATUS_SUCCESS;
DbgPrint("*** OID_PNP_CAPABILITIES !\n");
StatusToReturn = NDIS_STATUS_NOT_SUPPORTED;
break;
case OID_PNP_QUERY_POWER:
#if 1 //DBG
DbgPrint("*** OID_PNP_QUERY_POWER!\n");
#endif
//Adapter->NextPowerState = (NDIS_DEVICE_POWER_STATE) InformationBuffer;
QUERY_POWER(Adapter);
//GenericULong = (ULONG)(Adapter->NextPowerState);
//StatusToReturn = NDIS_STATUS_SUCCESS;
StatusToReturn = NDIS_STATUS_NOT_SUPPORTED;
break;
#endif // #define POWER_MANAGMENT
#endif // #if NDIS50_MINIPORT
default:
#if DBG
//DbgPrint("*** default !, OID :%x not implemented\n", Oid);
#endif
StatusToReturn = NDIS_STATUS_INVALID_OID;
break;
}
if(StatusToReturn == NDIS_STATUS_SUCCESS)
{
if(MoveBytes > BytesLeft)
{
//
// Not enough room in InformationBuffer. Punt
//
*BytesNeeded = MoveBytes;
StatusToReturn = NDIS_STATUS_INVALID_LENGTH;
}
else
{
//
// Store result.
//
RTFAST_MOVE_MEM(InfoBuffer, MoveSource, MoveBytes);
(*BytesWritten) += MoveBytes;
*BytesNeeded = MoveBytes;
}
}
return (StatusToReturn);
}
/*++
Routine Description:
RTL8139SetInformation handles a set operation for a
single OID.
Arguments:
MiniportAdapterContext - Context registered with the wrapper, really
a pointer to the adapter.
Oid - The OID of the set.
InformationBuffer - Holds the data to be set.
InformationBufferLength - The length of InformationBuffer.
BytesRead - If the call is successful, returns the number
of bytes read from InformationBuffer.
BytesNeeded - If there is not enough data in InformationBuffer
to satisfy the OID, returns the amount of storage needed.
Return Value:
NDIS_STATUS_SUCCESS
NDIS_STATUS_PENDING
NDIS_STATUS_INVALID_LENGTH
NDIS_STATUS_INVALID_OID
--*/
extern
NDIS_STATUS
RTFast_SetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
)
{
//
// Pointer to the adapter structure.
//
PRTFAST_ADAPTER Adapter = (PRTFAST_ADAPTER)MiniportAdapterContext;
//
// General Algorithm:
//
// Verify length
// Switch(Request)
// Process Request
//
UINT BytesLeft = InformationBufferLength;
PUCHAR InfoBuffer = (PUCHAR)(InformationBuffer);
//
// Variables for a particular request
//
UINT OidLength;
//
// Variables for holding the new values to be used.
//
ULONG LookAhead;
ULONG Filter;
//UCHAR PowerState,TmpUchar;
PBOOLEAN AddressingReset = NULL;
//
// Status of the operation.
//
NDIS_STATUS StatusToReturn = NDIS_STATUS_SUCCESS;
#if DBG
//DbgBreakPoint();
#endif
#if DBG
//DbgPrint("***In SetInfo\n");
#endif
// DbgPrint("2830S*** Set Information!\n");
//return STATUS_UNSUCCESSFUL;
//
// Get Oid and Length of request
//
OidLength = BytesLeft;
#if DBG
//DbgPrint("*** Enter RTFast SetInformation !\n");
#endif
switch (Oid)
{
case OID_802_3_MULTICAST_LIST:
#if DBG
//DbgPrint("*** OID_802_3_MULTICAST_LIST !\n");
#endif
//
// Verify length
//
if((OidLength % RTFAST_LENGTH_OF_ADDRESS) != 0)
{
StatusToReturn = NDIS_STATUS_INVALID_LENGTH;
*BytesRead = 0;
*BytesNeeded = 0;
break;
}
//
// Set the new list on the adapter.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -