mt76: unify rxwi parsing between mt76x2 and mt76x0 drivers
Unify rxwi parsing between mt76x2 and mt76x0. Remove the following routines: - mt76x0_phy_get_rssi - mt76x0_queue_rx_skb - mt76x0_mac_process_rx Moreover remove mt76x2/common.c and mt76x0/mac.h since are empty files Enable CCMP PN sw validation Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
d9f8934ed1
commit
9ba1e0e69c
@ -83,7 +83,8 @@ static const struct mt76_reg_pair mt76x0_mac_reg_table[] = {
|
||||
{ MT_LDO_CTRL_1, 0x6B006464 },
|
||||
{ MT_HT_BASIC_RATE, 0x00004003 },
|
||||
{ MT_HT_CTRL_CFG, 0x000001FF },
|
||||
{ MT_TXOP_HLDR_ET, 0x00000000 }
|
||||
{ MT_TXOP_HLDR_ET, 0x00000000 },
|
||||
{ MT_PN_PAD_MODE, 0x00000003 },
|
||||
};
|
||||
|
||||
static const struct mt76_reg_pair mt76x0_bbp_init_tab[] = {
|
||||
|
@ -195,46 +195,3 @@ void mt76x0_mac_set_ampdu_factor(struct mt76x02_dev *dev)
|
||||
mt76_wr(dev, MT_MAX_LEN_CFG, 0xa0fff |
|
||||
FIELD_PREP(MT_MAX_LEN_CFG_AMPDU, min_factor));
|
||||
}
|
||||
|
||||
u32 mt76x0_mac_process_rx(struct mt76x02_dev *dev, struct sk_buff *skb,
|
||||
void *rxi)
|
||||
{
|
||||
struct mt76_rx_status *status = (struct mt76_rx_status *) skb->cb;
|
||||
struct mt76x02_rxwi *rxwi = rxi;
|
||||
u32 len, ctl = le32_to_cpu(rxwi->ctl);
|
||||
u16 rate = le16_to_cpu(rxwi->rate);
|
||||
struct mt76x02_sta *sta;
|
||||
int rssi, pad_len = 0;
|
||||
u8 wcid;
|
||||
|
||||
len = FIELD_GET(MT_RXWI_CTL_MPDU_LEN, ctl);
|
||||
if (WARN_ON(len < 10))
|
||||
return 0;
|
||||
|
||||
if (rxwi->rxinfo & cpu_to_le32(MT_RXINFO_DECRYPT)) {
|
||||
status->flag |= RX_FLAG_DECRYPTED;
|
||||
status->flag |= RX_FLAG_IV_STRIPPED | RX_FLAG_MMIC_STRIPPED;
|
||||
}
|
||||
|
||||
if (rxwi->rxinfo & MT_RXINFO_L2PAD)
|
||||
pad_len += 2;
|
||||
|
||||
wcid = FIELD_GET(MT_RXWI_CTL_WCID, ctl);
|
||||
sta = mt76x02_rx_get_sta(&dev->mt76, wcid);
|
||||
|
||||
mt76x02_remove_hdr_pad(skb, pad_len);
|
||||
|
||||
pskb_trim(skb, len);
|
||||
status->chains = BIT(0);
|
||||
rssi = mt76x0_phy_get_rssi(dev, rxwi);
|
||||
status->chain_signal[0] = status->signal = rssi;
|
||||
status->freq = dev->mt76.chandef.chan->center_freq;
|
||||
status->band = dev->mt76.chandef.chan->band;
|
||||
|
||||
if (sta) {
|
||||
ewma_signal_add(&sta->rssi, status->signal);
|
||||
sta->inactive_count = 0;
|
||||
}
|
||||
|
||||
return mt76x02_mac_process_rate(status, rate);
|
||||
}
|
||||
|
@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
|
||||
* Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2
|
||||
* as published by the Free Software Foundation
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __MT76_MAC_H
|
||||
#define __MT76_MAC_H
|
||||
|
||||
u32 mt76x0_mac_process_rx(struct mt76x02_dev *dev, struct sk_buff *skb,
|
||||
void *rxi);
|
||||
#endif
|
@ -14,7 +14,6 @@
|
||||
*/
|
||||
|
||||
#include "mt76x0.h"
|
||||
#include "mac.h"
|
||||
#include "../mt76x02_util.h"
|
||||
#include <linux/etherdevice.h>
|
||||
|
||||
|
@ -74,7 +74,6 @@ void mt76x0_agc_restore(struct mt76x02_dev *dev);
|
||||
int mt76x0_phy_set_channel(struct mt76x02_dev *dev,
|
||||
struct cfg80211_chan_def *chandef);
|
||||
void mt76x0_phy_recalibrate_after_assoc(struct mt76x02_dev *dev);
|
||||
int mt76x0_phy_get_rssi(struct mt76x02_dev *dev, struct mt76x02_rxwi *rxwi);
|
||||
void mt76x0_phy_set_txpower(struct mt76x02_dev *dev);
|
||||
|
||||
/* MAC */
|
||||
@ -88,7 +87,5 @@ void mt76x0_mac_set_ampdu_factor(struct mt76x02_dev *dev);
|
||||
/* TX */
|
||||
void mt76x0_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
|
||||
struct sk_buff *skb);
|
||||
void mt76x0_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||
struct sk_buff *skb);
|
||||
|
||||
#endif
|
||||
|
@ -226,13 +226,6 @@ mt76x0_bbp_set_ctrlch(struct mt76x02_dev *dev, enum nl80211_chan_width width,
|
||||
mt76_rmw_field(dev, MT_BBP(TXBE, 0), MT_BBP_TXBE_R0_CTRL_CHAN, ctrl);
|
||||
}
|
||||
|
||||
int mt76x0_phy_get_rssi(struct mt76x02_dev *dev, struct mt76x02_rxwi *rxwi)
|
||||
{
|
||||
struct mt76x02_rx_freq_cal *caldata = &dev->cal.rx;
|
||||
|
||||
return rxwi->rssi[0] + caldata->rssi_offset[0] - caldata->lna_gain;
|
||||
}
|
||||
|
||||
static void mt76x0_vco_cal(struct mt76x02_dev *dev, u8 channel)
|
||||
{
|
||||
u8 val;
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
#include "mt76x0.h"
|
||||
#include "mac.h"
|
||||
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM mt76x0
|
||||
|
@ -45,19 +45,3 @@ void mt76x0_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
|
||||
mt76_tx(&dev->mt76, control->sta, wcid, skb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x0_tx);
|
||||
|
||||
void mt76x0_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
|
||||
void *rxwi = skb->data;
|
||||
|
||||
skb_pull(skb, sizeof(struct mt76x02_rxwi));
|
||||
if (mt76x0_mac_process_rx(dev, skb, rxwi)) {
|
||||
dev_kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
mt76_rx(&dev->mt76, q, skb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x0_queue_rx_skb);
|
||||
|
@ -218,7 +218,7 @@ static int mt76x0u_probe(struct usb_interface *usb_intf,
|
||||
.tx_prepare_skb = mt76x02u_tx_prepare_skb,
|
||||
.tx_complete_skb = mt76x02_tx_complete_skb,
|
||||
.tx_status_data = mt76x02_tx_status_data,
|
||||
.rx_skb = mt76x0_queue_rx_skb,
|
||||
.rx_skb = mt76x02_queue_rx_skb,
|
||||
};
|
||||
struct usb_device *usb_dev = interface_to_usbdev(usb_intf);
|
||||
struct mt76x02_dev *dev;
|
||||
|
@ -686,4 +686,3 @@ int mt76x02_mac_process_rx(struct mt76x02_dev *dev, struct sk_buff *skb,
|
||||
|
||||
return mt76x02_mac_process_rate(status, rate);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_mac_process_rx);
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "mt76x02_dma.h"
|
||||
#include "mt76x02_regs.h"
|
||||
#include "mt76x02_mac.h"
|
||||
#include "mt76x02_util.h"
|
||||
|
||||
#define CCK_RATE(_idx, _rate) { \
|
||||
.bitrate = _rate, \
|
||||
@ -531,4 +532,27 @@ void mt76x02_set_beacon_offsets(struct mt76_dev *dev)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_set_beacon_offsets);
|
||||
|
||||
void mt76x02_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
|
||||
void *rxwi = skb->data;
|
||||
|
||||
if (q == MT_RXQ_MCU) {
|
||||
/* this is used just by mmio code */
|
||||
skb_queue_tail(&mdev->mmio.mcu.res_q, skb);
|
||||
wake_up(&mdev->mmio.mcu.wait);
|
||||
return;
|
||||
}
|
||||
|
||||
skb_pull(skb, sizeof(struct mt76x02_rxwi));
|
||||
if (mt76x02_mac_process_rx(dev, skb, rxwi)) {
|
||||
dev_kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
mt76_rx(mdev, q, skb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_queue_rx_skb);
|
||||
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
|
@ -141,6 +141,8 @@ void mt76x02_tx_complete(struct mt76_dev *dev, struct sk_buff *skb);
|
||||
void mt76x02_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue *q,
|
||||
struct mt76_queue_entry *e, bool flush);
|
||||
bool mt76x02_tx_status_data(struct mt76_dev *dev, u8 *update);
|
||||
void mt76x02_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||
struct sk_buff *skb);
|
||||
|
||||
extern const u16 mt76x02_beacon_offsets[16];
|
||||
void mt76x02_set_beacon_offsets(struct mt76_dev *dev);
|
||||
|
@ -3,8 +3,7 @@ obj-$(CONFIG_MT76x2E) += mt76x2e.o
|
||||
obj-$(CONFIG_MT76x2U) += mt76x2u.o
|
||||
|
||||
mt76x2-common-y := \
|
||||
eeprom.o tx.o mac.o init.o common.o phy.o \
|
||||
debugfs.o mcu.o
|
||||
eeprom.o tx.o mac.o init.o phy.o debugfs.o mcu.o
|
||||
|
||||
mt76x2e-y := \
|
||||
pci.o pci_dma.o pci_main.o pci_init.o pci_tx.o \
|
||||
|
@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
|
||||
* Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "mt76x2.h"
|
||||
#include "../mt76x02_mac.h"
|
||||
|
||||
void mt76x2_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
|
||||
void *rxwi = skb->data;
|
||||
|
||||
if (q == MT_RXQ_MCU) {
|
||||
/* this is used just by mmio code */
|
||||
skb_queue_tail(&mdev->mmio.mcu.res_q, skb);
|
||||
wake_up(&mdev->mmio.mcu.wait);
|
||||
return;
|
||||
}
|
||||
|
||||
skb_pull(skb, sizeof(struct mt76x02_rxwi));
|
||||
if (mt76x02_mac_process_rx(dev, skb, rxwi)) {
|
||||
dev_kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
mt76_rx(&dev->mt76, q, skb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x2_queue_rx_skb);
|
@ -101,8 +101,6 @@ void mt76x2_mac_set_tx_protection(struct mt76x02_dev *dev, u32 val);
|
||||
void mt76x2_pre_tbtt_tasklet(unsigned long arg);
|
||||
|
||||
void mt76x2_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q);
|
||||
void mt76x2_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||
struct sk_buff *skb);
|
||||
|
||||
void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);
|
||||
|
||||
|
@ -359,7 +359,7 @@ struct mt76x02_dev *mt76x2_alloc_device(struct device *pdev)
|
||||
.update_survey = mt76x2_update_channel,
|
||||
.tx_prepare_skb = mt76x2_tx_prepare_skb,
|
||||
.tx_complete_skb = mt76x2_tx_complete_skb,
|
||||
.rx_skb = mt76x2_queue_rx_skb,
|
||||
.rx_skb = mt76x02_queue_rx_skb,
|
||||
.rx_poll_complete = mt76x2_rx_poll_complete,
|
||||
.sta_ps = mt76x2_sta_ps,
|
||||
.get_tx_txpwr_adj = mt76x2_tx_get_txpwr_adj,
|
||||
|
@ -141,7 +141,7 @@ struct mt76x02_dev *mt76x2u_alloc_device(struct device *pdev)
|
||||
.tx_prepare_skb = mt76x02u_tx_prepare_skb,
|
||||
.tx_complete_skb = mt76x02_tx_complete_skb,
|
||||
.tx_status_data = mt76x02_tx_status_data,
|
||||
.rx_skb = mt76x2_queue_rx_skb,
|
||||
.rx_skb = mt76x02_queue_rx_skb,
|
||||
};
|
||||
struct mt76x02_dev *dev;
|
||||
struct mt76_dev *mdev;
|
||||
|
Loading…
Reference in New Issue
Block a user