#ifndef __MINIPORT_H
#define __MINIPORT_H
+#include <ndis.h>
#include <ndissys.h>
+struct _ADAPTER_BINDING;
typedef struct _HARDWARE_ADDRESS {
union {
} HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
/* Information about a miniport */
-typedef struct _MINIPORT_DRIVER {
- LIST_ENTRY ListEntry; /* Entry on global list */
- KSPIN_LOCK Lock; /* Protecting spin lock */
- ULONG RefCount; /* Reference count */
- NDIS_MINIPORT_CHARACTERISTICS Chars; /* Miniport characteristics */
- WORK_QUEUE_ITEM WorkItem; /* Work item */
- PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
- LIST_ENTRY AdapterListHead; /* Adapters created by miniport */
- PUNICODE_STRING RegistryPath; /* SCM Registry key */
-} MINIPORT_DRIVER, *PMINIPORT_DRIVER;
+typedef struct _NDIS_M_DRIVER_BLOCK {
+ LIST_ENTRY ListEntry; /* Entry on global list */
+ KSPIN_LOCK Lock; /* Protecting spin lock */
+ NDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics; /* Miniport characteristics */
+ WORK_QUEUE_ITEM WorkItem; /* Work item */
+ PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
+ LIST_ENTRY DeviceList; /* Adapters created by miniport */
+ PUNICODE_STRING RegistryPath; /* SCM Registry key */
+} NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
/* resources allocated on behalf on the miniport */
#define MINIPORT_RESOURCE_TYPE_MEMORY 0
PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
} MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
-/* allocated map register list */
-typedef struct _ADAPTER_MAP_REGISTER_LIST {
- LIST_ENTRY ListEntry;
- UINT NumRegisters;
- PVOID MapRegister;
-} ADAPTER_MAP_REGISTER_LIST, *PADAPTER_MAP_REGISTER_LIST;
-
/* a miniport's shared memory */
typedef struct _MINIPORT_SHARED_MEMORY {
- PADAPTER_OBJECT AdapterObject;
+ PDMA_ADAPTER AdapterObject;
ULONG Length;
PHYSICAL_ADDRESS PhysicalAddress;
PVOID VirtualAddress;
BOOLEAN Cached;
} MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
-#define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
-
-/* detected adapters that are driverless */
-typedef struct _ORPHAN_ADATER {
- LIST_ENTRY ListEntry;
- NDIS_STRING RegistryPath;
- INTERFACE_TYPE BusType;
+/* A structure of WrapperConfigurationContext (not compatible with the
+ Windows one). */
+typedef struct _NDIS_WRAPPER_CONTEXT {
+ HANDLE RegistryHandle;
+ PDEVICE_OBJECT DeviceObject;
ULONG BusNumber;
- ULONG SlotNumber;
-} ORPHAN_ADAPTER, *PORPHAN_ADAPTER;
+} NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
+
+#define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
+
+#ifndef NUMBER_OF_WORK_ITEM_TYPES
+
+typedef enum _NDIS_WORK_ITEM_TYPE {
+ NdisWorkItemRequest,
+ NdisWorkItemSend,
+ NdisWorkItemReturnPackets,
+ NdisWorkItemResetRequested,
+ NdisWorkItemResetInProgress,
+ NdisWorkItemHalt,
+ NdisWorkItemSendLoopback,
+ NdisWorkItemMiniportCallback,
+ NdisMaxWorkItems
+} NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
+
+#define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
+#define NUMBER_OF_SINGLE_WORK_ITEMS 6
+
+typedef struct _NDIS_MINIPORT_WORK_ITEM {
+ SINGLE_LIST_ENTRY Link;
+ NDIS_WORK_ITEM_TYPE WorkItemType;
+ PVOID WorkItemContext;
+} NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
+
+typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
+
+typedef VOID (NTAPI *W_MINIPORT_CALLBACK)(
+ IN NDIS_HANDLE MiniportAdapterContext,
+ IN PVOID CallbackContext);
+#endif
/* Information about a logical adapter */
-typedef struct _LOGICAL_ADAPTER
+typedef struct _LOGICAL_ADAPTER
{
NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
- KDPC MiniportDpc; /* DPC routine for adapter */
BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
- NDIS_HANDLE MiniportAdapterBinding; /* Binding handle for current caller */
- ULONG WorkQueueLevel; /* Number of used work item buffers */
- NDIS_MINIPORT_WORK_ITEM WorkQueue[NDIS_MINIPORT_WORK_QUEUE_SIZE];
PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
PNDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
LIST_ENTRY ListEntry; /* Entry on global list */
LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
LIST_ENTRY ProtocolListHead; /* List of bound protocols */
- ULONG RefCount; /* Reference count */
- PMINIPORT_DRIVER Miniport; /* Miniport owning this adapter */
- UNICODE_STRING DeviceName; /* Device name of this adapter */
- ULONG Attributes; /* Attributes of adapter */
- BOOLEAN AttributesSet; /* Whether NdisMSetAttributes(Ex) has been called */
- PVOID QueryBuffer; /* Buffer to use for queries */
- ULONG QueryBufferLength; /* Length of QueryBuffer */
ULONG MediumHeaderSize; /* Size of medium header */
HARDWARE_ADDRESS Address; /* Hardware address of adapter */
ULONG AddressLength; /* Length of hardware address */
PUCHAR LookaheadBuffer; /* Pointer to lookahead buffer */
ULONG LookaheadLength; /* Length of lookahead buffer */
- ULONG CurLookaheadLength; /* Current (selected) length of lookahead buffer */
- ULONG MaxLookaheadLength; /* Maximum length of lookahead buffer */
- PNDIS_PACKET PacketQueueHead; /* Head of packet queue */
- PNDIS_PACKET PacketQueueTail; /* Head of packet queue */
- PNDIS_PACKET LoopPacket; /* Current packet beeing looped */
PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
- UINT MapRegistersRequested; /* Number of outstanding map registers requested */
- PADAPTER_OBJECT AdapterObject; /* Adapter object for DMA ops */
- ADAPTER_MAP_REGISTER_LIST MapRegisterList; /* List of allocated map registers */
- KEVENT DmaEvent; /* Event to support DMA register allocation */
- KSPIN_LOCK DmaLock; /* Spinlock to protect the dma list */
- UINT BusNumber; /* The bus number of the adapter */
- INTERFACE_TYPE BusType; /* The bus type of the adapter */
- UINT SlotNumber; /* The slot number of the adapter*/
- ULONG Irql; /* The Irql assigned to the adapter */
- ULONG Vector; /* The interrupt vector assigned to the adapter */
- KAFFINITY Affinity; /* The processor affinity of the adapter */
- PHYSICAL_ADDRESS BaseIoAddress; /* The base IO address of the adapter */
- PHYSICAL_ADDRESS BaseMemoryAddress; /* The base memory address of mapped memory for the adapter */
- ULONG DmaChannel; /* The DMA channel number of the adapter */
- ULONG DmaPort; /* The DMA port number of the adapter */
- PNDIS_MINIPORT_TIMER Timer; /* The timer object of the adapter */
} LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
#define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
PLOGICAL_ADAPTER Adapter,
NDIS_OID Oid,
ULONG Size,
+ PVOID Buffer,
PULONG BytesWritten);
NDIS_STATUS
MiniQueueWorkItem(
PLOGICAL_ADAPTER Adapter,
NDIS_WORK_ITEM_TYPE WorkItemType,
- PVOID WorkItemContext,
- NDIS_HANDLE Initiator);
+ PVOID WorkItemContext);
NDIS_STATUS
FASTCALL
MiniDequeueWorkItem(
PLOGICAL_ADAPTER Adapter,
NDIS_WORK_ITEM_TYPE *WorkItemType,
- PVOID *WorkItemContext,
- NDIS_HANDLE *Initiator);
+ PVOID *WorkItemContext);
NDIS_STATUS
MiniDoRequest(
- PLOGICAL_ADAPTER Adapter,
+ PNDIS_MINIPORT_BLOCK Adapter,
PNDIS_REQUEST NdisRequest);
-BOOLEAN
+BOOLEAN
NdisFindDevice(
- UINT VendorID,
- UINT DeviceID,
- PUINT BusNumber,
+ UINT VendorID,
+ UINT DeviceID,
+ PUINT BusNumber,
PUINT SlotNumber);
VOID