aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/wil6210
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath/wil6210')
-rw-r--r--drivers/net/wireless/ath/wil6210/main.c4
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx.c31
-rw-r--r--drivers/net/wireless/ath/wil6210/wil6210.h7
3 files changed, 11 insertions, 31 deletions
diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c
index 95755a551796..db74e811f5c4 100644
--- a/drivers/net/wireless/ath/wil6210/main.c
+++ b/drivers/net/wireless/ath/wil6210/main.c
@@ -579,6 +579,10 @@ static int wil_target_reset(struct wil6210_priv *wil)
579 579
580 C(RGF_USER_CLKS_CTL_0, BIT_USER_CLKS_RST_PWGD); 580 C(RGF_USER_CLKS_CTL_0, BIT_USER_CLKS_RST_PWGD);
581 581
582 /* enable fix for HW bug related to the SA/DA swap in AP Rx */
583 S(RGF_DMA_OFUL_NID_0, BIT_DMA_OFUL_NID_0_RX_EXT_TR_EN |
584 BIT_DMA_OFUL_NID_0_RX_EXT_A3_SRC);
585
582 wil_dbg_misc(wil, "Reset completed in %d ms\n", delay * RST_DELAY); 586 wil_dbg_misc(wil, "Reset completed in %d ms\n", delay * RST_DELAY);
583 return 0; 587 return 0;
584} 588}
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 8439f65db259..779d8369f9bc 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -346,27 +346,6 @@ static void wil_rx_add_radiotap_header(struct wil6210_priv *wil,
346 } 346 }
347} 347}
348 348
349/*
350 * Fast swap in place between 2 registers
351 */
352static void wil_swap_u16(u16 *a, u16 *b)
353{
354 *a ^= *b;
355 *b ^= *a;
356 *a ^= *b;
357}
358
359static void wil_swap_ethaddr(void *data)
360{
361 struct ethhdr *eth = data;
362 u16 *s = (u16 *)eth->h_source;
363 u16 *d = (u16 *)eth->h_dest;
364
365 wil_swap_u16(s++, d++);
366 wil_swap_u16(s++, d++);
367 wil_swap_u16(s, d);
368}
369
370/** 349/**
371 * reap 1 frame from @swhead 350 * reap 1 frame from @swhead
372 * 351 *
@@ -386,7 +365,6 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
386 unsigned int sz = mtu_max + ETH_HLEN; 365 unsigned int sz = mtu_max + ETH_HLEN;
387 u16 dmalen; 366 u16 dmalen;
388 u8 ftype; 367 u8 ftype;
389 u8 ds_bits;
390 int cid; 368 int cid;
391 struct wil_net_stats *stats; 369 struct wil_net_stats *stats;
392 370
@@ -474,15 +452,6 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
474 */ 452 */
475 } 453 }
476 454
477 ds_bits = wil_rxdesc_ds_bits(d);
478 if (ds_bits == 1) {
479 /*
480 * HW bug - in ToDS mode, i.e. Rx on AP side,
481 * addresses get swapped
482 */
483 wil_swap_ethaddr(skb->data);
484 }
485
486 return skb; 455 return skb;
487} 456}
488 457
diff --git a/drivers/net/wireless/ath/wil6210/wil6210.h b/drivers/net/wireless/ath/wil6210/wil6210.h
index 97422e7854d3..85f001191319 100644
--- a/drivers/net/wireless/ath/wil6210/wil6210.h
+++ b/drivers/net/wireless/ath/wil6210/wil6210.h
@@ -181,6 +181,13 @@ struct RGF_BL {
181 #define BIT_DMA_ITR_CNT_CRL_CLR BIT(3) 181 #define BIT_DMA_ITR_CNT_CRL_CLR BIT(3)
182 #define BIT_DMA_ITR_CNT_CRL_REACH_TRSH BIT(4) 182 #define BIT_DMA_ITR_CNT_CRL_REACH_TRSH BIT(4)
183 183
184/* Offload control (Sparrow B0+) */
185#define RGF_DMA_OFUL_NID_0 (0x881cd4)
186 #define BIT_DMA_OFUL_NID_0_RX_EXT_TR_EN BIT(0)
187 #define BIT_DMA_OFUL_NID_0_TX_EXT_TR_EN BIT(1)
188 #define BIT_DMA_OFUL_NID_0_RX_EXT_A3_SRC BIT(2)
189 #define BIT_DMA_OFUL_NID_0_TX_EXT_A3_SRC BIT(3)
190
184/* New (sparrow v2+) interrupt moderation control */ 191/* New (sparrow v2+) interrupt moderation control */
185#define RGF_DMA_ITR_TX_DESQ_NO_MOD (0x881d40) 192#define RGF_DMA_ITR_TX_DESQ_NO_MOD (0x881d40)
186#define RGF_DMA_ITR_TX_CNT_TRSH (0x881d34) 193#define RGF_DMA_ITR_TX_CNT_TRSH (0x881d34)