177c4f5aaSSepherosa Ziehau /*- 2642ec226SSepherosa Ziehau * Copyright (c) 2016-2017 Microsoft Corp. 377c4f5aaSSepherosa Ziehau * All rights reserved. 477c4f5aaSSepherosa Ziehau * 577c4f5aaSSepherosa Ziehau * Redistribution and use in source and binary forms, with or without 677c4f5aaSSepherosa Ziehau * modification, are permitted provided that the following conditions 777c4f5aaSSepherosa Ziehau * are met: 877c4f5aaSSepherosa Ziehau * 1. Redistributions of source code must retain the above copyright 977c4f5aaSSepherosa Ziehau * notice unmodified, this list of conditions, and the following 1077c4f5aaSSepherosa Ziehau * disclaimer. 1177c4f5aaSSepherosa Ziehau * 2. Redistributions in binary form must reproduce the above copyright 1277c4f5aaSSepherosa Ziehau * notice, this list of conditions and the following disclaimer in the 1377c4f5aaSSepherosa Ziehau * documentation and/or other materials provided with the distribution. 1477c4f5aaSSepherosa Ziehau * 1577c4f5aaSSepherosa Ziehau * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1677c4f5aaSSepherosa Ziehau * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1777c4f5aaSSepherosa Ziehau * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1877c4f5aaSSepherosa Ziehau * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1977c4f5aaSSepherosa Ziehau * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2077c4f5aaSSepherosa Ziehau * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2177c4f5aaSSepherosa Ziehau * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2277c4f5aaSSepherosa Ziehau * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2377c4f5aaSSepherosa Ziehau * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2477c4f5aaSSepherosa Ziehau * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2577c4f5aaSSepherosa Ziehau */ 2677c4f5aaSSepherosa Ziehau 2777c4f5aaSSepherosa Ziehau #ifndef _NET_NDIS_H_ 2877c4f5aaSSepherosa Ziehau #define _NET_NDIS_H_ 2977c4f5aaSSepherosa Ziehau 303dc33a77SSepherosa Ziehau #define NDIS_MEDIA_STATE_CONNECTED 0 313dc33a77SSepherosa Ziehau #define NDIS_MEDIA_STATE_DISCONNECTED 1 323dc33a77SSepherosa Ziehau 33970ead00SSepherosa Ziehau #define NDIS_NETCHANGE_TYPE_POSSIBLE 1 34970ead00SSepherosa Ziehau #define NDIS_NETCHANGE_TYPE_DEFINITE 2 35970ead00SSepherosa Ziehau #define NDIS_NETCHANGE_TYPE_FROMMEDIA 3 36970ead00SSepherosa Ziehau 3777c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_SET_NOCHG 0 3877c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_SET_ON 1 3977c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_SET_OFF 2 4077c4f5aaSSepherosa Ziehau 4177c4f5aaSSepherosa Ziehau /* a.k.a GRE MAC */ 4277c4f5aaSSepherosa Ziehau #define NDIS_ENCAP_TYPE_NVGRE 0x00000001 4377c4f5aaSSepherosa Ziehau 44fdda7728SSepherosa Ziehau #define NDIS_HASH_FUNCTION_MASK 0x000000FF /* see hash function */ 45fdda7728SSepherosa Ziehau #define NDIS_HASH_TYPE_MASK 0x00FFFF00 /* see hash type */ 46fdda7728SSepherosa Ziehau 47fdda7728SSepherosa Ziehau /* hash function */ 48fdda7728SSepherosa Ziehau #define NDIS_HASH_FUNCTION_TOEPLITZ 0x00000001 49fdda7728SSepherosa Ziehau 50fdda7728SSepherosa Ziehau /* hash type */ 51fdda7728SSepherosa Ziehau #define NDIS_HASH_IPV4 0x00000100 52fdda7728SSepherosa Ziehau #define NDIS_HASH_TCP_IPV4 0x00000200 53fdda7728SSepherosa Ziehau #define NDIS_HASH_IPV6 0x00000400 54fdda7728SSepherosa Ziehau #define NDIS_HASH_IPV6_EX 0x00000800 55fdda7728SSepherosa Ziehau #define NDIS_HASH_TCP_IPV6 0x00001000 56fdda7728SSepherosa Ziehau #define NDIS_HASH_TCP_IPV6_EX 0x00002000 576f12c42eSSepherosa Ziehau #define NDIS_HASH_UDP_IPV4_X 0x00004000 /* XXX non-standard */ 58fdda7728SSepherosa Ziehau 59642ec226SSepherosa Ziehau #define NDIS_HASH_ALL (NDIS_HASH_IPV4 | \ 60642ec226SSepherosa Ziehau NDIS_HASH_TCP_IPV4 | \ 61642ec226SSepherosa Ziehau NDIS_HASH_IPV6 | \ 62642ec226SSepherosa Ziehau NDIS_HASH_IPV6_EX | \ 63642ec226SSepherosa Ziehau NDIS_HASH_TCP_IPV6 | \ 646f12c42eSSepherosa Ziehau NDIS_HASH_TCP_IPV6_EX |\ 656f12c42eSSepherosa Ziehau NDIS_HASH_UDP_IPV4_X) 666f12c42eSSepherosa Ziehau 676f12c42eSSepherosa Ziehau #define NDIS_HASH_STD (NDIS_HASH_IPV4 | \ 686f12c42eSSepherosa Ziehau NDIS_HASH_TCP_IPV4 | \ 696f12c42eSSepherosa Ziehau NDIS_HASH_IPV6 | \ 706f12c42eSSepherosa Ziehau NDIS_HASH_IPV6_EX | \ 716f12c42eSSepherosa Ziehau NDIS_HASH_TCP_IPV6 | \ 72642ec226SSepherosa Ziehau NDIS_HASH_TCP_IPV6_EX) 73642ec226SSepherosa Ziehau 7420b3dcf0SSepherosa Ziehau /* Hash description for use with printf(9) %b identifier. */ 7520b3dcf0SSepherosa Ziehau #define NDIS_HASH_BITS \ 766f12c42eSSepherosa Ziehau "\20\1TOEPLITZ\11IP4\12TCP4\13IP6\14IP6EX\15TCP6\16TCP6EX\17UDP4_X" 7720b3dcf0SSepherosa Ziehau 78fdda7728SSepherosa Ziehau #define NDIS_HASH_KEYSIZE_TOEPLITZ 40 79fdda7728SSepherosa Ziehau #define NDIS_HASH_INDCNT 128 80fdda7728SSepherosa Ziehau 8177a48d61SSepherosa Ziehau #define NDIS_OBJTYPE_DEFAULT 0x80 8277a48d61SSepherosa Ziehau #define NDIS_OBJTYPE_RSS_CAPS 0x88 8377a48d61SSepherosa Ziehau #define NDIS_OBJTYPE_RSS_PARAMS 0x89 8465ca3310SSepherosa Ziehau #define NDIS_OBJTYPE_OFFLOAD 0xa7 8577a48d61SSepherosa Ziehau 8677c4f5aaSSepherosa Ziehau struct ndis_object_hdr { 8777c4f5aaSSepherosa Ziehau uint8_t ndis_type; /* NDIS_OBJTYPE_ */ 8877c4f5aaSSepherosa Ziehau uint8_t ndis_rev; /* type specific */ 8977c4f5aaSSepherosa Ziehau uint16_t ndis_size; /* incl. this hdr */ 9077c4f5aaSSepherosa Ziehau }; 9177c4f5aaSSepherosa Ziehau 92e4e0ef79SSepherosa Ziehau /* 93e4e0ef79SSepherosa Ziehau * OID_TCP_OFFLOAD_PARAMETERS 94e4e0ef79SSepherosa Ziehau * ndis_type: NDIS_OBJTYPE_DEFAULT 95e4e0ef79SSepherosa Ziehau */ 9677c4f5aaSSepherosa Ziehau struct ndis_offload_params { 9777c4f5aaSSepherosa Ziehau struct ndis_object_hdr ndis_hdr; 9877a48d61SSepherosa Ziehau uint8_t ndis_ip4csum; /* NDIS_OFFLOAD_PARAM_ */ 9977a48d61SSepherosa Ziehau uint8_t ndis_tcp4csum; /* NDIS_OFFLOAD_PARAM_ */ 10077a48d61SSepherosa Ziehau uint8_t ndis_udp4csum; /* NDIS_OFFLOAD_PARAM_ */ 10177a48d61SSepherosa Ziehau uint8_t ndis_tcp6csum; /* NDIS_OFFLOAD_PARAM_ */ 10277a48d61SSepherosa Ziehau uint8_t ndis_udp6csum; /* NDIS_OFFLOAD_PARAM_ */ 10377a48d61SSepherosa Ziehau uint8_t ndis_lsov1; /* NDIS_OFFLOAD_PARAM_ */ 10477a48d61SSepherosa Ziehau uint8_t ndis_ipsecv1; /* NDIS_OFFLOAD_IPSECV1_ */ 10577a48d61SSepherosa Ziehau uint8_t ndis_lsov2_ip4; /* NDIS_OFFLOAD_LSOV2_ */ 10677a48d61SSepherosa Ziehau uint8_t ndis_lsov2_ip6; /* NDIS_OFFLOAD_LSOV2_ */ 10777a48d61SSepherosa Ziehau uint8_t ndis_tcp4conn; /* 0 */ 10877a48d61SSepherosa Ziehau uint8_t ndis_tcp6conn; /* 0 */ 10977c4f5aaSSepherosa Ziehau uint32_t ndis_flags; /* 0 */ 11077c4f5aaSSepherosa Ziehau /* NDIS >= 6.1 */ 11177a48d61SSepherosa Ziehau uint8_t ndis_ipsecv2; /* NDIS_OFFLOAD_IPSECV2_ */ 11277a48d61SSepherosa Ziehau uint8_t ndis_ipsecv2_ip4;/* NDIS_OFFLOAD_IPSECV2_ */ 11377c4f5aaSSepherosa Ziehau /* NDIS >= 6.30 */ 11477a48d61SSepherosa Ziehau uint8_t ndis_rsc_ip4; /* NDIS_OFFLOAD_RSC_ */ 11577a48d61SSepherosa Ziehau uint8_t ndis_rsc_ip6; /* NDIS_OFFLOAD_RSC_ */ 116*a491581fSWei Hu uint8_t ndis_encap; /* NDIS_OFFLOAD_SET_ */ 117*a491581fSWei Hu uint8_t ndis_encap_types;/* NDIS_ENCAP_TYPE_ */ 11877c4f5aaSSepherosa Ziehau }; 11977c4f5aaSSepherosa Ziehau 12077c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAMS_SIZE sizeof(struct ndis_offload_params) 12177c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAMS_SIZE_6_1 \ 12277c4f5aaSSepherosa Ziehau __offsetof(struct ndis_offload_params, ndis_rsc_ip4) 12377c4f5aaSSepherosa Ziehau 12477c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAMS_REV_2 2 /* NDIS 6.1 */ 12577c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAMS_REV_3 3 /* NDIS 6.30 */ 12677c4f5aaSSepherosa Ziehau 12777a48d61SSepherosa Ziehau #define NDIS_OFFLOAD_PARAM_NOCHG 0 /* common */ 12877c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAM_OFF 1 12977c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAM_TX 2 13077c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAM_RX 3 13177c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_PARAM_TXRX 4 13277c4f5aaSSepherosa Ziehau 13377c4f5aaSSepherosa Ziehau /* NDIS_OFFLOAD_PARAM_NOCHG */ 13477c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_LSOV1_OFF 1 13577c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_LSOV1_ON 2 13677c4f5aaSSepherosa Ziehau 13777c4f5aaSSepherosa Ziehau /* NDIS_OFFLOAD_PARAM_NOCHG */ 13877c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV1_OFF 1 13977c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV1_AH 2 14077c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV1_ESP 3 14177c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV1_AH_ESP 4 14277c4f5aaSSepherosa Ziehau 14377c4f5aaSSepherosa Ziehau /* NDIS_OFFLOAD_PARAM_NOCHG */ 14477c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_LSOV2_OFF 1 14577c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_LSOV2_ON 2 14677c4f5aaSSepherosa Ziehau 14777c4f5aaSSepherosa Ziehau /* NDIS_OFFLOAD_PARAM_NOCHG */ 14877c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV2_OFF 1 14977c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV2_AH 2 15077c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV2_ESP 3 15177c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_IPSECV2_AH_ESP 4 15277c4f5aaSSepherosa Ziehau 15377c4f5aaSSepherosa Ziehau /* NDIS_OFFLOAD_PARAM_NOCHG */ 15477c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_RSC_OFF 1 15577c4f5aaSSepherosa Ziehau #define NDIS_OFFLOAD_RSC_ON 2 15677c4f5aaSSepherosa Ziehau 157e4e0ef79SSepherosa Ziehau /* 1588bb1a21bSSepherosa Ziehau * OID_GEN_RECEIVE_SCALE_CAPABILITIES 159e4e0ef79SSepherosa Ziehau * ndis_type: NDIS_OBJTYPE_RSS_CAPS 160e4e0ef79SSepherosa Ziehau */ 161e4e0ef79SSepherosa Ziehau struct ndis_rss_caps { 162e4e0ef79SSepherosa Ziehau struct ndis_object_hdr ndis_hdr; 16320b3dcf0SSepherosa Ziehau uint32_t ndis_caps; /* NDIS_RSS_CAP_ */ 164e4e0ef79SSepherosa Ziehau uint32_t ndis_nmsi; /* # of MSIs */ 165e4e0ef79SSepherosa Ziehau uint32_t ndis_nrxr; /* # of RX rings */ 166e4e0ef79SSepherosa Ziehau /* NDIS >= 6.30 */ 167e4e0ef79SSepherosa Ziehau uint16_t ndis_nind; /* # of indtbl ent. */ 168e4e0ef79SSepherosa Ziehau uint16_t ndis_pad; 169e4e0ef79SSepherosa Ziehau }; 170e4e0ef79SSepherosa Ziehau 171e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAPS_SIZE \ 172e4e0ef79SSepherosa Ziehau __offsetof(struct ndis_rss_caps, ndis_pad) 173e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAPS_SIZE_6_0 \ 174e4e0ef79SSepherosa Ziehau __offsetof(struct ndis_rss_caps, ndis_nind) 175e4e0ef79SSepherosa Ziehau 176e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAPS_REV_1 1 /* NDIS 6.{0,1,20} */ 177e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAPS_REV_2 2 /* NDIS 6.30 */ 178e4e0ef79SSepherosa Ziehau 179e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAP_MSI 0x01000000 180e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAP_CLASSIFY_ISR 0x02000000 181e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAP_CLASSIFY_DPC 0x04000000 182e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAP_MSIX 0x08000000 183e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAP_IPV4 0x00000100 184e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAP_IPV6 0x00000200 185e4e0ef79SSepherosa Ziehau #define NDIS_RSS_CAP_IPV6_EX 0x00000400 18620b3dcf0SSepherosa Ziehau #define NDIS_RSS_CAP_HASH_TOEPLITZ NDIS_HASH_FUNCTION_TOEPLITZ 18720b3dcf0SSepherosa Ziehau #define NDIS_RSS_CAP_HASHFUNC_MASK NDIS_HASH_FUNCTION_MASK 188e4e0ef79SSepherosa Ziehau 189fdda7728SSepherosa Ziehau /* 1908bb1a21bSSepherosa Ziehau * OID_GEN_RECEIVE_SCALE_PARAMETERS 191fdda7728SSepherosa Ziehau * ndis_type: NDIS_OBJTYPE_RSS_PARAMS 192fdda7728SSepherosa Ziehau */ 193fdda7728SSepherosa Ziehau struct ndis_rss_params { 194fdda7728SSepherosa Ziehau struct ndis_object_hdr ndis_hdr; 195fdda7728SSepherosa Ziehau uint16_t ndis_flags; /* NDIS_RSS_FLAG_ */ 196fdda7728SSepherosa Ziehau uint16_t ndis_bcpu; /* base cpu 0 */ 197fdda7728SSepherosa Ziehau uint32_t ndis_hash; /* NDIS_HASH_ */ 198fdda7728SSepherosa Ziehau uint16_t ndis_indsize; /* indirect table */ 199fdda7728SSepherosa Ziehau uint32_t ndis_indoffset; 200fdda7728SSepherosa Ziehau uint16_t ndis_keysize; /* hash key */ 201fdda7728SSepherosa Ziehau uint32_t ndis_keyoffset; 202fdda7728SSepherosa Ziehau /* NDIS >= 6.20 */ 203fdda7728SSepherosa Ziehau uint32_t ndis_cpumaskoffset; 204fdda7728SSepherosa Ziehau uint32_t ndis_cpumaskcnt; 205fdda7728SSepherosa Ziehau uint32_t ndis_cpumaskentsz; 206fdda7728SSepherosa Ziehau }; 207fdda7728SSepherosa Ziehau 208fdda7728SSepherosa Ziehau #define NDIS_RSS_PARAMS_SIZE sizeof(struct ndis_rss_params) 209fdda7728SSepherosa Ziehau #define NDIS_RSS_PARAMS_SIZE_6_0 \ 210fdda7728SSepherosa Ziehau __offsetof(struct ndis_rss_params, ndis_cpumaskoffset) 211fdda7728SSepherosa Ziehau 212fdda7728SSepherosa Ziehau #define NDIS_RSS_PARAMS_REV_1 1 /* NDIS 6.0 */ 213fdda7728SSepherosa Ziehau #define NDIS_RSS_PARAMS_REV_2 2 /* NDIS 6.20 */ 214fdda7728SSepherosa Ziehau 2158084aabeSSepherosa Ziehau #define NDIS_RSS_FLAG_NONE 0x0000 216fdda7728SSepherosa Ziehau #define NDIS_RSS_FLAG_BCPU_UNCHG 0x0001 217fdda7728SSepherosa Ziehau #define NDIS_RSS_FLAG_HASH_UNCHG 0x0002 218fdda7728SSepherosa Ziehau #define NDIS_RSS_FLAG_IND_UNCHG 0x0004 219fdda7728SSepherosa Ziehau #define NDIS_RSS_FLAG_KEY_UNCHG 0x0008 220fdda7728SSepherosa Ziehau #define NDIS_RSS_FLAG_DISABLE 0x0010 221fdda7728SSepherosa Ziehau 222fdda7728SSepherosa Ziehau /* non-standard convenient struct */ 223fdda7728SSepherosa Ziehau struct ndis_rssprm_toeplitz { 224fdda7728SSepherosa Ziehau struct ndis_rss_params rss_params; 225fdda7728SSepherosa Ziehau /* Toeplitz hash key */ 226fdda7728SSepherosa Ziehau uint8_t rss_key[NDIS_HASH_KEYSIZE_TOEPLITZ]; 227fdda7728SSepherosa Ziehau /* Indirect table */ 228fdda7728SSepherosa Ziehau uint32_t rss_ind[NDIS_HASH_INDCNT]; 229fdda7728SSepherosa Ziehau }; 230fdda7728SSepherosa Ziehau 23120b3dcf0SSepherosa Ziehau #define NDIS_RSSPRM_TOEPLITZ_SIZE(nind) \ 23220b3dcf0SSepherosa Ziehau __offsetof(struct ndis_rssprm_toeplitz, rss_ind[nind]) 23320b3dcf0SSepherosa Ziehau 234b34d3ad6SSepherosa Ziehau /* 23565ca3310SSepherosa Ziehau * OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES 23665ca3310SSepherosa Ziehau * ndis_type: NDIS_OBJTYPE_OFFLOAD 23765ca3310SSepherosa Ziehau */ 23865ca3310SSepherosa Ziehau 23965ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_ENCAP_NONE 0x0000 24065ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_ENCAP_NULL 0x0001 24165ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_ENCAP_8023 0x0002 24265ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_ENCAP_8023PQ 0x0004 24365ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_ENCAP_8023PQ_OOB 0x0008 24465ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_ENCAP_RFC1483 0x0010 24565ca3310SSepherosa Ziehau 24665ca3310SSepherosa Ziehau struct ndis_csum_offload { 24765ca3310SSepherosa Ziehau uint32_t ndis_ip4_txenc; /*NDIS_OFFLOAD_ENCAP_*/ 24865ca3310SSepherosa Ziehau uint32_t ndis_ip4_txcsum; 24965ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_IP4OPT 0x001 25065ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_TCP4OPT 0x004 25165ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_TCP4 0x010 25265ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_UDP4 0x040 25365ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_IP4 0x100 25465ca3310SSepherosa Ziehau uint32_t ndis_ip4_rxenc; /*NDIS_OFFLOAD_ENCAP_*/ 25565ca3310SSepherosa Ziehau uint32_t ndis_ip4_rxcsum; 25665ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_IP4OPT 0x001 25765ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_TCP4OPT 0x004 25865ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_TCP4 0x010 25965ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_UDP4 0x040 26065ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_IP4 0x100 26165ca3310SSepherosa Ziehau uint32_t ndis_ip6_txenc; /*NDIS_OFFLOAD_ENCAP_*/ 26265ca3310SSepherosa Ziehau uint32_t ndis_ip6_txcsum; 26365ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_IP6EXT 0x001 26465ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_TCP6OPT 0x004 26565ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_TCP6 0x010 26665ca3310SSepherosa Ziehau #define NDIS_TXCSUM_CAP_UDP6 0x040 26765ca3310SSepherosa Ziehau uint32_t ndis_ip6_rxenc; /*NDIS_OFFLOAD_ENCAP_*/ 26865ca3310SSepherosa Ziehau uint32_t ndis_ip6_rxcsum; 26965ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_IP6EXT 0x001 27065ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_TCP6OPT 0x004 27165ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_TCP6 0x010 27265ca3310SSepherosa Ziehau #define NDIS_RXCSUM_CAP_UDP6 0x040 27365ca3310SSepherosa Ziehau }; 27465ca3310SSepherosa Ziehau 27565ca3310SSepherosa Ziehau struct ndis_lsov1_offload { 27665ca3310SSepherosa Ziehau uint32_t ndis_encap; /*NDIS_OFFLOAD_ENCAP_*/ 27765ca3310SSepherosa Ziehau uint32_t ndis_maxsize; 27865ca3310SSepherosa Ziehau uint32_t ndis_minsegs; 27965ca3310SSepherosa Ziehau uint32_t ndis_opts; 28065ca3310SSepherosa Ziehau }; 28165ca3310SSepherosa Ziehau 28265ca3310SSepherosa Ziehau struct ndis_ipsecv1_offload { 28365ca3310SSepherosa Ziehau uint32_t ndis_encap; /*NDIS_OFFLOAD_ENCAP_*/ 28465ca3310SSepherosa Ziehau uint32_t ndis_ah_esp; 28565ca3310SSepherosa Ziehau uint32_t ndis_xport_tun; 28665ca3310SSepherosa Ziehau uint32_t ndis_ip4_opts; 28765ca3310SSepherosa Ziehau uint32_t ndis_flags; 28865ca3310SSepherosa Ziehau uint32_t ndis_ip4_ah; 28965ca3310SSepherosa Ziehau uint32_t ndis_ip4_esp; 29065ca3310SSepherosa Ziehau }; 29165ca3310SSepherosa Ziehau 29265ca3310SSepherosa Ziehau struct ndis_lsov2_offload { 29365ca3310SSepherosa Ziehau uint32_t ndis_ip4_encap; /*NDIS_OFFLOAD_ENCAP_*/ 29465ca3310SSepherosa Ziehau uint32_t ndis_ip4_maxsz; 29565ca3310SSepherosa Ziehau uint32_t ndis_ip4_minsg; 29665ca3310SSepherosa Ziehau uint32_t ndis_ip6_encap; /*NDIS_OFFLOAD_ENCAP_*/ 29765ca3310SSepherosa Ziehau uint32_t ndis_ip6_maxsz; 29865ca3310SSepherosa Ziehau uint32_t ndis_ip6_minsg; 29965ca3310SSepherosa Ziehau uint32_t ndis_ip6_opts; 30065ca3310SSepherosa Ziehau #define NDIS_LSOV2_CAP_IP6EXT 0x001 30165ca3310SSepherosa Ziehau #define NDIS_LSOV2_CAP_TCP6OPT 0x004 30265ca3310SSepherosa Ziehau }; 30365ca3310SSepherosa Ziehau 30465ca3310SSepherosa Ziehau struct ndis_ipsecv2_offload { 30565ca3310SSepherosa Ziehau uint32_t ndis_encap; /*NDIS_OFFLOAD_ENCAP_*/ 306*a491581fSWei Hu uint8_t ndis_ip6; 307*a491581fSWei Hu uint8_t ndis_ip4opt; 308*a491581fSWei Hu uint8_t ndis_ip6ext; 309*a491581fSWei Hu uint8_t ndis_ah; 310*a491581fSWei Hu uint8_t ndis_esp; 311*a491581fSWei Hu uint8_t ndis_ah_esp; 312*a491581fSWei Hu uint8_t ndis_xport; 313*a491581fSWei Hu uint8_t ndis_tun; 314*a491581fSWei Hu uint8_t ndis_xport_tun; 315*a491581fSWei Hu uint8_t ndis_lso; 316*a491581fSWei Hu uint8_t ndis_extseq; 31765ca3310SSepherosa Ziehau uint32_t ndis_udp_esp; 31865ca3310SSepherosa Ziehau uint32_t ndis_auth; 31965ca3310SSepherosa Ziehau uint32_t ndis_crypto; 32065ca3310SSepherosa Ziehau uint32_t ndis_sa_caps; 32165ca3310SSepherosa Ziehau }; 32265ca3310SSepherosa Ziehau 32365ca3310SSepherosa Ziehau struct ndis_rsc_offload { 324*a491581fSWei Hu uint8_t ndis_ip4; 325*a491581fSWei Hu uint8_t ndis_ip6; 32665ca3310SSepherosa Ziehau }; 32765ca3310SSepherosa Ziehau 32865ca3310SSepherosa Ziehau struct ndis_encap_offload { 32965ca3310SSepherosa Ziehau uint32_t ndis_flags; 33065ca3310SSepherosa Ziehau uint32_t ndis_maxhdr; 33165ca3310SSepherosa Ziehau }; 33265ca3310SSepherosa Ziehau 33365ca3310SSepherosa Ziehau struct ndis_offload { 33465ca3310SSepherosa Ziehau struct ndis_object_hdr ndis_hdr; 33565ca3310SSepherosa Ziehau struct ndis_csum_offload ndis_csum; 33665ca3310SSepherosa Ziehau struct ndis_lsov1_offload ndis_lsov1; 33765ca3310SSepherosa Ziehau struct ndis_ipsecv1_offload ndis_ipsecv1; 33865ca3310SSepherosa Ziehau struct ndis_lsov2_offload ndis_lsov2; 33965ca3310SSepherosa Ziehau uint32_t ndis_flags; 34065ca3310SSepherosa Ziehau /* NDIS >= 6.1 */ 34165ca3310SSepherosa Ziehau struct ndis_ipsecv2_offload ndis_ipsecv2; 34265ca3310SSepherosa Ziehau /* NDIS >= 6.30 */ 34365ca3310SSepherosa Ziehau struct ndis_rsc_offload ndis_rsc; 34465ca3310SSepherosa Ziehau struct ndis_encap_offload ndis_encap_gre; 34565ca3310SSepherosa Ziehau }; 34665ca3310SSepherosa Ziehau 34765ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_SIZE sizeof(struct ndis_offload) 3485d67f675SSepherosa Ziehau #define NDIS_OFFLOAD_SIZE_6_0 \ 34965ca3310SSepherosa Ziehau __offsetof(struct ndis_offload, ndis_ipsecv2) 3505d67f675SSepherosa Ziehau #define NDIS_OFFLOAD_SIZE_6_1 \ 35165ca3310SSepherosa Ziehau __offsetof(struct ndis_offload, ndis_rsc) 35265ca3310SSepherosa Ziehau 35365ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_REV_1 1 /* NDIS 6.0 */ 35465ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_REV_2 2 /* NDIS 6.1 */ 35565ca3310SSepherosa Ziehau #define NDIS_OFFLOAD_REV_3 3 /* NDIS 6.30 */ 35665ca3310SSepherosa Ziehau 35765ca3310SSepherosa Ziehau /* 358b34d3ad6SSepherosa Ziehau * Per-packet-info 359b34d3ad6SSepherosa Ziehau */ 360b34d3ad6SSepherosa Ziehau 361b34d3ad6SSepherosa Ziehau /* VLAN */ 362b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_SIZE sizeof(uint32_t) 363b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_PRI_MASK 0x0007 364b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_CFI_MASK 0x0008 365b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_ID_MASK 0xfff0 366b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_MAKE(id, pri, cfi) \ 36714ee29baSSepherosa Ziehau (((pri) & NDIS_VLAN_INFO_PRI_MASK) | \ 368b34d3ad6SSepherosa Ziehau (((cfi) & 0x1) << 3) | (((id) & 0xfff) << 4)) 369b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_ID(inf) (((inf) & NDIS_VLAN_INFO_ID_MASK) >> 4) 370b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_CFI(inf) (((inf) & NDIS_VLAN_INFO_CFI_MASK) >> 3) 371b34d3ad6SSepherosa Ziehau #define NDIS_VLAN_INFO_PRI(inf) ((inf) & NDIS_VLAN_INFO_PRI_MASK) 372b34d3ad6SSepherosa Ziehau 373a1910515SSepherosa Ziehau /* Reception checksum */ 374a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_SIZE sizeof(uint32_t) 375a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_TCPCS_FAILED 0x0001 376a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_UDPCS_FAILED 0x0002 377a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_IPCS_FAILED 0x0004 378a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_TCPCS_OK 0x0008 379a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_UDPCS_OK 0x0010 380a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_IPCS_OK 0x0020 381a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_LOOPBACK 0x0040 382a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_TCPCS_INVAL 0x0080 383a1910515SSepherosa Ziehau #define NDIS_RXCSUM_INFO_IPCS_INVAL 0x0100 384a1910515SSepherosa Ziehau 38550002d3dSSepherosa Ziehau /* LSOv2 */ 3865761f5dfSSepherosa Ziehau #define NDIS_LSO2_INFO_SIZE sizeof(uint32_t) 38750002d3dSSepherosa Ziehau #define NDIS_LSO2_INFO_MSS_MASK 0x000fffff 38850002d3dSSepherosa Ziehau #define NDIS_LSO2_INFO_THOFF_MASK 0x3ff00000 38950002d3dSSepherosa Ziehau #define NDIS_LSO2_INFO_ISLSO2 0x40000000 39050002d3dSSepherosa Ziehau #define NDIS_LSO2_INFO_ISIPV6 0x80000000 39150002d3dSSepherosa Ziehau 39250002d3dSSepherosa Ziehau #define NDIS_LSO2_INFO_MAKE(thoff, mss) \ 39350002d3dSSepherosa Ziehau ((((uint32_t)(mss)) & NDIS_LSO2_INFO_MSS_MASK) | \ 39450002d3dSSepherosa Ziehau ((((uint32_t)(thoff)) & 0x3ff) << 20) | \ 39550002d3dSSepherosa Ziehau NDIS_LSO2_INFO_ISLSO2) 39650002d3dSSepherosa Ziehau 39750002d3dSSepherosa Ziehau #define NDIS_LSO2_INFO_MAKEIPV4(thoff, mss) \ 39850002d3dSSepherosa Ziehau NDIS_LSO2_INFO_MAKE((thoff), (mss)) 39950002d3dSSepherosa Ziehau 40050002d3dSSepherosa Ziehau #define NDIS_LSO2_INFO_MAKEIPV6(thoff, mss) \ 40150002d3dSSepherosa Ziehau (NDIS_LSO2_INFO_MAKE((thoff), (mss)) | NDIS_LSO2_INFO_ISIPV6) 40250002d3dSSepherosa Ziehau 4035761f5dfSSepherosa Ziehau /* Transmission checksum */ 4045761f5dfSSepherosa Ziehau #define NDIS_TXCSUM_INFO_SIZE sizeof(uint32_t) 4055761f5dfSSepherosa Ziehau #define NDIS_TXCSUM_INFO_IPV4 0x00000001 4065761f5dfSSepherosa Ziehau #define NDIS_TXCSUM_INFO_IPV6 0x00000002 4075761f5dfSSepherosa Ziehau #define NDIS_TXCSUM_INFO_TCPCS 0x00000004 4085761f5dfSSepherosa Ziehau #define NDIS_TXCSUM_INFO_UDPCS 0x00000008 4095761f5dfSSepherosa Ziehau #define NDIS_TXCSUM_INFO_IPCS 0x00000010 4105761f5dfSSepherosa Ziehau #define NDIS_TXCSUM_INFO_THOFF 0x03ff0000 4115761f5dfSSepherosa Ziehau 412c49d47daSSepherosa Ziehau #define NDIS_TXCSUM_INFO_MKL4CS(thoff, flag) \ 413c49d47daSSepherosa Ziehau ((((uint32_t)(thoff)) << 16) | (flag)) 414c49d47daSSepherosa Ziehau 415c49d47daSSepherosa Ziehau #define NDIS_TXCSUM_INFO_MKTCPCS(thoff) \ 416c49d47daSSepherosa Ziehau NDIS_TXCSUM_INFO_MKL4CS((thoff), NDIS_TXCSUM_INFO_TCPCS) 417c49d47daSSepherosa Ziehau 418c49d47daSSepherosa Ziehau #define NDIS_TXCSUM_INFO_MKUDPCS(thoff) \ 419c49d47daSSepherosa Ziehau NDIS_TXCSUM_INFO_MKL4CS((thoff), NDIS_TXCSUM_INFO_UDPCS) 42077c4f5aaSSepherosa Ziehau #endif /* !_NET_NDIS_H_ */ 421