1 /* 2 * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /** 21 * DOC: qdf_net_types 22 * This file defines types used in the networking stack abstraction. 23 */ 24 25 #ifndef _QDF_NET_TYPES_H 26 #define _QDF_NET_TYPES_H 27 28 #include <qdf_types.h> /* uint8_t, etc. */ 29 #include <i_qdf_net_types.h> 30 31 /* Extended Traffic ID passed to target if the TID is unknown */ 32 #define QDF_NBUF_TX_EXT_TID_INVALID 0x1f 33 34 /** 35 * enum qdf_nbuf_exemption_type - QDF net buf exemption types for encryption 36 * @QDF_NBUF_EXEMPT_NO_EXEMPTION: No exemption 37 * @QDF_NBUF_EXEMPT_ALWAYS: Exempt always 38 * @QDF_NBUF_EXEMPT_ON_KEY_MAPPING_KEY_UNAVAILABLE: Exempt on key mapping 39 */ 40 enum qdf_nbuf_exemption_type { 41 QDF_NBUF_EXEMPT_NO_EXEMPTION = 0, 42 QDF_NBUF_EXEMPT_ALWAYS, 43 QDF_NBUF_EXEMPT_ON_KEY_MAPPING_KEY_UNAVAILABLE 44 }; 45 46 typedef __wsum_t wsum_t; 47 typedef __in6_addr_t in6_addr_t; 48 49 50 #define QDF_NET_MAC_ADDR_MAX_LEN 6 51 #define QDF_NET_IF_NAME_SIZE 64 52 #define QDF_NET_ETH_LEN QDF_NET_MAC_ADDR_MAX_LEN 53 #define QDF_NET_MAX_MCAST_ADDR 64 54 #define QDF_NET_IPV4_LEN 4 55 #define QDF_TID_VI 5 56 #define QDF_TID_VO 6 57 #define QDF_TID_BE 0 58 #define QDF_TID_BK 1 59 /* Extended Traffic ID passed to target if the TID is unknown */ 60 #define QDF_NBUF_TX_EXT_TID_INVALID 0x1f 61 62 #define QDF_ETH_TYPE_IPV4 0x0800 /* IPV4 */ 63 #define QDF_ETH_TYPE_IPV6 0x86dd /* IPV6 */ 64 #define QDF_ETH_TYPE_8021Q 0x8100 /* 802.1Q vlan protocol */ 65 #define QDF_ETH_TYPE_8021AD 0x88a8 /* 802.1AD vlan protocol */ 66 #define QDF_IEEE80211_4ADDR_HDR_LEN 30 67 #define QDF_IEEE80211_3ADDR_HDR_LEN 24 68 #define QDF_IEEE80211_FC0_SUBTYPE_QOS 0x80 69 #define QDF_IEEE80211_FC1_TODS 0x01 70 #define QDF_IEEE80211_FC1_FROMDS 0x02 71 #define QDF_IEEE80211_FC1_PM 0x10 72 73 #define QDF_IEEE80211_FC0_VERSION_0 0x00 74 #define QDF_IEEE80211_FC0_VERSION_MASK 0x03 75 #define QDF_IEEE80211_FC0_TYPE_MASK 0x0c 76 #define QDF_IEEE80211_FC0_SUBTYPE_MASK 0xf0 77 78 #define QDF_IEEE80211_FC0_TYPE_MGT 0x00 79 80 #define QDF_IEEE80211_FC0_TYPE_DATA 0x08 81 #define QDF_IEEE80211_FC0_SUBTYPE_DATA 0x00 82 #define QDF_IEEE80211_FC0_SUBTYPE_QOS 0x80 83 84 #define QDF_IEEE80211_FC0_SUBTYPE_QOS_NULL 0xC0 85 #define QDF_IEEE80211_FC0_SUBTYPE_NODATA 0x40 86 87 #define QDF_IEEE80211_FC0_TYPE_CTL 0x04 88 #define QDF_IEEE80211_FC0_SUBTYPE_BEAM_REPORT_POLL 0x40 89 #define QDF_IEEE80211_FC0_SUBTYPE_VHT_NDP_AN 0x50 90 #define QDF_IEEE80211_FC0_SUBTYPE_CTL_FRAME_EXTN 0x60 91 #define QDF_IEEE80211_FC0_SUBTYPE_CTL_WRAPPER 0x70 92 #define QDF_IEEE80211_FC0_SUBTYPE_BAR 0x80 93 #define QDF_IEEE80211_FC0_SUBTYPE_BA 0x90 94 #define QDF_IEEE80211_FC0_SUBTYPE_PSPOLL 0xA0 95 #define QDF_IEEE80211_FC0_SUBTYPE_RTS 0xB0 96 #define QDF_IEEE80211_FC0_SUBTYPE_CTS 0xC0 97 #define QDF_IEEE80211_FC0_SUBTYPE_ACK 0xD0 98 #define QDF_IEEE80211_FC0_SUBTYPE_CF_END 0xE0 99 #define QDF_IEEE80211_FC0_SUBTYPE_CF_END_CF_ACK 0xF0 100 101 #define QDF_NET_IS_MAC_MULTICAST(_a) (*(_a) & 0x01) 102 103 /* 104 * In LLC header individual LSAP address 0x42 in 105 * DSAP and SSAP signifies IEEE 802.1 Bridge 106 * Spanning Tree Protocol 107 */ 108 #define QDF_LLC_STP 0x4242 109 110 typedef struct qdf_net_ethaddr { 111 uint8_t addr[QDF_NET_ETH_LEN]; 112 } qdf_net_ethaddr_t; 113 114 /** 115 * typedef qdf_net_arphdr_t - ARP header info 116 * @ar_hrd: hardware type 117 * @ar_pro: protocol type 118 * @ar_hln: hardware address length 119 * @ar_pln: protocol length 120 * @ar_op: arp operation code 121 * @ar_sha: sender hardware address 122 * @ar_sip: sender IP address 123 * @ar_tha: target hardware address 124 * @ar_tip: target IP address 125 */ 126 typedef struct qdf_net_arphdr { 127 uint16_t ar_hrd; 128 uint16_t ar_pro; 129 uint8_t ar_hln; 130 uint8_t ar_pln; 131 uint16_t ar_op; 132 uint8_t ar_sha[QDF_NET_ETH_LEN]; 133 uint8_t ar_sip[QDF_NET_IPV4_LEN]; 134 uint8_t ar_tha[QDF_NET_ETH_LEN]; 135 uint8_t ar_tip[QDF_NET_IPV4_LEN]; 136 } qdf_net_arphdr_t; 137 138 /** 139 * typedef qdf_net_icmp6_11addr_t - ICMP6 header info 140 * @type: hardware type 141 * @len: hardware address length 142 * @addr: hardware address 143 */ 144 typedef struct qdf_net_icmp6_11addr { 145 uint8_t type; 146 uint8_t len; 147 uint8_t addr[QDF_NET_ETH_LEN]; 148 } qdf_net_icmp6_11addr_t; 149 150 #define QDF_TCPHDR_FIN __QDF_TCPHDR_FIN 151 #define QDF_TCPHDR_SYN __QDF_TCPHDR_SYN 152 #define QDF_TCPHDR_RST __QDF_TCPHDR_RST 153 #define QDF_TCPHDR_PSH __QDF_TCPHDR_PSH 154 #define QDF_TCPHDR_ACK __QDF_TCPHDR_ACK 155 #define QDF_TCPHDR_URG __QDF_TCPHDR_URG 156 #define QDF_TCPHDR_ECE __QDF_TCPHDR_ECE 157 #define QDF_TCPHDR_CWR __QDF_TCPHDR_CWR 158 159 typedef struct { 160 uint16_t source; 161 uint16_t dest; 162 uint32_t seq; 163 uint32_t ack_seq; 164 #if defined(QDF_LITTLE_ENDIAN_MACHINE) 165 uint16_t res1:4, 166 doff:4, 167 fin:1, 168 syn:1, 169 rst:1, 170 psh:1, 171 ack:1, 172 urg:1, 173 ece:1, 174 cwr:1; 175 #elif defined(QDF_BIG_ENDIAN_MACHINE) 176 uint16_t doff:4, 177 res1:4, 178 cwr:1, 179 ece:1, 180 urg:1, 181 ack:1, 182 psh:1, 183 rst:1, 184 syn:1, 185 fin:1; 186 #else 187 #error "Adjust your byte order" 188 #endif 189 uint16_t window; 190 uint16_t check; 191 uint16_t urg_ptr; 192 } qdf_net_tcphdr_t; 193 194 typedef struct { 195 #if defined(QDF_LITTLE_ENDIAN_MACHINE) 196 uint8_t ip_hl:4, 197 ip_version:4; 198 #elif defined(QDF_BIG_ENDIAN_MACHINE) 199 uint8_t ip_version:4, 200 ip_hl:4; 201 #else 202 #error "Please fix" 203 #endif 204 uint8_t ip_tos; 205 uint16_t ip_len; 206 uint16_t ip_id; 207 uint16_t ip_frag_off; 208 uint8_t ip_ttl; 209 uint8_t ip_proto; 210 uint16_t ip_check; 211 uint32_t ip_saddr; 212 uint32_t ip_daddr; 213 /*The options start here. */ 214 } qdf_net_iphdr_t; 215 216 /* V3 group record types [grec_type] */ 217 #define IGMPV3_MODE_IS_INCLUDE 1 218 #define IGMPV3_MODE_IS_EXCLUDE 2 219 #define IGMPV3_CHANGE_TO_INCLUDE 3 220 #define IGMPV3_CHANGE_TO_EXCLUDE 4 221 #define IGMPV3_ALLOW_NEW_SOURCES 5 222 #define IGMPV3_BLOCK_OLD_SOURCES 6 223 224 /** 225 * typedef qdf_net_cmd_vid_t - Command for set/unset vid 226 */ 227 typedef uint16_t qdf_net_cmd_vid_t ; /*get/set vlan id*/ 228 229 /** 230 * typedef qdf_nbuf_tx_cksum_t - transmit checksum offload types 231 * @QDF_NBUF_TX_CKSUM_NONE: No checksum offload 232 * @QDF_NBUF_TX_CKSUM_IP: IP header checksum offload 233 * @QDF_NBUF_TX_CKSUM_TCP_UDP: TCP/UDP checksum offload 234 * @QDF_NBUF_TX_CKSUM_TCP_UDP_IP: TCP/UDP and IP header checksum offload 235 */ 236 237 typedef enum { 238 QDF_NBUF_TX_CKSUM_NONE, 239 QDF_NBUF_TX_CKSUM_IP, 240 QDF_NBUF_TX_CKSUM_TCP_UDP, 241 QDF_NBUF_TX_CKSUM_TCP_UDP_IP, 242 243 } qdf_nbuf_tx_cksum_t; 244 245 /** 246 * typedef qdf_nbuf_l4_rx_cksum_type_t - receive checksum API types 247 * @QDF_NBUF_RX_CKSUM_ZERO: Rx checksum zero 248 * @QDF_NBUF_RX_CKSUM_TCP: Rx checksum TCP 249 * @QDF_NBUF_RX_CKSUM_UDP: Rx checksum UDP 250 * @QDF_NBUF_RX_CKSUM_TCPIPV6: Rx checksum TCP IPV6 251 * @QDF_NBUF_RX_CKSUM_UDPIPV6: Rx checksum UDP IPV6 252 * @QDF_NBUF_RX_CKSUM_TCP_NOPSEUDOHEADER: Rx checksum TCP no pseudo header 253 * @QDF_NBUF_RX_CKSUM_UDP_NOPSEUDOHEADER: Rx checksum UDP no pseudo header 254 * @QDF_NBUF_RX_CKSUM_TCPSUM16: Rx checksum TCP SUM16 255 */ 256 typedef enum { 257 QDF_NBUF_RX_CKSUM_ZERO = 0x0000, 258 QDF_NBUF_RX_CKSUM_TCP = 0x0001, 259 QDF_NBUF_RX_CKSUM_UDP = 0x0002, 260 QDF_NBUF_RX_CKSUM_TCPIPV6 = 0x0010, 261 QDF_NBUF_RX_CKSUM_UDPIPV6 = 0x0020, 262 QDF_NBUF_RX_CKSUM_TCP_NOPSEUDOHEADER = 0x0100, 263 QDF_NBUF_RX_CKSUM_UDP_NOPSEUDOHEADER = 0x0200, 264 QDF_NBUF_RX_CKSUM_TCPSUM16 = 0x1000, 265 } qdf_nbuf_l4_rx_cksum_type_t; 266 267 /** 268 * typedef qdf_nbuf_l4_rx_cksum_result_t - receive checksum status types 269 * @QDF_NBUF_RX_CKSUM_NONE: Device failed to checksum 270 * @QDF_NBUF_RX_CKSUM_TCP_UDP_HW: TCP/UDP cksum successful and value returned 271 * @QDF_NBUF_RX_CKSUM_TCP_UDP_UNNECESSARY: TCP/UDP cksum successful, no value 272 */ 273 typedef enum { 274 QDF_NBUF_RX_CKSUM_NONE = 0x0000, 275 QDF_NBUF_RX_CKSUM_TCP_UDP_HW = 0x0010, 276 QDF_NBUF_RX_CKSUM_TCP_UDP_UNNECESSARY = 0x0020, 277 } qdf_nbuf_l4_rx_cksum_result_t; 278 279 /** 280 * typedef qdf_nbuf_rx_cksum_t - receive checksum type 281 * @l4_type: L4 type 282 * @l4_result: L4 result 283 * @csum_level: indicates number of checksum are calculated 284 */ 285 typedef struct { 286 qdf_nbuf_l4_rx_cksum_type_t l4_type; 287 qdf_nbuf_l4_rx_cksum_result_t l4_result; 288 uint32_t val; 289 uint32_t csum_level; 290 } qdf_nbuf_rx_cksum_t; 291 292 #define QDF_ARP_REQ 1 /* ARP request */ 293 #define QDF_ARP_RSP 2 /* ARP response */ 294 #define QDF_ARP_RREQ 3 /* RARP request */ 295 #define QDF_ARP_RRSP 4 /* RARP response */ 296 297 #define QDF_NEXTHDR_ICMP 58 /* ICMP for IPv6. */ 298 299 /* Neighbor Discovery */ 300 #define QDF_ND_RSOL 133 /* Router Solicitation */ 301 #define QDF_ND_RADVT 134 /* Router Advertisement */ 302 #define QDF_ND_NSOL 135 /* Neighbor Solicitation */ 303 #define QDF_ND_NADVT 136 /* Neighbor Advertisement */ 304 305 /** 306 * typedef qdf_net_udphdr_t - UDP header info 307 * @src_port: source port 308 * @dst_port: destination port 309 * @udp_len: length 310 * @udp_cksum: checksum 311 */ 312 typedef struct { 313 uint16_t src_port; 314 uint16_t dst_port; 315 uint16_t udp_len; 316 uint16_t udp_cksum; 317 } qdf_net_udphdr_t; 318 319 /** 320 * typedef qdf_net_dhcphdr_t - DHCP header info 321 * @dhcp_msg_type: message type 322 * @dhcp_hw_type: hardware type 323 * @dhcp_hw_addr_len: hardware address length 324 * @dhcp_num_hops: number of hops 325 * @dhcp_transc_id: transaction id 326 * @dhcp_secs_elapsed: time elapsed 327 * @dhcp_flags: flags 328 * @dhcp_ciaddr: client IP 329 * @dhcp_yiaddr: device IP 330 * @dhcp_siaddr_nip: Server IP 331 * @dhcp_gateway_nip: relay agent IP 332 * @dhcp_chaddr: LLC hardware address 333 * @dhcp_sname: server host name 334 * @dhcp_file: boot file name 335 * @dhcp_cookie: cookie 336 */ 337 typedef struct { 338 uint8_t dhcp_msg_type; 339 uint8_t dhcp_hw_type; 340 uint8_t dhcp_hw_addr_len; 341 uint8_t dhcp_num_hops; 342 uint32_t dhcp_transc_id; 343 uint16_t dhcp_secs_elapsed; 344 uint16_t dhcp_flags; 345 uint32_t dhcp_ciaddr; 346 uint32_t dhcp_yiaddr; 347 uint32_t dhcp_siaddr_nip; 348 uint32_t dhcp_gateway_nip; 349 uint8_t dhcp_chaddr[16]; 350 uint8_t dhcp_sname[64]; 351 uint8_t dhcp_file[128]; 352 uint8_t dhcp_cookie[4]; 353 } qdf_net_dhcphdr_t; 354 355 356 /** 357 * typedef qdf_net_vlanhdr_t - Vlan header 358 * @tpid: 359 * @vid: 360 * @cfi: 361 * @prio: 362 */ 363 typedef struct qdf_net_vlanhdr { 364 uint16_t tpid; 365 #if defined(QDF_LITTLE_ENDIAN_MACHINE) 366 uint16_t vid:12; /* Vlan id*/ 367 uint8_t cfi:1; /* reserved for CFI, don't use*/ 368 uint8_t prio:3; /* Priority*/ 369 #elif defined(QDF_BIG_ENDIAN_MACHINE) 370 uint8_t prio:3; /* Priority*/ 371 uint8_t cfi:1; /* reserved for CFI, don't use*/ 372 uint16_t vid:12; /* Vlan id*/ 373 #else 374 #error "Please fix" 375 #endif 376 } qdf_net_vlanhdr_t; 377 378 typedef struct qdf_net_vid { 379 #if defined(QDF_LITTLE_ENDIAN_MACHINE) 380 uint16_t val:12; 381 uint8_t res:4; 382 #elif defined(QDF_BIG_ENDIAN_MACHINE) 383 uint8_t res:4; 384 uint16_t val:12; 385 #else 386 #error "Please fix" 387 #endif 388 } qdf_net_vid_t; 389 390 typedef enum { 391 QDF_NET_TSO_NONE, 392 QDF_NET_TSO_IPV4, /**< for tsp ipv4 only*/ 393 QDF_NET_TSO_ALL, /**< ip4 & ipv6*/ 394 } qdf_net_tso_type_t; 395 396 /** 397 * typedef qdf_net_dev_info_t - Basic device info 398 * @if_name: 399 * @dev_addr: 400 * @header_len: 401 * @mtu_size: 402 * @unit: 403 */ 404 typedef struct { 405 uint8_t if_name[QDF_NET_IF_NAME_SIZE]; 406 uint8_t dev_addr[QDF_NET_MAC_ADDR_MAX_LEN]; 407 uint16_t header_len; 408 uint16_t mtu_size; 409 uint32_t unit; 410 } qdf_net_dev_info_t; 411 412 /** 413 * typedef qdf_nbuf_tso_t - For TCP large Segment Offload 414 * @type: 415 * @mss: 416 * @hdr_off: 417 */ 418 typedef struct { 419 qdf_net_tso_type_t type; 420 uint16_t mss; 421 uint8_t hdr_off; 422 } qdf_nbuf_tso_t; 423 424 /** 425 * typedef qdf_net_wireless_event_t - Wireless events 426 * @QDF_IEEE80211_ASSOC: station associate (bss mode) 427 * @QDF_IEEE80211_REASSOC: station re-associate (bss mode) 428 * @QDF_IEEE80211_DISASSOC: station disassociate (bss mode) 429 * @QDF_IEEE80211_JOIN: station join (ap mode) 430 * @QDF_IEEE80211_LEAVE: station leave (ap mode) 431 * @QDF_IEEE80211_SCAN: scan complete, results available 432 * @QDF_IEEE80211_REPLAY: sequence counter replay detected 433 * @QDF_IEEE80211_MICHAEL: Michael MIC failure detected 434 * @QDF_IEEE80211_REJOIN: station re-associate (ap mode) 435 * @QDF_CUSTOM_PUSH_BUTTON: WPS push button 436 */ 437 typedef enum qdf_net_wireless_events { 438 QDF_IEEE80211_ASSOC = __QDF_IEEE80211_ASSOC, 439 QDF_IEEE80211_REASSOC = __QDF_IEEE80211_REASSOC, 440 QDF_IEEE80211_DISASSOC = __QDF_IEEE80211_DISASSOC, 441 QDF_IEEE80211_JOIN = __QDF_IEEE80211_JOIN, 442 QDF_IEEE80211_LEAVE = __QDF_IEEE80211_LEAVE, 443 QDF_IEEE80211_SCAN = __QDF_IEEE80211_SCAN, 444 QDF_IEEE80211_REPLAY = __QDF_IEEE80211_REPLAY, 445 QDF_IEEE80211_MICHAEL = __QDF_IEEE80211_MICHAEL, 446 QDF_IEEE80211_REJOIN = __QDF_IEEE80211_REJOIN, 447 QDF_CUSTOM_PUSH_BUTTON = __QDF_CUSTOM_PUSH_BUTTON 448 } qdf_net_wireless_event_t; 449 450 /** 451 * typedef qdf_net_ipv6_addr_t - IPv6 Address 452 * @in6_u: union of IPv6 address representations 453 */ 454 typedef struct { 455 union { 456 uint8_t u6_addr8[16]; 457 uint16_t u6_addr16[8]; 458 uint32_t u6_addr32[4]; 459 } in6_u; 460 #define s6_addr32 in6_u.u6_addr32 461 } qdf_net_ipv6_addr_t; 462 463 /** 464 * struct qdf_net_ipv6hdr_t - IPv6 Header 465 * @ipv6_priority: 466 * @ipv6_version: 467 * @ipv6_flow_lbl: 468 * @ipv6_payload_len: 469 * @ipv6_nexthdr: 470 * @ipv6_hop_limit: 471 * @ipv6_saddr: 472 * @ipv6_daddr: 473 */ 474 typedef struct { 475 #if defined(QDF_LITTLE_ENDIAN_MACHINE) 476 uint8_t ipv6_priority:4, 477 ipv6_version:4; 478 #elif defined(QDF_BIG_ENDIAN_MACHINE) 479 uint8_t ipv6_version:4, 480 ipv6_priority:4; 481 #else 482 #error "Please fix" 483 #endif 484 uint8_t ipv6_flow_lbl[3]; 485 486 uint16_t ipv6_payload_len; 487 uint8_t ipv6_nexthdr, 488 ipv6_hop_limit; 489 490 qdf_net_ipv6_addr_t ipv6_saddr, 491 ipv6_daddr; 492 } qdf_net_ipv6hdr_t; 493 494 /** 495 * typedef qdf_net_icmpv6hdr_t - ICMPv6 Header 496 * @icmp6_type: ICMPv6 message type 497 * @icmp6_code: ICMPv6 message code 498 * @icmp6_cksum: ICMPv6 message checksum 499 * @icmp6_dataun: Union of supported ICMPv6 message bodies 500 */ 501 typedef struct { 502 uint8_t icmp6_type; 503 uint8_t icmp6_code; 504 uint16_t icmp6_cksum; 505 506 union { 507 uint32_t un_data32[1]; 508 uint16_t un_data16[2]; 509 uint8_t un_data8[4]; 510 511 struct { 512 uint16_t identifier; 513 uint16_t sequence; 514 } u_echo; 515 516 struct { 517 #if defined(QDF_LITTLE_ENDIAN_MACHINE) 518 uint32_t reserved:5, 519 override:1, 520 solicited:1, 521 router:1, 522 reserved2:24; 523 #elif defined(QDF_BIG_ENDIAN_MACHINE) 524 uint32_t router:1, 525 solicited:1, 526 override:1, 527 reserved:29; 528 #else 529 #error "Please fix" 530 #endif 531 } u_nd_advt; 532 533 struct { 534 uint8_t hop_limit; 535 #if defined(QDF_LITTLE_ENDIAN_MACHINE) 536 uint8_t reserved:6, 537 other:1, 538 managed:1; 539 540 #elif defined(QDF_BIG_ENDIAN_MACHINE) 541 uint8_t managed:1, 542 other:1, 543 reserved:6; 544 #else 545 #error "Please fix" 546 #endif 547 uint16_t rt_lifetime; 548 } u_nd_ra; 549 550 } icmp6_dataun; 551 552 } qdf_net_icmpv6hdr_t; 553 554 /** 555 * typedef qdf_net_nd_msg_t - Neighbor Discovery Message 556 * @nd_icmph: ICMPv6 header 557 * @nd_target: Target IPv6 address 558 * @nd_opt: Neighbor Discovery options 559 */ 560 typedef struct { 561 qdf_net_icmpv6hdr_t nd_icmph; 562 qdf_net_ipv6_addr_t nd_target; 563 uint8_t nd_opt[0]; 564 } qdf_net_nd_msg_t; 565 566 567 static inline qdf_csum_tcpudp_magic(uint32_t ip_saddr,uint32_t ip_daddr,uint16_t adj_ip_len,uint8_t ip_proto,uint32_t sum)568 __sum16 qdf_csum_tcpudp_magic(uint32_t ip_saddr, uint32_t ip_daddr, 569 uint16_t adj_ip_len, uint8_t ip_proto, 570 uint32_t sum) 571 { 572 return __qdf_csum_tcpudp_magic(ip_saddr, ip_daddr, 573 adj_ip_len, ip_proto, sum); 574 } 575 576 static inline qdf_ip_fast_csum(qdf_net_iphdr_t * iph_head,uint8_t ip_hl)577 uint16_t qdf_ip_fast_csum(qdf_net_iphdr_t *iph_head, uint8_t ip_hl) 578 { 579 return __qdf_ip_fast_csum(iph_head, ip_hl); 580 } 581 qdf_csum_ipv6(const in6_addr_t * saddr,const in6_addr_t * daddr,__u32 len,unsigned short proto,wsum_t sum)582 static inline int32_t qdf_csum_ipv6(const in6_addr_t *saddr, 583 const in6_addr_t *daddr, 584 __u32 len, unsigned short proto, 585 wsum_t sum) 586 { 587 return (int32_t)__qdf_csum_ipv6(saddr, daddr, len, proto, sum); 588 } 589 qdf_netdev_get_devname(qdf_netdev_t dev)590 static inline char *qdf_netdev_get_devname(qdf_netdev_t dev) 591 { 592 return __qdf_netdev_get_devname(dev); 593 } 594 595 typedef struct { 596 uint8_t i_fc[2]; 597 uint8_t i_dur[2]; 598 uint8_t i_addr1[QDF_NET_MAC_ADDR_MAX_LEN]; 599 uint8_t i_addr2[QDF_NET_MAC_ADDR_MAX_LEN]; 600 uint8_t i_addr3[QDF_NET_MAC_ADDR_MAX_LEN]; 601 uint8_t i_seq[2]; 602 uint8_t i_qos[2]; 603 } qdf_dot3_qosframe_t; 604 605 typedef struct { 606 uint8_t ether_dhost[QDF_NET_MAC_ADDR_MAX_LEN]; 607 uint8_t ether_shost[QDF_NET_MAC_ADDR_MAX_LEN]; 608 uint16_t vlan_TCI; 609 uint16_t vlan_encapsulated_proto; 610 uint16_t ether_type; 611 } qdf_ethervlan_header_t; 612 613 /** 614 * typedef qdf_ether_header_t - ethernet header info 615 * @ether_dhost: destination hardware address 616 * @ether_shost: source hardware address 617 * @ether_type: ethernet type 618 */ 619 typedef struct { 620 uint8_t ether_dhost[QDF_NET_ETH_LEN]; 621 uint8_t ether_shost[QDF_NET_ETH_LEN]; 622 uint16_t ether_type; 623 } qdf_ether_header_t; 624 625 typedef struct { 626 uint8_t llc_dsap; 627 uint8_t llc_ssap; 628 union { 629 struct { 630 uint8_t control; 631 uint8_t format_id; 632 uint8_t class; 633 uint8_t window_x2; 634 } __packed type_u; 635 struct { 636 uint8_t num_snd_x2; 637 uint8_t num_rcv_x2; 638 } __packed type_i; 639 struct { 640 uint8_t control; 641 uint8_t num_rcv_x2; 642 } __packed type_s; 643 struct { 644 uint8_t control; 645 /* 646 * We cannot put the following fields in a structure 647 * because the structure rounding might cause padding. 648 */ 649 uint8_t frmr_rej_pdu0; 650 uint8_t frmr_rej_pdu1; 651 uint8_t frmr_control; 652 uint8_t frmr_control_ext; 653 uint8_t frmr_cause; 654 } __packed type_frmr; 655 struct { 656 uint8_t control; 657 uint8_t org_code[3]; 658 uint16_t ether_type; 659 } __packed type_snap; 660 struct { 661 uint8_t control; 662 uint8_t control_ext; 663 } __packed type_raw; 664 } llc_un /* XXX __packed ??? */; 665 } qdf_llc_t; 666 667 #endif /*_QDF_NET_TYPES_H*/ 668