2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
4 * FILE: ndis/miniport.h
5 * PURPOSE: Definitions for routines used by NDIS miniport drivers
14 typedef struct _HARDWARE_ADDRESS {
16 UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
18 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
20 /* Information about a miniport */
21 typedef struct _MINIPORT_DRIVER {
22 LIST_ENTRY ListEntry; /* Entry on global list */
23 KSPIN_LOCK Lock; /* Protecting spin lock */
24 ULONG RefCount; /* Reference count */
25 NDIS_MINIPORT_CHARACTERISTICS Chars; /* Miniport characteristics */
26 WORK_QUEUE_ITEM WorkItem; /* Work item */
27 PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
28 LIST_ENTRY AdapterListHead; /* Adapters created by miniport */
29 PUNICODE_STRING RegistryPath; /* SCM Registry key */
30 } MINIPORT_DRIVER, *PMINIPORT_DRIVER;
32 /* resources allocated on behalf on the miniport */
33 #define MINIPORT_RESOURCE_TYPE_MEMORY 0
34 typedef struct _MINIPORT_RESOURCE {
38 } MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
40 /* Configuration context */
41 typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
43 LIST_ENTRY ResourceListHead;
44 KSPIN_LOCK ResourceLock;
45 } MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
47 /* Bugcheck callback context */
48 typedef struct _MINIPORT_BUGCHECK_CONTEXT {
50 ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
51 PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
52 } MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
54 /* allocated map register list */
55 typedef struct _ADAPTER_MAP_REGISTER_LIST {
59 } ADAPTER_MAP_REGISTER_LIST, *PADAPTER_MAP_REGISTER_LIST;
61 /* a miniport's shared memory */
62 typedef struct _MINIPORT_SHARED_MEMORY {
63 PADAPTER_OBJECT AdapterObject;
65 PHYSICAL_ADDRESS PhysicalAddress;
68 } MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
70 #define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
72 /* detected adapters that are driverless */
73 typedef struct _ORPHAN_ADATER {
75 NDIS_STRING RegistryPath;
76 INTERFACE_TYPE BusType;
79 } ORPHAN_ADAPTER, *PORPHAN_ADAPTER;
81 /* Information about a logical adapter */
82 typedef struct _LOGICAL_ADAPTER {
83 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
85 KDPC MiniportDpc; /* DPC routine for adapter */
86 BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
87 NDIS_HANDLE MiniportAdapterBinding; /* Binding handle for current caller */
88 ULONG WorkQueueLevel; /* Number of used work item buffers */
89 NDIS_MINIPORT_WORK_ITEM WorkQueue[NDIS_MINIPORT_WORK_QUEUE_SIZE];
90 PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
91 PNDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
93 LIST_ENTRY ListEntry; /* Entry on global list */
94 LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
95 LIST_ENTRY ProtocolListHead; /* List of bound protocols */
96 ULONG RefCount; /* Reference count */
97 PMINIPORT_DRIVER Miniport; /* Miniport owning this adapter */
98 UNICODE_STRING DeviceName; /* Device name of this adapter */
99 ULONG Attributes; /* Attributes of adapter */
100 /* TRUE if the miniport has called NdisSetAttributes(Ex) for this adapter */
101 BOOLEAN AttributesSet;
102 PVOID QueryBuffer; /* Buffer to use for queries */
103 ULONG QueryBufferLength; /* Length of QueryBuffer */
104 ULONG MediumHeaderSize; /* Size of medium header */
105 HARDWARE_ADDRESS Address; /* Hardware address of adapter */
106 ULONG AddressLength; /* Length of hardware address */
107 PUCHAR LookaheadBuffer; /* Pointer to lookahead buffer */
108 ULONG LookaheadLength; /* Length of lookahead buffer */
109 ULONG CurLookaheadLength; /* Current (selected) length of lookahead buffer */
110 ULONG MaxLookaheadLength; /* Maximum length of lookahead buffer */
112 PNDIS_PACKET PacketQueueHead; /* Head of packet queue */
113 PNDIS_PACKET PacketQueueTail; /* Head of packet queue */
115 PNDIS_PACKET LoopPacket; /* Current packet beeing looped */
116 PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
117 UINT MapRegistersRequested; /* Number of outstanding map registers requested */
118 PADAPTER_OBJECT AdapterObject; /* Adapter object for DMA ops */
119 ADAPTER_MAP_REGISTER_LIST MapRegisterList; /* List of allocated map registers */
120 KEVENT DmaEvent; /* Event to support DMA register allocation */
121 KSPIN_LOCK DmaLock; /* Spinlock to protect the dma list */
123 INTERFACE_TYPE BusType;
128 PHYSICAL_ADDRESS BaseIoAddress;
129 PHYSICAL_ADDRESS BaseMemoryAddress; /* multiple ranges? */
132 PNDIS_MINIPORT_TIMER Timer;
133 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
135 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
137 extern LIST_ENTRY MiniportListHead;
138 extern KSPIN_LOCK MiniportListLock;
139 extern LIST_ENTRY AdapterListHead;
140 extern KSPIN_LOCK AdapterListLock;
146 PNDIS_PACKET Packet);
151 PLOGICAL_ADAPTER Adapter,
152 NDIS_HANDLE MacReceiveContext,
154 UINT HeaderBufferSize,
155 PVOID LookaheadBuffer,
156 UINT LookaheadBufferSize,
160 MiniAdapterHasAddress(
161 PLOGICAL_ADAPTER Adapter,
162 PNDIS_PACKET Packet);
166 PNDIS_STRING AdapterName);
169 MiniQueryInformation(
170 PLOGICAL_ADAPTER Adapter,
173 PULONG BytesWritten);
178 PLOGICAL_ADAPTER Adapter,
179 NDIS_WORK_ITEM_TYPE WorkItemType,
180 PVOID WorkItemContext,
181 NDIS_HANDLE Initiator);
186 PLOGICAL_ADAPTER Adapter,
187 NDIS_WORK_ITEM_TYPE *WorkItemType,
188 PVOID *WorkItemContext,
189 NDIS_HANDLE *Initiator);
193 PLOGICAL_ADAPTER Adapter,
194 PNDIS_REQUEST NdisRequest);
206 #endif /* __MINIPORT_H */