ReactOS 0.4.16-dev-1521-gb8f1da6
main.c File Reference
#include <ne2000.h>
Include dependency graph for main.c:

Go to the source code of this file.

Functions

NTSTATUS NTAPI DriverEntry (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
 
static BOOLEAN NTAPI MiniportCheckForHang (IN NDIS_HANDLE MiniportAdapterContext)
 
static VOID NTAPI MiniportDisableInterrupt (IN NDIS_HANDLE MiniportAdapterContext)
 
static VOID NTAPI MiniportEnableInterrupt (IN NDIS_HANDLE MiniportAdapterContext)
 
static VOID NTAPI MiniportHalt (IN NDIS_HANDLE MiniportAdapterContext)
 
static VOID NTAPI MiQueryResources (OUT PNDIS_STATUS Status, IN PNIC_ADAPTER Adapter, IN NDIS_HANDLE WrapperConfigurationContext)
 
VOID NTAPI MiniportShutdown (PVOID Context)
 
static NDIS_STATUS NTAPI MiniportInitialize (OUT PNDIS_STATUS OpenErrorStatus, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE WrapperConfigurationContext)
 
static VOID NTAPI MiniportISR (OUT PBOOLEAN InterruptRecognized, OUT PBOOLEAN QueueMiniportHandleInterrupt, IN NDIS_HANDLE MiniportAdapterContext)
 
static NDIS_STATUS NTAPI MiniportQueryInformation (IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesWritten, OUT PULONG BytesNeeded)
 
static NDIS_STATUS NTAPI MiniportReconfigure (OUT PNDIS_STATUS OpenErrorStatus, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE WrapperConfigurationContext)
 
static NDIS_STATUS NTAPI MiniportReset (OUT PBOOLEAN AddressingReset, IN NDIS_HANDLE MiniportAdapterContext)
 
static NDIS_STATUS NTAPI MiniportSend (IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet, IN UINT Flags)
 
static NDIS_STATUS NTAPI MiniportSetInformation (IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesRead, OUT PULONG BytesNeeded)
 
static NDIS_STATUS NTAPI MiniportTransferData (OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE MiniportReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer)
 

Variables

static ULONG MiniportOIDList []
 
DRIVER_INFORMATION DriverInfo = { NULL, NULL, { NULL, NULL } }
 
NDIS_PHYSICAL_ADDRESS HighestAcceptableMax = NDIS_PHYSICAL_ADDRESS_CONST(-1, -1)
 

Function Documentation

◆ DriverEntry()

NTSTATUS NTAPI DriverEntry ( PDRIVER_OBJECT  DriverObject,
PUNICODE_STRING  RegistryPath 
)

Definition at line 925 of file main.c.

936{
938 NDIS_HANDLE NdisWrapperHandle;
940
941 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
942
943 NdisZeroMemory(&Miniport, sizeof(Miniport));
944 Miniport.MajorNdisVersion = DRIVER_NDIS_MAJOR_VERSION;
945 Miniport.MinorNdisVersion = DRIVER_NDIS_MINOR_VERSION;
946 Miniport.CheckForHangHandler = MiniportCheckForHang;
947 Miniport.DisableInterruptHandler = MiniportDisableInterrupt;
948 Miniport.EnableInterruptHandler = MiniportEnableInterrupt;
949 Miniport.HaltHandler = MiniportHalt;
950 Miniport.HandleInterruptHandler = MiniportHandleInterrupt;
951 Miniport.InitializeHandler = MiniportInitialize;
952 Miniport.ISRHandler = MiniportISR;
953 Miniport.QueryInformationHandler = MiniportQueryInformation;
954 Miniport.ReconfigureHandler = MiniportReconfigure;
955 Miniport.ResetHandler = MiniportReset;
956 Miniport.SendHandler = MiniportSend;
957 Miniport.SetInformationHandler = MiniportSetInformation;
958 Miniport.TransferDataHandler = MiniportTransferData;
959
960 NdisMInitializeWrapper(&NdisWrapperHandle,
963 NULL);
964
965 if (!NdisWrapperHandle) {
966 NDIS_DbgPrint(MIN_TRACE, ("NdisMInitializeWrapper() failed\n"));
967 return STATUS_UNSUCCESSFUL;
968 }
969
970 DriverInfo.NdisWrapperHandle = NdisWrapperHandle;
973
974 Status = NdisMRegisterMiniport(NdisWrapperHandle,
975 &Miniport,
978 NDIS_DbgPrint(MIN_TRACE, ("NdisMRegisterMiniport() failed with status code (0x%X).\n", Status));
979 NdisTerminateWrapper(NdisWrapperHandle, NULL);
980 return STATUS_UNSUCCESSFUL;
981 }
982
983 return STATUS_SUCCESS;
984}
#define MIN_TRACE
Definition: debug.h:14
#define MAX_TRACE
Definition: debug.h:16
#define NULL
Definition: types.h:112
#define NDIS_DbgPrint(_t_, _x_)
Definition: debug.h:40
VOID NTAPI MiniportHandleInterrupt(IN NDIS_HANDLE MiniportAdapterContext)
Definition: interrupt.c:46
static VOID NTAPI MiniportEnableInterrupt(IN NDIS_HANDLE MiniportAdapterContext)
Definition: main.c:95
static 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: main.c:730
static NDIS_STATUS NTAPI MiniportInitialize(OUT PNDIS_STATUS OpenErrorStatus, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE WrapperConfigurationContext)
Definition: main.c:214
static VOID NTAPI MiniportISR(OUT PBOOLEAN InterruptRecognized, OUT PBOOLEAN QueueMiniportHandleInterrupt, IN NDIS_HANDLE MiniportAdapterContext)
Definition: main.c:451
static VOID NTAPI MiniportHalt(IN NDIS_HANDLE MiniportAdapterContext)
Definition: main.c:110
static NDIS_STATUS NTAPI MiniportTransferData(OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE MiniportReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer)
Definition: main.c:836
static 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: main.c:476
static VOID NTAPI MiniportDisableInterrupt(IN NDIS_HANDLE MiniportAdapterContext)
Definition: main.c:80
static BOOLEAN NTAPI MiniportCheckForHang(IN NDIS_HANDLE MiniportAdapterContext)
Definition: main.c:64
static NDIS_STATUS NTAPI MiniportReset(OUT PBOOLEAN AddressingReset, IN NDIS_HANDLE MiniportAdapterContext)
Definition: main.c:660
DRIVER_INFORMATION DriverInfo
Definition: main.c:60
static NDIS_STATUS NTAPI MiniportSend(IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet, IN UINT Flags)
Definition: main.c:688
static NDIS_STATUS NTAPI MiniportReconfigure(OUT PNDIS_STATUS OpenErrorStatus, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE WrapperConfigurationContext)
Definition: main.c:637
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
Status
Definition: gdiplustypes.h:25
#define NdisZeroMemory(Destination, Length)
Definition: ndis.h:3926
#define NDIS_STATUS_SUCCESS
Definition: ndis.h:346
#define NdisMInitializeWrapper(NdisWrapperHandle, SystemSpecific1, SystemSpecific2, SystemSpecific3)
Definition: ndis.h:5592
#define DRIVER_NDIS_MAJOR_VERSION
Definition: ne2000.h:29
#define DRIVER_NDIS_MINOR_VERSION
Definition: ne2000.h:30
NDIS_STATUS EXPORT NdisMRegisterMiniport(IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, IN UINT CharacteristicsLength)
Definition: miniport.c:2637
VOID EXPORT NdisTerminateWrapper(IN NDIS_HANDLE NdisWrapperHandle, IN PVOID SystemSpecific)
Definition: miniport.c:3012
int NDIS_STATUS
Definition: ntddndis.h:475
#define STATUS_SUCCESS
Definition: shellext.h:65
NDIS_HANDLE NdisMacHandle
Definition: ne2000.h:188
LIST_ENTRY AdapterListHead
Definition: ne2000.h:189
NDIS_HANDLE NdisWrapperHandle
Definition: ne2000.h:187
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213

◆ MiniportCheckForHang()

static BOOLEAN NTAPI MiniportCheckForHang ( IN NDIS_HANDLE  MiniportAdapterContext)
static

Definition at line 64 of file main.c.

73{
74 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
75
76 return FALSE;
77}
#define FALSE
Definition: types.h:117

Referenced by DriverEntry().

◆ MiniportDisableInterrupt()

static VOID NTAPI MiniportDisableInterrupt ( IN NDIS_HANDLE  MiniportAdapterContext)
static

Definition at line 80 of file main.c.

87{
88 NDIS_DbgPrint(MAX_TRACE, ("Called. (MiniportDisableInterrupt).\n"));
89#ifndef NOCARD
90 NICDisableInterrupts((PNIC_ADAPTER)MiniportAdapterContext);
91#endif
92}
#define NICDisableInterrupts(Adapter)
Definition: 8390.h:159

Referenced by DriverEntry().

◆ MiniportEnableInterrupt()

static VOID NTAPI MiniportEnableInterrupt ( IN NDIS_HANDLE  MiniportAdapterContext)
static

Definition at line 95 of file main.c.

102{
103 NDIS_DbgPrint(MAX_TRACE, ("Called. (MiniportEnableInterrupt).\n"));
104#ifndef NOCARD
105 NICEnableInterrupts((PNIC_ADAPTER)MiniportAdapterContext);
106#endif
107}
#define NICEnableInterrupts(Adapter)
Definition: 8390.h:164

Referenced by DriverEntry().

◆ MiniportHalt()

static VOID NTAPI MiniportHalt ( IN NDIS_HANDLE  MiniportAdapterContext)
static

Definition at line 110 of file main.c.

117{
118 PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
119
121
122 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
123#ifndef NOCARD
124 /* Stop the NIC */
125 NICStop(Adapter);
126#endif
127 /* Wait for any DPCs to complete. FIXME: Use something else */
128 NdisStallExecution(250000);
129
130 if (Adapter->InterruptRegistered)
131 /* Deregister interrupt */
133
134 if (Adapter->IOPortRangeRegistered)
135 /* Deregister I/O port range */
137 Adapter->MiniportAdapterHandle,
138 Adapter->IoBaseAddress,
139 0x20,
140 Adapter->IOBase);
141
142 if (Adapter->ShutdownHandlerRegistered)
144
145 /* Remove adapter from global adapter list */
146 if ((&Adapter->ListEntry)->Blink != NULL) {
147 RemoveEntryList(&Adapter->ListEntry);
148 }
149
150 /* Free adapter context area */
151 NdisFreeMemory(Adapter, sizeof(NIC_ADAPTER), 0);
152}
#define ASSERT_IRQL_EQUAL(x)
Definition: debug.h:43
VOID EXPORT NdisMDeregisterInterrupt(IN PNDIS_MINIPORT_INTERRUPT Interrupt)
Definition: io.c:700
VOID EXPORT NdisMDeregisterIoPortRange(IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InitialPort, IN UINT NumberOfPorts, IN PVOID PortOffset)
Definition: io.c:1093
VOID EXPORT NdisFreeMemory(IN PVOID VirtualAddress, IN UINT Length, IN UINT MemoryFlags)
Definition: memory.c:110
#define RemoveEntryList(Entry)
Definition: env_spec_w32.h:986
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
#define NdisStallExecution
Definition: ndis.h:4453
struct _NIC_ADAPTER * PNIC_ADAPTER
NDIS_STATUS NICStop(PNIC_ADAPTER Adapter)
Definition: 8390.c:451
VOID EXPORT NdisMDeregisterAdapterShutdownHandler(IN NDIS_HANDLE MiniportHandle)
Definition: miniport.c:1517
BOOLEAN InterruptRegistered
Definition: ne2000.h:180
PUCHAR IOBase
Definition: ne2000.h:92
BOOLEAN IOPortRangeRegistered
Definition: ne2000.h:179
NDIS_MINIPORT_INTERRUPT Interrupt
Definition: ne2000.h:82
ULONG_PTR IoBaseAddress
Definition: ne2000.h:85
NDIS_HANDLE MiniportAdapterHandle
Definition: ne2000.h:80
LIST_ENTRY ListEntry
Definition: ne2000.h:78
BOOLEAN ShutdownHandlerRegistered
Definition: ne2000.h:181

Referenced by DriverEntry(), and MiniportInitialize().

◆ MiniportInitialize()

static NDIS_STATUS NTAPI MiniportInitialize ( OUT PNDIS_STATUS  OpenErrorStatus,
OUT PUINT  SelectedMediumIndex,
IN PNDIS_MEDIUM  MediumArray,
IN UINT  MediumArraySize,
IN NDIS_HANDLE  MiniportAdapterHandle,
IN NDIS_HANDLE  WrapperConfigurationContext 
)
static

Definition at line 214 of file main.c.

233{
234 UINT i;
236 PNIC_ADAPTER Adapter;
238 UINT *RegNetworkAddress = 0;
239 UINT RegNetworkAddressLength = 0;
240
242
243 NDIS_DbgPrint(MAX_TRACE, ("Called (Adapter %X).\n", MiniportAdapterHandle));
244
245 /* Search for 802.3 media which is the only one we support */
246 for (i = 0; i < MediumArraySize; i++) {
247 if (MediumArray[i] == NdisMedium802_3)
248 break;
249 }
250
251 if (i == MediumArraySize) {
252 NDIS_DbgPrint(MIN_TRACE, ("No supported media.\n"));
254 }
255
257
258 Status = NdisAllocateMemory((PVOID)&Adapter,
259 sizeof(NIC_ADAPTER),
260 0,
263 NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
264 return Status;
265 }
266
267 NdisZeroMemory(Adapter, sizeof(NIC_ADAPTER));
268 Adapter->MiniportAdapterHandle = MiniportAdapterHandle;
269 Adapter->IoBaseAddress = DRIVER_DEFAULT_IO_BASE_ADDRESS;
270 Adapter->InterruptLevel = DRIVER_DEFAULT_INTERRUPT_NUMBER;
271 Adapter->InterruptVector = DRIVER_DEFAULT_INTERRUPT_NUMBER;
272 Adapter->InterruptShared = DRIVER_DEFAULT_INTERRUPT_SHARED;
273 Adapter->InterruptMode = DRIVER_DEFAULT_INTERRUPT_MODE;
274 Adapter->MaxMulticastListSize = DRIVER_MAX_MULTICAST_LIST_SIZE;
275 Adapter->InterruptMask = DRIVER_INTERRUPT_MASK;
276 Adapter->LookaheadSize = DRIVER_MAXIMUM_LOOKAHEAD;
277
278 /* Query the resources from PnP. */
280
281 /* Get the port, irq, and MAC address from registry if the PnP
282 failed. */
284 {
285 PNDIS_CONFIGURATION_PARAMETER ConfigurationParameter;
287
290 {
294 {
295 NDIS_DbgPrint(MID_TRACE,("NdisReadConfiguration for Irq returned successfully, irq 0x%x\n",
296 ConfigurationParameter->ParameterData.IntegerData));
297 Adapter->InterruptLevel =
298 Adapter->InterruptVector = ConfigurationParameter->ParameterData.IntegerData;
299 }
300
304 {
305 NDIS_DbgPrint(MID_TRACE,("NdisReadConfiguration for Port returned successfully, port 0x%x\n",
306 ConfigurationParameter->ParameterData.IntegerData));
307 Adapter->IoBaseAddress = ConfigurationParameter->ParameterData.IntegerData;
308 }
309
311 }
312 else
313 {
314 NDIS_DbgPrint(MIN_TRACE,("NdisOpenConfiguration returned error 0x%x\n", Status));
315 }
316 }
317
318 /* find the nic */
319 if (!NICCheck(Adapter)) {
320 NDIS_DbgPrint(MID_TRACE, ("No adapter found at (0x%X).\n", Adapter->IoBaseAddress));
321 NdisFreeMemory(Adapter, sizeof(NIC_ADAPTER), 0);
323 } else
324 NDIS_DbgPrint(MID_TRACE, ("Adapter found at (0x%X).\n", Adapter->IoBaseAddress));
325
328 (NDIS_HANDLE)Adapter,
329 FALSE,
331
333 (PVOID*)&Adapter->IOBase,
335 Adapter->IoBaseAddress,
336 0x20);
337
339 NDIS_DbgPrint(MIN_TRACE, ("Cannot register port range. Status (0x%X).\n", Status));
340 MiniportHalt((NDIS_HANDLE)Adapter);
341 return Status;
342 }
343
344 Adapter->IOPortRangeRegistered = TRUE;
345
346 /* Initialize NIC */
347#ifndef NOCARD
348 Status = NICInitialize(Adapter);
350 NDIS_DbgPrint(MIN_TRACE,("No NE2000 or compatible network adapter found at address 0x%X.\n",
351 Adapter->IOBase));
352
353 NDIS_DbgPrint(MID_TRACE, ("Status (0x%X).\n", Status));
354 MiniportHalt((NDIS_HANDLE)Adapter);
355 return Status;
356 }
357
360 {
361 NdisReadNetworkAddress(&Status, (PVOID *)&RegNetworkAddress, &RegNetworkAddressLength, ConfigurationHandle);
362 if(Status == NDIS_STATUS_SUCCESS && RegNetworkAddressLength == DRIVER_LENGTH_OF_ADDRESS)
363 {
364 int i;
365 NDIS_DbgPrint(MID_TRACE,("NdisReadNetworkAddress returned successfully, address %x:%x:%x:%x:%x:%x\n",
366 RegNetworkAddress[0], RegNetworkAddress[1], RegNetworkAddress[2], RegNetworkAddress[3],
367 RegNetworkAddress[4], RegNetworkAddress[5]));
368 for(i = 0; i < DRIVER_LENGTH_OF_ADDRESS; i++)
369 Adapter->StationAddress[i] = RegNetworkAddress[i];
370 }
371
373 }
374
375 if (Status != NDIS_STATUS_SUCCESS || RegNetworkAddressLength != DRIVER_LENGTH_OF_ADDRESS)
376 {
377 int i;
378 for (i = 0; i < DRIVER_LENGTH_OF_ADDRESS; i++)
379 Adapter->StationAddress[i] = Adapter->PermanentAddress[i];
380 }
381
382 NDIS_DbgPrint(MID_TRACE, ("BOARDDATA:\n"));
383 for (i = 0; i < 4; i++) {
384 NDIS_DbgPrint(MID_TRACE, ("%02X %02X %02X %02X\n",
385 Adapter->SAPROM[i*4+0],
386 Adapter->SAPROM[i*4+1],
387 Adapter->SAPROM[i*4+2],
388 Adapter->SAPROM[i*4+3]));
389 }
390
391 /* Setup adapter structure */
392 Adapter->TXStart = ((ULONG_PTR)Adapter->RamBase >> 8);
393 Adapter->TXCount = DRIVER_DEFAULT_TX_BUFFER_COUNT;
394 Adapter->TXFree = DRIVER_DEFAULT_TX_BUFFER_COUNT;
395 Adapter->TXCurrent = -1;
396 Adapter->PageStart = Adapter->TXStart + Adapter->TXCount;
397 Adapter->PageStop = Adapter->TXStart + (Adapter->RamSize >> 8);
398
399 /* Initialize multicast address mask to accept all */
400 for (i = 0; i < 8; i++)
401 Adapter->MulticastAddressMask[i] = 0xFF;
402
403 /* Setup the NIC */
404 NICSetup(Adapter);
405
406 NDIS_DbgPrint(MID_TRACE, ("TXStart (0x%X) TXCount (0x%X) PageStart (0x%X)\n",
407 Adapter->TXStart,
408 Adapter->TXCount,
409 Adapter->PageStart));
410
411 NDIS_DbgPrint(MID_TRACE, ("PageStop (0x%X) CurrentPage (0x%X) NextPacket (0x%X).\n",
412 Adapter->PageStop,
413 Adapter->CurrentPage,
414 Adapter->NextPacket));
415#endif
416 /* Register the interrupt */
418 &Adapter->Interrupt,
420 Adapter->InterruptVector,
421 Adapter->InterruptLevel,
422 FALSE,
423 Adapter->InterruptShared,
424 Adapter->InterruptMode);
426 NDIS_DbgPrint(MIN_TRACE, ("Cannot register interrupt. Status (0x%X).\n", Status));
427 MiniportHalt((NDIS_HANDLE)Adapter);
428 return Status;
429 }
430
431 Adapter->InterruptRegistered = TRUE;
432#ifndef NOCARD
433 /* Start the NIC */
434 NICStart(Adapter);
435#endif
436
437 /* Register the shutdown handler */
439
440 Adapter->ShutdownHandlerRegistered = TRUE;
441
442 /* Add adapter to the global adapter list */
443 InsertTailList(&DriverInfo.AdapterListHead, &Adapter->ListEntry);
444
445 NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n"));
446
447 return NDIS_STATUS_SUCCESS;
448}
#define MID_TRACE
Definition: debug.h:15
#define TRUE
Definition: types.h:120
#define L(x)
Definition: resources.c:13
VOID NTAPI MiniportShutdown(PVOID Context)
Definition: main.c:207
static VOID NTAPI MiQueryResources(OUT PNDIS_STATUS Status, IN PNIC_ADAPTER Adapter, IN NDIS_HANDLE WrapperConfigurationContext)
Definition: main.c:155
NDIS_PHYSICAL_ADDRESS HighestAcceptableMax
Definition: main.c:61
VOID EXPORT NdisCloseConfiguration(IN NDIS_HANDLE ConfigurationHandle)
Definition: config.c:136
VOID EXPORT NdisReadConfiguration(OUT PNDIS_STATUS Status, OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue, IN NDIS_HANDLE ConfigurationHandle, IN PNDIS_STRING Keyword, IN NDIS_PARAMETER_TYPE ParameterType)
Definition: config.c:414
VOID EXPORT NdisReadNetworkAddress(OUT PNDIS_STATUS Status, OUT PVOID *NetworkAddress, OUT PUINT NetworkAddressLength, IN NDIS_HANDLE ConfigurationHandle)
Definition: config.c:740
VOID EXPORT NdisOpenConfiguration(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE ConfigurationHandle, IN NDIS_HANDLE WrapperConfigurationContext)
Definition: config.c:197
NDIS_STATUS EXPORT NdisMRegisterIoPortRange(OUT PVOID *PortOffset, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InitialPort, IN UINT NumberOfPorts)
Definition: io.c:1018
NDIS_STATUS EXPORT NdisMRegisterInterrupt(OUT PNDIS_MINIPORT_INTERRUPT Interrupt, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InterruptVector, IN UINT InterruptLevel, IN BOOLEAN RequestIsr, IN BOOLEAN SharedInterrupt, IN NDIS_INTERRUPT_MODE InterruptMode)
Definition: io.c:941
NDIS_STATUS EXPORT NdisAllocateMemory(OUT PVOID *VirtualAddress, IN UINT Length, IN UINT MemoryFlags, IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress)
Definition: memory.c:57
VOID EXPORT NdisInitUnicodeString(IN OUT PNDIS_STRING DestinationString, IN PCWSTR SourceString)
Definition: string.c:130
#define ULONG_PTR
Definition: config.h:101
#define InsertTailList(ListHead, Entry)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
@ NdisParameterHexInteger
Definition: ndis.h:927
unsigned int UINT
Definition: ndis.h:50
#define NdisMSetAttributes(MiniportAdapterHandle, MiniportAdapterContext, BusMaster, AdapterType)
Definition: ndis.h:5736
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE _Out_ PUINT SelectedMediumIndex
Definition: ndis.h:6011
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE _Out_ PUINT _In_ UINT MediumArraySize
Definition: ndis.h:6013
@ NdisInterfaceIsa
Definition: ndis.h:901
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE _In_ NDIS_HANDLE WrapperConfigurationContext
Definition: ndis.h:3946
_In_ NDIS_HANDLE MiniportAdapterHandle
Definition: ndis.h:4668
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE ConfigurationHandle
Definition: ndis.h:3945
#define NDIS_STATUS_UNSUPPORTED_MEDIA
Definition: ndis.h:490
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_CONFIGURATION_PARAMETER _In_ NDIS_HANDLE _In_ PNDIS_STRING Keyword
Definition: ndis.h:4416
#define NDIS_STATUS_ADAPTER_NOT_FOUND
Definition: ndis.h:470
#define DRIVER_DEFAULT_INTERRUPT_MODE
Definition: ne2000.h:35
#define DRIVER_MAXIMUM_LOOKAHEAD
Definition: ne2000.h:47
#define DRIVER_MAX_MULTICAST_LIST_SIZE
Definition: ne2000.h:37
BOOLEAN NICCheck(PNIC_ADAPTER Adapter)
Definition: 8390.c:53
#define DRIVER_DEFAULT_INTERRUPT_SHARED
Definition: ne2000.h:34
#define DRIVER_DEFAULT_INTERRUPT_NUMBER
Definition: ne2000.h:33
#define DRIVER_DEFAULT_TX_BUFFER_COUNT
Definition: ne2000.h:54
#define DRIVER_INTERRUPT_MASK
Definition: ne2000.h:58
#define DRIVER_LENGTH_OF_ADDRESS
Definition: ne2000.h:44
NDIS_STATUS NICSetup(PNIC_ADAPTER Adapter)
Definition: 8390.c:352
NDIS_STATUS NICStart(PNIC_ADAPTER Adapter)
Definition: 8390.c:429
NDIS_STATUS NICInitialize(PNIC_ADAPTER Adapter)
Definition: 8390.c:289
#define DRIVER_DEFAULT_IO_BASE_ADDRESS
Definition: ne2000.h:32
VOID EXPORT NdisMRegisterAdapterShutdownHandler(IN NDIS_HANDLE MiniportHandle, IN PVOID ShutdownContext, IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler)
Definition: miniport.c:1694
@ NdisMedium802_3
Definition: ntddndis.h:188
union _NDIS_CONFIGURATION_PARAMETER::@2276 ParameterData

Referenced by DriverEntry().

◆ MiniportISR()

static VOID NTAPI MiniportISR ( OUT PBOOLEAN  InterruptRecognized,
OUT PBOOLEAN  QueueMiniportHandleInterrupt,
IN NDIS_HANDLE  MiniportAdapterContext 
)
static

Definition at line 451 of file main.c.

466{
467 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
468
469 NICDisableInterrupts((PNIC_ADAPTER)MiniportAdapterContext);
470
471 *InterruptRecognized = TRUE;
472 *QueueMiniportHandleInterrupt = TRUE;
473}

Referenced by DriverEntry().

◆ MiniportQueryInformation()

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

Definition at line 476 of file main.c.

496{
498 PVOID CopyFrom;
499 UINT CopySize;
500 ULONG GenericULONG;
501 USHORT GenericUSHORT;
503 PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
504
505 NDIS_DbgPrint(MAX_TRACE, ("Called. Oid (0x%X).\n", Oid));
506
508 CopyFrom = (PVOID)&GenericULONG;
509 CopySize = sizeof(ULONG);
510
511 switch (Oid) {
513 CopyFrom = (PVOID)&MiniportOIDList;
514 CopySize = sizeof(MiniportOIDList);
515 break;
517 GenericULONG = (ULONG)NdisHardwareStatusReady;
518 break;
521 CopyFrom = (PVOID)&Medium;
522 CopySize = sizeof(NDIS_MEDIUM);
523 break;
525 GenericULONG = DRIVER_MAXIMUM_LOOKAHEAD;
526 break;
528 GenericULONG = DRIVER_FRAME_SIZE - DRIVER_HEADER_SIZE;
529 break;
531 GenericULONG = 100000; /* 10Mbps */
532 break;
534 GenericULONG = Adapter->TXCount * DRIVER_BLOCK_SIZE;
535 break;
537 GenericULONG = Adapter->RamSize -
538 (ULONG_PTR)Adapter->RamBase -
539 (Adapter->TXCount * DRIVER_BLOCK_SIZE);
540 break;
542 GenericULONG = DRIVER_BLOCK_SIZE;
543 break;
545 GenericULONG = DRIVER_BLOCK_SIZE;
546 break;
548 NdisMoveMemory(&GenericULONG, &Adapter->PermanentAddress, 3);
549 GenericULONG &= 0xFFFFFF00;
550 GenericULONG |= 0x01;
551 break;
553 CopyFrom = (PVOID)&DRIVER_VENDOR_DESCRIPTION;
554 CopySize = sizeof(DRIVER_VENDOR_DESCRIPTION);
555 break;
557 GenericUSHORT = (USHORT)DRIVER_VENDOR_DRIVER_VERSION;
558 CopyFrom = (PVOID)&GenericUSHORT;
559 CopySize = sizeof(USHORT);
560 break;
562 GenericULONG = Adapter->PacketFilter;
563 break;
565 GenericULONG = Adapter->LookaheadSize;
566 break;
569 CopyFrom = (PVOID)&GenericUSHORT;
570 CopySize = sizeof(USHORT);
571 break;
573 GenericULONG = DRIVER_FRAME_SIZE;
574 break;
576 NDIS_DbgPrint(MID_TRACE, ("OID_GEN_PROTOCOL_OPTIONS.\n"));
578 break;
584 break;
586 GenericULONG = (ULONG)NdisMediaStateConnected;
587 break;
589 GenericULONG = 1;
590 break;
592 CopyFrom = (PVOID)&Adapter->PermanentAddress;
593 CopySize = DRIVER_LENGTH_OF_ADDRESS;
594 break;
596 CopyFrom = (PVOID)&Adapter->StationAddress;
597 CopySize = DRIVER_LENGTH_OF_ADDRESS;
598 break;
600 NDIS_DbgPrint(MID_TRACE, ("OID_802_3_MULTICAST_LIST.\n"));
602 break;
604 GenericULONG = Adapter->MaxMulticastListSize;
605 break;
607 NDIS_DbgPrint(MID_TRACE, ("OID_802_3_MAC_OPTIONS.\n"));
609 break;
611 GenericULONG = NdisPhysicalMedium802_3;
612 break;
613 default:
614 NDIS_DbgPrint(MIN_TRACE, ("Unknown OID (0x%X).\n", Oid));
616 break;
617 }
618
620 if (CopySize > InformationBufferLength) {
621 *BytesNeeded = (CopySize - InformationBufferLength);
622 *BytesWritten = 0;
624 } else {
625 NdisMoveMemory(InformationBuffer, CopyFrom, CopySize);
626 *BytesWritten = CopySize;
627 *BytesNeeded = 0;
628 }
629 }
630
631 NDIS_DbgPrint(MAX_TRACE, ("Leaving. Status is (0x%X).\n", Status));
632
633 return Status;
634}
static ULONG MiniportOIDList[]
Definition: main.c:29
#define NDIS_STATUS_NOT_SUPPORTED
Definition: ndis.h:479
#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_INVALID_OID
Definition: ndis.h:488
#define NDIS_MAC_OPTION_NO_LOOPBACK
Definition: ndis.h:685
#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA
Definition: ndis.h:682
#define NdisMoveMemory(Destination, Source, Length)
Definition: ndis.h:3896
#define DRIVER_VENDOR_DESCRIPTION
Definition: ne2000.h:39
#define DRIVER_HEADER_SIZE
Definition: ne2000.h:43
#define DRIVER_FRAME_SIZE
Definition: ne2000.h:42
#define DRIVER_VENDOR_DRIVER_VERSION
Definition: ne2000.h:40
#define DRIVER_BLOCK_SIZE
Definition: ne2000.h:50
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_MAXIMUM_TOTAL_SIZE
Definition: ntddndis.h:249
#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_PHYSICAL_MEDIUM
Definition: ntddndis.h:264
#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_MAC_OPTIONS
Definition: ntddndis.h:306
#define OID_802_3_CURRENT_ADDRESS
Definition: ntddndis.h:303
#define OID_802_3_MULTICAST_LIST
Definition: ntddndis.h:304
#define OID_GEN_TRANSMIT_BUFFER_SPACE
Definition: ntddndis.h:240
#define OID_GEN_MEDIA_SUPPORTED
Definition: ntddndis.h:235
#define OID_GEN_MAXIMUM_FRAME_SIZE
Definition: ntddndis.h:238
#define OID_GEN_MEDIA_IN_USE
Definition: ntddndis.h:236
#define OID_GEN_MEDIA_CONNECT_STATUS
Definition: ntddndis.h:252
#define OID_GEN_MAXIMUM_LOOKAHEAD
Definition: ntddndis.h:237
@ 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
unsigned short USHORT
Definition: pedump.c:61
ULONG PacketFilter
Definition: ne2000.h:126
UINT RamSize
Definition: ne2000.h:99
UINT TXCount
Definition: ne2000.h:161
PUCHAR RamBase
Definition: ne2000.h:98
DRIVER_HARDWARE_ADDRESS PermanentAddress
Definition: ne2000.h:105
UINT LookaheadSize
Definition: ne2000.h:129
ULONG MaxMulticastListSize
Definition: ne2000.h:111
DRIVER_HARDWARE_ADDRESS StationAddress
Definition: ne2000.h:108
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

Referenced by DriverEntry().

◆ MiniportReconfigure()

static NDIS_STATUS NTAPI MiniportReconfigure ( OUT PNDIS_STATUS  OpenErrorStatus,
IN NDIS_HANDLE  MiniportAdapterContext,
IN NDIS_HANDLE  WrapperConfigurationContext 
)
static

Definition at line 637 of file main.c.

652{
653 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
654
655 return NDIS_STATUS_FAILURE;
656}
#define NDIS_STATUS_FAILURE
Definition: ndis.h:465

Referenced by DriverEntry().

◆ MiniportReset()

static NDIS_STATUS NTAPI MiniportReset ( OUT PBOOLEAN  AddressingReset,
IN NDIS_HANDLE  MiniportAdapterContext 
)
static

Definition at line 660 of file main.c.

673{
674 NDIS_STATUS NdisStatus = NDIS_STATUS_SUCCESS;
675
676 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
677
678#ifndef NOCARD
679 NdisStatus = NICReset((PNIC_ADAPTER)MiniportAdapterContext);
680#endif
681
682 *AddressingReset = TRUE;
683
684 return NdisStatus;
685}
NDIS_STATUS NICReset(PNIC_ADAPTER Adapter)
Definition: 8390.c:500

Referenced by DriverEntry().

◆ MiniportSend()

static NDIS_STATUS NTAPI MiniportSend ( IN NDIS_HANDLE  MiniportAdapterContext,
IN PNDIS_PACKET  Packet,
IN UINT  Flags 
)
static

Definition at line 688 of file main.c.

702{
703 PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
704
706
707#ifndef NOCARD
708 NDIS_DbgPrint(MID_TRACE, ("Queueing packet.\n"));
709
710 /* Queue the packet on the transmit queue */
711 RESERVED(Packet)->Next = NULL;
712 if (Adapter->TXQueueHead == NULL) {
713 Adapter->TXQueueHead = Packet;
714 } else {
715 RESERVED(Adapter->TXQueueTail)->Next = Packet;
716 }
717
718 Adapter->TXQueueTail = Packet;
719
720 /* Transmit the packet */
721 NICTransmit(Adapter);
722
723 return NDIS_STATUS_PENDING;
724#else
725 return NDIS_STATUS_SUCCESS;
726#endif
727}
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define NDIS_STATUS_PENDING
Definition: ndis.h:347
_In_ NDIS_HANDLE _In_ PNDIS_PACKET Packet
Definition: ndis.h:1549
#define RESERVED(Packet)
Definition: ne2000.h:70
VOID NICTransmit(PNIC_ADAPTER Adapter)
Definition: 8390.c:1124
PNDIS_PACKET TXQueueTail
Definition: ne2000.h:171
PNDIS_PACKET TXQueueHead
Definition: ne2000.h:169

Referenced by DriverEntry().

◆ MiniportSetInformation()

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

Definition at line 730 of file main.c.

750{
751 ULONG GenericULONG;
753 PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
754
755 NDIS_DbgPrint(MAX_TRACE, ("Called. Oid (0x%X).\n", Oid));
756
757 switch (Oid) {
759 /* Verify length */
760 if (InformationBufferLength < sizeof(ULONG)) {
761 *BytesRead = 0;
762 *BytesNeeded = sizeof(ULONG) - InformationBufferLength;
764 break;
765 }
766
767 NdisMoveMemory(&GenericULONG, InformationBuffer, sizeof(ULONG));
768 /* Check for properties the driver don't support */
769 if (GenericULONG &
776 *BytesRead = 4;
777 *BytesNeeded = 0;
779 break;
780 }
781
782 Adapter->PacketFilter = GenericULONG;
783
784 /* FIXME: Set filter on hardware */
785
786 break;
788 /* Verify length */
789 if (InformationBufferLength < sizeof(ULONG)) {
790 *BytesRead = 0;
791 *BytesNeeded = sizeof(ULONG) - InformationBufferLength;
793 break;
794 }
795
796 NdisMoveMemory(&GenericULONG, InformationBuffer, sizeof(ULONG));
797 if (GenericULONG > DRIVER_MAXIMUM_LOOKAHEAD)
799 else
800 Adapter->LookaheadSize = GenericULONG;
801 break;
803 /* Verify length. Must be multiple of hardware address length */
804 if ((InformationBufferLength % DRIVER_LENGTH_OF_ADDRESS) != 0) {
805 *BytesRead = 0;
806 *BytesNeeded = 0;
808 break;
809 }
810
811 /* Set new multicast address list */
812 NdisMoveMemory(Adapter->Addresses, InformationBuffer, InformationBufferLength);
813
814 /* FIXME: Update hardware */
815
816 break;
817 default:
818 NDIS_DbgPrint(MIN_TRACE, ("Invalid object ID (0x%X).\n", Oid));
819 *BytesRead = 0;
820 *BytesNeeded = 0;
822 break;
823 }
824
826 *BytesRead = InformationBufferLength;
827 *BytesNeeded = 0;
828 }
829
830 NDIS_DbgPrint(MAX_TRACE, ("Leaving. Status (0x%X).\n", Status));
831
832 return Status;
833}
#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
DRIVER_HARDWARE_ADDRESS Addresses[DRIVER_MAX_MULTICAST_LIST_SIZE]
Definition: ne2000.h:114
_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

Referenced by DriverEntry().

◆ MiniportShutdown()

VOID NTAPI MiniportShutdown ( PVOID  Context)

Definition at line 207 of file main.c.

208{
209 #ifndef NOCARD
211 #endif
212}

Referenced by MiniportInitialize().

◆ MiniportTransferData()

static NDIS_STATUS NTAPI MiniportTransferData ( OUT PNDIS_PACKET  Packet,
OUT PUINT  BytesTransferred,
IN NDIS_HANDLE  MiniportAdapterContext,
IN NDIS_HANDLE  MiniportReceiveContext,
IN UINT  ByteOffset,
IN UINT  BytesToTransfer 
)
static

Definition at line 836 of file main.c.

855{
856 PNDIS_BUFFER DstBuffer;
857 UINT BytesCopied, BytesToCopy, DstSize;
858 ULONG SrcData;
859 PUCHAR DstData;
860 UINT RecvStart;
861 UINT RecvStop;
862 PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
863
864 NDIS_DbgPrint(MAX_TRACE, ("Called. Packet (0x%X) ByteOffset (0x%X) BytesToTransfer (%d).\n",
865 Packet, ByteOffset, BytesToTransfer));
866
867 if (BytesToTransfer == 0) {
868 *BytesTransferred = 0;
869 return NDIS_STATUS_SUCCESS;
870 }
871
872 RecvStart = Adapter->PageStart * DRIVER_BLOCK_SIZE;
873 RecvStop = Adapter->PageStop * DRIVER_BLOCK_SIZE;
874
875 NdisQueryPacket(Packet, NULL, NULL, &DstBuffer, NULL);
876 NdisQueryBuffer(DstBuffer, (PVOID)&DstData, &DstSize);
877
878 SrcData = Adapter->PacketOffset + sizeof(DISCARD_HEADER) + ByteOffset;
879 if (ByteOffset + sizeof(DISCARD_HEADER) + BytesToTransfer >
880 Adapter->PacketHeader.PacketLength)
881 BytesToTransfer = Adapter->PacketHeader.PacketLength -
882 sizeof(DISCARD_HEADER) - ByteOffset;
883
884 /* Start copying the data */
885 BytesCopied = 0;
886 for (;;) {
887 BytesToCopy = (DstSize < BytesToTransfer) ? DstSize : BytesToTransfer;
888 if (SrcData + BytesToCopy > RecvStop)
889 BytesToCopy = (RecvStop - SrcData);
890
891 NICReadData(Adapter, DstData, SrcData, BytesToCopy);
892
894 SrcData += BytesToCopy;
895 DstData = (PUCHAR)((ULONG_PTR) DstData + BytesToCopy);
896 BytesToTransfer -= BytesToCopy;
897 if (BytesToTransfer == 0)
898 break;
899
900 DstSize -= BytesToCopy;
901 if (DstSize == 0) {
902 /* No more bytes in destination buffer. Proceed to
903 the next buffer in the destination buffer chain */
904 NdisGetNextBuffer(DstBuffer, &DstBuffer);
905 if (!DstBuffer)
906 break;
907
908 NdisQueryBuffer(DstBuffer, (PVOID)&DstData, &DstSize);
909 }
910
911 if (SrcData == RecvStop)
912 SrcData = RecvStart;
913 }
914
915 NDIS_DbgPrint(MID_TRACE, ("Transferred (%d) bytes.\n", BytesToTransfer));
916
918
919 return NDIS_STATUS_SUCCESS;
920}
struct _DISCARD_HEADER DISCARD_HEADER
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
Definition: fatprocs.h:732
#define NdisGetNextBuffer(CurrentBuffer, NextBuffer)
Definition: ndis.h:3386
static __inline VOID NdisQueryPacket(IN PNDIS_PACKET Packet, OUT PUINT PhysicalBufferCount OPTIONAL, OUT PUINT BufferCount OPTIONAL, OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, OUT PUINT TotalPacketLength OPTIONAL)
Definition: ndis.h:3593
_In_ UINT _In_ UINT _In_ PNDIS_PACKET _In_ UINT _Out_ PUINT BytesCopied
Definition: ndis.h:3171
_In_ UINT _In_ UINT BytesToCopy
Definition: ndis.h:3168
MDL * PNDIS_BUFFER
Definition: ndis.h:343
#define NdisQueryBuffer(_Buffer, _VirtualAddress, _Length)
Definition: ndis.h:3029
VOID NICReadData(PNIC_ADAPTER Adapter, PUCHAR Target, ULONG_PTR Source, USHORT Length)
Definition: 8390.c:791
PACKET_HEADER PacketHeader
Definition: ne2000.h:151
UINT PageStart
Definition: ne2000.h:133
UINT PageStop
Definition: ne2000.h:134
ULONG PacketOffset
Definition: ne2000.h:154
USHORT PacketLength
Definition: 8390.h:142
uint32_t ULONG_PTR
Definition: typedefs.h:65
unsigned char * PUCHAR
Definition: typedefs.h:53
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ PWDF_MEMORY_DESCRIPTOR _Out_opt_ PULONG BytesTransferred
Definition: wdfusb.h:1342

Referenced by DriverEntry().

◆ MiQueryResources()

static VOID NTAPI MiQueryResources ( OUT PNDIS_STATUS  Status,
IN PNIC_ADAPTER  Adapter,
IN NDIS_HANDLE  WrapperConfigurationContext 
)
static

Definition at line 155 of file main.c.

159{
160 PNDIS_RESOURCE_LIST AssignedResources;
161 UINT BufferSize = 0;
163 UINT i;
164
167 NULL,
168 &BufferSize);
170 return;
171
172 *Status = NdisAllocateMemory((PVOID)&AssignedResources,
174 0,
177 return;
178
181 AssignedResources,
182 &BufferSize);
184 return;
185
186 for (i = 0; i < AssignedResources->Count; i++)
187 {
188 Descriptor = AssignedResources->PartialDescriptors + i;
189 switch (Descriptor->Type)
190 {
192 Adapter->InterruptLevel = Descriptor->u.Interrupt.Level;
193 Adapter->InterruptVector = Descriptor->u.Interrupt.Vector;
194 Adapter->InterruptShared = (Descriptor->ShareDisposition == CmResourceShareShared);
195 Adapter->InterruptMode = Descriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED ?
197 break;
199 Adapter->IoBaseAddress = Descriptor->u.Port.Start.LowPart;
200 break;
201 }
202 }
203}
VOID EXPORT NdisMQueryAdapterResources(OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PNDIS_RESOURCE_LIST ResourceList, IN OUT PUINT BufferSize)
Definition: hardware.c:103
#define NdisInterruptLatched
Definition: ndis.h:921
#define NdisInterruptLevelSensitive
Definition: ndis.h:920
#define CmResourceTypePort
Definition: restypes.h:104
#define CM_RESOURCE_INTERRUPT_LATCHED
Definition: restypes.h:117
#define CmResourceTypeInterrupt
Definition: restypes.h:105
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: restypes.h:100
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
@ CmResourceShareShared
Definition: cmtypes.h:243

Referenced by MiniportInitialize().

Variable Documentation

◆ DriverInfo

DRIVER_INFORMATION DriverInfo = { NULL, NULL, { NULL, NULL } }

◆ HighestAcceptableMax

NDIS_PHYSICAL_ADDRESS HighestAcceptableMax = NDIS_PHYSICAL_ADDRESS_CONST(-1, -1)

Definition at line 61 of file main.c.

Referenced by MiniportInitialize(), and MiQueryResources().

◆ MiniportOIDList