1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
/*++
Copyright (c) 1990-1995 Microsoft Corporation
Module Name:
data.c
Abstract:
NDIS wrapper Data
Author:
01-Jun-1995 JameelH Re-organization
Environment:
Kernel mode, FSD
Revision History:
10-July-1995 KyleB Added spinlock logging debug code.
--*/
#include <precomp.h>
#pragma hdrstop
//
// Define the module number for debug code.
//
#define MODULE_NUMBER MODULE_DATA
#if DBG
ULONG ndisDebugSystems = 0;
LONG ndisDebugLevel = DBG_LEVEL_FATAL;
ULONG ndisDebugInformationOffset;
#endif
UCHAR ndisValidProcessors[32] = { 0 };
ULONG ndisMaximumProcessor = 0;
ULONG ndisCurrentProcessor = 0;
UCHAR ndisInternalEaName[4] = "NDIS";
UCHAR ndisInternalEaValue[8] = "INTERNAL";
const NDIS_PHYSICAL_ADDRESS HighestAcceptableMax = NDIS_PHYSICAL_ADDRESS_CONST(-1,-1);
PKG_REF ProtocolPkg = {0};
PKG_REF MacPkg = {0};
PKG_REF CoPkg = {0};
PKG_REF InitPkg = {0};
PKG_REF PnPPkg = {0};
PKG_REF MiniportPkg = {0};
PKG_REF ArcPkg = {0};
PKG_REF EthPkg = {0};
PKG_REF TrPkg = {0};
PKG_REF FddiPkg = {0};
KSPIN_LOCK ndisDriverListLock = {0};
PNDIS_MAC_BLOCK ndisMacDriverList = (PNDIS_MAC_BLOCK)NULL;
PNDIS_M_DRIVER_BLOCK ndisMiniDriverList = NULL;
PNDIS_PROTOCOL_BLOCK ndisProtocolList = NULL;
PNDIS_OPEN_BLOCK ndisGlobalOpenList = NULL;
PNDIS_AF_LIST ndisAfList = NULL;
KSPIN_LOCK ndisGlobalOpenListLock = {0};
TDI_REGISTER_CALLBACK ndisTdiRegisterCallback = NULL;
ULONG ndisDmaAlignment = 0;
ERESOURCE SharedMemoryResource = {0};
KSPIN_LOCK ndisLookaheadBufferLock = {0};
ULONG ndisLookaheadBufferLength = 0;
#if defined(_ALPHA_)
PNDIS_LOOKAHEAD_ELEMENT ndisLookaheadBufferList = NULL;
#endif
ULONG MiniportDebug = 0; // MINIPORT_DEBUG_LOUD;
UCHAR ndisMSendRescBuffer[512] = {0};
ULONG ndisMSendRescIndex = 0;
UCHAR ndisMSendLog[256] = {0};
UCHAR ndisMSendLogIndex = 0;
BOOLEAN ndisSkipProcessorAffinity = FALSE;
BOOLEAN ndisMediaTypeCl[NdisMediumMax] =
{
TRUE,
TRUE,
TRUE,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
TRUE,
TRUE
};
NDIS_MEDIUM ndisMediumBuffer[NdisMediumMax + EXPERIMENTAL_SIZE] = // Keep some space for experimental media
{
NdisMedium802_3,
NdisMedium802_5,
NdisMediumFddi,
NdisMediumWan,
NdisMediumLocalTalk,
NdisMediumDix,
NdisMediumArcnetRaw,
NdisMediumArcnet878_2,
NdisMediumAtm,
NdisMediumWirelessWan,
NdisMediumIrda
};
NDIS_MEDIUM * ndisMediumArray = ndisMediumBuffer;
UINT ndisMediumArraySize = NdisMediumMax * sizeof(NDIS_MEDIUM);
UINT ndisMediumArrayMaxSize = sizeof(ndisMediumBuffer);
PBUS_SLOT_DB ndisGlobalDb = NULL;
KSPIN_LOCK ndisGlobalDbLock = {0};
#if TRACK_MEMORY
KSPIN_LOCK ALock = 0;
#define MAX_PTR_COUNT 2048
struct _MemPtr
{
PVOID Ptr;
ULONG Size;
ULONG ModLine;
ULONG Tag;
} ndisMemPtrs[MAX_PTR_COUNT] = { 0 };
PVOID
AllocateM(
IN UINT Size,
IN ULONG ModLine,
IN ULONG Tag
)
{
PVOID p;
p = ExAllocatePoolWithTag(NonPagedPool, Size, Tag);
if (p != NULL)
{
KIRQL OldIrql;
UINT i;
ACQUIRE_SPIN_LOCK(&ALock, &OldIrql);
for (i = 0; i < MAX_PTR_COUNT; i++)
{
if (ndisMemPtrs[i].Ptr == NULL)
{
ndisMemPtrs[i].Ptr = p;
ndisMemPtrs[i].Size = Size;
ndisMemPtrs[i].ModLine = ModLine;
ndisMemPtrs[i].Tag = Tag;
break;
}
}
RELEASE_SPIN_LOCK(&ALock, OldIrql);
}
return(p);
}
VOID
FreeM(
IN PVOID MemPtr
)
{
KIRQL OldIrql;
UINT i;
ACQUIRE_SPIN_LOCK(&ALock, &OldIrql);
for (i = 0; i < MAX_PTR_COUNT; i++)
{
if (ndisMemPtrs[i].Ptr == MemPtr)
{
ndisMemPtrs[i].Ptr = NULL;
ndisMemPtrs[i].Size = 0;
ndisMemPtrs[i].ModLine = 0;
ndisMemPtrs[i].Tag = 0;
}
}
RELEASE_SPIN_LOCK(&ALock, OldIrql);
ExFreePool(MemPtr);
}
#endif
|