From 2f05ba10c97a2b79afdb8d9ef1534542bd4aec51 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 25 Sep 2008 01:02:08 +0000 Subject: [PATCH] - Created a dummy nic driver for testing purposes - Still a work in progress svn path=/branches/aicom-network-fixes/; revision=36500 --- drivers/network/dd/directory.rbuild | 3 + drivers/network/dd/dummynic/debug.h | 22 +++ drivers/network/dd/dummynic/dummynic.rbuild | 13 ++ drivers/network/dd/dummynic/main.c | 161 ++++++++++++++++++++ 4 files changed, 199 insertions(+) create mode 100644 drivers/network/dd/dummynic/debug.h create mode 100644 drivers/network/dd/dummynic/dummynic.rbuild create mode 100644 drivers/network/dd/dummynic/main.c diff --git a/drivers/network/dd/directory.rbuild b/drivers/network/dd/directory.rbuild index f533dad8649..75344e2a5cb 100644 --- a/drivers/network/dd/directory.rbuild +++ b/drivers/network/dd/directory.rbuild @@ -7,4 +7,7 @@ + + + diff --git a/drivers/network/dd/dummynic/debug.h b/drivers/network/dd/dummynic/debug.h new file mode 100644 index 00000000000..c3c421bd37d --- /dev/null +++ b/drivers/network/dd/dummynic/debug.h @@ -0,0 +1,22 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: Dummy NIC Driver + * FILE: debug.h + * PURPOSE: Debugging support macros + */ +#ifndef __DEBUG_H +#define __DEBUG_H + +#ifdef DBG + +#define ASSERT_IRQL_EQUAL(x) ASSERT(KeGetCurrentIrql() == (x)) + +#else /* DBG */ + +#define ASSERT_IRQL_EQUAL(x) + +#endif /* DBG */ + +#endif /* __DEBUG_H */ + +/* EOF */ diff --git a/drivers/network/dd/dummynic/dummynic.rbuild b/drivers/network/dd/dummynic/dummynic.rbuild new file mode 100644 index 00000000000..fe5ea6dcd46 --- /dev/null +++ b/drivers/network/dd/dummynic/dummynic.rbuild @@ -0,0 +1,13 @@ + + + + . + + + + + ndis + ntoskrnl + hal + main.c + diff --git a/drivers/network/dd/dummynic/main.c b/drivers/network/dd/dummynic/main.c new file mode 100644 index 00000000000..5b06f436764 --- /dev/null +++ b/drivers/network/dd/dummynic/main.c @@ -0,0 +1,161 @@ +/* + * Dummy NIC Driver + * + * Copyright (C) 2008 Cameron Gutman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include + +#define NDEBUG +#include +#include "debug.h" + +static VOID +STDCALL +MiniportHandleInterrupt( + IN NDIS_HANDLE MiniportAdapterContext) +{ + DbgPrint("MiniportHandleInterrupt Called\n"); + + ASSERT(MiniportAdapterContext); + ASSERT_IRQL_EQUAL(DISPATCH_LEVEL); +} + + + +static VOID +STDCALL +MiniportHalt( + IN NDIS_HANDLE MiniportAdapterContext) +{ + DbgPrint("MiniportHalt Called\n"); + ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); + ASSERT(MiniportAdapterContext); +} + +static NDIS_STATUS +STDCALL +MiniportInitialize( + OUT PNDIS_STATUS OpenErrorStatus, + OUT PUINT SelectedMediumIndex, + IN PNDIS_MEDIUM MediumArray, + IN UINT MediumArraySize, + IN NDIS_HANDLE MiniportAdapterHandle, + IN NDIS_HANDLE WrapperConfigurationContext) +{ + UINT i = 0; + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; + + DbgPrint("MiniportInitialize Called\n"); + + ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); + ASSERT(MiniportAdapterHandle); + ASSERT(WrapperConfigurationContext); + + for(i = 0; i < MediumArraySize; i++) + if(MediumArray[i] == NdisMedium802_3) + break; + + if(i == MediumArraySize) + Status = NDIS_STATUS_UNSUPPORTED_MEDIA; + else + *SelectedMediumIndex = i; + + *OpenErrorStatus = Status; + + return Status; +} + +static VOID +STDCALL +MiniportISR( + OUT PBOOLEAN InterruptRecognized, + OUT PBOOLEAN QueueMiniportHandleInterrupt, + IN NDIS_HANDLE MiniportAdapterContext) +{ + DbgPrint("MiniportISR Called\n"); + ASSERT(MiniportAdapterContext); +} + +static NDIS_STATUS +STDCALL +MiniportReset( + OUT PBOOLEAN AddressingReset, + IN NDIS_HANDLE MiniportAdapterContext) +{ + DbgPrint("MiniportReset Called\n"); + + ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); + ASSERT(MiniportAdapterContext); + + *AddressingReset = FALSE; + + return NDIS_STATUS_SUCCESS; +} + +static NDIS_STATUS +STDCALL +MiniportSend( + IN NDIS_HANDLE MiniportAdapterContext, + IN PNDIS_PACKET Packet, + IN UINT Flags) +{ + DbgPrint("MiniportSend Called\n"); + + ASSERT(MiniportAdapterContext); + ASSERT_IRQL_EQUAL(DISPATCH_LEVEL); + + return NDIS_STATUS_SUCCESS; +} + +NTSTATUS +STDCALL +DriverEntry( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath) +{ + NDIS_HANDLE WrapperHandle; + NDIS_MINIPORT_CHARACTERISTICS Characteristics; + NDIS_STATUS Status; + + RtlZeroMemory(&Characteristics, sizeof(NDIS_MINIPORT_CHARACTERISTICS)); + Characteristics.MajorNdisVersion = NDIS_MINIPORT_MAJOR_VERSION; + Characteristics.MinorNdisVersion = NDIS_MINIPORT_MINOR_VERSION; + Characteristics.HaltHandler = MiniportHalt; + Characteristics.HandleInterruptHandler = MiniportHandleInterrupt; + Characteristics.InitializeHandler = MiniportInitialize; + Characteristics.ISRHandler = MiniportISR; + //Characteristics.QueryInformationHandler = MiniportQueryInformation; + Characteristics.ResetHandler = MiniportReset; + //Characteristics.SetInformationHandler = MiniportSetInformation; + Characteristics.SendHandler = MiniportSend; + + NdisMInitializeWrapper(&WrapperHandle, DriverObject, RegistryPath, 0); + + if (!WrapperHandle) + return NDIS_STATUS_FAILURE; + + Status = NdisMRegisterMiniport(WrapperHandle, &Characteristics, sizeof(NDIS_MINIPORT_CHARACTERISTICS)); + if (Status != NDIS_STATUS_SUCCESS) { + NdisTerminateWrapper(WrapperHandle, 0); + return NDIS_STATUS_FAILURE; + } + + return NDIS_STATUS_SUCCESS; +} +