- Merge from trunk up to r45543
[reactos.git] / 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_REGISTRY_DATA 0
45 #define MINIPORT_RESOURCE_TYPE_MEMORY 1
46 typedef struct _MINIPORT_RESOURCE {
47 LIST_ENTRY ListEntry;
48 ULONG ResourceType;
49 PVOID Resource;
50 } MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
51
52 /* Configuration context */
53 typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
54 NDIS_HANDLE Handle;
55 LIST_ENTRY ResourceListHead;
56 KSPIN_LOCK ResourceLock;
57 } MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
58
59 /* Bugcheck callback context */
60 typedef struct _MINIPORT_BUGCHECK_CONTEXT {
61 PVOID DriverContext;
62 ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
63 PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
64 } MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
65
66 /* a miniport's shared memory */
67 typedef struct _MINIPORT_SHARED_MEMORY {
68 PDMA_ADAPTER AdapterObject;
69 ULONG Length;
70 PHYSICAL_ADDRESS PhysicalAddress;
71 PVOID VirtualAddress;
72 BOOLEAN Cached;
73 PNDIS_MINIPORT_BLOCK Adapter;
74 PVOID Context;
75 PKEVENT Event;
76 } MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
77
78 /* A structure of WrapperConfigurationContext (not compatible with the
79 Windows one). */
80 typedef struct _NDIS_WRAPPER_CONTEXT {
81 HANDLE RegistryHandle;
82 PDEVICE_OBJECT DeviceObject;
83 ULONG BusNumber;
84 ULONG SlotNumber;
85 } NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
86
87 #define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
88
89 /* Information about a logical adapter */
90 typedef struct _LOGICAL_ADAPTER
91 {
92 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
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 #if 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 NDIS_STATUS
144 MiniBeginRequest(
145 PLOGICAL_ADAPTER Adapter,
146 NDIS_WORK_ITEM_TYPE WorkItemType,
147 PVOID WorkItemContext);
148
149 NDIS_STATUS
150 MiniQueueWorkItemHead(
151 PLOGICAL_ADAPTER Adapter,
152 NDIS_WORK_ITEM_TYPE WorkItemType,
153 PVOID WorkItemContext);
154
155 VOID
156 MiniEndRequest(
157 PLOGICAL_ADAPTER Adapter,
158 NDIS_WORK_ITEM_TYPE WorkItemType);
159
160 NDIS_STATUS
161 MiniDoRequest(
162 PLOGICAL_ADAPTER Adapter,
163 PNDIS_REQUEST NdisRequest);
164
165 BOOLEAN
166 NdisFindDevice(
167 UINT VendorID,
168 UINT DeviceID,
169 PUINT BusNumber,
170 PUINT SlotNumber);
171
172 VOID
173 NdisStartDevices();
174
175 VOID
176 NTAPI
177 MiniportWorker(
178 IN PDEVICE_OBJECT DeviceObject,
179 IN PVOID WorkItem);
180
181 VOID NTAPI
182 MiniSendComplete(
183 IN NDIS_HANDLE MiniportAdapterHandle,
184 IN PNDIS_PACKET Packet,
185 IN NDIS_STATUS Status);
186
187 BOOLEAN
188 MiniIsBusy(
189 PLOGICAL_ADAPTER Adapter,
190 NDIS_WORK_ITEM_TYPE Type);
191
192 NDIS_STATUS
193 MiniReset(
194 PLOGICAL_ADAPTER Adapter);
195
196 VOID
197 MiniDoAddressingReset(
198 PLOGICAL_ADAPTER Adapter);
199
200 #endif /* __MINIPORT_H */
201
202 /* EOF */
203