* REVISIONS:
* CSH 27/08-2000 Created
*/
-#include <roscfg.h>
#include <ne2000.h>
#include <debug.h>
NTSTATUS
-#ifndef _MSC_VER
-STDCALL
-#endif
+NTAPI
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath);
-#ifdef DBG
+#if DBG
/* See debug.h for debug/trace constants */
ULONG DebugTraceLevel = 0;
OID_802_3_MAC_OPTIONS
};
-DRIVER_INFORMATION DriverInfo = {0};
+DRIVER_INFORMATION DriverInfo = { NULL, NULL, { NULL, NULL } };
NDIS_PHYSICAL_ADDRESS HighestAcceptableMax = NDIS_PHYSICAL_ADDRESS_CONST(-1, -1);
-#if 0
-static BOOLEAN MiniportCheckForHang(
+static BOOLEAN NTAPI MiniportCheckForHang(
IN NDIS_HANDLE MiniportAdapterContext)
/*
* FUNCTION: Examines if an adapter has hung
return FALSE;
}
-#endif
-static VOID STDCALL MiniportDisableInterrupt(
+static VOID NTAPI MiniportDisableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext)
/*
* FUNCTION: Disables interrupts from an adapter
}
-static VOID STDCALL MiniportEnableInterrupt(
+static VOID NTAPI MiniportEnableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext)
/*
* FUNCTION: Enables interrupts from an adapter
}
-static VOID STDCALL MiniportHalt(
+static VOID NTAPI MiniportHalt(
IN NDIS_HANDLE MiniportAdapterContext)
/*
* FUNCTION: Deallocates resources for and halts an adapter
{
PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
+ ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
+
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
#ifndef NOCARD
/* Stop the NIC */
0x20,
Adapter->IOBase);
+ if (Adapter->ShutdownHandlerRegistered)
+ NdisMDeregisterAdapterShutdownHandler(Adapter->MiniportAdapterHandle);
+
/* Remove adapter from global adapter list */
if ((&Adapter->ListEntry)->Blink != NULL) {
RemoveEntryList(&Adapter->ListEntry);
- }
+ }
/* Free adapter context area */
NdisFreeMemory(Adapter, sizeof(NIC_ADAPTER), 0);
}
-static VOID STDCALL MiQueryResources(
+static VOID NTAPI MiQueryResources(
OUT PNDIS_STATUS Status,
IN PNIC_ADAPTER Adapter,
IN NDIS_HANDLE WrapperConfigurationContext)
PNDIS_RESOURCE_LIST AssignedResources;
UINT BufferSize = 0;
PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor;
- int i;
+ UINT i;
NdisMQueryAdapterResources(Status,
WrapperConfigurationContext,
}
}
+VOID
+NTAPI
+MiniportShutdown(PVOID Context)
+{
+ #ifndef NOCARD
+ NICStop((PNIC_ADAPTER)Context);
+ #endif
+}
-static NDIS_STATUS STDCALL MiniportInitialize(
+static NDIS_STATUS NTAPI MiniportInitialize(
OUT PNDIS_STATUS OpenErrorStatus,
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
UINT i;
NDIS_STATUS Status;
PNIC_ADAPTER Adapter;
+ NDIS_HANDLE ConfigurationHandle;
+ UINT *RegNetworkAddress = 0;
+ UINT RegNetworkAddressLength = 0;
+
+ ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
NDIS_DbgPrint(MAX_TRACE, ("Called (Adapter %X).\n", MiniportAdapterHandle));
if (Status != NDIS_STATUS_SUCCESS)
{
PNDIS_CONFIGURATION_PARAMETER ConfigurationParameter;
- NDIS_HANDLE ConfigurationHandle;
UNICODE_STRING Keyword;
- UINT *RegNetworkAddress = 0;
- UINT RegNetworkAddressLength = 0;
NdisOpenConfiguration(&Status, &ConfigurationHandle, WrapperConfigurationContext);
if (Status == NDIS_STATUS_SUCCESS)
Adapter->IoBaseAddress = ConfigurationParameter->ParameterData.IntegerData;
}
- /* the returned copy of the data is owned by NDIS and will be released on NdisCloseConfiguration */
- NdisReadNetworkAddress(&Status, (PVOID *)&RegNetworkAddress, &RegNetworkAddressLength, ConfigurationHandle);
- if(Status == NDIS_STATUS_SUCCESS && RegNetworkAddressLength == DRIVER_LENGTH_OF_ADDRESS)
- {
- int i;
- NDIS_DbgPrint(MID_TRACE,("NdisReadNetworkAddress returned successfully, address %x:%x:%x:%x:%x:%x\n",
- RegNetworkAddress[0], RegNetworkAddress[1], RegNetworkAddress[2], RegNetworkAddress[3],
- RegNetworkAddress[4], RegNetworkAddress[5]));
- for(i = 0; i < DRIVER_LENGTH_OF_ADDRESS; i++)
- Adapter->StationAddress[i] = RegNetworkAddress[i];
- }
-
NdisCloseConfiguration(ConfigurationHandle);
}
else
return Status;
}
+ NdisOpenConfiguration(&Status, &ConfigurationHandle, WrapperConfigurationContext);
+ if (Status == NDIS_STATUS_SUCCESS)
+ {
+ NdisReadNetworkAddress(&Status, (PVOID *)&RegNetworkAddress, &RegNetworkAddressLength, ConfigurationHandle);
+ if(Status == NDIS_STATUS_SUCCESS && RegNetworkAddressLength == DRIVER_LENGTH_OF_ADDRESS)
+ {
+ int i;
+ NDIS_DbgPrint(MID_TRACE,("NdisReadNetworkAddress returned successfully, address %x:%x:%x:%x:%x:%x\n",
+ RegNetworkAddress[0], RegNetworkAddress[1], RegNetworkAddress[2], RegNetworkAddress[3],
+ RegNetworkAddress[4], RegNetworkAddress[5]));
+ for(i = 0; i < DRIVER_LENGTH_OF_ADDRESS; i++)
+ Adapter->StationAddress[i] = RegNetworkAddress[i];
+ }
+
+ NdisCloseConfiguration(ConfigurationHandle);
+ }
+
+ if (Status != NDIS_STATUS_SUCCESS || RegNetworkAddressLength != DRIVER_LENGTH_OF_ADDRESS)
+ {
+ int i;
+ for (i = 0; i < DRIVER_LENGTH_OF_ADDRESS; i++)
+ Adapter->StationAddress[i] = Adapter->PermanentAddress[i];
+ }
+
NDIS_DbgPrint(MID_TRACE, ("BOARDDATA:\n"));
for (i = 0; i < 4; i++) {
NDIS_DbgPrint(MID_TRACE, ("%02X %02X %02X %02X\n",
/* Start the NIC */
NICStart(Adapter);
#endif
+
+ /* Register the shutdown handler */
+ NdisMRegisterAdapterShutdownHandler(MiniportAdapterHandle, Adapter, MiniportShutdown);
+
+ Adapter->ShutdownHandlerRegistered = TRUE;
+
/* Add adapter to the global adapter list */
InsertTailList(&DriverInfo.AdapterListHead, &Adapter->ListEntry);
}
-static VOID STDCALL MiniportISR(
+static VOID NTAPI MiniportISR(
OUT PBOOLEAN InterruptRecognized,
OUT PBOOLEAN QueueMiniportHandleInterrupt,
IN NDIS_HANDLE MiniportAdapterContext)
}
-static NDIS_STATUS STDCALL MiniportQueryInformation(
+static NDIS_STATUS NTAPI MiniportQueryInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
}
-static NDIS_STATUS STDCALL MiniportReconfigure(
+static NDIS_STATUS NTAPI MiniportReconfigure(
OUT PNDIS_STATUS OpenErrorStatus,
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE WrapperConfigurationContext)
-static NDIS_STATUS STDCALL MiniportReset(
+static NDIS_STATUS NTAPI MiniportReset(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext)
/*
* Status of operation
*/
{
+ NDIS_STATUS NdisStatus = NDIS_STATUS_SUCCESS;
+
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
- return NDIS_STATUS_FAILURE;
+#ifndef NOCARD
+ NdisStatus = NICReset((PNIC_ADAPTER)MiniportAdapterContext);
+#endif
+
+ *AddressingReset = TRUE;
+
+ return NdisStatus;
}
-static NDIS_STATUS STDCALL MiniportSend(
+static NDIS_STATUS NTAPI MiniportSend(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet,
IN UINT Flags)
{
PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
+ ASSERT_IRQL_EQUAL(DISPATCH_LEVEL);
+
+#ifndef NOCARD
NDIS_DbgPrint(MID_TRACE, ("Queueing packet.\n"));
-#ifdef NOCARD
- NdisMSendComplete(Adapter->MiniportAdapterHandle,
- Packet,
- NDIS_STATUS_SUCCESS);
-#else
/* Queue the packet on the transmit queue */
RESERVED(Packet)->Next = NULL;
if (Adapter->TXQueueHead == NULL) {
/* Transmit the packet */
NICTransmit(Adapter);
-#endif
+
return NDIS_STATUS_PENDING;
+#else
+ return NDIS_STATUS_SUCCESS;
+#endif
}
-static NDIS_STATUS STDCALL MiniportSetInformation(
+static NDIS_STATUS NTAPI MiniportSetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
}
-static NDIS_STATUS STDCALL MiniportTransferData(
+static NDIS_STATUS NTAPI MiniportTransferData(
OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred,
IN NDIS_HANDLE MiniportAdapterContext,
NTSTATUS
-#ifndef _MSC_VER
-STDCALL
-#endif
+NTAPI
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath)
NdisZeroMemory(&Miniport, sizeof(Miniport));
Miniport.MajorNdisVersion = DRIVER_NDIS_MAJOR_VERSION;
Miniport.MinorNdisVersion = DRIVER_NDIS_MINOR_VERSION;
- Miniport.CheckForHangHandler = NULL; //MiniportCheckForHang;
+ Miniport.CheckForHangHandler = MiniportCheckForHang;
Miniport.DisableInterruptHandler = MiniportDisableInterrupt;
Miniport.EnableInterruptHandler = MiniportEnableInterrupt;
Miniport.HaltHandler = MiniportHalt;
RegistryPath,
NULL);
+ if (!NdisWrapperHandle) {
+ NDIS_DbgPrint(MIN_TRACE, ("NdisMInitializeWrapper() failed\n"));
+ return STATUS_UNSUCCESSFUL;
+ }
+
DriverInfo.NdisWrapperHandle = NdisWrapperHandle;
DriverInfo.NdisMacHandle = NULL;
InitializeListHead(&DriverInfo.AdapterListHead);
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint("ne2000!MiniportInitialize: failed to set DwordTest: 0x%x\n", Status);
- KeBugCheck(0);
+ DbgBreakPoint();
}
DbgPrint("ne2000!MiniportInitialize: DwordTest successfully set\n");
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint("ne2000!MiniportInitialize: failed to set StringTest: 0x%x\n", Status);
- KeBugCheck(0);
+ DbgBreakPoint();
}
DbgPrint("ne2000!MiniportInitialize: StringTest successfully set\n");
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint("ne2000!MiniportInitialize: failed to read DwordTest: 0x%x\n", Status);
- KeBugCheck(0);
+ DbgBreakPoint();
}
if(ParameterValue->ParameterData.IntegerData != 0x12345678)
{
DbgPrint("ne2000!MiniportInitialize: DwordTest value is wrong: 0x%x\n",
ParameterValue->ParameterData.IntegerData);
- KeBugCheck(0);
+ DbgBreakPoint();
}
DbgPrint("ne2000!MiniportInitialize: DwordTest value was correctly read\n");
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint("ne2000!MiniportInitialize: failed to read StringTest: 0x%x\n", Status);
- KeBugCheck(0);
+ DbgBreakPoint();
}
if(wcsncmp(ParameterValue->ParameterData.StringData.Buffer, L"Testing123",
{
DbgPrint("ne2000!MiniportInitialize: StringTest value is wrong: %wZ\n",
&ParameterValue->ParameterData.StringData);
- KeBugCheck(0);
+ DbgBreakPoint();
}
DbgPrint("ne2000!MiniportInitialize: StringTest value was correctly read\n");