1c631c9ea5df479b477d82329b04ed3f38aba54d
[reactos.git] / reactos / w32api / include / ddk / afilter.h
1 /*
2 * afilter.h
3 *
4 * Address filtering for NDIS MACs
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Filip Navara <xnavara@volny.cz>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef __AFILTER_H
24 #define __AFILTER_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #define ARC_RECEIVE_BUFFERS 64
35 #define ARCNET_ADDRESS_LEN 1
36 #define ARC_PROTOCOL_HEADER_SIZE (sizeof(ARC_PROTOCOL_HEADER))
37 #define ARC_MAX_FRAME_SIZE 504
38 #define ARC_MAX_ADDRESS_IDS 256
39 #define ARC_MAX_FRAME_HEADER_SIZE 6
40 #define ARC_MAX_PACKET_SIZE 576
41 #define ARC_FILTER_MAX_OPENS (sizeof(ULONG) * 8)
42
43 #define ARC_IS_BROADCAST(Address) (BOOLEAN)(!(Address))
44
45 #define ARC_QUERY_FILTER_CLASSES(Filter) ((Filter)->CombinedPacketFilter)
46 #define ARC_QUERY_PACKET_FILTER(Filter, NdisFilterHandle) \
47 (((PARC_BINDING_INFO)(NdisFilterHandle))->PacketFilters)
48
49 typedef ULONG MASK, *PMASK;
50
51 typedef struct _ARC_BUFFER_LIST
52 {
53 PVOID Buffer;
54 UINT Size;
55 UINT BytesLeft;
56 struct _ARC_BUFFER_LIST *Next;
57 } ARC_BUFFER_LIST, *PARC_BUFFER_LIST;
58
59 typedef struct _ARC_PROTOCOL_HEADER
60 {
61 UCHAR SourceId[ARCNET_ADDRESS_LEN];
62 UCHAR DestId[ARCNET_ADDRESS_LEN];
63 UCHAR ProtId;
64 } ARC_PROTOCOL_HEADER, *PARC_PROTOCOL_HEADER;
65
66 typedef struct _ARC_PACKET_HEADER
67 {
68 ARC_PROTOCOL_HEADER ProtHeader;
69 USHORT FrameSequence;
70 UCHAR SplitFlag;
71 UCHAR LastSplitFlag;
72 UCHAR FramesReceived;
73 } ARC_PACKET_HEADER, *PARC_PACKET_HEADER;
74
75 typedef struct _ARC_PACKET
76 {
77 ARC_PACKET_HEADER Header;
78 struct _ARC_PACKET *Next;
79 ULONG TotalLength;
80 BOOLEAN LastFrame;
81 PARC_BUFFER_LIST FirstBuffer;
82 PARC_BUFFER_LIST LastBuffer;
83 NDIS_PACKET TmpNdisPacket;
84 } ARC_PACKET, *PARC_PACKET;
85
86 typedef struct _ARC_BINDING_INFO
87 {
88 PNDIS_OPEN_BLOCK NdisBindingHandle;
89 PVOID Reserved;
90 UINT PacketFilters;
91 ULONG References;
92 struct _ARC_BINDING_INFO *NextOpen;
93 BOOLEAN ReceivedAPacket;
94 UINT OldPacketFilters;
95 } ARC_BINDING_INFO,*PARC_BINDING_INFO;
96
97 typedef struct _ARC_FILTER
98 {
99 struct _NDIS_MINIPORT_BLOCK *Miniport;
100 UINT CombinedPacketFilter;
101 PARC_BINDING_INFO OpenList;
102 NDIS_HANDLE ReceiveBufferPool;
103 PARC_BUFFER_LIST FreeBufferList;
104 PARC_PACKET FreePackets;
105 PARC_PACKET OutstandingPackets;
106 UCHAR AdapterAddress;
107 UINT OldCombinedPacketFilter;
108 } ARC_FILTER,*PARC_FILTER;
109
110 BOOLEAN
111 DDKAPI
112 ArcCreateFilter(
113 IN struct _NDIS_MINIPORT_BLOCK *Miniport,
114 IN UCHAR AdapterAddress,
115 OUT PARC_FILTER *Filter);
116
117 VOID
118 DDKAPI
119 ArcDeleteFilter(
120 IN PARC_FILTER Filter);
121
122 BOOLEAN
123 DDKAPI
124 ArcNoteFilterOpenAdapter(
125 IN PARC_FILTER Filter,
126 IN NDIS_HANDLE NdisBindingHandle,
127 OUT PNDIS_HANDLE NdisFilterHandle);
128
129 NDIS_STATUS
130 DDKAPI
131 ArcDeleteFilterOpenAdapter(
132 IN PARC_FILTER Filter,
133 IN NDIS_HANDLE NdisFilterHandle,
134 IN PNDIS_REQUEST NdisRequest);
135
136 NDIS_STATUS
137 DDKAPI
138 ArcFilterAdjust(
139 IN PARC_FILTER Filter,
140 IN NDIS_HANDLE NdisFilterHandle,
141 IN PNDIS_REQUEST NdisRequest,
142 IN UINT FilterClasses,
143 IN BOOLEAN Set);
144
145 VOID
146 DDKAPI
147 ArcFilterDprIndicateReceiveComplete(
148 IN PARC_FILTER Filter);
149
150 VOID
151 DDKAPI
152 ArcFilterDprIndicateReceive(
153 IN PARC_FILTER Filter,
154 IN PUCHAR pRawHeader,
155 IN PUCHAR pData,
156 IN UINT Length);
157
158 NDIS_STATUS
159 DDKAPI
160 ArcFilterTransferData(
161 IN PARC_FILTER Filter,
162 IN NDIS_HANDLE MacReceiveContext,
163 IN UINT ByteOffset,
164 IN UINT BytesToTransfer,
165 OUT PNDIS_PACKET Packet,
166 OUT PUINT BytesTransfered);
167
168 VOID
169 DDKAPI
170 ArcFreeNdisPacket(
171 IN PARC_PACKET Packet);
172
173 VOID
174 DDKAPI
175 ArcFilterDoIndication(
176 IN PARC_FILTER Filter,
177 IN PARC_PACKET Packet);
178
179 VOID
180 DDKAPI
181 ArcDestroyPacket(
182 IN PARC_FILTER Filter,
183 IN PARC_PACKET Packet);
184
185 #ifdef __cplusplus
186 }
187 #endif
188
189 #endif /* __AFILTER_H */