3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
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.
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.
32 * $FreeBSD: src/sys/compat/ndis/ndis_var.h,v 1.27 2004/07/11 00:19:30 wpaul Exp $
33 * $DragonFly: src/sys/emulation/ndis/ndis_var.h,v 1.3 2005/12/31 23:35:40 dillon Exp $
39 /* Forward declarations */
40 struct ndis_miniport_block;
41 struct ndis_mdriver_block;
42 typedef struct ndis_miniport_block ndis_miniport_block;
43 typedef struct ndis_mdriver_block ndis_mdriver_block;
46 typedef uint32_t ndis_status;
47 typedef void *ndis_handle;
48 typedef uint32_t ndis_oid;
49 typedef uint32_t ndis_error_code;
50 typedef register_t ndis_kspin_lock;
51 typedef uint8_t ndis_kirql;
54 * NDIS status codes (there are lots of them). The ones that
55 * don't seem to fit the pattern are actually mapped to generic
59 #define NDIS_STATUS_SUCCESS 0
60 #define NDIS_STATUS_PENDING 0x00000103
61 #define NDIS_STATUS_NOT_RECOGNIZED 0x00010001
62 #define NDIS_STATUS_NOT_COPIED 0x00010002
63 #define NDIS_STATUS_NOT_ACCEPTED 0x00010003
64 #define NDIS_STATUS_CALL_ACTIVE 0x00010007
65 #define NDIS_STATUS_ONLINE 0x40010003
66 #define NDIS_STATUS_RESET_START 0x40010004
67 #define NDIS_STATUS_RESET_END 0x40010005
68 #define NDIS_STATUS_RING_STATUS 0x40010006
69 #define NDIS_STATUS_CLOSED 0x40010007
70 #define NDIS_STATUS_WAN_LINE_UP 0x40010008
71 #define NDIS_STATUS_WAN_LINE_DOWN 0x40010009
72 #define NDIS_STATUS_WAN_FRAGMENT 0x4001000A
73 #define NDIS_STATUS_MEDIA_CONNECT 0x4001000B
74 #define NDIS_STATUS_MEDIA_DISCONNECT 0x4001000C
75 #define NDIS_STATUS_HARDWARE_LINE_UP 0x4001000D
76 #define NDIS_STATUS_HARDWARE_LINE_DOWN 0x4001000E
77 #define NDIS_STATUS_INTERFACE_UP 0x4001000F
78 #define NDIS_STATUS_INTERFACE_DOWN 0x40010010
79 #define NDIS_STATUS_MEDIA_BUSY 0x40010011
80 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION 0x40010012
81 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
82 #define NDIS_STATUS_LINK_SPEED_CHANGE 0x40010013
83 #define NDIS_STATUS_WAN_GET_STATS 0x40010014
84 #define NDIS_STATUS_WAN_CO_FRAGMENT 0x40010015
85 #define NDIS_STATUS_WAN_CO_LINKPARAMS 0x40010016
86 #define NDIS_STATUS_NOT_RESETTABLE 0x80010001
87 #define NDIS_STATUS_SOFT_ERRORS 0x80010003
88 #define NDIS_STATUS_HARD_ERRORS 0x80010004
89 #define NDIS_STATUS_BUFFER_OVERFLOW 0x80000005
90 #define NDIS_STATUS_FAILURE 0xC0000001
91 #define NDIS_STATUS_RESOURCES 0xC000009A
92 #define NDIS_STATUS_CLOSING 0xC0010002
93 #define NDIS_STATUS_BAD_VERSION 0xC0010004
94 #define NDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005
95 #define NDIS_STATUS_ADAPTER_NOT_FOUND 0xC0010006
96 #define NDIS_STATUS_OPEN_FAILED 0xC0010007
97 #define NDIS_STATUS_DEVICE_FAILED 0xC0010008
98 #define NDIS_STATUS_MULTICAST_FULL 0xC0010009
99 #define NDIS_STATUS_MULTICAST_EXISTS 0xC001000A
100 #define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
101 #define NDIS_STATUS_REQUEST_ABORTED 0xC001000C
102 #define NDIS_STATUS_RESET_IN_PROGRESS 0xC001000D
103 #define NDIS_STATUS_CLOSING_INDICATING 0xC001000E
104 #define NDIS_STATUS_NOT_SUPPORTED 0xC00000BB
105 #define NDIS_STATUS_INVALID_PACKET 0xC001000F
106 #define NDIS_STATUS_OPEN_LIST_FULL 0xC0010010
107 #define NDIS_STATUS_ADAPTER_NOT_READY 0xC0010011
108 #define NDIS_STATUS_ADAPTER_NOT_OPEN 0xC0010012
109 #define NDIS_STATUS_NOT_INDICATING 0xC0010013
110 #define NDIS_STATUS_INVALID_LENGTH 0xC0010014
111 #define NDIS_STATUS_INVALID_DATA 0xC0010015
112 #define NDIS_STATUS_BUFFER_TOO_SHORT 0xC0010016
113 #define NDIS_STATUS_INVALID_OID 0xC0010017
114 #define NDIS_STATUS_ADAPTER_REMOVED 0xC0010018
115 #define NDIS_STATUS_UNSUPPORTED_MEDIA 0xC0010019
116 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE 0xC001001A
117 #define NDIS_STATUS_FILE_NOT_FOUND 0xC001001B
118 #define NDIS_STATUS_ERROR_READING_FILE 0xC001001C
119 #define NDIS_STATUS_ALREADY_MAPPED 0xC001001D
120 #define NDIS_STATUS_RESOURCE_CONFLICT 0xC001001E
121 #define NDIS_STATUS_NO_CABLE 0xC001001F
122 #define NDIS_STATUS_INVALID_SAP 0xC0010020
123 #define NDIS_STATUS_SAP_IN_USE 0xC0010021
124 #define NDIS_STATUS_INVALID_ADDRESS 0xC0010022
125 #define NDIS_STATUS_VC_NOT_ACTIVATED 0xC0010023
126 #define NDIS_STATUS_DEST_OUT_OF_ORDER 0xC0010024
127 #define NDIS_STATUS_VC_NOT_AVAILABLE 0xC0010025
128 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE 0xC0010026
129 #define NDIS_STATUS_INCOMPATABLE_QOS 0xC0010027
130 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED 0xC0010028
131 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION 0xC0010029
132 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR 0xC0011000
133 #define NDIS_STATUS_INVALID_DEVICE_REQUEST 0xC0000010
134 #define NDIS_STATUS_NETWORK_UNREACHABLE 0xC000023C
137 * NDIS event codes. They are usually reported to NdisWriteErrorLogEntry().
140 #define EVENT_NDIS_RESOURCE_CONFLICT 0xC0001388
141 #define EVENT_NDIS_OUT_OF_RESOURCE 0xC0001389
142 #define EVENT_NDIS_HARDWARE_FAILURE 0xC000138A
143 #define EVENT_NDIS_ADAPTER_NOT_FOUND 0xC000138B
144 #define EVENT_NDIS_INTERRUPT_CONNECT 0xC000138C
145 #define EVENT_NDIS_DRIVER_FAILURE 0xC000138D
146 #define EVENT_NDIS_BAD_VERSION 0xC000138E
147 #define EVENT_NDIS_TIMEOUT 0x8000138F
148 #define EVENT_NDIS_NETWORK_ADDRESS 0xC0001390
149 #define EVENT_NDIS_UNSUPPORTED_CONFIGURATION 0xC0001391
150 #define EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER 0xC0001392
151 #define EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER 0xC0001393
152 #define EVENT_NDIS_BAD_IO_BASE_ADDRESS 0xC0001394
153 #define EVENT_NDIS_RECEIVE_SPACE_SMALL 0x40001395
154 #define EVENT_NDIS_ADAPTER_DISABLED 0x80001396
155 #define EVENT_NDIS_IO_PORT_CONFLICT 0x80001397
156 #define EVENT_NDIS_PORT_OR_DMA_CONFLICT 0x80001398
157 #define EVENT_NDIS_MEMORY_CONFLICT 0x80001399
158 #define EVENT_NDIS_INTERRUPT_CONFLICT 0x8000139A
159 #define EVENT_NDIS_DMA_CONFLICT 0x8000139B
160 #define EVENT_NDIS_INVALID_DOWNLOAD_FILE_ERROR 0xC000139C
161 #define EVENT_NDIS_MAXRECEIVES_ERROR 0x8000139D
162 #define EVENT_NDIS_MAXTRANSMITS_ERROR 0x8000139E
163 #define EVENT_NDIS_MAXFRAMESIZE_ERROR 0x8000139F
164 #define EVENT_NDIS_MAXINTERNALBUFS_ERROR 0x800013A0
165 #define EVENT_NDIS_MAXMULTICAST_ERROR 0x800013A1
166 #define EVENT_NDIS_PRODUCTID_ERROR 0x800013A2
167 #define EVENT_NDIS_LOBE_FAILUE_ERROR 0x800013A3
168 #define EVENT_NDIS_SIGNAL_LOSS_ERROR 0x800013A4
169 #define EVENT_NDIS_REMOVE_RECEIVED_ERROR 0x800013A5
170 #define EVENT_NDIS_TOKEN_RING_CORRECTION 0x400013A6
171 #define EVENT_NDIS_ADAPTER_CHECK_ERROR 0xC00013A7
172 #define EVENT_NDIS_RESET_FAILURE_ERROR 0x800013A8
173 #define EVENT_NDIS_CABLE_DISCONNECTED_ERROR 0x800013A9
174 #define EVENT_NDIS_RESET_FAILURE_CORRECTION 0x800013AA
177 * NDIS OIDs used by the queryinfo/setinfo routines.
178 * Some are required by all NDIS drivers, some are specific to
179 * a particular type of device, and some are purely optional.
180 * Unfortunately, one of the purely optional OIDs is the one
181 * that lets us set the MAC address of the device.
185 #define OID_GEN_SUPPORTED_LIST 0x00010101
186 #define OID_GEN_HARDWARE_STATUS 0x00010102
187 #define OID_GEN_MEDIA_SUPPORTED 0x00010103
188 #define OID_GEN_MEDIA_IN_USE 0x00010104
189 #define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105
190 #define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106
191 #define OID_GEN_LINK_SPEED 0x00010107
192 #define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108
193 #define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109
194 #define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A
195 #define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B
196 #define OID_GEN_VENDOR_ID 0x0001010C
197 #define OID_GEN_VENDOR_DESCRIPTION 0x0001010D
198 #define OID_GEN_CURRENT_PACKET_FILTER 0x0001010E
199 #define OID_GEN_CURRENT_LOOKAHEAD 0x0001010F
200 #define OID_GEN_DRIVER_VERSION 0x00010110
201 #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111
202 #define OID_GEN_PROTOCOL_OPTIONS 0x00010112
203 #define OID_GEN_MAC_OPTIONS 0x00010113
204 #define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114
205 #define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115
206 #define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116
207 #define OID_GEN_SUPPORTED_GUIDS 0x00010117
208 #define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118 /* Set only */
209 #define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119 /* Set only */
210 #define OID_GEN_MACHINE_NAME 0x0001021A
211 #define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B /* Set only */
212 #define OID_GEN_VLAN_ID 0x0001021C
215 #define OID_GEN_MEDIA_CAPABILITIES 0x00010201
216 #define OID_GEN_PHYSICAL_MEDIUM 0x00010202
218 /* Required statistics OIDs. */
219 #define OID_GEN_XMIT_OK 0x00020101
220 #define OID_GEN_RCV_OK 0x00020102
221 #define OID_GEN_XMIT_ERROR 0x00020103
222 #define OID_GEN_RCV_ERROR 0x00020104
223 #define OID_GEN_RCV_NO_BUFFER 0x00020105
225 /* Optional OID statistics */
226 #define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201
227 #define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
228 #define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203
229 #define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
230 #define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205
231 #define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
232 #define OID_GEN_DIRECTED_BYTES_RCV 0x00020207
233 #define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
234 #define OID_GEN_MULTICAST_BYTES_RCV 0x00020209
235 #define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A
236 #define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B
237 #define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C
238 #define OID_GEN_RCV_CRC_ERROR 0x0002020D
239 #define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E
240 #define OID_GEN_GET_TIME_CAPS 0x0002020F
241 #define OID_GEN_GET_NETCARD_TIME 0x00020210
242 #define OID_GEN_NETCARD_LOAD 0x00020211
243 #define OID_GEN_DEVICE_PROFILE 0x00020212
245 /* 802.3 (ethernet) OIDs */
246 #define OID_802_3_PERMANENT_ADDRESS 0x01010101
247 #define OID_802_3_CURRENT_ADDRESS 0x01010102
248 #define OID_802_3_MULTICAST_LIST 0x01010103
249 #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104
250 #define OID_802_3_MAC_OPTIONS 0x01010105
251 #define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001
252 #define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
253 #define OID_802_3_XMIT_ONE_COLLISION 0x01020102
254 #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
255 #define OID_802_3_XMIT_DEFERRED 0x01020201
256 #define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
257 #define OID_802_3_RCV_OVERRUN 0x01020203
258 #define OID_802_3_XMIT_UNDERRUN 0x01020204
259 #define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205
260 #define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
261 #define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
263 /* PnP and power management OIDs */
264 #define OID_PNP_CAPABILITIES 0xFD010100
265 #define OID_PNP_SET_POWER 0xFD010101
266 #define OID_PNP_QUERY_POWER 0xFD010102
267 #define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103
268 #define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104
269 #define OID_PNP_WAKE_UP_PATTERN_LIST 0xFD010105
270 #define OID_PNP_ENABLE_WAKE_UP 0xFD010106
272 /* PnP/PM Statistics (Optional). */
273 #define OID_PNP_WAKE_UP_OK 0xFD020200
274 #define OID_PNP_WAKE_UP_ERROR 0xFD020201
276 /* The following bits are defined for OID_PNP_ENABLE_WAKE_UP */
277 #define NDIS_PNP_WAKE_UP_MAGIC_PACKET 0x00000001
278 #define NDIS_PNP_WAKE_UP_PATTERN_MATCH 0x00000002
279 #define NDIS_PNP_WAKE_UP_LINK_CHANGE 0x00000004
282 #define OID_802_11_BSSID 0x0D010101
283 #define OID_802_11_SSID 0x0D010102
284 #define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0D010203
285 #define OID_802_11_NETWORK_TYPE_IN_USE 0x0D010204
286 #define OID_802_11_TX_POWER_LEVEL 0x0D010205
287 #define OID_802_11_RSSI 0x0D010206
288 #define OID_802_11_RSSI_TRIGGER 0x0D010207
289 #define OID_802_11_INFRASTRUCTURE_MODE 0x0D010108
290 #define OID_802_11_FRAGMENTATION_THRESHOLD 0x0D010209
291 #define OID_802_11_RTS_THRESHOLD 0x0D01020A
292 #define OID_802_11_NUMBER_OF_ANTENNAS 0x0D01020B
293 #define OID_802_11_RX_ANTENNA_SELECTED 0x0D01020C
294 #define OID_802_11_TX_ANTENNA_SELECTED 0x0D01020D
295 #define OID_802_11_SUPPORTED_RATES 0x0D01020E
296 #define OID_802_11_DESIRED_RATES 0x0D010210
297 #define OID_802_11_CONFIGURATION 0x0D010211
298 #define OID_802_11_STATISTICS 0x0D020212
299 #define OID_802_11_ADD_WEP 0x0D010113
300 #define OID_802_11_REMOVE_WEP 0x0D010114
301 #define OID_802_11_DISASSOCIATE 0x0D010115
302 #define OID_802_11_POWER_MODE 0x0D010216
303 #define OID_802_11_BSSID_LIST 0x0D010217
304 #define OID_802_11_AUTHENTICATION_MODE 0x0D010118
305 #define OID_802_11_PRIVACY_FILTER 0x0D010119
306 #define OID_802_11_BSSID_LIST_SCAN 0x0D01011A
307 #define OID_802_11_WEP_STATUS 0x0D01011B
308 #define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS
309 #define OID_802_11_RELOAD_DEFAULTS 0x0D01011C
310 #define OID_802_11_ADD_KEY 0x0D01011D
311 #define OID_802_11_REMOVE_KEY 0x0D01011E
312 #define OID_802_11_ASSOCIATION_INFORMATION 0x0D01011F
313 #define OID_802_11_TEST 0x0D010120
315 /* structures/definitions for 802.11 */
316 #define NDIS_80211_NETTYPE_11FH 0x00000000
317 #define NDIS_80211_NETTYPE_11DS 0x00000001
318 #define NDIS_80211_NETTYPE_11OFDM5 0x00000002
319 #define NDIS_80211_NETTYPE_11OFDM24 0x00000003
321 struct ndis_80211_nettype_list {
323 uint32_t ntl_type[1];
326 #define NDIS_80211_POWERMODE_CAM 0x00000000
327 #define NDIS_80211_POWERMODE_MAX_PSP 0x00000001
328 #define NDIS_80211_POWERMODE_FAST_PSP 0x00000002
330 typedef uint32_t ndis_80211_power; /* Power in milliwatts */
331 typedef uint32_t ndis_80211_rssi; /* Signal strength in dBm */
333 struct ndis_80211_config_fh {
335 uint32_t ncf_hoppatterh;
337 uint32_t ncf_dwelltime;
340 typedef struct ndis_80211_config_fh ndis_80211_config_fh;
342 struct ndis_80211_config {
344 uint32_t nc_beaconperiod;
346 uint32_t nc_dsconfig;
347 ndis_80211_config_fh nc_fhconfig;
350 typedef struct ndis_80211_config ndis_80211_config;
352 struct ndis_80211_stats {
354 uint64_t ns_txfragcnt;
355 uint64_t ns_txmcastcnt;
356 uint64_t ns_failedcnt;
357 uint64_t ns_retrycnt;
358 uint64_t ns_multiretrycnt;
359 uint64_t ns_rtssuccesscnt;
360 uint64_t ns_rtsfailcnt;
361 uint64_t ns_ackfailcnt;
362 uint64_t ns_dupeframecnt;
363 uint64_t ns_rxfragcnt;
364 uint64_t ns_rxmcastcnt;
365 uint64_t ns_fcserrcnt;
368 typedef struct ndis_80211_stats ndis_80211_stats;
370 typedef uint32_t ndis_80211_key_idx;
372 struct ndis_80211_wep {
376 uint8_t nw_keydata[256];
379 typedef struct ndis_80211_wep ndis_80211_wep;
381 #define NDIS_80211_WEPKEY_TX 0x80000000
382 #define NDIS_80211_WEPKEY_PERCLIENT 0x40000000
384 #define NDIS_80211_NET_INFRA_IBSS 0x00000000
385 #define NDIS_80211_NET_INFRA_BSS 0x00000001
386 #define NDIS_80211_NET_INFRA_AUTO 0x00000002
388 #define NDIS_80211_AUTHMODE_OPEN 0x00000000
389 #define NDIS_80211_AUTHMODE_SHARED 0x00000001
390 #define NDIS_80211_AUTHMODE_AUTO 0x00000002
391 #define NDIS_80211_AUTHMODE_WPA 0x00000003
392 #define NDIS_80211_AUTHMODE_WPAPSK 0x00000004
393 #define NDIS_80211_AUTHMODE_WPANONE 0x00000005
395 typedef uint8_t ndis_80211_rates[8];
396 typedef uint8_t ndis_80211_rates_ex[16];
397 typedef uint8_t ndis_80211_macaddr[6];
399 struct ndis_80211_ssid {
404 typedef struct ndis_80211_ssid ndis_80211_ssid;
406 struct ndis_wlan_bssid {
408 ndis_80211_macaddr nwb_macaddr;
410 ndis_80211_ssid nwb_ssid;
411 uint32_t nwb_privacy;
412 ndis_80211_rssi nwb_rssi;
413 uint32_t nwb_nettype;
414 ndis_80211_config nwb_config;
415 uint32_t nwb_netinfra;
416 ndis_80211_rates nwb_supportedrates;
419 typedef struct ndis_wlan_bssid ndis_wlan_bssid;
421 struct ndis_80211_bssid_list {
423 ndis_wlan_bssid nbl_bssid[1];
426 typedef struct ndis_80211_bssid_list ndis_80211_bssid_list;
428 struct ndis_wlan_bssid_ex {
430 ndis_80211_macaddr nwbx_macaddr;
431 uint8_t nwbx_rsvd[2];
432 ndis_80211_ssid nwbx_ssid;
433 uint32_t nwbx_privacy;
434 ndis_80211_rssi nwbx_rssi;
435 uint32_t nwbx_nettype;
436 ndis_80211_config nwbx_config;
437 uint32_t nwbx_netinfra;
438 ndis_80211_rates_ex nwbx_supportedrates;
440 uint32_t nwbx_ies[1];
443 typedef struct ndis_wlan_bssid_ex ndis_wlan_bssid_ex;
445 struct ndis_80211_bssid_list_ex {
447 ndis_wlan_bssid_ex nblx_bssid[1];
450 typedef struct ndis_80211_bssid_list_ex ndis_80211_bssid_list_ex;
452 struct ndis_80211_fixed_ies {
453 uint8_t nfi_tstamp[8];
454 uint16_t nfi_beaconint;
458 struct ndis_80211_variable_ies {
464 typedef uint32_t ndis_80211_fragthresh;
465 typedef uint32_t ndis_80211_rtsthresh;
466 typedef uint32_t ndis_80211_antenna;
468 #define NDIS_80211_PRIVFILT_ACCEPTALL 0x00000000
469 #define NDIS_80211_PRIVFILT_8021XWEP 0x00000001
471 #define NDIS_80211_WEPSTAT_ENABLED 0x00000000
472 #define NDIS_80211_WEPSTAT_ENC1ENABLED NDIS_80211_WEPSTAT_ENABLED
473 #define NDIS_80211_WEPSTAT_DISABLED 0x00000001
474 #define NDIS_80211_WEPSTAT_ENCDISABLED NDIS_80211_WEPSTAT_DISABLED
475 #define NDIS_80211_WEPSTAT_KEYABSENT 0x00000002
476 #define NDIS_80211_WEPSTAT_ENC1KEYABSENT NDIS_80211_WEPSTAT_KEYABSENT
477 #define NDIS_80211_WEPSTAT_NOTSUPPORTED 0x00000003
478 #define NDIS_80211_WEPSTAT_ENCNOTSUPPORTED NDIS_80211_WEPSTAT_NOTSUPPORTED
479 #define NDIS_80211_WEPSTAT_ENC2ENABLED 0x00000004
480 #define NDIS_80211_WEPSTAT_ENC2KEYABSENT 0x00000005
481 #define NDIS_80211_WEPSTAT_ENC3ENABLED 0x00000006
482 #define NDIS_80211_WEPSTAT_ENC3KEYABSENT 0x00000007
484 #define NDIS_80211_RELOADDEFAULT_WEP 0x00000000
486 #define NDIS_80211_STATUSTYPE_AUTH 0x00000000
488 struct ndis_80211_status_indication {
492 typedef struct ndis_80211_status_indication ndis_80211_status_indication;
494 struct ndis_80211_auth_request {
496 ndis_80211_macaddr nar_bssid;
500 typedef struct ndis_80211_auth_request ndis_80211_auth_request;
502 struct ndis_80211_key {
506 ndis_80211_macaddr nk_bssid;
508 uint8_t nk_keydata[256];
511 typedef struct ndis_80211_key ndis_80211_key;
513 struct ndis_80211_remove_key {
516 ndis_80211_macaddr nk_bssid;
519 typedef struct ndis_80211_remove_key ndis_80211_remove_key;
521 #define NDIS_80211_AI_REQFI_CAPABILITIES 0x00000001
522 #define NDIS_80211_AI_REQFI_LISTENINTERVAL 0x00000002
523 #define NDIS_80211_AI_REQFI_CURRENTAPADDRESS 0x00000004
525 #define NDIS_80211_AI_RESFI_CAPABILITIES 0x00000001
526 #define NDIS_80211_AI_RESFI_STATUSCODE 0x00000002
527 #define NDIS_80211_AI_RESFI_ASSOCIATIONID 0x00000004
529 struct ndis_80211_ai_reqfi {
531 uint16_t naq_listentint;
532 ndis_80211_macaddr naq_currentapaddr;
535 typedef struct ndis_80211_ai_reqfi ndis_80211_ai_reqfi;
537 struct ndis_80211_ai_resfi {
539 uint16_t nas_statuscode;
540 uint16_t nas_associd;
543 typedef struct ndis_80211_ai_resfi ndis_80211_ai_resfi;
545 struct ndis_80211_assoc_info {
547 uint16_t nai_avail_req_fixed_ies;
548 ndis_80211_ai_reqfi nai_req_fixed_ies;
549 uint32_t nai_req_ielen;
550 uint32_t nai_offset_req_ies;
551 uint16_t nai_avail_resp_fixed_ies;
552 ndis_80211_ai_resfi nai_resp_fixed_iex;
553 uint32_t nai_resp_ielen;
554 uint32_t nai_offset_resp_ies;
557 typedef struct ndis_80211_assoc_info ndis_80211_assoc_info;
559 struct ndis_80211_auth_event {
560 ndis_80211_status_indication nae_status;
561 ndis_80211_auth_request nae_request[1];
564 typedef struct ndis_80211_auth_event ndis_80211_auth_event;
566 struct ndis_80211_test {
570 ndis_80211_auth_event nt_authevent;
571 uint32_t nt_rssitrigger;
575 typedef struct ndis_80211_test ndis_80211_test;
579 #define OID_TCP_TASK_OFFLOAD 0xFC010201
580 #define OID_TCP_TASK_IPSEC_ADD_SA 0xFC010202
581 #define OID_TCP_TASK_IPSEC_DELETE_SA 0xFC010203
582 #define OID_TCP_SAN_SUPPORT 0xFC010204
585 #define NDIS_TASK_OFFLOAD_VERSION 1
587 #define NDIS_TASK_TCPIP_CSUM 0x00000000
588 #define NDIS_TASK_IPSEC 0x00000001
589 #define NDIS_TASK_TCP_LARGESEND 0x00000002
591 #define NDIS_ENCAP_UNSPEC 0x00000000
592 #define NDIS_ENCAP_NULL 0x00000001
593 #define NDIS_ENCAP_IEEE802_3 0x00000002
594 #define NDIS_ENCAP_IEEE802_5 0x00000003
595 #define NDIS_ENCAP_SNAP_ROUTED 0x00000004
596 #define NDIS_ENCAP_SNAP_BRIDGED 0x00000005
598 #define NDIS_ENCAPFLAG_FIXEDHDRLEN 0x00000001
600 struct ndis_encap_fmt {
603 uint32_t nef_encaphdrlen;
606 typedef struct ndis_encap_fmt ndis_encap_fmt;
608 struct ndis_task_offload_hdr {
612 uint32_t ntoh_offset_firsttask;
613 ndis_encap_fmt ntoh_encapfmt;
616 typedef struct ndis_task_offload_hdr ndis_task_offload_hdr;
618 struct ndis_task_offload {
622 uint32_t nto_offset_nexttask;
623 uint32_t nto_taskbuflen;
624 uint8_t nto_taskbuf[1];
627 typedef struct ndis_task_offload ndis_task_offload;
629 #define NDIS_TCPSUM_FLAGS_IP_OPTS 0x00000001
630 #define NDIS_TCPSUM_FLAGS_TCP_OPTS 0x00000002
631 #define NDIS_TCPSUM_FLAGS_TCP_CSUM 0x00000004
632 #define NDIS_TCPSUM_FLAGS_UDP_CSUM 0x00000008
633 #define NDIS_TCPSUM_FLAGS_IP_CSUM 0x00000010
635 struct ndis_task_tcpip_csum {
642 typedef struct ndis_task_tcpip_csum ndis_task_tcpip_csum;
644 struct ndis_task_tcp_largesend {
646 uint32_t nttl_maxofflen;
647 uint32_t nttl_minsegcnt;
652 typedef struct ndis_task_tcp_largesend ndis_task_tcp_largesend;
654 #define NDIS_IPSEC_AH_MD5 0x00000001
655 #define NDIS_IPSEC_AH_SHA1 0x00000002
656 #define NDIS_IPSEC_AH_TRANSPORT 0x00000004
657 #define NDIS_IPSEC_AH_TUNNEL 0x00000008
658 #define NDIS_IPSEC_AH_SEND 0x00000010
659 #define NDIS_IPSEC_AH_RECEIVE 0x00000020
661 #define NDIS_IPSEC_ESP_DES 0x00000001
662 #define NDIS_IPSEC_ESP_RSVD 0x00000002
663 #define NDIS_IPSEC_ESP_3DES 0x00000004
664 #define NDIS_IPSEC_ESP_NULL 0x00000008
665 #define NDIS_IPSEC_ESP_TRANSPORT 0x00000010
666 #define NDIS_IPSEC_ESP_TUNNEL 0x00000020
667 #define NDIS_IPSEC_ESP_SEND 0x00000040
668 #define NDIS_IPSEC_ESP_RECEIVE 0x00000080
670 struct ndis_task_ipsec {
671 uint32_t nti_ah_esp_combined;
672 uint32_t nti_ah_transport_tunnel_combined;
673 uint32_t nti_v4_options;
679 typedef struct ndis_task_ipsec ndis_task_ipsec;
682 * Attribures of NDIS drivers. Not all drivers support
686 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
687 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
688 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
689 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
690 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
691 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
692 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
693 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
694 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
696 enum ndis_media_state {
701 typedef enum ndis_media_state ndis_media_state;
703 /* Ndis Packet Filter Bits (OID_GEN_CURRENT_PACKET_FILTER). */
705 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
706 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
707 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
708 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
709 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
710 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
711 #define NDIS_PACKET_TYPE_SMT 0x00000040
712 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
713 #define NDIS_PACKET_TYPE_GROUP 0x00001000
714 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
715 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
716 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
719 /* Ndis MAC option bits (OID_GEN_MAC_OPTIONS). */
721 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
722 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
723 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
724 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
725 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
726 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
727 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
728 #define NDIS_MAC_OPTION_SUPPORTS_MAC_ADDRESS_OVERWRITE 0x00000080
729 #define NDIS_MAC_OPTION_RECEIVE_AT_DPC 0x00000100
730 #define NDIS_MAC_OPTION_8021Q_VLAN 0x00000200
731 #define NDIS_MAC_OPTION_RESERVED 0x80000000
733 #define NDIS_DMA_24BITS 0x00
734 #define NDIS_DMA_32BITS 0x01
735 #define NDIS_DMA_64BITS 0x02
737 struct ndis_physaddr {
745 typedef struct ndis_physaddr ndis_physaddr;
747 struct ndis_ansi_string {
753 typedef struct ndis_ansi_string ndis_ansi_string;
756 * nus_buf is really a wchar_t *, but it's inconvenient to include
757 * all the necessary header goop needed to define it, and it's a
758 * pointer anyway, so for now, just make it a uint16_t *.
760 struct ndis_unicode_string {
766 typedef struct ndis_unicode_string ndis_unicode_string;
769 enum ndis_parm_type {
773 ndis_parm_multistring,
777 typedef enum ndis_parm_type ndis_parm_type;
779 struct ndis_binary_data {
784 typedef struct ndis_binary_data ndis_binary_data;
786 struct ndis_config_parm {
787 ndis_parm_type ncp_type;
789 uint32_t ncp_intdata;
790 ndis_unicode_string ncp_stringdata;
791 ndis_binary_data ncp_binarydata;
795 typedef struct ndis_config_parm ndis_config_parm;
798 struct ndis_list_entry {
799 struct ndis_list_entry *nle_flink;
800 struct ndis_list_entry *nle_blink;
803 typedef struct ndis_list_entry ndis_list_entry;
806 struct ndis_bind_paths {
808 ndis_unicode_string nbp_paths[1];
811 typedef struct ndis_bind_paths ndis_bind_paths;
814 struct dispatch_header {
819 uint32_t dh_sigstate;
820 list_entry dh_waitlisthead;
824 #define dispatch_header nt_dispatch_header
827 struct dispatch_header nk_header;
829 list_entry nk_timerlistentry;
835 struct dispatch_header nk_header;
839 struct nt_kevent ne_event;
842 typedef struct ndis_event ndis_event;
844 /* Kernel defered procedure call (i.e. timer callback) */
847 typedef void (*ndis_kdpc_func)(struct ndis_kdpc *, void *, void *, void *);
852 uint8_t nk_importance;
853 list_entry nk_dpclistentry;
854 ndis_kdpc_func nk_deferedfunc;
855 void *nk_deferredctx;
862 struct ktimer nt_ktimer;
866 typedef struct ndis_timer ndis_timer;
868 typedef void (*ndis_timer_function)(void *, void *, void *, void *);
870 struct ndis_miniport_timer {
871 struct ktimer nmt_ktimer;
872 struct kdpc nmt_kdpc;
873 ndis_timer_function nmt_timerfunc;
875 ndis_miniport_block *nmt_block;
876 struct ndis_miniport_timer *nmt_nexttimer;
879 typedef struct ndis_miniport_timer ndis_miniport_timer;
881 struct ndis_spin_lock {
882 ndis_kspin_lock nsl_spinlock;
883 ndis_kirql nsl_kirql;
886 typedef struct ndis_spin_lock ndis_spin_lock;
888 struct ndis_request {
889 uint8_t nr_macreserved[4*sizeof(void *)];
890 uint32_t nr_requesttype;
892 struct _ndis_query_information {
895 uint32_t nr_infobuflen;
896 uint32_t nr_byteswritten;
897 uint32_t nr_bytesneeded;
898 } ndis_query_information;
899 struct _ndis_set_information {
902 uint32_t nr_infobuflen;
903 uint32_t nr_byteswritten;
904 uint32_t nr_bytesneeded;
905 } ndis_set_information;
907 /* NDIS 5.0 extentions */
908 uint8_t nr_ndis_rsvd[9 * sizeof(void *)];
910 uint8_t nr_callmgr_rsvd[2 * sizeof(void *)];
911 uint8_t nr_protocol_rsvd[2 * sizeof(void *)];
913 uint8_t nr_miniport_rsvd[2 * sizeof(void *)];
916 typedef struct ndis_request ndis_request;
921 struct ndis_miniport_interrupt {
923 ndis_kspin_lock ni_dpccountlock;
927 struct ndis_kdpc ni_dpc;
928 ndis_miniport_block *ni_block;
931 struct ndis_kevent ni_dpcsdoneevent;
936 typedef struct ndis_miniport_interrupt ndis_miniport_interrupt;
938 enum ndis_interrupt_mode {
943 typedef enum ndis_interrupt_mode ndis_interrupt_mode;
945 struct ndis_work_item;
947 typedef __stdcall void (*ndis_proc)(struct ndis_work_item *, void *);
949 struct ndis_work_item {
952 uint8_t nwi_wraprsvd[sizeof(void *) * 8];
955 typedef struct ndis_work_item ndis_work_item;
958 struct ndis_buffer *nb_next;
962 void *nb_mappedsystemva;
964 uint32_t nb_bytecount;
965 uint32_t nb_byteoffset;
968 typedef struct ndis_buffer ndis_buffer;
970 struct ndis_sc_element {
971 ndis_physaddr nse_addr;
976 typedef struct ndis_sc_element ndis_sc_element;
978 #define NDIS_MAXSEG 32
979 #define NDIS_BUS_SPACE_SHARED_MAXADDR 0x3E7FFFFF
981 struct ndis_sc_list {
984 ndis_sc_element nsl_elements[NDIS_MAXSEG];
987 typedef struct ndis_sc_list ndis_sc_list;
989 struct ndis_tcpip_csum {
991 uint32_t ntc_txflags;
992 uint32_t ntc_rxflags;
997 typedef struct ndis_tcpip_csum ndis_tcpip_csum;
999 #define NDIS_TXCSUM_DO_IPV4 0x00000001
1000 #define NDIS_TXCSUM_DO_IPV6 0x00000002
1001 #define NDIS_TXCSUM_DO_TCP 0x00000004
1002 #define NDIS_TXCSUM_DO_UDP 0x00000008
1003 #define NDIS_TXCSUM_DO_IP 0x00000010
1005 #define NDIS_RXCSUM_TCP_FAILED 0x00000001
1006 #define NDIS_RXCSUM_UDP_FAILED 0x00000002
1007 #define NDIS_RXCSUM_IP_FAILED 0x00000004
1008 #define NDIS_RXCSUM_TCP_PASSED 0x00000008
1009 #define NDIS_RXCSUM_UDP_PASSED 0x00000010
1010 #define NDIS_RXCSUM_IP_PASSED 0x00000020
1011 #define NDIS_RXCSUM_LOOPBACK 0x00000040
1016 uint32_t nvt_userprio:3;
1017 uint32_t nvt_canformatid:1;
1018 uint32_t nvt_vlanid:12;
1019 uint32_t nvt_rsvd:16;
1024 typedef struct ndis_vlan ndis_vlan;
1026 enum ndis_perpkt_info {
1027 ndis_tcpipcsum_info,
1029 ndis_largesend_info,
1030 ndis_classhandle_info,
1033 ndis_ieee8021q_info,
1034 ndis_originalpkt_info,
1035 ndis_packetcancelid,
1039 typedef enum ndis_perpkt_info ndis_perpkt_info;
1041 struct ndis_packet_extension {
1042 void *npe_info[ndis_maxpkt_info];
1045 typedef struct ndis_packet_extension ndis_packet_extension;
1047 struct ndis_packet_private {
1048 uint32_t npp_physcnt;
1049 uint32_t npp_totlen;
1050 ndis_buffer *npp_head;
1051 ndis_buffer *npp_tail;
1056 uint8_t npp_validcounts;
1057 uint8_t npp_ndispktflags;
1058 uint16_t npp_packetooboffset;
1061 #define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000F
1062 #define NDIS_FLAGS_MULTICAST_PACKET 0x00000010
1063 #define NDIS_FLAGS_RESERVED2 0x00000020
1064 #define NDIS_FLAGS_RESERVED3 0x00000040
1065 #define NDIS_FLAGS_DONT_LOOPBACK 0x00000080
1066 #define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100
1067 #define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200
1068 #define NDIS_FLAGS_RESERVED4 0x00000400
1069 #define NDIS_FLAGS_DOUBLE_BUFFERED 0x00000800
1070 #define NDIS_FLAGS_SENT_AT_DPC 0x00001000
1071 #define NDIS_FLAGS_USES_SG_BUFFER_LIST 0x00002000
1073 #define NDIS_PACKET_WRAPPER_RESERVED 0x3F
1074 #define NDIS_PACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
1075 #define NDIS_PACKET_ALLOCATED_BY_NDIS 0x80
1077 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
1078 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
1079 #define NDIS_PROTOCOL_ID_IPX 0x06
1080 #define NDIS_PROTOCOL_ID_NBF 0x07
1081 #define NDIS_PROTOCOL_ID_MAX 0x0F
1082 #define NDIS_PROTOCOL_ID_MASK 0x0F
1084 typedef struct ndis_packet_private ndis_packet_private;
1087 ndis_class_802_3prio,
1088 ndis_class_wirelesswan_mbx,
1089 ndis_class_irda_packetinfo,
1090 ndis_class_atm_aainfo
1093 typedef enum ndis_classid ndis_classid;
1095 struct ndis_mediaspecific_info {
1096 uint32_t nmi_nextentoffset;
1097 ndis_classid nmi_classid;
1099 uint8_t nmi_classinfo[1];
1102 typedef struct ndis_mediaspecific_info ndis_mediaspecific_info;
1104 struct ndis_packet_oob {
1106 uint64_t npo_timetotx;
1107 uint64_t npo_timetxed;
1109 uint64_t npo_timerxed;
1110 uint32_t npo_hdrlen;
1111 uint32_t npo_mediaspecific_len;
1112 void *npo_mediaspecific;
1113 ndis_status npo_status;
1116 typedef struct ndis_packet_oob ndis_packet_oob;
1118 struct ndis_packet {
1119 ndis_packet_private np_private;
1121 /* For connectionless miniports. */
1123 uint8_t np_miniport_rsvd[2 * sizeof(void *)];
1124 uint8_t np_wrapper_rsvd[2 * sizeof(void *)];
1126 /* For de-serialized miniports */
1128 uint8_t np_miniport_rsvdex[3 * sizeof(void *)];
1129 uint8_t np_wrapper_rsvdex[sizeof(void *)];
1132 uint8_t np_mac_rsvd[4 * sizeof(void *)];
1135 uint32_t *np_rsvd[2];
1138 * This next part is probably wrong, but we need some place
1139 * to put the out of band data structure...
1141 ndis_packet_oob np_oob;
1142 ndis_packet_extension np_ext;
1143 ndis_sc_list np_sclist;
1145 /* BSD-specific stuff which should be invisible to drivers. */
1153 typedef struct ndis_packet ndis_packet;
1155 /* mbuf ext type for NDIS */
1156 #define EXT_NDIS 0x999
1158 struct ndis_filterdbs {
1168 typedef struct ndis_filterdbs ndis_filterdbs;
1175 NdisMediumLocalTalk,
1176 NdisMediumDix, /* defined for convenience, not a real medium */
1177 NdisMediumArcnetRaw,
1178 NdisMediumArcnet878_2,
1180 NdisMediumWirelessWan,
1188 typedef enum ndis_medium ndis_medium;
1190 enum interface_type {
1191 InterfaceTypeUndefined = -1,
1208 MaximumInterfaceType
1211 enum ndis_interface_type {
1212 NdisInterfaceInternal = Internal,
1213 NdisInterfaceIsa = Isa,
1214 NdisInterfaceEisa = Eisa,
1215 NdisInterfaceMca = MicroChannel,
1216 NdisInterfaceTurboChannel = TurboChannel,
1217 NdisInterfacePci = PCIBus,
1218 NdisInterfacePcMcia = PCMCIABus
1221 typedef enum ndis_interface_type ndis_interface_type;
1223 struct ndis_paddr_unit {
1224 ndis_physaddr npu_physaddr;
1228 typedef struct ndis_paddr_unit ndis_paddr_unit;
1230 struct ndis_map_arg {
1231 ndis_paddr_unit *nma_fraglist;
1237 * Miniport characteristics were originally defined in the NDIS 3.0
1238 * spec and then extended twice, in NDIS 4.0 and 5.0.
1241 struct ndis_miniport_characteristics {
1245 uint8_t nmc_version_major;
1246 uint8_t nmc_version_minor;
1249 void * nmc_checkhang_func;
1250 void * nmc_disable_interrupts_func;
1251 void * nmc_enable_interrupts_func;
1252 void * nmc_halt_func;
1253 void * nmc_interrupt_func;
1254 void * nmc_init_func;
1255 void * nmc_isr_func;
1256 void * nmc_queryinfo_func;
1257 void * nmc_reconfig_func;
1258 void * nmc_reset_func;
1259 void * nmc_sendsingle_func;
1260 void * nmc_setinfo_func;
1261 void * nmc_transferdata_func;
1263 /* NDIS 4.0 extentions */
1265 void * nmc_return_packet_func;
1266 void * nmc_sendmulti_func;
1267 void * nmc_allocate_complete_func;
1269 /* NDIS 5.0 extensions */
1271 void * nmc_cocreatevc_func;
1272 void * nmc_codeletevc_func;
1273 void * nmc_coactivatevc_func;
1274 void * nmc_codeactivatevc_func;
1275 void * nmc_comultisend_func;
1276 void * nmc_corequest_func;
1278 /* NDIS 5.1 extentions */
1280 void * nmc_canceltxpkts_handler;
1281 void * nmc_pnpevent_handler;
1282 void * nmc_shutdown_handler;
1289 typedef struct ndis_miniport_characteristics ndis_miniport_characteristics;
1291 struct ndis_driver_object {
1294 ndis_miniport_characteristics ndo_chars;
1297 typedef struct ndis_driver_object ndis_driver_object;
1299 struct ndis_reference {
1300 ndis_kspin_lock nr_spinlock;
1305 typedef struct ndis_reference ndis_reference;
1307 struct ndis_timer_entry {
1308 struct callout nte_ch;
1309 ndis_miniport_timer *nte_timer;
1310 TAILQ_ENTRY(ndis_timer_entry) link;
1313 TAILQ_HEAD(nte_head, ndis_timer_entry);
1321 typedef struct ndis_fh ndis_fh;
1324 * The miniport block is basically the internal NDIS handle. We need
1325 * to define this because, unfortunately, it is not entirely opaque
1326 * to NDIS drivers. For one thing, it contains the function pointer
1327 * to the NDIS packet receive handler, which is invoked out of the
1328 * NDIS block via a macro rather than a function pointer. (The
1329 * NdisMIndicateReceivePacket() routine is a macro rather than
1330 * a function.) For another, the driver maintains a pointer to the
1331 * miniport block and passes it as a handle to various NDIS functions.
1332 * (The driver never really knows this because it's hidden behind
1333 * an ndis_handle though.)
1335 * The miniport block has two parts: the first part contains fields
1336 * that must never change, since they are referenced by driver
1337 * binaries through macros. The second part is ignored by the driver,
1338 * but contains various things used internaly by NDIS.SYS. In our
1339 * case, we define the first 'immutable' part exactly as it appears
1340 * in Windows, but don't bother duplicating the Windows definitions
1341 * for the second part. Instead, we replace them with a few BSD-specific
1345 struct ndis_miniport_block {
1347 * Windows-specific portion -- DO NOT MODIFY OR NDIS
1348 * DRIVERS WILL NOT WORK.
1350 void *nmb_signature; /* magic number */
1351 ndis_miniport_block *nmb_nextminiport;
1352 ndis_mdriver_block *nmb_driverhandle;
1353 ndis_handle nmb_miniportadapterctx;
1354 ndis_unicode_string nmb_name;
1355 ndis_bind_paths *nmb_bindpaths;
1356 ndis_handle nmb_openqueue;
1357 ndis_reference nmb_ref;
1358 ndis_handle nmb_devicectx;
1359 uint8_t nmb_padding;
1360 uint8_t nmb_lockacquired;
1361 uint8_t nmb_pmodeopens;
1362 uint8_t nmb_assignedcpu;
1363 ndis_kspin_lock nmb_lock;
1364 ndis_request *nmb_mediarequest;
1365 ndis_miniport_interrupt *nmb_interrupt;
1367 uint32_t nmb_pnpflags;
1368 list_entry nmb_packetlist;
1369 ndis_packet *nmb_firstpendingtxpacket;
1370 ndis_packet *nmb_returnpacketqueue;
1371 uint32_t nmb_requestbuffer;
1372 void *nmb_setmcastbuf;
1373 ndis_miniport_block *nmb_primaryminiport;
1374 void *nmb_wrapperctx;
1375 void *nmb_busdatactx;
1376 uint32_t nmb_pnpcaps;
1377 cm_resource_list *nmb_resources;
1378 ndis_timer nmb_wkupdpctimer;
1379 ndis_unicode_string nmb_basename;
1380 ndis_unicode_string nmb_symlinkname;
1381 uint32_t nmb_checkforhangsecs;
1382 uint16_t nmb_cfhticks;
1383 uint16_t nmb_cfhcurrticks;
1384 ndis_status nmb_resetstatus;
1385 ndis_handle nmb_resetopen;
1386 ndis_filterdbs nmb_filterdbs;
1387 void *nmb_pktind_func;
1388 void *nmb_senddone_func;
1389 void *nmb_sendrsrc_func;
1390 void *nmb_resetdone_func;
1391 ndis_medium nmb_medium;
1392 uint32_t nmb_busnum;
1393 uint32_t nmb_bustye;
1394 uint32_t nmb_adaptertype;
1395 void *nmb_deviceobj;
1396 void *nmb_physdeviceobj;
1397 void *nmb_nextdeviceobj;
1399 void *nmb_callmgraflist;
1400 void *nmb_miniportthread;
1401 void *nmb_setinfobuf;
1402 uint16_t nmb_setinfobuflen;
1403 uint16_t nmb_maxsendpkts;
1404 ndis_status nmb_fakestatus;
1405 void *nmb_lockhandler;
1406 ndis_unicode_string *nmb_adapterinstancename;
1407 void *nmb_timerqueue;
1408 uint32_t nmb_mactoptions;
1409 ndis_request *nmb_pendingreq;
1410 uint32_t nmb_maxlongaddrs;
1411 uint32_t nmb_maxshortaddrs;
1412 uint32_t nmb_currlookahead;
1413 uint32_t nmb_maxlookahead;
1414 void *nmb_interrupt_func;
1415 void *nmb_disableintr_func;
1416 void *nmb_enableintr_func;
1417 void *nmb_sendpkts_func;
1418 void *nmb_deferredsend_func;
1419 void *nmb_ethrxindicate_func;
1420 void *nmb_txrxindicate_func;
1421 void *nmb_fddirxindicate_func;
1422 void *nmb_ethrxdone_func;
1423 void *nmb_txrxdone_func;
1424 void *nmb_fddirxcond_func;
1425 void *nmb_status_func;
1426 void *nmb_statusdone_func;
1427 void *nmb_tdcond_func;
1428 void *nmb_querydone_func;
1429 void *nmb_setdone_func;
1430 void *nmb_wantxdone_func;
1431 void *nmb_wanrx_func;
1432 void *nmb_wanrxdone_func;
1434 * End of windows-specific portion of miniport block. Everything
1435 * below is BSD-specific.
1437 struct ifnet *nmb_ifp;
1438 uint8_t nmb_dummybuf[128];
1439 device_object nmb_devobj;
1440 ndis_config_parm nmb_replyparm;
1443 ndis_resource_list *nmb_rlist;
1444 ndis_status nmb_getstat;
1445 ndis_status nmb_setstat;
1446 struct nte_head nmb_timerlist;
1447 vm_offset_t nmb_img;
1448 TAILQ_ENTRY(ndis_miniport_block) link;
1451 TAILQ_HEAD(nd_head, ndis_miniport_block);
1453 typedef __stdcall ndis_status (*ndis_init_handler)(ndis_status *, uint32_t *,
1454 ndis_medium *, uint32_t, ndis_handle, ndis_handle);
1455 typedef __stdcall ndis_status (*ndis_queryinfo_handler)(ndis_handle, ndis_oid,
1456 void *, uint32_t, uint32_t *, uint32_t *);
1457 typedef __stdcall ndis_status (*ndis_setinfo_handler)(ndis_handle, ndis_oid,
1458 void *, uint32_t, uint32_t *, uint32_t *);
1459 typedef __stdcall ndis_status (*ndis_sendsingle_handler)(ndis_handle,
1460 ndis_packet *, uint32_t);
1461 typedef __stdcall ndis_status (*ndis_sendmulti_handler)(ndis_handle,
1462 ndis_packet **, uint32_t);
1463 typedef __stdcall void (*ndis_isr_handler)(uint8_t *, uint8_t *, ndis_handle);
1464 typedef __stdcall void (*ndis_interrupt_handler)(ndis_handle);
1465 typedef __stdcall int (*ndis_reset_handler)(uint8_t *, ndis_handle);
1466 typedef __stdcall void (*ndis_halt_handler)(ndis_handle);
1467 typedef __stdcall void (*ndis_return_handler)(ndis_handle, ndis_packet *);
1468 typedef __stdcall void (*ndis_enable_interrupts_handler)(ndis_handle);
1469 typedef __stdcall void (*ndis_disable_interrupts_handler)(ndis_handle);
1470 typedef __stdcall void (*ndis_shutdown_handler)(void *);
1471 typedef __stdcall void (*ndis_allocdone_handler)(ndis_handle, void *,
1472 ndis_physaddr *, uint32_t, void *);
1473 typedef __stdcall uint8_t (*ndis_checkforhang_handler)(ndis_handle);
1475 typedef __stdcall ndis_status (*driver_entry)(void *, ndis_unicode_string *);
1477 extern image_patch_table ndis_functbl[];
1479 #define NDIS_TASKQUEUE 1
1482 #define NDIS_PSTATE_RUNNING 1
1483 #define NDIS_PSTATE_SLEEPING 2
1488 extern int ndis_libinit(void);
1489 extern int ndis_libfini(void);
1490 extern int ndis_ascii_to_unicode(char *, uint16_t **);
1491 extern int ndis_unicode_to_ascii(uint16_t *, int, char **);
1492 extern int ndis_load_driver(vm_offset_t, void *);
1493 extern int ndis_unload_driver(void *);
1494 extern int ndis_mtop(struct mbuf *, ndis_packet **);
1495 extern int ndis_ptom(struct mbuf **, ndis_packet *);
1496 extern int ndis_get_info(void *, ndis_oid, void *, int *);
1497 extern int ndis_set_info(void *, ndis_oid, void *, int *);
1498 extern int ndis_get_supported_oids(void *, ndis_oid **, int *);
1499 extern int ndis_send_packets(void *, ndis_packet **, int);
1500 extern int ndis_send_packet(void *, ndis_packet *);
1501 extern int ndis_convert_res(void *);
1502 extern int ndis_alloc_amem(void *);
1503 extern void ndis_free_amem(void *);
1504 extern void ndis_free_packet(ndis_packet *);
1505 extern void ndis_free_bufs(ndis_buffer *);
1506 extern void ndis_return_packet(struct ndis_softc *sc, ndis_packet *p);
1507 extern int ndis_reset_nic(void *);
1508 extern int ndis_halt_nic(void *);
1509 extern int ndis_shutdown_nic(void *);
1510 extern int ndis_init_nic(void *);
1511 extern int ndis_isr(void *, int *, int *);
1512 extern int ndis_intrhand(void *);
1513 extern void ndis_enable_intr(void *);
1514 extern void ndis_disable_intr(void *);
1515 extern int ndis_init_dma(void *);
1516 extern int ndis_destroy_dma(void *);
1517 extern int ndis_create_sysctls(void *);
1518 extern int ndis_add_sysctl(void *, char *, char *, char *, int);
1519 extern int ndis_flush_sysctls(void *);
1520 extern int ndis_sched(void (*)(void *), void *, int);
1521 extern int ndis_unsched(void (*)(void *), void *, int);
1522 extern int ndis_thsuspend(struct thread *, int);
1523 extern void ndis_thresume(struct thread *);
1524 extern int ndis_strcasecmp(const char *, const char *);
1527 #endif /* _NDIS_VAR_H_ */