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 --- |