The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/compat/ndis/ndis_var.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2003
    3  *      Bill Paul <wpaul@windriver.com>.  All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  * 3. All advertising materials mentioning features or use of this software
   14  *    must display the following acknowledgement:
   15  *      This product includes software developed by Bill Paul.
   16  * 4. Neither the name of the author nor the names of any co-contributors
   17  *    may be used to endorse or promote products derived from this software
   18  *    without specific prior written permission.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
   21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   23  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
   24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   30  * THE POSSIBILITY OF SUCH DAMAGE.
   31  *
   32  * $FreeBSD$
   33  */
   34 
   35 #ifndef _NDIS_VAR_H_
   36 #define _NDIS_VAR_H_
   37 
   38 /* Forward declarations */
   39 struct ndis_miniport_block;
   40 struct ndis_mdriver_block;
   41 typedef struct ndis_miniport_block ndis_miniport_block;
   42 typedef struct ndis_mdriver_block ndis_mdriver_block;
   43 
   44 /* Base types */
   45 typedef uint32_t ndis_status;
   46 typedef void *ndis_handle;
   47 typedef uint32_t ndis_oid;
   48 typedef uint32_t ndis_error_code;
   49 typedef register_t ndis_kspin_lock;
   50 typedef uint8_t ndis_kirql;
   51 
   52 /*
   53  * NDIS status codes (there are lots of them). The ones that
   54  * don't seem to fit the pattern are actually mapped to generic
   55  * NT status codes.
   56  */
   57 
   58 #define NDIS_STATUS_SUCCESS             0
   59 #define NDIS_STATUS_PENDING             0x00000103
   60 #define NDIS_STATUS_NOT_RECOGNIZED      0x00010001
   61 #define NDIS_STATUS_NOT_COPIED          0x00010002
   62 #define NDIS_STATUS_NOT_ACCEPTED        0x00010003
   63 #define NDIS_STATUS_CALL_ACTIVE         0x00010007
   64 #define NDIS_STATUS_ONLINE              0x40010003
   65 #define NDIS_STATUS_RESET_START         0x40010004
   66 #define NDIS_STATUS_RESET_END           0x40010005
   67 #define NDIS_STATUS_RING_STATUS         0x40010006
   68 #define NDIS_STATUS_CLOSED              0x40010007
   69 #define NDIS_STATUS_WAN_LINE_UP         0x40010008
   70 #define NDIS_STATUS_WAN_LINE_DOWN       0x40010009
   71 #define NDIS_STATUS_WAN_FRAGMENT        0x4001000A
   72 #define NDIS_STATUS_MEDIA_CONNECT       0x4001000B
   73 #define NDIS_STATUS_MEDIA_DISCONNECT    0x4001000C
   74 #define NDIS_STATUS_HARDWARE_LINE_UP    0x4001000D
   75 #define NDIS_STATUS_HARDWARE_LINE_DOWN  0x4001000E
   76 #define NDIS_STATUS_INTERFACE_UP        0x4001000F
   77 #define NDIS_STATUS_INTERFACE_DOWN      0x40010010
   78 #define NDIS_STATUS_MEDIA_BUSY          0x40010011
   79 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION   0x40010012
   80 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
   81 #define NDIS_STATUS_LINK_SPEED_CHANGE   0x40010013
   82 #define NDIS_STATUS_WAN_GET_STATS       0x40010014
   83 #define NDIS_STATUS_WAN_CO_FRAGMENT     0x40010015
   84 #define NDIS_STATUS_WAN_CO_LINKPARAMS   0x40010016
   85 #define NDIS_STATUS_NOT_RESETTABLE      0x80010001
   86 #define NDIS_STATUS_SOFT_ERRORS         0x80010003
   87 #define NDIS_STATUS_HARD_ERRORS         0x80010004
   88 #define NDIS_STATUS_BUFFER_OVERFLOW     0x80000005
   89 #define NDIS_STATUS_FAILURE             0xC0000001
   90 #define NDIS_STATUS_RESOURCES           0xC000009A
   91 #define NDIS_STATUS_CLOSING             0xC0010002
   92 #define NDIS_STATUS_BAD_VERSION         0xC0010004
   93 #define NDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005
   94 #define NDIS_STATUS_ADAPTER_NOT_FOUND   0xC0010006
   95 #define NDIS_STATUS_OPEN_FAILED         0xC0010007
   96 #define NDIS_STATUS_DEVICE_FAILED       0xC0010008
   97 #define NDIS_STATUS_MULTICAST_FULL      0xC0010009
   98 #define NDIS_STATUS_MULTICAST_EXISTS    0xC001000A
   99 #define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
  100 #define NDIS_STATUS_REQUEST_ABORTED     0xC001000C
  101 #define NDIS_STATUS_RESET_IN_PROGRESS   0xC001000D
  102 #define NDIS_STATUS_CLOSING_INDICATING  0xC001000E
  103 #define NDIS_STATUS_NOT_SUPPORTED       0xC00000BB
  104 #define NDIS_STATUS_INVALID_PACKET      0xC001000F
  105 #define NDIS_STATUS_OPEN_LIST_FULL      0xC0010010
  106 #define NDIS_STATUS_ADAPTER_NOT_READY   0xC0010011
  107 #define NDIS_STATUS_ADAPTER_NOT_OPEN    0xC0010012
  108 #define NDIS_STATUS_NOT_INDICATING      0xC0010013
  109 #define NDIS_STATUS_INVALID_LENGTH      0xC0010014
  110 #define NDIS_STATUS_INVALID_DATA        0xC0010015
  111 #define NDIS_STATUS_BUFFER_TOO_SHORT    0xC0010016
  112 #define NDIS_STATUS_INVALID_OID         0xC0010017
  113 #define NDIS_STATUS_ADAPTER_REMOVED     0xC0010018
  114 #define NDIS_STATUS_UNSUPPORTED_MEDIA   0xC0010019
  115 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE        0xC001001A
  116 #define NDIS_STATUS_FILE_NOT_FOUND      0xC001001B
  117 #define NDIS_STATUS_ERROR_READING_FILE  0xC001001C
  118 #define NDIS_STATUS_ALREADY_MAPPED      0xC001001D
  119 #define NDIS_STATUS_RESOURCE_CONFLICT   0xC001001E
  120 #define NDIS_STATUS_NO_CABLE            0xC001001F
  121 #define NDIS_STATUS_INVALID_SAP         0xC0010020
  122 #define NDIS_STATUS_SAP_IN_USE          0xC0010021
  123 #define NDIS_STATUS_INVALID_ADDRESS     0xC0010022
  124 #define NDIS_STATUS_VC_NOT_ACTIVATED    0xC0010023
  125 #define NDIS_STATUS_DEST_OUT_OF_ORDER   0xC0010024
  126 #define NDIS_STATUS_VC_NOT_AVAILABLE    0xC0010025
  127 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE      0xC0010026
  128 #define NDIS_STATUS_INCOMPATABLE_QOS    0xC0010027
  129 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED      0xC0010028
  130 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION     0xC0010029
  131 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR       0xC0011000
  132 #define NDIS_STATUS_INVALID_DEVICE_REQUEST      0xC0000010
  133 #define NDIS_STATUS_NETWORK_UNREACHABLE         0xC000023C
  134 
  135 /*
  136  * NDIS event codes. They are usually reported to NdisWriteErrorLogEntry().
  137  */
  138 
  139 #define EVENT_NDIS_RESOURCE_CONFLICT    0xC0001388
  140 #define EVENT_NDIS_OUT_OF_RESOURCE      0xC0001389
  141 #define EVENT_NDIS_HARDWARE_FAILURE     0xC000138A
  142 #define EVENT_NDIS_ADAPTER_NOT_FOUND    0xC000138B
  143 #define EVENT_NDIS_INTERRUPT_CONNECT    0xC000138C
  144 #define EVENT_NDIS_DRIVER_FAILURE       0xC000138D
  145 #define EVENT_NDIS_BAD_VERSION          0xC000138E
  146 #define EVENT_NDIS_TIMEOUT              0x8000138F
  147 #define EVENT_NDIS_NETWORK_ADDRESS      0xC0001390
  148 #define EVENT_NDIS_UNSUPPORTED_CONFIGURATION    0xC0001391
  149 #define EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER   0xC0001392
  150 #define EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER      0xC0001393
  151 #define EVENT_NDIS_BAD_IO_BASE_ADDRESS  0xC0001394
  152 #define EVENT_NDIS_RECEIVE_SPACE_SMALL  0x40001395
  153 #define EVENT_NDIS_ADAPTER_DISABLED     0x80001396
  154 #define EVENT_NDIS_IO_PORT_CONFLICT     0x80001397
  155 #define EVENT_NDIS_PORT_OR_DMA_CONFLICT 0x80001398
  156 #define EVENT_NDIS_MEMORY_CONFLICT      0x80001399
  157 #define EVENT_NDIS_INTERRUPT_CONFLICT   0x8000139A
  158 #define EVENT_NDIS_DMA_CONFLICT         0x8000139B
  159 #define EVENT_NDIS_INVALID_DOWNLOAD_FILE_ERROR  0xC000139C
  160 #define EVENT_NDIS_MAXRECEIVES_ERROR    0x8000139D
  161 #define EVENT_NDIS_MAXTRANSMITS_ERROR   0x8000139E
  162 #define EVENT_NDIS_MAXFRAMESIZE_ERROR   0x8000139F
  163 #define EVENT_NDIS_MAXINTERNALBUFS_ERROR        0x800013A0
  164 #define EVENT_NDIS_MAXMULTICAST_ERROR   0x800013A1
  165 #define EVENT_NDIS_PRODUCTID_ERROR      0x800013A2
  166 #define EVENT_NDIS_LOBE_FAILUE_ERROR    0x800013A3
  167 #define EVENT_NDIS_SIGNAL_LOSS_ERROR    0x800013A4
  168 #define EVENT_NDIS_REMOVE_RECEIVED_ERROR        0x800013A5
  169 #define EVENT_NDIS_TOKEN_RING_CORRECTION        0x400013A6
  170 #define EVENT_NDIS_ADAPTER_CHECK_ERROR  0xC00013A7
  171 #define EVENT_NDIS_RESET_FAILURE_ERROR  0x800013A8
  172 #define EVENT_NDIS_CABLE_DISCONNECTED_ERROR     0x800013A9
  173 #define EVENT_NDIS_RESET_FAILURE_CORRECTION     0x800013AA
  174 
  175 /*
  176  * NDIS OIDs used by the queryinfo/setinfo routines.
  177  * Some are required by all NDIS drivers, some are specific to
  178  * a particular type of device, and some are purely optional.
  179  * Unfortunately, one of the purely optional OIDs is the one
  180  * that lets us set the MAC address of the device.
  181  */
  182 
  183 /* Required OIDs */
  184 #define OID_GEN_SUPPORTED_LIST                  0x00010101
  185 #define OID_GEN_HARDWARE_STATUS                 0x00010102
  186 #define OID_GEN_MEDIA_SUPPORTED                 0x00010103
  187 #define OID_GEN_MEDIA_IN_USE                    0x00010104
  188 #define OID_GEN_MAXIMUM_LOOKAHEAD               0x00010105
  189 #define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106
  190 #define OID_GEN_LINK_SPEED                      0x00010107
  191 #define OID_GEN_TRANSMIT_BUFFER_SPACE           0x00010108
  192 #define OID_GEN_RECEIVE_BUFFER_SPACE            0x00010109
  193 #define OID_GEN_TRANSMIT_BLOCK_SIZE             0x0001010A
  194 #define OID_GEN_RECEIVE_BLOCK_SIZE              0x0001010B
  195 #define OID_GEN_VENDOR_ID                       0x0001010C
  196 #define OID_GEN_VENDOR_DESCRIPTION              0x0001010D
  197 #define OID_GEN_CURRENT_PACKET_FILTER           0x0001010E
  198 #define OID_GEN_CURRENT_LOOKAHEAD               0x0001010F
  199 #define OID_GEN_DRIVER_VERSION                  0x00010110
  200 #define OID_GEN_MAXIMUM_TOTAL_SIZE              0x00010111
  201 #define OID_GEN_PROTOCOL_OPTIONS                0x00010112
  202 #define OID_GEN_MAC_OPTIONS                     0x00010113
  203 #define OID_GEN_MEDIA_CONNECT_STATUS            0x00010114
  204 #define OID_GEN_MAXIMUM_SEND_PACKETS            0x00010115
  205 #define OID_GEN_VENDOR_DRIVER_VERSION           0x00010116
  206 #define OID_GEN_SUPPORTED_GUIDS                 0x00010117
  207 #define OID_GEN_NETWORK_LAYER_ADDRESSES         0x00010118      /* Set only */
  208 #define OID_GEN_TRANSPORT_HEADER_OFFSET         0x00010119      /* Set only */
  209 #define OID_GEN_MACHINE_NAME                    0x0001021A
  210 #define OID_GEN_RNDIS_CONFIG_PARAMETER          0x0001021B      /* Set only */
  211 #define OID_GEN_VLAN_ID                         0x0001021C
  212 
  213 /* Optional OIDs. */
  214 #define OID_GEN_MEDIA_CAPABILITIES              0x00010201
  215 #define OID_GEN_PHYSICAL_MEDIUM                 0x00010202
  216 
  217 /* Required statistics OIDs. */
  218 #define OID_GEN_XMIT_OK                         0x00020101
  219 #define OID_GEN_RCV_OK                          0x00020102
  220 #define OID_GEN_XMIT_ERROR                      0x00020103
  221 #define OID_GEN_RCV_ERROR                       0x00020104
  222 #define OID_GEN_RCV_NO_BUFFER                   0x00020105
  223 
  224 /* Optional OID statistics */
  225 #define OID_GEN_DIRECTED_BYTES_XMIT             0x00020201
  226 #define OID_GEN_DIRECTED_FRAMES_XMIT            0x00020202
  227 #define OID_GEN_MULTICAST_BYTES_XMIT            0x00020203
  228 #define OID_GEN_MULTICAST_FRAMES_XMIT           0x00020204
  229 #define OID_GEN_BROADCAST_BYTES_XMIT            0x00020205
  230 #define OID_GEN_BROADCAST_FRAMES_XMIT           0x00020206
  231 #define OID_GEN_DIRECTED_BYTES_RCV              0x00020207
  232 #define OID_GEN_DIRECTED_FRAMES_RCV             0x00020208
  233 #define OID_GEN_MULTICAST_BYTES_RCV             0x00020209
  234 #define OID_GEN_MULTICAST_FRAMES_RCV            0x0002020A
  235 #define OID_GEN_BROADCAST_BYTES_RCV             0x0002020B
  236 #define OID_GEN_BROADCAST_FRAMES_RCV            0x0002020C
  237 #define OID_GEN_RCV_CRC_ERROR                   0x0002020D
  238 #define OID_GEN_TRANSMIT_QUEUE_LENGTH           0x0002020E
  239 #define OID_GEN_GET_TIME_CAPS                   0x0002020F
  240 #define OID_GEN_GET_NETCARD_TIME                0x00020210
  241 #define OID_GEN_NETCARD_LOAD                    0x00020211
  242 #define OID_GEN_DEVICE_PROFILE                  0x00020212
  243 
  244 /* 802.3 (ethernet) OIDs */
  245 #define OID_802_3_PERMANENT_ADDRESS             0x01010101
  246 #define OID_802_3_CURRENT_ADDRESS               0x01010102
  247 #define OID_802_3_MULTICAST_LIST                0x01010103
  248 #define OID_802_3_MAXIMUM_LIST_SIZE             0x01010104
  249 #define OID_802_3_MAC_OPTIONS                   0x01010105
  250 #define NDIS_802_3_MAC_OPTION_PRIORITY          0x00000001
  251 #define OID_802_3_RCV_ERROR_ALIGNMENT           0x01020101
  252 #define OID_802_3_XMIT_ONE_COLLISION            0x01020102
  253 #define OID_802_3_XMIT_MORE_COLLISIONS          0x01020103
  254 #define OID_802_3_XMIT_DEFERRED                 0x01020201
  255 #define OID_802_3_XMIT_MAX_COLLISIONS           0x01020202
  256 #define OID_802_3_RCV_OVERRUN                   0x01020203
  257 #define OID_802_3_XMIT_UNDERRUN                 0x01020204
  258 #define OID_802_3_XMIT_HEARTBEAT_FAILURE        0x01020205
  259 #define OID_802_3_XMIT_TIMES_CRS_LOST           0x01020206
  260 #define OID_802_3_XMIT_LATE_COLLISIONS          0x01020207
  261 
  262 /* PnP and power management OIDs */
  263 #define OID_PNP_CAPABILITIES                    0xFD010100
  264 #define OID_PNP_SET_POWER                       0xFD010101
  265 #define OID_PNP_QUERY_POWER                     0xFD010102
  266 #define OID_PNP_ADD_WAKE_UP_PATTERN             0xFD010103
  267 #define OID_PNP_REMOVE_WAKE_UP_PATTERN          0xFD010104
  268 #define OID_PNP_WAKE_UP_PATTERN_LIST            0xFD010105
  269 #define OID_PNP_ENABLE_WAKE_UP                  0xFD010106
  270 
  271 /*
  272  * These are the possible power states for
  273  * OID_PNP_SET_POWER and OID_PNP_QUERY_POWER.
  274  */
  275 #define NDIS_POWERSTATE_UNSPEC                  0
  276 #define NDIS_POWERSTATE_D0                      1
  277 #define NDIS_POWERSTATE_D1                      2
  278 #define NDIS_POWERSTATE_D2                      3
  279 #define NDIS_POWERSTATE_D3                      4
  280 
  281 /*
  282  * These are used with the MiniportPnpEventNotify() method.
  283  */
  284 
  285 #define NDIS_POWERPROFILE_BATTERY               0
  286 #define NDIS_POWERPROFILE_ACONLINE              1
  287 
  288 #define NDIS_PNP_EVENT_QUERY_REMOVED            0
  289 #define NDIS_PNP_EVENT_REMOVED                  1
  290 #define NDIS_PNP_EVENT_SURPRISE_REMOVED         2
  291 #define NDIS_PNP_EVENT_QUERY_STOPPED            3
  292 #define NDIS_PNP_EVENT_STOPPED                  4
  293 #define NDIS_PNP_EVENT_PROFILECHANGED           5
  294 
  295 
  296 /* PnP/PM Statistics (Optional). */
  297 #define OID_PNP_WAKE_UP_OK                      0xFD020200
  298 #define OID_PNP_WAKE_UP_ERROR                   0xFD020201
  299 
  300 /* The following bits are defined for OID_PNP_ENABLE_WAKE_UP */
  301 #define NDIS_PNP_WAKE_UP_MAGIC_PACKET           0x00000001
  302 #define NDIS_PNP_WAKE_UP_PATTERN_MATCH          0x00000002
  303 #define NDIS_PNP_WAKE_UP_LINK_CHANGE            0x00000004
  304 
  305 /* 802.11 OIDs */
  306 #define OID_802_11_BSSID                        0x0D010101
  307 #define OID_802_11_SSID                         0x0D010102
  308 #define OID_802_11_NETWORK_TYPES_SUPPORTED      0x0D010203
  309 #define OID_802_11_NETWORK_TYPE_IN_USE          0x0D010204
  310 #define OID_802_11_TX_POWER_LEVEL               0x0D010205
  311 #define OID_802_11_RSSI                         0x0D010206
  312 #define OID_802_11_RSSI_TRIGGER                 0x0D010207
  313 #define OID_802_11_INFRASTRUCTURE_MODE          0x0D010108
  314 #define OID_802_11_FRAGMENTATION_THRESHOLD      0x0D010209
  315 #define OID_802_11_RTS_THRESHOLD                0x0D01020A
  316 #define OID_802_11_NUMBER_OF_ANTENNAS           0x0D01020B
  317 #define OID_802_11_RX_ANTENNA_SELECTED          0x0D01020C
  318 #define OID_802_11_TX_ANTENNA_SELECTED          0x0D01020D
  319 #define OID_802_11_SUPPORTED_RATES              0x0D01020E
  320 #define OID_802_11_DESIRED_RATES                0x0D010210
  321 #define OID_802_11_CONFIGURATION                0x0D010211
  322 #define OID_802_11_STATISTICS                   0x0D020212
  323 #define OID_802_11_ADD_WEP                      0x0D010113
  324 #define OID_802_11_REMOVE_WEP                   0x0D010114
  325 #define OID_802_11_DISASSOCIATE                 0x0D010115
  326 #define OID_802_11_POWER_MODE                   0x0D010216
  327 #define OID_802_11_BSSID_LIST                   0x0D010217
  328 #define OID_802_11_AUTHENTICATION_MODE          0x0D010118
  329 #define OID_802_11_PRIVACY_FILTER               0x0D010119
  330 #define OID_802_11_BSSID_LIST_SCAN              0x0D01011A
  331 #define OID_802_11_WEP_STATUS                   0x0D01011B
  332 #define OID_802_11_ENCRYPTION_STATUS            OID_802_11_WEP_STATUS
  333 #define OID_802_11_RELOAD_DEFAULTS              0x0D01011C
  334 #define OID_802_11_ADD_KEY                      0x0D01011D
  335 #define OID_802_11_REMOVE_KEY                   0x0D01011E
  336 #define OID_802_11_ASSOCIATION_INFORMATION      0x0D01011F
  337 #define OID_802_11_TEST                         0x0D010120
  338 #define OID_802_11_CAPABILITY                   0x0D010122
  339 #define OID_802_11_PMKID                        0x0D010123
  340 
  341 /* structures/definitions for 802.11 */
  342 #define NDIS_80211_NETTYPE_11FH         0x00000000
  343 #define NDIS_80211_NETTYPE_11DS         0x00000001
  344 #define NDIS_80211_NETTYPE_11OFDM5      0x00000002
  345 #define NDIS_80211_NETTYPE_11OFDM24     0x00000003
  346 #define NDIS_80211_NETTYPE_AUTO         0x00000004
  347 
  348 struct ndis_80211_nettype_list {
  349         uint32_t                ntl_items;
  350         uint32_t                ntl_type[1];
  351 };
  352 
  353 #define NDIS_80211_POWERMODE_CAM        0x00000000
  354 #define NDIS_80211_POWERMODE_MAX_PSP    0x00000001
  355 #define NDIS_80211_POWERMODE_FAST_PSP   0x00000002
  356 
  357 typedef uint32_t ndis_80211_power;      /* Power in milliwatts */
  358 typedef uint32_t ndis_80211_rssi;       /* Signal strength in dBm */
  359 
  360 struct ndis_80211_config_fh {
  361         uint32_t                ncf_length;
  362         uint32_t                ncf_hoppatterh;
  363         uint32_t                ncf_hopset;
  364         uint32_t                ncf_dwelltime;
  365 };
  366 
  367 typedef struct ndis_80211_config_fh ndis_80211_config_fh;
  368 
  369 struct ndis_80211_config {
  370         uint32_t                nc_length;
  371         uint32_t                nc_beaconperiod;
  372         uint32_t                nc_atimwin;
  373         uint32_t                nc_dsconfig;
  374         ndis_80211_config_fh    nc_fhconfig;
  375 };
  376 
  377 typedef struct ndis_80211_config ndis_80211_config;
  378 
  379 struct ndis_80211_stats {
  380         uint32_t                ns_length;
  381         uint64_t                ns_txfragcnt;
  382         uint64_t                ns_txmcastcnt;
  383         uint64_t                ns_failedcnt;
  384         uint64_t                ns_retrycnt;
  385         uint64_t                ns_multiretrycnt;
  386         uint64_t                ns_rtssuccesscnt;
  387         uint64_t                ns_rtsfailcnt;
  388         uint64_t                ns_ackfailcnt;
  389         uint64_t                ns_dupeframecnt;
  390         uint64_t                ns_rxfragcnt;
  391         uint64_t                ns_rxmcastcnt;
  392         uint64_t                ns_fcserrcnt;
  393 };
  394 
  395 typedef struct ndis_80211_stats ndis_80211_stats;
  396 
  397 typedef uint32_t ndis_80211_key_idx;
  398 
  399 struct ndis_80211_wep {
  400         uint32_t                nw_length;
  401         uint32_t                nw_keyidx;
  402         uint32_t                nw_keylen;
  403         uint8_t                 nw_keydata[256];
  404 };
  405 
  406 typedef struct ndis_80211_wep ndis_80211_wep;
  407 
  408 #define NDIS_80211_WEPKEY_TX            0x80000000
  409 #define NDIS_80211_WEPKEY_PERCLIENT     0x40000000
  410 
  411 #define NDIS_80211_NET_INFRA_IBSS       0x00000000
  412 #define NDIS_80211_NET_INFRA_BSS        0x00000001
  413 #define NDIS_80211_NET_INFRA_AUTO       0x00000002
  414 
  415 #define NDIS_80211_AUTHMODE_OPEN        0x00000000
  416 #define NDIS_80211_AUTHMODE_SHARED      0x00000001
  417 #define NDIS_80211_AUTHMODE_AUTO        0x00000002
  418 #define NDIS_80211_AUTHMODE_WPA         0x00000003
  419 #define NDIS_80211_AUTHMODE_WPAPSK      0x00000004
  420 #define NDIS_80211_AUTHMODE_WPANONE     0x00000005
  421 #define NDIS_80211_AUTHMODE_WPA2        0x00000006
  422 #define NDIS_80211_AUTHMODE_WPA2PSK     0x00000007
  423 
  424 typedef uint8_t ndis_80211_rates[8];
  425 typedef uint8_t ndis_80211_rates_ex[16];
  426 typedef uint8_t ndis_80211_macaddr[6];
  427 
  428 struct ndis_80211_ssid {
  429         uint32_t                ns_ssidlen;
  430         uint8_t                 ns_ssid[32];
  431 };
  432 
  433 typedef struct ndis_80211_ssid ndis_80211_ssid;
  434 
  435 struct ndis_wlan_bssid {
  436         uint32_t                nwb_length;
  437         ndis_80211_macaddr      nwb_macaddr;
  438         uint8_t                 nwb_rsvd[2];
  439         ndis_80211_ssid         nwb_ssid;
  440         uint32_t                nwb_privacy;
  441         ndis_80211_rssi         nwb_rssi;
  442         uint32_t                nwb_nettype;
  443         ndis_80211_config       nwb_config;
  444         uint32_t                nwb_netinfra;
  445         ndis_80211_rates        nwb_supportedrates;
  446 };
  447 
  448 typedef struct ndis_wlan_bssid ndis_wlan_bssid;
  449 
  450 struct ndis_80211_bssid_list {
  451         uint32_t                nbl_items;
  452         ndis_wlan_bssid         nbl_bssid[1];
  453 };
  454 
  455 typedef struct ndis_80211_bssid_list ndis_80211_bssid_list;
  456 
  457 struct ndis_wlan_bssid_ex {
  458         uint32_t                nwbx_len;
  459         ndis_80211_macaddr      nwbx_macaddr;
  460         uint8_t                 nwbx_rsvd[2];
  461         ndis_80211_ssid         nwbx_ssid;
  462         uint32_t                nwbx_privacy;
  463         ndis_80211_rssi         nwbx_rssi;
  464         uint32_t                nwbx_nettype;
  465         ndis_80211_config       nwbx_config;
  466         uint32_t                nwbx_netinfra;
  467         ndis_80211_rates_ex     nwbx_supportedrates;
  468         uint32_t                nwbx_ielen;
  469         uint8_t                 nwbx_ies[1];
  470 };
  471 
  472 typedef struct ndis_wlan_bssid_ex ndis_wlan_bssid_ex;
  473 
  474 struct ndis_80211_bssid_list_ex {
  475         uint32_t                nblx_items;
  476         ndis_wlan_bssid_ex      nblx_bssid[1];
  477 };
  478 
  479 typedef struct ndis_80211_bssid_list_ex ndis_80211_bssid_list_ex;
  480 
  481 struct ndis_80211_fixed_ies {
  482         uint8_t                 nfi_tstamp[8];
  483         uint16_t                nfi_beaconint;
  484         uint16_t                nfi_caps;
  485 };
  486 
  487 struct ndis_80211_variable_ies {
  488         uint8_t                 nvi_elemid;
  489         uint8_t                 nvi_len;
  490         uint8_t                 nvi_data[1];
  491 };
  492 
  493 typedef uint32_t ndis_80211_fragthresh;
  494 typedef uint32_t ndis_80211_rtsthresh;
  495 typedef uint32_t ndis_80211_antenna;
  496 
  497 #define NDIS_80211_PRIVFILT_ACCEPTALL   0x00000000
  498 #define NDIS_80211_PRIVFILT_8021XWEP    0x00000001
  499 
  500 #define NDIS_80211_WEPSTAT_ENABLED      0x00000000
  501 #define NDIS_80211_WEPSTAT_ENC1ENABLED  NDIS_80211_WEPSTAT_ENABLED
  502 #define NDIS_80211_WEPSTAT_DISABLED     0x00000001
  503 #define NDIS_80211_WEPSTAT_ENCDISABLED  NDIS_80211_WEPSTAT_DISABLED
  504 #define NDIS_80211_WEPSTAT_KEYABSENT    0x00000002
  505 #define NDIS_80211_WEPSTAT_ENC1KEYABSENT        NDIS_80211_WEPSTAT_KEYABSENT
  506 #define NDIS_80211_WEPSTAT_NOTSUPPORTED 0x00000003
  507 #define NDIS_80211_WEPSTAT_ENCNOTSUPPORTED      NDIS_80211_WEPSTAT_NOTSUPPORTED
  508 #define NDIS_80211_WEPSTAT_ENC2ENABLED  0x00000004
  509 #define NDIS_80211_WEPSTAT_ENC2KEYABSENT        0x00000005
  510 #define NDIS_80211_WEPSTAT_ENC3ENABLED  0x00000006
  511 #define NDIS_80211_WEPSTAT_ENC3KEYABSENT        0x00000007
  512 
  513 #define NDIS_80211_RELOADDEFAULT_WEP    0x00000000
  514 
  515 #define NDIS_80211_STATUSTYPE_AUTH      0x00000000
  516 #define NDIS_80211_STATUSTYPE_PMKIDLIST 0x00000001
  517 
  518 struct ndis_80211_status_indication {
  519         uint32_t                nsi_type;
  520 };
  521 
  522 typedef struct ndis_80211_status_indication ndis_80211_status_indication;
  523 
  524 #define NDIS_802_11_AUTH_REQUEST_REAUTH         0x01
  525 #define NDIS_802_11_AUTH_REQUEST_KEYUPDATE      0x02
  526 #define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06
  527 #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR    0x0E
  528 
  529 struct ndis_80211_auth_request {
  530         uint32_t                nar_len;
  531         ndis_80211_macaddr      nar_bssid;
  532         uint32_t                nar_flags;
  533 };
  534 
  535 typedef struct ndis_80211_auth_request ndis_80211_auth_request;
  536 
  537 struct ndis_80211_key {
  538         uint32_t                nk_len;
  539         uint32_t                nk_keyidx;
  540         uint32_t                nk_keylen;
  541         ndis_80211_macaddr      nk_bssid;
  542         uint8_t                 nk_pad[6];
  543         uint64_t                nk_keyrsc;
  544         uint8_t                 nk_keydata[32];
  545 };
  546 
  547 typedef struct ndis_80211_key ndis_80211_key;
  548 
  549 struct ndis_80211_remove_key {
  550         uint32_t                nk_len;
  551         uint32_t                nk_keyidx;
  552         ndis_80211_macaddr      nk_bssid;
  553 };
  554 
  555 typedef struct ndis_80211_remove_key ndis_80211_remove_key;
  556 
  557 #define NDIS_80211_AI_REQFI_CAPABILITIES        0x00000001
  558 #define NDIS_80211_AI_REQFI_LISTENINTERVAL      0x00000002
  559 #define NDIS_80211_AI_REQFI_CURRENTAPADDRESS    0x00000004
  560 
  561 #define NDIS_80211_AI_RESFI_CAPABILITIES        0x00000001
  562 #define NDIS_80211_AI_RESFI_STATUSCODE          0x00000002
  563 #define NDIS_80211_AI_RESFI_ASSOCIATIONID       0x00000004
  564 
  565 struct ndis_80211_ai_reqfi {
  566         uint16_t                naq_caps;
  567         uint16_t                naq_listentint;
  568         ndis_80211_macaddr      naq_currentapaddr;
  569 };
  570 
  571 typedef struct ndis_80211_ai_reqfi ndis_80211_ai_reqfi;
  572 
  573 struct ndis_80211_ai_resfi {
  574         uint16_t                nas_caps;
  575         uint16_t                nas_statuscode;
  576         uint16_t                nas_associd;
  577 };
  578 
  579 typedef struct ndis_80211_ai_resfi ndis_80211_ai_resfi;
  580 
  581 struct ndis_80211_assoc_info {
  582         uint32_t                nai_len;
  583         uint16_t                nai_avail_req_fixed_ies;
  584         ndis_80211_ai_reqfi     nai_req_fixed_ies;
  585         uint32_t                nai_req_ielen;
  586         uint32_t                nai_offset_req_ies;
  587         uint16_t                nai_avail_resp_fixed_ies;
  588         ndis_80211_ai_resfi     nai_resp_fixed_iex;
  589         uint32_t                nai_resp_ielen;
  590         uint32_t                nai_offset_resp_ies;
  591 };
  592 
  593 typedef struct ndis_80211_assoc_info ndis_80211_assoc_info;
  594 
  595 struct ndis_80211_auth_event {
  596         ndis_80211_status_indication    nae_status;
  597         ndis_80211_auth_request         nae_request[1];
  598 };
  599 
  600 typedef struct ndis_80211_auth_event ndis_80211_auth_event;
  601 
  602 struct ndis_80211_test {
  603         uint32_t                nt_len;
  604         uint32_t                nt_type;
  605         union {
  606                 ndis_80211_auth_event   nt_authevent;
  607                 uint32_t                nt_rssitrigger;
  608         } u;
  609 };
  610 
  611 typedef struct ndis_80211_test ndis_80211_test;
  612 
  613 struct ndis_80211_auth_encrypt {
  614         uint32_t                ne_authmode;
  615         uint32_t                ne_cryptstat;
  616 };
  617 
  618 typedef struct ndis_80211_auth_encrypt ndis_80211_auth_encrypt;
  619 
  620 struct ndis_80211_caps {
  621         uint32_t                nc_len;
  622         uint32_t                nc_ver;
  623         uint32_t                nc_numpmkids;
  624         ndis_80211_auth_encrypt nc_authencs[1];
  625 };
  626 
  627 typedef struct ndis_80211_caps ndis_80211_caps;
  628 
  629 struct ndis_80211_bssidinfo {
  630         ndis_80211_macaddr      nb_bssid;
  631         uint8_t                 nb_pmkid[16];
  632 };
  633 
  634 typedef struct ndis_80211_bssidinfo ndis_80211_bssidinfo;
  635 
  636 struct ndis_80211_pmkid {
  637         uint32_t                np_len;
  638         uint32_t                np_bssidcnt;
  639         ndis_80211_bssidinfo    np_bssidinfo[1];
  640 };
  641 
  642 typedef struct ndis_80211_pmkid ndis_80211_pmkid;
  643 
  644 struct ndis_80211_pmkid_cand {
  645         ndis_80211_macaddr      npc_bssid;
  646         uint32_t                npc_flags;
  647 };
  648 
  649 typedef struct ndis_80211_pmkid_cand ndis_80211_pmkid_cand;
  650 
  651 #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED (0x01)
  652 
  653 struct ndis_80211_pmkid_candidate_list {
  654         uint32_t                npcl_version;
  655         uint32_t                npcl_numcandidates;
  656         ndis_80211_pmkid_cand   npcl_candidatelist[1];
  657 };
  658 
  659 typedef struct ndis_80211_pmkid_candidate_list ndis_80211_pmkid_candidate_list;
  660 
  661 struct ndis_80211_enc_indication {
  662         uint32_t                nei_statustype;
  663         ndis_80211_pmkid_candidate_list nei_pmkidlist;
  664 };
  665 
  666 typedef struct ndis_80211_enc_indication ndis_80211_enc_indication;
  667 
  668 /* TCP OIDs. */
  669 
  670 #define OID_TCP_TASK_OFFLOAD                    0xFC010201
  671 #define OID_TCP_TASK_IPSEC_ADD_SA               0xFC010202
  672 #define OID_TCP_TASK_IPSEC_DELETE_SA            0xFC010203
  673 #define OID_TCP_SAN_SUPPORT                     0xFC010204
  674 
  675 
  676 #define NDIS_TASK_OFFLOAD_VERSION 1
  677 
  678 #define NDIS_TASK_TCPIP_CSUM                    0x00000000
  679 #define NDIS_TASK_IPSEC                         0x00000001
  680 #define NDIS_TASK_TCP_LARGESEND                 0x00000002
  681 
  682 #define NDIS_ENCAP_UNSPEC                       0x00000000
  683 #define NDIS_ENCAP_NULL                         0x00000001
  684 #define NDIS_ENCAP_IEEE802_3                    0x00000002
  685 #define NDIS_ENCAP_IEEE802_5                    0x00000003
  686 #define NDIS_ENCAP_SNAP_ROUTED                  0x00000004
  687 #define NDIS_ENCAP_SNAP_BRIDGED                 0x00000005
  688 
  689 #define NDIS_ENCAPFLAG_FIXEDHDRLEN              0x00000001
  690 
  691 struct ndis_encap_fmt {
  692         uint32_t                nef_encap;
  693         uint32_t                nef_flags;
  694         uint32_t                nef_encaphdrlen;
  695 };
  696 
  697 typedef struct ndis_encap_fmt ndis_encap_fmt;
  698 
  699 struct ndis_task_offload_hdr {
  700         uint32_t                ntoh_vers;
  701         uint32_t                ntoh_len;
  702         uint32_t                ntoh_rsvd;
  703         uint32_t                ntoh_offset_firsttask;
  704         ndis_encap_fmt          ntoh_encapfmt;
  705 };
  706 
  707 typedef struct ndis_task_offload_hdr ndis_task_offload_hdr;
  708 
  709 struct ndis_task_offload {
  710         uint32_t                nto_vers;
  711         uint32_t                nto_len;
  712         uint32_t                nto_task;
  713         uint32_t                nto_offset_nexttask;
  714         uint32_t                nto_taskbuflen;
  715         uint8_t                 nto_taskbuf[1];
  716 };
  717 
  718 typedef struct ndis_task_offload ndis_task_offload;
  719 
  720 #define NDIS_TCPSUM_FLAGS_IP_OPTS       0x00000001
  721 #define NDIS_TCPSUM_FLAGS_TCP_OPTS      0x00000002
  722 #define NDIS_TCPSUM_FLAGS_TCP_CSUM      0x00000004
  723 #define NDIS_TCPSUM_FLAGS_UDP_CSUM      0x00000008
  724 #define NDIS_TCPSUM_FLAGS_IP_CSUM       0x00000010
  725 
  726 struct ndis_task_tcpip_csum {
  727         uint32_t                nttc_v4tx;
  728         uint32_t                nttc_v4rx;
  729         uint32_t                nttc_v6tx;
  730         uint32_t                nttc_v6rx;
  731 };
  732 
  733 typedef struct ndis_task_tcpip_csum ndis_task_tcpip_csum;
  734 
  735 struct ndis_task_tcp_largesend {
  736         uint32_t                nttl_vers;
  737         uint32_t                nttl_maxofflen;
  738         uint32_t                nttl_minsegcnt;
  739         uint8_t                 nttl_tcpopt;
  740         uint8_t                 nttl_ipopt;
  741 };
  742 
  743 typedef struct ndis_task_tcp_largesend ndis_task_tcp_largesend;
  744 
  745 #define NDIS_IPSEC_AH_MD5               0x00000001
  746 #define NDIS_IPSEC_AH_SHA1              0x00000002
  747 #define NDIS_IPSEC_AH_TRANSPORT         0x00000004
  748 #define NDIS_IPSEC_AH_TUNNEL            0x00000008
  749 #define NDIS_IPSEC_AH_SEND              0x00000010
  750 #define NDIS_IPSEC_AH_RECEIVE           0x00000020
  751 
  752 #define NDIS_IPSEC_ESP_DES              0x00000001
  753 #define NDIS_IPSEC_ESP_RSVD             0x00000002
  754 #define NDIS_IPSEC_ESP_3DES             0x00000004
  755 #define NDIS_IPSEC_ESP_NULL             0x00000008
  756 #define NDIS_IPSEC_ESP_TRANSPORT        0x00000010
  757 #define NDIS_IPSEC_ESP_TUNNEL           0x00000020
  758 #define NDIS_IPSEC_ESP_SEND             0x00000040
  759 #define NDIS_IPSEC_ESP_RECEIVE          0x00000080
  760 
  761 struct ndis_task_ipsec {
  762         uint32_t                nti_ah_esp_combined;
  763         uint32_t                nti_ah_transport_tunnel_combined;
  764         uint32_t                nti_v4_options;
  765         uint32_t                nti_rsvd;
  766         uint32_t                nti_v4ah;
  767         uint32_t                nti_v4esp;
  768 };
  769 
  770 typedef struct ndis_task_ipsec ndis_task_ipsec;
  771 
  772 /*
  773  * Attribures of NDIS drivers. Not all drivers support
  774  * all attributes.
  775  */
  776 
  777 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT            0x00000001
  778 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT           0x00000002
  779 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS         0x00000004
  780 #define NDIS_ATTRIBUTE_BUS_MASTER                       0x00000008
  781 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER              0x00000010
  782 #define NDIS_ATTRIBUTE_DESERIALIZE                      0x00000020
  783 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND               0x00000040
  784 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK               0x00000080
  785 #define NDIS_ATTRIBUTE_NOT_CO_NDIS                      0x00000100
  786 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS            0x00000200
  787 
  788 #define NDIS_SERIALIZED(block)          \
  789         (((block)->nmb_flags & NDIS_ATTRIBUTE_DESERIALIZE) == 0)
  790 
  791 enum ndis_media_state {
  792         nmc_connected,
  793         nmc_disconnected
  794 };
  795 
  796 typedef enum ndis_media_state ndis_media_state;
  797 
  798 /* Ndis Packet Filter Bits (OID_GEN_CURRENT_PACKET_FILTER). */
  799 
  800 #define NDIS_PACKET_TYPE_DIRECTED               0x00000001
  801 #define NDIS_PACKET_TYPE_MULTICAST              0x00000002
  802 #define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
  803 #define NDIS_PACKET_TYPE_BROADCAST              0x00000008
  804 #define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
  805 #define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
  806 #define NDIS_PACKET_TYPE_SMT                    0x00000040
  807 #define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
  808 #define NDIS_PACKET_TYPE_GROUP                  0x00001000
  809 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
  810 #define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
  811 #define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
  812 
  813 
  814 /* Ndis MAC option bits (OID_GEN_MAC_OPTIONS). */
  815 
  816 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA             0x00000001
  817 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED              0x00000002
  818 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND              0x00000004
  819 #define NDIS_MAC_OPTION_NO_LOOPBACK                     0x00000008
  820 #define NDIS_MAC_OPTION_FULL_DUPLEX                     0x00000010
  821 #define NDIS_MAC_OPTION_EOTX_INDICATION                 0x00000020
  822 #define NDIS_MAC_OPTION_8021P_PRIORITY                  0x00000040
  823 #define NDIS_MAC_OPTION_SUPPORTS_MAC_ADDRESS_OVERWRITE  0x00000080
  824 #define NDIS_MAC_OPTION_RECEIVE_AT_DPC                  0x00000100
  825 #define NDIS_MAC_OPTION_8021Q_VLAN                      0x00000200
  826 #define NDIS_MAC_OPTION_RESERVED                        0x80000000
  827 
  828 #define NDIS_DMA_24BITS         0x00
  829 #define NDIS_DMA_32BITS         0x01
  830 #define NDIS_DMA_64BITS         0x02
  831 
  832 /*
  833 struct ndis_physaddr {
  834 #ifdef __i386__
  835         uint64_t                np_quad;
  836 #endif
  837 #ifdef __amd64__
  838         uint32_t                np_low;
  839         uint32_t                np_high;
  840 #define np_quad np_low
  841 #endif
  842 #ifdef notdef
  843         uint32_t                np_low;
  844         uint32_t                np_high;
  845 #endif
  846 };
  847 */
  848 
  849 typedef struct physaddr ndis_physaddr;
  850 
  851 struct ndis_ansi_string {
  852         uint16_t                nas_len;
  853         uint16_t                nas_maxlen;
  854         char                    *nas_buf;
  855 };
  856 
  857 typedef struct ndis_ansi_string ndis_ansi_string;
  858 
  859 #ifdef notdef
  860 /*
  861  * nus_buf is really a wchar_t *, but it's inconvenient to include
  862  * all the necessary header goop needed to define it, and it's a
  863  * pointer anyway, so for now, just make it a uint16_t *.
  864  */
  865 struct ndis_unicode_string {
  866         uint16_t                nus_len;
  867         uint16_t                nus_maxlen;
  868         uint16_t                *nus_buf;
  869 };
  870 typedef struct ndis_unicode_string ndis_unicode_string;
  871 #endif
  872 
  873 typedef unicode_string ndis_unicode_string;
  874 
  875 enum ndis_parm_type {
  876         ndis_parm_int,
  877         ndis_parm_hexint,
  878         ndis_parm_string,
  879         ndis_parm_multistring,
  880         ndis_parm_binary
  881 };
  882 
  883 typedef enum ndis_parm_type ndis_parm_type;
  884 
  885 struct ndis_binary_data {
  886         uint16_t                nbd_len;
  887         void                    *nbd_buf;
  888 };
  889 
  890 typedef struct ndis_binary_data ndis_binary_data;
  891 
  892 struct ndis_config_parm {
  893         ndis_parm_type          ncp_type;
  894         union {
  895                 uint32_t                ncp_intdata;
  896                 ndis_unicode_string     ncp_stringdata;
  897                 ndis_binary_data        ncp_binarydata;
  898         } ncp_parmdata;
  899 };
  900 
  901 /*
  902  * Not part of Windows NDIS spec; we uses this to keep a
  903  * list of ndis_config_parm structures that we've allocated.
  904  */
  905 
  906 typedef struct ndis_config_parm ndis_config_parm;
  907 
  908 struct ndis_parmlist_entry {
  909         list_entry              np_list;
  910         ndis_config_parm        np_parm;
  911 };
  912 
  913 typedef struct ndis_parmlist_entry ndis_parmlist_entry;
  914 
  915 #ifdef notdef
  916 struct ndis_list_entry {
  917         struct ndis_list_entry *nle_flink;
  918         struct ndis_list_entry *nle_blink;
  919 };
  920 
  921 typedef struct ndis_list_entry ndis_list_entry;
  922 #endif
  923 
  924 struct ndis_bind_paths {
  925         uint32_t                nbp_number;
  926         ndis_unicode_string     nbp_paths[1];
  927 };
  928 
  929 typedef struct ndis_bind_paths ndis_bind_paths;
  930 
  931 #ifdef notdef
  932 struct dispatch_header {
  933         uint8_t                 dh_type;
  934         uint8_t                 dh_abs;
  935         uint8_t                 dh_size;
  936         uint8_t                 dh_inserted;
  937         uint32_t                dh_sigstate;
  938         list_entry              dh_waitlisthead;
  939 };
  940 #endif
  941 
  942 #define dispatch_header nt_dispatch_header
  943 
  944 struct ndis_ktimer {
  945         struct dispatch_header  nk_header;
  946         uint64_t                nk_duetime;
  947         list_entry              nk_timerlistentry;
  948         void                    *nk_dpc;
  949         uint32_t                nk_period;
  950 };
  951 
  952 struct ndis_kevent {
  953         struct dispatch_header  nk_header;
  954 };
  955 
  956 struct ndis_event {
  957         struct nt_kevent        ne_event;
  958 };
  959 
  960 typedef struct ndis_event ndis_event;
  961 
  962 /* Kernel defered procedure call (i.e. timer callback) */
  963 
  964 struct ndis_kdpc;
  965 typedef void (*ndis_kdpc_func)(struct ndis_kdpc *, void *, void *, void *);
  966 
  967 struct ndis_kdpc {
  968         uint16_t                nk_type;
  969         uint8_t                 nk_num;
  970         uint8_t                 nk_importance;
  971         list_entry              nk_dpclistentry;
  972         ndis_kdpc_func          nk_deferedfunc;
  973         void                    *nk_deferredctx;
  974         void                    *nk_sysarg1;
  975         void                    *nk_sysarg2;
  976         uint32_t                *nk_lock;
  977 };
  978 
  979 struct ndis_timer {
  980         struct ktimer           nt_ktimer;
  981         struct kdpc             nt_kdpc;
  982 };
  983 
  984 typedef struct ndis_timer ndis_timer;
  985 
  986 typedef void (*ndis_timer_function)(void *, void *, void *, void *);
  987 
  988 struct ndis_miniport_timer {
  989         struct ktimer           nmt_ktimer;
  990         struct kdpc             nmt_kdpc;
  991         ndis_timer_function     nmt_timerfunc;
  992         void                    *nmt_timerctx;
  993         ndis_miniport_block     *nmt_block;
  994         struct ndis_miniport_timer      *nmt_nexttimer;
  995 };
  996 
  997 typedef struct ndis_miniport_timer ndis_miniport_timer;
  998 
  999 struct ndis_spin_lock {
 1000         ndis_kspin_lock         nsl_spinlock;
 1001         ndis_kirql              nsl_kirql;
 1002 };
 1003 
 1004 typedef struct ndis_spin_lock ndis_spin_lock;
 1005 
 1006 struct ndis_rw_lock {
 1007         union {
 1008                 kspin_lock              nrl_spinlock;
 1009                 void                    *nrl_ctx;
 1010         } u;
 1011         uint8_t                         nrl_rsvd[16];
 1012 };
 1013 
 1014 #define nrl_spinlock            u.nrl_spinlock
 1015 #define nrl_ctx                 u.nrl_ctx;
 1016 
 1017 typedef struct ndis_rw_lock ndis_rw_lock;
 1018 
 1019 struct ndis_lock_state {
 1020         uint16_t                        nls_lockstate;
 1021         ndis_kirql                      nls_oldirql;
 1022 };
 1023 
 1024 typedef struct ndis_lock_state ndis_lock_state;
 1025 
 1026 struct ndis_request {
 1027         uint8_t                 nr_macreserved[4*sizeof(void *)];
 1028         uint32_t                nr_requesttype;
 1029         union _ndis_data {
 1030                 struct _ndis_query_information {
 1031                         ndis_oid        nr_oid;
 1032                         void            *nr_infobuf;
 1033                         uint32_t        nr_infobuflen;
 1034                         uint32_t        nr_byteswritten;
 1035                         uint32_t        nr_bytesneeded;
 1036                 } ndis_query_information;
 1037                 struct _ndis_set_information {
 1038                         ndis_oid        nr_oid;
 1039                         void            *nr_infobuf;
 1040                         uint32_t        nr_infobuflen;
 1041                         uint32_t        nr_byteswritten;
 1042                         uint32_t        nr_bytesneeded;
 1043                 } ndis_set_information;
 1044         } ndis_data;
 1045         /* NDIS 5.0 extentions */
 1046         uint8_t                 nr_ndis_rsvd[9 * sizeof(void *)];
 1047         union {
 1048                 uint8_t         nr_callmgr_rsvd[2 * sizeof(void *)];
 1049                 uint8_t         nr_protocol_rsvd[2 * sizeof(void *)];
 1050         } u;
 1051         uint8_t                 nr_miniport_rsvd[2 * sizeof(void *)];
 1052 };
 1053 
 1054 typedef struct ndis_request ndis_request;
 1055 
 1056 /*
 1057  * Filler, not used.
 1058  */
 1059 struct ndis_miniport_interrupt {
 1060         kinterrupt              *ni_introbj;
 1061         ndis_kspin_lock         ni_dpccountlock;
 1062         void                    *ni_rsvd;
 1063         void                    *ni_isrfunc;
 1064         void                    *ni_dpcfunc;
 1065         kdpc                    ni_dpc;
 1066         ndis_miniport_block     *ni_block;
 1067         uint8_t                 ni_dpccnt;
 1068         uint8_t                 ni_filler1;
 1069         struct nt_kevent        ni_dpcevt;
 1070         uint8_t                 ni_shared;
 1071         uint8_t                 ni_isrreq;
 1072 };
 1073 
 1074 typedef struct ndis_miniport_interrupt ndis_miniport_interrupt;
 1075 
 1076 enum ndis_interrupt_mode {
 1077         nim_level,
 1078         nim_latched
 1079 };
 1080 
 1081 typedef enum ndis_interrupt_mode ndis_interrupt_mode;
 1082 
 1083 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
 1084 
 1085 struct ndis_work_item;
 1086 
 1087 typedef void (*ndis_proc)(struct ndis_work_item *, void *);
 1088 
 1089 struct ndis_work_item {
 1090         void                    *nwi_ctx;
 1091         ndis_proc               nwi_func;
 1092         uint8_t                 nwi_wraprsvd[sizeof(void *) * 8];
 1093 };
 1094 
 1095 typedef struct ndis_work_item ndis_work_item;
 1096 
 1097 #define NdisInitializeWorkItem(w, f, c) \
 1098         do {                            \
 1099                 (w)->nwi_ctx = c;       \
 1100                 (w)->nwi_func = f;      \
 1101         } while (0)
 1102 
 1103 #ifdef notdef
 1104 struct ndis_buffer {
 1105         struct ndis_buffer      *nb_next;
 1106         uint16_t                nb_size;
 1107         uint16_t                nb_flags;
 1108         void                    *nb_process;
 1109         void                    *nb_mappedsystemva;
 1110         void                    *nb_startva;
 1111         uint32_t                nb_bytecount;
 1112         uint32_t                nb_byteoffset;
 1113 };
 1114 
 1115 typedef struct ndis_buffer ndis_buffer;
 1116 #endif
 1117 
 1118 struct ndis_sc_element {
 1119         ndis_physaddr           nse_addr;
 1120         uint32_t                nse_len;
 1121         uint32_t                *nse_rsvd;
 1122 };
 1123 
 1124 typedef struct ndis_sc_element ndis_sc_element;
 1125 
 1126 #define NDIS_MAXSEG             32
 1127 #define NDIS_BUS_SPACE_SHARED_MAXADDR   0x3E7FFFFF
 1128 
 1129 struct ndis_sc_list {
 1130         uint32_t                nsl_frags;
 1131         uint32_t                *nsl_rsvd;
 1132         ndis_sc_element         nsl_elements[NDIS_MAXSEG];
 1133 };
 1134 
 1135 typedef struct ndis_sc_list ndis_sc_list;
 1136 
 1137 struct ndis_tcpip_csum {
 1138         union {
 1139                 uint32_t                ntc_txflags;
 1140                 uint32_t                ntc_rxflags;
 1141                 uint32_t                ntc_val;
 1142         } u;
 1143 };
 1144 
 1145 typedef struct ndis_tcpip_csum ndis_tcpip_csum;
 1146 
 1147 #define NDIS_TXCSUM_DO_IPV4             0x00000001
 1148 #define NDIS_TXCSUM_DO_IPV6             0x00000002
 1149 #define NDIS_TXCSUM_DO_TCP              0x00000004
 1150 #define NDIS_TXCSUM_DO_UDP              0x00000008
 1151 #define NDIS_TXCSUM_DO_IP               0x00000010
 1152 
 1153 #define NDIS_RXCSUM_TCP_FAILED          0x00000001
 1154 #define NDIS_RXCSUM_UDP_FAILED          0x00000002
 1155 #define NDIS_RXCSUM_IP_FAILED           0x00000004
 1156 #define NDIS_RXCSUM_TCP_PASSED          0x00000008
 1157 #define NDIS_RXCSUM_UDP_PASSED          0x00000010
 1158 #define NDIS_RXCSUM_IP_PASSED           0x00000020
 1159 #define NDIS_RXCSUM_LOOPBACK            0x00000040
 1160 
 1161 struct ndis_vlan {
 1162         union {
 1163                 struct {
 1164                         uint32_t                        nvt_userprio:3;
 1165                         uint32_t                        nvt_canformatid:1;
 1166                         uint32_t                        nvt_vlanid:12;
 1167                         uint32_t                        nvt_rsvd:16;
 1168                 } nv_taghdr;
 1169         } u;
 1170 };
 1171 
 1172 typedef struct ndis_vlan ndis_vlan;
 1173 
 1174 enum ndis_perpkt_info {
 1175         ndis_tcpipcsum_info,
 1176         ndis_ipsec_info,
 1177         ndis_largesend_info,
 1178         ndis_classhandle_info,
 1179         ndis_rsvd,
 1180         ndis_sclist_info,
 1181         ndis_ieee8021q_info,
 1182         ndis_originalpkt_info,
 1183         ndis_packetcancelid,
 1184         ndis_maxpkt_info
 1185 };
 1186 
 1187 typedef enum ndis_perpkt_info ndis_perpkt_info;
 1188 
 1189 struct ndis_packet_extension {
 1190         void                    *npe_info[ndis_maxpkt_info];
 1191 };
 1192 
 1193 typedef struct ndis_packet_extension ndis_packet_extension;
 1194 
 1195 struct ndis_packet_private {
 1196         uint32_t                npp_physcnt;
 1197         uint32_t                npp_totlen;
 1198         ndis_buffer             *npp_head;
 1199         ndis_buffer             *npp_tail;
 1200 
 1201         void                    *npp_pool;
 1202         uint32_t                npp_count;
 1203         uint32_t                npp_flags;
 1204         uint8_t                 npp_validcounts;
 1205         uint8_t                 npp_ndispktflags;
 1206         uint16_t                npp_packetooboffset;
 1207 };
 1208 
 1209 #define NDIS_FLAGS_PROTOCOL_ID_MASK             0x0000000F
 1210 #define NDIS_FLAGS_MULTICAST_PACKET             0x00000010
 1211 #define NDIS_FLAGS_RESERVED2                    0x00000020
 1212 #define NDIS_FLAGS_RESERVED3                    0x00000040
 1213 #define NDIS_FLAGS_DONT_LOOPBACK                0x00000080
 1214 #define NDIS_FLAGS_IS_LOOPBACK_PACKET           0x00000100
 1215 #define NDIS_FLAGS_LOOPBACK_ONLY                0x00000200
 1216 #define NDIS_FLAGS_RESERVED4                    0x00000400
 1217 #define NDIS_FLAGS_DOUBLE_BUFFERED              0x00000800
 1218 #define NDIS_FLAGS_SENT_AT_DPC                  0x00001000
 1219 #define NDIS_FLAGS_USES_SG_BUFFER_LIST          0x00002000
 1220 
 1221 #define NDIS_PACKET_WRAPPER_RESERVED                    0x3F
 1222 #define NDIS_PACKET_CONTAINS_MEDIA_SPECIFIC_INFO        0x40
 1223 #define NDIS_PACKET_ALLOCATED_BY_NDIS                   0x80
 1224 
 1225 #define NDIS_PROTOCOL_ID_DEFAULT        0x00
 1226 #define NDIS_PROTOCOL_ID_TCP_IP         0x02
 1227 #define NDIS_PROTOCOL_ID_IPX            0x06
 1228 #define NDIS_PROTOCOL_ID_NBF            0x07
 1229 #define NDIS_PROTOCOL_ID_MAX            0x0F
 1230 #define NDIS_PROTOCOL_ID_MASK           0x0F
 1231 
 1232 typedef struct ndis_packet_private ndis_packet_private;
 1233 
 1234 enum ndis_classid {
 1235         ndis_class_802_3prio,
 1236         ndis_class_wirelesswan_mbx,
 1237         ndis_class_irda_packetinfo,
 1238         ndis_class_atm_aainfo
 1239 };
 1240 
 1241 typedef enum ndis_classid ndis_classid;
 1242 
 1243 struct ndis_mediaspecific_info {
 1244         uint32_t                nmi_nextentoffset;
 1245         ndis_classid            nmi_classid;
 1246         uint32_t                nmi_size;
 1247         uint8_t                 nmi_classinfo[1];
 1248 };
 1249 
 1250 typedef struct ndis_mediaspecific_info ndis_mediaspecific_info;
 1251 
 1252 struct ndis_packet_oob {
 1253         union {
 1254                 uint64_t                npo_timetotx;
 1255                 uint64_t                npo_timetxed;
 1256         } u;
 1257         uint64_t                        npo_timerxed;
 1258         uint32_t                        npo_hdrlen;
 1259         uint32_t                        npo_mediaspecific_len;
 1260         void                            *npo_mediaspecific;
 1261         ndis_status                     npo_status;
 1262 };
 1263 
 1264 typedef struct ndis_packet_oob ndis_packet_oob;
 1265 
 1266 /*
 1267  * Our protocol private region for handling ethernet.
 1268  * We need this to stash some of the things returned
 1269  * by NdisMEthIndicateReceive().
 1270  */
 1271 
 1272 struct ndis_ethpriv {
 1273         void                    *nep_ctx;       /* packet context */
 1274         long                    nep_offset;     /* residual data to transfer */
 1275         void                    *nep_pad[2];
 1276 };
 1277 
 1278 typedef struct ndis_ethpriv ndis_ethpriv;
 1279 
 1280 #define PROTOCOL_RESERVED_SIZE_IN_PACKET        (4 * sizeof(void *))
 1281 
 1282 struct ndis_packet {
 1283         ndis_packet_private     np_private;
 1284         union {
 1285                 /* For connectionless miniports. */
 1286                 struct {
 1287                         uint8_t         np_miniport_rsvd[2 * sizeof(void *)];
 1288                         uint8_t         np_wrapper_rsvd[2 * sizeof(void *)];
 1289                 } np_clrsvd;
 1290                 /* For de-serialized miniports */
 1291                 struct {
 1292                         uint8_t         np_miniport_rsvdex[3 * sizeof(void *)];
 1293                         uint8_t         np_wrapper_rsvdex[sizeof(void *)];
 1294                 } np_dsrsvd;
 1295                 struct {
 1296                         uint8_t         np_mac_rsvd[4 * sizeof(void *)];
 1297                 } np_macrsvd;
 1298         } u;
 1299         uint32_t                *np_rsvd[2];
 1300         uint8_t                 np_protocolreserved[PROTOCOL_RESERVED_SIZE_IN_PACKET];
 1301 
 1302         /*
 1303          * This next part is probably wrong, but we need some place
 1304          * to put the out of band data structure...
 1305          */
 1306         ndis_packet_oob         np_oob;
 1307         ndis_packet_extension   np_ext;
 1308         ndis_sc_list            np_sclist;
 1309 
 1310         /* BSD-specific stuff which should be invisible to drivers. */
 1311 
 1312         uint32_t                np_refcnt;
 1313         void                    *np_softc;
 1314         void                    *np_m0;
 1315         int                     np_txidx;
 1316         list_entry              np_list;
 1317 };
 1318 
 1319 typedef struct ndis_packet ndis_packet;
 1320 
 1321 struct ndis_packet_pool {
 1322         slist_header            np_head;
 1323         int                     np_dead;
 1324         nt_kevent               np_event;
 1325         kspin_lock              np_lock;
 1326         int                     np_cnt;
 1327         int                     np_len;
 1328         int                     np_protrsvd;
 1329         void                    *np_pktmem;
 1330 };
 1331 
 1332 typedef struct ndis_packet_pool ndis_packet_pool;
 1333 
 1334 /* mbuf ext type for NDIS */
 1335 #define EXT_NDIS                EXT_NET_DRV
 1336 
 1337 /* mtx type for NDIS */
 1338 #define MTX_NDIS_LOCK "NDIS lock"
 1339 
 1340 struct ndis_filterdbs {
 1341         union {
 1342                 void                    *nf_ethdb;
 1343                 void                    *nf_nulldb;
 1344         } u;
 1345         void                    *nf_trdb;
 1346         void                    *nf_fddidb;
 1347         void                    *nf_arcdb;
 1348 };
 1349 
 1350 typedef struct ndis_filterdbs ndis_filterdbs;
 1351 
 1352 #define nf_ethdb u.nf_ethdb
 1353 
 1354 enum ndis_medium {
 1355     NdisMedium802_3,
 1356     NdisMedium802_5,
 1357     NdisMediumFddi,
 1358     NdisMediumWan,
 1359     NdisMediumLocalTalk,
 1360     NdisMediumDix,              /* defined for convenience, not a real medium */
 1361     NdisMediumArcnetRaw,
 1362     NdisMediumArcnet878_2,
 1363     NdisMediumAtm,
 1364     NdisMediumWirelessWan,
 1365     NdisMediumIrda,
 1366     NdisMediumBpc,
 1367     NdisMediumCoWan,
 1368     NdisMedium1394,
 1369     NdisMediumMax
 1370 };
 1371 
 1372 typedef enum ndis_medium ndis_medium;
 1373 /*
 1374 enum interface_type {
 1375         InterfaceTypeUndefined = -1,
 1376         Internal,
 1377         Isa,
 1378         Eisa,
 1379         MicroChannel,
 1380         TurboChannel,
 1381         PCIBus,
 1382         VMEBus,
 1383         NuBus,
 1384         PCMCIABus,
 1385         CBus,
 1386         MPIBus,
 1387         MPSABus,
 1388         ProcessorInternal,
 1389         InternalPowerBus,
 1390         PNPISABus,
 1391         PNPBus,
 1392         MaximumInterfaceType
 1393 };
 1394 */
 1395 enum ndis_interface_type {
 1396         NdisInterfaceInternal = Internal,
 1397         NdisInterfaceIsa = Isa,
 1398         NdisInterfaceEisa = Eisa,
 1399         NdisInterfaceMca = MicroChannel,
 1400         NdisInterfaceTurboChannel = TurboChannel,
 1401         NdisInterfacePci = PCIBus,
 1402         NdisInterfacePcMcia = PCMCIABus
 1403 };
 1404 
 1405 typedef enum ndis_interface_type ndis_interface_type;
 1406 
 1407 struct ndis_paddr_unit {
 1408         ndis_physaddr           npu_physaddr;
 1409         uint32_t                npu_len;
 1410 };
 1411 
 1412 typedef struct ndis_paddr_unit ndis_paddr_unit;
 1413 
 1414 struct ndis_map_arg {
 1415         ndis_paddr_unit         *nma_fraglist;
 1416         int                     nma_cnt;
 1417         int                     nma_max;
 1418 };
 1419 
 1420 /*
 1421  * Miniport characteristics were originally defined in the NDIS 3.0
 1422  * spec and then extended twice, in NDIS 4.0 and 5.0.
 1423  */
 1424 
 1425 struct ndis_miniport_characteristics {
 1426 
 1427         /* NDIS 3.0 */
 1428 
 1429         uint8_t                 nmc_version_major;
 1430         uint8_t                 nmc_version_minor;
 1431         uint16_t                nmc_pad;
 1432         uint32_t                nmc_rsvd;
 1433         void *                  nmc_checkhang_func;
 1434         void *                  nmc_disable_interrupts_func;
 1435         void *                  nmc_enable_interrupts_func;
 1436         void *                  nmc_halt_func;
 1437         void *                  nmc_interrupt_func;
 1438         void *                  nmc_init_func;
 1439         void *                  nmc_isr_func;
 1440         void *                  nmc_queryinfo_func;
 1441         void *                  nmc_reconfig_func;
 1442         void *                  nmc_reset_func;
 1443         void *                  nmc_sendsingle_func;
 1444         void *                  nmc_setinfo_func;
 1445         void *                  nmc_transferdata_func;
 1446 
 1447         /* NDIS 4.0 extentions */
 1448 
 1449         void *                  nmc_return_packet_func;
 1450         void *                  nmc_sendmulti_func;
 1451         void *                  nmc_allocate_complete_func;
 1452 
 1453         /* NDIS 5.0 extensions */
 1454 
 1455         void *                  nmc_cocreatevc_func;
 1456         void *                  nmc_codeletevc_func;
 1457         void *                  nmc_coactivatevc_func;
 1458         void *                  nmc_codeactivatevc_func;
 1459         void *                  nmc_comultisend_func;
 1460         void *                  nmc_corequest_func;
 1461 
 1462         /* NDIS 5.1 extentions */
 1463 
 1464         void *                  nmc_canceltxpkts_handler;
 1465         void *                  nmc_pnpevent_handler;
 1466         void *                  nmc_shutdown_handler;
 1467         void *                  nmc_rsvd0;
 1468         void *                  nmc_rsvd1;
 1469         void *                  nmc_rsvd2;
 1470         void *                  nmc_rsvd3;
 1471 };
 1472 
 1473 typedef struct ndis_miniport_characteristics ndis_miniport_characteristics;
 1474 
 1475 struct ndis_driver_object {
 1476         char                    *ndo_ifname;
 1477         void                    *ndo_softc;
 1478         ndis_miniport_characteristics ndo_chars;
 1479 };
 1480 
 1481 typedef struct ndis_driver_object ndis_driver_object;
 1482 
 1483 struct ndis_reference {
 1484         ndis_kspin_lock         nr_spinlock;
 1485         uint16_t                nr_refcnt;
 1486         uint8_t                 nr_closing;
 1487 };
 1488 
 1489 typedef struct ndis_reference ndis_reference;
 1490 
 1491 struct ndis_timer_entry {
 1492         struct callout          nte_ch;
 1493         ndis_miniport_timer     *nte_timer;
 1494         TAILQ_ENTRY(ndis_timer_entry)   link;
 1495 };
 1496 
 1497 TAILQ_HEAD(nte_head, ndis_timer_entry);
 1498 
 1499 #define NDIS_FH_TYPE_VFS        0
 1500 #define NDIS_FH_TYPE_MODULE     1
 1501 
 1502 struct ndis_fh {
 1503         int                     nf_type;
 1504         char                    *nf_name;
 1505         void                    *nf_vp;
 1506         void                    *nf_map;
 1507         uint32_t                nf_maplen;
 1508 };
 1509 
 1510 typedef struct ndis_fh ndis_fh;
 1511 
 1512 /*
 1513  * The miniport block is basically the internal NDIS handle. We need
 1514  * to define this because, unfortunately, it is not entirely opaque
 1515  * to NDIS drivers. For one thing, it contains the function pointer
 1516  * to the NDIS packet receive handler, which is invoked out of the
 1517  * NDIS block via a macro rather than a function pointer. (The
 1518  * NdisMIndicateReceivePacket() routine is a macro rather than
 1519  * a function.) For another, the driver maintains a pointer to the
 1520  * miniport block and passes it as a handle to various NDIS functions.
 1521  * (The driver never really knows this because it's hidden behind
 1522  * an ndis_handle though.)
 1523  *
 1524  * The miniport block has two parts: the first part contains fields
 1525  * that must never change, since they are referenced by driver
 1526  * binaries through macros. The second part is ignored by the driver,
 1527  * but contains various things used internaly by NDIS.SYS. In our
 1528  * case, we define the first 'immutable' part exactly as it appears
 1529  * in Windows, but don't bother duplicating the Windows definitions
 1530  * for the second part. Instead, we replace them with a few BSD-specific
 1531  * things.
 1532  */
 1533 
 1534 struct ndis_miniport_block {
 1535         /*
 1536          * Windows-specific portion -- DO NOT MODIFY OR NDIS
 1537          * DRIVERS WILL NOT WORK.
 1538          */
 1539         void                    *nmb_signature; /* magic number */
 1540         ndis_miniport_block     *nmb_nextminiport;
 1541         ndis_mdriver_block      *nmb_driverhandle;
 1542         ndis_handle             nmb_miniportadapterctx;
 1543         ndis_unicode_string     nmb_name;
 1544         ndis_bind_paths         *nmb_bindpaths;
 1545         ndis_handle             nmb_openqueue;
 1546         ndis_reference          nmb_ref;
 1547         ndis_handle             nmb_devicectx;
 1548         uint8_t                 nmb_padding;
 1549         uint8_t                 nmb_lockacquired;
 1550         uint8_t                 nmb_pmodeopens;
 1551         uint8_t                 nmb_assignedcpu;
 1552         ndis_kspin_lock         nmb_lock;
 1553         ndis_request            *nmb_mediarequest;
 1554         ndis_miniport_interrupt *nmb_interrupt;
 1555         uint32_t                nmb_flags;
 1556         uint32_t                nmb_pnpflags;
 1557         list_entry              nmb_packetlist;
 1558         ndis_packet             *nmb_firstpendingtxpacket;
 1559         ndis_packet             *nmb_returnpacketqueue;
 1560         uint32_t                nmb_requestbuffer;
 1561         void                    *nmb_setmcastbuf;
 1562         ndis_miniport_block     *nmb_primaryminiport;
 1563         void                    *nmb_wrapperctx;
 1564         void                    *nmb_busdatactx;
 1565         uint32_t                nmb_pnpcaps;
 1566         cm_resource_list        *nmb_resources;
 1567         ndis_timer              nmb_wkupdpctimer;
 1568         ndis_unicode_string     nmb_basename;
 1569         ndis_unicode_string     nmb_symlinkname;
 1570         uint32_t                nmb_checkforhangsecs;
 1571         uint16_t                nmb_cfhticks;
 1572         uint16_t                nmb_cfhcurrticks;
 1573         ndis_status             nmb_resetstatus;
 1574         ndis_handle             nmb_resetopen;
 1575         ndis_filterdbs          nmb_filterdbs;
 1576         void                    *nmb_pktind_func;
 1577         void                    *nmb_senddone_func;
 1578         void                    *nmb_sendrsrc_func;
 1579         void                    *nmb_resetdone_func;
 1580         ndis_medium             nmb_medium;
 1581         uint32_t                nmb_busnum;
 1582         uint32_t                nmb_bustype;
 1583         uint32_t                nmb_adaptertype;
 1584         device_object           *nmb_deviceobj; /* Functional device */
 1585         device_object           *nmb_physdeviceobj; /* Physical device */
 1586         device_object           *nmb_nextdeviceobj; /* Next dev in stack */
 1587         void                    *nmb_mapreg;
 1588         void                    *nmb_callmgraflist;
 1589         void                    *nmb_miniportthread;
 1590         void                    *nmb_setinfobuf;
 1591         uint16_t                nmb_setinfobuflen;
 1592         uint16_t                nmb_maxsendpkts;
 1593         ndis_status             nmb_fakestatus;
 1594         void                    *nmb_lockhandler;
 1595         ndis_unicode_string     *nmb_adapterinstancename;
 1596         void                    *nmb_timerqueue;
 1597         uint32_t                nmb_mactoptions;
 1598         ndis_request            *nmb_pendingreq;
 1599         uint32_t                nmb_maxlongaddrs;
 1600         uint32_t                nmb_maxshortaddrs;
 1601         uint32_t                nmb_currlookahead;
 1602         uint32_t                nmb_maxlookahead;
 1603         void                    *nmb_interrupt_func;
 1604         void                    *nmb_disableintr_func;
 1605         void                    *nmb_enableintr_func;
 1606         void                    *nmb_sendpkts_func;
 1607         void                    *nmb_deferredsend_func;
 1608         void                    *nmb_ethrxindicate_func;
 1609         void                    *nmb_txrxindicate_func;
 1610         void                    *nmb_fddirxindicate_func;
 1611         void                    *nmb_ethrxdone_func;
 1612         void                    *nmb_txrxdone_func;
 1613         void                    *nmb_fddirxcond_func;
 1614         void                    *nmb_status_func;
 1615         void                    *nmb_statusdone_func;
 1616         void                    *nmb_tdcond_func;
 1617         void                    *nmb_querydone_func;
 1618         void                    *nmb_setdone_func;
 1619         void                    *nmb_wantxdone_func;
 1620         void                    *nmb_wanrx_func;
 1621         void                    *nmb_wanrxdone_func;
 1622         /*
 1623          * End of windows-specific portion of miniport block. Everything
 1624          * below is BSD-specific.
 1625          */
 1626         list_entry              nmb_parmlist;
 1627         ndis_resource_list      *nmb_rlist;
 1628         ndis_status             nmb_getstat;
 1629         nt_kevent               nmb_getevent;
 1630         ndis_status             nmb_setstat;
 1631         nt_kevent               nmb_setevent;
 1632         nt_kevent               nmb_resetevent;
 1633         io_workitem             *nmb_returnitem;
 1634         ndis_miniport_timer     *nmb_timerlist;
 1635         ndis_handle             nmb_rxpool;
 1636         list_entry              nmb_returnlist;
 1637         kspin_lock              nmb_returnlock;
 1638         TAILQ_ENTRY(ndis_miniport_block)        link;
 1639 };
 1640 
 1641 TAILQ_HEAD(nd_head, ndis_miniport_block);
 1642 
 1643 typedef ndis_status (*ndis_init_handler)(ndis_status *, uint32_t *,
 1644                 ndis_medium *, uint32_t, ndis_handle, ndis_handle);
 1645 typedef ndis_status (*ndis_queryinfo_handler)(ndis_handle, ndis_oid,
 1646                 void *, uint32_t, uint32_t *, uint32_t *);
 1647 typedef ndis_status (*ndis_setinfo_handler)(ndis_handle, ndis_oid,
 1648                 void *, uint32_t, uint32_t *, uint32_t *);
 1649 typedef ndis_status (*ndis_sendsingle_handler)(ndis_handle,
 1650                 ndis_packet *, uint32_t);
 1651 typedef ndis_status (*ndis_sendmulti_handler)(ndis_handle,
 1652                 ndis_packet **, uint32_t);
 1653 typedef void (*ndis_isr_handler)(uint8_t *, uint8_t *, ndis_handle);
 1654 typedef void (*ndis_interrupt_handler)(ndis_handle);
 1655 typedef int (*ndis_reset_handler)(uint8_t *, ndis_handle);
 1656 typedef void (*ndis_halt_handler)(ndis_handle);
 1657 typedef void (*ndis_return_handler)(ndis_handle, ndis_packet *);
 1658 typedef void (*ndis_enable_interrupts_handler)(ndis_handle);
 1659 typedef void (*ndis_disable_interrupts_handler)(ndis_handle);
 1660 typedef void (*ndis_shutdown_handler)(void *);
 1661 typedef void (*ndis_pnpevent_handler)(void *, int, void *, uint32_t);
 1662 typedef void (*ndis_allocdone_handler)(ndis_handle, void *,
 1663                 ndis_physaddr *, uint32_t, void *);
 1664 typedef uint8_t (*ndis_checkforhang_handler)(ndis_handle);
 1665 
 1666 typedef ndis_status (*driver_entry)(void *, unicode_string *);
 1667 
 1668 extern image_patch_table ndis_functbl[];
 1669 
 1670 #define NDIS_TASKQUEUE  1
 1671 #define NDIS_SWI        2
 1672 
 1673 #define NDIS_PSTATE_RUNNING     1
 1674 #define NDIS_PSTATE_SLEEPING    2
 1675 
 1676 #define NdisQueryPacket(p, pbufcnt, bufcnt, firstbuf, plen)             \
 1677         do {                                                            \
 1678                 if ((firstbuf) != NULL) {                               \
 1679                         ndis_buffer             **_first;               \
 1680                         _first = firstbuf;                              \
 1681                         *(_first) = (p)->np_private.npp_head;           \
 1682                 }                                                       \
 1683                 if ((plen) || (bufcnt) || (pbufcnt)) {                  \
 1684                         if ((p)->np_private.npp_validcounts == FALSE) { \
 1685                                 ndis_buffer             *tmp;           \
 1686                                 unsigned int            tlen = 0, pcnt = 0; \
 1687                                 unsigned int            add = 0;        \
 1688                                 unsigned int            pktlen, off;    \
 1689                                                                         \
 1690                                 tmp = (p)->np_private.npp_head;         \
 1691                                 while (tmp != NULL) {                   \
 1692                                         off = MmGetMdlByteOffset(tmp);  \
 1693                                         pktlen = MmGetMdlByteCount(tmp);\
 1694                                         tlen += pktlen;                 \
 1695                                         pcnt +=                         \
 1696                                             NDIS_BUFFER_TO_SPAN_PAGES(tmp); \
 1697                                         add++;                          \
 1698                                         tmp = tmp->mdl_next;            \
 1699                                 }                                       \
 1700                                 (p)->np_private.npp_count = add;        \
 1701                                 (p)->np_private.npp_totlen = tlen;      \
 1702                                 (p)->np_private.npp_physcnt = pcnt;     \
 1703                                 (p)->np_private.npp_validcounts = TRUE; \
 1704                         }                                               \
 1705                         if (pbufcnt) {                                  \
 1706                                 unsigned int            *_pbufcnt;      \
 1707                                 _pbufcnt = (pbufcnt);                   \
 1708                                 *(_pbufcnt) = (p)->np_private.npp_physcnt; \
 1709                         }                                               \
 1710                         if (bufcnt) {                                   \
 1711                                 unsigned int            *_bufcnt;       \
 1712                                 _bufcnt = (bufcnt);                     \
 1713                                 *(_bufcnt) = (p)->np_private.npp_count; \
 1714                         }                                               \
 1715                         if (plen) {                                     \
 1716                                 unsigned int            *_plen;         \
 1717                                 _plen = (plen);                         \
 1718                                 *(_plen) = (p)->np_private.npp_totlen;  \
 1719                         }                                               \
 1720                 }                                                       \
 1721         } while (0)
 1722 
 1723 __BEGIN_DECLS
 1724 extern int ndis_libinit(void);
 1725 extern int ndis_libfini(void);
 1726 extern int ndis_load_driver(vm_offset_t, void *);
 1727 extern int ndis_unload_driver(void *);
 1728 extern int ndis_mtop(struct mbuf *, ndis_packet **);
 1729 extern int ndis_ptom(struct mbuf **, ndis_packet *);
 1730 extern int ndis_get_info(void *, ndis_oid, void *, int *);
 1731 extern int ndis_set_info(void *, ndis_oid, void *, int *);
 1732 extern void *ndis_get_routine_address(struct image_patch_table *, char *);
 1733 extern int ndis_get_supported_oids(void *, ndis_oid **, int *);
 1734 extern int ndis_send_packets(void *, ndis_packet **, int);
 1735 extern int ndis_send_packet(void *, ndis_packet *);
 1736 extern int ndis_convert_res(void *);
 1737 extern int ndis_alloc_amem(void *);
 1738 extern void ndis_free_amem(void *);
 1739 extern void ndis_free_packet(ndis_packet *);
 1740 extern void ndis_free_bufs(ndis_buffer *);
 1741 extern int ndis_reset_nic(void *);
 1742 extern int ndis_halt_nic(void *);
 1743 extern int ndis_shutdown_nic(void *);
 1744 extern int ndis_pnpevent_nic(void *, int);
 1745 extern int ndis_init_nic(void *);
 1746 extern void ndis_return_packet(void *, void *);
 1747 extern int ndis_init_dma(void *);
 1748 extern int ndis_destroy_dma(void *);
 1749 extern int ndis_create_sysctls(void *);
 1750 extern int ndis_add_sysctl(void *, char *, char *, char *, int);
 1751 extern int ndis_flush_sysctls(void *);
 1752 
 1753 extern uint32_t NdisAddDevice(driver_object *, device_object *);
 1754 extern void NdisAllocatePacketPool(ndis_status *,
 1755     ndis_handle *, uint32_t, uint32_t);
 1756 extern void NdisAllocatePacketPoolEx(ndis_status *,
 1757     ndis_handle *, uint32_t, uint32_t, uint32_t);
 1758 extern uint32_t NdisPacketPoolUsage(ndis_handle);
 1759 extern void NdisFreePacketPool(ndis_handle);
 1760 extern void NdisAllocatePacket(ndis_status *,
 1761         ndis_packet **, ndis_handle);
 1762 extern void NdisFreePacket(ndis_packet *);
 1763 extern ndis_status NdisScheduleWorkItem(ndis_work_item *);
 1764 extern void NdisMSleep(uint32_t);
 1765 __END_DECLS
 1766 
 1767 #endif /* _NDIS_VAR_H_ */

Cache object: f69f3908fcbb787f25e296d077ef9c44


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.