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.29.2.3 2005/03/31 04:24:35 wpaul Exp $
38 #include <sys/simplelock.h>
40 /* Forward declarations */
41 struct ndis_miniport_block
;
42 struct ndis_mdriver_block
;
43 typedef struct ndis_miniport_block ndis_miniport_block
;
44 typedef struct ndis_mdriver_block ndis_mdriver_block
;
47 typedef uint32_t ndis_status
;
48 typedef void *ndis_handle
;
49 typedef uint32_t ndis_oid
;
50 typedef uint32_t ndis_error_code
;
51 typedef register_t ndis_kspin_lock
;
52 typedef uint8_t ndis_kirql
;
54 /* Print out debugging information */
55 /* #define NDIS_DBG */
58 * NDIS status codes (there are lots of them). The ones that
59 * don't seem to fit the pattern are actually mapped to generic
63 #define NDIS_STATUS_SUCCESS 0
64 #define NDIS_STATUS_PENDING 0x00000103
65 #define NDIS_STATUS_NOT_RECOGNIZED 0x00010001
66 #define NDIS_STATUS_NOT_COPIED 0x00010002
67 #define NDIS_STATUS_NOT_ACCEPTED 0x00010003
68 #define NDIS_STATUS_CALL_ACTIVE 0x00010007
69 #define NDIS_STATUS_ONLINE 0x40010003
70 #define NDIS_STATUS_RESET_START 0x40010004
71 #define NDIS_STATUS_RESET_END 0x40010005
72 #define NDIS_STATUS_RING_STATUS 0x40010006
73 #define NDIS_STATUS_CLOSED 0x40010007
74 #define NDIS_STATUS_WAN_LINE_UP 0x40010008
75 #define NDIS_STATUS_WAN_LINE_DOWN 0x40010009
76 #define NDIS_STATUS_WAN_FRAGMENT 0x4001000A
77 #define NDIS_STATUS_MEDIA_CONNECT 0x4001000B
78 #define NDIS_STATUS_MEDIA_DISCONNECT 0x4001000C
79 #define NDIS_STATUS_HARDWARE_LINE_UP 0x4001000D
80 #define NDIS_STATUS_HARDWARE_LINE_DOWN 0x4001000E
81 #define NDIS_STATUS_INTERFACE_UP 0x4001000F
82 #define NDIS_STATUS_INTERFACE_DOWN 0x40010010
83 #define NDIS_STATUS_MEDIA_BUSY 0x40010011
84 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION 0x40010012
85 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
86 #define NDIS_STATUS_LINK_SPEED_CHANGE 0x40010013
87 #define NDIS_STATUS_WAN_GET_STATS 0x40010014
88 #define NDIS_STATUS_WAN_CO_FRAGMENT 0x40010015
89 #define NDIS_STATUS_WAN_CO_LINKPARAMS 0x40010016
90 #define NDIS_STATUS_NOT_RESETTABLE 0x80010001
91 #define NDIS_STATUS_SOFT_ERRORS 0x80010003
92 #define NDIS_STATUS_HARD_ERRORS 0x80010004
93 #define NDIS_STATUS_BUFFER_OVERFLOW 0x80000005
94 #define NDIS_STATUS_FAILURE 0xC0000001
95 #define NDIS_STATUS_RESOURCES 0xC000009A
96 #define NDIS_STATUS_CLOSING 0xC0010002
97 #define NDIS_STATUS_BAD_VERSION 0xC0010004
98 #define NDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005
99 #define NDIS_STATUS_ADAPTER_NOT_FOUND 0xC0010006
100 #define NDIS_STATUS_OPEN_FAILED 0xC0010007
101 #define NDIS_STATUS_DEVICE_FAILED 0xC0010008
102 #define NDIS_STATUS_MULTICAST_FULL 0xC0010009
103 #define NDIS_STATUS_MULTICAST_EXISTS 0xC001000A
104 #define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
105 #define NDIS_STATUS_REQUEST_ABORTED 0xC001000C
106 #define NDIS_STATUS_RESET_IN_PROGRESS 0xC001000D
107 #define NDIS_STATUS_CLOSING_INDICATING 0xC001000E
108 #define NDIS_STATUS_NOT_SUPPORTED 0xC00000BB
109 #define NDIS_STATUS_INVALID_PACKET 0xC001000F
110 #define NDIS_STATUS_OPEN_LIST_FULL 0xC0010010
111 #define NDIS_STATUS_ADAPTER_NOT_READY 0xC0010011
112 #define NDIS_STATUS_ADAPTER_NOT_OPEN 0xC0010012
113 #define NDIS_STATUS_NOT_INDICATING 0xC0010013
114 #define NDIS_STATUS_INVALID_LENGTH 0xC0010014
115 #define NDIS_STATUS_INVALID_DATA 0xC0010015
116 #define NDIS_STATUS_BUFFER_TOO_SHORT 0xC0010016
117 #define NDIS_STATUS_INVALID_OID 0xC0010017
118 #define NDIS_STATUS_ADAPTER_REMOVED 0xC0010018
119 #define NDIS_STATUS_UNSUPPORTED_MEDIA 0xC0010019
120 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE 0xC001001A
121 #define NDIS_STATUS_FILE_NOT_FOUND 0xC001001B
122 #define NDIS_STATUS_ERROR_READING_FILE 0xC001001C
123 #define NDIS_STATUS_ALREADY_MAPPED 0xC001001D
124 #define NDIS_STATUS_RESOURCE_CONFLICT 0xC001001E
125 #define NDIS_STATUS_NO_CABLE 0xC001001F
126 #define NDIS_STATUS_INVALID_SAP 0xC0010020
127 #define NDIS_STATUS_SAP_IN_USE 0xC0010021
128 #define NDIS_STATUS_INVALID_ADDRESS 0xC0010022
129 #define NDIS_STATUS_VC_NOT_ACTIVATED 0xC0010023
130 #define NDIS_STATUS_DEST_OUT_OF_ORDER 0xC0010024
131 #define NDIS_STATUS_VC_NOT_AVAILABLE 0xC0010025
132 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE 0xC0010026
133 #define NDIS_STATUS_INCOMPATABLE_QOS 0xC0010027
134 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED 0xC0010028
135 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION 0xC0010029
136 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR 0xC0011000
137 #define NDIS_STATUS_INVALID_DEVICE_REQUEST 0xC0000010
138 #define NDIS_STATUS_NETWORK_UNREACHABLE 0xC000023C
141 * NDIS event codes. They are usually reported to NdisWriteErrorLogEntry().
144 #define EVENT_NDIS_RESOURCE_CONFLICT 0xC0001388
145 #define EVENT_NDIS_OUT_OF_RESOURCE 0xC0001389
146 #define EVENT_NDIS_HARDWARE_FAILURE 0xC000138A
147 #define EVENT_NDIS_ADAPTER_NOT_FOUND 0xC000138B
148 #define EVENT_NDIS_INTERRUPT_CONNECT 0xC000138C
149 #define EVENT_NDIS_DRIVER_FAILURE 0xC000138D
150 #define EVENT_NDIS_BAD_VERSION 0xC000138E
151 #define EVENT_NDIS_TIMEOUT 0x8000138F
152 #define EVENT_NDIS_NETWORK_ADDRESS 0xC0001390
153 #define EVENT_NDIS_UNSUPPORTED_CONFIGURATION 0xC0001391
154 #define EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER 0xC0001392
155 #define EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER 0xC0001393
156 #define EVENT_NDIS_BAD_IO_BASE_ADDRESS 0xC0001394
157 #define EVENT_NDIS_RECEIVE_SPACE_SMALL 0x40001395
158 #define EVENT_NDIS_ADAPTER_DISABLED 0x80001396
159 #define EVENT_NDIS_IO_PORT_CONFLICT 0x80001397
160 #define EVENT_NDIS_PORT_OR_DMA_CONFLICT 0x80001398
161 #define EVENT_NDIS_MEMORY_CONFLICT 0x80001399
162 #define EVENT_NDIS_INTERRUPT_CONFLICT 0x8000139A
163 #define EVENT_NDIS_DMA_CONFLICT 0x8000139B
164 #define EVENT_NDIS_INVALID_DOWNLOAD_FILE_ERROR 0xC000139C
165 #define EVENT_NDIS_MAXRECEIVES_ERROR 0x8000139D
166 #define EVENT_NDIS_MAXTRANSMITS_ERROR 0x8000139E
167 #define EVENT_NDIS_MAXFRAMESIZE_ERROR 0x8000139F
168 #define EVENT_NDIS_MAXINTERNALBUFS_ERROR 0x800013A0
169 #define EVENT_NDIS_MAXMULTICAST_ERROR 0x800013A1
170 #define EVENT_NDIS_PRODUCTID_ERROR 0x800013A2
171 #define EVENT_NDIS_LOBE_FAILUE_ERROR 0x800013A3
172 #define EVENT_NDIS_SIGNAL_LOSS_ERROR 0x800013A4
173 #define EVENT_NDIS_REMOVE_RECEIVED_ERROR 0x800013A5
174 #define EVENT_NDIS_TOKEN_RING_CORRECTION 0x400013A6
175 #define EVENT_NDIS_ADAPTER_CHECK_ERROR 0xC00013A7
176 #define EVENT_NDIS_RESET_FAILURE_ERROR 0x800013A8
177 #define EVENT_NDIS_CABLE_DISCONNECTED_ERROR 0x800013A9
178 #define EVENT_NDIS_RESET_FAILURE_CORRECTION 0x800013AA
181 * NDIS OIDs used by the queryinfo/setinfo routines.
182 * Some are required by all NDIS drivers, some are specific to
183 * a particular type of device, and some are purely optional.
184 * Unfortunately, one of the purely optional OIDs is the one
185 * that lets us set the MAC address of the device.
189 #define OID_GEN_SUPPORTED_LIST 0x00010101
190 #define OID_GEN_HARDWARE_STATUS 0x00010102
191 #define OID_GEN_MEDIA_SUPPORTED 0x00010103
192 #define OID_GEN_MEDIA_IN_USE 0x00010104
193 #define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105
194 #define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106
195 #define OID_GEN_LINK_SPEED 0x00010107
196 #define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108
197 #define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109
198 #define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A
199 #define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B
200 #define OID_GEN_VENDOR_ID 0x0001010C
201 #define OID_GEN_VENDOR_DESCRIPTION 0x0001010D
202 #define OID_GEN_CURRENT_PACKET_FILTER 0x0001010E
203 #define OID_GEN_CURRENT_LOOKAHEAD 0x0001010F
204 #define OID_GEN_DRIVER_VERSION 0x00010110
205 #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111
206 #define OID_GEN_PROTOCOL_OPTIONS 0x00010112
207 #define OID_GEN_MAC_OPTIONS 0x00010113
208 #define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114
209 #define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115
210 #define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116
211 #define OID_GEN_SUPPORTED_GUIDS 0x00010117
212 #define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118 /* Set only */
213 #define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119 /* Set only */
214 #define OID_GEN_MACHINE_NAME 0x0001021A
215 #define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B /* Set only */
216 #define OID_GEN_VLAN_ID 0x0001021C
219 #define OID_GEN_MEDIA_CAPABILITIES 0x00010201
220 #define OID_GEN_PHYSICAL_MEDIUM 0x00010202
222 /* Required statistics OIDs. */
223 #define OID_GEN_XMIT_OK 0x00020101
224 #define OID_GEN_RCV_OK 0x00020102
225 #define OID_GEN_XMIT_ERROR 0x00020103
226 #define OID_GEN_RCV_ERROR 0x00020104
227 #define OID_GEN_RCV_NO_BUFFER 0x00020105
229 /* Optional OID statistics */
230 #define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201
231 #define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
232 #define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203
233 #define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
234 #define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205
235 #define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
236 #define OID_GEN_DIRECTED_BYTES_RCV 0x00020207
237 #define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
238 #define OID_GEN_MULTICAST_BYTES_RCV 0x00020209
239 #define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A
240 #define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B
241 #define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C
242 #define OID_GEN_RCV_CRC_ERROR 0x0002020D
243 #define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E
244 #define OID_GEN_GET_TIME_CAPS 0x0002020F
245 #define OID_GEN_GET_NETCARD_TIME 0x00020210
246 #define OID_GEN_NETCARD_LOAD 0x00020211
247 #define OID_GEN_DEVICE_PROFILE 0x00020212
249 /* 802.3 (ethernet) OIDs */
250 #define OID_802_3_PERMANENT_ADDRESS 0x01010101
251 #define OID_802_3_CURRENT_ADDRESS 0x01010102
252 #define OID_802_3_MULTICAST_LIST 0x01010103
253 #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104
254 #define OID_802_3_MAC_OPTIONS 0x01010105
255 #define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001
256 #define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
257 #define OID_802_3_XMIT_ONE_COLLISION 0x01020102
258 #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
259 #define OID_802_3_XMIT_DEFERRED 0x01020201
260 #define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
261 #define OID_802_3_RCV_OVERRUN 0x01020203
262 #define OID_802_3_XMIT_UNDERRUN 0x01020204
263 #define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205
264 #define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
265 #define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
267 /* PnP and power management OIDs */
268 #define OID_PNP_CAPABILITIES 0xFD010100
269 #define OID_PNP_SET_POWER 0xFD010101
270 #define OID_PNP_QUERY_POWER 0xFD010102
271 #define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103
272 #define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104
273 #define OID_PNP_WAKE_UP_PATTERN_LIST 0xFD010105
274 #define OID_PNP_ENABLE_WAKE_UP 0xFD010106
276 /* PnP/PM Statistics (Optional). */
277 #define OID_PNP_WAKE_UP_OK 0xFD020200
278 #define OID_PNP_WAKE_UP_ERROR 0xFD020201
280 /* The following bits are defined for OID_PNP_ENABLE_WAKE_UP */
281 #define NDIS_PNP_WAKE_UP_MAGIC_PACKET 0x00000001
282 #define NDIS_PNP_WAKE_UP_PATTERN_MATCH 0x00000002
283 #define NDIS_PNP_WAKE_UP_LINK_CHANGE 0x00000004
286 #define OID_802_11_BSSID 0x0D010101
287 #define OID_802_11_SSID 0x0D010102
288 #define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0D010203
289 #define OID_802_11_NETWORK_TYPE_IN_USE 0x0D010204
290 #define OID_802_11_TX_POWER_LEVEL 0x0D010205
291 #define OID_802_11_RSSI 0x0D010206
292 #define OID_802_11_RSSI_TRIGGER 0x0D010207
293 #define OID_802_11_INFRASTRUCTURE_MODE 0x0D010108
294 #define OID_802_11_FRAGMENTATION_THRESHOLD 0x0D010209
295 #define OID_802_11_RTS_THRESHOLD 0x0D01020A
296 #define OID_802_11_NUMBER_OF_ANTENNAS 0x0D01020B
297 #define OID_802_11_RX_ANTENNA_SELECTED 0x0D01020C
298 #define OID_802_11_TX_ANTENNA_SELECTED 0x0D01020D
299 #define OID_802_11_SUPPORTED_RATES 0x0D01020E
300 #define OID_802_11_DESIRED_RATES 0x0D010210
301 #define OID_802_11_CONFIGURATION 0x0D010211
302 #define OID_802_11_STATISTICS 0x0D020212
303 #define OID_802_11_ADD_WEP 0x0D010113
304 #define OID_802_11_REMOVE_WEP 0x0D010114
305 #define OID_802_11_DISASSOCIATE 0x0D010115
306 #define OID_802_11_POWER_MODE 0x0D010216
307 #define OID_802_11_BSSID_LIST 0x0D010217
308 #define OID_802_11_AUTHENTICATION_MODE 0x0D010118
309 #define OID_802_11_PRIVACY_FILTER 0x0D010119
310 #define OID_802_11_BSSID_LIST_SCAN 0x0D01011A
311 #define OID_802_11_WEP_STATUS 0x0D01011B
312 #define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS
313 #define OID_802_11_RELOAD_DEFAULTS 0x0D01011C
314 #define OID_802_11_ADD_KEY 0x0D01011D
315 #define OID_802_11_REMOVE_KEY 0x0D01011E
316 #define OID_802_11_ASSOCIATION_INFORMATION 0x0D01011F
317 #define OID_802_11_TEST 0x0D010120
319 /* structures/definitions for 802.11 */
320 #define NDIS_80211_NETTYPE_11FH 0x00000000
321 #define NDIS_80211_NETTYPE_11DS 0x00000001
322 #define NDIS_80211_NETTYPE_11OFDM5 0x00000002
323 #define NDIS_80211_NETTYPE_11OFDM24 0x00000003
325 struct ndis_80211_nettype_list
{
327 uint32_t ntl_type
[1];
330 #define NDIS_80211_POWERMODE_CAM 0x00000000
331 #define NDIS_80211_POWERMODE_MAX_PSP 0x00000001
332 #define NDIS_80211_POWERMODE_FAST_PSP 0x00000002
334 typedef uint32_t ndis_80211_power
; /* Power in milliwatts */
335 typedef uint32_t ndis_80211_rssi
; /* Signal strength in dBm */
337 struct ndis_80211_config_fh
{
339 uint32_t ncf_hoppatterh
;
341 uint32_t ncf_dwelltime
;
344 typedef struct ndis_80211_config_fh ndis_80211_config_fh
;
346 struct ndis_80211_config
{
348 uint32_t nc_beaconperiod
;
350 uint32_t nc_dsconfig
;
351 ndis_80211_config_fh nc_fhconfig
;
354 typedef struct ndis_80211_config ndis_80211_config
;
356 struct ndis_80211_stats
{
358 uint64_t ns_txfragcnt
;
359 uint64_t ns_txmcastcnt
;
360 uint64_t ns_failedcnt
;
361 uint64_t ns_retrycnt
;
362 uint64_t ns_multiretrycnt
;
363 uint64_t ns_rtssuccesscnt
;
364 uint64_t ns_rtsfailcnt
;
365 uint64_t ns_ackfailcnt
;
366 uint64_t ns_dupeframecnt
;
367 uint64_t ns_rxfragcnt
;
368 uint64_t ns_rxmcastcnt
;
369 uint64_t ns_fcserrcnt
;
372 typedef struct ndis_80211_stats ndis_80211_stats
;
374 typedef uint32_t ndis_80211_key_idx
;
376 struct ndis_80211_wep
{
380 uint8_t nw_keydata
[256];
383 typedef struct ndis_80211_wep ndis_80211_wep
;
385 #define NDIS_80211_WEPKEY_TX 0x80000000
386 #define NDIS_80211_WEPKEY_PERCLIENT 0x40000000
388 #define NDIS_80211_NET_INFRA_IBSS 0x00000000
389 #define NDIS_80211_NET_INFRA_BSS 0x00000001
390 #define NDIS_80211_NET_INFRA_AUTO 0x00000002
392 #define NDIS_80211_AUTHMODE_OPEN 0x00000000
393 #define NDIS_80211_AUTHMODE_SHARED 0x00000001
394 #define NDIS_80211_AUTHMODE_AUTO 0x00000002
395 #define NDIS_80211_AUTHMODE_WPA 0x00000003
396 #define NDIS_80211_AUTHMODE_WPAPSK 0x00000004
397 #define NDIS_80211_AUTHMODE_WPANONE 0x00000005
399 typedef uint8_t ndis_80211_rates
[8];
400 typedef uint8_t ndis_80211_rates_ex
[16];
401 typedef uint8_t ndis_80211_macaddr
[6];
403 struct ndis_80211_ssid
{
408 typedef struct ndis_80211_ssid ndis_80211_ssid
;
410 struct ndis_wlan_bssid
{
412 ndis_80211_macaddr nwb_macaddr
;
414 ndis_80211_ssid nwb_ssid
;
415 uint32_t nwb_privacy
;
416 ndis_80211_rssi nwb_rssi
;
417 uint32_t nwb_nettype
;
418 ndis_80211_config nwb_config
;
419 uint32_t nwb_netinfra
;
420 ndis_80211_rates nwb_supportedrates
;
423 typedef struct ndis_wlan_bssid ndis_wlan_bssid
;
425 struct ndis_80211_bssid_list
{
427 ndis_wlan_bssid nbl_bssid
[1];
430 typedef struct ndis_80211_bssid_list ndis_80211_bssid_list
;
432 struct ndis_wlan_bssid_ex
{
434 ndis_80211_macaddr nwbx_macaddr
;
435 uint8_t nwbx_rsvd
[2];
436 ndis_80211_ssid nwbx_ssid
;
437 uint32_t nwbx_privacy
;
438 ndis_80211_rssi nwbx_rssi
;
439 uint32_t nwbx_nettype
;
440 ndis_80211_config nwbx_config
;
441 uint32_t nwbx_netinfra
;
442 ndis_80211_rates_ex nwbx_supportedrates
;
444 uint32_t nwbx_ies
[1];
447 typedef struct ndis_wlan_bssid_ex ndis_wlan_bssid_ex
;
449 struct ndis_80211_bssid_list_ex
{
451 ndis_wlan_bssid_ex nblx_bssid
[1];
454 typedef struct ndis_80211_bssid_list_ex ndis_80211_bssid_list_ex
;
456 struct ndis_80211_fixed_ies
{
457 uint8_t nfi_tstamp
[8];
458 uint16_t nfi_beaconint
;
462 struct ndis_80211_variable_ies
{
468 typedef uint32_t ndis_80211_fragthresh
;
469 typedef uint32_t ndis_80211_rtsthresh
;
470 typedef uint32_t ndis_80211_antenna
;
472 #define NDIS_80211_PRIVFILT_ACCEPTALL 0x00000000
473 #define NDIS_80211_PRIVFILT_8021XWEP 0x00000001
475 #define NDIS_80211_WEPSTAT_ENABLED 0x00000000
476 #define NDIS_80211_WEPSTAT_ENC1ENABLED NDIS_80211_WEPSTAT_ENABLED
477 #define NDIS_80211_WEPSTAT_DISABLED 0x00000001
478 #define NDIS_80211_WEPSTAT_ENCDISABLED NDIS_80211_WEPSTAT_DISABLED
479 #define NDIS_80211_WEPSTAT_KEYABSENT 0x00000002
480 #define NDIS_80211_WEPSTAT_ENC1KEYABSENT NDIS_80211_WEPSTAT_KEYABSENT
481 #define NDIS_80211_WEPSTAT_NOTSUPPORTED 0x00000003
482 #define NDIS_80211_WEPSTAT_ENCNOTSUPPORTED NDIS_80211_WEPSTAT_NOTSUPPORTED
483 #define NDIS_80211_WEPSTAT_ENC2ENABLED 0x00000004
484 #define NDIS_80211_WEPSTAT_ENC2KEYABSENT 0x00000005
485 #define NDIS_80211_WEPSTAT_ENC3ENABLED 0x00000006
486 #define NDIS_80211_WEPSTAT_ENC3KEYABSENT 0x00000007
488 #define NDIS_80211_RELOADDEFAULT_WEP 0x00000000
490 #define NDIS_80211_STATUSTYPE_AUTH 0x00000000
492 struct ndis_80211_status_indication
{
496 typedef struct ndis_80211_status_indication ndis_80211_status_indication
;
498 struct ndis_80211_auth_request
{
500 ndis_80211_macaddr nar_bssid
;
504 typedef struct ndis_80211_auth_request ndis_80211_auth_request
;
506 struct ndis_80211_key
{
510 ndis_80211_macaddr nk_bssid
;
512 uint8_t nk_keydata
[256];
515 typedef struct ndis_80211_key ndis_80211_key
;
517 struct ndis_80211_remove_key
{
520 ndis_80211_macaddr nk_bssid
;
523 typedef struct ndis_80211_remove_key ndis_80211_remove_key
;
525 #define NDIS_80211_AI_REQFI_CAPABILITIES 0x00000001
526 #define NDIS_80211_AI_REQFI_LISTENINTERVAL 0x00000002
527 #define NDIS_80211_AI_REQFI_CURRENTAPADDRESS 0x00000004
529 #define NDIS_80211_AI_RESFI_CAPABILITIES 0x00000001
530 #define NDIS_80211_AI_RESFI_STATUSCODE 0x00000002
531 #define NDIS_80211_AI_RESFI_ASSOCIATIONID 0x00000004
533 struct ndis_80211_ai_reqfi
{
535 uint16_t naq_listentint
;
536 ndis_80211_macaddr naq_currentapaddr
;
539 typedef struct ndis_80211_ai_reqfi ndis_80211_ai_reqfi
;
541 struct ndis_80211_ai_resfi
{
543 uint16_t nas_statuscode
;
544 uint16_t nas_associd
;
547 typedef struct ndis_80211_ai_resfi ndis_80211_ai_resfi
;
549 struct ndis_80211_assoc_info
{
551 uint16_t nai_avail_req_fixed_ies
;
552 ndis_80211_ai_reqfi nai_req_fixed_ies
;
553 uint32_t nai_req_ielen
;
554 uint32_t nai_offset_req_ies
;
555 uint16_t nai_avail_resp_fixed_ies
;
556 ndis_80211_ai_resfi nai_resp_fixed_iex
;
557 uint32_t nai_resp_ielen
;
558 uint32_t nai_offset_resp_ies
;
561 typedef struct ndis_80211_assoc_info ndis_80211_assoc_info
;
563 struct ndis_80211_auth_event
{
564 ndis_80211_status_indication nae_status
;
565 ndis_80211_auth_request nae_request
[1];
568 typedef struct ndis_80211_auth_event ndis_80211_auth_event
;
570 struct ndis_80211_test
{
574 ndis_80211_auth_event nt_authevent
;
575 uint32_t nt_rssitrigger
;
579 typedef struct ndis_80211_test ndis_80211_test
;
583 #define OID_TCP_TASK_OFFLOAD 0xFC010201
584 #define OID_TCP_TASK_IPSEC_ADD_SA 0xFC010202
585 #define OID_TCP_TASK_IPSEC_DELETE_SA 0xFC010203
586 #define OID_TCP_SAN_SUPPORT 0xFC010204
589 #define NDIS_TASK_OFFLOAD_VERSION 1
591 #define NDIS_TASK_TCPIP_CSUM 0x00000000
592 #define NDIS_TASK_IPSEC 0x00000001
593 #define NDIS_TASK_TCP_LARGESEND 0x00000002
595 #define NDIS_ENCAP_UNSPEC 0x00000000
596 #define NDIS_ENCAP_NULL 0x00000001
597 #define NDIS_ENCAP_IEEE802_3 0x00000002
598 #define NDIS_ENCAP_IEEE802_5 0x00000003
599 #define NDIS_ENCAP_SNAP_ROUTED 0x00000004
600 #define NDIS_ENCAP_SNAP_BRIDGED 0x00000005
602 #define NDIS_ENCAPFLAG_FIXEDHDRLEN 0x00000001
604 struct ndis_encap_fmt
{
607 uint32_t nef_encaphdrlen
;
610 typedef struct ndis_encap_fmt ndis_encap_fmt
;
612 struct ndis_task_offload_hdr
{
616 uint32_t ntoh_offset_firsttask
;
617 ndis_encap_fmt ntoh_encapfmt
;
620 typedef struct ndis_task_offload_hdr ndis_task_offload_hdr
;
622 struct ndis_task_offload
{
626 uint32_t nto_offset_nexttask
;
627 uint32_t nto_taskbuflen
;
628 uint8_t nto_taskbuf
[1];
631 typedef struct ndis_task_offload ndis_task_offload
;
633 #define NDIS_TCPSUM_FLAGS_IP_OPTS 0x00000001
634 #define NDIS_TCPSUM_FLAGS_TCP_OPTS 0x00000002
635 #define NDIS_TCPSUM_FLAGS_TCP_CSUM 0x00000004
636 #define NDIS_TCPSUM_FLAGS_UDP_CSUM 0x00000008
637 #define NDIS_TCPSUM_FLAGS_IP_CSUM 0x00000010
639 struct ndis_task_tcpip_csum
{
646 typedef struct ndis_task_tcpip_csum ndis_task_tcpip_csum
;
648 struct ndis_task_tcp_largesend
{
650 uint32_t nttl_maxofflen
;
651 uint32_t nttl_minsegcnt
;
656 typedef struct ndis_task_tcp_largesend ndis_task_tcp_largesend
;
658 #define NDIS_IPSEC_AH_MD5 0x00000001
659 #define NDIS_IPSEC_AH_SHA1 0x00000002
660 #define NDIS_IPSEC_AH_TRANSPORT 0x00000004
661 #define NDIS_IPSEC_AH_TUNNEL 0x00000008
662 #define NDIS_IPSEC_AH_SEND 0x00000010
663 #define NDIS_IPSEC_AH_RECEIVE 0x00000020
665 #define NDIS_IPSEC_ESP_DES 0x00000001
666 #define NDIS_IPSEC_ESP_RSVD 0x00000002
667 #define NDIS_IPSEC_ESP_3DES 0x00000004
668 #define NDIS_IPSEC_ESP_NULL 0x00000008
669 #define NDIS_IPSEC_ESP_TRANSPORT 0x00000010
670 #define NDIS_IPSEC_ESP_TUNNEL 0x00000020
671 #define NDIS_IPSEC_ESP_SEND 0x00000040
672 #define NDIS_IPSEC_ESP_RECEIVE 0x00000080
674 struct ndis_task_ipsec
{
675 uint32_t nti_ah_esp_combined
;
676 uint32_t nti_ah_transport_tunnel_combined
;
677 uint32_t nti_v4_options
;
683 typedef struct ndis_task_ipsec ndis_task_ipsec
;
686 * Attribures of NDIS drivers. Not all drivers support
690 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
691 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
692 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
693 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
694 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
695 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
696 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
697 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
698 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
700 #define NDIS_SERIALIZED(block) \
701 (((block)->nmb_flags & NDIS_ATTRIBUTE_DESERIALIZE) == 0)
703 enum ndis_media_state
{
708 typedef enum ndis_media_state ndis_media_state
;
710 /* Ndis Packet Filter Bits (OID_GEN_CURRENT_PACKET_FILTER). */
712 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
713 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
714 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
715 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
716 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
717 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
718 #define NDIS_PACKET_TYPE_SMT 0x00000040
719 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
720 #define NDIS_PACKET_TYPE_GROUP 0x00001000
721 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
722 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
723 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
726 /* Ndis MAC option bits (OID_GEN_MAC_OPTIONS). */
728 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
729 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
730 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
731 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
732 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
733 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
734 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
735 #define NDIS_MAC_OPTION_SUPPORTS_MAC_ADDRESS_OVERWRITE 0x00000080
736 #define NDIS_MAC_OPTION_RECEIVE_AT_DPC 0x00000100
737 #define NDIS_MAC_OPTION_8021Q_VLAN 0x00000200
738 #define NDIS_MAC_OPTION_RESERVED 0x80000000
740 #define NDIS_DMA_24BITS 0x00
741 #define NDIS_DMA_32BITS 0x01
742 #define NDIS_DMA_64BITS 0x02
745 struct ndis_physaddr {
752 #define np_quad np_low
761 typedef struct physaddr ndis_physaddr
;
763 struct ndis_ansi_string
{
769 typedef struct ndis_ansi_string ndis_ansi_string
;
773 * nus_buf is really a wchar_t *, but it's inconvenient to include
774 * all the necessary header goop needed to define it, and it's a
775 * pointer anyway, so for now, just make it a uint16_t *.
777 struct ndis_unicode_string
{
782 typedef struct ndis_unicode_string ndis_unicode_string
;
785 typedef unicode_string ndis_unicode_string
;
787 enum ndis_parm_type
{
791 ndis_parm_multistring
,
795 typedef enum ndis_parm_type ndis_parm_type
;
797 struct ndis_binary_data
{
802 typedef struct ndis_binary_data ndis_binary_data
;
804 struct ndis_config_parm
{
805 ndis_parm_type ncp_type
;
807 uint32_t ncp_intdata
;
808 ndis_unicode_string ncp_stringdata
;
809 ndis_binary_data ncp_binarydata
;
813 typedef struct ndis_config_parm ndis_config_parm
;
816 struct ndis_list_entry
{
817 struct ndis_list_entry
*nle_flink
;
818 struct ndis_list_entry
*nle_blink
;
821 typedef struct ndis_list_entry ndis_list_entry
;
824 struct ndis_bind_paths
{
826 ndis_unicode_string nbp_paths
[1];
829 typedef struct ndis_bind_paths ndis_bind_paths
;
832 struct dispatch_header
{
837 uint32_t dh_sigstate
;
838 list_entry dh_waitlisthead
;
842 #define dispatch_header nt_dispatch_header
845 struct dispatch_header nk_header
;
847 list_entry nk_timerlistentry
;
853 struct dispatch_header nk_header
;
857 struct nt_kevent ne_event
;
860 typedef struct ndis_event ndis_event
;
862 /* Kernel defered procedure call (i.e. timer callback) */
865 typedef void (*ndis_kdpc_func
)(struct ndis_kdpc
*, void *, void *, void *);
870 uint8_t nk_importance
;
871 list_entry nk_dpclistentry
;
872 ndis_kdpc_func nk_deferedfunc
;
873 void *nk_deferredctx
;
880 struct ktimer nt_ktimer
;
884 typedef struct ndis_timer ndis_timer
;
886 typedef __stdcall
void (*ndis_timer_function
)(void *, void *, void *, void *);
888 struct ndis_miniport_timer
{
889 struct ktimer nmt_ktimer
;
890 struct kdpc nmt_kdpc
;
891 ndis_timer_function nmt_timerfunc
;
893 ndis_miniport_block
*nmt_block
;
894 struct ndis_miniport_timer
*nmt_nexttimer
;
897 typedef struct ndis_miniport_timer ndis_miniport_timer
;
899 struct ndis_spin_lock
{
900 ndis_kspin_lock nsl_spinlock
;
901 ndis_kirql nsl_kirql
;
904 typedef struct ndis_spin_lock ndis_spin_lock
;
906 struct ndis_request
{
907 uint8_t nr_macreserved
[4*sizeof(void *)];
908 uint32_t nr_requesttype
;
910 struct _ndis_query_information
{
913 uint32_t nr_infobuflen
;
914 uint32_t nr_byteswritten
;
915 uint32_t nr_bytesneeded
;
916 } ndis_query_information
;
917 struct _ndis_set_information
{
920 uint32_t nr_infobuflen
;
921 uint32_t nr_byteswritten
;
922 uint32_t nr_bytesneeded
;
923 } ndis_set_information
;
925 /* NDIS 5.0 extentions */
926 uint8_t nr_ndis_rsvd
[9 * sizeof(void *)];
928 uint8_t nr_callmgr_rsvd
[2 * sizeof(void *)];
929 uint8_t nr_protocol_rsvd
[2 * sizeof(void *)];
931 uint8_t nr_miniport_rsvd
[2 * sizeof(void *)];
934 typedef struct ndis_request ndis_request
;
939 struct ndis_miniport_interrupt
{
941 ndis_kspin_lock ni_dpccountlock
;
945 struct ndis_kdpc ni_dpc
;
946 ndis_miniport_block
*ni_block
;
949 struct ndis_kevent ni_dpcsdoneevent
;
954 typedef struct ndis_miniport_interrupt ndis_miniport_interrupt
;
956 enum ndis_interrupt_mode
{
961 typedef enum ndis_interrupt_mode ndis_interrupt_mode
;
963 struct ndis_work_item
;
965 typedef void (*ndis_proc
)(struct ndis_work_item
*, void *);
967 struct ndis_work_item
{
970 uint8_t nwi_wraprsvd
[sizeof(void *) * 8];
973 typedef struct ndis_work_item ndis_work_item
;
977 struct ndis_buffer
*nb_next
;
981 void *nb_mappedsystemva
;
983 uint32_t nb_bytecount
;
984 uint32_t nb_byteoffset
;
987 typedef struct ndis_buffer ndis_buffer
;
990 struct ndis_sc_element
{
991 ndis_physaddr nse_addr
;
996 typedef struct ndis_sc_element ndis_sc_element
;
998 #define NDIS_MAXSEG 32
999 #define NDIS_BUS_SPACE_SHARED_MAXADDR 0x3E7FFFFF
1001 struct ndis_sc_list
{
1004 ndis_sc_element nsl_elements
[NDIS_MAXSEG
];
1007 typedef struct ndis_sc_list ndis_sc_list
;
1009 struct ndis_tcpip_csum
{
1011 uint32_t ntc_txflags
;
1012 uint32_t ntc_rxflags
;
1017 typedef struct ndis_tcpip_csum ndis_tcpip_csum
;
1019 #define NDIS_TXCSUM_DO_IPV4 0x00000001
1020 #define NDIS_TXCSUM_DO_IPV6 0x00000002
1021 #define NDIS_TXCSUM_DO_TCP 0x00000004
1022 #define NDIS_TXCSUM_DO_UDP 0x00000008
1023 #define NDIS_TXCSUM_DO_IP 0x00000010
1025 #define NDIS_RXCSUM_TCP_FAILED 0x00000001
1026 #define NDIS_RXCSUM_UDP_FAILED 0x00000002
1027 #define NDIS_RXCSUM_IP_FAILED 0x00000004
1028 #define NDIS_RXCSUM_TCP_PASSED 0x00000008
1029 #define NDIS_RXCSUM_UDP_PASSED 0x00000010
1030 #define NDIS_RXCSUM_IP_PASSED 0x00000020
1031 #define NDIS_RXCSUM_LOOPBACK 0x00000040
1036 uint32_t nvt_userprio
:3;
1037 uint32_t nvt_canformatid
:1;
1038 uint32_t nvt_vlanid
:12;
1039 uint32_t nvt_rsvd
:16;
1044 typedef struct ndis_vlan ndis_vlan
;
1046 enum ndis_perpkt_info
{
1047 ndis_tcpipcsum_info
,
1049 ndis_largesend_info
,
1050 ndis_classhandle_info
,
1053 ndis_ieee8021q_info
,
1054 ndis_originalpkt_info
,
1055 ndis_packetcancelid
,
1059 typedef enum ndis_perpkt_info ndis_perpkt_info
;
1061 struct ndis_packet_extension
{
1062 void *npe_info
[ndis_maxpkt_info
];
1065 typedef struct ndis_packet_extension ndis_packet_extension
;
1067 struct ndis_packet_private
{
1068 uint32_t npp_physcnt
;
1069 uint32_t npp_totlen
;
1070 ndis_buffer
*npp_head
;
1071 ndis_buffer
*npp_tail
;
1076 uint8_t npp_validcounts
;
1077 uint8_t npp_ndispktflags
;
1078 uint16_t npp_packetooboffset
;
1081 #define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000F
1082 #define NDIS_FLAGS_MULTICAST_PACKET 0x00000010
1083 #define NDIS_FLAGS_RESERVED2 0x00000020
1084 #define NDIS_FLAGS_RESERVED3 0x00000040
1085 #define NDIS_FLAGS_DONT_LOOPBACK 0x00000080
1086 #define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100
1087 #define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200
1088 #define NDIS_FLAGS_RESERVED4 0x00000400
1089 #define NDIS_FLAGS_DOUBLE_BUFFERED 0x00000800
1090 #define NDIS_FLAGS_SENT_AT_DPC 0x00001000
1091 #define NDIS_FLAGS_USES_SG_BUFFER_LIST 0x00002000
1093 #define NDIS_PACKET_WRAPPER_RESERVED 0x3F
1094 #define NDIS_PACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
1095 #define NDIS_PACKET_ALLOCATED_BY_NDIS 0x80
1097 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
1098 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
1099 #define NDIS_PROTOCOL_ID_IPX 0x06
1100 #define NDIS_PROTOCOL_ID_NBF 0x07
1101 #define NDIS_PROTOCOL_ID_MAX 0x0F
1102 #define NDIS_PROTOCOL_ID_MASK 0x0F
1104 typedef struct ndis_packet_private ndis_packet_private
;
1107 ndis_class_802_3prio
,
1108 ndis_class_wirelesswan_mbx
,
1109 ndis_class_irda_packetinfo
,
1110 ndis_class_atm_aainfo
1113 typedef enum ndis_classid ndis_classid
;
1115 struct ndis_mediaspecific_info
{
1116 uint32_t nmi_nextentoffset
;
1117 ndis_classid nmi_classid
;
1119 uint8_t nmi_classinfo
[1];
1122 typedef struct ndis_mediaspecific_info ndis_mediaspecific_info
;
1124 struct ndis_packet_oob
{
1126 uint64_t npo_timetotx
;
1127 uint64_t npo_timetxed
;
1129 uint64_t npo_timerxed
;
1130 uint32_t npo_hdrlen
;
1131 uint32_t npo_mediaspecific_len
;
1132 void *npo_mediaspecific
;
1133 ndis_status npo_status
;
1136 typedef struct ndis_packet_oob ndis_packet_oob
;
1138 struct ndis_packet
{
1139 ndis_packet_private np_private
;
1141 /* For connectionless miniports. */
1143 uint8_t np_miniport_rsvd
[2 * sizeof(void *)];
1144 uint8_t np_wrapper_rsvd
[2 * sizeof(void *)];
1146 /* For de-serialized miniports */
1148 uint8_t np_miniport_rsvdex
[3 * sizeof(void *)];
1149 uint8_t np_wrapper_rsvdex
[sizeof(void *)];
1152 uint8_t np_mac_rsvd
[4 * sizeof(void *)];
1155 uint32_t *np_rsvd
[2];
1156 uint8_t nm_protocolreserved
[1];
1159 * This next part is probably wrong, but we need some place
1160 * to put the out of band data structure...
1162 ndis_packet_oob np_oob
;
1163 ndis_packet_extension np_ext
;
1164 ndis_sc_list np_sclist
;
1166 /* BSD-specific stuff which should be invisible to drivers. */
1175 typedef struct ndis_packet ndis_packet
;
1177 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(void *))
1179 /* mbuf ext type for NDIS */
1180 #define EXT_NDIS 0x999
1182 /* mtx type for NDIS */
1183 #define MTX_NDIS_LOCK "NDIS lock"
1185 struct ndis_filterdbs
{
1195 typedef struct ndis_filterdbs ndis_filterdbs
;
1202 NdisMediumLocalTalk
,
1203 NdisMediumDix
, /* defined for convenience, not a real medium */
1204 NdisMediumArcnetRaw
,
1205 NdisMediumArcnet878_2
,
1207 NdisMediumWirelessWan
,
1215 typedef enum ndis_medium ndis_medium
;
1217 enum interface_type {
1218 InterfaceTypeUndefined = -1,
1235 MaximumInterfaceType
1238 enum ndis_interface_type
{
1239 NdisInterfaceInternal
= Internal
,
1240 NdisInterfaceIsa
= Isa
,
1241 NdisInterfaceEisa
= Eisa
,
1242 NdisInterfaceMca
= MicroChannel
,
1243 NdisInterfaceTurboChannel
= TurboChannel
,
1244 NdisInterfacePci
= PCIBus
,
1245 NdisInterfacePcMcia
= PCMCIABus
1248 typedef enum ndis_interface_type ndis_interface_type
;
1250 struct ndis_paddr_unit
{
1251 ndis_physaddr npu_physaddr
;
1255 typedef struct ndis_paddr_unit ndis_paddr_unit
;
1257 struct ndis_map_arg
{
1258 ndis_paddr_unit
*nma_fraglist
;
1264 * Miniport characteristics were originally defined in the NDIS 3.0
1265 * spec and then extended twice, in NDIS 4.0 and 5.0.
1268 struct ndis_miniport_characteristics
{
1272 uint8_t nmc_version_major
;
1273 uint8_t nmc_version_minor
;
1276 void * nmc_checkhang_func
;
1277 void * nmc_disable_interrupts_func
;
1278 void * nmc_enable_interrupts_func
;
1279 void * nmc_halt_func
;
1280 void * nmc_interrupt_func
;
1281 void * nmc_init_func
;
1282 void * nmc_isr_func
;
1283 void * nmc_queryinfo_func
;
1284 void * nmc_reconfig_func
;
1285 void * nmc_reset_func
;
1286 void * nmc_sendsingle_func
;
1287 void * nmc_setinfo_func
;
1288 void * nmc_transferdata_func
;
1290 /* NDIS 4.0 extentions */
1292 void * nmc_return_packet_func
;
1293 void * nmc_sendmulti_func
;
1294 void * nmc_allocate_complete_func
;
1296 /* NDIS 5.0 extensions */
1298 void * nmc_cocreatevc_func
;
1299 void * nmc_codeletevc_func
;
1300 void * nmc_coactivatevc_func
;
1301 void * nmc_codeactivatevc_func
;
1302 void * nmc_comultisend_func
;
1303 void * nmc_corequest_func
;
1305 /* NDIS 5.1 extentions */
1307 void * nmc_canceltxpkts_handler
;
1308 void * nmc_pnpevent_handler
;
1309 void * nmc_shutdown_handler
;
1316 typedef struct ndis_miniport_characteristics ndis_miniport_characteristics
;
1318 struct ndis_driver_object
{
1321 ndis_miniport_characteristics ndo_chars
;
1324 typedef struct ndis_driver_object ndis_driver_object
;
1326 struct ndis_reference
{
1327 ndis_kspin_lock nr_spinlock
;
1332 typedef struct ndis_reference ndis_reference
;
1334 struct ndis_timer_entry
{
1335 struct callout nte_ch
;
1336 ndis_miniport_timer
*nte_timer
;
1337 TAILQ_ENTRY(ndis_timer_entry
) link
;
1340 TAILQ_HEAD(nte_head
, ndis_timer_entry
);
1342 #define NDIS_FH_TYPE_VFS 0
1343 #define NDIS_FH_TYPE_MODULE 1
1352 typedef struct ndis_fh ndis_fh
;
1355 * The miniport block is basically the internal NDIS handle. We need
1356 * to define this because, unfortunately, it is not entirely opaque
1357 * to NDIS drivers. For one thing, it contains the function pointer
1358 * to the NDIS packet receive handler, which is invoked out of the
1359 * NDIS block via a macro rather than a function pointer. (The
1360 * NdisMIndicateReceivePacket() routine is a macro rather than
1361 * a function.) For another, the driver maintains a pointer to the
1362 * miniport block and passes it as a handle to various NDIS functions.
1363 * (The driver never really knows this because it's hidden behind
1364 * an ndis_handle though.)
1366 * The miniport block has two parts: the first part contains fields
1367 * that must never change, since they are referenced by driver
1368 * binaries through macros. The second part is ignored by the driver,
1369 * but contains various things used internaly by NDIS.SYS. In our
1370 * case, we define the first 'immutable' part exactly as it appears
1371 * in Windows, but don't bother duplicating the Windows definitions
1372 * for the second part. Instead, we replace them with a few BSD-specific
1376 struct ndis_miniport_block
{
1378 * Windows-specific portion -- DO NOT MODIFY OR NDIS
1379 * DRIVERS WILL NOT WORK.
1381 void *nmb_signature
; /* magic number */
1382 ndis_miniport_block
*nmb_nextminiport
;
1383 ndis_mdriver_block
*nmb_driverhandle
;
1384 ndis_handle nmb_miniportadapterctx
;
1385 ndis_unicode_string nmb_name
;
1386 ndis_bind_paths
*nmb_bindpaths
;
1387 ndis_handle nmb_openqueue
;
1388 ndis_reference nmb_ref
;
1389 ndis_handle nmb_devicectx
;
1390 uint8_t nmb_padding
;
1391 uint8_t nmb_lockacquired
;
1392 uint8_t nmb_pmodeopens
;
1393 uint8_t nmb_assignedcpu
;
1394 ndis_kspin_lock nmb_lock
;
1395 ndis_request
*nmb_mediarequest
;
1396 ndis_miniport_interrupt
*nmb_interrupt
;
1398 uint32_t nmb_pnpflags
;
1399 list_entry nmb_packetlist
;
1400 ndis_packet
*nmb_firstpendingtxpacket
;
1401 ndis_packet
*nmb_returnpacketqueue
;
1402 uint32_t nmb_requestbuffer
;
1403 void *nmb_setmcastbuf
;
1404 ndis_miniport_block
*nmb_primaryminiport
;
1405 void *nmb_wrapperctx
;
1406 void *nmb_busdatactx
;
1407 uint32_t nmb_pnpcaps
;
1408 cm_resource_list
*nmb_resources
;
1409 ndis_timer nmb_wkupdpctimer
;
1410 ndis_unicode_string nmb_basename
;
1411 ndis_unicode_string nmb_symlinkname
;
1412 uint32_t nmb_checkforhangsecs
;
1413 uint16_t nmb_cfhticks
;
1414 uint16_t nmb_cfhcurrticks
;
1415 ndis_status nmb_resetstatus
;
1416 ndis_handle nmb_resetopen
;
1417 ndis_filterdbs nmb_filterdbs
;
1418 void *nmb_pktind_func
;
1419 void *nmb_senddone_func
;
1420 void *nmb_sendrsrc_func
;
1421 void *nmb_resetdone_func
;
1422 ndis_medium nmb_medium
;
1423 uint32_t nmb_busnum
;
1424 uint32_t nmb_bustype
;
1425 uint32_t nmb_adaptertype
;
1426 device_object
*nmb_deviceobj
; /* Functional device */
1427 device_object
*nmb_physdeviceobj
; /* Physical device */
1428 device_object
*nmb_nextdeviceobj
; /* Next dev in stack */
1430 void *nmb_callmgraflist
;
1431 void *nmb_miniportthread
;
1432 void *nmb_setinfobuf
;
1433 uint16_t nmb_setinfobuflen
;
1434 uint16_t nmb_maxsendpkts
;
1435 ndis_status nmb_fakestatus
;
1436 void *nmb_lockhandler
;
1437 ndis_unicode_string
*nmb_adapterinstancename
;
1438 void *nmb_timerqueue
;
1439 uint32_t nmb_mactoptions
;
1440 ndis_request
*nmb_pendingreq
;
1441 uint32_t nmb_maxlongaddrs
;
1442 uint32_t nmb_maxshortaddrs
;
1443 uint32_t nmb_currlookahead
;
1444 uint32_t nmb_maxlookahead
;
1445 void *nmb_interrupt_func
;
1446 void *nmb_disableintr_func
;
1447 void *nmb_enableintr_func
;
1448 void *nmb_sendpkts_func
;
1449 void *nmb_deferredsend_func
;
1450 void *nmb_ethrxindicate_func
;
1451 void *nmb_txrxindicate_func
;
1452 void *nmb_fddirxindicate_func
;
1453 void *nmb_ethrxdone_func
;
1454 void *nmb_txrxdone_func
;
1455 void *nmb_fddirxcond_func
;
1456 void *nmb_status_func
;
1457 void *nmb_statusdone_func
;
1458 void *nmb_tdcond_func
;
1459 void *nmb_querydone_func
;
1460 void *nmb_setdone_func
;
1461 void *nmb_wantxdone_func
;
1462 void *nmb_wanrx_func
;
1463 void *nmb_wanrxdone_func
;
1465 * End of windows-specific portion of miniport block. Everything
1466 * below is BSD-specific.
1468 struct ifnet
*nmb_ifp
;
1469 uint8_t nmb_dummybuf
[128];
1470 device_object nmb_devobj
;
1471 ndis_config_parm nmb_replyparm
;
1474 ndis_resource_list
*nmb_rlist
;
1475 ndis_status nmb_getstat
;
1476 ndis_status nmb_setstat
;
1477 vm_offset_t nmb_img
;
1478 TAILQ_ENTRY(ndis_miniport_block
) link
;
1481 TAILQ_HEAD(nd_head
, ndis_miniport_block
);
1483 typedef ndis_status (*ndis_init_handler
)(ndis_status
*, uint32_t *,
1484 ndis_medium
*, uint32_t, ndis_handle
, ndis_handle
);
1485 typedef ndis_status (*ndis_queryinfo_handler
)(ndis_handle
, ndis_oid
,
1486 void *, uint32_t, uint32_t *, uint32_t *);
1487 typedef ndis_status (*ndis_setinfo_handler
)(ndis_handle
, ndis_oid
,
1488 void *, uint32_t, uint32_t *, uint32_t *);
1489 typedef ndis_status (*ndis_sendsingle_handler
)(ndis_handle
,
1490 ndis_packet
*, uint32_t);
1491 typedef ndis_status (*ndis_sendmulti_handler
)(ndis_handle
,
1492 ndis_packet
**, uint32_t);
1493 typedef void (*ndis_isr_handler
)(uint8_t *, uint8_t *, ndis_handle
);
1494 typedef void (*ndis_interrupt_handler
)(ndis_handle
);
1495 typedef int (*ndis_reset_handler
)(uint8_t *, ndis_handle
);
1496 typedef void (*ndis_halt_handler
)(ndis_handle
);
1497 typedef void (*ndis_return_handler
)(ndis_handle
, ndis_packet
*);
1498 typedef void (*ndis_enable_interrupts_handler
)(ndis_handle
);
1499 typedef void (*ndis_disable_interrupts_handler
)(ndis_handle
);
1500 typedef void (*ndis_shutdown_handler
)(void *);
1501 typedef void (*ndis_allocdone_handler
)(ndis_handle
, void *,
1502 ndis_physaddr
*, uint32_t, void *);
1503 typedef uint8_t (*ndis_checkforhang_handler
)(ndis_handle
);
1505 typedef __stdcall
ndis_status (*driver_entry
)(void *, unicode_string
*);
1507 extern image_patch_table ndis_functbl
[];
1509 #define NDIS_TASKQUEUE 1
1512 #define NDIS_PSTATE_RUNNING 1
1513 #define NDIS_PSTATE_SLEEPING 2
1515 #define NdisQueryPacket(p, pbufcnt, bufcnt, firstbuf, plen) \
1517 if ((firstbuf) != NULL) { \
1518 ndis_buffer **_first; \
1519 _first = firstbuf; \
1520 *(_first) = (p)->np_private.npp_head; \
1522 if ((plen) || (bufcnt) || (pbufcnt)) { \
1523 if ((p)->np_private.npp_validcounts == FALSE) { \
1525 unsigned int tlen = 0, pcnt = 0; \
1526 unsigned int add = 0; \
1527 unsigned int pktlen, off; \
1529 tmp = (p)->np_private.npp_head; \
1530 while (tmp != NULL) { \
1531 off = MmGetMdlByteOffset(tmp); \
1532 pktlen = MmGetMdlByteCount(tmp);\
1535 NDIS_BUFFER_TO_SPAN_PAGES(tmp); \
1537 tmp = tmp->mdl_next; \
1539 (p)->np_private.npp_count = add; \
1540 (p)->np_private.npp_totlen = tlen; \
1541 (p)->np_private.npp_physcnt = pcnt; \
1542 (p)->np_private.npp_validcounts = TRUE; \
1545 unsigned int *_pbufcnt; \
1546 _pbufcnt = (pbufcnt); \
1547 *(_pbufcnt) = (p)->np_private.npp_physcnt; \
1550 unsigned int *_bufcnt; \
1551 _bufcnt = (bufcnt); \
1552 *(_bufcnt) = (p)->np_private.npp_count; \
1555 unsigned int *_plen; \
1557 *(_plen) = (p)->np_private.npp_totlen; \
1563 extern int ndis_libinit(void);
1564 extern int ndis_libfini(void);
1565 extern int ndis_ascii_to_unicode(const char *, uint16_t **);
1566 extern int ndis_unicode_to_ascii(uint16_t *, int, char **);
1567 extern int ndis_load_driver(vm_offset_t
, void *);
1568 extern int ndis_unload_driver(void *);
1569 extern int ndis_mtop(struct mbuf
*, ndis_packet
**);
1570 extern int ndis_ptom(struct mbuf
**, ndis_packet
*);
1571 extern int ndis_get_info(void *, ndis_oid
, void *, int *);
1572 extern int ndis_set_info(void *, ndis_oid
, void *, int *);
1573 extern int ndis_get_supported_oids(void *, ndis_oid
**, int *);
1574 extern int ndis_send_packets(void *, ndis_packet
**, int);
1575 extern int ndis_send_packet(void *, ndis_packet
*);
1576 extern int ndis_convert_res(void *);
1577 extern int ndis_alloc_amem(void *);
1578 extern void ndis_free_amem(void *);
1579 extern void ndis_free_packet(ndis_packet
*);
1580 extern void ndis_free_bufs(ndis_buffer
*);
1581 extern int ndis_reset_nic(void *);
1582 extern int ndis_halt_nic(void *);
1583 extern int ndis_shutdown_nic(void *);
1584 extern int ndis_init_nic(void *);
1585 extern int ndis_isr(void *, int *, int *);
1587 extern void ndis_return_packet(void *, void *);
1589 extern void ndis_return_packet(struct mbuf
*, void *, size_t, void *);
1591 extern void ndis_enable_intr(void *);
1592 extern void ndis_disable_intr(void *);
1593 extern int ndis_init_dma(void *);
1594 extern int ndis_destroy_dma(void *);
1595 extern int ndis_create_sysctls(void *);
1596 extern int ndis_add_sysctl(void *, const char *, const char *, const char *, int);
1597 extern int ndis_flush_sysctls(void *);
1598 extern int ndis_sched(void (*)(void *), void *, int);
1599 extern int ndis_unsched(void (*)(void *), void *, int);
1601 extern int ndis_thsuspend(struct proc
*, struct mtx
*, int);
1602 #else /* __NetBSD__ */
1603 extern int ndis_thsuspend(struct proc
*, struct simplelock
*, int);
1605 extern void ndis_thresume(struct proc
*);
1606 extern int ndis_strcasecmp(const char *, const char *);
1607 extern int ndis_strncasecmp(const char *, const char *, size_t);
1609 __stdcall
extern uint32_t NdisAddDevice(driver_object
*, device_object
*);
1610 __stdcall
extern void NdisAllocatePacketPool(ndis_status
*,
1611 ndis_handle
*, uint32_t, uint32_t);
1612 __stdcall
extern void NdisAllocatePacketPoolEx(ndis_status
*,
1613 ndis_handle
*, uint32_t, uint32_t, uint32_t);
1614 __stdcall
extern uint32_t NdisPacketPoolUsage(ndis_handle
);
1615 __stdcall
extern void NdisFreePacketPool(ndis_handle
);
1616 __stdcall
extern void NdisAllocatePacket(ndis_status
*,
1617 ndis_packet
**, ndis_handle
);
1618 __stdcall
extern void NdisFreePacket(ndis_packet
*);
1622 #endif /* _NDIS_VAR_H_ */