remove whitespace from end of lines
[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 /* a miniport's shared memory */
55 typedef struct _MINIPORT_SHARED_MEMORY {
56 PDMA_ADAPTER AdapterObject;
57 ULONG Length;
58 PHYSICAL_ADDRESS PhysicalAddress;
59 PVOID VirtualAddress;
60 BOOLEAN Cached;
61 } MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
62
63 /* A structure of WrapperConfigurationContext (not compatible with the
64 Windows one). */
65 typedef struct _NDIS_WRAPPER_CONTEXT {
66 HANDLE RegistryHandle;
67 PDEVICE_OBJECT DeviceObject;
68 ULONG BusNumber;
69 } NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
70
71 #define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle)
72
73 /* Information about a logical adapter */
74 typedef struct _LOGICAL_ADAPTER
75 {
76 NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
77 KDPC MiniportDpc; /* DPC routine for adapter */
78 BOOLEAN MiniportBusy; /* A MiniportXxx routine is executing */
79 ULONG WorkQueueLevel; /* Number of used work item buffers */
80 NDIS_MINIPORT_WORK_ITEM WorkQueue[NDIS_MINIPORT_WORK_QUEUE_SIZE];
81 PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
82 PNDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
83 LIST_ENTRY ListEntry; /* Entry on global list */
84 LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
85 LIST_ENTRY ProtocolListHead; /* List of bound protocols */
86 ULONG RefCount; /* Reference count */
87 PMINIPORT_DRIVER Miniport; /* Miniport owning this adapter */
88 ULONG Attributes; /* Attributes of adapter */
89 BOOLEAN AttributesSet; /* Whether NdisMSetAttributes(Ex) has been called */
90 PVOID QueryBuffer; /* Buffer to use for queries */
91 ULONG QueryBufferLength; /* Length of QueryBuffer */
92 ULONG MediumHeaderSize; /* Size of medium header */
93 HARDWARE_ADDRESS Address; /* Hardware address of adapter */
94 ULONG AddressLength; /* Length of hardware address */
95 PUCHAR LookaheadBuffer; /* Pointer to lookahead buffer */
96 ULONG LookaheadLength; /* Length of lookahead buffer */
97 PNDIS_PACKET PacketQueueHead; /* Head of packet queue */
98 PNDIS_PACKET PacketQueueTail; /* Head of packet queue */
99 PNDIS_PACKET LoopPacket; /* Current packet beeing looped */
100 PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
101 KEVENT DmaEvent; /* Event to support DMA register allocation */
102 KSPIN_LOCK DmaLock; /* Spinlock to protect the dma list */
103 } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
104
105 #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
106
107 extern LIST_ENTRY MiniportListHead;
108 extern KSPIN_LOCK MiniportListLock;
109 extern LIST_ENTRY AdapterListHead;
110 extern KSPIN_LOCK AdapterListLock;
111
112
113 #ifdef DBG
114 VOID
115 MiniDisplayPacket(
116 PNDIS_PACKET Packet);
117 #endif /* DBG */
118
119 VOID
120 MiniIndicateData(
121 PLOGICAL_ADAPTER Adapter,
122 NDIS_HANDLE MacReceiveContext,
123 PVOID HeaderBuffer,
124 UINT HeaderBufferSize,
125 PVOID LookaheadBuffer,
126 UINT LookaheadBufferSize,
127 UINT PacketSize);
128
129 BOOLEAN
130 MiniAdapterHasAddress(
131 PLOGICAL_ADAPTER Adapter,
132 PNDIS_PACKET Packet);
133
134 PLOGICAL_ADAPTER
135 MiniLocateDevice(
136 PNDIS_STRING AdapterName);
137
138 NDIS_STATUS
139 MiniQueryInformation(
140 PLOGICAL_ADAPTER Adapter,
141 NDIS_OID Oid,
142 ULONG Size,
143 PULONG BytesWritten);
144
145 NDIS_STATUS
146 FASTCALL
147 MiniQueueWorkItem(
148 PLOGICAL_ADAPTER Adapter,
149 NDIS_WORK_ITEM_TYPE WorkItemType,
150 PVOID WorkItemContext);
151
152 NDIS_STATUS
153 FASTCALL
154 MiniDequeueWorkItem(
155 PLOGICAL_ADAPTER Adapter,
156 NDIS_WORK_ITEM_TYPE *WorkItemType,
157 PVOID *WorkItemContext);
158
159 NDIS_STATUS
160 MiniDoRequest(
161 PLOGICAL_ADAPTER Adapter,
162 PNDIS_REQUEST NdisRequest);
163
164 BOOLEAN
165 NdisFindDevice(
166 UINT VendorID,
167 UINT DeviceID,
168 PUINT BusNumber,
169 PUINT SlotNumber);
170
171 VOID
172 NdisStartDevices();
173
174 #endif /* __MINIPORT_H */
175
176 /* EOF */
177