mac.c (0c881dc08fd71ca2673f31a64989fbb28eac26f4) mac.c (a71b648e352787db13184b9355c0b3ffc8a0824a)
1// SPDX-License-Identifier: ISC
2/* Copyright (C) 2020 MediaTek Inc. */
3
4#include <linux/etherdevice.h>
5#include <linux/timekeeping.h>
6#include "mt7915.h"
7#include "../dma.h"
8#include "mac.h"
9#include "mcu.h"
10
1// SPDX-License-Identifier: ISC
2/* Copyright (C) 2020 MediaTek Inc. */
3
4#include <linux/etherdevice.h>
5#include <linux/timekeeping.h>
6#include "mt7915.h"
7#include "../dma.h"
8#include "mac.h"
9#include "mcu.h"
10
11#define to_rssi(field, rxv) ((FIELD_GET(field, rxv) - 220) / 2)
11#define to_rssi(field, rcpi) ((FIELD_GET(field, rcpi) - 220) / 2)
12
13static const struct mt7915_dfs_radar_spec etsi_radar_specs = {
14 .pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
15 .radar_pattern = {
16 [5] = { 1, 0, 6, 32, 28, 0, 990, 5010, 17, 1, 1 },
17 [6] = { 1, 0, 9, 32, 28, 0, 615, 5010, 27, 1, 1 },
18 [7] = { 1, 0, 15, 32, 28, 0, 240, 445, 27, 1, 1 },
19 [8] = { 1, 0, 12, 32, 28, 0, 240, 510, 42, 1, 1 },

--- 93 unchanged lines hidden (view full) ---

113 spin_unlock_bh(&dev->sta_poll_lock);
114
115 rcu_read_lock();
116
117 while (true) {
118 bool clear = false;
119 u32 addr, val;
120 u16 idx;
12
13static const struct mt7915_dfs_radar_spec etsi_radar_specs = {
14 .pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
15 .radar_pattern = {
16 [5] = { 1, 0, 6, 32, 28, 0, 990, 5010, 17, 1, 1 },
17 [6] = { 1, 0, 9, 32, 28, 0, 615, 5010, 27, 1, 1 },
18 [7] = { 1, 0, 15, 32, 28, 0, 240, 445, 27, 1, 1 },
19 [8] = { 1, 0, 12, 32, 28, 0, 240, 510, 42, 1, 1 },

--- 93 unchanged lines hidden (view full) ---

113 spin_unlock_bh(&dev->sta_poll_lock);
114
115 rcu_read_lock();
116
117 while (true) {
118 bool clear = false;
119 u32 addr, val;
120 u16 idx;
121 s8 rssi[4];
121 u8 bw;
122
123 spin_lock_bh(&dev->sta_poll_lock);
124 if (list_empty(&sta_poll_list)) {
125 spin_unlock_bh(&dev->sta_poll_lock);
126 break;
127 }
128 msta = list_first_entry(&sta_poll_list,
129 struct mt7915_sta, poll_list);
130 list_del_init(&msta->poll_list);
131 spin_unlock_bh(&dev->sta_poll_lock);
132
133 idx = msta->wcid.idx;
122 u8 bw;
123
124 spin_lock_bh(&dev->sta_poll_lock);
125 if (list_empty(&sta_poll_list)) {
126 spin_unlock_bh(&dev->sta_poll_lock);
127 break;
128 }
129 msta = list_first_entry(&sta_poll_list,
130 struct mt7915_sta, poll_list);
131 list_del_init(&msta->poll_list);
132 spin_unlock_bh(&dev->sta_poll_lock);
133
134 idx = msta->wcid.idx;
135
136 /* refresh peer's airtime reporting */
134 addr = mt7915_mac_wtbl_lmac_addr(dev, idx, 20);
135
136 for (i = 0; i < IEEE80211_NUM_ACS; i++) {
137 u32 tx_last = msta->airtime_ac[i];
138 u32 rx_last = msta->airtime_ac[i + 4];
139
140 msta->airtime_ac[i] = mt76_rr(dev, addr);
141 msta->airtime_ac[i + 4] = mt76_rr(dev, addr + 4);

--- 62 unchanged lines hidden (view full) ---

204 rate->he_gi = (val & (0x3 << offs)) >> offs;
205 } else if (rate->flags &
206 (RATE_INFO_FLAGS_VHT_MCS | RATE_INFO_FLAGS_MCS)) {
207 if (val & BIT(12 + bw))
208 rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
209 else
210 rate->flags &= ~RATE_INFO_FLAGS_SHORT_GI;
211 }
137 addr = mt7915_mac_wtbl_lmac_addr(dev, idx, 20);
138
139 for (i = 0; i < IEEE80211_NUM_ACS; i++) {
140 u32 tx_last = msta->airtime_ac[i];
141 u32 rx_last = msta->airtime_ac[i + 4];
142
143 msta->airtime_ac[i] = mt76_rr(dev, addr);
144 msta->airtime_ac[i + 4] = mt76_rr(dev, addr + 4);

--- 62 unchanged lines hidden (view full) ---

207 rate->he_gi = (val & (0x3 << offs)) >> offs;
208 } else if (rate->flags &
209 (RATE_INFO_FLAGS_VHT_MCS | RATE_INFO_FLAGS_MCS)) {
210 if (val & BIT(12 + bw))
211 rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
212 else
213 rate->flags &= ~RATE_INFO_FLAGS_SHORT_GI;
214 }
215
216 /* get signal strength of resp frames (CTS/BA/ACK) */
217 addr = mt7915_mac_wtbl_lmac_addr(dev, idx, 30);
218 val = mt76_rr(dev, addr);
219
220 rssi[0] = to_rssi(GENMASK(7, 0), val);
221 rssi[1] = to_rssi(GENMASK(15, 8), val);
222 rssi[2] = to_rssi(GENMASK(23, 16), val);
223 rssi[3] = to_rssi(GENMASK(31, 14), val);
224
225 msta->ack_signal =
226 mt76_rx_signal(msta->vif->phy->mt76->antenna_mask, rssi);
227
228 ewma_avg_signal_add(&msta->avg_ack_signal, -msta->ack_signal);
212 }
213
214 rcu_read_unlock();
215}
216
217static int
218mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
219{

--- 1968 unchanged lines hidden ---
229 }
230
231 rcu_read_unlock();
232}
233
234static int
235mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
236{

--- 1968 unchanged lines hidden ---