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

Cache object: 4e29f929c5fa63f8bdfd32eaae80a605


[ 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.