1 /*-
2 * Copyright (c) 2003
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by Bill Paul.
16 * 4. Neither the name of the author nor the names of any co-contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 * $FreeBSD: src/sys/compat/ndis/ndis_var.h,v 1.49 2008/12/27 08:03:32 weongyo Exp $
33 */
34
35 #ifndef _NDIS_VAR_H_
36 #define _NDIS_VAR_H_
37
38 /* Forward declarations */
39 struct ndis_miniport_block;
40 struct ndis_mdriver_block;
41 typedef struct ndis_miniport_block ndis_miniport_block;
42 typedef struct ndis_mdriver_block ndis_mdriver_block;
43
44 /* Base types */
45 typedef uint32_t ndis_status;
46 typedef void *ndis_handle;
47 typedef uint32_t ndis_oid;
48 typedef uint32_t ndis_error_code;
49 typedef register_t ndis_kspin_lock;
50 typedef uint8_t ndis_kirql;
51
52 /*
53 * NDIS status codes (there are lots of them). The ones that
54 * don't seem to fit the pattern are actually mapped to generic
55 * NT status codes.
56 */
57
58 #define NDIS_STATUS_SUCCESS 0
59 #define NDIS_STATUS_PENDING 0x00000103
60 #define NDIS_STATUS_NOT_RECOGNIZED 0x00010001
61 #define NDIS_STATUS_NOT_COPIED 0x00010002
62 #define NDIS_STATUS_NOT_ACCEPTED 0x00010003
63 #define NDIS_STATUS_CALL_ACTIVE 0x00010007
64 #define NDIS_STATUS_ONLINE 0x40010003
65 #define NDIS_STATUS_RESET_START 0x40010004
66 #define NDIS_STATUS_RESET_END 0x40010005
67 #define NDIS_STATUS_RING_STATUS 0x40010006
68 #define NDIS_STATUS_CLOSED 0x40010007
69 #define NDIS_STATUS_WAN_LINE_UP 0x40010008
70 #define NDIS_STATUS_WAN_LINE_DOWN 0x40010009
71 #define NDIS_STATUS_WAN_FRAGMENT 0x4001000A
72 #define NDIS_STATUS_MEDIA_CONNECT 0x4001000B
73 #define NDIS_STATUS_MEDIA_DISCONNECT 0x4001000C
74 #define NDIS_STATUS_HARDWARE_LINE_UP 0x4001000D
75 #define NDIS_STATUS_HARDWARE_LINE_DOWN 0x4001000E
76 #define NDIS_STATUS_INTERFACE_UP 0x4001000F
77 #define NDIS_STATUS_INTERFACE_DOWN 0x40010010
78 #define NDIS_STATUS_MEDIA_BUSY 0x40010011
79 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION 0x40010012
80 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
81 #define NDIS_STATUS_LINK_SPEED_CHANGE 0x40010013
82 #define NDIS_STATUS_WAN_GET_STATS 0x40010014
83 #define NDIS_STATUS_WAN_CO_FRAGMENT 0x40010015
84 #define NDIS_STATUS_WAN_CO_LINKPARAMS 0x40010016
85 #define NDIS_STATUS_NOT_RESETTABLE 0x80010001
86 #define NDIS_STATUS_SOFT_ERRORS 0x80010003
87 #define NDIS_STATUS_HARD_ERRORS 0x80010004
88 #define NDIS_STATUS_BUFFER_OVERFLOW 0x80000005
89 #define NDIS_STATUS_FAILURE 0xC0000001
90 #define NDIS_STATUS_RESOURCES 0xC000009A
91 #define NDIS_STATUS_CLOSING 0xC0010002
92 #define NDIS_STATUS_BAD_VERSION 0xC0010004
93 #define NDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005
94 #define NDIS_STATUS_ADAPTER_NOT_FOUND 0xC0010006
95 #define NDIS_STATUS_OPEN_FAILED 0xC0010007
96 #define NDIS_STATUS_DEVICE_FAILED 0xC0010008
97 #define NDIS_STATUS_MULTICAST_FULL 0xC0010009
98 #define NDIS_STATUS_MULTICAST_EXISTS 0xC001000A
99 #define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
100 #define NDIS_STATUS_REQUEST_ABORTED 0xC001000C
101 #define NDIS_STATUS_RESET_IN_PROGRESS 0xC001000D
102 #define NDIS_STATUS_CLOSING_INDICATING 0xC001000E
103 #define NDIS_STATUS_NOT_SUPPORTED 0xC00000BB
104 #define NDIS_STATUS_INVALID_PACKET 0xC001000F
105 #define NDIS_STATUS_OPEN_LIST_FULL 0xC0010010
106 #define NDIS_STATUS_ADAPTER_NOT_READY 0xC0010011
107 #define NDIS_STATUS_ADAPTER_NOT_OPEN 0xC0010012
108 #define NDIS_STATUS_NOT_INDICATING 0xC0010013
109 #define NDIS_STATUS_INVALID_LENGTH 0xC0010014
110 #define NDIS_STATUS_INVALID_DATA 0xC0010015
111 #define NDIS_STATUS_BUFFER_TOO_SHORT 0xC0010016
112 #define NDIS_STATUS_INVALID_OID 0xC0010017
113 #define NDIS_STATUS_ADAPTER_REMOVED 0xC0010018
114 #define NDIS_STATUS_UNSUPPORTED_MEDIA 0xC0010019
115 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE 0xC001001A
116 #define NDIS_STATUS_FILE_NOT_FOUND 0xC001001B
117 #define NDIS_STATUS_ERROR_READING_FILE 0xC001001C
118 #define NDIS_STATUS_ALREADY_MAPPED 0xC001001D
119 #define NDIS_STATUS_RESOURCE_CONFLICT 0xC001001E
120 #define NDIS_STATUS_NO_CABLE 0xC001001F
121 #define NDIS_STATUS_INVALID_SAP 0xC0010020
122 #define NDIS_STATUS_SAP_IN_USE 0xC0010021
123 #define NDIS_STATUS_INVALID_ADDRESS 0xC0010022
124 #define NDIS_STATUS_VC_NOT_ACTIVATED 0xC0010023
125 #define NDIS_STATUS_DEST_OUT_OF_ORDER 0xC0010024
126 #define NDIS_STATUS_VC_NOT_AVAILABLE 0xC0010025
127 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE 0xC0010026
128 #define NDIS_STATUS_INCOMPATABLE_QOS 0xC0010027
129 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED 0xC0010028
130 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION 0xC0010029
131 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR 0xC0011000
132 #define NDIS_STATUS_INVALID_DEVICE_REQUEST 0xC0000010
133 #define NDIS_STATUS_NETWORK_UNREACHABLE 0xC000023C
134
135 /*
136 * NDIS event codes. They are usually reported to NdisWriteErrorLogEntry().
137 */
138
139 #define EVENT_NDIS_RESOURCE_CONFLICT 0xC0001388
140 #define EVENT_NDIS_OUT_OF_RESOURCE 0xC0001389
141 #define EVENT_NDIS_HARDWARE_FAILURE 0xC000138A
142 #define EVENT_NDIS_ADAPTER_NOT_FOUND 0xC000138B
143 #define EVENT_NDIS_INTERRUPT_CONNECT 0xC000138C
144 #define EVENT_NDIS_DRIVER_FAILURE 0xC000138D
145 #define EVENT_NDIS_BAD_VERSION 0xC000138E
146 #define EVENT_NDIS_TIMEOUT 0x8000138F
147 #define EVENT_NDIS_NETWORK_ADDRESS 0xC0001390
148 #define EVENT_NDIS_UNSUPPORTED_CONFIGURATION 0xC0001391
149 #define EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER 0xC0001392
150 #define EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER 0xC0001393
151 #define EVENT_NDIS_BAD_IO_BASE_ADDRESS 0xC0001394
152 #define EVENT_NDIS_RECEIVE_SPACE_SMALL 0x40001395
153 #define EVENT_NDIS_ADAPTER_DISABLED 0x80001396
154 #define EVENT_NDIS_IO_PORT_CONFLICT 0x80001397
155 #define EVENT_NDIS_PORT_OR_DMA_CONFLICT 0x80001398
156 #define EVENT_NDIS_MEMORY_CONFLICT 0x80001399
157 #define EVENT_NDIS_INTERRUPT_CONFLICT 0x8000139A
158 #define EVENT_NDIS_DMA_CONFLICT 0x8000139B
159 #define EVENT_NDIS_INVALID_DOWNLOAD_FILE_ERROR 0xC000139C
160 #define EVENT_NDIS_MAXRECEIVES_ERROR 0x8000139D
161 #define EVENT_NDIS_MAXTRANSMITS_ERROR 0x8000139E
162 #define EVENT_NDIS_MAXFRAMESIZE_ERROR 0x8000139F
163 #define EVENT_NDIS_MAXINTERNALBUFS_ERROR 0x800013A0
164 #define EVENT_NDIS_MAXMULTICAST_ERROR 0x800013A1
165 #define EVENT_NDIS_PRODUCTID_ERROR 0x800013A2
166 #define EVENT_NDIS_LOBE_FAILUE_ERROR 0x800013A3
167 #define EVENT_NDIS_SIGNAL_LOSS_ERROR 0x800013A4
168 #define EVENT_NDIS_REMOVE_RECEIVED_ERROR 0x800013A5
169 #define EVENT_NDIS_TOKEN_RING_CORRECTION 0x400013A6
170 #define EVENT_NDIS_ADAPTER_CHECK_ERROR 0xC00013A7
171 #define EVENT_NDIS_RESET_FAILURE_ERROR 0x800013A8
172 #define EVENT_NDIS_CABLE_DISCONNECTED_ERROR 0x800013A9
173 #define EVENT_NDIS_RESET_FAILURE_CORRECTION 0x800013AA
174
175 /*
176 * NDIS OIDs used by the queryinfo/setinfo routines.
177 * Some are required by all NDIS drivers, some are specific to
178 * a particular type of device, and some are purely optional.
179 * Unfortunately, one of the purely optional OIDs is the one
180 * that lets us set the MAC address of the device.
181 */
182
183 /* Required OIDs */
184 #define OID_GEN_SUPPORTED_LIST 0x00010101
185 #define OID_GEN_HARDWARE_STATUS 0x00010102
186 #define OID_GEN_MEDIA_SUPPORTED 0x00010103
187 #define OID_GEN_MEDIA_IN_USE 0x00010104
188 #define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105
189 #define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106
190 #define OID_GEN_LINK_SPEED 0x00010107
191 #define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108
192 #define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109
193 #define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A
194 #define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B
195 #define OID_GEN_VENDOR_ID 0x0001010C
196 #define OID_GEN_VENDOR_DESCRIPTION 0x0001010D
197 #define OID_GEN_CURRENT_PACKET_FILTER 0x0001010E
198 #define OID_GEN_CURRENT_LOOKAHEAD 0x0001010F
199 #define OID_GEN_DRIVER_VERSION 0x00010110
200 #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111
201 #define OID_GEN_PROTOCOL_OPTIONS 0x00010112
202 #define OID_GEN_MAC_OPTIONS 0x00010113
203 #define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114
204 #define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115
205 #define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116
206 #define OID_GEN_SUPPORTED_GUIDS 0x00010117
207 #define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118 /* Set only */
208 #define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119 /* Set only */
209 #define OID_GEN_MACHINE_NAME 0x0001021A
210 #define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B /* Set only */
211 #define OID_GEN_VLAN_ID 0x0001021C
212
213 /* Optional OIDs. */
214 #define OID_GEN_MEDIA_CAPABILITIES 0x00010201
215 #define OID_GEN_PHYSICAL_MEDIUM 0x00010202
216
217 /* Required statistics OIDs. */
218 #define OID_GEN_XMIT_OK 0x00020101
219 #define OID_GEN_RCV_OK 0x00020102
220 #define OID_GEN_XMIT_ERROR 0x00020103
221 #define OID_GEN_RCV_ERROR 0x00020104
222 #define OID_GEN_RCV_NO_BUFFER 0x00020105
223
224 /* Optional OID statistics */
225 #define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201
226 #define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
227 #define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203
228 #define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
229 #define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205
230 #define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
231 #define OID_GEN_DIRECTED_BYTES_RCV 0x00020207
232 #define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
233 #define OID_GEN_MULTICAST_BYTES_RCV 0x00020209
234 #define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A
235 #define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B
236 #define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C
237 #define OID_GEN_RCV_CRC_ERROR 0x0002020D
238 #define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E
239 #define OID_GEN_GET_TIME_CAPS 0x0002020F
240 #define OID_GEN_GET_NETCARD_TIME 0x00020210
241 #define OID_GEN_NETCARD_LOAD 0x00020211
242 #define OID_GEN_DEVICE_PROFILE 0x00020212
243
244 /* 802.3 (ethernet) OIDs */
245 #define OID_802_3_PERMANENT_ADDRESS 0x01010101
246 #define OID_802_3_CURRENT_ADDRESS 0x01010102
247 #define OID_802_3_MULTICAST_LIST 0x01010103
248 #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104
249 #define OID_802_3_MAC_OPTIONS 0x01010105
250 #define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001
251 #define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
252 #define OID_802_3_XMIT_ONE_COLLISION 0x01020102
253 #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
254 #define OID_802_3_XMIT_DEFERRED 0x01020201
255 #define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
256 #define OID_802_3_RCV_OVERRUN 0x01020203
257 #define OID_802_3_XMIT_UNDERRUN 0x01020204
258 #define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205
259 #define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
260 #define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
261
262 /* PnP and power management OIDs */
263 #define OID_PNP_CAPABILITIES 0xFD010100
264 #define OID_PNP_SET_POWER 0xFD010101
265 #define OID_PNP_QUERY_POWER 0xFD010102
266 #define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103
267 #define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104
268 #define OID_PNP_WAKE_UP_PATTERN_LIST 0xFD010105
269 #define OID_PNP_ENABLE_WAKE_UP 0xFD010106
270
271 /*
272 * These are the possible power states for
273 * OID_PNP_SET_POWER and OID_PNP_QUERY_POWER.
274 */
275 #define NDIS_POWERSTATE_UNSPEC 0
276 #define NDIS_POWERSTATE_D0 1
277 #define NDIS_POWERSTATE_D1 2
278 #define NDIS_POWERSTATE_D2 3
279 #define NDIS_POWERSTATE_D3 4
280
281 /*
282 * These are used with the MiniportPnpEventNotify() method.
283 */
284
285 #define NDIS_POWERPROFILE_BATTERY 0
286 #define NDIS_POWERPROFILE_ACONLINE 1
287
288 #define NDIS_PNP_EVENT_QUERY_REMOVED 0
289 #define NDIS_PNP_EVENT_REMOVED 1
290 #define NDIS_PNP_EVENT_SURPRISE_REMOVED 2
291 #define NDIS_PNP_EVENT_QUERY_STOPPED 3
292 #define NDIS_PNP_EVENT_STOPPED 4
293 #define NDIS_PNP_EVENT_PROFILECHANGED 5
294
295
296 /* PnP/PM Statistics (Optional). */
297 #define OID_PNP_WAKE_UP_OK 0xFD020200
298 #define OID_PNP_WAKE_UP_ERROR 0xFD020201
299
300 /* The following bits are defined for OID_PNP_ENABLE_WAKE_UP */
301 #define NDIS_PNP_WAKE_UP_MAGIC_PACKET 0x00000001
302 #define NDIS_PNP_WAKE_UP_PATTERN_MATCH 0x00000002
303 #define NDIS_PNP_WAKE_UP_LINK_CHANGE 0x00000004
304
305 /* 802.11 OIDs */
306 #define OID_802_11_BSSID 0x0D010101
307 #define OID_802_11_SSID 0x0D010102
308 #define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0D010203
309 #define OID_802_11_NETWORK_TYPE_IN_USE 0x0D010204
310 #define OID_802_11_TX_POWER_LEVEL 0x0D010205
311 #define OID_802_11_RSSI 0x0D010206
312 #define OID_802_11_RSSI_TRIGGER 0x0D010207
313 #define OID_802_11_INFRASTRUCTURE_MODE 0x0D010108
314 #define OID_802_11_FRAGMENTATION_THRESHOLD 0x0D010209
315 #define OID_802_11_RTS_THRESHOLD 0x0D01020A
316 #define OID_802_11_NUMBER_OF_ANTENNAS 0x0D01020B
317 #define OID_802_11_RX_ANTENNA_SELECTED 0x0D01020C
318 #define OID_802_11_TX_ANTENNA_SELECTED 0x0D01020D
319 #define OID_802_11_SUPPORTED_RATES 0x0D01020E
320 #define OID_802_11_DESIRED_RATES 0x0D010210
321 #define OID_802_11_CONFIGURATION 0x0D010211
322 #define OID_802_11_STATISTICS 0x0D020212
323 #define OID_802_11_ADD_WEP 0x0D010113
324 #define OID_802_11_REMOVE_WEP 0x0D010114
325 #define OID_802_11_DISASSOCIATE 0x0D010115
326 #define OID_802_11_POWER_MODE 0x0D010216
327 #define OID_802_11_BSSID_LIST 0x0D010217
328 #define OID_802_11_AUTHENTICATION_MODE 0x0D010118
329 #define OID_802_11_PRIVACY_FILTER 0x0D010119
330 #define OID_802_11_BSSID_LIST_SCAN 0x0D01011A
331 #define OID_802_11_WEP_STATUS 0x0D01011B
332 #define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS
333 #define OID_802_11_RELOAD_DEFAULTS 0x0D01011C
334 #define OID_802_11_ADD_KEY 0x0D01011D
335 #define OID_802_11_REMOVE_KEY 0x0D01011E
336 #define OID_802_11_ASSOCIATION_INFORMATION 0x0D01011F
337 #define OID_802_11_TEST 0x0D010120
338 #define OID_802_11_CAPABILITY 0x0D010122
339 #define OID_802_11_PMKID 0x0D010123
340
341 /* structures/definitions for 802.11 */
342 #define NDIS_80211_NETTYPE_11FH 0x00000000
343 #define NDIS_80211_NETTYPE_11DS 0x00000001
344 #define NDIS_80211_NETTYPE_11OFDM5 0x00000002
345 #define NDIS_80211_NETTYPE_11OFDM24 0x00000003
346 #define NDIS_80211_NETTYPE_AUTO 0x00000004
347
348 struct ndis_80211_nettype_list {
349 uint32_t ntl_items;
350 uint32_t ntl_type[1];
351 };
352
353 #define NDIS_80211_POWERMODE_CAM 0x00000000
354 #define NDIS_80211_POWERMODE_MAX_PSP 0x00000001
355 #define NDIS_80211_POWERMODE_FAST_PSP 0x00000002
356
357 typedef uint32_t ndis_80211_power; /* Power in milliwatts */
358 typedef uint32_t ndis_80211_rssi; /* Signal strength in dBm */
359
360 struct ndis_80211_config_fh {
361 uint32_t ncf_length;
362 uint32_t ncf_hoppatterh;
363 uint32_t ncf_hopset;
364 uint32_t ncf_dwelltime;
365 };
366
367 typedef struct ndis_80211_config_fh ndis_80211_config_fh;
368
369 struct ndis_80211_config {
370 uint32_t nc_length;
371 uint32_t nc_beaconperiod;
372 uint32_t nc_atimwin;
373 uint32_t nc_dsconfig;
374 ndis_80211_config_fh nc_fhconfig;
375 };
376
377 typedef struct ndis_80211_config ndis_80211_config;
378
379 struct ndis_80211_stats {
380 uint32_t ns_length;
381 uint64_t ns_txfragcnt;
382 uint64_t ns_txmcastcnt;
383 uint64_t ns_failedcnt;
384 uint64_t ns_retrycnt;
385 uint64_t ns_multiretrycnt;
386 uint64_t ns_rtssuccesscnt;
387 uint64_t ns_rtsfailcnt;
388 uint64_t ns_ackfailcnt;
389 uint64_t ns_dupeframecnt;
390 uint64_t ns_rxfragcnt;
391 uint64_t ns_rxmcastcnt;
392 uint64_t ns_fcserrcnt;
393 };
394
395 typedef struct ndis_80211_stats ndis_80211_stats;
396
397 typedef uint32_t ndis_80211_key_idx;
398
399 struct ndis_80211_wep {
400 uint32_t nw_length;
401 uint32_t nw_keyidx;
402 uint32_t nw_keylen;
403 uint8_t nw_keydata[256];
404 };
405
406 typedef struct ndis_80211_wep ndis_80211_wep;
407
408 #define NDIS_80211_WEPKEY_TX 0x80000000
409 #define NDIS_80211_WEPKEY_PERCLIENT 0x40000000
410
411 #define NDIS_80211_NET_INFRA_IBSS 0x00000000
412 #define NDIS_80211_NET_INFRA_BSS 0x00000001
413 #define NDIS_80211_NET_INFRA_AUTO 0x00000002
414
415 #define NDIS_80211_AUTHMODE_OPEN 0x00000000
416 #define NDIS_80211_AUTHMODE_SHARED 0x00000001
417 #define NDIS_80211_AUTHMODE_AUTO 0x00000002
418 #define NDIS_80211_AUTHMODE_WPA 0x00000003
419 #define NDIS_80211_AUTHMODE_WPAPSK 0x00000004
420 #define NDIS_80211_AUTHMODE_WPANONE 0x00000005
421 #define NDIS_80211_AUTHMODE_WPA2 0x00000006
422 #define NDIS_80211_AUTHMODE_WPA2PSK 0x00000007
423
424 typedef uint8_t ndis_80211_rates[8];
425 typedef uint8_t ndis_80211_rates_ex[16];
426 typedef uint8_t ndis_80211_macaddr[6];
427
428 struct ndis_80211_ssid {
429 uint32_t ns_ssidlen;
430 uint8_t ns_ssid[32];
431 };
432
433 typedef struct ndis_80211_ssid ndis_80211_ssid;
434
435 struct ndis_wlan_bssid {
436 uint32_t nwb_length;
437 ndis_80211_macaddr nwb_macaddr;
438 uint8_t nwb_rsvd[2];
439 ndis_80211_ssid nwb_ssid;
440 uint32_t nwb_privacy;
441 ndis_80211_rssi nwb_rssi;
442 uint32_t nwb_nettype;
443 ndis_80211_config nwb_config;
444 uint32_t nwb_netinfra;
445 ndis_80211_rates nwb_supportedrates;
446 };
447
448 typedef struct ndis_wlan_bssid ndis_wlan_bssid;
449
450 struct ndis_80211_bssid_list {
451 uint32_t nbl_items;
452 ndis_wlan_bssid nbl_bssid[1];
453 };
454
455 typedef struct ndis_80211_bssid_list ndis_80211_bssid_list;
456
457 struct ndis_wlan_bssid_ex {
458 uint32_t nwbx_len;
459 ndis_80211_macaddr nwbx_macaddr;
460 uint8_t nwbx_rsvd[2];
461 ndis_80211_ssid nwbx_ssid;
462 uint32_t nwbx_privacy;
463 ndis_80211_rssi nwbx_rssi;
464 uint32_t nwbx_nettype;
465 ndis_80211_config nwbx_config;
466 uint32_t nwbx_netinfra;
467 ndis_80211_rates_ex nwbx_supportedrates;
468 uint32_t nwbx_ielen;
469 uint8_t nwbx_ies[1];
470 };
471
472 typedef struct ndis_wlan_bssid_ex ndis_wlan_bssid_ex;
473
474 struct ndis_80211_bssid_list_ex {
475 uint32_t nblx_items;
476 ndis_wlan_bssid_ex nblx_bssid[1];
477 };
478
479 typedef struct ndis_80211_bssid_list_ex ndis_80211_bssid_list_ex;
480
481 struct ndis_80211_fixed_ies {
482 uint8_t nfi_tstamp[8];
483 uint16_t nfi_beaconint;
484 uint16_t nfi_caps;
485 };
486
487 struct ndis_80211_variable_ies {
488 uint8_t nvi_elemid;
489 uint8_t nvi_len;
490 uint8_t nvi_data[1];
491 };
492
493 typedef uint32_t ndis_80211_fragthresh;
494 typedef uint32_t ndis_80211_rtsthresh;
495 typedef uint32_t ndis_80211_antenna;
496
497 #define NDIS_80211_PRIVFILT_ACCEPTALL 0x00000000
498 #define NDIS_80211_PRIVFILT_8021XWEP 0x00000001
499
500 #define NDIS_80211_WEPSTAT_ENABLED 0x00000000
501 #define NDIS_80211_WEPSTAT_ENC1ENABLED NDIS_80211_WEPSTAT_ENABLED
502 #define NDIS_80211_WEPSTAT_DISABLED 0x00000001
503 #define NDIS_80211_WEPSTAT_ENCDISABLED NDIS_80211_WEPSTAT_DISABLED
504 #define NDIS_80211_WEPSTAT_KEYABSENT 0x00000002
505 #define NDIS_80211_WEPSTAT_ENC1KEYABSENT NDIS_80211_WEPSTAT_KEYABSENT
506 #define NDIS_80211_WEPSTAT_NOTSUPPORTED 0x00000003
507 #define NDIS_80211_WEPSTAT_ENCNOTSUPPORTED NDIS_80211_WEPSTAT_NOTSUPPORTED
508 #define NDIS_80211_WEPSTAT_ENC2ENABLED 0x00000004
509 #define NDIS_80211_WEPSTAT_ENC2KEYABSENT 0x00000005
510 #define NDIS_80211_WEPSTAT_ENC3ENABLED 0x00000006
511 #define NDIS_80211_WEPSTAT_ENC3KEYABSENT 0x00000007
512
513 #define NDIS_80211_RELOADDEFAULT_WEP 0x00000000
514
515 #define NDIS_80211_STATUSTYPE_AUTH 0x00000000
516 #define NDIS_80211_STATUSTYPE_PMKIDLIST 0x00000001
517
518 struct ndis_80211_status_indication {
519 uint32_t nsi_type;
520 };
521
522 typedef struct ndis_80211_status_indication ndis_80211_status_indication;
523
524 #define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01
525 #define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02
526 #define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06
527 #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E
528
529 struct ndis_80211_auth_request {
530 uint32_t nar_len;
531 ndis_80211_macaddr nar_bssid;
532 uint32_t nar_flags;
533 };
534
535 typedef struct ndis_80211_auth_request ndis_80211_auth_request;
536
537 struct ndis_80211_key {
538 uint32_t nk_len;
539 uint32_t nk_keyidx;
540 uint32_t nk_keylen;
541 ndis_80211_macaddr nk_bssid;
542 uint8_t nk_pad[6];
543 uint64_t nk_keyrsc;
544 uint8_t nk_keydata[32];
545 };
546
547 typedef struct ndis_80211_key ndis_80211_key;
548
549 struct ndis_80211_remove_key {
550 uint32_t nk_len;
551 uint32_t nk_keyidx;
552 ndis_80211_macaddr nk_bssid;
553 };
554
555 typedef struct ndis_80211_remove_key ndis_80211_remove_key;
556
557 #define NDIS_80211_AI_REQFI_CAPABILITIES 0x00000001
558 #define NDIS_80211_AI_REQFI_LISTENINTERVAL 0x00000002
559 #define NDIS_80211_AI_REQFI_CURRENTAPADDRESS 0x00000004
560
561 #define NDIS_80211_AI_RESFI_CAPABILITIES 0x00000001
562 #define NDIS_80211_AI_RESFI_STATUSCODE 0x00000002
563 #define NDIS_80211_AI_RESFI_ASSOCIATIONID 0x00000004
564
565 struct ndis_80211_ai_reqfi {
566 uint16_t naq_caps;
567 uint16_t naq_listentint;
568 ndis_80211_macaddr naq_currentapaddr;
569 };
570
571 typedef struct ndis_80211_ai_reqfi ndis_80211_ai_reqfi;
572
573 struct ndis_80211_ai_resfi {
574 uint16_t nas_caps;
575 uint16_t nas_statuscode;
576 uint16_t nas_associd;
577 };
578
579 typedef struct ndis_80211_ai_resfi ndis_80211_ai_resfi;
580
581 struct ndis_80211_assoc_info {
582 uint32_t nai_len;
583 uint16_t nai_avail_req_fixed_ies;
584 ndis_80211_ai_reqfi nai_req_fixed_ies;
585 uint32_t nai_req_ielen;
586 uint32_t nai_offset_req_ies;
587 uint16_t nai_avail_resp_fixed_ies;
588 ndis_80211_ai_resfi nai_resp_fixed_iex;
589 uint32_t nai_resp_ielen;
590 uint32_t nai_offset_resp_ies;
591 };
592
593 typedef struct ndis_80211_assoc_info ndis_80211_assoc_info;
594
595 struct ndis_80211_auth_event {
596 ndis_80211_status_indication nae_status;
597 ndis_80211_auth_request nae_request[1];
598 };
599
600 typedef struct ndis_80211_auth_event ndis_80211_auth_event;
601
602 struct ndis_80211_test {
603 uint32_t nt_len;
604 uint32_t nt_type;
605 union {
606 ndis_80211_auth_event nt_authevent;
607 uint32_t nt_rssitrigger;
608 } u;
609 };
610
611 typedef struct ndis_80211_test ndis_80211_test;
612
613 struct ndis_80211_auth_encrypt {
614 uint32_t ne_authmode;
615 uint32_t ne_cryptstat;
616 };
617
618 typedef struct ndis_80211_auth_encrypt ndis_80211_auth_encrypt;
619
620 struct ndis_80211_caps {
621 uint32_t nc_len;
622 uint32_t nc_ver;
623 uint32_t nc_numpmkids;
624 ndis_80211_auth_encrypt nc_authencs[1];
625 };
626
627 typedef struct ndis_80211_caps ndis_80211_caps;
628
629 struct ndis_80211_bssidinfo {
630 ndis_80211_macaddr nb_bssid;
631 uint8_t nb_pmkid[16];
632 };
633
634 typedef struct ndis_80211_bssidinfo ndis_80211_bssidinfo;
635
636 struct ndis_80211_pmkid {
637 uint32_t np_len;
638 uint32_t np_bssidcnt;
639 ndis_80211_bssidinfo np_bssidinfo[1];
640 };
641
642 typedef struct ndis_80211_pmkid ndis_80211_pmkid;
643
644 struct ndis_80211_pmkid_cand {
645 ndis_80211_macaddr npc_bssid;
646 uint32_t npc_flags;
647 };
648
649 typedef struct ndis_80211_pmkid_cand ndis_80211_pmkid_cand;
650
651 #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED (0x01)
652
653 struct ndis_80211_pmkid_candidate_list {
654 uint32_t npcl_version;
655 uint32_t npcl_numcandidates;
656 ndis_80211_pmkid_cand npcl_candidatelist[1];
657 };
658
659 typedef struct ndis_80211_pmkid_candidate_list ndis_80211_pmkid_candidate_list;
660
661 struct ndis_80211_enc_indication {
662 uint32_t nei_statustype;
663 ndis_80211_pmkid_candidate_list nei_pmkidlist;
664 };
665
666 typedef struct ndis_80211_enc_indication ndis_80211_enc_indication;
667
668 /* TCP OIDs. */
669
670 #define OID_TCP_TASK_OFFLOAD 0xFC010201
671 #define OID_TCP_TASK_IPSEC_ADD_SA 0xFC010202
672 #define OID_TCP_TASK_IPSEC_DELETE_SA 0xFC010203
673 #define OID_TCP_SAN_SUPPORT 0xFC010204
674
675
676 #define NDIS_TASK_OFFLOAD_VERSION 1
677
678 #define NDIS_TASK_TCPIP_CSUM 0x00000000
679 #define NDIS_TASK_IPSEC 0x00000001
680 #define NDIS_TASK_TCP_LARGESEND 0x00000002
681
682 #define NDIS_ENCAP_UNSPEC 0x00000000
683 #define NDIS_ENCAP_NULL 0x00000001
684 #define NDIS_ENCAP_IEEE802_3 0x00000002
685 #define NDIS_ENCAP_IEEE802_5 0x00000003
686 #define NDIS_ENCAP_SNAP_ROUTED 0x00000004
687 #define NDIS_ENCAP_SNAP_BRIDGED 0x00000005
688
689 #define NDIS_ENCAPFLAG_FIXEDHDRLEN 0x00000001
690
691 struct ndis_encap_fmt {
692 uint32_t nef_encap;
693 uint32_t nef_flags;
694 uint32_t nef_encaphdrlen;
695 };
696
697 typedef struct ndis_encap_fmt ndis_encap_fmt;
698
699 struct ndis_task_offload_hdr {
700 uint32_t ntoh_vers;
701 uint32_t ntoh_len;
702 uint32_t ntoh_rsvd;
703 uint32_t ntoh_offset_firsttask;
704 ndis_encap_fmt ntoh_encapfmt;
705 };
706
707 typedef struct ndis_task_offload_hdr ndis_task_offload_hdr;
708
709 struct ndis_task_offload {
710 uint32_t nto_vers;
711 uint32_t nto_len;
712 uint32_t nto_task;
713 uint32_t nto_offset_nexttask;
714 uint32_t nto_taskbuflen;
715 uint8_t nto_taskbuf[1];
716 };
717
718 typedef struct ndis_task_offload ndis_task_offload;
719
720 #define NDIS_TCPSUM_FLAGS_IP_OPTS 0x00000001
721 #define NDIS_TCPSUM_FLAGS_TCP_OPTS 0x00000002
722 #define NDIS_TCPSUM_FLAGS_TCP_CSUM 0x00000004
723 #define NDIS_TCPSUM_FLAGS_UDP_CSUM 0x00000008
724 #define NDIS_TCPSUM_FLAGS_IP_CSUM 0x00000010
725
726 struct ndis_task_tcpip_csum {
727 uint32_t nttc_v4tx;
728 uint32_t nttc_v4rx;
729 uint32_t nttc_v6tx;
730 uint32_t nttc_v6rx;
731 };
732
733 typedef struct ndis_task_tcpip_csum ndis_task_tcpip_csum;
734
735 struct ndis_task_tcp_largesend {
736 uint32_t nttl_vers;
737 uint32_t nttl_maxofflen;
738 uint32_t nttl_minsegcnt;
739 uint8_t nttl_tcpopt;
740 uint8_t nttl_ipopt;
741 };
742
743 typedef struct ndis_task_tcp_largesend ndis_task_tcp_largesend;
744
745 #define NDIS_IPSEC_AH_MD5 0x00000001
746 #define NDIS_IPSEC_AH_SHA1 0x00000002
747 #define NDIS_IPSEC_AH_TRANSPORT 0x00000004
748 #define NDIS_IPSEC_AH_TUNNEL 0x00000008
749 #define NDIS_IPSEC_AH_SEND 0x00000010
750 #define NDIS_IPSEC_AH_RECEIVE 0x00000020
751
752 #define NDIS_IPSEC_ESP_DES 0x00000001
753 #define NDIS_IPSEC_ESP_RSVD 0x00000002
754 #define NDIS_IPSEC_ESP_3DES 0x00000004
755 #define NDIS_IPSEC_ESP_NULL 0x00000008
756 #define NDIS_IPSEC_ESP_TRANSPORT 0x00000010
757 #define NDIS_IPSEC_ESP_TUNNEL 0x00000020
758 #define NDIS_IPSEC_ESP_SEND 0x00000040
759 #define NDIS_IPSEC_ESP_RECEIVE 0x00000080
760
761 struct ndis_task_ipsec {
762 uint32_t nti_ah_esp_combined;
763 uint32_t nti_ah_transport_tunnel_combined;
764 uint32_t nti_v4_options;
765 uint32_t nti_rsvd;
766 uint32_t nti_v4ah;
767 uint32_t nti_v4esp;
768 };
769
770 typedef struct ndis_task_ipsec ndis_task_ipsec;
771
772 /*
773 * Attribures of NDIS drivers. Not all drivers support
774 * all attributes.
775 */
776
777 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
778 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
779 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
780 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
781 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
782 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
783 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
784 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
785 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
786 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
787
788 #define NDIS_SERIALIZED(block) \
789 (((block)->nmb_flags & NDIS_ATTRIBUTE_DESERIALIZE) == 0)
790
791 enum ndis_media_state {
792 nmc_connected,
793 nmc_disconnected
794 };
795
796 typedef enum ndis_media_state ndis_media_state;
797
798 /* Ndis Packet Filter Bits (OID_GEN_CURRENT_PACKET_FILTER). */
799
800 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
801 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
802 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
803 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
804 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
805 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
806 #define NDIS_PACKET_TYPE_SMT 0x00000040
807 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
808 #define NDIS_PACKET_TYPE_GROUP 0x00001000
809 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
810 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
811 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
812
813
814 /* Ndis MAC option bits (OID_GEN_MAC_OPTIONS). */
815
816 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
817 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
818 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
819 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
820 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
821 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
822 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
823 #define NDIS_MAC_OPTION_SUPPORTS_MAC_ADDRESS_OVERWRITE 0x00000080
824 #define NDIS_MAC_OPTION_RECEIVE_AT_DPC 0x00000100
825 #define NDIS_MAC_OPTION_8021Q_VLAN 0x00000200
826 #define NDIS_MAC_OPTION_RESERVED 0x80000000
827
828 #define NDIS_DMA_24BITS 0x00
829 #define NDIS_DMA_32BITS 0x01
830 #define NDIS_DMA_64BITS 0x02
831
832 /*
833 struct ndis_physaddr {
834 #ifdef __i386__
835 uint64_t np_quad;
836 #endif
837 #ifdef __amd64__
838 uint32_t np_low;
839 uint32_t np_high;
840 #define np_quad np_low
841 #endif
842 #ifdef notdef
843 uint32_t np_low;
844 uint32_t np_high;
845 #endif
846 };
847 */
848
849 typedef struct physaddr ndis_physaddr;
850
851 struct ndis_ansi_string {
852 uint16_t nas_len;
853 uint16_t nas_maxlen;
854 char *nas_buf;
855 };
856
857 typedef struct ndis_ansi_string ndis_ansi_string;
858
859 #ifdef notdef
860 /*
861 * nus_buf is really a wchar_t *, but it's inconvenient to include
862 * all the necessary header goop needed to define it, and it's a
863 * pointer anyway, so for now, just make it a uint16_t *.
864 */
865 struct ndis_unicode_string {
866 uint16_t nus_len;
867 uint16_t nus_maxlen;
868 uint16_t *nus_buf;
869 };
870 typedef struct ndis_unicode_string ndis_unicode_string;
871 #endif
872
873 typedef unicode_string ndis_unicode_string;
874
875 enum ndis_parm_type {
876 ndis_parm_int,
877 ndis_parm_hexint,
878 ndis_parm_string,
879 ndis_parm_multistring,
880 ndis_parm_binary
881 };
882
883 typedef enum ndis_parm_type ndis_parm_type;
884
885 struct ndis_binary_data {
886 uint16_t nbd_len;
887 void *nbd_buf;
888 };
889
890 typedef struct ndis_binary_data ndis_binary_data;
891
892 struct ndis_config_parm {
893 ndis_parm_type ncp_type;
894 union {
895 uint32_t ncp_intdata;
896 ndis_unicode_string ncp_stringdata;
897 ndis_binary_data ncp_binarydata;
898 } ncp_parmdata;
899 };
900
901 /*
902 * Not part of Windows NDIS spec; we uses this to keep a
903 * list of ndis_config_parm structures that we've allocated.
904 */
905
906 typedef struct ndis_config_parm ndis_config_parm;
907
908 struct ndis_parmlist_entry {
909 list_entry np_list;
910 ndis_config_parm np_parm;
911 };
912
913 typedef struct ndis_parmlist_entry ndis_parmlist_entry;
914
915 #ifdef notdef
916 struct ndis_list_entry {
917 struct ndis_list_entry *nle_flink;
918 struct ndis_list_entry *nle_blink;
919 };
920
921 typedef struct ndis_list_entry ndis_list_entry;
922 #endif
923
924 struct ndis_bind_paths {
925 uint32_t nbp_number;
926 ndis_unicode_string nbp_paths[1];
927 };
928
929 typedef struct ndis_bind_paths ndis_bind_paths;
930
931 #ifdef notdef
932 struct dispatch_header {
933 uint8_t dh_type;
934 uint8_t dh_abs;
935 uint8_t dh_size;
936 uint8_t dh_inserted;
937 uint32_t dh_sigstate;
938 list_entry dh_waitlisthead;
939 };
940 #endif
941
942 #define dispatch_header nt_dispatch_header
943
944 struct ndis_ktimer {
945 struct dispatch_header nk_header;
946 uint64_t nk_duetime;
947 list_entry nk_timerlistentry;
948 void *nk_dpc;
949 uint32_t nk_period;
950 };
951
952 struct ndis_kevent {
953 struct dispatch_header nk_header;
954 };
955
956 struct ndis_event {
|