Merge from amd64-branch:
[reactos.git] / reactos / drivers / network / 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 <ndis.h>
12 #include <ndissys.h>
13
14 struct _ADAPTER_BINDING;
15
16 typedef struct _HARDWARE_ADDRESS {
17 union {
18 UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
19 } Type;
20 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
21
22 /* Information about a miniport */
23 typedef struct _NDIS_M_DRIVER_BLOCK {
24 LIST_ENTRY ListEntry; /* Entry on global list */
25 KSPIN_LOCK Lock; /* Protecting spin lock */
26 NDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics; /* Miniport characteristics */
27 WORK_QUEUE_ITEM WorkItem; /* Work item */
28 PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
29 LIST_ENTRY DeviceList; /* Adapters created by miniport */
30 PUNICODE_STRING RegistryPath; /* SCM Registry key */
31 #if !defined(_MSC_VER) && defined(__NDIS_H)
32 } NDIS_M_DRIVER_BLOCK_COMPATIBILITY_HACK_DONT_USE;
33 #else
34 } NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
35 #endif
36
37 /* There must be some defined struct to do this... */
38 typedef struct _NDIS_M_DEVICE_BLOCK {
39 PDEVICE_OBJECT DeviceObject;
40 PNDIS_STRING SymbolicName;
41 } NDIS_M_DEVICE_BLOCK, *PNDIS_M_DEVICE_BLOCK;
42
43 /* resources allocated on behalf on the miniport */
44 #define MINIPORT_RESOURCE_TYPE_MEMORY 0
45 typedef struct _MINIPORT_RESOURCE {
46 LIST_ENTRY ListEntry;
47 ULONG ResourceType;
48 PVOID Resource;
49 } MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
50
51 /* Configuration context */
52 typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
53 NDIS_HANDLE Handle;
54 LIST_ENTRY ResourceListHead;
55 KSPIN_LOCK ResourceLock;
56 } MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
57
58 /* Bugcheck callback context */
59 typedef struct _MINIPORT_BUGCHECK_CONTEXT {
60 PVOID DriverContext;
61 ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
62 PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
63 } MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
64
65 /* a miniport's shared memory */
66 typedef struct _MINIPORT_SHARED_MEMORY {
67 PDMA_ADAPTER AdapterObject;
68 ULONG Length;
69 PHYSICAL_ADDRESS PhysicalAddress;
70 PVOID VirtualAddress;
71 BOOLEAN Cached;
72 PNDIS_MINIPORT_BLOCK Adapter;
73 PVOID Context;
74 PKEVENT Event;
75 } MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
76
77 /* A structure of WrapperConfigurationContext (not compatible with the
78 Windows one). */
79 typedef struct _NDIS_WRAPPER_CONTEXT {
80 HANDLE RegistryHandle;
81 PDEVICE_OBJECT DeviceObject;
82 ULONG BusNumber;
83 } NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
84
85 #define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
86
87 /* Information about a logical adapter */
88 typedef struct _LOGICAL_ADAPTER
89 {
90 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
91 PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
92 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 MediumHeaderSize; /* Size of medium header */
97 HARDWARE_ADDRESS Address; /* Hardware address of adapter */
98 ULONG AddressLength; /* Length of hardware address */
99 PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
100 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
101
102 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
103
104 extern LIST_ENTRY MiniportListHead;
105 extern KSPIN_LOCK MiniportListLock;
106 extern LIST_ENTRY AdapterListHead;
107 extern KSPIN_LOCK AdapterListLock;
108
109
110 #ifdef DBG
111 VOID
112 MiniDisplayPacket(
113 PNDIS_PACKET Packet);
114 #endif /* DBG */
115
116 VOID
117 MiniIndicateData(
118 PLOGICAL_ADAPTER Adapter,
119 NDIS_HANDLE MacReceiveContext,
120 PVOID HeaderBuffer,
121 UINT HeaderBufferSize,
122 PVOID LookaheadBuffer,
123 UINT LookaheadBufferSize,
124 UINT PacketSize);
125
126 BOOLEAN
127 MiniAdapterHasAddress(
128 PLOGICAL_ADAPTER Adapter,
129 PNDIS_PACKET Packet);
130
131 PLOGICAL_ADAPTER
132 MiniLocateDevice(
133 PNDIS_STRING AdapterName);
134
135 NDIS_STATUS
136 MiniQueryInformation(
137 PLOGICAL_ADAPTER Adapter,
138 NDIS_OID Oid,
139 ULONG Size,
140 PVOID Buffer,
141 PULONG BytesWritten);
142
143 VOID
144 FASTCALL
145 MiniQueueWorkItem(
146 PLOGICAL_ADAPTER Adapter,
147 NDIS_WORK_ITEM_TYPE WorkItemType,
148 PVOID WorkItemContext,
149 BOOLEAN Top);
150
151 NDIS_STATUS
152 FASTCALL
153 MiniDequeueWorkItem(
154 PLOGICAL_ADAPTER Adapter,
155 NDIS_WORK_ITEM_TYPE *WorkItemType,
156 PVOID *WorkItemContext);
157
158 NDIS_STATUS
159 MiniDoRequest(
160 PLOGICAL_ADAPTER Adapter,
161 PNDIS_REQUEST NdisRequest);
162
163 BOOLEAN
164 NdisFindDevice(
165 UINT VendorID,
166 UINT DeviceID,
167 PUINT BusNumber,
168 PUINT SlotNumber);
169
170 VOID
171 NdisStartDevices();
172
173 VOID
174 NTAPI
175 MiniportWorker(
176 IN PDEVICE_OBJECT DeviceObject,
177 IN PVOID WorkItem);
178
179 VOID NTAPI
180 MiniSendComplete(
181 IN NDIS_HANDLE MiniportAdapterHandle,
182 IN PNDIS_PACKET Packet,
183 IN NDIS_STATUS Status);
184
185 BOOLEAN
186 MiniIsBusy(
187 PLOGICAL_ADAPTER Adapter,
188 NDIS_WORK_ITEM_TYPE Type);
189
190 #endif /* __MINIPORT_H */
191
192 /* EOF */
193