patch by vizzini - added settings for vmware's net driver, implemented a handful...
[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
14 typedef struct _HARDWARE_ADDRESS {
15 union {
16 UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
17 } Type;
18 } HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
19
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;
31
32 /* resources allocated on behalf on the miniport */
33 #define MINIPORT_RESOURCE_TYPE_MEMORY 0
34 typedef struct _MINIPORT_RESOURCE {
35 LIST_ENTRY ListEntry;
36 ULONG ResourceType;
37 PVOID Resource;
38 } MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
39
40 /* Configuration context */
41 typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
42 NDIS_HANDLE Handle;
43 LIST_ENTRY ResourceListHead;
44 KSPIN_LOCK ResourceLock;
45 } MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
46
47 /* Bugcheck callback context */
48 typedef struct _MINIPORT_BUGCHECK_CONTEXT {
49 PVOID DriverContext;
50 ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
51 PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
52 } MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
53
54 #define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
55
56 /* Information about a logical adapter */
57 typedef struct _LOGICAL_ADAPTER {
58 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
59
60 KDPC MiniportDpc; /* DPC routine for adapter */
61 BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
62 NDIS_HANDLE MiniportAdapterBinding; /* Binding handle for current caller */
63 ULONG WorkQueueLevel; /* Number of used work item buffers */
64 NDIS_MINIPORT_WORK_ITEM WorkQueue[NDIS_MINIPORT_WORK_QUEUE_SIZE];
65 PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
66 PNDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
67
68 LIST_ENTRY ListEntry; /* Entry on global list */
69 LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
70 LIST_ENTRY ProtocolListHead; /* List of bound protocols */
71 ULONG RefCount; /* Reference count */
72 PMINIPORT_DRIVER Miniport; /* Miniport owning this adapter */
73 UNICODE_STRING DeviceName; /* Device name of this adapter */
74 ULONG Attributes; /* Attributes of adapter */
75 /* TRUE if the miniport has called NdisSetAttributes(Ex) for this adapter */
76 BOOLEAN AttributesSet;
77 PVOID QueryBuffer; /* Buffer to use for queries */
78 ULONG QueryBufferLength; /* Length of QueryBuffer */
79 ULONG MediumHeaderSize; /* Size of medium header */
80 HARDWARE_ADDRESS Address; /* Hardware address of adapter */
81 ULONG AddressLength; /* Length of hardware address */
82 PUCHAR LookaheadBuffer; /* Pointer to lookahead buffer */
83 ULONG LookaheadLength; /* Length of lookahead buffer */
84 ULONG CurLookaheadLength; /* Current (selected) length of lookahead buffer */
85 ULONG MaxLookaheadLength; /* Maximum length of lookahead buffer */
86
87 PNDIS_PACKET PacketQueueHead; /* Head of packet queue */
88 PNDIS_PACKET PacketQueueTail; /* Head of packet queue */
89
90 PNDIS_PACKET LoopPacket; /* Current packet beeing looped */
91 PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
92 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
93
94 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
95
96 extern LIST_ENTRY MiniportListHead;
97 extern KSPIN_LOCK MiniportListLock;
98 extern LIST_ENTRY AdapterListHead;
99 extern KSPIN_LOCK AdapterListLock;
100
101
102 #ifdef DBG
103 VOID
104 MiniDisplayPacket(
105 PNDIS_PACKET Packet);
106 #endif /* DBG */
107
108 VOID
109 MiniIndicateData(
110 PLOGICAL_ADAPTER Adapter,
111 NDIS_HANDLE MacReceiveContext,
112 PVOID HeaderBuffer,
113 UINT HeaderBufferSize,
114 PVOID LookaheadBuffer,
115 UINT LookaheadBufferSize,
116 UINT PacketSize);
117
118 BOOLEAN
119 MiniAdapterHasAddress(
120 PLOGICAL_ADAPTER Adapter,
121 PNDIS_PACKET Packet);
122
123 PLOGICAL_ADAPTER
124 MiniLocateDevice(
125 PNDIS_STRING AdapterName);
126
127 NDIS_STATUS
128 MiniQueryInformation(
129 PLOGICAL_ADAPTER Adapter,
130 NDIS_OID Oid,
131 ULONG Size,
132 PULONG BytesWritten);
133
134 NDIS_STATUS
135 FASTCALL
136 MiniQueueWorkItem(
137 PLOGICAL_ADAPTER Adapter,
138 NDIS_WORK_ITEM_TYPE WorkItemType,
139 PVOID WorkItemContext,
140 NDIS_HANDLE Initiator);
141
142 NDIS_STATUS
143 FASTCALL
144 MiniDequeueWorkItem(
145 PLOGICAL_ADAPTER Adapter,
146 NDIS_WORK_ITEM_TYPE *WorkItemType,
147 PVOID *WorkItemContext,
148 NDIS_HANDLE *Initiator);
149
150 NDIS_STATUS
151 MiniDoRequest(
152 PLOGICAL_ADAPTER Adapter,
153 PNDIS_REQUEST NdisRequest);
154
155 #endif /* __MINIPORT_H */
156
157 /* EOF */