1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef WIL6210_TXRX_H
18#define WIL6210_TXRX_H
19
20#define BUF_SW_OWNED (1)
21#define BUF_HW_OWNED (0)
22
23
24#define TXRX_BUF_LEN_DEFAULT (2048)
25
26
27#define WIL6210_RTAP_SIZE (128)
28
29
30
31
32struct vring_dma_addr {
33 __le32 addr_low;
34 __le16 addr_high;
35} __packed;
36
37static inline dma_addr_t wil_desc_addr(struct vring_dma_addr *addr)
38{
39 return le32_to_cpu(addr->addr_low) |
40 ((u64)le16_to_cpu(addr->addr_high) << 32);
41}
42
43static inline void wil_desc_addr_set(struct vring_dma_addr *addr,
44 dma_addr_t pa)
45{
46 addr->addr_low = cpu_to_le32(lower_32_bits(pa));
47 addr->addr_high = cpu_to_le16((u16)upper_32_bits(pa));
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
84struct 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_ACK_POLICY_EN_POS 15
136#define MAC_CFG_DESC_TX_1_ACK_POLICY_EN_LEN 1
137#define MAC_CFG_DESC_TX_1_ACK_POLICY_EN_MSK 0x8000
138
139#define MAC_CFG_DESC_TX_1_DST_INDEX_POS 16
140#define MAC_CFG_DESC_TX_1_DST_INDEX_LEN 4
141#define MAC_CFG_DESC_TX_1_DST_INDEX_MSK 0xF0000
142
143#define MAC_CFG_DESC_TX_1_DST_INDEX_EN_POS 20
144#define MAC_CFG_DESC_TX_1_DST_INDEX_EN_LEN 1
145#define MAC_CFG_DESC_TX_1_DST_INDEX_EN_MSK 0x100000
146
147#define MAC_CFG_DESC_TX_1_ACK_POLICY_POS 21
148#define MAC_CFG_DESC_TX_1_ACK_POLICY_LEN 2
149#define MAC_CFG_DESC_TX_1_ACK_POLICY_MSK 0x600000
150
151#define MAC_CFG_DESC_TX_1_LIFETIME_EN_POS 23
152#define MAC_CFG_DESC_TX_1_LIFETIME_EN_LEN 1
153#define MAC_CFG_DESC_TX_1_LIFETIME_EN_MSK 0x800000
154
155#define MAC_CFG_DESC_TX_1_MAX_RETRY_POS 24
156#define MAC_CFG_DESC_TX_1_MAX_RETRY_LEN 7
157#define MAC_CFG_DESC_TX_1_MAX_RETRY_MSK 0x7F000000
158
159#define MAC_CFG_DESC_TX_1_MAX_RETRY_EN_POS 31
160#define MAC_CFG_DESC_TX_1_MAX_RETRY_EN_LEN 1
161#define MAC_CFG_DESC_TX_1_MAX_RETRY_EN_MSK 0x80000000
162
163
164#define MAC_CFG_DESC_TX_2_NUM_OF_DESCRIPTORS_POS 0
165#define MAC_CFG_DESC_TX_2_NUM_OF_DESCRIPTORS_LEN 8
166#define MAC_CFG_DESC_TX_2_NUM_OF_DESCRIPTORS_MSK 0xFF
167
168#define MAC_CFG_DESC_TX_2_RESERVED_POS 8
169#define MAC_CFG_DESC_TX_2_RESERVED_LEN 10
170#define MAC_CFG_DESC_TX_2_RESERVED_MSK 0x3FF00
171
172#define MAC_CFG_DESC_TX_2_L2_TRANSLATION_TYPE_POS 18
173#define MAC_CFG_DESC_TX_2_L2_TRANSLATION_TYPE_LEN 2
174#define MAC_CFG_DESC_TX_2_L2_TRANSLATION_TYPE_MSK 0xC0000
175
176#define MAC_CFG_DESC_TX_2_SNAP_HDR_INSERTION_EN_POS 20
177#define MAC_CFG_DESC_TX_2_SNAP_HDR_INSERTION_EN_LEN 1
178#define MAC_CFG_DESC_TX_2_SNAP_HDR_INSERTION_EN_MSK 0x100000
179
180#define MAC_CFG_DESC_TX_2_VLAN_REMOVAL_EN_POS 21
181#define MAC_CFG_DESC_TX_2_VLAN_REMOVAL_EN_LEN 1
182#define MAC_CFG_DESC_TX_2_VLAN_REMOVAL_EN_MSK 0x200000
183
184
185#define MAC_CFG_DESC_TX_3_UCODE_CMD_POS 0
186#define MAC_CFG_DESC_TX_3_UCODE_CMD_LEN 32
187#define MAC_CFG_DESC_TX_3_UCODE_CMD_MSK 0xFFFFFFFF
188
189
190#define DMA_CFG_DESC_TX_0_L4_LENGTH_POS 0
191#define DMA_CFG_DESC_TX_0_L4_LENGTH_LEN 8
192#define DMA_CFG_DESC_TX_0_L4_LENGTH_MSK 0xFF
193
194#define DMA_CFG_DESC_TX_0_CMD_EOP_POS 8
195#define DMA_CFG_DESC_TX_0_CMD_EOP_LEN 1
196#define DMA_CFG_DESC_TX_0_CMD_EOP_MSK 0x100
197
198#define DMA_CFG_DESC_TX_0_CMD_MARK_WB_POS 9
199#define DMA_CFG_DESC_TX_0_CMD_MARK_WB_LEN 1
200#define DMA_CFG_DESC_TX_0_CMD_MARK_WB_MSK 0x200
201
202#define DMA_CFG_DESC_TX_0_CMD_DMA_IT_POS 10
203#define DMA_CFG_DESC_TX_0_CMD_DMA_IT_LEN 1
204#define DMA_CFG_DESC_TX_0_CMD_DMA_IT_MSK 0x400
205
206#define DMA_CFG_DESC_TX_0_SEGMENT_BUF_DETAILS_POS 11
207#define DMA_CFG_DESC_TX_0_SEGMENT_BUF_DETAILS_LEN 2
208#define DMA_CFG_DESC_TX_0_SEGMENT_BUF_DETAILS_MSK 0x1800
209
210#define DMA_CFG_DESC_TX_0_TCP_SEG_EN_POS 13
211#define DMA_CFG_DESC_TX_0_TCP_SEG_EN_LEN 1
212#define DMA_CFG_DESC_TX_0_TCP_SEG_EN_MSK 0x2000
213
214#define DMA_CFG_DESC_TX_0_IPV4_CHECKSUM_EN_POS 14
215#define DMA_CFG_DESC_TX_0_IPV4_CHECKSUM_EN_LEN 1
216#define DMA_CFG_DESC_TX_0_IPV4_CHECKSUM_EN_MSK 0x4000
217
218#define DMA_CFG_DESC_TX_0_TCP_UDP_CHECKSUM_EN_POS 15
219#define DMA_CFG_DESC_TX_0_TCP_UDP_CHECKSUM_EN_LEN 1
220#define DMA_CFG_DESC_TX_0_TCP_UDP_CHECKSUM_EN_MSK 0x8000
221
222#define DMA_CFG_DESC_TX_0_QID_POS 16
223#define DMA_CFG_DESC_TX_0_QID_LEN 5
224#define DMA_CFG_DESC_TX_0_QID_MSK 0x1F0000
225
226#define DMA_CFG_DESC_TX_0_PSEUDO_HEADER_CALC_EN_POS 21
227#define DMA_CFG_DESC_TX_0_PSEUDO_HEADER_CALC_EN_LEN 1
228#define DMA_CFG_DESC_TX_0_PSEUDO_HEADER_CALC_EN_MSK 0x200000
229
230#define DMA_CFG_DESC_TX_0_L4_TYPE_POS 30
231#define DMA_CFG_DESC_TX_0_L4_TYPE_LEN 2
232#define DMA_CFG_DESC_TX_0_L4_TYPE_MSK 0xC0000000
233
234#define DMA_CFG_DESC_TX_OFFLOAD_CFG_MAC_LEN_POS 0
235#define DMA_CFG_DESC_TX_OFFLOAD_CFG_MAC_LEN_LEN 7
236#define DMA_CFG_DESC_TX_OFFLOAD_CFG_MAC_LEN_MSK 0x7F
237
238#define DMA_CFG_DESC_TX_OFFLOAD_CFG_L3T_IPV4_POS 7
239#define DMA_CFG_DESC_TX_OFFLOAD_CFG_L3T_IPV4_LEN 1
240#define DMA_CFG_DESC_TX_OFFLOAD_CFG_L3T_IPV4_MSK 0x80
241
242#define TX_DMA_STATUS_DU BIT(0)
243
244
245
246
247
248
249
250
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
284struct vring_tx_dma {
285 u32 d0;
286 struct vring_dma_addr addr;
287 u8 ip_length;
288 u8 b11;
289 u8 error;
290 u8 status;
291 __le16 length;
292} __packed;
293
294
295enum {
296 wil_tso_type_hdr = 0,
297 wil_tso_type_first = 1,
298 wil_tso_type_mid = 2,
299 wil_tso_type_lst = 3,
300};
301
302
303
304
305
306
307
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
345struct vring_rx_mac {
346 u32 d0;
347 u32 d1;
348 u16 w4;
349 u16 pn_15_0;
350 u32 pn_47_16;
351} __packed;
352
353
354
355
356
357
358
359
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#define RX_DMA_D0_CMD_DMA_EOP BIT(8)
396#define RX_DMA_D0_CMD_DMA_RT BIT(9)
397#define RX_DMA_D0_CMD_DMA_IT BIT(10)
398
399
400#define RX_DMA_ERROR_FCS BIT(0)
401#define RX_DMA_ERROR_MIC BIT(1)
402#define RX_DMA_ERROR_KEY BIT(2)
403#define RX_DMA_ERROR_REPLAY BIT(3)
404#define RX_DMA_ERROR_L3_ERR BIT(4)
405#define RX_DMA_ERROR_L4_ERR BIT(5)
406
407
408#define RX_DMA_STATUS_DU BIT(0)
409#define RX_DMA_STATUS_EOP BIT(1)
410#define RX_DMA_STATUS_ERROR BIT(2)
411#define RX_DMA_STATUS_MI BIT(3)
412#define RX_DMA_STATUS_L3I BIT(4)
413#define RX_DMA_STATUS_L4I BIT(5)
414#define RX_DMA_STATUS_PHY_INFO BIT(6)
415#define RX_DMA_STATUS_FFM BIT(7)
416
417struct vring_rx_dma {
418 u32 d0;
419 struct vring_dma_addr addr;
420 u8 ip_length;
421 u8 b11;
422 u8 error;
423 u8 status;
424 __le16 length;
425} __packed;
426
427struct vring_tx_desc {
428 struct vring_tx_mac mac;
429 struct vring_tx_dma dma;
430} __packed;
431
432struct vring_rx_desc {
433 struct vring_rx_mac mac;
434 struct vring_rx_dma dma;
435} __packed;
436
437union vring_desc {
438 struct vring_tx_desc tx;
439 struct vring_rx_desc rx;
440} __packed;
441
442static inline int wil_rxdesc_tid(struct vring_rx_desc *d)
443{
444 return WIL_GET_BITS(d->mac.d0, 0, 3);
445}
446
447static inline int wil_rxdesc_cid(struct vring_rx_desc *d)
448{
449 return WIL_GET_BITS(d->mac.d0, 4, 6);
450}
451
452static inline int wil_rxdesc_mid(struct vring_rx_desc *d)
453{
454 return WIL_GET_BITS(d->mac.d0, 8, 9);
455}
456
457static inline int wil_rxdesc_ftype(struct vring_rx_desc *d)
458{
459 return WIL_GET_BITS(d->mac.d0, 10, 11);
460}
461
462static inline int wil_rxdesc_subtype(struct vring_rx_desc *d)
463{
464 return WIL_GET_BITS(d->mac.d0, 12, 15);
465}
466
467
468static inline u8 wil_rxdesc_fc1(struct vring_rx_desc *d)
469{
470 return (u8)(WIL_GET_BITS(d->mac.d0, 10, 15) << 2);
471}
472
473static inline int wil_rxdesc_seq(struct vring_rx_desc *d)
474{
475 return WIL_GET_BITS(d->mac.d0, 16, 27);
476}
477
478static inline int wil_rxdesc_ext_subtype(struct vring_rx_desc *d)
479{
480 return WIL_GET_BITS(d->mac.d0, 28, 31);
481}
482
483static inline int wil_rxdesc_key_id(struct vring_rx_desc *d)
484{
485 return WIL_GET_BITS(d->mac.d1, 4, 5);
486}
487
488static inline int wil_rxdesc_security(struct vring_rx_desc *d)
489{
490 return WIL_GET_BITS(d->mac.d1, 7, 7);
491}
492
493static inline int wil_rxdesc_ds_bits(struct vring_rx_desc *d)
494{
495 return WIL_GET_BITS(d->mac.d1, 8, 9);
496}
497
498static inline int wil_rxdesc_mcs(struct vring_rx_desc *d)
499{
500 return WIL_GET_BITS(d->mac.d1, 21, 24);
501}
502
503static inline int wil_rxdesc_mcast(struct vring_rx_desc *d)
504{
505 return WIL_GET_BITS(d->mac.d1, 13, 14);
506}
507
508static inline int wil_rxdesc_phy_length(struct vring_rx_desc *d)
509{
510 return WIL_GET_BITS(d->dma.d0, 16, 29);
511}
512
513static inline struct vring_rx_desc *wil_skb_rxdesc(struct sk_buff *skb)
514{
515 return (void *)skb->cb;
516}
517
518void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev);
519void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb);
520void wil_rx_bar(struct wil6210_priv *wil, u8 cid, u8 tid, u16 seq);
521struct wil_tid_ampdu_rx *wil_tid_ampdu_rx_alloc(struct wil6210_priv *wil,
522 int size, u16 ssn);
523void wil_tid_ampdu_rx_free(struct wil6210_priv *wil,
524 struct wil_tid_ampdu_rx *r);
525
526#endif
527