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