Merge 15329:15546 from trunk
[reactos.git] / reactos / drivers / net / ndis / include / miniport.h
1 /*
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
6 */
7
8 #ifndef __MINIPORT_H
9 #define __MINIPORT_H
10
11 #include <ndissys.h>
12
13 struct _ADAPTER_BINDING;
14
15 typedef struct _HARDWARE_ADDRESS {
16 union {
17 UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
18 } Type;
19 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
20
21 /* Information about a miniport */
22 typedef struct _MINIPORT_DRIVER {
23 LIST_ENTRY ListEntry; /* Entry on global list */
24 KSPIN_LOCK Lock; /* Protecting spin lock */
25 ULONG RefCount; /* Reference count */
26 NDIS_MINIPORT_CHARACTERISTICS Chars; /* Miniport characteristics */
27 WORK_QUEUE_ITEM WorkItem; /* Work item */
28 PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
29 LIST_ENTRY AdapterListHead; /* Adapters created by miniport */
30 PUNICODE_STRING RegistryPath; /* SCM Registry key */
31 } MINIPORT_DRIVER, *PMINIPORT_DRIVER;
32
33 /* resources allocated on behalf on the miniport */
34 #define MINIPORT_RESOURCE_TYPE_MEMORY 0
35 typedef struct _MINIPORT_RESOURCE {
36 LIST_ENTRY ListEntry;
37 ULONG ResourceType;
38 PVOID Resource;
39 } MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
40
41 /* Configuration context */
42 typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
43 NDIS_HANDLE Handle;
44 LIST_ENTRY ResourceListHead;
45 KSPIN_LOCK ResourceLock;
46 } MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
47
48 /* Bugcheck callback context */
49 typedef struct _MINIPORT_BUGCHECK_CONTEXT {
50 PVOID DriverContext;
51 ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
52 PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
53 } MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
54
55 /* a miniport's shared memory */
56 typedef struct _MINIPORT_SHARED_MEMORY {
57 PDMA_ADAPTER AdapterObject;
58 ULONG Length;
59 PHYSICAL_ADDRESS PhysicalAddress;
60 PVOID VirtualAddress;
61 BOOLEAN Cached;
62 } MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
63
64 /* A structure of WrapperConfigurationContext (not compatible with the
65 Windows one). */
66 typedef struct _NDIS_WRAPPER_CONTEXT {
67 HANDLE RegistryHandle;
68 PDEVICE_OBJECT DeviceObject;
69 ULONG BusNumber;
70 } NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
71
72 #define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
73
74 /* Information about a logical adapter */
75 typedef struct _LOGICAL_ADAPTER
76 {
77 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
78 KDPC MiniportDpc; /* DPC routine for adapter */
79 BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
80 ULONG WorkQueueLevel; /* Number of used work item buffers */
81 INTERNAL_NDIS_MINIPORT_WORK_ITEM WorkQueue[NDIS_MINIPORT_WORK_QUEUE_SIZE];
82 PINTERNAL_NDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
83 PINTERNAL_NDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
84 LIST_ENTRY ListEntry; /* Entry on global list */
85 LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
86 LIST_ENTRY ProtocolListHead; /* List of bound protocols */
87 ULONG RefCount; /* Reference count */
88 PMINIPORT_DRIVER Miniport; /* Miniport owning this adapter */
89 ULONG Attributes; /* Attributes of adapter */
90 BOOLEAN AttributesSet; /* Whether NdisMSetAttributes(Ex) has been called */
91 PVOID QueryBuffer; /* Buffer to use for queries */
92 ULONG QueryBufferLength; /* Length of QueryBuffer */
93 ULONG MediumHeaderSize; /* Size of medium header */
94 HARDWARE_ADDRESS Address; /* Hardware address of adapter */
95 ULONG AddressLength; /* Length of hardware address */
96 PUCHAR LookaheadBuffer; /* Pointer to lookahead buffer */
97 ULONG LookaheadLength; /* Length of lookahead buffer */
98 PNDIS_PACKET PacketQueueHead; /* Head of packet queue */
99 PNDIS_PACKET PacketQueueTail; /* Head of packet queue */
100 PNDIS_PACKET LoopPacket; /* Current packet beeing looped */
101 PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
102 KEVENT DmaEvent; /* Event to support DMA register allocation */
103 KSPIN_LOCK DmaLock; /* Spinlock to protect the dma list */
104 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
105
106 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
107
108 extern LIST_ENTRY MiniportListHead;
109 extern KSPIN_LOCK MiniportListLock;
110 extern LIST_ENTRY AdapterListHead;
111 extern KSPIN_LOCK AdapterListLock;
112
113
114 #ifdef DBG
115 VOID
116 MiniDisplayPacket(
117 PNDIS_PACKET Packet);
118 #endif /* DBG */
119
120 VOID
121 MiniIndicateData(
122 PLOGICAL_ADAPTER Adapter,
123 NDIS_HANDLE MacReceiveContext,
124 PVOID HeaderBuffer,
125 UINT HeaderBufferSize,
126 PVOID LookaheadBuffer,
127 UINT LookaheadBufferSize,
128 UINT PacketSize);
129
130 BOOLEAN
131 MiniAdapterHasAddress(
132 PLOGICAL_ADAPTER Adapter,
133 PNDIS_PACKET Packet);
134
135 PLOGICAL_ADAPTER
136 MiniLocateDevice(
137 PNDIS_STRING AdapterName);
138
139 NDIS_STATUS
140 MiniQueryInformation(
141 PLOGICAL_ADAPTER Adapter,
142 NDIS_OID Oid,
143 ULONG Size,
144 PULONG BytesWritten);
145
146 NDIS_STATUS
147 FASTCALL
148 MiniQueueWorkItem(
149 struct _ADAPTER_BINDING *AdapterBinding,
150 NDIS_WORK_ITEM_TYPE WorkItemType,
151 PVOID WorkItemContext);
152
153 NDIS_STATUS
154 FASTCALL
155 MiniDequeueWorkItem(
156 PLOGICAL_ADAPTER Adapter,
157 struct _ADAPTER_BINDING **AdapterBinding,
158 NDIS_WORK_ITEM_TYPE *WorkItemType,
159 PVOID *WorkItemContext);
160
161 NDIS_STATUS
162 MiniDoRequest(
163 struct _ADAPTER_BINDING *AdapterBinding,
164 PNDIS_REQUEST NdisRequest);
165
166 BOOLEAN
167 NdisFindDevice(
168 UINT VendorID,
169 UINT DeviceID,
170 PUINT BusNumber,
171 PUINT SlotNumber);
172
173 VOID
174 NdisStartDevices();
175
176 #endif /* __MINIPORT_H */
177
178 /* EOF */
179