mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-01 11:36:49 +00:00
323e249ce8
This updates mac80211 to version 6.1.97-1. This code is based on Linux 6.1.97 and contains all fixes included in the upstream wireless subsystem from that kernel version. This includes many bugfixes and also some security fixes. The removed patches are already integrated in upstream Linux 6.1.97 or in backports. The following patches were integrated in upstream Linux: ath11k/0013-wifi-ath11k-synchronize-ath11k_mac_he_gi_to_nl80211_.patch ath11k/0035-wifi-ath11k-Use-platform_get_irq-to-get-the-interrup.patch ath11k/0036-wifi-ath11k-fix-SAC-bug-on-peer-addition-with-sta-ba.patch ath11k/0047-wifi-ath11k-fix-deinitialization-of-firmware-resourc.patch ath11k/0053-wifi-ath11k-fix-writing-to-unintended-memory-region.patch ath11k/0060-wifi-ath11k-Ignore-frags-from-uninitialized-peer-in-.patch ath11k/0065-wifi-ath11k-fix-tx-status-reporting-in-encap-offload.patch ath11k/0067-wifi-ath11k-Fix-SKB-corruption-in-REO-destination-ri.patch ath11k/0069-wifi-ath11k-fix-registration-of-6Ghz-only-phy-withou.patch ath11k/0080-wifi-ath11k-add-support-default-regdb-while-searchin.patch ath11k/0085-wifi-ath11k-fix-memory-leak-in-WMI-firmware-stats.patch ath11k/0086-wifi-ath11k-Add-missing-check-for-ioremap.patch ath11k/0096-wifi-ath11k-fix-boot-failure-with-one-MSI-vector.patch subsys/337-wifi-mac80211-fix-race-condition-on-enabling-fast-xm.patch The following patches were integrated in upstream backports: ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch build/080-resv_start_op.patch build/110-backport_napi_build_skb.patch The following files are missing in backports, we do not have to remove them any more. Some were already missing before some were removed in this update: include/linux/cordic.h include/linux/crc8.h include/linux/eeprom_93cx6.h include/linux/wl12xx.h include/net/ieee80211.h backport-include/linux/bcm47xx_nvram.h include/linux/ath9k_platform.h include/net/bluetooth/ backports ships a dummy Mediatek wed header for older kernel versions. We backported the feature in our kernel, remove the dummy header: backport-include/linux/soc/mediatek/mtk_wed.h Remove header files for subsystems used form the mainline kernel: include/trace/events/qrtr.h include/net/rsi_91x.h backport-include/linux/platform_data/brcmnand.h Link: https://github.com/openwrt/openwrt/pull/15827 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
126 lines
3.5 KiB
Diff
126 lines
3.5 KiB
Diff
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
|
@@ -1461,6 +1461,52 @@ static const struct file_operations fops
|
|
.owner = THIS_MODULE
|
|
};
|
|
|
|
+
|
|
+static ssize_t read_file_chan_bw(struct file *file, char __user *user_buf,
|
|
+ size_t count, loff_t *ppos)
|
|
+{
|
|
+ struct ath_softc *sc = file->private_data;
|
|
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
|
+ char buf[32];
|
|
+ unsigned int len;
|
|
+
|
|
+ len = sprintf(buf, "0x%08x\n", common->chan_bw);
|
|
+ return simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
|
+}
|
|
+
|
|
+static ssize_t write_file_chan_bw(struct file *file, const char __user *user_buf,
|
|
+ size_t count, loff_t *ppos)
|
|
+{
|
|
+ struct ath_softc *sc = file->private_data;
|
|
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
|
+ unsigned long chan_bw;
|
|
+ char buf[32];
|
|
+ ssize_t len;
|
|
+
|
|
+ len = min(count, sizeof(buf) - 1);
|
|
+ if (copy_from_user(buf, user_buf, len))
|
|
+ return -EFAULT;
|
|
+
|
|
+ buf[len] = '\0';
|
|
+ if (kstrtoul(buf, 0, &chan_bw))
|
|
+ return -EINVAL;
|
|
+
|
|
+ common->chan_bw = chan_bw;
|
|
+ if (!test_bit(ATH_OP_INVALID, &common->op_flags))
|
|
+ ath9k_ops.config(sc->hw, IEEE80211_CONF_CHANGE_CHANNEL);
|
|
+
|
|
+ return count;
|
|
+}
|
|
+
|
|
+static const struct file_operations fops_chanbw = {
|
|
+ .read = read_file_chan_bw,
|
|
+ .write = write_file_chan_bw,
|
|
+ .open = simple_open,
|
|
+ .owner = THIS_MODULE,
|
|
+ .llseek = default_llseek,
|
|
+};
|
|
+
|
|
+
|
|
int ath9k_init_debug(struct ath_hw *ah)
|
|
{
|
|
struct ath_common *common = ath9k_hw_common(ah);
|
|
@@ -1482,6 +1528,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
|
|
|
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
|
&fops_eeprom);
|
|
+ debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
|
+ sc, &fops_chanbw);
|
|
debugfs_create_devm_seqfile(sc->dev, "dma", sc->debug.debugfs_phy,
|
|
read_file_dma);
|
|
debugfs_create_devm_seqfile(sc->dev, "interrupt", sc->debug.debugfs_phy,
|
|
--- a/drivers/net/wireless/ath/ath.h
|
|
+++ b/drivers/net/wireless/ath/ath.h
|
|
@@ -151,6 +151,7 @@ struct ath_common {
|
|
int debug_mask;
|
|
enum ath_device_state state;
|
|
unsigned long op_flags;
|
|
+ u32 chan_bw;
|
|
|
|
struct ath_ani ani;
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/common.c
|
|
+++ b/drivers/net/wireless/ath/ath9k/common.c
|
|
@@ -297,11 +297,13 @@ EXPORT_SYMBOL(ath9k_cmn_get_hw_crypto_ke
|
|
/*
|
|
* Update internal channel flags.
|
|
*/
|
|
-static void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan,
|
|
+static void ath9k_cmn_update_ichannel(struct ath_common *common,
|
|
+ struct ath9k_channel *ichan,
|
|
struct cfg80211_chan_def *chandef)
|
|
{
|
|
struct ieee80211_channel *chan = chandef->chan;
|
|
u16 flags = 0;
|
|
+ int width;
|
|
|
|
ichan->channel = chan->center_freq;
|
|
ichan->chan = chan;
|
|
@@ -309,7 +311,19 @@ static void ath9k_cmn_update_ichannel(st
|
|
if (chan->band == NL80211_BAND_5GHZ)
|
|
flags |= CHANNEL_5GHZ;
|
|
|
|
- switch (chandef->width) {
|
|
+ switch (common->chan_bw) {
|
|
+ case 5:
|
|
+ width = NL80211_CHAN_WIDTH_5;
|
|
+ break;
|
|
+ case 10:
|
|
+ width = NL80211_CHAN_WIDTH_10;
|
|
+ break;
|
|
+ default:
|
|
+ width = chandef->width;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ switch (width) {
|
|
case NL80211_CHAN_WIDTH_5:
|
|
flags |= CHANNEL_QUARTER;
|
|
break;
|
|
@@ -342,10 +356,11 @@ struct ath9k_channel *ath9k_cmn_get_chan
|
|
struct cfg80211_chan_def *chandef)
|
|
{
|
|
struct ieee80211_channel *curchan = chandef->chan;
|
|
+ struct ath_common *common = ath9k_hw_common(ah);
|
|
struct ath9k_channel *channel;
|
|
|
|
channel = &ah->channels[curchan->hw_value];
|
|
- ath9k_cmn_update_ichannel(channel, chandef);
|
|
+ ath9k_cmn_update_ichannel(common, channel, chandef);
|
|
|
|
return channel;
|
|
}
|