Second part of unifying mt76x02_sta structure between mt76x0 and mt76x2.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
#ifndef __MT76X02_MAC_H
#define __MT76X02_MAC_H
+#include <linux/average.h>
+
struct mt76x02_tx_status {
u8 valid:1;
u8 success:1;
struct mt76_wcid group_wcid;
};
+DECLARE_EWMA(signal, 10, 8);
+
struct mt76x02_sta {
struct mt76_wcid wcid; /* must be first */
struct mt76x02_vif *vif;
struct mt76x02_tx_status status;
int n_frames;
+
+ struct ewma_signal rssi;
+ int inactive_count;
};
static inline bool mt76x02_wait_for_mac(struct mt76_dev *dev)
#include <linux/mutex.h>
#include <linux/bitops.h>
#include <linux/kfifo.h>
-#include <linux/average.h>
#define MT7662_FIRMWARE "mt7662.bin"
#define MT7662_ROM_PATCH "mt7662_rom_patch.bin"
#include "mt76x2_mac.h"
#include "mt76x2_dfs.h"
-DECLARE_EWMA(signal, 10, 8)
-
struct mt76x2_mcu {
struct mutex mutex;
int txpower_cur;
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 sk_buff *rx_head;
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)
{
return mt76_chip(&dev->mt76) == 0x7612;
int mt76x2_insert_hdr_pad(struct sk_buff *skb);
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,
- 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_init_txpower(struct mt76x2_dev *dev,
struct ieee80211_supported_band *sband);
enum ieee80211_ampdu_mlme_action action = params->action;
struct ieee80211_sta *sta = params->sta;
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];
u16 tid = params->tid;
u16 *ssn = ¶ms->ssn;
struct ieee80211_sta *sta)
{
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;
int ret = 0;
int idx = 0;
struct ieee80211_sta *sta)
{
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 i;
{
struct mt76x2_dev *dev = hw->priv;
struct mt76x02_vif *mvif = (struct mt76x02_vif *) vif->drv_priv;
- struct mt76x2_sta *msta;
+ struct mt76x02_sta *msta;
struct mt76_wcid *wcid;
int idx = key->keyidx;
int ret;
!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
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;
if (cmd == SET_KEY) {
struct ieee80211_sta *sta)
{
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_tx_rate rate = {};
int fifo_size;
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);
if (!status_fifo)
return -ENOMEM;
hw->max_rate_tries = 1;
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);
ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
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;
u8 update = 1;
bool ret;
void mt76x2_mac_process_tx_status_fifo(struct mt76x2_dev *dev)
{
- struct mt76x2_tx_status stat;
+ struct mt76x02_tx_status stat;
u8 update = 1;
while (kfifo_get(&dev->txstatus_fifo, &stat))
struct mt76x02_vif;
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 {
unsigned long jiffies;
u8 tries;
EXPORT_SYMBOL_GPL(mt76x2_mac_stop);
bool mt76x2_mac_load_tx_status(struct mt76x2_dev *dev,
- struct mt76x2_tx_status *stat)
+ struct mt76x02_tx_status *stat)
{
u32 stat1, stat2;
static void
mt76x2_mac_fill_tx_status(struct mt76x2_dev *dev,
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;
int cur_idx, last_rate;
}
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_sta *sta = NULL;
struct mt76_wcid *wcid = NULL;
- struct mt76x2_sta *msta = NULL;
+ struct mt76x02_sta *msta = NULL;
rcu_read_lock();
if (stat->wcid < ARRAY_SIZE(dev->wcid))
if (wcid) {
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,
drv_priv);
}
return rssi;
}
-static struct mt76x2_sta *
+static struct mt76x02_sta *
mt76x2_rx_get_sta(struct mt76x2_dev *dev, u8 idx)
{
struct mt76_wcid *wcid;
if (!wcid)
return NULL;
- return container_of(wcid, struct mt76x2_sta, wcid);
+ return container_of(wcid, struct mt76x02_sta, 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)
{
if (!sta)
{
struct mt76_rx_status *status = (struct mt76_rx_status *) skb->cb;
struct mt76x2_rxwi *rxwi = rxi;
- struct mt76x2_sta *sta;
+ struct mt76x02_sta *sta;
u32 rxinfo = le32_to_cpu(rxwi->rxinfo);
u32 ctl = le32_to_cpu(rxwi->ctl);
u16 rate = le16_to_cpu(rxwi->rate);
void
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);
int idx = msta->wcid.idx;
int mt76x2_phy_get_min_avg_rssi(struct mt76x2_dev *dev)
{
- struct mt76x2_sta *sta;
+ struct mt76x02_sta *sta;
struct mt76_wcid *wcid;
int i, j, min_rssi = 0;
s8 cur_rssi;
if (!wcid)
continue;
- sta = container_of(wcid, struct mt76x2_sta, wcid);
+ sta = container_of(wcid, struct mt76x02_sta, wcid);
spin_lock(&dev->mt76.rx_lock);
if (sta->inactive_count++ < 5)
cur_rssi = ewma_signal_read(&sta->rssi);
TRACE_EVENT(mac_txstat_fetch,
TP_PROTO(struct mt76x2_dev *dev,
- struct mt76x2_tx_status *stat),
+ struct mt76x02_tx_status *stat),
TP_ARGS(dev, stat),
struct mt76_wcid *wcid = &dev->global_wcid;
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;
/* sw encrypted frames */
if (!info->control.hw_key && wcid->hw_key_idx != 0xff)
bool mt76x2u_tx_status_data(struct mt76_dev *mdev, u8 *update)
{
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))
return false;