Commit b2d91fb3 authored by Stanislaw Gruszka's avatar Stanislaw Gruszka Committed by Kalle Valo

mt76: unify sta structure part 2

Second part of unifying mt76x02_sta structure between mt76x0 and mt76x2.
Signed-off-by: default avatarStanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent f5a7f126
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#ifndef __MT76X02_MAC_H #ifndef __MT76X02_MAC_H
#define __MT76X02_MAC_H #define __MT76X02_MAC_H
#include <linux/average.h>
struct mt76x02_tx_status { struct mt76x02_tx_status {
u8 valid:1; u8 valid:1;
u8 success:1; u8 success:1;
...@@ -35,12 +37,17 @@ struct mt76x02_vif { ...@@ -35,12 +37,17 @@ struct mt76x02_vif {
struct mt76_wcid group_wcid; struct mt76_wcid group_wcid;
}; };
DECLARE_EWMA(signal, 10, 8);
struct mt76x02_sta { struct mt76x02_sta {
struct mt76_wcid wcid; /* must be first */ struct mt76_wcid wcid; /* must be first */
struct mt76x02_vif *vif; struct mt76x02_vif *vif;
struct mt76x02_tx_status status; struct mt76x02_tx_status status;
int n_frames; int n_frames;
struct ewma_signal rssi;
int inactive_count;
}; };
static inline bool mt76x02_wait_for_mac(struct mt76_dev *dev) static inline bool mt76x02_wait_for_mac(struct mt76_dev *dev)
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/kfifo.h> #include <linux/kfifo.h>
#include <linux/average.h>
#define MT7662_FIRMWARE "mt7662.bin" #define MT7662_FIRMWARE "mt7662.bin"
#define MT7662_ROM_PATCH "mt7662_rom_patch.bin" #define MT7662_ROM_PATCH "mt7662_rom_patch.bin"
...@@ -51,8 +50,6 @@ ...@@ -51,8 +50,6 @@
#include "mt76x2_mac.h" #include "mt76x2_mac.h"
#include "mt76x2_dfs.h" #include "mt76x2_dfs.h"
DECLARE_EWMA(signal, 10, 8)
struct mt76x2_mcu { struct mt76x2_mcu {
struct mutex mutex; struct mutex mutex;
...@@ -104,7 +101,7 @@ struct mt76x2_dev { ...@@ -104,7 +101,7 @@ struct mt76x2_dev {
int txpower_cur; int txpower_cur;
u8 txdone_seq; u8 txdone_seq;
DECLARE_KFIFO_PTR(txstatus_fifo, struct mt76x2_tx_status); DECLARE_KFIFO_PTR(txstatus_fifo, struct mt76x02_tx_status);
struct mt76x2_mcu mcu; struct mt76x2_mcu mcu;
struct sk_buff *rx_head; struct sk_buff *rx_head;
...@@ -144,17 +141,6 @@ struct mt76x2_dev { ...@@ -144,17 +141,6 @@ struct mt76x2_dev {
struct mt76x2_dfs_pattern_detector dfs_pd; struct mt76x2_dfs_pattern_detector dfs_pd;
}; };
struct mt76x2_sta {
struct mt76_wcid wcid; /* must be first */
struct mt76x02_vif *vif;
struct mt76x2_tx_status status;
int n_frames;
struct ewma_signal rssi;
int inactive_count;
};
static inline bool is_mt7612(struct mt76x2_dev *dev) static inline bool is_mt7612(struct mt76x2_dev *dev)
{ {
return mt76_chip(&dev->mt76) == 0x7612; return mt76_chip(&dev->mt76) == 0x7612;
...@@ -264,9 +250,9 @@ void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr); ...@@ -264,9 +250,9 @@ void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr);
int mt76x2_insert_hdr_pad(struct sk_buff *skb); int mt76x2_insert_hdr_pad(struct sk_buff *skb);
bool mt76x2_mac_load_tx_status(struct mt76x2_dev *dev, bool mt76x2_mac_load_tx_status(struct mt76x2_dev *dev,
struct mt76x2_tx_status *stat); struct mt76x02_tx_status *stat);
void mt76x2_send_tx_status(struct mt76x2_dev *dev, void mt76x2_send_tx_status(struct mt76x2_dev *dev,
struct mt76x2_tx_status *stat, u8 *update); struct mt76x02_tx_status *stat, u8 *update);
void mt76x2_reset_wlan(struct mt76x2_dev *dev, bool enable); void mt76x2_reset_wlan(struct mt76x2_dev *dev, bool enable);
void mt76x2_init_txpower(struct mt76x2_dev *dev, void mt76x2_init_txpower(struct mt76x2_dev *dev,
struct ieee80211_supported_band *sband); struct ieee80211_supported_band *sband);
......
...@@ -24,7 +24,7 @@ int mt76x2_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ...@@ -24,7 +24,7 @@ int mt76x2_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
enum ieee80211_ampdu_mlme_action action = params->action; enum ieee80211_ampdu_mlme_action action = params->action;
struct ieee80211_sta *sta = params->sta; struct ieee80211_sta *sta = params->sta;
struct mt76x2_dev *dev = hw->priv; struct mt76x2_dev *dev = hw->priv;
struct mt76x2_sta *msta = (struct mt76x2_sta *) sta->drv_priv; struct mt76x02_sta *msta = (struct mt76x02_sta *) sta->drv_priv;
struct ieee80211_txq *txq = sta->txq[params->tid]; struct ieee80211_txq *txq = sta->txq[params->tid];
u16 tid = params->tid; u16 tid = params->tid;
u16 *ssn = &params->ssn; u16 *ssn = &params->ssn;
...@@ -73,7 +73,7 @@ int mt76x2_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ...@@ -73,7 +73,7 @@ int mt76x2_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_sta *sta) struct ieee80211_sta *sta)
{ {
struct mt76x2_dev *dev = hw->priv; struct mt76x2_dev *dev = hw->priv;
struct mt76x2_sta *msta = (struct mt76x2_sta *) sta->drv_priv; struct mt76x02_sta *msta = (struct mt76x02_sta *) sta->drv_priv;
struct mt76x02_vif *mvif = (struct mt76x02_vif *) vif->drv_priv; struct mt76x02_vif *mvif = (struct mt76x02_vif *) vif->drv_priv;
int ret = 0; int ret = 0;
int idx = 0; int idx = 0;
...@@ -114,7 +114,7 @@ int mt76x2_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ...@@ -114,7 +114,7 @@ int mt76x2_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_sta *sta) struct ieee80211_sta *sta)
{ {
struct mt76x2_dev *dev = hw->priv; struct mt76x2_dev *dev = hw->priv;
struct mt76x2_sta *msta = (struct mt76x2_sta *) sta->drv_priv; struct mt76x02_sta *msta = (struct mt76x02_sta *) sta->drv_priv;
int idx = msta->wcid.idx; int idx = msta->wcid.idx;
int i; int i;
...@@ -146,7 +146,7 @@ int mt76x2_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, ...@@ -146,7 +146,7 @@ int mt76x2_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
{ {
struct mt76x2_dev *dev = hw->priv; struct mt76x2_dev *dev = hw->priv;
struct mt76x02_vif *mvif = (struct mt76x02_vif *) vif->drv_priv; struct mt76x02_vif *mvif = (struct mt76x02_vif *) vif->drv_priv;
struct mt76x2_sta *msta; struct mt76x02_sta *msta;
struct mt76_wcid *wcid; struct mt76_wcid *wcid;
int idx = key->keyidx; int idx = key->keyidx;
int ret; int ret;
...@@ -173,7 +173,7 @@ int mt76x2_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, ...@@ -173,7 +173,7 @@ int mt76x2_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
return -EOPNOTSUPP; return -EOPNOTSUPP;
msta = sta ? (struct mt76x2_sta *) sta->drv_priv : NULL; msta = sta ? (struct mt76x02_sta *) sta->drv_priv : NULL;
wcid = msta ? &msta->wcid : &mvif->group_wcid; wcid = msta ? &msta->wcid : &mvif->group_wcid;
if (cmd == SET_KEY) { if (cmd == SET_KEY) {
...@@ -256,7 +256,7 @@ void mt76x2_sta_rate_tbl_update(struct ieee80211_hw *hw, ...@@ -256,7 +256,7 @@ void mt76x2_sta_rate_tbl_update(struct ieee80211_hw *hw,
struct ieee80211_sta *sta) struct ieee80211_sta *sta)
{ {
struct mt76x2_dev *dev = hw->priv; struct mt76x2_dev *dev = hw->priv;
struct mt76x2_sta *msta = (struct mt76x2_sta *) sta->drv_priv; struct mt76x02_sta *msta = (struct mt76x02_sta *) sta->drv_priv;
struct ieee80211_sta_rates *rates = rcu_dereference(sta->rates); struct ieee80211_sta_rates *rates = rcu_dereference(sta->rates);
struct ieee80211_tx_rate rate = {}; struct ieee80211_tx_rate rate = {};
......
...@@ -533,7 +533,7 @@ int mt76x2_register_device(struct mt76x2_dev *dev) ...@@ -533,7 +533,7 @@ int mt76x2_register_device(struct mt76x2_dev *dev)
int fifo_size; int fifo_size;
int i, ret; int i, ret;
fifo_size = roundup_pow_of_two(32 * sizeof(struct mt76x2_tx_status)); fifo_size = roundup_pow_of_two(32 * sizeof(struct mt76x02_tx_status));
status_fifo = devm_kzalloc(dev->mt76.dev, fifo_size, GFP_KERNEL); status_fifo = devm_kzalloc(dev->mt76.dev, fifo_size, GFP_KERNEL);
if (!status_fifo) if (!status_fifo)
return -ENOMEM; return -ENOMEM;
......
...@@ -208,7 +208,7 @@ void mt76x2_init_device(struct mt76x2_dev *dev) ...@@ -208,7 +208,7 @@ void mt76x2_init_device(struct mt76x2_dev *dev)
hw->max_rate_tries = 1; hw->max_rate_tries = 1;
hw->extra_tx_headroom = 2; hw->extra_tx_headroom = 2;
hw->sta_data_size = sizeof(struct mt76x2_sta); hw->sta_data_size = sizeof(struct mt76x02_sta);
hw->vif_data_size = sizeof(struct mt76x02_vif); hw->vif_data_size = sizeof(struct mt76x02_vif);
ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES); ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
......
...@@ -30,7 +30,7 @@ void mt76x2_mac_set_bssid(struct mt76x2_dev *dev, u8 idx, const u8 *addr) ...@@ -30,7 +30,7 @@ void mt76x2_mac_set_bssid(struct mt76x2_dev *dev, u8 idx, const u8 *addr)
void mt76x2_mac_poll_tx_status(struct mt76x2_dev *dev, bool irq) void mt76x2_mac_poll_tx_status(struct mt76x2_dev *dev, bool irq)
{ {
struct mt76x2_tx_status stat = {}; struct mt76x02_tx_status stat = {};
unsigned long flags; unsigned long flags;
u8 update = 1; u8 update = 1;
bool ret; bool ret;
...@@ -78,7 +78,7 @@ mt76x2_mac_queue_txdone(struct mt76x2_dev *dev, struct sk_buff *skb, ...@@ -78,7 +78,7 @@ mt76x2_mac_queue_txdone(struct mt76x2_dev *dev, struct sk_buff *skb,
void mt76x2_mac_process_tx_status_fifo(struct mt76x2_dev *dev) void mt76x2_mac_process_tx_status_fifo(struct mt76x2_dev *dev)
{ {
struct mt76x2_tx_status stat; struct mt76x02_tx_status stat;
u8 update = 1; u8 update = 1;
while (kfifo_get(&dev->txstatus_fifo, &stat)) while (kfifo_get(&dev->txstatus_fifo, &stat))
......
...@@ -25,17 +25,6 @@ struct mt76x2_sta; ...@@ -25,17 +25,6 @@ struct mt76x2_sta;
struct mt76x02_vif; struct mt76x02_vif;
struct mt76x2_txwi; struct mt76x2_txwi;
struct mt76x2_tx_status {
u8 valid:1;
u8 success:1;
u8 aggr:1;
u8 ack_req:1;
u8 wcid;
u8 pktid;
u8 retry;
u16 rate;
} __packed __aligned(2);
struct mt76x2_tx_info { struct mt76x2_tx_info {
unsigned long jiffies; unsigned long jiffies;
u8 tries; u8 tries;
......
...@@ -54,7 +54,7 @@ void mt76x2_mac_stop(struct mt76x2_dev *dev, bool force) ...@@ -54,7 +54,7 @@ void mt76x2_mac_stop(struct mt76x2_dev *dev, bool force)
EXPORT_SYMBOL_GPL(mt76x2_mac_stop); EXPORT_SYMBOL_GPL(mt76x2_mac_stop);
bool mt76x2_mac_load_tx_status(struct mt76x2_dev *dev, bool mt76x2_mac_load_tx_status(struct mt76x2_dev *dev,
struct mt76x2_tx_status *stat) struct mt76x02_tx_status *stat)
{ {
u32 stat1, stat2; u32 stat1, stat2;
...@@ -138,7 +138,7 @@ mt76x2_mac_process_tx_rate(struct ieee80211_tx_rate *txrate, u16 rate, ...@@ -138,7 +138,7 @@ mt76x2_mac_process_tx_rate(struct ieee80211_tx_rate *txrate, u16 rate,
static void static void
mt76x2_mac_fill_tx_status(struct mt76x2_dev *dev, mt76x2_mac_fill_tx_status(struct mt76x2_dev *dev,
struct ieee80211_tx_info *info, struct ieee80211_tx_info *info,
struct mt76x2_tx_status *st, int n_frames) struct mt76x02_tx_status *st, int n_frames)
{ {
struct ieee80211_tx_rate *rate = info->status.rates; struct ieee80211_tx_rate *rate = info->status.rates;
int cur_idx, last_rate; int cur_idx, last_rate;
...@@ -178,12 +178,12 @@ mt76x2_mac_fill_tx_status(struct mt76x2_dev *dev, ...@@ -178,12 +178,12 @@ mt76x2_mac_fill_tx_status(struct mt76x2_dev *dev,
} }
void mt76x2_send_tx_status(struct mt76x2_dev *dev, void mt76x2_send_tx_status(struct mt76x2_dev *dev,
struct mt76x2_tx_status *stat, u8 *update) struct mt76x02_tx_status *stat, u8 *update)
{ {
struct ieee80211_tx_info info = {}; struct ieee80211_tx_info info = {};
struct ieee80211_sta *sta = NULL; struct ieee80211_sta *sta = NULL;
struct mt76_wcid *wcid = NULL; struct mt76_wcid *wcid = NULL;
struct mt76x2_sta *msta = NULL; struct mt76x02_sta *msta = NULL;
rcu_read_lock(); rcu_read_lock();
if (stat->wcid < ARRAY_SIZE(dev->wcid)) if (stat->wcid < ARRAY_SIZE(dev->wcid))
...@@ -192,7 +192,7 @@ void mt76x2_send_tx_status(struct mt76x2_dev *dev, ...@@ -192,7 +192,7 @@ void mt76x2_send_tx_status(struct mt76x2_dev *dev,
if (wcid) { if (wcid) {
void *priv; void *priv;
priv = msta = container_of(wcid, struct mt76x2_sta, wcid); priv = msta = container_of(wcid, struct mt76x02_sta, wcid);
sta = container_of(priv, struct ieee80211_sta, sta = container_of(priv, struct ieee80211_sta,
drv_priv); drv_priv);
} }
...@@ -472,7 +472,7 @@ int mt76x2_mac_get_rssi(struct mt76x2_dev *dev, s8 rssi, int chain) ...@@ -472,7 +472,7 @@ int mt76x2_mac_get_rssi(struct mt76x2_dev *dev, s8 rssi, int chain)
return rssi; return rssi;
} }
static struct mt76x2_sta * static struct mt76x02_sta *
mt76x2_rx_get_sta(struct mt76x2_dev *dev, u8 idx) mt76x2_rx_get_sta(struct mt76x2_dev *dev, u8 idx)
{ {
struct mt76_wcid *wcid; struct mt76_wcid *wcid;
...@@ -484,11 +484,11 @@ mt76x2_rx_get_sta(struct mt76x2_dev *dev, u8 idx) ...@@ -484,11 +484,11 @@ mt76x2_rx_get_sta(struct mt76x2_dev *dev, u8 idx)
if (!wcid) if (!wcid)
return NULL; return NULL;
return container_of(wcid, struct mt76x2_sta, wcid); return container_of(wcid, struct mt76x02_sta, wcid);
} }
static struct mt76_wcid * static struct mt76_wcid *
mt76x2_rx_get_sta_wcid(struct mt76x2_dev *dev, struct mt76x2_sta *sta, mt76x2_rx_get_sta_wcid(struct mt76x2_dev *dev, struct mt76x02_sta *sta,
bool unicast) bool unicast)
{ {
if (!sta) if (!sta)
...@@ -505,7 +505,7 @@ int mt76x2_mac_process_rx(struct mt76x2_dev *dev, struct sk_buff *skb, ...@@ -505,7 +505,7 @@ int mt76x2_mac_process_rx(struct mt76x2_dev *dev, struct sk_buff *skb,
{ {
struct mt76_rx_status *status = (struct mt76_rx_status *) skb->cb; struct mt76_rx_status *status = (struct mt76_rx_status *) skb->cb;
struct mt76x2_rxwi *rxwi = rxi; struct mt76x2_rxwi *rxwi = rxi;
struct mt76x2_sta *sta; struct mt76x02_sta *sta;
u32 rxinfo = le32_to_cpu(rxwi->rxinfo); u32 rxinfo = le32_to_cpu(rxwi->rxinfo);
u32 ctl = le32_to_cpu(rxwi->ctl); u32 ctl = le32_to_cpu(rxwi->ctl);
u16 rate = le16_to_cpu(rxwi->rate); u16 rate = le16_to_cpu(rxwi->rate);
......
...@@ -202,7 +202,7 @@ mt76x2_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ...@@ -202,7 +202,7 @@ mt76x2_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
void void
mt76x2_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps) mt76x2_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
{ {
struct mt76x2_sta *msta = (struct mt76x2_sta *) sta->drv_priv; struct mt76x02_sta *msta = (struct mt76x02_sta *) sta->drv_priv;
struct mt76x2_dev *dev = container_of(mdev, struct mt76x2_dev, mt76); struct mt76x2_dev *dev = container_of(mdev, struct mt76x2_dev, mt76);
int idx = msta->wcid.idx; int idx = msta->wcid.idx;
......
...@@ -303,7 +303,7 @@ EXPORT_SYMBOL_GPL(mt76x2_phy_set_band); ...@@ -303,7 +303,7 @@ EXPORT_SYMBOL_GPL(mt76x2_phy_set_band);
int mt76x2_phy_get_min_avg_rssi(struct mt76x2_dev *dev) int mt76x2_phy_get_min_avg_rssi(struct mt76x2_dev *dev)
{ {
struct mt76x2_sta *sta; struct mt76x02_sta *sta;
struct mt76_wcid *wcid; struct mt76_wcid *wcid;
int i, j, min_rssi = 0; int i, j, min_rssi = 0;
s8 cur_rssi; s8 cur_rssi;
...@@ -325,7 +325,7 @@ int mt76x2_phy_get_min_avg_rssi(struct mt76x2_dev *dev) ...@@ -325,7 +325,7 @@ int mt76x2_phy_get_min_avg_rssi(struct mt76x2_dev *dev)
if (!wcid) if (!wcid)
continue; continue;
sta = container_of(wcid, struct mt76x2_sta, wcid); sta = container_of(wcid, struct mt76x02_sta, wcid);
spin_lock(&dev->mt76.rx_lock); spin_lock(&dev->mt76.rx_lock);
if (sta->inactive_count++ < 5) if (sta->inactive_count++ < 5)
cur_rssi = ewma_signal_read(&sta->rssi); cur_rssi = ewma_signal_read(&sta->rssi);
......
...@@ -75,7 +75,7 @@ DEFINE_EVENT(dev_txid_evt, mac_txdone_add, ...@@ -75,7 +75,7 @@ DEFINE_EVENT(dev_txid_evt, mac_txdone_add,
TRACE_EVENT(mac_txstat_fetch, TRACE_EVENT(mac_txstat_fetch,
TP_PROTO(struct mt76x2_dev *dev, TP_PROTO(struct mt76x2_dev *dev,
struct mt76x2_tx_status *stat), struct mt76x02_tx_status *stat),
TP_ARGS(dev, stat), TP_ARGS(dev, stat),
......
...@@ -27,9 +27,9 @@ void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control, ...@@ -27,9 +27,9 @@ void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
struct mt76_wcid *wcid = &dev->global_wcid; struct mt76_wcid *wcid = &dev->global_wcid;
if (control->sta) { if (control->sta) {
struct mt76x2_sta *msta; struct mt76x02_sta *msta;
msta = (struct mt76x2_sta *)control->sta->drv_priv; msta = (struct mt76x02_sta *)control->sta->drv_priv;
wcid = &msta->wcid; wcid = &msta->wcid;
/* sw encrypted frames */ /* sw encrypted frames */
if (!info->control.hw_key && wcid->hw_key_idx != 0xff) if (!info->control.hw_key && wcid->hw_key_idx != 0xff)
......
...@@ -66,7 +66,7 @@ mt76x2u_set_txinfo(struct sk_buff *skb, ...@@ -66,7 +66,7 @@ mt76x2u_set_txinfo(struct sk_buff *skb,
bool mt76x2u_tx_status_data(struct mt76_dev *mdev, u8 *update) bool mt76x2u_tx_status_data(struct mt76_dev *mdev, u8 *update)
{ {
struct mt76x2_dev *dev = container_of(mdev, struct mt76x2_dev, mt76); struct mt76x2_dev *dev = container_of(mdev, struct mt76x2_dev, mt76);
struct mt76x2_tx_status stat; struct mt76x02_tx_status stat;
if (!mt76x2_mac_load_tx_status(dev, &stat)) if (!mt76x2_mac_load_tx_status(dev, &stat))
return false; return false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment