#ifndef __MINIPORT_H
#define __MINIPORT_H
+#include <ndis.h>
#include <ndissys.h>
+struct _ADAPTER_BINDING;
+
+typedef struct _HARDWARE_ADDRESS {
+ union {
+ UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
+ } Type;
+} 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 */
- NDIS_STRING RegistryPath; /* Registry path of miniport */
- LIST_ENTRY AdapterListHead; /* Adapters created by miniport */
-} MINIPORT_DRIVER, *PMINIPORT_DRIVER;
-
-#define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
+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
+typedef struct _MINIPORT_RESOURCE {
+ LIST_ENTRY ListEntry;
+ ULONG ResourceType;
+ PVOID Resource;
+} MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
+
+/* Configuration context */
+typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
+ NDIS_HANDLE Handle;
+ LIST_ENTRY ResourceListHead;
+ KSPIN_LOCK ResourceLock;
+} MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
+
+/* Bugcheck callback context */
+typedef struct _MINIPORT_BUGCHECK_CONTEXT {
+ PVOID DriverContext;
+ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
+ PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
+} MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
+
+/* a miniport's shared memory */
+typedef struct _MINIPORT_SHARED_MEMORY {
+ PDMA_ADAPTER AdapterObject;
+ ULONG Length;
+ PHYSICAL_ADDRESS PhysicalAddress;
+ PVOID VirtualAddress;
+ BOOLEAN Cached;
+} MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
+
+/* A structure of WrapperConfigurationContext (not compatible with the
+ Windows one). */
+typedef struct _NDIS_WRAPPER_CONTEXT {
+ HANDLE RegistryHandle;
+ PDEVICE_OBJECT DeviceObject;
+ ULONG BusNumber;
+} NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
+
+#define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
/* Information about a logical adapter */
-typedef struct _LOGICAL_ADAPTER {
+typedef struct _LOGICAL_ADAPTER
+{
+ NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
+ BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
+ 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 */
- KSPIN_LOCK Lock; /* Protecting spin lock */
- ULONG RefCount; /* Reference count */
- PMINIPORT_DRIVER Miniport; /* Miniport owning this adapter */
- UNICODE_STRING DeviceName; /* Device name of this adapter */
- PDEVICE_OBJECT DeviceObject; /* Device object of adapter */
- PVOID MiniportAdapterContext; /* Adapter context for miniport */
- ULONG Attributes; /* Attributes of adapter */
- NDIS_INTERFACE_TYPE AdapterType; /* Type of adapter interface */
- /* TRUE if the miniport has called NdisSetAttributes(Ex) for this adapter */
- BOOLEAN AttributesSet;
- PNDIS_MINIPORT_INTERRUPT InterruptObject; /* Interrupt object for adapter */
- PVOID QueryBuffer; /* Buffer to use for queries */
- ULONG QueryBufferLength; /* Length of QueryBuffer */
+ LIST_ENTRY ProtocolListHead; /* List of bound protocols */
+ 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 */
+ PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
} LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
#define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
-
extern LIST_ENTRY MiniportListHead;
extern KSPIN_LOCK MiniportListLock;
extern LIST_ENTRY AdapterListHead;
extern KSPIN_LOCK AdapterListLock;
-PLOGICAL_ADAPTER MiniLocateDevice(
+
+#ifdef DBG
+VOID
+MiniDisplayPacket(
+ PNDIS_PACKET Packet);
+#endif /* DBG */
+
+VOID
+MiniIndicateData(
+ PLOGICAL_ADAPTER Adapter,
+ NDIS_HANDLE MacReceiveContext,
+ PVOID HeaderBuffer,
+ UINT HeaderBufferSize,
+ PVOID LookaheadBuffer,
+ UINT LookaheadBufferSize,
+ UINT PacketSize);
+
+BOOLEAN
+MiniAdapterHasAddress(
+ PLOGICAL_ADAPTER Adapter,
+ PNDIS_PACKET Packet);
+
+PLOGICAL_ADAPTER
+MiniLocateDevice(
PNDIS_STRING AdapterName);
-NDIS_STATUS MiniQueryInformation(
+NDIS_STATUS
+MiniQueryInformation(
PLOGICAL_ADAPTER Adapter,
NDIS_OID Oid,
ULONG Size,
+ PVOID Buffer,
PULONG BytesWritten);
+NDIS_STATUS
+FASTCALL
+MiniQueueWorkItem(
+ PLOGICAL_ADAPTER Adapter,
+ NDIS_WORK_ITEM_TYPE WorkItemType,
+ PVOID WorkItemContext);
+
+NDIS_STATUS
+FASTCALL
+MiniDequeueWorkItem(
+ PLOGICAL_ADAPTER Adapter,
+ NDIS_WORK_ITEM_TYPE *WorkItemType,
+ PVOID *WorkItemContext);
+
+NDIS_STATUS
+MiniDoRequest(
+ PNDIS_MINIPORT_BLOCK Adapter,
+ PNDIS_REQUEST NdisRequest);
+
+BOOLEAN
+NdisFindDevice(
+ UINT VendorID,
+ UINT DeviceID,
+ PUINT BusNumber,
+ PUINT SlotNumber);
+
+VOID
+NdisStartDevices();
+
#endif /* __MINIPORT_H */
/* EOF */
+