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