279 lines
6 KiB
C
279 lines
6 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1996-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
globals.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
global declarations
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Charlie Wickham (charlwi) 22-Apr-1996
|
||
|
Rajesh Sundaram (rajeshsu) 01-Aug-1998.
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Kernel Mode
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "psched.h"
|
||
|
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include <ntverp.h>
|
||
|
|
||
|
/* External */
|
||
|
|
||
|
/* Static */
|
||
|
|
||
|
/* Forward */
|
||
|
/* End Forward */
|
||
|
|
||
|
ULONG InitShutdownMask;
|
||
|
ULONG AdapterCount;
|
||
|
ULONG DriverRefCount;
|
||
|
DRIVER_STATE gDriverState;
|
||
|
|
||
|
ULONG gEnableAvgStats = 0;
|
||
|
ULONG gEnableWindowAdjustment = 0;
|
||
|
NDIS_STRING gsEnableWindowAdjustment = NDIS_STRING_CONST("PSCHED");
|
||
|
|
||
|
|
||
|
//
|
||
|
// Lists
|
||
|
//
|
||
|
LIST_ENTRY AdapterList; // List of adapters
|
||
|
LIST_ENTRY PsComponentList; // List of scheduling components.
|
||
|
LIST_ENTRY PsProfileList; // List of scheduling profiles.
|
||
|
|
||
|
|
||
|
//
|
||
|
// Locks
|
||
|
//
|
||
|
PS_SPIN_LOCK AdapterListLock; // Protects AdapterList
|
||
|
PS_SPIN_LOCK PsComponentListLock; // For PsCompoenentList
|
||
|
PS_SPIN_LOCK PsProfileLock; // For PsProfileList
|
||
|
PS_SPIN_LOCK DriverUnloadLock; // to handle unloads, unbinds, etc.
|
||
|
|
||
|
//
|
||
|
// Mutex Implementation
|
||
|
//
|
||
|
ULONG CreateDeviceMutex = 0;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Handles
|
||
|
//
|
||
|
|
||
|
NDIS_HANDLE ClientProtocolHandle; // handle returned by NDIS when registering the Client
|
||
|
NDIS_HANDLE MpWrapperHandle; // Ndis wrapper handle for MP section
|
||
|
NDIS_HANDLE LmDriverHandle; // handle returned by NDIS when MP portion registers as LM
|
||
|
NDIS_HANDLE PsDeviceHandle;
|
||
|
|
||
|
|
||
|
//
|
||
|
// PSDriverObject, PSDeviceObject - pointer to NT driver and device objects
|
||
|
//
|
||
|
|
||
|
PDRIVER_OBJECT PsDriverObject;
|
||
|
PDEVICE_OBJECT PsDeviceObject;
|
||
|
|
||
|
//
|
||
|
// Lookaside Lists
|
||
|
//
|
||
|
NPAGED_LOOKASIDE_LIST NdisRequestLL; // For Ndis requests
|
||
|
NPAGED_LOOKASIDE_LIST GpcClientVcLL; // For GPC Client VCs.
|
||
|
|
||
|
//
|
||
|
// Events
|
||
|
//
|
||
|
NDIS_EVENT DriverUnloadEvent;
|
||
|
NDIS_EVENT gZAWEvent;
|
||
|
ULONG gZAWState = ZAW_STATE_READY;
|
||
|
|
||
|
//
|
||
|
// name constants used during registration/initialization
|
||
|
//
|
||
|
NDIS_STRING PsSymbolicName = NDIS_STRING_CONST("\\DosDevices\\PSched");
|
||
|
NDIS_STRING PsDriverName = NDIS_STRING_CONST("\\Device\\PSched");
|
||
|
NDIS_STRING VcPrefix = NDIS_STRING_CONST( "VC:");
|
||
|
NDIS_STRING WanPrefix = NDIS_STRING_CONST( "WAN:");
|
||
|
NDIS_STRING MachineRegistryKey = NDIS_STRING_CONST( "\\Registry\\Machine\\SOFTWARE\\Policies\\Microsoft\\Windows\\PSched");
|
||
|
NDIS_STRING PsMpName;
|
||
|
|
||
|
//
|
||
|
// Default scheduling component info
|
||
|
//
|
||
|
|
||
|
PSI_INFO TbConformerInfo = {
|
||
|
{0, 0}, TRUE, FALSE,
|
||
|
PS_COMPONENT_CURRENT_VERSION,
|
||
|
NDIS_STRING_CONST( "TokenBucketConformer" ),
|
||
|
0, 0, 0, 0,
|
||
|
0, NULL, 0, NULL,
|
||
|
0,0,0,0,0,0,0,0,0,0
|
||
|
};
|
||
|
PSI_INFO ShaperInfo = {
|
||
|
{0, 0}, TRUE, FALSE,
|
||
|
PS_COMPONENT_CURRENT_VERSION,
|
||
|
NDIS_STRING_CONST( "TrafficShaper" ),
|
||
|
0, 0, 0, 0,
|
||
|
0, NULL, 0, NULL,
|
||
|
0,0,0,0,0,0,0,0,0,0
|
||
|
};
|
||
|
PSI_INFO DrrSequencerInfo = {
|
||
|
{0, 0}, TRUE, FALSE,
|
||
|
PS_COMPONENT_CURRENT_VERSION,
|
||
|
NDIS_STRING_CONST( "DRRSequencer" ),
|
||
|
0, 0, 0, 0,
|
||
|
0, NULL, 0, NULL,
|
||
|
0,0,0,0,0,0,0,0,0,0
|
||
|
};
|
||
|
PSI_INFO TimeStmpInfo = {
|
||
|
{0, 0}, TRUE, FALSE,
|
||
|
PS_COMPONENT_CURRENT_VERSION,
|
||
|
NDIS_STRING_CONST( "TimeStmp" ),
|
||
|
0, 0, 0, 0,
|
||
|
0, NULL, 0, NULL,
|
||
|
0,0,0,0,0,0,0,0,0,0
|
||
|
};
|
||
|
PSI_INFO SchedulerStubInfo = {
|
||
|
{0, 0}, TRUE, FALSE,
|
||
|
PS_COMPONENT_CURRENT_VERSION,
|
||
|
NDIS_STRING_CONST( "SchedulerStub" ),
|
||
|
0, 0, 0, 0,
|
||
|
0, NULL, 0, NULL,
|
||
|
0,0,0,0,0,0,0,0,0,0
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Known component configurations
|
||
|
//
|
||
|
PS_PROFILE DefaultSchedulerConfig = {
|
||
|
{0, 0},
|
||
|
0,
|
||
|
NDIS_STRING_CONST( "DefaultSchedulerConfig" ),
|
||
|
4,
|
||
|
{&TbConformerInfo,
|
||
|
&DrrSequencerInfo,
|
||
|
&TimeStmpInfo,
|
||
|
&SchedulerStubInfo
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// PS Procs for scheduler
|
||
|
//
|
||
|
|
||
|
PS_PROCS PsProcs;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// For the logging support
|
||
|
//
|
||
|
|
||
|
PVOID SchedTraceThreshContext;
|
||
|
NDIS_SPIN_LOCK GlobalLoggingLock;
|
||
|
ULONG SchedTraceIndex = 0;
|
||
|
ULONG SchedBufferSize = 0;
|
||
|
ULONG SchedTraced = 0;
|
||
|
UCHAR *SchedTraceBuffer = 0;
|
||
|
ULONG SchedTraceBytesUnread = 0;
|
||
|
ULONG SchedTraceThreshold = 0xffffffff;
|
||
|
SCHEDTRACE_THRESH_PROC SchedTraceThreshProc = NULL;
|
||
|
BOOLEAN TraceBufferAllocated = FALSE;
|
||
|
BOOLEAN WMIInitialized = FALSE;
|
||
|
|
||
|
|
||
|
// Timer
|
||
|
|
||
|
ULONG gTimerResolutionActualTime = 0;
|
||
|
ULONG gTimerSet = 0;
|
||
|
|
||
|
|
||
|
// GPC VC state machine
|
||
|
|
||
|
#if DBG
|
||
|
PUCHAR GpcVcState[] = {
|
||
|
"ERROR_STATE",
|
||
|
"CL_VC_INITIALIZED",
|
||
|
"CL_CALL_PENDING",
|
||
|
"CL_INTERNAL_CALL_COMPLETE",
|
||
|
"CL_CALL_COMPLETE",
|
||
|
"CL_MODIFY_PENDING",
|
||
|
"CL_GPC_CLOSE_PENDING",
|
||
|
"CL_NDIS_CLOSE_PENDING",
|
||
|
"CL_WAITING_FOR_PENDING_PACKETS"
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// GPC Interface
|
||
|
//
|
||
|
|
||
|
GPC_EXPORTED_CALLS GpcEntries;
|
||
|
GPC_HANDLE GpcQosClientHandle;
|
||
|
#if CBQ
|
||
|
GPC_HANDLE GpcClassMapClientHandle;
|
||
|
#endif
|
||
|
PS_DEVICE_STATE DeviceState = PS_DEVICE_STATE_READY;
|
||
|
|
||
|
//
|
||
|
// TAGS
|
||
|
//
|
||
|
|
||
|
ULONG NdisRequestTag = '0CSP';
|
||
|
ULONG GpcClientVcTag = '1CSP';
|
||
|
ULONG WanLinkTag = '2CSP';
|
||
|
ULONG PsMiscTag = '3CSP';
|
||
|
ULONG WanTableTag = '4CSP';
|
||
|
ULONG WMITag = 'hCSP';
|
||
|
|
||
|
ULONG AdapterTag = 'aCSP';
|
||
|
ULONG CmParamsTag = 'bCSP';
|
||
|
ULONG PipeContextTag = 'cCSP';
|
||
|
ULONG FlowContextTag = 'dCSP';
|
||
|
ULONG ClassMapContextTag = 'eCSP';
|
||
|
ULONG ProfileTag = 'fCSP';
|
||
|
ULONG ComponentTag = 'gCSP';
|
||
|
|
||
|
ULONG TimerTag = 'zCSP';
|
||
|
ULONG TsTag = 'tCSP';
|
||
|
|
||
|
#if DBG
|
||
|
|
||
|
CHAR VersionNumber[] = "0.300";
|
||
|
CHAR VersionHerald[] = "PSched: Packet Scheduler Version %s built on %s\n";
|
||
|
CHAR VersionTimestamp[] = __DATE__ " " __TIME__;
|
||
|
|
||
|
ULONG DbgTraceLevel;
|
||
|
ULONG DbgTraceMask;
|
||
|
ULONG LogTraceLevel;
|
||
|
ULONG LogTraceMask;
|
||
|
ULONG LogId = LAST_LOG_ID;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// NULL Component hacks for now [ShreeM]
|
||
|
//
|
||
|
PS_RECEIVE_PACKET TimeStmpRecvPacket = NULL;
|
||
|
PS_RECEIVE_INDICATION TimeStmpRecvIndication = NULL;
|
||
|
|
||
|
PULONG_PTR g_WanLinkTable;
|
||
|
USHORT g_NextWanIndex;
|
||
|
USHORT g_WanTableSize;
|
||
|
|
||
|
/* end globals.c */
|