* REVISIONS:
* CSH 27/08-2000 Created
*/
-#include <roscfg.h>
#include <ne2000.h>
#include <debug.h>
NDIS_PHYSICAL_ADDRESS HighestAcceptableMax = NDIS_PHYSICAL_ADDRESS_CONST(-1, -1);
-#if 0
-static BOOLEAN MiniportCheckForHang(
+static BOOLEAN STDCALL MiniportCheckForHang(
IN NDIS_HANDLE MiniportAdapterContext)
/*
* FUNCTION: Examines if an adapter has hung
return FALSE;
}
-#endif
static VOID STDCALL MiniportDisableInterrupt(
{
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);
}
}
+VOID
+STDCALL
+MiniportShutdown(PVOID Context)
+{
+ #ifndef NOCARD
+ NICStop((PNIC_ADAPTER)Context);
+ #endif
+}
static NDIS_STATUS STDCALL MiniportInitialize(
OUT PNDIS_STATUS OpenErrorStatus,
NDIS_STATUS Status;
PNIC_ADAPTER Adapter;
+ ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
+
NDIS_DbgPrint(MAX_TRACE, ("Called (Adapter %X).\n", MiniportAdapterHandle));
/* Search for 802.3 media which is the only one we support */
/* 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);
NDIS_MEDIUM Medium = NdisMedium802_3;
PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
+ ASSERT_IRQL_EQUAL(DISPATCH_LEVEL);
+
NDIS_DbgPrint(MAX_TRACE, ("Called. Oid (0x%X).\n", Oid));
Status = NDIS_STATUS_SUCCESS;
* Status of operation
*/
{
+ ASSERT_IRQL_EQUAL(DISPATCH_LEVEL);
+
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
return NDIS_STATUS_FAILURE;
{
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
}
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
+ ASSERT_IRQL_EQUAL(DISPATCH_LEVEL);
+
NDIS_DbgPrint(MAX_TRACE, ("Called. Oid (0x%X).\n", Oid));
switch (Oid) {
UINT RecvStop;
PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
+ ASSERT_IRQL_EQUAL(DISPATCH_LEVEL);
+
NDIS_DbgPrint(MAX_TRACE, ("Called. Packet (0x%X) ByteOffset (0x%X) BytesToTransfer (%d).\n",
Packet, ByteOffset, BytesToTransfer));
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);