ndis_var.h revision 123778
189948Simp/*
289948Simp * Copyright (c) 2003
389948Simp *	Bill Paul <wpaul@windriver.com>.  All rights reserved.
489948Simp *
589948Simp * Redistribution and use in source and binary forms, with or without
689948Simp * modification, are permitted provided that the following conditions
789948Simp * are met:
889948Simp * 1. Redistributions of source code must retain the above copyright
989948Simp *    notice, this list of conditions and the following disclaimer.
1089948Simp * 2. Redistributions in binary form must reproduce the above copyright
1189948Simp *    notice, this list of conditions and the following disclaimer in the
1289948Simp *    documentation and/or other materials provided with the distribution.
1389948Simp * 3. All advertising materials mentioning features or use of this software
1489948Simp *    must display the following acknowledgement:
1589948Simp *	This product includes software developed by Bill Paul.
1689948Simp * 4. Neither the name of the author nor the names of any co-contributors
1789948Simp *    may be used to endorse or promote products derived from this software
1889948Simp *    without specific prior written permission.
1989948Simp *
2089948Simp * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
2189948Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2289948Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2389948Simp * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
2489948Simp * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2589948Simp * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2689948Simp * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2789948Simp * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2889948Simp * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2989948Simp * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
3089948Simp * THE POSSIBILITY OF SUCH DAMAGE.
3189948Simp *
3289948Simp * $FreeBSD: head/sys/compat/ndis/ndis_var.h 123778 2003-12-23 18:31:04Z wpaul $
3389948Simp */
3489948Simp
3589948Simp#ifndef _NDIS_VAR_H_
3689948Simp#define _NDIS_VAR_H_
3789948Simp
3889948Simp/* Forward declarations */
3989948Simpstruct ndis_miniport_block;
4089948Simpstruct ndis_mdriver_block;
4189948Simptypedef struct ndis_miniport_block ndis_miniport_block;
4289948Simptypedef struct ndis_mdriver_block ndis_mdriver_block;
4389948Simp
4489948Simp/* Base types */
4589948Simptypedef uint32_t ndis_status;
4689948Simptypedef void *ndis_handle;
4789948Simptypedef uint32_t ndis_oid;
4889948Simptypedef uint32_t ndis_error_code;
4989948Simptypedef uint32_t ndis_kspin_lock;
5089948Simptypedef uint8_t ndis_kirql;
5189948Simp
5289948Simp/*
5389948Simp * NDIS status codes (there are lots of them). The ones that
5489948Simp * don't seem to fit the pattern are actually mapped to generic
55119511Simp * NT status codes.
56119511Simp */
57119511Simp
5889948Simp#define NDIS_STATUS_SUCCESS		0
5989948Simp#define NDIS_STATUS_PENDING		0x00000103
60115988Simp#define NDIS_STATUS_NOT_RECOGNIZED	0x00010001
6189948Simp#define NDIS_STATUS_NOT_COPIED		0x00010002
6289948Simp#define NDIS_STATUS_NOT_ACCEPTED	0x00010003
6389948Simp#define NDIS_STATUS_CALL_ACTIVE		0x00010007
6489948Simp#define NDIS_STATUS_ONLINE		0x40010003
6597613Stakawata#define NDIS_STATUS_RESET_START		0x40010004
66115988Simp#define NDIS_STATUS_RESET_END		0x40010005
67115988Simp#define NDIS_STATUS_RING_STATUS		0x40010006
6897613Stakawata#define NDIS_STATUS_CLOSED		0x40010007
6989948Simp#define NDIS_STATUS_WAN_LINE_UP		0x40010008
7089948Simp#define NDIS_STATUS_WAN_LINE_DOWN	0x40010009
7189948Simp#define NDIS_STATUS_WAN_FRAGMENT	0x4001000A
7289948Simp#define NDIS_STATUS_MEDIA_CONNECT	0x4001000B
7389948Simp#define NDIS_STATUS_MEDIA_DISCONNECT	0x4001000C
7489948Simp#define NDIS_STATUS_HARDWARE_LINE_UP	0x4001000D
7589948Simp#define NDIS_STATUS_HARDWARE_LINE_DOWN	0x4001000E
7689948Simp#define NDIS_STATUS_INTERFACE_UP	0x4001000F
7789948Simp#define NDIS_STATUS_INTERFACE_DOWN	0x40010010
7889948Simp#define NDIS_STATUS_MEDIA_BUSY		0x40010011
7989948Simp#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION	0x40010012
8089948Simp#define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
8189948Simp#define NDIS_STATUS_LINK_SPEED_CHANGE	0x40010013
8289948Simp#define NDIS_STATUS_WAN_GET_STATS	0x40010014
8389948Simp#define NDIS_STATUS_WAN_CO_FRAGMENT	0x40010015
8489948Simp#define NDIS_STATUS_WAN_CO_LINKPARAMS	0x40010016
8589948Simp#define NDIS_STATUS_NOT_RESETTABLE	0x80010001
8689948Simp#define NDIS_STATUS_SOFT_ERRORS		0x80010003
8789948Simp#define NDIS_STATUS_HARD_ERRORS		0x80010004
8889948Simp#define NDIS_STATUS_BUFFER_OVERFLOW	0x80000005
89110841Simp#define NDIS_STATUS_FAILURE		0xC0000001
90110841Simp#define NDIS_STATUS_RESOURCES		0xC000009A
91110841Simp#define NDIS_STATUS_CLOSING		0xC0010002
92110841Simp#define NDIS_STATUS_BAD_VERSION		0xC0010004
93110841Simp#define NDIS_STATUS_BAD_CHARACTERISTICS	0xC0010005
94110841Simp#define NDIS_STATUS_ADAPTER_NOT_FOUND	0xC0010006
95110841Simp#define NDIS_STATUS_OPEN_FAILED		0xC0010007
96110841Simp#define NDIS_STATUS_DEVICE_FAILED	0xC0010008
97110841Simp#define NDIS_STATUS_MULTICAST_FULL	0xC0010009
98110841Simp#define NDIS_STATUS_MULTICAST_EXISTS	0xC001000A
99110841Simp#define NDIS_STATUS_MULTICAST_NOT_FOUND	0xC001000B
100110841Simp#define NDIS_STATUS_REQUEST_ABORTED	0xC001000C
101110841Simp#define NDIS_STATUS_RESET_IN_PROGRESS	0xC001000D
102110841Simp#define NDIS_STATUS_CLOSING_INDICATING	0xC001000E
103110841Simp#define NDIS_STATUS_BAD_VERSION		0xC0010004
104110841Simp#define NDIS_STATUS_BAD_CHARACTERISTICS	0xC0010005
105110841Simp#define NDIS_STATUS_ADAPTER_NOT_FOUND	0xC0010006
106110841Simp#define NDIS_STATUS_OPEN_FAILED		0xC0010007
107110841Simp#define NDIS_STATUS_DEVICE_FAILED	0xC0010008
108110841Simp#define NDIS_STATUS_MULTICAST_FULL	0xC0010009
109110841Simp#define NDIS_STATUS_MULTICAST_EXISTS	0xC001000A
110110841Simp#define NDIS_STATUS_MULTICAST_NOT_FOUND	0xC001000B
111110841Simp#define NDIS_STATUS_REQUEST_ABORTED	0xC001000C
112110841Simp#define NDIS_STATUS_RESET_IN_PROGRESS	0xC001000D
113110841Simp#define NDIS_STATUS_CLOSING_INDICATING	0xC001000E
114110841Simp#define NDIS_STATUS_NOT_SUPPORTED	0xC00000BB
11589948Simp#define NDIS_STATUS_INVALID_PACKET	0xC001000F
11689948Simp#define NDIS_STATUS_OPEN_LIST_FULL	0xC0010010
11789948Simp#define NDIS_STATUS_ADAPTER_NOT_READY	0xC0010011
11889948Simp#define NDIS_STATUS_ADAPTER_NOT_OPEN	0xC0010012
11989948Simp#define NDIS_STATUS_NOT_INDICATING	0xC0010013
12089948Simp#define NDIS_STATUS_INVALID_LENGTH	0xC0010014
12189948Simp#define NDIS_STATUS_INVALID_DATA	0xC0010015
12289948Simp#define NDIS_STATUS_BUFFER_TOO_SHORT	0xC0010016
12389948Simp#define NDIS_STATUS_INVALID_OID		0xC0010017
12489948Simp#define NDIS_STATUS_ADAPTER_REMOVED	0xC0010018
12597708Salfred#define NDIS_STATUS_UNSUPPORTED_MEDIA	0xC0010019
12689948Simp#define NDIS_STATUS_GROUP_ADDRESS_IN_USE	0xC001001A
12789948Simp#define NDIS_STATUS_FILE_NOT_FOUND	0xC001001B
12889948Simp#define NDIS_STATUS_ERROR_READING_FILE	0xC001001C
12989948Simp#define NDIS_STATUS_ALREADY_MAPPED	0xC001001D
13089948Simp#define NDIS_STATUS_RESOURCE_CONFLICT	0xC001001E
13189948Simp#define NDIS_STATUS_NO_CABLE		0xC001001F
13289948Simp#define NDIS_STATUS_INVALID_SAP		0xC0010020
13389948Simp#define NDIS_STATUS_SAP_IN_USE		0xC0010021
13489948Simp#define NDIS_STATUS_INVALID_ADDRESS	0xC0010022
13589948Simp#define NDIS_STATUS_VC_NOT_ACTIVATED	0xC0010023
13689948Simp#define NDIS_STATUS_DEST_OUT_OF_ORDER	0xC0010024
13789948Simp#define NDIS_STATUS_VC_NOT_AVAILABLE	0xC0010025
13889948Simp#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE	0xC0010026
13989948Simp#define NDIS_STATUS_INCOMPATABLE_QOS	0xC0010027
14089948Simp#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED	0xC0010028
14189948Simp#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION	0xC0010029
14289948Simp#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR	0xC0011000
14389948Simp#define NDIS_STATUS_INVALID_DEVICE_REQUEST	0xC0000010
14489948Simp#define NDIS_STATUS_NETWORK_UNREACHABLE         0xC000023C
14589948Simp
146110841Simp/*
147110841Simp * NDIS event codes. They are usually reported to NdisWriteErrorLogEntry().
148110841Simp */
149110841Simp
150110841Simp#define EVENT_NDIS_RESOURCE_CONFLICT	0xC0001388
151110841Simp#define EVENT_NDIS_OUT_OF_RESOURCE	0xC0001389
152110841Simp#define EVENT_NDIS_HARDWARE_FAILURE	0xC000138A
153110841Simp#define EVENT_NDIS_ADAPTER_NOT_FOUND	0xC000138B
154110841Simp#define EVENT_NDIS_INTERRUPT_CONNECT	0xC000138C
155115461Sphk#define EVENT_NDIS_DRIVER_FAILURE	0xC000138D
156110841Simp#define EVENT_NDIS_BAD_VERSION		0xC000138E
157110841Simp#define EVENT_NDIS_TIMEOUT		0x8000138F
158110841Simp#define EVENT_NDIS_NETWORK_ADDRESS	0xC0001390
159110841Simp#define EVENT_NDIS_UNSUPPORTED_CONFIGURATION	0xC0001391
160110841Simp#define EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER	0xC0001392
161110841Simp#define EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER	0xC0001393
162110841Simp#define EVENT_NDIS_BAD_IO_BASE_ADDRESS	0xC0001394
163110841Simp#define EVENT_NDIS_RECEIVE_SPACE_SMALL	0x40001395
164110841Simp#define EVENT_NDIS_ADAPTER_DISABLED	0x80001396
165110841Simp#define EVENT_NDIS_IO_PORT_CONFLICT	0x80001397
166110841Simp#define EVENT_NDIS_PORT_OR_DMA_CONFLICT	0x80001398
167110841Simp#define EVENT_NDIS_MEMORY_CONFLICT	0x80001399
168110841Simp#define EVENT_NDIS_INTERRUPT_CONFLICT	0x8000139A
169110841Simp#define EVENT_NDIS_DMA_CONFLICT		0x8000139B
170110841Simp#define EVENT_NDIS_INVALID_DOWNLOAD_FILE_ERROR	0xC000139C
171110841Simp#define EVENT_NDIS_MAXRECEIVES_ERROR	0x8000139D
17289948Simp#define EVENT_NDIS_MAXTRANSMITS_ERROR	0x8000139E
17389948Simp#define EVENT_NDIS_MAXFRAMESIZE_ERROR	0x8000139F
17489948Simp#define EVENT_NDIS_MAXINTERNALBUFS_ERROR	0x800013A0
17589948Simp#define EVENT_NDIS_MAXMULTICAST_ERROR	0x800013A1
17689948Simp#define EVENT_NDIS_PRODUCTID_ERROR	0x800013A2
17789948Simp#define EVENT_NDIS_LOBE_FAILUE_ERROR	0x800013A3
17889948Simp#define EVENT_NDIS_SIGNAL_LOSS_ERROR	0x800013A4
17989948Simp#define EVENT_NDIS_REMOVE_RECEIVED_ERROR	0x800013A5
18089948Simp#define EVENT_NDIS_TOKEN_RING_CORRECTION	0x400013A6
18189948Simp#define EVENT_NDIS_ADAPTER_CHECK_ERROR	0xC00013A7
18289948Simp#define EVENT_NDIS_RESET_FAILURE_ERROR	0x800013A8
18389948Simp#define EVENT_NDIS_CABLE_DISCONNECTED_ERROR	0x800013A9
18489948Simp#define EVENT_NDIS_RESET_FAILURE_CORRECTION	0x800013AA
18589948Simp
186110841Simp/*
18789948Simp * NDIS OIDs used by the queryinfo/setinfo routines.
188110841Simp * Some are required by all NDIS drivers, some are specific to
18989948Simp * a particular type of device, and some are purely optional.
190119520Simp * Unfortunately, one of the purely optional OIDs is the one
19189948Simp * that lets us set the MAC address of the device.
192110841Simp */
19389948Simp
19489948Simp/* Required OIDs */
195110841Simp#define OID_GEN_SUPPORTED_LIST                  0x00010101
19689948Simp#define OID_GEN_HARDWARE_STATUS                 0x00010102
19789948Simp#define OID_GEN_MEDIA_SUPPORTED                 0x00010103
198119520Simp#define OID_GEN_MEDIA_IN_USE                    0x00010104
19989948Simp#define OID_GEN_MAXIMUM_LOOKAHEAD               0x00010105
200110841Simp#define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106
20189948Simp#define OID_GEN_LINK_SPEED                      0x00010107
20289948Simp#define OID_GEN_TRANSMIT_BUFFER_SPACE           0x00010108
203110841Simp#define OID_GEN_RECEIVE_BUFFER_SPACE            0x00010109
204119520Simp#define OID_GEN_TRANSMIT_BLOCK_SIZE             0x0001010A
205110841Simp#define OID_GEN_RECEIVE_BLOCK_SIZE              0x0001010B
206119520Simp#define OID_GEN_VENDOR_ID                       0x0001010C
20789948Simp#define OID_GEN_VENDOR_DESCRIPTION              0x0001010D
208119551Simp#define OID_GEN_CURRENT_PACKET_FILTER           0x0001010E
20989948Simp#define OID_GEN_CURRENT_LOOKAHEAD               0x0001010F
21089948Simp#define OID_GEN_DRIVER_VERSION                  0x00010110
211119520Simp#define OID_GEN_MAXIMUM_TOTAL_SIZE              0x00010111
212119520Simp#define OID_GEN_PROTOCOL_OPTIONS                0x00010112
213119551Simp#define OID_GEN_MAC_OPTIONS                     0x00010113
214119520Simp#define OID_GEN_MEDIA_CONNECT_STATUS            0x00010114
215119520Simp#define OID_GEN_MAXIMUM_SEND_PACKETS            0x00010115
216119520Simp#define OID_GEN_VENDOR_DRIVER_VERSION           0x00010116
217119520Simp#define OID_GEN_SUPPORTED_GUIDS                 0x00010117
218119520Simp#define OID_GEN_NETWORK_LAYER_ADDRESSES         0x00010118  /* Set only */
21989948Simp#define OID_GEN_TRANSPORT_HEADER_OFFSET         0x00010119  /* Set only */
22089948Simp#define OID_GEN_MACHINE_NAME                    0x0001021A
22189948Simp#define OID_GEN_RNDIS_CONFIG_PARAMETER          0x0001021B  /* Set only */
22289948Simp#define OID_GEN_VLAN_ID                         0x0001021C
22389948Simp
224110841Simp/* Optional OIDs. */
225110841Simp#define OID_GEN_MEDIA_CAPABILITIES              0x00010201
226110841Simp#define OID_GEN_PHYSICAL_MEDIUM                 0x00010202
227110841Simp
228110841Simp/* Required statistics OIDs. */
229110841Simp#define OID_GEN_XMIT_OK                         0x00020101
230110841Simp#define OID_GEN_RCV_OK                          0x00020102
23189948Simp#define OID_GEN_XMIT_ERROR                      0x00020103
232119520Simp#define OID_GEN_RCV_ERROR                       0x00020104
23389948Simp#define OID_GEN_RCV_NO_BUFFER                   0x00020105
23489948Simp
235119520Simp/* Optional OID statistics */
23689948Simp#define OID_GEN_DIRECTED_BYTES_XMIT             0x00020201
23789948Simp#define OID_GEN_DIRECTED_FRAMES_XMIT            0x00020202
23889948Simp#define OID_GEN_MULTICAST_BYTES_XMIT            0x00020203
23989948Simp#define OID_GEN_MULTICAST_FRAMES_XMIT           0x00020204
24089948Simp#define OID_GEN_BROADCAST_BYTES_XMIT            0x00020205
24189948Simp#define OID_GEN_BROADCAST_FRAMES_XMIT           0x00020206
24289948Simp#define OID_GEN_DIRECTED_BYTES_RCV              0x00020207
24389948Simp#define OID_GEN_DIRECTED_FRAMES_RCV             0x00020208
24489948Simp#define OID_GEN_MULTICAST_BYTES_RCV             0x00020209
24589948Simp#define OID_GEN_MULTICAST_FRAMES_RCV            0x0002020A
24689948Simp#define OID_GEN_BROADCAST_BYTES_RCV             0x0002020B
24789948Simp#define OID_GEN_BROADCAST_FRAMES_RCV            0x0002020C
24889948Simp#define OID_GEN_RCV_CRC_ERROR                   0x0002020D
24989948Simp#define OID_GEN_TRANSMIT_QUEUE_LENGTH           0x0002020E
25089948Simp#define OID_GEN_GET_TIME_CAPS                   0x0002020F
25189948Simp#define OID_GEN_GET_NETCARD_TIME                0x00020210
25289948Simp#define OID_GEN_NETCARD_LOAD                    0x00020211
25389948Simp#define OID_GEN_DEVICE_PROFILE                  0x00020212
25489948Simp
25589948Simp/* 802.3 (ethernet) OIDs */
25689948Simp#define OID_802_3_PERMANENT_ADDRESS             0x01010101
25789948Simp#define OID_802_3_CURRENT_ADDRESS               0x01010102
25889948Simp#define OID_802_3_MULTICAST_LIST                0x01010103
25989948Simp#define OID_802_3_MAXIMUM_LIST_SIZE             0x01010104
26089948Simp#define OID_802_3_MAC_OPTIONS                   0x01010105
261120421Simp#define NDIS_802_3_MAC_OPTION_PRIORITY          0x00000001
262100703Simp#define OID_802_3_RCV_ERROR_ALIGNMENT           0x01020101
263100703Simp#define OID_802_3_XMIT_ONE_COLLISION            0x01020102
264100703Simp#define OID_802_3_XMIT_MORE_COLLISIONS          0x01020103
265100703Simp#define OID_802_3_XMIT_DEFERRED                 0x01020201
26689948Simp#define OID_802_3_XMIT_MAX_COLLISIONS           0x01020202
26789948Simp#define OID_802_3_RCV_OVERRUN                   0x01020203
26889948Simp#define OID_802_3_XMIT_UNDERRUN                 0x01020204
26989948Simp#define OID_802_3_XMIT_HEARTBEAT_FAILURE        0x01020205
27089948Simp#define OID_802_3_XMIT_TIMES_CRS_LOST           0x01020206
27189948Simp#define OID_802_3_XMIT_LATE_COLLISIONS          0x01020207
27289948Simp
27389948Simp/* PnP and power management OIDs */
27489948Simp#define OID_PNP_CAPABILITIES                    0xFD010100
27589948Simp#define OID_PNP_SET_POWER                       0xFD010101
276119520Simp#define OID_PNP_QUERY_POWER                     0xFD010102
277119520Simp#define OID_PNP_ADD_WAKE_UP_PATTERN             0xFD010103
27889948Simp#define OID_PNP_REMOVE_WAKE_UP_PATTERN          0xFD010104
27989948Simp#define OID_PNP_WAKE_UP_PATTERN_LIST            0xFD010105
28089948Simp#define OID_PNP_ENABLE_WAKE_UP                  0xFD010106
28189948Simp
28289948Simp/* PnP/PM Statistics (Optional). */
28389948Simp#define OID_PNP_WAKE_UP_OK                      0xFD020200
28489948Simp#define OID_PNP_WAKE_UP_ERROR                   0xFD020201
28589948Simp
28689948Simp/* The following bits are defined for OID_PNP_ENABLE_WAKE_UP */
28789948Simp#define NDIS_PNP_WAKE_UP_MAGIC_PACKET           0x00000001
28889948Simp#define NDIS_PNP_WAKE_UP_PATTERN_MATCH          0x00000002
28989948Simp#define NDIS_PNP_WAKE_UP_LINK_CHANGE            0x00000004
29089948Simp
29189948Simp/* 802.11 OIDs */
29289948Simp#define OID_802_11_BSSID                        0x0D010101
29389948Simp#define OID_802_11_SSID                         0x0D010102
29489948Simp#define OID_802_11_NETWORK_TYPES_SUPPORTED      0x0D010203
29589948Simp#define OID_802_11_NETWORK_TYPE_IN_USE          0x0D010204
29689948Simp#define OID_802_11_TX_POWER_LEVEL               0x0D010205
29789948Simp#define OID_802_11_RSSI                         0x0D010206
29889948Simp#define OID_802_11_RSSI_TRIGGER                 0x0D010207
29989948Simp#define OID_802_11_INFRASTRUCTURE_MODE          0x0D010108
30089948Simp#define OID_802_11_FRAGMENTATION_THRESHOLD      0x0D010209
30189948Simp#define OID_802_11_RTS_THRESHOLD                0x0D01020A
30289948Simp#define OID_802_11_NUMBER_OF_ANTENNAS           0x0D01020B
30389948Simp#define OID_802_11_RX_ANTENNA_SELECTED          0x0D01020C
30489948Simp#define OID_802_11_TX_ANTENNA_SELECTED          0x0D01020D
30589948Simp#define OID_802_11_SUPPORTED_RATES              0x0D01020E
30689948Simp#define OID_802_11_DESIRED_RATES                0x0D010210
30789948Simp#define OID_802_11_CONFIGURATION                0x0D010211
30889948Simp#define OID_802_11_STATISTICS                   0x0D020212
30989948Simp#define OID_802_11_ADD_WEP                      0x0D010113
31089948Simp#define OID_802_11_REMOVE_WEP                   0x0D010114
31189948Simp#define OID_802_11_DISASSOCIATE                 0x0D010115
31289948Simp#define OID_802_11_POWER_MODE                   0x0D010216
31389948Simp#define OID_802_11_BSSID_LIST                   0x0D010217
31489948Simp#define OID_802_11_AUTHENTICATION_MODE          0x0D010118
31589948Simp#define OID_802_11_PRIVACY_FILTER               0x0D010119
31689948Simp#define OID_802_11_BSSID_LIST_SCAN              0x0D01011A
31789948Simp#define OID_802_11_WEP_STATUS                   0x0D01011B
31889948Simp#define OID_802_11_RELOAD_DEFAULTS              0x0D01011C
31989948Simp
32089948Simp/* structures/definitions for 802.11 */
32189948Simp#define NDIS_80211_NETTYPE_11FH		0x00000000
32289948Simp#define NDIS_80211_NETTYPE_11DS		0x00000001
32389948Simp
32489948Simpstruct ndis_80211_nettype_list {
32589948Simp	uint32_t		ntl_items;
32689948Simp	uint32_t		ntl_type[1];
32789948Simp};
32889948Simp
32989948Simp#define NDIS_80211_POWERMODE_CAM	0x00000000
33089948Simp#define NDIS_80211_POWERMODE_MAX_PSP	0x00000001
33189948Simp#define NDIS_80211_POWERMODE_FAST_PSP	0x00000002
33289948Simp
33389948Simptypedef uint32_t ndis_80211_power;	/* Power in milliwatts */
33489948Simptypedef uint32_t ndis_80211_rssi;	/* Signal strength in dBm */
33589948Simp
33689948Simpstruct ndis_80211_config_fh {
33789948Simp	uint32_t		ncf_length;
33889948Simp	uint32_t		ncf_hoppatterh;
33989948Simp	uint32_t		ncf_hopset;
34089948Simp	uint32_t		ncf_dwelltime;
34189948Simp};
34289948Simp
34389948Simptypedef struct ndis_80211_config_fh ndis_80211_config_fh;
34489948Simp
34589948Simpstruct ndis_80211_config {
34689948Simp	uint32_t		nc_length;
34789948Simp	uint32_t		nc_beaconperiod;
34889948Simp	uint32_t		nc_atimwin;
34989948Simp	uint32_t		nc_dsconfig;
35089948Simp	ndis_80211_config_fh	nc_fhconfig;
35189948Simp};
35289948Simp
35389948Simptypedef struct ndis_80211_config ndis_80211_config;
35489948Simp
35589948Simpstruct ndis_80211_stats {
35689948Simp	uint32_t		ns_length;
35789948Simp	uint64_t		ns_txfragcnt;
35889948Simp	uint64_t		ns_txmcastcnt;
35989948Simp	uint64_t		ns_failedcnt;
36089948Simp	uint64_t		ns_retrycnt;
36189948Simp	uint64_t		ns_multiretrycnt;
36289948Simp	uint64_t		ns_rtssuccesscnt;
36389948Simp	uint64_t		ns_rtsfailcnt;
36489948Simp	uint64_t		ns_ackfailcnt;
36589948Simp	uint64_t		ns_dupeframecnt;
36689948Simp	uint64_t		ns_rxfragcnt;
36789948Simp	uint64_t		ns_rxmcastcnt;
368119520Simp	uint64_t		ns_fcserrcnt;
36989948Simp};
37089948Simp
37189948Simptypedef struct ndis_80211_stats ndis_80211_stats;
37289948Simp
37389948Simptypedef uint32_t ndis_80211_key_idx;
37489948Simp
37589948Simpstruct ndis_80211_wep {
37689948Simp	uint32_t		nw_length;
37789948Simp	uint32_t		nw_keyidx;
37889948Simp	uint32_t		nw_keylen;
37989948Simp	uint32_t		nw_keydata[1];
38089948Simp};
38189948Simp
38289948Simptypedef struct ndis_80211_wep ndis_80211_wep;
383119520Simp
38489948Simp#define NDIS_80211_NET_INFRA_IBSS	0x00000000
38589948Simp#define NDIS_80211_NET_INFRA_BSS	0x00000001
38689948Simp#define NDIS_80211_NET_INFRA_AUTO	0x00000002
38789948Simp
38889948Simp#define NDIS_80211_AUTHMODE_OPEN	0x00000000
38989948Simp#define NDIS_80211_AUTHMODE_SHARED	0x00000001
39089948Simp#define NDIS_80211_AUTHMODE_AUTO	0x00000002
39189948Simp
39289948Simptypedef uint8_t ndis_80211_rates[8];
39389948Simptypedef uint8_t ndis_80211_macaddr[6];
39489948Simp
39589948Simpstruct ndis_80211_ssid {
39689948Simp	uint32_t		ns_ssidlen;
39789948Simp	uint8_t			ns_ssid[32];
39889948Simp};
39989948Simp
40089948Simptypedef struct ndis_80211_ssid ndis_80211_ssid;
40189948Simp
40289948Simpstruct ndis_wlan_bssid {
40397708Salfred	uint32_t		nwb_length;
40489948Simp	ndis_80211_macaddr	nwb_macaddr;
40589948Simp	uint8_t			nwb_rsvd[2];
40689948Simp	ndis_80211_ssid		nwb_ssid;
40789948Simp	uint32_t		nwb_privacy;
40889948Simp	ndis_80211_rssi		nwb_rssi;
40989948Simp	uint32_t		nwb_nettype;
41089948Simp	ndis_80211_config	nwb_config;
41189948Simp	uint32_t		nwb_netinfra;
41289948Simp	ndis_80211_rates	nwb_supportedrates;
41389948Simp};
41489948Simp
41589948Simptypedef struct ndis_wlan_bssid ndis_wlan_bssid;
41689948Simp
41789948Simpstruct ndis_80211_bssid_list {
41889948Simp	uint32_t		nbl_items;
41989948Simp	ndis_wlan_bssid		nbl_bssid[1];
42089948Simp};
42189948Simp
42289948Simptypedef struct ndis_80211_bssid_list ndis_80211_bssid_list;
42389948Simp
42489948Simptypedef uint32_t ndis_80211_fragthresh;
42589948Simptypedef uint32_t ndis_80211_rtsthresh;
42689948Simptypedef uint32_t ndis_80211_antenna;
42789948Simp
42889948Simp#define NDIS_80211_PRIVFILT_ACCEPTALL	0x00000000
42989948Simp#define NDIS_80211_PRIVFILT_8021XWEP	0x00000001
43089948Simp
43189948Simp#define NDIS_80211_WEPSTAT_ENABLED	0x00000000
43289948Simp#define NDIS_80211_WEPSTAT_DISABLED	0x00000001
43389948Simp#define NDIS_80211_WEPSTAT_KEYABSENT	0x00000002
43489948Simp#define NDIS_80211_WEPSTAT_NOTSUPPORTED	0x00000003
43589948Simp
43689948Simp#define NDIS_80211_RELOADDEFAULT_WEP	0x00000000
43789948Simp
43889948Simp/*
43989948Simp * Attribures of NDIS drivers. Not all drivers support
440110841Simp * all attributes.
441110841Simp */
44289948Simp
443110841Simp#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT		0x00000002
444110841Simp#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS		0x00000004
44589948Simp#define NDIS_ATTRIBUTE_BUS_MASTER			0x00000008
44689948Simp#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER		0x00000010
44789948Simp#define NDIS_ATTRIBUTE_DESERIALIZE			0x00000020
44889948Simp#define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND		0x00000040
44989948Simp#define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK		0x00000080
45089948Simp#define NDIS_ATTRIBUTE_NOT_CO_NDIS			0x00000100
45189948Simp#define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS		0x00000200
45289948Simp
453110841Simpenum ndis_media_state {
454110841Simp	nmc_connected,
455110841Simp	nmc_disconnected
456110841Simp};
45789948Simp
45889948Simptypedef enum ndis_media_state ndis_media_state;
45989948Simp
46089948Simp/* Ndis Packet Filter Bits (OID_GEN_CURRENT_PACKET_FILTER). */
46189948Simp
46289948Simp#define NDIS_PACKET_TYPE_DIRECTED               0x00000001
46389948Simp#define NDIS_PACKET_TYPE_MULTICAST              0x00000002
46489948Simp#define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
46589948Simp#define NDIS_PACKET_TYPE_BROADCAST              0x00000008
46689948Simp#define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
46789948Simp#define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
46889948Simp#define NDIS_PACKET_TYPE_SMT                    0x00000040
46989948Simp#define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
47089948Simp#define NDIS_PACKET_TYPE_GROUP                  0x00001000
47189948Simp#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
47289948Simp#define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
47389948Simp#define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
47489948Simp
47589948Simp
47689948Simp/* Ndis MAC option bits (OID_GEN_MAC_OPTIONS). */
47789948Simp
47889948Simp#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA             0x00000001
47989948Simp#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED              0x00000002
48089948Simp#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND              0x00000004
48189948Simp#define NDIS_MAC_OPTION_NO_LOOPBACK                     0x00000008
48289948Simp#define NDIS_MAC_OPTION_FULL_DUPLEX                     0x00000010
48389948Simp#define NDIS_MAC_OPTION_EOTX_INDICATION                 0x00000020
48489948Simp#define NDIS_MAC_OPTION_8021P_PRIORITY                  0x00000040
48589948Simp#define NDIS_MAC_OPTION_SUPPORTS_MAC_ADDRESS_OVERWRITE  0x00000080
48689948Simp#define NDIS_MAC_OPTION_RECEIVE_AT_DPC                  0x00000100
48789948Simp#define NDIS_MAC_OPTION_8021Q_VLAN                      0x00000200
48889948Simp#define NDIS_MAC_OPTION_RESERVED                        0x80000000
48989948Simp
49089948Simp#define NDIS_DMA_24BITS		0x00
49189948Simp#define NDIS_DMA_32BITS		0x01
49289948Simp#define NDIS_DMA_64BITS		0x02
49389948Simp
49489948Simpstruct ndis_physaddr {
49589948Simp	uint64_t		np_quad;
49689948Simp#ifdef notdef
49789948Simp	uint32_t		np_low;
49889948Simp	uint32_t		np_high;
49989948Simp#endif
50089948Simp};
50189948Simp
50289948Simptypedef struct ndis_physaddr ndis_physaddr;
50389948Simp
50489948Simpstruct ndis_ansi_string {
50589948Simp	uint16_t		nas_len;
50689948Simp	uint16_t		nas_maxlen;
50789948Simp	char			*nas_buf;
50889948Simp};
50989948Simp
51089948Simptypedef struct ndis_ansi_string ndis_ansi_string;
51189948Simp
51289948Simp/*
51389948Simp * nus_buf is really a wchar_t *, but it's inconvenient to include
51489948Simp * all the necessary header goop needed to define it, and it's a
51589948Simp * pointer anyway, so for now, just make it a uint16_t *.
51689948Simp */
51789948Simpstruct ndis_unicode_string {
51889948Simp	uint16_t		nus_len;
51989948Simp	uint16_t		nus_maxlen;
52089948Simp	uint16_t		*nus_buf;
52189948Simp};
52289948Simp
52389948Simptypedef struct ndis_unicode_string ndis_unicode_string;
52489948Simp
52589948Simp
52689948Simpenum ndis_parm_type {
52789948Simp	ndis_parm_int,
52889948Simp	ndis_parm_hexint,
52989948Simp	ndis_parm_string,
53089948Simp	ndis_parm_multistring,
53189948Simp	ndis_parm_binary
53289948Simp};
53389948Simp
53489948Simptypedef enum ndis_parm_type ndis_parm_type;
53589948Simp
53689948Simpstruct ndis_binary_data {
53789948Simp	uint16_t		nbd_len;
53889948Simp	void			*nbd_buf;
53989948Simp};
54089948Simp
54189948Simptypedef struct ndis_binary_data ndis_binary_data;
54289948Simp
54389948Simpstruct ndis_config_parm {
54489948Simp	ndis_parm_type		ncp_type;
54589948Simp	union {
54689948Simp		uint32_t		ncp_intdata;
54789948Simp		ndis_unicode_string	ncp_stringdata;
54889948Simp		ndis_binary_data	ncp_binarydata;
54989948Simp	} ncp_parmdata;
55089948Simp};
55189948Simp
55289948Simptypedef struct ndis_config_parm ndis_config_parm;
553110841Simp
55489948Simpstruct ndis_list_entry {
555110841Simp	struct ndis_list_entry *nle_flink;
55689948Simp	struct ndis_list_entry *nle_blink;
55789948Simp};
55889948Simp
55989948Simptypedef struct ndis_list_entry ndis_list_entry;
560110841Simp
56189948Simpstruct ndis_bind_paths {
56289948Simp	uint32_t		nbp_number;
56389948Simp	ndis_unicode_string	nbp_paths[1];
56489948Simp};
56589948Simp
56689948Simptypedef struct ndis_bind_paths ndis_bind_paths;
56789948Simp
56889948Simpstruct dispatch_header {
56989948Simp	uint8_t			dh_type;
57089948Simp	uint8_t			dh_abs;
571104601Simp	uint8_t			dh_size;
572104601Simp	uint8_t			dh_inserted;
573104601Simp	uint32_t		dh_sigstate;
574104601Simp	ndis_list_entry		dh_waitlisthead;
57589948Simp};
57689948Simp
57789948Simpstruct ndis_ktimer {
57889948Simp	struct dispatch_header	nk_header;
57989948Simp	uint64_t		nk_duetime;
58089948Simp	ndis_list_entry		nk_timerlistentry;
58189948Simp	void			*nk_dpc;
58289948Simp	uint32_t		nk_period;
58389948Simp};
58489948Simp
585110841Simpstruct ndis_kevent {
58689948Simp	struct dispatch_header	nk_header;
58789948Simp};
58889948Simp
58989948Simpstruct ndis_event {
59089948Simp	struct ndis_kevent	ne_event;
59189948Simp};
59289948Simp
59389948Simptypedef struct ndis_event ndis_event;
59489948Simp
59589948Simp/* Kernel defered procedure call (i.e. timer callback) */
596110841Simp
59789948Simpstruct ndis_kdpc;
59889948Simptypedef void (*ndis_kdpc_func)(struct ndis_kdpc *, void *, void *, void *);
59989948Simp
60089948Simpstruct ndis_kdpc {
60189948Simp	uint16_t		nk_type;
60289948Simp	uint8_t			nk_num;
60389948Simp	uint8_t			nk_importance;
60489948Simp	ndis_list_entry		nk_dpclistentry;
60589948Simp	ndis_kdpc_func		nk_deferedfunc;
60689948Simp	void			*nk_deferredctx;
60789948Simp	void			*nk_sysarg1;
60889948Simp	void			*nk_sysarg2;
60989948Simp	uint32_t		*nk_lock;
61089948Simp};
61189948Simp
61289948Simpstruct ndis_timer {
61389948Simp	struct ndis_ktimer	nt_timer;
61489948Simp	struct ndis_kdpc	nt_dpc;
61589948Simp};
61689948Simp
617100703Simptypedef struct ndis_timer ndis_timer;
618100703Simp
61989948Simptypedef void (*ndis_timer_function)(void *, void *, void *, void *);
62089948Simp
62189948Simpstruct ndis_miniport_timer {
62289948Simp	struct ndis_ktimer	nmt_ktimer;
62389948Simp	struct ndis_kdpc	nmt_dpc;
62489948Simp	ndis_timer_function	nmt_timerfunc;
62589948Simp	void			*nmt_timerctx;
62689948Simp	struct ndis_miniport_timer	*nmt_nexttimer;
627110841Simp};
628110841Simp
62989948Simptypedef struct ndis_miniport_timer ndis_miniport_timer;
63089948Simp
63189948Simpstruct ndis_spin_lock {
632110841Simp	ndis_kspin_lock		nsl_spinlock;
633110841Simp	ndis_kirql		nsl_kirql;
634110841Simp};
635110841Simp
636110841Simptypedef struct ndis_spin_lock ndis_spin_lock;
637110841Simp
638110841Simpstruct ndis_request {
639115988Simp	uint8_t			nr_macreserved[4*sizeof(void *)];
640115988Simp	uint32_t		nr_requesttype;
641115988Simp	union _ndis_data {
642110841Simp		struct _ndis_query_information {
643110841Simp			ndis_oid	nr_oid;
644110841Simp			void		*nr_infobuf;
645110841Simp			uint32_t	nr_infobuflen;
646110841Simp			uint32_t	nr_byteswritten;
647110841Simp			uint32_t	nr_bytesneeded;
648110841Simp		} ndis_query_information;
649110841Simp		struct _ndis_set_information {
650110841Simp			ndis_oid	nr_oid;
651110841Simp			void		*nr_infobuf;
652110841Simp			uint32_t	nr_infobuflen;
653110841Simp			uint32_t	nr_byteswritten;
654110841Simp			uint32_t	nr_bytesneeded;
655110841Simp		} ndis_set_information;
656110841Simp	} ndis_data;
657110841Simp	/* NDIS 5.0 extentions */
658110841Simp	uint8_t			nr_ndis_rsvd[9 * sizeof(void *)];
659110841Simp	union {
660110841Simp		uint8_t		nr_callmgr_rsvd[2 * sizeof(void *)];
661110841Simp		uint8_t		nr_protocol_rsvd[2 * sizeof(void *)];
662110841Simp	} u;
663110841Simp	uint8_t			nr_miniport_rsvd[2 * sizeof(void *)];
664110841Simp};
665110841Simp
666110841Simptypedef struct ndis_request ndis_request;
667110841Simp
668110841Simp/*
669110841Simp * Filler, not used.
670110841Simp */
671110841Simpstruct ndis_miniport_interrupt {
672110841Simp	void			*ni_introbj;
673110841Simp	ndis_spin_lock		ni_dpccountlock;
674110841Simp	void			*ni_rsvd;
675110841Simp	void			*ni_isrfunc;
676110841Simp	void			*ni_dpcfunc;
677110841Simp	struct ndis_kdpc	ni_dpc;
678110841Simp	ndis_miniport_block	*ni_block;
679110841Simp	uint8_t			ni_dpccnt;
680110841Simp	uint8_t			ni_filler1;
681110841Simp	struct ndis_kevent	ni_dpcsdoneevent;
682110841Simp	uint8_t			ni_shared;
683110841Simp	uint8_t			ni_isrreq;
684110841Simp};
685110841Simp
686110841Simptypedef struct ndis_miniport_interrupt ndis_miniport_interrupt;
687110841Simp
688110841Simpenum ndis_interrupt_mode {
689110841Simp	nim_level,
690110841Simp	nim_latched
691110841Simp};
692110841Simp
693110841Simptypedef enum ndis_interrupt_mode ndis_interrupt_mode;
694110841Simp
695110841Simp
696110841Simpstruct ndis_buffer {
697110841Simp	struct ndis_buffer	*nb_next;
698110841Simp	uint16_t		nb_size;
699110841Simp	uint16_t		nb_flags;
700110841Simp	void			*nb_process;
701110841Simp	void			*nb_mappedsystemva;
702110841Simp	void			*nb_startva;
703110841Simp	uint32_t		nb_bytecount;
704110841Simp	uint32_t		nb_byteoffset;
705110841Simp};
706110841Simp
707110841Simptypedef struct ndis_buffer ndis_buffer;
708110841Simp
709110841Simpstruct ndis_sc_element {
710110841Simp	ndis_physaddr		nse_addr;
711110841Simp	uint32_t		nse_len;
712110841Simp	uint32_t		*nse_rsvd;
713110841Simp};
714110841Simp
715110841Simptypedef struct ndis_sc_element ndis_sc_element;
716110841Simp
717110841Simp#define NDIS_MAXSEG		32
718110841Simpstruct ndis_sc_list {
719110841Simp	uint32_t		nsl_frags;
720110841Simp	uint32_t		*nsl_rsvd;
721110841Simp	ndis_sc_element		nsl_elements[NDIS_MAXSEG];
722110841Simp};
723110841Simp
724110841Simptypedef struct ndis_sc_list ndis_sc_list;
725110841Simp
726110841Simpenum ndis_perpkt_info {
727110841Simp	ndis_tcpipcsum_info,
728110841Simp	ndis_ipsec_info,
729110841Simp	ndis_largesend_info,
730110841Simp	ndis_classhandle_info,
731110841Simp	ndis_rsvd,
732110841Simp	ndis_sclist_info,
733110841Simp	ndis_ieee8021q_info,
734110841Simp	ndis_originalpkt_info,
735110841Simp        ndis_packetcancelid,
736110841Simp	ndis_maxpkt_info
737110841Simp};
738110841Simp
739110841Simptypedef enum ndis_perpkt_info ndis_perpkt_info;
740110841Simp
74189948Simpstruct ndis_packet_extension {
74289948Simp	void			*npe_info[ndis_maxpkt_info];
74389948Simp};
74489948Simp
745110841Simptypedef struct ndis_packet_extension ndis_packet_extension;
74689948Simp
74789948Simpstruct ndis_packet_private {
748110841Simp	uint32_t		npp_physcnt;
749110841Simp	uint32_t		npp_totlen;
75089948Simp	ndis_buffer		*npp_head;
75189948Simp	ndis_buffer		*npp_tail;
75289948Simp
75389948Simp	void			*npp_pool;
75489948Simp	uint32_t		npp_count;
755110841Simp	uint32_t		npp_flags;
756100703Simp	uint8_t			npp_validcounts;
757110841Simp	uint8_t			npp_ndispktflags;
758110841Simp	uint16_t		npp_packetooboffset;
759110841Simp};
76089948Simp
76189948Simp#define NDIS_FLAGS_PROTOCOL_ID_MASK             0x0000000F
76289948Simp#define NDIS_FLAGS_MULTICAST_PACKET             0x00000010
76389948Simp#define NDIS_FLAGS_RESERVED2                    0x00000020
76489948Simp#define NDIS_FLAGS_RESERVED3                    0x00000040
765115988Simp#define NDIS_FLAGS_DONT_LOOPBACK                0x00000080
766115988Simp#define NDIS_FLAGS_IS_LOOPBACK_PACKET           0x00000100
767115988Simp#define NDIS_FLAGS_LOOPBACK_ONLY                0x00000200
768115988Simp#define NDIS_FLAGS_RESERVED4                    0x00000400
769115988Simp#define NDIS_FLAGS_DOUBLE_BUFFERED              0x00000800
770115988Simp#define NDIS_FLAGS_SENT_AT_DPC                  0x00001000
771115988Simp#define NDIS_FLAGS_USES_SG_BUFFER_LIST          0x00002000
772115988Simp
773115988Simp#define NDIS_PROTOCOL_ID_DEFAULT        0x00
774115988Simp#define NDIS_PROTOCOL_ID_TCP_IP         0x02
775115988Simp#define NDIS_PROTOCOL_ID_IPX            0x06
776115988Simp#define NDIS_PROTOCOL_ID_NBF            0x07
777115988Simp#define NDIS_PROTOCOL_ID_MAX            0x0F
778115988Simp#define NDIS_PROTOCOL_ID_MASK           0x0F
779115988Simp
780115988Simptypedef struct ndis_packet_private ndis_packet_private;
781115988Simp
782115988Simpenum ndis_classid {
783115988Simp	ndis_class_802_3prio,
784115988Simp	ndis_class_wirelesswan_mbx,
785115988Simp	ndis_class_irda_packetinfo,
786115988Simp	ndis_class_atm_aainfo
787115988Simp};
788115988Simp
789115988Simptypedef enum ndis_classid ndis_classid;
790115988Simp
791115988Simpstruct ndis_mediaspecific_info {
792115988Simp	uint32_t		nmi_nextentoffset;
793115988Simp	ndis_classid		nmi_classid;
794119551Simp	uint32_t		nmi_size;
795115988Simp	uint8_t			nmi_classinfo[1];
796115988Simp};
797119551Simp
798115988Simptypedef struct ndis_mediaspecific_info ndis_mediaspecific_info;
799115988Simp
800115988Simpstruct ndis_packet_oob {
801115988Simp	union {
802115988Simp		uint64_t		npo_timetotx;
803115988Simp		uint64_t		npo_timetxed;
804115988Simp	} u;
805115988Simp	uint64_t			npo_timerxed;
806115988Simp	uint32_t			npo_hdrlen;
807115988Simp	uint32_t			npo_mediaspecific_len;
808115988Simp	void				*npo_mediaspecific;
809115988Simp	ndis_status			npo_status;
810115988Simp};
811115988Simp
812115988Simptypedef struct ndis_packet_oob ndis_packet_oob;
813115988Simp
814115988Simpstruct ndis_packet {
815115988Simp	ndis_packet_private	np_private;
816115988Simp	union {
817115988Simp		/* For connectionless miniports. */
818115988Simp		struct {
819115988Simp			uint8_t		np_miniport_rsvd[2 * sizeof(void *)];
820115988Simp			uint8_t		np_wrapper_rsvd[2 * sizeof(void *)];
821115988Simp		} np_clrsvd;
822115988Simp		/* For de-serialized miniports */
823115988Simp		struct {
824115988Simp			uint8_t		np_miniport_rsvdex[3 * sizeof(void *)];
825115988Simp			uint8_t		np_wrapper_rsvdex[sizeof(void *)];
826115988Simp		} np_dsrsvd;
827115988Simp		struct {
828115988Simp			uint8_t		np_mac_rsvd[4 * sizeof(void *)];
829115988Simp		} np_macrsvd;
830115988Simp	} u;
831110841Simp	uint32_t		*np_rsvd[2];
832110841Simp	uint8_t			np_proto_rsvd[1];
83389948Simp
834110841Simp	/*
83589948Simp	 * This next part is probably wrong, but we need some place
83697613Stakawata	 * to put the out of band data structure...
83797613Stakawata	 */
83897613Stakawata	ndis_packet_oob		np_oob;
839	ndis_packet_extension	np_ext;
840	ndis_sc_list		np_sclist;
841};
842
843typedef struct ndis_packet ndis_packet;
844
845/* mbuf ext type for NDIS */
846#define EXT_NDIS		0x999
847
848struct ndis_filterdbs {
849	union {
850		void			*nf_ethdb;
851		void			*nf_nulldb;
852	} u;
853	void			*nf_trdb;
854	void			*nf_fddidb;
855	void			*nf_arcdb;
856};
857
858typedef struct ndis_filterdbs ndis_filterdbs;
859
860enum ndis_medium {
861    NdisMedium802_3,
862    NdisMedium802_5,
863    NdisMediumFddi,
864    NdisMediumWan,
865    NdisMediumLocalTalk,
866    NdisMediumDix,              /* defined for convenience, not a real medium */
867    NdisMediumArcnetRaw,
868    NdisMediumArcnet878_2,
869    NdisMediumAtm,
870    NdisMediumWirelessWan,
871    NdisMediumIrda,
872    NdisMediumBpc,
873    NdisMediumCoWan,
874    NdisMedium1394,
875    NdisMediumMax
876};
877
878typedef enum ndis_medium ndis_medium;
879/*
880enum interface_type {
881	InterfaceTypeUndefined = -1,
882	Internal,
883	Isa,
884	Eisa,
885	MicroChannel,
886	TurboChannel,
887	PCIBus,
888	VMEBus,
889	NuBus,
890	PCMCIABus,
891	CBus,
892	MPIBus,
893	MPSABus,
894	ProcessorInternal,
895	InternalPowerBus,
896	PNPISABus,
897	PNPBus,
898	MaximumInterfaceType
899};
900*/
901enum ndis_interface_type {
902	NdisInterfaceInternal = Internal,
903	NdisInterfaceIsa = Isa,
904	NdisInterfaceEisa = Eisa,
905	NdisInterfaceMca = MicroChannel,
906	NdisInterfaceTurboChannel = TurboChannel,
907	NdisInterfacePci = PCIBus,
908	NdisInterfacePcMcia = PCMCIABus
909};
910
911typedef enum ndis_interface_type ndis_interface_type;
912
913struct ndis_paddr_unit {
914	ndis_physaddr		npu_physaddr;
915	uint32_t		npu_len;
916};
917
918typedef struct ndis_paddr_unit ndis_paddr_unit;
919
920struct ndis_map_arg {
921	ndis_paddr_unit		*nma_fraglist;
922	int			nma_cnt;
923	int			nma_max;
924};
925
926/*
927 * Miniport characteristics were originally defined in the NDIS 3.0
928 * spec and then extended twice, in NDIS 4.0 and 5.0.
929 */
930
931struct ndis_miniport_characteristics {
932
933	/* NDIS 3.0 */
934
935	uint8_t			nmc_version_major;
936	uint8_t			nmc_version_minor;
937	uint16_t		nmc_pad;
938	uint32_t		nmc_rsvd;
939	void *			nmc_checkhang_func;
940	void *			nmc_disable_interrupts_func;
941	void *			nmc_enable_interrupts_func;
942	void *			nmc_halt_func;
943	void *			nmc_interrupt_func;
944	void *			nmc_init_func;
945	void *			nmc_isr_func;
946	void *			nmc_queryinfo_func;
947	void *			nmc_reconfig_func;
948	void *			nmc_reset_func;
949	void *			nmc_sendsingle_func;
950	void *			nmc_setinfo_func;
951	void *			nmc_transferdata_func;
952
953	/* NDIS 4.0 extentions */
954
955	void *			nmc_return_packet_func;
956	void *			nmc_sendmulti_func;
957	void *			nmc_allocate_complete_func;
958
959	/* NDIS 5.0 extensions */
960
961	void *			nmc_cocreatevc_func;
962	void *			nmc_codeletevc_func;
963	void *			nmc_coactivatevc_func;
964	void *			nmc_codeactivatevc_func;
965	void *			nmc_comultisend_func;
966	void *			nmc_corequest_func;
967
968	/* NDIS 5.1 extentions */
969
970	void *			nmc_canceltxpkts_handler;
971	void *			nmc_pnpevent_handler;
972	void *			nmc_shutdown_handler;
973	void *			nmc_rsvd0;
974	void *			nmc_rsvd1;
975	void *			nmc_rsvd2;
976	void *			nmc_rsvd3;
977};
978
979typedef struct ndis_miniport_characteristics ndis_miniport_characteristics;
980
981struct ndis_driver_object {
982	char			*ndo_ifname;
983	void			*ndo_softc;
984	ndis_miniport_characteristics ndo_chars;
985};
986
987typedef struct ndis_driver_object ndis_driver_object;
988
989struct ndis_reference {
990	ndis_kspin_lock		nr_spinlock;
991	uint16_t		nr_refcnt;
992	uint8_t			nr_closing;
993};
994
995typedef struct ndis_reference ndis_reference;
996
997/*
998 * The miniport block is basically the internal NDIS handle. We need
999 * to define this because, unfortunately, it is not entirely opaque
1000 * to NDIS drivers. For one thing, it contains the function pointer
1001 * to the NDIS packet receive handler, which is invoked out of the
1002 * NDIS block via a macro rather than a function pointer. (The
1003 * NdisMIndicateReceivePacket() routine is a macro rather than
1004 * a function.) For another, the driver maintains a pointer to the
1005 * miniport block and passes it as a handle to various NDIS functions.
1006 * (The driver never really knows this because it's hidden behind
1007 * an ndis_handle though.)
1008 *
1009 * The miniport block has two parts: the first part contains fields
1010 * that must never change, since they are referenced by driver
1011 * binaries through macros. The second part is ignored by the driver,
1012 * but contains various things used internaly by NDIS.SYS. In our
1013 * case, we define the first 'immutable' part exactly as it appears
1014 * in Windows, but don't bother duplicating the Windows definitions
1015 * for the second part. Instead, we replace them with a few BSD-specific
1016 * things.
1017 */
1018
1019struct ndis_miniport_block {
1020	/*
1021	 * Windows-specific portion -- DO NOT MODIFY OR NDIS
1022	 * DRIVERS WILL NOT WORK.
1023	 */
1024	void			*nmb_signature;	/* magic number */
1025	ndis_miniport_block	*nmb_nextminiport;
1026	ndis_mdriver_block	*nmb_driverhandle;
1027	ndis_handle		nmb_miniportadapterctx;
1028	ndis_unicode_string	nmb_name;
1029	ndis_bind_paths		*nmb_bindpaths;
1030	ndis_handle		nmb_openqueue;
1031	ndis_reference		nmb_ref;
1032	ndis_handle		nmb_devicectx;
1033	uint8_t			nmb_padding;
1034	uint8_t			nmb_lockacquired;
1035	uint8_t			nmb_pmodeopens;
1036	uint8_t			nmb_assignedcpu;
1037	ndis_kspin_lock		nmb_lock;
1038	ndis_request		*nmb_mediarequest;
1039	ndis_miniport_interrupt	*nmb_interrupt;
1040	uint32_t		nmb_flags;
1041	uint32_t		nmb_pnpflags;
1042	ndis_list_entry		nmb_packetlist;
1043	ndis_packet		*nmb_firstpendingtxpacket;
1044	ndis_packet		*nmb_returnpacketqueue;
1045	uint32_t		nmb_requestbuffer;
1046	void			*nmb_setmcastbuf;
1047	ndis_miniport_block	*nmb_primaryminiport;
1048	void			*nmb_wrapperctx;
1049	void			*nmb_busdatactx;
1050	uint32_t		nmb_pnpcaps;
1051	cm_resource_list	*nmb_resources;
1052	ndis_timer		nmb_wkupdpctimer;
1053	ndis_unicode_string	nmb_basename;
1054	ndis_unicode_string	nmb_symlinkname;
1055	uint32_t		nmb_checkforhangsecs;
1056	uint16_t		nmb_cfhticks;
1057	uint16_t		nmb_cfhcurrticks;
1058	ndis_status		nmb_resetstatus;
1059	ndis_handle		nmb_resetopen;
1060	ndis_filterdbs		nmb_filterdbs;
1061	void			*nmb_pktind_func;
1062	void			*nmb_senddone_func;
1063	void			*nmb_sendrsrc_func;
1064	void			*nmb_resetdone_func;
1065	ndis_medium		nmb_medium;
1066	uint32_t		nmb_busnum;
1067	uint32_t		nmb_bustye;
1068	uint32_t		nmb_adaptertype;
1069	void			*nmb_deviceobj;
1070	void			*nmb_physdeviceobj;
1071	void			*nmb_nextdeviceobj;
1072	void			*nmb_mapreg;
1073	void			*nmb_callmgraflist;
1074	void			*nmb_miniportthread;
1075	void			*nmb_setinfobuf;
1076	uint16_t		nmb_setinfobuflen;
1077	uint16_t		nmb_maxsendpkts;
1078	ndis_status		nmb_fakestatus;
1079	void			*nmb_lockhandler;
1080	ndis_unicode_string	*nmb_adapterinstancename;
1081	void			*nmb_timerqueue;
1082	uint32_t		nmb_mactoptions;
1083	ndis_request		*nmb_pendingreq;
1084	uint32_t		nmb_maxlongaddrs;
1085	uint32_t		nmb_maxshortaddrs;
1086	uint32_t		nmb_currlookahead;
1087	uint32_t		nmb_maxlookahead;
1088	void			*nmb_interrupt_func;
1089	void			*nmb_disableintr_func;
1090	void			*nmb_enableintr_func;
1091	void			*nmb_sendpkts_func;
1092	void			*nmb_deferredsend_func;
1093	void			*nmb_ethrxindicate_func;
1094	void			*nmb_txrxindicate_func;
1095	void			*nmb_fddirxindicate_func;
1096	void			*nmb_ethrxdone_func;
1097	void			*nmb_txrxdone_func;
1098	void			*nmb_fddirxcond_func;
1099	void			*nmb_status_func;
1100	void			*nmb_statusdone_func;
1101	void			*nmb_tdcond_func;
1102	void			*nmb_querydone_func;
1103	void			*nmb_setdone_func;
1104	void			*nmb_wantxdone_func;
1105	void			*nmb_wanrx_func;
1106	void			*nmb_wanrxdone_func;
1107	/*
1108	 * End of windows-specific portion of miniport block. Everything
1109	 * below is BSD-specific.
1110	 */
1111	struct ifnet		*nmb_ifp;
1112	uint8_t			nmb_dummybuf[128];
1113	ndis_config_parm	nmb_replyparm;
1114	int			nmb_pciidx;
1115	device_t		nmb_dev;
1116	ndis_resource_list	*nmb_rlist;
1117	ndis_status		nmb_getstat;
1118	ndis_status		nmb_setstat;
1119};
1120
1121typedef ndis_status (*ndis_init_handler)(ndis_status *, uint32_t *,
1122		ndis_medium *, uint32_t, ndis_handle, ndis_handle);
1123typedef ndis_status (*ndis_queryinfo_handler)(ndis_handle, ndis_oid,
1124		void *, uint32_t, uint32_t *, uint32_t *);
1125typedef ndis_status (*ndis_setinfo_handler)(ndis_handle, ndis_oid,
1126		void *, uint32_t, uint32_t *, uint32_t *);
1127typedef ndis_status (*ndis_sendsingle_handler)(ndis_handle,
1128		ndis_packet *, uint32_t);
1129typedef ndis_status (*ndis_sendmulti_handler)(ndis_handle,
1130		ndis_packet **, uint32_t);
1131typedef void (*ndis_isr_handler)(uint8_t *, uint8_t *, ndis_handle);
1132typedef void (*ndis_interrupt_handler)(ndis_handle);
1133typedef void (*ndis_reset_handler)(uint8_t *, ndis_handle);
1134typedef void (*ndis_halt_handler)(ndis_handle);
1135typedef void (*ndis_return_handler)(ndis_handle, ndis_packet *);
1136typedef void (*ndis_enable_interrupts_handler)(ndis_handle);
1137typedef void (*ndis_disable_interrupts_handler)(ndis_handle);
1138typedef void (*ndis_shutdown_handler)(void *);
1139typedef void (*ndis_allocdone_handler)(ndis_handle, void *,
1140		ndis_physaddr *, uint32_t, void *);
1141typedef uint8_t (*ndis_checkforhang_handler)(ndis_handle);
1142
1143typedef ndis_status (*driver_entry)(void *, ndis_unicode_string *);
1144
1145extern image_patch_table ndis_functbl[];
1146
1147__BEGIN_DECLS
1148extern int ndis_libinit(void);
1149extern int ndis_libfini(void);
1150extern int ndis_ascii_to_unicode(char *, uint16_t **);
1151extern int ndis_unicode_to_ascii(uint16_t *, int, char **);
1152extern int ndis_load_driver(vm_offset_t, void *);
1153extern int ndis_unload_driver(void *);
1154extern int ndis_mtop(struct mbuf *, ndis_packet **);
1155extern int ndis_ptom(struct mbuf **, ndis_packet *);
1156extern int ndis_get_info(void *, ndis_oid, void *, int *);
1157extern int ndis_set_info(void *, ndis_oid, void *, int *);
1158extern int ndis_get_supported_oids(void *, ndis_oid **, int *);
1159extern int ndis_send_packets(void *, ndis_packet **, int);
1160extern int ndis_send_packet(void *, ndis_packet *);
1161extern int ndis_convert_res(void *);
1162extern int ndis_alloc_amem(void *);
1163extern void ndis_free_packet(ndis_packet *);
1164extern void ndis_free_bufs(ndis_buffer *);
1165extern int ndis_reset_nic(void *);
1166extern int ndis_halt_nic(void *);
1167extern int ndis_shutdown_nic(void *);
1168extern int ndis_init_nic(void *);
1169extern int ndis_isr(void *, int *, int *);
1170extern int ndis_intrhand(void *);
1171extern void ndis_return_packet(void *, void *);
1172extern void ndis_enable_intr(void *);
1173extern void ndis_disable_intr(void *);
1174extern int ndis_init_dma(void *);
1175extern int ndis_destroy_dma(void *);
1176extern int ndis_create_sysctls(void *);
1177extern int ndis_add_sysctl(void *, char *, char *, char *, int);
1178extern int ndis_flush_sysctls(void *);
1179__END_DECLS
1180
1181#endif /* _NDIS_VAR_H_ */
1182