Store interface speed to retrieve later.

svn path=/trunk/; revision=12115
This commit is contained in:
Art Yerkes
2004-12-14 08:00:48 +00:00
parent c3168d10e5
commit a95a04eb35
3 changed files with 50 additions and 40 deletions
+3 -14
View File
@@ -59,21 +59,10 @@ UINT CountInterfaces() {
NTSTATUS GetInterfaceSpeed( PIP_INTERFACE Interface, PUINT Speed ) {
NDIS_STATUS NdisStatus;
PLAN_ADAPTER IF = (PLAN_ADAPTER)Interface->Context;
*Speed = IF->Speed;
#ifdef __NTDRIVER__
/* Get maximum link speed */
NdisStatus = NDISCall(IF,
NdisRequestQueryInformation,
OID_GEN_LINK_SPEED,
Speed,
sizeof(UINT));
#else
(void)IF;
NdisStatus = NDIS_STATUS_SUCCESS;
*Speed = 10000;
#endif
return
return STATUS_SUCCESS;
NdisStatus != NDIS_STATUS_SUCCESS ?
STATUS_UNSUCCESSFUL : STATUS_SUCCESS;
}
+45 -25
View File
@@ -279,9 +279,6 @@ VOID STDCALL LanReceiveWorker( PVOID Context ) {
ExInterlockedRemoveHeadList( &LanWorkList, &LanWorkLock )) ) {
WorkItem = CONTAINING_RECORD(ListEntry, LAN_WQ_ITEM, ListEntry);
LanReceiveWorkerCalled++;
ASSERT(LanReceiveWorkerCalled <= TransferDataCompleteCalled);
Packet = WorkItem->Packet;
Adapter = WorkItem->Adapter;
BytesTransferred = WorkItem->BytesTransferred;
@@ -330,6 +327,34 @@ VOID STDCALL LanReceiveWorker( PVOID Context ) {
}
}
VOID LanSubmitReceiveWork(
NDIS_HANDLE BindingContext,
PNDIS_PACKET Packet,
NDIS_STATUS Status,
UINT BytesTransferred) {
BOOLEAN WorkStart;
PLAN_WQ_ITEM WQItem;
PLAN_ADAPTER Adapter = (PLAN_ADAPTER)BindingContext;
KIRQL OldIrql;
TcpipAcquireSpinLock( &LanWorkLock, &OldIrql );
WQItem = ExAllocatePool( NonPagedPool, sizeof(LAN_WQ_ITEM) );
if( !WQItem ) {
TcpipReleaseSpinLock( &LanWorkLock, OldIrql );
return;
}
WorkStart = IsListEmpty( &LanWorkList );
WQItem->Packet = Packet;
WQItem->Adapter = Adapter;
WQItem->BytesTransferred = BytesTransferred;
InsertTailList( &LanWorkList, &WQItem->ListEntry );
if( WorkStart )
ExQueueWorkItem( &LanWorkItem, CriticalWorkQueue );
TcpipReleaseSpinLock( &LanWorkLock, OldIrql );
}
VOID STDCALL ProtocolTransferDataComplete(
NDIS_HANDLE BindingContext,
PNDIS_PACKET Packet,
@@ -347,34 +372,14 @@ VOID STDCALL ProtocolTransferDataComplete(
* type and pass it to the correct receive handler
*/
{
BOOLEAN WorkStart;
PLAN_WQ_ITEM WQItem;
PLAN_ADAPTER Adapter = (PLAN_ADAPTER)BindingContext;
KIRQL OldIrql;
ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
if( Status != NDIS_STATUS_SUCCESS ) return;
TcpipAcquireSpinLock( &LanWorkLock, &OldIrql );
TransferDataCompleteCalled++;
ASSERT(TransferDataCompleteCalled <= TransferDataCalled);
WQItem = ExAllocatePool( NonPagedPool, sizeof(LAN_WQ_ITEM) );
if( !WQItem ) {
TcpipReleaseSpinLock( &LanWorkLock, OldIrql );
return;
}
if( Status != NDIS_STATUS_SUCCESS ) return;
WorkStart = IsListEmpty( &LanWorkList );
WQItem->Packet = Packet;
WQItem->Adapter = Adapter;
WQItem->BytesTransferred = BytesTransferred;
InsertTailList( &LanWorkList, &WQItem->ListEntry );
if( WorkStart )
ExQueueWorkItem( &LanWorkItem, CriticalWorkQueue );
TcpipReleaseSpinLock( &LanWorkLock, OldIrql );
LanSubmitReceiveWork( BindingContext, Packet, Status, BytesTransferred );
}
NDIS_STATUS STDCALL ProtocolReceive(
@@ -673,10 +678,14 @@ VOID LANTransmit(
TI_DbgPrint(MID_TRACE, ("NdisSend Done\n"));
TcpipReleaseSpinLock( &Adapter->Lock, OldIrql );
#if 0
if (NdisStatus != NDIS_STATUS_PENDING)
ProtocolSendComplete((NDIS_HANDLE)Context, NdisPacket, NdisStatus);
#endif
} else {
#if 0
ProtocolSendComplete((NDIS_HANDLE)Context, NdisPacket, NDIS_STATUS_CLOSED);
#endif
}
}
@@ -935,6 +944,16 @@ VOID BindAdapter(
1 );
}
/* Get maximum link speed */
NdisStatus = NDISCall(Adapter,
NdisRequestQueryInformation,
OID_GEN_LINK_SPEED,
&IF->Speed,
sizeof(UINT));
if( !NT_SUCCESS(NdisStatus) )
IF->Speed = IP_DEFAULT_LINK_SPEED;
/* Register interface with IP layer */
IPRegisterInterface(IF);
@@ -944,6 +963,7 @@ VOID BindAdapter(
OID_GEN_CURRENT_PACKET_FILTER,
&Adapter->PacketFilter,
sizeof(UINT));
if (NdisStatus != NDIS_STATUS_SUCCESS) {
TI_DbgPrint(MID_TRACE, ("Could not set packet filter (0x%X).\n", NdisStatus));
IPDestroyInterface(IF);
+2 -1
View File
@@ -145,6 +145,7 @@ typedef struct _IP_INTERFACE {
UINT HeaderSize; /* Size of link level header */
UINT MinFrameSize; /* Minimum frame size in bytes */
UINT MTU; /* Maximum transmission unit */
UINT Speed; /* Link speed */
IP_ADDRESS Unicast; /* Unicast address */
IP_ADDRESS PointToPoint; /* Point to point address */
IP_ADDRESS Netmask; /* Netmask */
@@ -180,7 +181,7 @@ typedef VOID (*IP_PROTOCOL_HANDLER)(
/* Timeout timer constants */
#define IP_TICKS_SECOND 2 /* Two ticks per second */
#define IP_TIMEOUT (1000 / IP_TICKS_SECOND) /* Timeout in milliseconds */
#define IP_DEFAULT_LINK_SPEED 10000
extern LIST_ENTRY InterfaceListHead;
extern KSPIN_LOCK InterfaceListLock;