This source file includes following definitions.
- wil_desc_addr
- wil_desc_addr_set
- wil_rxdesc_tid
- wil_rxdesc_cid
- wil_rxdesc_mid
- wil_rxdesc_ftype
- wil_rxdesc_subtype
- wil_rxdesc_fc1
- wil_rxdesc_seq
- wil_rxdesc_ext_subtype
- wil_rxdesc_retry
- wil_rxdesc_key_id
- wil_rxdesc_security
- wil_rxdesc_ds_bits
- wil_rxdesc_mcs
- wil_rxdesc_mcast
- wil_skb_rxdesc
- wil_ring_is_empty
- wil_ring_next_tail
- wil_ring_advance_head
- wil_ring_is_full
- wil_skb_get_da
- wil_skb_get_sa
- wil_need_txstat
- wil_consume_skb
- wil_ring_used_tx
- wil_ring_avail_tx
- wil_get_min_tx_ring_id
- wil_is_back_req
- wil_val_in_range
- wil_skb_get_cid
- wil_skb_set_cid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #ifndef WIL6210_TXRX_H
19 #define WIL6210_TXRX_H
20
21 #include "wil6210.h"
22 #include "txrx_edma.h"
23
24 #define BUF_SW_OWNED (1)
25 #define BUF_HW_OWNED (0)
26
27
28 #define TXRX_BUF_LEN_DEFAULT (2048)
29
30
31 #define WIL6210_RTAP_SIZE (128)
32
33
34
35 static inline dma_addr_t wil_desc_addr(struct wil_ring_dma_addr *addr)
36 {
37 return le32_to_cpu(addr->addr_low) |
38 ((u64)le16_to_cpu(addr->addr_high) << 32);
39 }
40
41 static inline void wil_desc_addr_set(struct wil_ring_dma_addr *addr,
42 dma_addr_t pa)
43 {
44 addr->addr_low = cpu_to_le32(lower_32_bits(pa));
45 addr->addr_high = cpu_to_le16((u16)upper_32_bits(pa));
46 }
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 struct vring_tx_mac {
85 u32 d[3];
86 u32 ucode_cmd;
87 } __packed;
88
89
90 #define MAC_CFG_DESC_TX_0_LIFETIME_EXPIRY_VALUE_POS 0
91 #define MAC_CFG_DESC_TX_0_LIFETIME_EXPIRY_VALUE_LEN 10
92 #define MAC_CFG_DESC_TX_0_LIFETIME_EXPIRY_VALUE_MSK 0x3FF
93
94 #define MAC_CFG_DESC_TX_0_INTERRUP_EN_POS 10
95 #define MAC_CFG_DESC_TX_0_INTERRUP_EN_LEN 1
96 #define MAC_CFG_DESC_TX_0_INTERRUP_EN_MSK 0x400
97
98 #define MAC_CFG_DESC_TX_0_STATUS_EN_POS 11
99 #define MAC_CFG_DESC_TX_0_STATUS_EN_LEN 1
100 #define MAC_CFG_DESC_TX_0_STATUS_EN_MSK 0x800
101
102 #define MAC_CFG_DESC_TX_0_TXSS_OVERRIDE_POS 12
103 #define MAC_CFG_DESC_TX_0_TXSS_OVERRIDE_LEN 2
104 #define MAC_CFG_DESC_TX_0_TXSS_OVERRIDE_MSK 0x3000
105
106 #define MAC_CFG_DESC_TX_0_TIMESTAMP_INSERTION_POS 14
107 #define MAC_CFG_DESC_TX_0_TIMESTAMP_INSERTION_LEN 1
108 #define MAC_CFG_DESC_TX_0_TIMESTAMP_INSERTION_MSK 0x4000
109
110 #define MAC_CFG_DESC_TX_0_DURATION_PRESERVE_POS 15
111 #define MAC_CFG_DESC_TX_0_DURATION_PRESERVE_LEN 1
112 #define MAC_CFG_DESC_TX_0_DURATION_PRESERVE_MSK 0x8000
113
114 #define MAC_CFG_DESC_TX_0_MCS_INDEX_POS 22
115 #define MAC_CFG_DESC_TX_0_MCS_INDEX_LEN 5
116 #define MAC_CFG_DESC_TX_0_MCS_INDEX_MSK 0x7C00000
117
118 #define MAC_CFG_DESC_TX_0_MCS_EN_POS 27
119 #define MAC_CFG_DESC_TX_0_MCS_EN_LEN 1
120 #define MAC_CFG_DESC_TX_0_MCS_EN_MSK 0x8000000
121
122 #define MAC_CFG_DESC_TX_0_SN_PRESERVED_POS 31
123 #define MAC_CFG_DESC_TX_0_SN_PRESERVED_LEN 1
124 #define MAC_CFG_DESC_TX_0_SN_PRESERVED_MSK 0x80000000
125
126
127 #define MAC_CFG_DESC_TX_1_PKT_MODE_POS 0
128 #define MAC_CFG_DESC_TX_1_PKT_MODE_LEN 4
129 #define MAC_CFG_DESC_TX_1_PKT_MODE_MSK 0xF
130
131 #define MAC_CFG_DESC_TX_1_PKT_MODE_EN_POS 4
132 #define MAC_CFG_DESC_TX_1_PKT_MODE_EN_LEN 1
133 #define MAC_CFG_DESC_TX_1_PKT_MODE_EN_MSK 0x10
134
135 #define MAC_CFG_DESC_TX_1_MAC_ID_EN_POS 5
136 #define MAC_CFG_DESC_TX_1_MAC_ID_EN_LEN 1
137 #define MAC_CFG_DESC_TX_1_MAC_ID_EN_MSK 0x20
138
139 #define MAC_CFG_DESC_TX_1_MAC_ID_POS 6
140 #define MAC_CFG_DESC_TX_1_MAC_ID_LEN 2
141 #define MAC_CFG_DESC_TX_1_MAC_ID_MSK 0xc0
142
143 #define MAC_CFG_DESC_TX_1_ACK_POLICY_EN_POS 15
144 #define MAC_CFG_DESC_TX_1_ACK_POLICY_EN_LEN 1
145 #define MAC_CFG_DESC_TX_1_ACK_POLICY_EN_MSK 0x8000
146
147 #define MAC_CFG_DESC_TX_1_DST_INDEX_POS 16
148 #define MAC_CFG_DESC_TX_1_DST_INDEX_LEN 4
149 #define MAC_CFG_DESC_TX_1_DST_INDEX_MSK 0xF0000
150
151 #define MAC_CFG_DESC_TX_1_DST_INDEX_EN_POS 20
152 #define MAC_CFG_DESC_TX_1_DST_INDEX_EN_LEN 1
153 #define MAC_CFG_DESC_TX_1_DST_INDEX_EN_MSK 0x100000
154
155 #define MAC_CFG_DESC_TX_1_ACK_POLICY_POS 21
156 #define MAC_CFG_DESC_TX_1_ACK_POLICY_LEN 2
157 #define MAC_CFG_DESC_TX_1_ACK_POLICY_MSK 0x600000
158
159 #define MAC_CFG_DESC_TX_1_LIFETIME_EN_POS 23
160 #define MAC_CFG_DESC_TX_1_LIFETIME_EN_LEN 1
161 #define MAC_CFG_DESC_TX_1_LIFETIME_EN_MSK 0x800000
162
163 #define MAC_CFG_DESC_TX_1_MAX_RETRY_POS 24
164 #define MAC_CFG_DESC_TX_1_MAX_RETRY_LEN 7
165 #define MAC_CFG_DESC_TX_1_MAX_RETRY_MSK 0x7F000000
166
167 #define MAC_CFG_DESC_TX_1_MAX_RETRY_EN_POS 31
168 #define MAC_CFG_DESC_TX_1_MAX_RETRY_EN_LEN 1
169 #define MAC_CFG_DESC_TX_1_MAX_RETRY_EN_MSK 0x80000000
170
171
172 #define MAC_CFG_DESC_TX_2_NUM_OF_DESCRIPTORS_POS 0
173 #define MAC_CFG_DESC_TX_2_NUM_OF_DESCRIPTORS_LEN 8
174 #define MAC_CFG_DESC_TX_2_NUM_OF_DESCRIPTORS_MSK 0xFF
175
176 #define MAC_CFG_DESC_TX_2_RESERVED_POS 8
177 #define MAC_CFG_DESC_TX_2_RESERVED_LEN 10
178 #define MAC_CFG_DESC_TX_2_RESERVED_MSK 0x3FF00
179
180 #define MAC_CFG_DESC_TX_2_L2_TRANSLATION_TYPE_POS 18
181 #define MAC_CFG_DESC_TX_2_L2_TRANSLATION_TYPE_LEN 2
182 #define MAC_CFG_DESC_TX_2_L2_TRANSLATION_TYPE_MSK 0xC0000
183
184 #define MAC_CFG_DESC_TX_2_SNAP_HDR_INSERTION_EN_POS 20
185 #define MAC_CFG_DESC_TX_2_SNAP_HDR_INSERTION_EN_LEN 1
186 #define MAC_CFG_DESC_TX_2_SNAP_HDR_INSERTION_EN_MSK 0x100000
187
188 #define MAC_CFG_DESC_TX_2_VLAN_REMOVAL_EN_POS 21
189 #define MAC_CFG_DESC_TX_2_VLAN_REMOVAL_EN_LEN 1
190 #define MAC_CFG_DESC_TX_2_VLAN_REMOVAL_EN_MSK 0x200000
191
192
193 #define MAC_CFG_DESC_TX_3_UCODE_CMD_POS 0
194 #define MAC_CFG_DESC_TX_3_UCODE_CMD_LEN 32
195 #define MAC_CFG_DESC_TX_3_UCODE_CMD_MSK 0xFFFFFFFF
196
197
198 #define DMA_CFG_DESC_TX_0_L4_LENGTH_POS 0
199 #define DMA_CFG_DESC_TX_0_L4_LENGTH_LEN 8
200 #define DMA_CFG_DESC_TX_0_L4_LENGTH_MSK 0xFF
201
202 #define DMA_CFG_DESC_TX_0_CMD_EOP_POS 8
203 #define DMA_CFG_DESC_TX_0_CMD_EOP_LEN 1
204 #define DMA_CFG_DESC_TX_0_CMD_EOP_MSK 0x100
205
206 #define DMA_CFG_DESC_TX_0_CMD_MARK_WB_POS 9
207 #define DMA_CFG_DESC_TX_0_CMD_MARK_WB_LEN 1
208 #define DMA_CFG_DESC_TX_0_CMD_MARK_WB_MSK 0x200
209
210 #define DMA_CFG_DESC_TX_0_CMD_DMA_IT_POS 10
211 #define DMA_CFG_DESC_TX_0_CMD_DMA_IT_LEN 1
212 #define DMA_CFG_DESC_TX_0_CMD_DMA_IT_MSK 0x400
213
214 #define DMA_CFG_DESC_TX_0_SEGMENT_BUF_DETAILS_POS 11
215 #define DMA_CFG_DESC_TX_0_SEGMENT_BUF_DETAILS_LEN 2
216 #define DMA_CFG_DESC_TX_0_SEGMENT_BUF_DETAILS_MSK 0x1800
217
218 #define DMA_CFG_DESC_TX_0_TCP_SEG_EN_POS 13
219 #define DMA_CFG_DESC_TX_0_TCP_SEG_EN_LEN 1
220 #define DMA_CFG_DESC_TX_0_TCP_SEG_EN_MSK 0x2000
221
222 #define DMA_CFG_DESC_TX_0_IPV4_CHECKSUM_EN_POS 14
223 #define DMA_CFG_DESC_TX_0_IPV4_CHECKSUM_EN_LEN 1
224 #define DMA_CFG_DESC_TX_0_IPV4_CHECKSUM_EN_MSK 0x4000
225
226 #define DMA_CFG_DESC_TX_0_TCP_UDP_CHECKSUM_EN_POS 15
227 #define DMA_CFG_DESC_TX_0_TCP_UDP_CHECKSUM_EN_LEN 1
228 #define DMA_CFG_DESC_TX_0_TCP_UDP_CHECKSUM_EN_MSK 0x8000
229
230 #define DMA_CFG_DESC_TX_0_QID_POS 16
231 #define DMA_CFG_DESC_TX_0_QID_LEN 5
232 #define DMA_CFG_DESC_TX_0_QID_MSK 0x1F0000
233
234 #define DMA_CFG_DESC_TX_0_PSEUDO_HEADER_CALC_EN_POS 21
235 #define DMA_CFG_DESC_TX_0_PSEUDO_HEADER_CALC_EN_LEN 1
236 #define DMA_CFG_DESC_TX_0_PSEUDO_HEADER_CALC_EN_MSK 0x200000
237
238 #define DMA_CFG_DESC_TX_0_L4_TYPE_POS 30
239 #define DMA_CFG_DESC_TX_0_L4_TYPE_LEN 2
240 #define DMA_CFG_DESC_TX_0_L4_TYPE_MSK 0xC0000000
241
242 #define DMA_CFG_DESC_TX_OFFLOAD_CFG_MAC_LEN_POS 0
243 #define DMA_CFG_DESC_TX_OFFLOAD_CFG_MAC_LEN_LEN 7
244 #define DMA_CFG_DESC_TX_OFFLOAD_CFG_MAC_LEN_MSK 0x7F
245
246 #define DMA_CFG_DESC_TX_OFFLOAD_CFG_L3T_IPV4_POS 7
247 #define DMA_CFG_DESC_TX_OFFLOAD_CFG_L3T_IPV4_LEN 1
248 #define DMA_CFG_DESC_TX_OFFLOAD_CFG_L3T_IPV4_MSK 0x80
249
250 #define TX_DMA_STATUS_DU BIT(0)
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292 struct vring_tx_dma {
293 u32 d0;
294 struct wil_ring_dma_addr addr;
295 u8 ip_length;
296 u8 b11;
297 u8 error;
298 u8 status;
299 __le16 length;
300 } __packed;
301
302
303 enum {
304 wil_tso_type_hdr = 0,
305 wil_tso_type_first = 1,
306 wil_tso_type_mid = 2,
307 wil_tso_type_lst = 3,
308 };
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353 struct vring_rx_mac {
354 u32 d0;
355 u32 d1;
356 u16 w4;
357 u16 pn_15_0;
358 u32 pn_47_16;
359 } __packed;
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403 #define RX_DMA_D0_CMD_DMA_EOP BIT(8)
404 #define RX_DMA_D0_CMD_DMA_RT BIT(9)
405 #define RX_DMA_D0_CMD_DMA_IT BIT(10)
406 #define RX_MAC_D0_MAC_ID_VALID BIT(7)
407
408
409 #define RX_DMA_ERROR_FCS BIT(0)
410 #define RX_DMA_ERROR_MIC BIT(1)
411 #define RX_DMA_ERROR_KEY BIT(2)
412 #define RX_DMA_ERROR_REPLAY BIT(3)
413 #define RX_DMA_ERROR_L3_ERR BIT(4)
414 #define RX_DMA_ERROR_L4_ERR BIT(5)
415
416
417 #define RX_DMA_STATUS_DU BIT(0)
418 #define RX_DMA_STATUS_EOP BIT(1)
419 #define RX_DMA_STATUS_ERROR BIT(2)
420 #define RX_DMA_STATUS_MI BIT(3)
421 #define RX_DMA_STATUS_L3I BIT(4)
422 #define RX_DMA_STATUS_L4I BIT(5)
423 #define RX_DMA_STATUS_PHY_INFO BIT(6)
424 #define RX_DMA_STATUS_FFM BIT(7)
425
426
427 #define WIL_KEY_INFO_KEY_TYPE BIT(3)
428
429 #define WIL_KEY_INFO_MIC BIT(8)
430 #define WIL_KEY_INFO_ENCR_KEY_DATA BIT(12)
431
432 #define WIL_EAP_NONCE_LEN 32
433 #define WIL_EAP_KEY_RSC_LEN 8
434 #define WIL_EAP_REPLAY_COUNTER_LEN 8
435 #define WIL_EAP_KEY_IV_LEN 16
436 #define WIL_EAP_KEY_ID_LEN 8
437
438 enum {
439 WIL_1X_TYPE_EAP_PACKET = 0,
440 WIL_1X_TYPE_EAPOL_START = 1,
441 WIL_1X_TYPE_EAPOL_LOGOFF = 2,
442 WIL_1X_TYPE_EAPOL_KEY = 3,
443 };
444
445 #define WIL_EAPOL_KEY_TYPE_RSN 2
446 #define WIL_EAPOL_KEY_TYPE_WPA 254
447
448 struct wil_1x_hdr {
449 u8 version;
450 u8 type;
451 __be16 length;
452
453 } __packed;
454
455 struct wil_eapol_key {
456 u8 type;
457 __be16 key_info;
458 __be16 key_length;
459 u8 replay_counter[WIL_EAP_REPLAY_COUNTER_LEN];
460 u8 key_nonce[WIL_EAP_NONCE_LEN];
461 u8 key_iv[WIL_EAP_KEY_IV_LEN];
462 u8 key_rsc[WIL_EAP_KEY_RSC_LEN];
463 u8 key_id[WIL_EAP_KEY_ID_LEN];
464 } __packed;
465
466 struct vring_rx_dma {
467 u32 d0;
468 struct wil_ring_dma_addr addr;
469 u8 ip_length;
470 u8 b11;
471 u8 error;
472 u8 status;
473 __le16 length;
474 } __packed;
475
476 struct vring_tx_desc {
477 struct vring_tx_mac mac;
478 struct vring_tx_dma dma;
479 } __packed;
480
481 union wil_tx_desc {
482 struct vring_tx_desc legacy;
483 struct wil_tx_enhanced_desc enhanced;
484 } __packed;
485
486 struct vring_rx_desc {
487 struct vring_rx_mac mac;
488 struct vring_rx_dma dma;
489 } __packed;
490
491 union wil_rx_desc {
492 struct vring_rx_desc legacy;
493 struct wil_rx_enhanced_desc enhanced;
494 } __packed;
495
496 union wil_ring_desc {
497 union wil_tx_desc tx;
498 union wil_rx_desc rx;
499 } __packed;
500
501 struct packet_rx_info {
502 u8 cid;
503 };
504
505
506
507
508 struct skb_rx_info {
509 struct vring_rx_desc rx_desc;
510 struct packet_rx_info rx_info;
511 };
512
513 static inline int wil_rxdesc_tid(struct vring_rx_desc *d)
514 {
515 return WIL_GET_BITS(d->mac.d0, 0, 3);
516 }
517
518 static inline int wil_rxdesc_cid(struct vring_rx_desc *d)
519 {
520 return WIL_GET_BITS(d->mac.d0, 4, 6);
521 }
522
523 static inline int wil_rxdesc_mid(struct vring_rx_desc *d)
524 {
525 return (d->mac.d0 & RX_MAC_D0_MAC_ID_VALID) ?
526 WIL_GET_BITS(d->mac.d0, 8, 9) : 0;
527 }
528
529 static inline int wil_rxdesc_ftype(struct vring_rx_desc *d)
530 {
531 return WIL_GET_BITS(d->mac.d0, 10, 11);
532 }
533
534 static inline int wil_rxdesc_subtype(struct vring_rx_desc *d)
535 {
536 return WIL_GET_BITS(d->mac.d0, 12, 15);
537 }
538
539
540 static inline u8 wil_rxdesc_fc1(struct vring_rx_desc *d)
541 {
542 return (u8)(WIL_GET_BITS(d->mac.d0, 10, 15) << 2);
543 }
544
545 static inline int wil_rxdesc_seq(struct vring_rx_desc *d)
546 {
547 return WIL_GET_BITS(d->mac.d0, 16, 27);
548 }
549
550 static inline int wil_rxdesc_ext_subtype(struct vring_rx_desc *d)
551 {
552 return WIL_GET_BITS(d->mac.d0, 28, 31);
553 }
554
555 static inline int wil_rxdesc_retry(struct vring_rx_desc *d)
556 {
557 return WIL_GET_BITS(d->mac.d0, 31, 31);
558 }
559
560 static inline int wil_rxdesc_key_id(struct vring_rx_desc *d)
561 {
562 return WIL_GET_BITS(d->mac.d1, 4, 5);
563 }
564
565 static inline int wil_rxdesc_security(struct vring_rx_desc *d)
566 {
567 return WIL_GET_BITS(d->mac.d1, 7, 7);
568 }
569
570 static inline int wil_rxdesc_ds_bits(struct vring_rx_desc *d)
571 {
572 return WIL_GET_BITS(d->mac.d1, 8, 9);
573 }
574
575 static inline int wil_rxdesc_mcs(struct vring_rx_desc *d)
576 {
577 return WIL_GET_BITS(d->mac.d1, 21, 24);
578 }
579
580 static inline int wil_rxdesc_mcast(struct vring_rx_desc *d)
581 {
582 return WIL_GET_BITS(d->mac.d1, 13, 14);
583 }
584
585 static inline struct vring_rx_desc *wil_skb_rxdesc(struct sk_buff *skb)
586 {
587 return (void *)skb->cb;
588 }
589
590 static inline int wil_ring_is_empty(struct wil_ring *ring)
591 {
592 return ring->swhead == ring->swtail;
593 }
594
595 static inline u32 wil_ring_next_tail(struct wil_ring *ring)
596 {
597 return (ring->swtail + 1) % ring->size;
598 }
599
600 static inline void wil_ring_advance_head(struct wil_ring *ring, int n)
601 {
602 ring->swhead = (ring->swhead + n) % ring->size;
603 }
604
605 static inline int wil_ring_is_full(struct wil_ring *ring)
606 {
607 return wil_ring_next_tail(ring) == ring->swhead;
608 }
609
610 static inline u8 *wil_skb_get_da(struct sk_buff *skb)
611 {
612 struct ethhdr *eth = (void *)skb->data;
613
614 return eth->h_dest;
615 }
616
617 static inline u8 *wil_skb_get_sa(struct sk_buff *skb)
618 {
619 struct ethhdr *eth = (void *)skb->data;
620
621 return eth->h_source;
622 }
623
624 static inline bool wil_need_txstat(struct sk_buff *skb)
625 {
626 const u8 *da = wil_skb_get_da(skb);
627
628 return is_unicast_ether_addr(da) && skb->sk &&
629 (skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS);
630 }
631
632 static inline void wil_consume_skb(struct sk_buff *skb, bool acked)
633 {
634 if (unlikely(wil_need_txstat(skb)))
635 skb_complete_wifi_ack(skb, acked);
636 else
637 acked ? dev_consume_skb_any(skb) : dev_kfree_skb_any(skb);
638 }
639
640
641 static inline int wil_ring_used_tx(struct wil_ring *ring)
642 {
643 u32 swhead = ring->swhead;
644 u32 swtail = ring->swtail;
645
646 return (ring->size + swhead - swtail) % ring->size;
647 }
648
649
650 static inline int wil_ring_avail_tx(struct wil_ring *ring)
651 {
652 return ring->size - wil_ring_used_tx(ring) - 1;
653 }
654
655 static inline int wil_get_min_tx_ring_id(struct wil6210_priv *wil)
656 {
657
658 return wil->use_enhanced_dma_hw ? 1 : 0;
659 }
660
661
662 static inline int wil_is_back_req(u8 fc)
663 {
664 return (fc & (IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) ==
665 (IEEE80211_FTYPE_CTL | IEEE80211_STYPE_BACK_REQ);
666 }
667
668
669 static inline bool wil_val_in_range(int val, int min, int max)
670 {
671 return val >= min && val < max;
672 }
673
674 static inline u8 wil_skb_get_cid(struct sk_buff *skb)
675 {
676 struct skb_rx_info *skb_rx_info = (void *)skb->cb;
677
678 return skb_rx_info->rx_info.cid;
679 }
680
681 static inline void wil_skb_set_cid(struct sk_buff *skb, u8 cid)
682 {
683 struct skb_rx_info *skb_rx_info = (void *)skb->cb;
684
685 skb_rx_info->rx_info.cid = cid;
686 }
687
688 void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev);
689 void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
690 struct wil_net_stats *stats, bool gro);
691 void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb);
692 void wil_rx_bar(struct wil6210_priv *wil, struct wil6210_vif *vif,
693 u8 cid, u8 tid, u16 seq);
694 struct wil_tid_ampdu_rx *wil_tid_ampdu_rx_alloc(struct wil6210_priv *wil,
695 int size, u16 ssn);
696 void wil_tid_ampdu_rx_free(struct wil6210_priv *wil,
697 struct wil_tid_ampdu_rx *r);
698 void wil_tx_data_init(struct wil_ring_tx_data *txdata);
699 void wil_init_txrx_ops_legacy_dma(struct wil6210_priv *wil);
700 void wil_tx_latency_calc(struct wil6210_priv *wil, struct sk_buff *skb,
701 struct wil_sta_info *sta);
702
703 #endif