ReactOS 0.4.16-dev-1223-gddcd5f7
requests.c File Reference
#include "pcnet.h"
#include <debug.h>
Include dependency graph for requests.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

NDIS_STATUS NTAPI MiniportQueryInformation (IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesWritten, OUT PULONG BytesNeeded)
 
NDIS_STATUS NTAPI MiniportSetInformation (IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesRead, OUT PULONG BytesNeeded)
 

Variables

static ULONG MiniportOIDList []
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 38 of file requests.c.

Function Documentation

◆ MiniportQueryInformation()

NDIS_STATUS NTAPI MiniportQueryInformation ( IN NDIS_HANDLE  MiniportAdapterContext,
IN NDIS_OID  Oid,
IN PVOID  InformationBuffer,
IN ULONG  InformationBufferLength,
OUT PULONG  BytesWritten,
OUT PULONG  BytesNeeded 
)

Definition at line 86 of file requests.c.

111{
113 PVOID CopyFrom;
114 UINT CopySize;
115 ULONG GenericULONG;
116 PADAPTER Adapter = (PADAPTER)MiniportAdapterContext;
117
118 DPRINT("Called. OID 0x%x\n", Oid);
119
120 ASSERT(Adapter);
121
122 NdisAcquireSpinLock(&Adapter->Lock);
123
125 CopyFrom = (PVOID)&GenericULONG;
126 CopySize = sizeof(ULONG);
127
128 switch (Oid)
129 {
131 {
132 CopyFrom = (PVOID)&MiniportOIDList;
133 CopySize = sizeof(MiniportOIDList);
134 break;
135 }
136
138 {
139 GenericULONG = (ULONG)NdisHardwareStatusReady;
140 break;
141 }
142
145 {
146 static const NDIS_MEDIUM Medium = NdisMedium802_3;
147 CopyFrom = (PVOID)&Medium;
148 CopySize = sizeof(NDIS_MEDIUM);
149 break;
150 }
151
154 {
155 GenericULONG = 1500;
156 break;
157 }
158
160 {
161 /*
162 * The value returned by this OID must be equal to
163 * OID_GEN_MAXIMUM_TOTAL_SIZE - sizeof(ETHERNET_HEADER)
164 * where sizeof(ETHERNET_HEADER) is 14.
165 */
166 GenericULONG = 1500;
167 break;
168 }
169
171 {
172 GenericULONG = Adapter->MediaSpeed * 10000;
173 break;
174 }
175
177 {
178 /* XXX fix me */
179 GenericULONG = BUFFER_SIZE;
180 break;
181 }
182
184 {
185 /* XXX fix me */
186 GenericULONG = BUFFER_SIZE;
187 break;
188 }
189
191 {
192 GenericULONG = BUFFER_SIZE;
193 break;
194 }
195
197 {
198 GenericULONG = BUFFER_SIZE;
199 break;
200 }
201
203 {
204 UCHAR *CharPtr = (UCHAR *)&GenericULONG;
205 GenericULONG = 0;
206 /* Read the first three bytes of the permanent MAC address */
207 NdisRawReadPortUchar(Adapter->PortOffset, CharPtr);
208 NdisRawReadPortUchar(Adapter->PortOffset + 1, CharPtr + 1);
209 NdisRawReadPortUchar(Adapter->PortOffset + 2, CharPtr + 2);
210 break;
211 }
212
214 {
215 static UCHAR VendorDesc[] = "ReactOS Team";
216 CopyFrom = VendorDesc;
217 CopySize = sizeof(VendorDesc);
218 break;
219 }
220
222 {
223 /* XXX implement me */
224 GenericULONG = 1;
225 break;
226 }
227
229 {
230 GenericULONG = Adapter->CurrentPacketFilter;
231 break;
232 }
233
235 {
236 /* NDIS version used by the driver. */
237 static const USHORT DriverVersion =
238 (NDIS_MINIPORT_MAJOR_VERSION << 8) + NDIS_MINIPORT_MINOR_VERSION;
239 CopyFrom = (PVOID)&DriverVersion;
240 CopySize = sizeof(DriverVersion);
241 break;
242 }
243
245 {
246 /* See comment in OID_GEN_MAXIMUM_FRAME_SIZE. */
247 GenericULONG = 1514;
248 break;
249 }
250
252 {
253 DPRINT("OID_GEN_PROTOCOL_OPTIONS.\n");
255 break;
256 }
257
259 {
264 break;
265 }
266
268 {
269 GenericULONG = (ULONG)NdisMediaStateConnected; /* Adapter->MediaState */
270 break;
271 }
272
274 {
275 GenericULONG = 1;
276 break;
277 }
278
281 {
282 CopyFrom = (PVOID)&Adapter->InitializationBlockVirt->PADR;
283 CopySize = 6;
284 break;
285 }
286
288 {
289 GenericULONG = MAX_MULTICAST_ADDRESSES;
290 break;
291 }
292
293 case OID_GEN_XMIT_OK:
294 GenericULONG = Adapter->Statistics.XmtGoodFrames;
295 break;
296
297 case OID_GEN_RCV_OK:
298 GenericULONG = Adapter->Statistics.RcvGoodFrames;
299 break;
300
302 GenericULONG = Adapter->Statistics.XmtRetryErrors +
304 Adapter->Statistics.XmtCollisions +
309 break;
310
312 GenericULONG = Adapter->Statistics.RcvBufferErrors +
313 Adapter->Statistics.RcvCrcErrors +
316 break;
317
319 GenericULONG = Adapter->Statistics.RcvBufferErrors +
321 break;
322
324 GenericULONG = Adapter->Statistics.RcvCrcErrors;
325 break;
326
328 GenericULONG = Adapter->Statistics.RcvFramingErrors;
329 break;
330
332 GenericULONG = Adapter->Statistics.XmtOneRetry;
333 break;
334
336 GenericULONG = Adapter->Statistics.XmtMoreThanOneRetry;
337 break;
338
340 GenericULONG = NdisPhysicalMedium802_3;
341 break;
342
343 default:
344 {
345 DPRINT1("Unknown OID 0x%x\n", Oid);
347 break;
348 }
349 }
350
352 {
353 if (CopySize > InformationBufferLength)
354 {
355 *BytesNeeded = CopySize;
356 *BytesWritten = 0;
358 }
359 else
360 {
361 NdisMoveMemory(InformationBuffer, CopyFrom, CopySize);
362 *BytesWritten = CopySize;
363 *BytesNeeded = CopySize;
364 }
365 }
366 else
367 {
368 *BytesWritten = 0;
369 *BytesNeeded = 0;
370 }
371
372 NdisReleaseSpinLock(&Adapter->Lock);
373
374 DPRINT("Leaving. Status is 0x%x\n", Status);
375
376 return Status;
377}
#define DPRINT1
Definition: precomp.h:8
Status
Definition: gdiplustypes.h:25
#define ASSERT(a)
Definition: mode.c:44
#define BUFFER_SIZE
Definition: freeldrpage.c:26
#define NdisReleaseSpinLock(_SpinLock)
Definition: ndis.h:4115
unsigned int UINT
Definition: ndis.h:50
#define NDIS_STATUS_NOT_SUPPORTED
Definition: ndis.h:479
#define NdisRawReadPortUchar(Port, Data)
Definition: ndis.h:4173
#define NDIS_STATUS_INVALID_LENGTH
Definition: ndis.h:485
#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND
Definition: ndis.h:684
#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED
Definition: ndis.h:683
#define NDIS_STATUS_SUCCESS
Definition: ndis.h:346
#define NDIS_MAC_OPTION_NO_LOOPBACK
Definition: ndis.h:685
#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA
Definition: ndis.h:682
#define NdisAcquireSpinLock(_SpinLock)
Definition: ndis.h:4106
#define NdisMoveMemory(Destination, Source, Length)
Definition: ndis.h:3896
enum _NDIS_MEDIUM NDIS_MEDIUM
#define OID_GEN_TRANSMIT_BLOCK_SIZE
Definition: ntddndis.h:242
#define OID_GEN_PROTOCOL_OPTIONS
Definition: ntddndis.h:250
#define OID_GEN_XMIT_OK
Definition: ntddndis.h:267
#define OID_GEN_MAXIMUM_TOTAL_SIZE
Definition: ntddndis.h:249
#define OID_GEN_XMIT_ERROR
Definition: ntddndis.h:269
#define OID_GEN_VENDOR_DRIVER_VERSION
Definition: ntddndis.h:254
@ NdisPhysicalMedium802_3
Definition: ntddndis.h:221
#define OID_802_3_PERMANENT_ADDRESS
Definition: ntddndis.h:302
#define OID_GEN_LINK_SPEED
Definition: ntddndis.h:239
#define OID_GEN_VENDOR_ID
Definition: ntddndis.h:244
#define OID_GEN_CURRENT_PACKET_FILTER
Definition: ntddndis.h:246
@ NdisMediaStateConnected
Definition: ntddndis.h:470
#define OID_GEN_RCV_NO_BUFFER
Definition: ntddndis.h:271
#define OID_GEN_PHYSICAL_MEDIUM
Definition: ntddndis.h:264
#define OID_802_3_XMIT_ONE_COLLISION
Definition: ntddndis.h:308
#define OID_802_3_XMIT_MORE_COLLISIONS
Definition: ntddndis.h:309
#define OID_GEN_RECEIVE_BUFFER_SPACE
Definition: ntddndis.h:241
#define OID_802_3_MAXIMUM_LIST_SIZE
Definition: ntddndis.h:305
#define OID_GEN_DRIVER_VERSION
Definition: ntddndis.h:248
#define OID_802_3_CURRENT_ADDRESS
Definition: ntddndis.h:303
#define OID_GEN_TRANSMIT_BUFFER_SPACE
Definition: ntddndis.h:240
#define OID_GEN_MEDIA_SUPPORTED
Definition: ntddndis.h:235
@ NdisMedium802_3
Definition: ntddndis.h:188
#define OID_GEN_MAXIMUM_FRAME_SIZE
Definition: ntddndis.h:238
#define OID_GEN_RCV_CRC_ERROR
Definition: ntddndis.h:286
#define OID_GEN_MEDIA_IN_USE
Definition: ntddndis.h:236
#define OID_GEN_MEDIA_CONNECT_STATUS
Definition: ntddndis.h:252
#define OID_GEN_RCV_OK
Definition: ntddndis.h:268
#define OID_GEN_MAXIMUM_LOOKAHEAD
Definition: ntddndis.h:237
#define OID_802_3_RCV_ERROR_ALIGNMENT
Definition: ntddndis.h:307
int NDIS_STATUS
Definition: ntddndis.h:475
#define OID_GEN_RCV_ERROR
Definition: ntddndis.h:270
@ NdisHardwareStatusReady
Definition: ntddndis.h:450
#define OID_GEN_CURRENT_LOOKAHEAD
Definition: ntddndis.h:247
#define OID_GEN_MAC_OPTIONS
Definition: ntddndis.h:251
#define OID_GEN_VENDOR_DESCRIPTION
Definition: ntddndis.h:245
#define OID_GEN_SUPPORTED_LIST
Definition: ntddndis.h:233
#define OID_GEN_RECEIVE_BLOCK_SIZE
Definition: ntddndis.h:243
#define OID_GEN_MAXIMUM_SEND_PACKETS
Definition: ntddndis.h:253
#define OID_GEN_HARDWARE_STATUS
Definition: ntddndis.h:234
static ULONG MiniportOIDList[]
Definition: requests.c:42
struct _ADAPTER * PADAPTER
#define MAX_MULTICAST_ADDRESSES
Definition: pcnet.h:155
unsigned short USHORT
Definition: pedump.c:61
#define DPRINT
Definition: sndvol32.h:73
ULONG XmtCollisions
Definition: pcnet.h:42
ULONG XmtOneRetry
Definition: pcnet.h:47
ULONG RcvCrcErrors
Definition: pcnet.h:51
ULONG XmtLossesOfCarrier
Definition: pcnet.h:41
ULONG RcvBufferErrors
Definition: pcnet.h:50
ULONG XmtGoodFrames
Definition: pcnet.h:39
ULONG RcvFramingErrors
Definition: pcnet.h:53
ULONG XmtBufferUnderflows
Definition: pcnet.h:45
ULONG RcvOverflowErrors
Definition: pcnet.h:52
ULONG RcvGoodFrames
Definition: pcnet.h:49
ULONG XmtLateCollisions
Definition: pcnet.h:43
ULONG XmtMoreThanOneRetry
Definition: pcnet.h:48
ULONG XmtBufferErrors
Definition: pcnet.h:46
ULONG XmtExcessiveDeferrals
Definition: pcnet.h:44
ULONG XmtRetryErrors
Definition: pcnet.h:40
Definition: pcnet.h:58
NDIS_SPIN_LOCK Lock
Definition: pcnet.h:59
UINT MediaSpeed
Definition: pcnet.h:68
ADAPTER_STATS Statistics
Definition: pcnet.h:108
ULONG CurrentPacketFilter
Definition: pcnet.h:72
PINITIALIZATION_BLOCK InitializationBlockVirt
Definition: pcnet.h:81
ULONG_PTR PortOffset
Definition: pcnet.h:65
void * PVOID
Definition: typedefs.h:50
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
Definition: wdfiotarget.h:960
unsigned char UCHAR
Definition: xmlstorage.h:181

◆ MiniportSetInformation()

NDIS_STATUS NTAPI MiniportSetInformation ( IN NDIS_HANDLE  MiniportAdapterContext,
IN NDIS_OID  Oid,
IN PVOID  InformationBuffer,
IN ULONG  InformationBufferLength,
OUT PULONG  BytesRead,
OUT PULONG  BytesNeeded 
)

Definition at line 381 of file requests.c.

404{
405 ULONG GenericULONG;
407 PADAPTER Adapter = (PADAPTER)MiniportAdapterContext;
408
409 ASSERT(Adapter);
410
411 DPRINT("Called, OID 0x%x\n", Oid);
412
413 NdisAcquireSpinLock(&Adapter->Lock);
414
415 switch (Oid)
416 {
418 {
419 /* Verify length */
420 if (InformationBufferLength < sizeof(ULONG))
421 {
422 *BytesRead = 0;
423 *BytesNeeded = sizeof(ULONG);
425 break;
426 }
427
428 NdisMoveMemory(&GenericULONG, InformationBuffer, sizeof(ULONG));
429
430 /* Check for properties the driver don't support */
431 if (GenericULONG &
438 )
439 {
440 *BytesRead = sizeof(ULONG);
441 *BytesNeeded = 0;
443 break;
444 }
445
446 Adapter->CurrentPacketFilter = GenericULONG;
447
448 /* FIXME: Set filter on hardware */
449
450 break;
451 }
452
454 {
455 /* Verify length */
456 if (InformationBufferLength < sizeof(ULONG))
457 {
458 *BytesRead = 0;
459 *BytesNeeded = sizeof(ULONG);
461 break;
462 }
463
464 NdisMoveMemory(&GenericULONG, InformationBuffer, sizeof(ULONG));
465
466 if (GenericULONG > 1500)
468 else
469 Adapter->CurrentLookaheadSize = GenericULONG;
470
471 break;
472 }
473
475 {
476 /* Verify length. Must be multiple of hardware address length */
477 if ((InformationBufferLength % 6) != 0)
478 {
479 *BytesRead = 0;
480 *BytesNeeded = InformationBufferLength + (InformationBufferLength % 6);
482 break;
483 }
484
485 ASSERT((InformationBufferLength / 6) <= MAX_MULTICAST_ADDRESSES);
486
487 /* Set new multicast address list */
488 //NdisMoveMemory(Adapter->Addresses, InformationBuffer, InformationBufferLength);
489
490 /* Update hardware */
491 Status = MiSetMulticast(Adapter, InformationBuffer, InformationBufferLength / 6);
492
493 break;
494 }
495
496 default:
497 {
498 DPRINT1("Invalid object ID (0x%X).\n", Oid);
499 *BytesRead = 0;
500 *BytesNeeded = 0;
502 break;
503 }
504 }
505
507 {
508 *BytesRead = InformationBufferLength;
509 *BytesNeeded = 0;
510 }
511
512 NdisReleaseSpinLock(&Adapter->Lock);
513
514 DPRINT("Leaving. Status (0x%X).\n", Status);
515
516 return Status;
517}
#define NDIS_STATUS_INVALID_DATA
Definition: ndis.h:486
#define NDIS_PACKET_TYPE_MAC_FRAME
Definition: ndis.h:674
#define NDIS_PACKET_TYPE_SOURCE_ROUTING
Definition: ndis.h:667
#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL
Definition: ndis.h:672
#define NDIS_PACKET_TYPE_FUNCTIONAL
Definition: ndis.h:673
#define NDIS_PACKET_TYPE_GROUP
Definition: ndis.h:671
#define NDIS_PACKET_TYPE_SMT
Definition: ndis.h:669
#define OID_802_3_MULTICAST_LIST
Definition: ntddndis.h:304
NDIS_STATUS NTAPI MiSetMulticast(PADAPTER Adapter, UCHAR *Addresses, UINT AddressCount)
Definition: pcnet.c:1262
ULONG CurrentLookaheadSize
Definition: pcnet.h:73
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
Definition: wdfiotarget.h:870

Variable Documentation

◆ MiniportOIDList

ULONG MiniportOIDList[]
static

Definition at line 42 of file requests.c.

Referenced by MiniportQueryInformation().