/*++ 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 /* 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 */