* [PATCH 02/11] mt76: mt7603: fix tx status HT rate validation
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 03/11] mt76: mt76x2: fix external LNA gain settings Felix Fietkau
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
Use the correct variable in the check. Fixes an uninitialized variable warning
Reported-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Fixes: c8846e1015022 ("mt76: add driver for MT7603E and MT7628/7688")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt7603/mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/mac.c b/drivers/net/wireless/mediatek/mt76/mt7603/mac.c
index 0a0115861b51..5e31d7da96fc 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/mac.c
@@ -1072,7 +1072,7 @@ mt7603_fill_txs(struct mt7603_dev *dev, struct mt7603_sta *sta,
case MT_PHY_TYPE_HT:
final_rate_flags |= IEEE80211_TX_RC_MCS;
final_rate &= GENMASK(5, 0);
- if (i > 15)
+ if (final_rate > 15)
return false;
break;
default:
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 03/11] mt76: mt76x2: fix external LNA gain settings
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
2019-03-04 8:02 ` [PATCH 02/11] mt76: mt7603: fix tx status HT rate validation Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 04/11] mt76: mt76x2: fix 2.4 GHz channel " Felix Fietkau
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
Devices with external LNA need different values for AGC registers 8 and 9
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt76x2/phy.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c
index 1848e8ab2e21..c7e71f2ba2a7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c
@@ -260,10 +260,15 @@ mt76x2_phy_set_gain_val(struct mt76x02_dev *dev)
gain_val[0] = dev->cal.agc_gain_cur[0] - dev->cal.agc_gain_adjust;
gain_val[1] = dev->cal.agc_gain_cur[1] - dev->cal.agc_gain_adjust;
- if (dev->mt76.chandef.width >= NL80211_CHAN_WIDTH_40)
+ val = 0x1836 << 16;
+ if (!mt76x2_has_ext_lna(dev) &&
+ dev->mt76.chandef.width >= NL80211_CHAN_WIDTH_40)
val = 0x1e42 << 16;
- else
- val = 0x1836 << 16;
+
+ if (mt76x2_has_ext_lna(dev) &&
+ dev->mt76.chandef.chan->band == NL80211_BAND_2GHZ &&
+ dev->mt76.chandef.width < NL80211_CHAN_WIDTH_40)
+ val = 0x0f36 << 16;
val |= 0xf8;
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 04/11] mt76: mt76x2: fix 2.4 GHz channel gain settings
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
2019-03-04 8:02 ` [PATCH 02/11] mt76: mt7603: fix tx status HT rate validation Felix Fietkau
2019-03-04 8:02 ` [PATCH 03/11] mt76: mt76x2: fix external LNA gain settings Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 05/11] mt76: mt7603: clear ps filtering mode before releasing buffered frames Felix Fietkau
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
AGC register 35, 37 override for the low gain setting should only be done
on 5 GHz. Also, 2.4 GHz needs a different value for register 35
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
.../net/wireless/mediatek/mt76/mt76x2/phy.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c
index c7e71f2ba2a7..769a9b972044 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/phy.c
@@ -285,6 +285,7 @@ void mt76x2_phy_update_channel_gain(struct mt76x02_dev *dev)
{
u8 *gain = dev->cal.agc_gain_init;
u8 low_gain_delta, gain_delta;
+ u32 agc_35, agc_37;
bool gain_change;
int low_gain;
u32 val;
@@ -323,6 +324,16 @@ void mt76x2_phy_update_channel_gain(struct mt76x02_dev *dev)
else
low_gain_delta = 14;
+ agc_37 = 0x2121262c;
+ if (dev->mt76.chandef.chan->band == NL80211_BAND_2GHZ)
+ agc_35 = 0x11111516;
+ else if (low_gain == 2)
+ agc_35 = agc_37 = 0x08080808;
+ else if (dev->mt76.chandef.width == NL80211_CHAN_WIDTH_80)
+ agc_35 = 0x10101014;
+ else
+ agc_35 = 0x11111116;
+
if (low_gain == 2) {
mt76_wr(dev, MT_BBP(RXO, 18), 0xf000a990);
mt76_wr(dev, MT_BBP(AGC, 35), 0x08080808);
@@ -331,15 +342,13 @@ void mt76x2_phy_update_channel_gain(struct mt76x02_dev *dev)
dev->cal.agc_gain_adjust = 0;
} else {
mt76_wr(dev, MT_BBP(RXO, 18), 0xf000a991);
- if (dev->mt76.chandef.width == NL80211_CHAN_WIDTH_80)
- mt76_wr(dev, MT_BBP(AGC, 35), 0x10101014);
- else
- mt76_wr(dev, MT_BBP(AGC, 35), 0x11111116);
- mt76_wr(dev, MT_BBP(AGC, 37), 0x2121262C);
gain_delta = 0;
dev->cal.agc_gain_adjust = low_gain_delta;
}
+ mt76_wr(dev, MT_BBP(AGC, 35), agc_35);
+ mt76_wr(dev, MT_BBP(AGC, 37), agc_37);
+
dev->cal.agc_gain_cur[0] = gain[0] - gain_delta;
dev->cal.agc_gain_cur[1] = gain[1] - gain_delta;
mt76x2_phy_set_gain_val(dev);
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 05/11] mt76: mt7603: clear ps filtering mode before releasing buffered frames
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
` (2 preceding siblings ...)
2019-03-04 8:02 ` [PATCH 04/11] mt76: mt76x2: fix 2.4 GHz channel " Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 06/11] mt76: mt7603: fix up hardware queue index for PS filtered packets Felix Fietkau
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
Fixes sending them, otherwise they loop back right into the buffer
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt7603/main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
index b10775ed92e6..8da0b8707d24 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
@@ -399,6 +399,8 @@ mt7603_release_buffered_frames(struct ieee80211_hw *hw,
__skb_queue_head_init(&list);
+ mt7603_wtbl_set_ps(dev, msta, false);
+
spin_lock_bh(&dev->ps_lock);
skb_queue_walk_safe(&msta->psq, skb, tmp) {
if (!nframes)
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 06/11] mt76: mt7603: fix up hardware queue index for PS filtered packets
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
` (3 preceding siblings ...)
2019-03-04 8:02 ` [PATCH 05/11] mt76: mt7603: clear ps filtering mode before releasing buffered frames Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 07/11] mt76: mt7603: notify mac80211 about buffered frames in ps queue Felix Fietkau
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
Make the queue index match the hardware queue on which they get sent out
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt7603/dma.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
index 5067c49142f7..72d189daad38 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
@@ -47,6 +47,10 @@ mt7603_rx_loopback_skb(struct mt7603_dev *dev, struct sk_buff *skb)
val = le32_to_cpu(txd[0]);
skb_set_queue_mapping(skb, FIELD_GET(MT_TXD0_Q_IDX, val));
+ val &= ~(MT_TXD0_P_IDX | MT_TXD0_Q_IDX);
+ val |= FIELD_PREP(MT_TXD0_Q_IDX, MT_TX_HW_QUEUE_MGMT);
+ txd[0] = cpu_to_le32(val);
+
spin_lock_bh(&dev->ps_lock);
__skb_queue_tail(&msta->psq, skb);
if (skb_queue_len(&msta->psq) >= 64) {
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 07/11] mt76: mt7603: notify mac80211 about buffered frames in ps queue
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
` (4 preceding siblings ...)
2019-03-04 8:02 ` [PATCH 06/11] mt76: mt7603: fix up hardware queue index for PS filtered packets Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 08/11] mt76: mt7603: clear the service period on releasing PS filtered packets Felix Fietkau
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
Also fix the size check for filtered powersave frames
Fixes a corner case with waking up clients
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt7603/dma.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
index 72d189daad38..4606b539190f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
@@ -24,12 +24,16 @@ static void
mt7603_rx_loopback_skb(struct mt7603_dev *dev, struct sk_buff *skb)
{
__le32 *txd = (__le32 *)skb->data;
+ struct ieee80211_hdr *hdr;
+ struct ieee80211_sta *sta;
struct mt7603_sta *msta;
struct mt76_wcid *wcid;
+ void *priv;
int idx;
u32 val;
+ u8 tid;
- if (skb->len < sizeof(MT_TXD_SIZE) + sizeof(struct ieee80211_hdr))
+ if (skb->len < MT_TXD_SIZE + sizeof(struct ieee80211_hdr))
goto free;
val = le32_to_cpu(txd[1]);
@@ -43,7 +47,7 @@ mt7603_rx_loopback_skb(struct mt7603_dev *dev, struct sk_buff *skb)
if (!wcid)
goto free;
- msta = container_of(wcid, struct mt7603_sta, wcid);
+ priv = msta = container_of(wcid, struct mt7603_sta, wcid);
val = le32_to_cpu(txd[0]);
skb_set_queue_mapping(skb, FIELD_GET(MT_TXD0_Q_IDX, val));
@@ -51,6 +55,11 @@ mt7603_rx_loopback_skb(struct mt7603_dev *dev, struct sk_buff *skb)
val |= FIELD_PREP(MT_TXD0_Q_IDX, MT_TX_HW_QUEUE_MGMT);
txd[0] = cpu_to_le32(val);
+ sta = container_of(priv, struct ieee80211_sta, drv_priv);
+ hdr = (struct ieee80211_hdr *) &skb->data[MT_TXD_SIZE];
+ tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK;
+ ieee80211_sta_set_buffered(sta, tid, true);
+
spin_lock_bh(&dev->ps_lock);
__skb_queue_tail(&msta->psq, skb);
if (skb_queue_len(&msta->psq) >= 64) {
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 08/11] mt76: mt7603: clear the service period on releasing PS filtered packets
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
` (5 preceding siblings ...)
2019-03-04 8:02 ` [PATCH 07/11] mt76: mt7603: notify mac80211 about buffered frames in ps queue Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 09/11] mt76: when releasing PS frames, end the service period if no frame was found Felix Fietkau
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
These packets have no txwi entry in the ring, so tracking via tx status does
not work. To prevent PS poll requests from being unanswered, end the service
period right away
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt7603/main.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
index 8da0b8707d24..ea25eff5e81c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
@@ -416,6 +416,9 @@ mt7603_release_buffered_frames(struct ieee80211_hw *hw,
}
spin_unlock_bh(&dev->ps_lock);
+ if (!skb_queue_empty(&list))
+ ieee80211_sta_eosp(sta);
+
mt7603_ps_tx_list(dev, &list);
if (nframes)
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 09/11] mt76: when releasing PS frames, end the service period if no frame was found
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
` (6 preceding siblings ...)
2019-03-04 8:02 ` [PATCH 08/11] mt76: mt7603: clear the service period on releasing PS filtered packets Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 10/11] mt76: mt76x02: disable ED/CCA by default Felix Fietkau
2019-03-04 8:02 ` [PATCH 11/11] mt76: mt7603: set moredata flag when queueing ps-filtered packets Felix Fietkau
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
Fixes a rare corner case if the txq dequeue attempt fails, but mac80211
still has PS buffered packets
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/tx.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
index fc7dffe066be..2585df512335 100644
--- a/drivers/net/wireless/mediatek/mt76/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/tx.c
@@ -377,7 +377,10 @@ mt76_release_buffered_frames(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
if (last_skb) {
mt76_queue_ps_skb(dev, sta, last_skb, true);
dev->queue_ops->kick(dev, hwq);
+ } else {
+ ieee80211_sta_eosp(sta);
}
+
spin_unlock_bh(&hwq->lock);
}
EXPORT_SYMBOL_GPL(mt76_release_buffered_frames);
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 10/11] mt76: mt76x02: disable ED/CCA by default
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
` (7 preceding siblings ...)
2019-03-04 8:02 ` [PATCH 09/11] mt76: when releasing PS frames, end the service period if no frame was found Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
2019-03-04 8:02 ` [PATCH 11/11] mt76: mt7603: set moredata flag when queueing ps-filtered packets Felix Fietkau
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
This feature has been reported to cause stability issues on several systems.
Disable it until it has been fixed and verified. It can still be enabled
through debugfs
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt76x02.h | 1 +
.../wireless/mediatek/mt76/mt76x02_debugfs.c | 27 +++++++++++++++++++
.../net/wireless/mediatek/mt76/mt76x02_dfs.c | 3 ++-
3 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02.h b/drivers/net/wireless/mediatek/mt76/mt76x02.h
index 0f0fab54e4f1..5ed75d66ef8e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02.h
@@ -118,6 +118,7 @@ struct mt76x02_dev {
unsigned long ed_trigger_timeout;
bool ed_tx_blocked;
bool ed_monitor;
+ u8 ed_monitor_enabled;
u8 ed_monitor_learning;
u8 ed_trigger;
u8 ed_silent;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c b/drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c
index 7580c5c986ff..b1d6fd4861e3 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c
@@ -116,6 +116,32 @@ static int read_agc(struct seq_file *file, void *data)
return 0;
}
+static int
+mt76_edcca_set(void *data, u64 val)
+{
+ struct mt76x02_dev *dev = data;
+ enum nl80211_dfs_regions region = dev->dfs_pd.region;
+
+ dev->ed_monitor_enabled = !!val;
+ dev->ed_monitor = dev->ed_monitor_enabled &&
+ region == NL80211_DFS_ETSI;
+ mt76x02_edcca_init(dev, true);
+
+ return 0;
+}
+
+static int
+mt76_edcca_get(void *data, u64 *val)
+{
+ struct mt76x02_dev *dev = data;
+
+ *val = dev->ed_monitor_enabled;
+ return 0;
+}
+
+DEFINE_DEBUGFS_ATTRIBUTE(fops_edcca, mt76_edcca_get, mt76_edcca_set,
+ "%lld\n");
+
void mt76x02_init_debugfs(struct mt76x02_dev *dev)
{
struct dentry *dir;
@@ -127,6 +153,7 @@ void mt76x02_init_debugfs(struct mt76x02_dev *dev)
debugfs_create_u8("temperature", 0400, dir, &dev->cal.temp);
debugfs_create_bool("tpc", 0600, dir, &dev->enable_tpc);
+ debugfs_create_file("edcca", 0400, dir, dev, &fops_edcca);
debugfs_create_file("ampdu_stat", 0400, dir, dev, &fops_ampdu_stat);
debugfs_create_file("dfs_stats", 0400, dir, dev, &fops_dfs_stat);
debugfs_create_devm_seqfile(dev->mt76.dev, "txpower", dir,
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c b/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c
index e4649103efd4..17d12d212d1b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c
@@ -885,7 +885,8 @@ mt76x02_dfs_set_domain(struct mt76x02_dev *dev,
if (dfs_pd->region != region) {
tasklet_disable(&dfs_pd->dfs_tasklet);
- dev->ed_monitor = region == NL80211_DFS_ETSI;
+ dev->ed_monitor = dev->ed_monitor_enabled &&
+ region == NL80211_DFS_ETSI;
mt76x02_edcca_init(dev, true);
dfs_pd->region = region;
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 11/11] mt76: mt7603: set moredata flag when queueing ps-filtered packets
2019-03-04 8:02 [PATCH 01/11] mt76: mt76x02: reduce false positives in ED/CCA tx blocking Felix Fietkau
` (8 preceding siblings ...)
2019-03-04 8:02 ` [PATCH 10/11] mt76: mt76x02: disable ED/CCA by default Felix Fietkau
@ 2019-03-04 8:02 ` Felix Fietkau
9 siblings, 0 replies; 11+ messages in thread
From: Felix Fietkau @ 2019-03-04 8:02 UTC (permalink / raw)
To: linux-wireless
Clients should poll for more packets afterwards
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
drivers/net/wireless/mediatek/mt76/mt7603/main.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
index ea25eff5e81c..cc0fe0933b2d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
@@ -5,6 +5,7 @@
#include <linux/pci.h>
#include <linux/module.h>
#include "mt7603.h"
+#include "mac.h"
#include "eeprom.h"
static int
@@ -385,6 +386,15 @@ mt7603_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
mt7603_ps_tx_list(dev, &list);
}
+static void
+mt7603_ps_set_more_data(struct sk_buff *skb)
+{
+ struct ieee80211_hdr *hdr;
+
+ hdr = (struct ieee80211_hdr *) &skb->data[MT_TXD_SIZE];
+ hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREDATA);
+}
+
static void
mt7603_release_buffered_frames(struct ieee80211_hw *hw,
struct ieee80211_sta *sta,
@@ -411,6 +421,7 @@ mt7603_release_buffered_frames(struct ieee80211_hw *hw,
skb_set_queue_mapping(skb, MT_TXQ_PSD);
__skb_unlink(skb, &msta->psq);
+ mt7603_ps_set_more_data(skb);
__skb_queue_tail(&list, skb);
nframes--;
}
--
2.17.0
^ permalink raw reply related [flat|nested] 11+ messages in thread