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