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