mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-01 19:26:16 +00:00
Store interface speed to retrieve later.
svn path=/trunk/; revision=12115
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user