From 0456744e39e9dca45c5aba091825eecac6a7903c Mon Sep 17 00:00:00 2001 From: AmadeusGhost <42570690+AmadeusGhost@users.noreply.github.com> Date: Wed, 2 Dec 2020 12:24:26 +0800 Subject: [PATCH] mac80211: sync upstream source code (#5860) [mac80211] 08a42ef mac80211: fix memory leak on filtered powersave frames daeda8a mac80211: pass phy name to hostapd_set_bss_options 7ca9b82 mac80211: Fix wpa_supplicant config removal ubus call bf3158b mac80211: backport the new tasklet API 0bb5d39 mac80211: add minstrel fixes that fix mt76 issues in legacy mode [ath10k] c3b2efa linux-firmware: ath10k: add board firmware packages 655091e ath10k-ct-firmware: switch to linux-firmware board binaries 61e381d ath10k-firmware: remove unused package --- package/firmware/ath10k-ct-firmware/Makefile | 252 +++---- package/firmware/ath10k-firmware/Makefile | 182 ----- package/firmware/cypress-firmware/Makefile | 5 +- package/firmware/cypress-nvram/Makefile | 10 +- package/firmware/linux-firmware/Makefile | 3 +- package/firmware/linux-firmware/qca_ath10k.mk | 59 +- package/kernel/ath10k-ct/Makefile | 12 +- ...64-ath10k-commit-rates-from-mac80211.patch | 24 +- ...rolling-support-for-various-chipsets.patch | 124 ++-- ...02-ath10k-use-tpt-trigger-by-default.patch | 24 +- ...10k-Add-NL80211_EXT_FEATURE_AQL-flag.patch | 10 - ...0-0010-ath10k-limit-htt-rx-ring-size.patch | 6 +- ...60-0011-ath10k-limit-pci-buffer-size.patch | 12 +- package/kernel/mac80211/Makefile | 2 +- package/kernel/mac80211/ath.mk | 3 +- .../files/lib/netifd/wireless/mac80211.sh | 4 +- ...ave-survey-for-every-channel-visited.patch | 183 +++++ ...-backport-tasklet_setup-from_tasklet.patch | 35 + ...ory-leak-on-filtered-powersave-frame.patch | 55 ++ ...nstrel-remove-deferred-sampling-code.patch | 96 +++ ...l-fix-tx-status-processing-corner-ca.patch | 26 + package/network/config/netifd/Makefile | 6 +- package/network/services/hostapd/Config.in | 2 + package/network/services/hostapd/Makefile | 65 +- .../hostapd/files/hostapd-basic.config | 2 +- .../hostapd/files/hostapd-full.config | 4 +- .../hostapd/files/hostapd-mini.config | 2 +- .../network/services/hostapd/files/hostapd.sh | 139 +++- .../hostapd/files/wpa_supplicant-basic.config | 2 +- .../hostapd/files/wpa_supplicant-full.config | 6 +- .../hostapd/files/wpa_supplicant-mini.config | 2 +- .../hostapd/files/wpa_supplicant-p2p.config | 2 +- ...ate-if-no-available-channel-is-found.patch | 2 +- .../services/hostapd/src/src/ap/ubus.c | 189 ++++- .../hostapd/src/src/utils/build_features.h | 4 + package/network/utils/iw/Makefile | 4 +- .../utils/iw/patches/001-nl80211_h_sync.patch | 687 +----------------- .../utils/iw/patches/200-reduce_size.patch | 85 ++- 38 files changed, 1093 insertions(+), 1237 deletions(-) delete mode 100644 package/firmware/ath10k-firmware/Makefile delete mode 100644 package/kernel/ath10k-ct/patches/205-ath10k-Add-NL80211_EXT_FEATURE_AQL-flag.patch create mode 100644 package/kernel/mac80211/patches/rt2x00/992-rt2x00-save-survey-for-every-channel-visited.patch create mode 100644 package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch create mode 100644 package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch create mode 100644 package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch create mode 100644 package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch diff --git a/package/firmware/ath10k-ct-firmware/Makefile b/package/firmware/ath10k-ct-firmware/Makefile index c298f8018..83e5563e6 100644 --- a/package/firmware/ath10k-ct-firmware/Makefile +++ b/package/firmware/ath10k-ct-firmware/Makefile @@ -2,77 +2,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ath10k-ct-firmware PKG_VERSION:=2020-07-02 -PKG_RELEASE:=1 +PKG_RELEASE:=3 include $(INCLUDE_DIR)/package.mk -ATH10K_FIRMWARE_REV:=d622d160e9f552ead68d9ae81b715422892dc2ef -ATH10K_FIRMWARE_URL:=@GITHUB/kvalo/ath10k-firmware/$(ATH10K_FIRMWARE_REV) - -QCA9887_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9887-board.bin -define Download/qca9887-board - FILE:=$(QCA9887_BOARD_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA9887/hw1.0 - URL_FILE:=board.bin - HASH:=cf4df099f6ee05c181f55ce17297a1d32c61d725eb96246fd315ad5587c42426 -endef -$(eval $(call Download,qca9887-board)) - -QCA988X_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca988x-board.bin -define Download/qca988x-board - FILE:=$(QCA988X_BOARD_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA988X/hw2.0 - URL_FILE:=board.bin - HASH:=5b5b380333c2dd3b6ce67f30e2f7008f4020bf594970d3b464fd8d4a80fcd880 -endef -$(eval $(call Download,qca988x-board)) - -QCA99X0_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca99x0-board.bin -define Download/qca99x0-board - FILE:=$(QCA99X0_BOARD_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA99X0/hw2.0 - URL_FILE:=boardData_AR900B_CUS239_5G_v2_001.bin - HASH:=3bf7561ee373b369025dcd366d276d038a97d3397ccae41ce841d98a58b30aff -endef -$(eval $(call Download,qca99x0-board)) - -QCA99X0_BOARD2_REV:=ddcec9efd245da9365c474f513a855a55f3ac7fe -QCA99X0_BOARD2_FILE:=ath10k-firmware-$(QCA99X0_BOARD2_REV)-qca99x0-board-2.bin -define Download/qca99x0-board2 - FILE:=$(QCA99X0_BOARD2_FILE) - URL:=https://source.codeaurora.org/quic/qsdk/oss/firmware/ath10k-firmware/plain/ath10k/QCA99X0/hw2.0 - URL_FILE:=board-2.bin?id=$(QCA99X0_BOARD2_REV) - HASH:=03711ac21e60ef59d3815e235eb721c0c22851b5410299411085aa6f2af45401 -endef -$(eval $(call Download,qca99x0-board2)) - -QCA9984_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9984-board-2.bin -define Download/qca9984-board2 - FILE:=$(QCA9984_BOARD2_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA9984/hw1.0 - URL_FILE:=board-2.bin - HASH:=0d6d46cf0467185e3959ce3cb69e2415be6e48ab8a4bee3eb400edbe48cb9c25 -endef -$(eval $(call Download,qca9984-board2)) - -QCA4019_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca4019-board-2.bin -define Download/qca4019-board2 - FILE:=$(QCA4019_BOARD2_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA4019/hw1.0 - URL_FILE:=board-2.bin - HASH:=94b66aa4ddbed5110a96364d3c7b4ebcb320e3ac4e8697660b277e76077bc338 -endef -$(eval $(call Download,qca4019-board2)) - -QCA9888_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9888-board-2.bin -define Download/qca9888-board2 - FILE:=$(QCA9888_BOARD2_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA9888/hw2.0 - URL_FILE:=board-2.bin - HASH:=5b871bb567f64525ca45adb88063211de472015d09e0f9aa3fa61ab71c8fdfd3 -endef -$(eval $(call Download,qca9888-board2)) - CT_FIRMWARE_FILE = $(1)-$($(1)_FIRMWARE_FILE_CT) CT_FIRMWARE_FILE_FULL_HTT = $(1)-$($(1)_FIRMWARE_FILE_CT_FULL_HTT) CT_FIRMWARE_FILE_HTT = $(1)-$($(1)_FIRMWARE_FILE_CT_HTT) @@ -226,14 +159,23 @@ $(Package/ath10k-ct-firmware-default) SECTION:=firmware CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca988x + CONFLICTS:=ath10k-firmware-qca988x + DEPENDS:=+ath10k-board-qca988x endef define Package/ath10k-firmware-qca988x-ct-full-htt $(Package/ath10k-ct-firmware-default) TITLE:=ath10k CT 10.1 full-htt-mgt fw for QCA988x SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca988x - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca988x \ + ath10k-firmware-qca988x-ct + CONFLICTS:=\ + ath10k-firmware-qca988x \ + ath10k-firmware-qca988x-ct + DEPENDS:=\ + +ath10k-board-qca988x \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9887-ct @@ -242,14 +184,23 @@ $(Package/ath10k-ct-firmware-default) SECTION:=firmware CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca9887 + CONFLICTS:=ath10k-firmware-qca9887 + DEPENDS:=+ath10k-board-qca9887 endef define Package/ath10k-firmware-qca9887-ct-full-htt $(Package/ath10k-ct-firmware-default) TITLE:=ath10k CT 10.1 full-htt-mgt fw for QCA9887 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca9887 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca9887 \ + ath10k-firmware-qca9887-ct + CONFLICTS:=\ + ath10k-firmware-qca9887 \ + ath10k-firmware-qca9887-ct + DEPENDS:=\ + +ath10k-board-qca9887 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca99x0-ct @@ -258,22 +209,39 @@ $(Package/ath10k-ct-firmware-default) SECTION:=firmware CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca99x0 + CONFLICTS:=ath10k-firmware-qca99x0 + DEPENDS:=+ath10k-board-qca99x0 endef define Package/ath10k-firmware-qca99x0-ct-full-htt $(Package/ath10k-ct-firmware-default) TITLE:=ath10k CT 10.4 full-htt-mgt fw for QCA99x0 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca99x0 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca99x0 \ + ath10k-firmware-qca99x0-ct + CONFLICTS:=\ + ath10k-firmware-qca99x0 \ + ath10k-firmware-qca99x0-ct \ + ath10k-firmware-qca99x0-ct-htt + DEPENDS:=\ + +ath10k-board-qca99x0 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca99x0-ct-htt $(Package/ath10k-firmware-default) TITLE:=ath10k CT 10.4 htt-mgt fw for QCA99x0 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca99x0 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca99x0 \ + ath10k-firmware-qca99x0-ct + CONFLICTS:=\ + ath10k-firmware-qca99x0 \ + ath10k-firmware-qca99x0-ct + DEPENDS:=\ + +ath10k-board-qca99x0 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9984-ct @@ -282,22 +250,39 @@ $(Package/ath10k-ct-firmware-default) SECTION:=firmware CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca9984 + CONFLICTS:=ath10k-firmware-qca9984 + DEPENDS:=+ath10k-board-qca9984 endef define Package/ath10k-firmware-qca9984-ct-full-htt $(Package/ath10k-ct-firmware-default) TITLE:=ath10k CT 10.4 full-htt-mgt fw for QCA9984 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca9984 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca9984 \ + ath10k-firmware-qca9984-ct + CONFLICTS:=\ + ath10k-firmware-qca9984 \ + ath10k-firmware-qca9984-ct \ + ath10k-firmware-qca9984-ct-htt + DEPENDS:=\ + +ath10k-board-qca9984 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9984-ct-htt $(Package/ath10k-firmware-default) TITLE:=ath10k CT 10.4 htt-mgt fw for QCA9984 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca9984 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca9984 \ + ath10k-firmware-qca9984-ct + CONFLICTS:=\ + ath10k-firmware-qca9984 \ + ath10k-firmware-qca9984-ct + DEPENDS:=\ + +ath10k-board-qca9984 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca4019-ct @@ -306,22 +291,39 @@ $(Package/ath10k-ct-firmware-default) SECTION:=firmware CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca4019 + CONFLICTS:=ath10k-firmware-qca4019 + DEPENDS:=+ath10k-board-qca4019 endef define Package/ath10k-firmware-qca4019-ct-full-htt $(Package/ath10k-ct-firmware-default) TITLE:=ath10k CT 10.4 full-htt-mgt for QCA4018/9 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca4019 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca4019 \ + ath10k-firmware-qca4019-ct + CONFLICTS:=\ + ath10k-firmware-qca4019 \ + ath10k-firmware-qca4019-ct \ + ath10k-firmware-qca4019-ct-htt + DEPENDS:=\ + +ath10k-board-qca4019 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca4019-ct-htt $(Package/ath10k-firmware-default) TITLE:=ath10k CT 10.4 htt-mgt for QCA4018/9 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca4019 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca4019 \ + ath10k-firmware-qca4019-ct + CONFLICTS:=\ + ath10k-firmware-qca4019 \ + ath10k-firmware-qca4019-ct + DEPENDS:=\ + +ath10k-board-qca4019 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9888-ct @@ -330,22 +332,39 @@ $(Package/ath10k-ct-firmware-default) SECTION:=firmware CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca9888 + CONFLICTS:=ath10k-firmware-qca9888 + DEPENDS:=+ath10k-board-qca9888 endef define Package/ath10k-firmware-qca9888-ct-full-htt $(Package/ath10k-ct-firmware-default) TITLE:=ath10k CT 10.4 full-htt-mgt fw for QCA9886/8 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca9888 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca9888 \ + ath10k-firmware-qca9888-ct + CONFLICTS:=\ + ath10k-firmware-qca9888 \ + ath10k-firmware-qca9888-ct \ + ath10k-firmware-qca9888-ct-htt + DEPENDS:=\ + +ath10k-board-qca9888 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9888-ct-htt $(Package/ath10k-firmware-default) TITLE:=ath10k CT 10.4 htt-mgt fw for QCA9886/8 SECTION:=firmware CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-qca9888 - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + PROVIDES:=\ + ath10k-firmware-qca9888 \ + ath10k-firmware-qca9888-ct + CONFLICTS:=\ + ath10k-firmware-qca9888 \ + ath10k-firmware-qca9888-ct + DEPENDS:=\ + +ath10k-board-qca9888 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef @@ -495,34 +514,22 @@ define Package/ath10k-firmware-qca9887-ct/install $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9887) \ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9887_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin endef define Package/ath10k-firmware-qca9887-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9887) \ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/ct-firmware-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9887_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin endef define Package/ath10k-firmware-qca988x-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA988X_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA988X) \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-2.bin endef define Package/ath10k-firmware-qca988x-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA988X_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA988X) \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ct-firmware-2.bin @@ -530,36 +537,18 @@ endef define Package/ath10k-firmware-qca99x0-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA99X0) \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/firmware-5.bin endef define Package/ath10k-firmware-qca99x0-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA99X0) \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/ct-firmware-5.bin endef define Package/ath10k-firmware-qca99x0-ct-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA99X0) \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/ct-firmware-5.bin @@ -567,27 +556,18 @@ endef define Package/ath10k-firmware-qca9984-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9984) \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin endef define Package/ath10k-firmware-qca9984-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9984) \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/ct-firmware-5.bin endef define Package/ath10k-firmware-qca9984-ct-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9984) \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/ct-firmware-5.bin @@ -595,27 +575,18 @@ endef define Package/ath10k-firmware-qca4019-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA4019) \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin endef define Package/ath10k-firmware-qca4019-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA4019) \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ct-firmware-5.bin endef define Package/ath10k-firmware-qca4019-ct-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA4019) \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ct-firmware-5.bin @@ -626,9 +597,6 @@ define Package/ath10k-firmware-qca9888-ct/install ln -s \ ../../cal-pci-0000:01:00.0.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9888) \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin @@ -638,9 +606,6 @@ define Package/ath10k-firmware-qca9888-ct-full-htt/install ln -s \ ../../cal-pci-0000:01:00.0.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9888) \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/ct-firmware-5.bin @@ -650,9 +615,6 @@ define Package/ath10k-firmware-qca9888-ct-htt/install ln -s \ ../../cal-pci-0000:01:00.0.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9888) \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/ct-firmware-5.bin diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile deleted file mode 100644 index 52c974e9f..000000000 --- a/package/firmware/ath10k-firmware/Makefile +++ /dev/null @@ -1,182 +0,0 @@ -# -# Copyright (C) 2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=ath10k-firmware -PKG_SOURCE_DATE:=2019-10-03 -PKG_SOURCE_VERSION:=d622d160e9f552ead68d9ae81b715422892dc2ef -PKG_MIRROR_HASH:=2e504e071c3f896d629c4cfffe7ff4b5f1acdb4fecd3f01e8ff8c73e87a67cc7 -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/kvalo/ath10k-firmware.git - -PKG_MAINTAINER:=Felix Fietkau - -include $(INCLUDE_DIR)/package.mk - -define Package/ath10k-firmware-default - SECTION:=firmware - CATEGORY:=Firmware - URL:=$(PKG_SOURCE_URL) - DEPENDS:= -endef - -define Package/ath10k-firmware-qca9887 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA9887 devices -endef - -define Package/ath10k-firmware-qca9888 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA9888 devices -endef - -define Package/ath10k-firmware-qca988x -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA988x devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca99x0 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA99x0 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca99x0/description -Standard ath10k firmware for QCA99x0 from QCA -This firmware conflicts with the CT 99x0 firmware, so select only -one. -endef - -define Package/ath10k-firmware-qca9984 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA9984 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca4019 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for IPQ/QCA4019 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca6174 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA6174 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -QCA99X0_BOARD_REV:=ddcec9efd245da9365c474f513a855a55f3ac7fe -QCA99X0_BOARD_FILE:=board-2.bin.$(QCA99X0_BOARD_REV) - -define Download/qca99x0-board - URL:=https://source.codeaurora.org/quic/qsdk/oss/firmware/ath10k-firmware/plain/ath10k/QCA99X0/hw2.0 - URL_FILE:=board-2.bin?id=$(QCA99X0_BOARD_REV) - FILE:=$(QCA99X0_BOARD_FILE) - HASH:=03711ac21e60ef59d3815e235eb721c0c22851b5410299411085aa6f2af45401 -endef -$(eval $(call Download,qca99x0-board)) - -define Build/Compile - -endef - -define Package/ath10k-firmware-qca4019/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA4019/hw1.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA4019/hw1.0/3.5.3/firmware-5.bin_10.4-3.5.3-00057 \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca9887/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9887/hw1.0/10.2.4-1.0/firmware-5.bin_10.2.4-1.0-00047 \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-5.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9887/hw1.0/board.bin \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin -endef - -define Package/ath10k-firmware-qca9888/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9888/hw2.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9888/hw2.0/3.5.3/firmware-5.bin_10.4-3.5.3-00053 \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca988x/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA988X/hw2.0/board.bin \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA988X/hw2.0/10.2.4-1.0/firmware-5.bin_10.2.4-1.0-00047 \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca6174/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA6174/hw2.1 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw2.1/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA6174/hw2.1/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw2.1/firmware-5.bin_SW_RM.1.1.1-00157-QCARMSWPZ-1 \ - $(1)/lib/firmware/ath10k/QCA6174/hw2.1/firmware-5.bin - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA6174/hw3.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw3.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA6174/hw3.0/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00042-QCARMSWP-1 \ - $(1)/lib/firmware/ath10k/QCA6174/hw3.0/firmware-6.bin -endef - -define Package/ath10k-firmware-qca99x0/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA99X0/hw2.0/boardData_AR900B_CUS239_5G_v2_001.bin \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA99X0/hw2.0/firmware-5.bin_10.4.1.00030-1 \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca9984/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9984/hw1.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9984/hw1.0/3.5.3/firmware-5.bin_10.4-3.5.3-00053 \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin -endef - -#$(eval $(call BuildPackage,ath10k-firmware-qca9887)) -#$(eval $(call BuildPackage,ath10k-firmware-qca9888)) -#$(eval $(call BuildPackage,ath10k-firmware-qca988x)) -#$(eval $(call BuildPackage,ath10k-firmware-qca99x0)) -#$(eval $(call BuildPackage,ath10k-firmware-qca6174)) -#$(eval $(call BuildPackage,ath10k-firmware-qca9984)) -#$(eval $(call BuildPackage,ath10k-firmware-qca4019)) diff --git a/package/firmware/cypress-firmware/Makefile b/package/firmware/cypress-firmware/Makefile index 73c3cfc71..d88138400 100644 --- a/package/firmware/cypress-firmware/Makefile +++ b/package/firmware/cypress-firmware/Makefile @@ -11,7 +11,7 @@ UNPACK_CMD=unzip -q -p $(DL_DIR)/$(PKG_SOURCE) $(PKG_SOURCE_UNZIP) | gzip -dc | PKG_NAME:=cypress-firmware PKG_VERSION:=v5.4.18-2020_0402 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_UNZIP:=cypress-firmware-$(PKG_VERSION).tar.gz PKG_SOURCE:=cypress-fmac-$(PKG_VERSION).zip @@ -70,6 +70,7 @@ define Package/cypress-firmware-43362-sdio $(Package/cypress-firmware-default) TITLE:=CYW43362 FullMac SDIO firmware PROVIDES:=brcmfmac-firmware-43362-sdio + CONFLICTS:=brcmfmac-firmware-43362-sdio endef define Package/cypress-firmware-43362-sdio/install @@ -101,6 +102,7 @@ define Package/cypress-firmware-43430-sdio $(Package/cypress-firmware-default) TITLE:=CYW43430 FullMac SDIO firmware PROVIDES:=brcmfmac-firmware-43430-sdio + CONFLICTS:=brcmfmac-firmware-43430-sdio endef define Package/cypress-firmware-43430-sdio/install @@ -120,6 +122,7 @@ define Package/cypress-firmware-43455-sdio $(Package/cypress-firmware-default) TITLE:=CYW43455 FullMac SDIO firmware PROVIDES:=brcmfmac-firmware-43455-sdio + CONFLICTS:=brcmfmac-firmware-43455-sdio endef define Package/cypress-firmware-43455-sdio/install diff --git a/package/firmware/cypress-nvram/Makefile b/package/firmware/cypress-nvram/Makefile index ef4044c6d..bccdb3fce 100644 --- a/package/firmware/cypress-nvram/Makefile +++ b/package/firmware/cypress-nvram/Makefile @@ -11,7 +11,7 @@ PKG_NAME:=cypress-nvram PKG_SOURCE_DATE:=2019-09-03 PKG_SOURCE_VERSION:=e7b78df22f2a0c5f56abb7b5880661611de35e5f PKG_MIRROR_HASH:=1cb20a749696852be0a512d51961365dd9c031362af0af1a2b9f5a3fb894885f -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/openwrt/cypress-nvram.git @@ -35,6 +35,8 @@ define Package/cypress-nvram-43430-sdio-rpi-3b $(Package/cypress-nvram-default) TITLE:=CYW43430 NVRAM for Raspberry Pi 3B DEPENDS:=@TARGET_bcm27xx + PROVIDES:=brcmfmac-firmware-43430-sdio-rpi-3b + CONFLICTS:=brcmfmac-firmware-43430-sdio-rpi-3b endef define Package/cypress-nvram-43430-sdio-rpi-3b/install @@ -51,6 +53,8 @@ define Package/cypress-nvram-43430-sdio-rpi-zero-w $(Package/cypress-nvram-default) TITLE:=CYW43430 NVRAM for Raspberry Pi Zero W DEPENDS:=@TARGET_bcm27xx + PROVIDES:=brcmfmac-firmware-43430-sdio-rpi-zero-w + CONFLICTS:=brcmfmac-firmware-43430-sdio-rpi-zero-w endef define Package/cypress-nvram-43430-sdio-rpi-zero-w/install @@ -67,6 +71,8 @@ define Package/cypress-nvram-43455-sdio-rpi-3b-plus $(Package/cypress-nvram-default) TITLE:=CYW43455 NVRAM for Raspberry Pi 3B+ DEPENDS:=@TARGET_bcm27xx + PROVIDES:=brcmfmac-firmware-43455-sdio-rpi-3b-plus + CONFLICTS:=brcmfmac-firmware-43455-sdio-rpi-3b-plus endef define Package/cypress-nvram-43455-sdio-rpi-3b-plus/install @@ -83,6 +89,8 @@ define Package/cypress-nvram-43455-sdio-rpi-4b $(Package/cypress-nvram-default) TITLE:=CYW43455 NVRAM for Raspberry Pi 4B DEPENDS:=@TARGET_bcm27xx + PROVIDES:=brcmfmac-firmware-43455-sdio-rpi-4b + CONFLICTS:=brcmfmac-firmware-43455-sdio-rpi-4b endef define Package/cypress-nvram-43455-sdio-rpi-4b/install diff --git a/package/firmware/linux-firmware/Makefile b/package/firmware/linux-firmware/Makefile index 877a58d3d..7fb99dd2c 100644 --- a/package/firmware/linux-firmware/Makefile +++ b/package/firmware/linux-firmware/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=linux-firmware PKG_VERSION:=20201118 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz @@ -26,6 +26,7 @@ define Package/firmware-default CATEGORY:=Firmware URL:=http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git TITLE:=$(1) + DEPENDS:=$(2) endef define Build/Compile diff --git a/package/firmware/linux-firmware/qca_ath10k.mk b/package/firmware/linux-firmware/qca_ath10k.mk index a7c5b13b8..bd5d21916 100644 --- a/package/firmware/linux-firmware/qca_ath10k.mk +++ b/package/firmware/linux-firmware/qca_ath10k.mk @@ -9,48 +9,68 @@ define Download/qca99x0-board endef $(eval $(call Download,qca99x0-board)) -Package/ath10k-firmware-qca4019 = $(call Package/firmware-default,ath10k qca4019 firmware) -define Package/ath10k-firmware-qca4019/install +Package/ath10k-board-qca4019 = $(call Package/firmware-default,ath10k qca4019 board firmware) +define Package/ath10k-board-qca4019/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA4019/hw1.0/board-2.bin \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ +endef +$(eval $(call BuildPackage,ath10k-board-qca4019)) +Package/ath10k-firmware-qca4019 = $(call Package/firmware-default,ath10k qca4019 firmware,+ath10k-board-qca4019) +define Package/ath10k-firmware-qca4019/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA4019/hw1.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca4019)) -Package/ath10k-firmware-qca9887 = $(call Package/firmware-default,ath10k qca9887 firmware) +Package/ath10k-board-qca9887 = $(call Package/firmware-default,ath10k qca9887 board firmware) +define Package/ath10k-board-qca9887/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/ath10k/QCA9887/hw1.0/board.bin \ + $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca9887)) +Package/ath10k-firmware-qca9887 = $(call Package/firmware-default,ath10k qca9887 firmware,+ath10k-board-qca9887) define Package/ath10k-firmware-qca9887/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9887/hw1.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-5.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/ath10k/QCA9887/hw1.0/board.bin \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca9887)) -Package/ath10k-firmware-qca9888 = $(call Package/firmware-default,ath10k qca9888 firmware) -define Package/ath10k-firmware-qca9888/install +Package/ath10k-board-qca9888 = $(call Package/firmware-default,ath10k qca9888 board firmware) +define Package/ath10k-board-qca9888/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9888/hw2.0/board-2.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca9888)) +Package/ath10k-firmware-qca9888 = $(call Package/firmware-default,ath10k qca9888 firmware,+ath10k-board-qca9888) +define Package/ath10k-firmware-qca9888/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9888/hw2.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca9888)) -Package/ath10k-firmware-qca988x = $(call Package/firmware-default,ath10k qca988x firmware) -define Package/ath10k-firmware-qca988x/install +Package/ath10k-board-qca988x = $(call Package/firmware-default,ath10k qca988x board firmware) +define Package/ath10k-board-qca988x/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA988X/hw2.0/board.bin \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ +endef +$(eval $(call BuildPackage,ath10k-board-qca988x)) +Package/ath10k-firmware-qca988x = $(call Package/firmware-default,ath10k qca988x firmware,+ath10k-board-qca988x) +define Package/ath10k-firmware-qca988x/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA988X/hw2.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin @@ -76,8 +96,8 @@ define Package/ath10k-firmware-qca6174/install endef $(eval $(call BuildPackage,ath10k-firmware-qca6174)) -Package/ath10k-firmware-qca99x0 = $(call Package/firmware-default,ath10k qca99x0 firmware) -define Package/ath10k-firmware-qca99x0/install +Package/ath10k-board-qca99x0 = $(call Package/firmware-default,ath10k qca99x0 board firmware) +define Package/ath10k-board-qca99x0/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 $(INSTALL_DATA) \ $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ @@ -85,21 +105,30 @@ define Package/ath10k-firmware-qca99x0/install $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA99X0/hw2.0/board.bin \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca99x0)) +Package/ath10k-firmware-qca99x0 = $(call Package/firmware-default,ath10k qca99x0 firmware,+ath10k-board-qca99x0) +define Package/ath10k-firmware-qca99x0/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA99X0/hw2.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca99x0)) -Package/ath10k-firmware-qca9984 = $(call Package/firmware-default,ath10k qca9984 firmware) -define Package/ath10k-firmware-qca9984/install +Package/ath10k-board-qca9984 = $(call Package/firmware-default,ath10k qca9984 board firmware) +define Package/ath10k-board-qca9984/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9984/hw1.0/board-2.bin \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca9984)) +Package/ath10k-firmware-qca9984 = $(call Package/firmware-default,ath10k qca9984 firmware,+ath10k-board-qca9984) +define Package/ath10k-firmware-qca9984/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9984/hw1.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca9984)) - diff --git a/package/kernel/ath10k-ct/Makefile b/package/kernel/ath10k-ct/Makefile index 76077ec15..e38c7e0b1 100644 --- a/package/kernel/ath10k-ct/Makefile +++ b/package/kernel/ath10k-ct/Makefile @@ -1,21 +1,21 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ath10k-ct -PKG_RELEASE=1 +PKG_RELEASE=2 PKG_LICENSE:=GPLv2 PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/greearb/ath10k-ct.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2020-06-30 -PKG_SOURCE_VERSION:=edfbf9161ab75e4831981284ab2d5b1b9fb6ef72 -PKG_MIRROR_HASH:=98b7f88baea7314144fa8f8d141ad0dbbf2816f9606b0a89afb396761b558d14 +PKG_SOURCE_DATE:=2020-10-08 +PKG_SOURCE_VERSION:=1d28d176e5b6e63a6583f497adf68e1d9c1dc962 +PKG_MIRROR_HASH:=f611762647822742f7c8f9da242e33d9bf6da0a14976b87408af28f280802ae0 -# Build the 5.4 ath10k-ct driver version. Other option is "-4.19". +# Build the 5.8 ath10k-ct driver version. # Probably this should match as closely as # possible to whatever mac80211 backports version is being used. -CT_KVER="-5.4" +CT_KVER="-5.8" PKG_MAINTAINER:=Ben Greear PKG_BUILD_PARALLEL:=1 diff --git a/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch b/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch index 4e88c8a19..51cca227d 100644 --- a/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch +++ b/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch @@ -9,9 +9,17 @@ mcast_rate set for a wifi-iface. Signed-off-by: Sven Eckelmann ---- a/ath10k-5.4/mac.c -+++ b/ath10k-5.4/mac.c -@@ -6793,6 +6793,7 @@ static void ath10k_bss_info_changed(stru +--- a/ath10k-5.8/mac.c ++++ b/ath10k-5.8/mac.c +@@ -6653,6 +6653,7 @@ static void ath10k_recalculate_mgmt_rate + return; + } + ++ arvif->mgt_rate[def->chan->band] = hw_rate_code; + vdev_param = ar->wmi.vdev_param->mgmt_rate; + ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, + hw_rate_code); +@@ -6879,6 +6880,7 @@ static void ath10k_bss_info_changed(stru "mac vdev %d mcast_rate %x\n", arvif->vdev_id, rate); @@ -19,7 +27,7 @@ Signed-off-by: Sven Eckelmann vdev_param = ar->wmi.vdev_param->mcast_data_rate; ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate); -@@ -6801,6 +6802,7 @@ static void ath10k_bss_info_changed(stru +@@ -6887,6 +6889,7 @@ static void ath10k_bss_info_changed(stru "failed to set mcast rate on vdev %i: %d\n", arvif->vdev_id, ret); @@ -27,11 +35,3 @@ Signed-off-by: Sven Eckelmann vdev_param = ar->wmi.vdev_param->bcast_data_rate; ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate); -@@ -6827,6 +6829,7 @@ static void ath10k_bss_info_changed(stru - return; - } - -+ arvif->mgt_rate[def.chan->band] = hw_rate_code; - vdev_param = ar->wmi.vdev_param->mgmt_rate; - ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, - hw_rate_code); diff --git a/package/kernel/ath10k-ct/patches/201-ath10k-add-LED-and-GPIO-controlling-support-for-various-chipsets.patch b/package/kernel/ath10k-ct/patches/201-ath10k-add-LED-and-GPIO-controlling-support-for-various-chipsets.patch index 15343abd5..92f20cb4c 100644 --- a/package/kernel/ath10k-ct/patches/201-ath10k-add-LED-and-GPIO-controlling-support-for-various-chipsets.patch +++ b/package/kernel/ath10k-ct/patches/201-ath10k-add-LED-and-GPIO-controlling-support-for-various-chipsets.patch @@ -66,25 +66,25 @@ v13: * cleanup includes - ath10k-5.4/Kconfig | 10 +++ - ath10k-5.4/Makefile | 1 + - ath10k-5.4/core.c | 22 +++++++ - ath10k-5.4/core.h | 9 ++- - ath10k-5.4/hw.h | 1 + - ath10k-5.4/leds.c | 103 ++++++++++++++++++++++++++++++ - ath10k-5.4/leds.h | 45 +++++++++++++ - ath10k-5.4/mac.c | 1 + - ath10k-5.4/wmi-ops.h | 32 ++++++++++ - ath10k-5.4/wmi-tlv.c | 2 + - ath10k-5.4/wmi.c | 54 ++++++++++++++++ - ath10k-5.4/wmi.h | 35 ++++++++++ + ath10k-5.8/Kconfig | 10 +++ + ath10k-5.8/Makefile | 1 + + ath10k-5.8/core.c | 22 +++++++ + ath10k-5.8/core.h | 9 ++- + ath10k-5.8/hw.h | 1 + + ath10k-5.8/leds.c | 103 ++++++++++++++++++++++++++++++ + ath10k-5.8/leds.h | 45 +++++++++++++ + ath10k-5.8/mac.c | 1 + + ath10k-5.8/wmi-ops.h | 32 ++++++++++ + ath10k-5.8/wmi-tlv.c | 2 + + ath10k-5.8/wmi.c | 54 ++++++++++++++++ + ath10k-5.8/wmi.h | 35 ++++++++++ 12 files changed, 314 insertions(+), 1 deletion(-) - create mode 100644 ath10k-5.4/leds.c - create mode 100644 ath10k-5.4/leds.h + create mode 100644 ath10k-5.8/leds.c + create mode 100644 ath10k-5.8/leds.h ---- a/ath10k-5.4/Kconfig -+++ b/ath10k-5.4/Kconfig -@@ -66,6 +66,16 @@ config ATH10K_DEBUGFS +--- a/ath10k-5.8/Kconfig ++++ b/ath10k-5.8/Kconfig +@@ -65,6 +65,16 @@ config ATH10K_DEBUGFS If unsure, say Y to make it easier to debug problems. @@ -101,19 +101,19 @@ v13: config ATH10K_SPECTRAL bool "Atheros ath10k spectral scan support" depends on ATH10K_DEBUGFS ---- a/ath10k-5.4/Makefile -+++ b/ath10k-5.4/Makefile -@@ -19,6 +19,7 @@ ath10k_core-$(CONFIG_ATH10K_SPECTRAL) += +--- a/ath10k-5.8/Makefile ++++ b/ath10k-5.8/Makefile +@@ -20,6 +20,7 @@ ath10k_core-$(CONFIG_ATH10K_SPECTRAL) += ath10k_core-$(CONFIG_NL80211_TESTMODE) += testmode.o ath10k_core-$(CONFIG_ATH10K_TRACING) += trace.o ath10k_core-$(CONFIG_THERMAL) += thermal.o +ath10k_core-$(CONFIG_ATH10K_LEDS) += leds.o ath10k_core-$(CONFIG_MAC80211_DEBUGFS) += debugfs_sta.o ath10k_core-$(CONFIG_PM) += wow.o - ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o ---- a/ath10k-5.4/core.c -+++ b/ath10k-5.4/core.c -@@ -25,6 +25,7 @@ + ath10k_core-$(CONFIG_ATH10K_CE) += ce.o +--- a/ath10k-5.8/core.c ++++ b/ath10k-5.8/core.c +@@ -26,6 +26,7 @@ #include "testmode.h" #include "wmi-ops.h" #include "coredump.h" @@ -121,7 +121,7 @@ v13: /* Disable ath10k-ct DBGLOG output by default */ unsigned int ath10k_debug_mask = ATH10K_DBG_NO_DBGLOG; -@@ -67,6 +68,7 @@ static const struct ath10k_hw_params ath +@@ -68,6 +69,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA988X_2_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca988x hw2.0", @@ -129,7 +129,7 @@ v13: .patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL, -@@ -137,6 +139,7 @@ static const struct ath10k_hw_params ath +@@ -138,6 +140,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA9887_1_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca9887 hw1.0", @@ -137,7 +137,7 @@ v13: .patch_load_addr = QCA9887_HW_1_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL, -@@ -344,6 +347,7 @@ static const struct ath10k_hw_params ath +@@ -347,6 +350,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA99X0_2_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca99x0 hw2.0", @@ -145,7 +145,7 @@ v13: .patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR, .uart_pin = 7, .otp_exe_param = 0x00000700, -@@ -385,6 +389,7 @@ static const struct ath10k_hw_params ath +@@ -388,6 +392,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA9984_1_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca9984/qca9994 hw1.0", @@ -153,7 +153,7 @@ v13: .patch_load_addr = QCA9984_HW_1_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH, -@@ -433,6 +438,7 @@ static const struct ath10k_hw_params ath +@@ -436,6 +441,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA9888_2_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca9888 hw2.0", @@ -161,7 +161,7 @@ v13: .patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH, -@@ -3573,6 +3579,10 @@ int ath10k_core_start(struct ath10k *ar, +@@ -3675,6 +3681,10 @@ int ath10k_core_start(struct ath10k *ar, ath10k_wmi_check_apply_board_power_ctl_table(ar); } @@ -172,7 +172,7 @@ v13: return 0; err_hif_stop: -@@ -3829,9 +3839,18 @@ static void ath10k_core_register_work(st +@@ -3933,9 +3943,18 @@ static void ath10k_core_register_work(st goto err_spectral_destroy; } @@ -191,7 +191,7 @@ v13: err_spectral_destroy: ath10k_spectral_destroy(ar); err_debug_destroy: -@@ -3891,6 +3910,8 @@ void ath10k_core_unregister(struct ath10 +@@ -3995,6 +4014,8 @@ void ath10k_core_unregister(struct ath10 if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags)) return; @@ -200,8 +200,8 @@ v13: ath10k_thermal_unregister(ar); /* Stop spectral before unregistering from mac80211 to remove the * relayfs debugfs file cleanly. Otherwise the parent debugfs tree ---- a/ath10k-5.4/core.h -+++ b/ath10k-5.4/core.h +--- a/ath10k-5.8/core.h ++++ b/ath10k-5.8/core.h @@ -14,6 +14,7 @@ #include #include @@ -210,7 +210,7 @@ v13: #include "htt.h" #include "htc.h" -@@ -1470,6 +1471,13 @@ struct ath10k { +@@ -1523,6 +1524,13 @@ struct ath10k { } testmode; struct { @@ -222,11 +222,11 @@ v13: + + struct { /* protected by data_lock */ + u32 rx_crc_err_drop; u32 fw_crash_counter; - u32 fw_warm_reset_counter; ---- a/ath10k-5.4/hw.h -+++ b/ath10k-5.4/hw.h -@@ -518,6 +518,7 @@ struct ath10k_hw_params { +--- a/ath10k-5.8/hw.h ++++ b/ath10k-5.8/hw.h +@@ -521,6 +521,7 @@ struct ath10k_hw_params { const char *name; u32 patch_load_addr; int uart_pin; @@ -235,7 +235,7 @@ v13: /* Type of hw cycle counter wraparound logic, for more info --- /dev/null -+++ b/ath10k-5.4/leds.c ++++ b/ath10k-5.8/leds.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2005-2011 Atheros Communications Inc. @@ -341,7 +341,7 @@ v13: +} + --- /dev/null -+++ b/ath10k-5.4/leds.h ++++ b/ath10k-5.8/leds.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018, The Linux Foundation. All rights reserved. @@ -384,9 +384,9 @@ v13: + +#endif +#endif /* _LEDS_H_ */ ---- a/ath10k-5.4/mac.c -+++ b/ath10k-5.4/mac.c -@@ -24,6 +24,7 @@ +--- a/ath10k-5.8/mac.c ++++ b/ath10k-5.8/mac.c +@@ -25,6 +25,7 @@ #include "wmi-tlv.h" #include "wmi-ops.h" #include "wow.h" @@ -394,9 +394,9 @@ v13: /*********/ /* Rates */ ---- a/ath10k-5.4/wmi-ops.h -+++ b/ath10k-5.4/wmi-ops.h -@@ -218,7 +218,10 @@ struct wmi_ops { +--- a/ath10k-5.8/wmi-ops.h ++++ b/ath10k-5.8/wmi-ops.h +@@ -226,7 +226,10 @@ struct wmi_ops { struct sk_buff *(*gen_bb_timing) (struct ath10k *ar, const struct wmi_bb_timing_cfg_arg *arg); @@ -407,7 +407,7 @@ v13: }; int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id); -@@ -1105,6 +1108,35 @@ ath10k_wmi_force_fw_hang(struct ath10k * +@@ -1145,6 +1148,35 @@ ath10k_wmi_force_fw_hang(struct ath10k * return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->force_fw_hang_cmdid); } @@ -443,9 +443,9 @@ v13: static inline int ath10k_wmi_dbglog_cfg(struct ath10k *ar, u64 module_enable, u32 log_level) { ---- a/ath10k-5.4/wmi-tlv.c -+++ b/ath10k-5.4/wmi-tlv.c -@@ -4367,6 +4367,8 @@ static const struct wmi_ops wmi_tlv_ops +--- a/ath10k-5.8/wmi-tlv.c ++++ b/ath10k-5.8/wmi-tlv.c +@@ -4583,6 +4583,8 @@ static const struct wmi_ops wmi_tlv_ops .gen_echo = ath10k_wmi_tlv_op_gen_echo, .gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf, .gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable, @@ -454,9 +454,9 @@ v13: }; static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = { ---- a/ath10k-5.4/wmi.c -+++ b/ath10k-5.4/wmi.c -@@ -8305,6 +8305,49 @@ ath10k_wmi_op_gen_peer_set_param(struct +--- a/ath10k-5.8/wmi.c ++++ b/ath10k-5.8/wmi.c +@@ -8412,6 +8412,49 @@ ath10k_wmi_op_gen_peer_set_param(struct return skb; } @@ -506,7 +506,7 @@ v13: static struct sk_buff * ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id, enum wmi_sta_ps_mode psmode) -@@ -10104,6 +10147,9 @@ static const struct wmi_ops wmi_ops = { +@@ -10211,6 +10254,9 @@ static const struct wmi_ops wmi_ops = { .fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill, .get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, .gen_echo = ath10k_wmi_op_gen_echo, @@ -516,7 +516,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -10174,6 +10220,8 @@ static const struct wmi_ops wmi_10_1_ops +@@ -10281,6 +10327,8 @@ static const struct wmi_ops wmi_10_1_ops .fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, .get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, .gen_echo = ath10k_wmi_op_gen_echo, @@ -525,7 +525,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -10253,6 +10301,8 @@ static const struct wmi_ops wmi_10_2_ops +@@ -10360,6 +10408,8 @@ static const struct wmi_ops wmi_10_2_ops .gen_delba_send = ath10k_wmi_op_gen_delba_send, .fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, .get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, @@ -534,7 +534,7 @@ v13: /* .gen_pdev_enable_adaptive_cca not implemented */ }; -@@ -10324,6 +10374,8 @@ static const struct wmi_ops wmi_10_2_4_o +@@ -10431,6 +10481,8 @@ static const struct wmi_ops wmi_10_2_4_o ath10k_wmi_op_gen_pdev_enable_adaptive_cca, .get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype, .gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing, @@ -543,7 +543,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -10405,6 +10457,8 @@ static const struct wmi_ops wmi_10_4_ops +@@ -10512,6 +10564,8 @@ static const struct wmi_ops wmi_10_4_ops .gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info, .gen_echo = ath10k_wmi_op_gen_echo, .gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config, @@ -552,9 +552,9 @@ v13: }; int ath10k_wmi_attach(struct ath10k *ar) ---- a/ath10k-5.4/wmi.h -+++ b/ath10k-5.4/wmi.h -@@ -3110,6 +3110,41 @@ enum wmi_10_4_feature_mask { +--- a/ath10k-5.8/wmi.h ++++ b/ath10k-5.8/wmi.h +@@ -3121,6 +3121,41 @@ enum wmi_10_4_feature_mask { }; diff --git a/package/kernel/ath10k-ct/patches/202-ath10k-use-tpt-trigger-by-default.patch b/package/kernel/ath10k-ct/patches/202-ath10k-use-tpt-trigger-by-default.patch index dd35e2937..cd3b7c5e6 100644 --- a/package/kernel/ath10k-ct/patches/202-ath10k-use-tpt-trigger-by-default.patch +++ b/package/kernel/ath10k-ct/patches/202-ath10k-use-tpt-trigger-by-default.patch @@ -9,14 +9,14 @@ traffic. Signed-off-by: Mathias Kresin --- - ath10k-5.4/core.h | 4 ++++ - ath10k-5.4/leds.c | 4 +--- - ath10k-5.4/mac.c | 2 +- + ath10k-5.8/core.h | 4 ++++ + ath10k-5.8/leds.c | 4 +--- + ath10k-5.8/mac.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) ---- a/ath10k-5.4/core.h -+++ b/ath10k-5.4/core.h -@@ -1574,6 +1574,10 @@ struct ath10k { +--- a/ath10k-5.8/core.h ++++ b/ath10k-5.8/core.h +@@ -1631,6 +1631,10 @@ struct ath10k { u8 csi_data[4096]; u16 csi_data_len; @@ -25,10 +25,10 @@ Signed-off-by: Mathias Kresin +#endif + /* must be last */ - u8 drv_priv[0] __aligned(sizeof(void *)); + u8 drv_priv[] __aligned(sizeof(void *)); }; ---- a/ath10k-5.4/leds.c -+++ b/ath10k-5.4/leds.c +--- a/ath10k-5.8/leds.c ++++ b/ath10k-5.8/leds.c @@ -81,9 +81,7 @@ int ath10k_leds_register(struct ath10k * ar->leds.cdev.name = ar->leds.label; @@ -40,9 +40,9 @@ Signed-off-by: Mathias Kresin ret = led_classdev_register(wiphy_dev(ar->hw->wiphy), &ar->leds.cdev); if (ret) ---- a/ath10k-5.4/mac.c -+++ b/ath10k-5.4/mac.c -@@ -10383,7 +10383,7 @@ int ath10k_mac_register(struct ath10k *a +--- a/ath10k-5.8/mac.c ++++ b/ath10k-5.8/mac.c +@@ -10680,7 +10680,7 @@ int ath10k_mac_register(struct ath10k *a ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; #ifdef CPTCFG_MAC80211_LEDS diff --git a/package/kernel/ath10k-ct/patches/205-ath10k-Add-NL80211_EXT_FEATURE_AQL-flag.patch b/package/kernel/ath10k-ct/patches/205-ath10k-Add-NL80211_EXT_FEATURE_AQL-flag.patch deleted file mode 100644 index 33d69e797..000000000 --- a/package/kernel/ath10k-ct/patches/205-ath10k-Add-NL80211_EXT_FEATURE_AQL-flag.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/ath10k-5.4/mac.c -+++ b/ath10k-5.4/mac.c -@@ -10182,6 +10182,7 @@ int ath10k_mac_register(struct ath10k *a - wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS); - wiphy_ext_feature_set(ar->hw->wiphy, - NL80211_EXT_FEATURE_SET_SCAN_DWELL); -+ wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_AQL); - - if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map) || - test_bit(WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, ar->wmi.svc_map)) diff --git a/package/kernel/ath10k-ct/patches/960-0010-ath10k-limit-htt-rx-ring-size.patch b/package/kernel/ath10k-ct/patches/960-0010-ath10k-limit-htt-rx-ring-size.patch index c52743089..5b52a434f 100644 --- a/package/kernel/ath10k-ct/patches/960-0010-ath10k-limit-htt-rx-ring-size.patch +++ b/package/kernel/ath10k-ct/patches/960-0010-ath10k-limit-htt-rx-ring-size.patch @@ -1,6 +1,6 @@ ---- a/ath10k-5.4/htt.h -+++ b/ath10k-5.4/htt.h -@@ -225,7 +225,11 @@ enum htt_rx_ring_flags { +--- a/ath10k-5.8/htt.h ++++ b/ath10k-5.8/htt.h +@@ -237,7 +237,11 @@ enum htt_rx_ring_flags { }; #define HTT_RX_RING_SIZE_MIN 128 diff --git a/package/kernel/ath10k-ct/patches/960-0011-ath10k-limit-pci-buffer-size.patch b/package/kernel/ath10k-ct/patches/960-0011-ath10k-limit-pci-buffer-size.patch index f559a78f2..98653d6b7 100644 --- a/package/kernel/ath10k-ct/patches/960-0011-ath10k-limit-pci-buffer-size.patch +++ b/package/kernel/ath10k-ct/patches/960-0011-ath10k-limit-pci-buffer-size.patch @@ -1,6 +1,6 @@ ---- a/ath10k-5.4/pci.c -+++ b/ath10k-5.4/pci.c -@@ -131,7 +131,11 @@ static struct ce_attr host_ce_config_wla +--- a/ath10k-5.8/pci.c ++++ b/ath10k-5.8/pci.c +@@ -131,7 +131,11 @@ static const struct ce_attr pci_host_ce_ .flags = CE_ATTR_FLAGS, .src_nentries = 0, .src_sz_max = 2048, @@ -12,7 +12,7 @@ .recv_cb = ath10k_pci_htt_htc_rx_cb, }, -@@ -140,7 +144,11 @@ static struct ce_attr host_ce_config_wla +@@ -140,7 +144,11 @@ static const struct ce_attr pci_host_ce_ .flags = CE_ATTR_FLAGS, .src_nentries = 0, .src_sz_max = 2048, @@ -24,7 +24,7 @@ .recv_cb = ath10k_pci_htc_rx_cb, }, -@@ -167,7 +175,11 @@ static struct ce_attr host_ce_config_wla +@@ -167,7 +175,11 @@ static const struct ce_attr pci_host_ce_ .flags = CE_ATTR_FLAGS, .src_nentries = 0, .src_sz_max = 512, @@ -36,7 +36,7 @@ .recv_cb = ath10k_pci_htt_rx_cb, }, -@@ -192,7 +204,11 @@ static struct ce_attr host_ce_config_wla +@@ -192,7 +204,11 @@ static const struct ce_attr pci_host_ce_ .flags = CE_ATTR_FLAGS, .src_nentries = 0, .src_sz_max = 2048, diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile index bf88484b7..8448350ac 100644 --- a/package/kernel/mac80211/Makefile +++ b/package/kernel/mac80211/Makefile @@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 PKG_VERSION:=5.8-1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.8/ PKG_HASH:=19b4174d89bf11ee221458e11f1e8dace26558498774b823051156f522d2036b diff --git a/package/kernel/mac80211/ath.mk b/package/kernel/mac80211/ath.mk index 944766cf8..48baa12eb 100644 --- a/package/kernel/mac80211/ath.mk +++ b/package/kernel/mac80211/ath.mk @@ -1,6 +1,6 @@ PKG_DRIVERS += \ ath ath5k ath6kl ath6kl-sdio ath6kl-usb ath9k ath9k-common ath9k-htc ath10k \ - ath11k carl9170 owl-loader + ath11k ar5523 carl9170 owl-loader PKG_CONFIG_DEPENDS += \ CONFIG_PACKAGE_ATH_DEBUG \ @@ -70,6 +70,7 @@ config-$(call config_package,ath6kl-sdio) += ATH6KL_SDIO config-$(call config_package,ath6kl-usb) += ATH6KL_USB config-$(call config_package,carl9170) += CARL9170 +config-$(call config_package,ar5523) += AR5523 define KernelPackage/ath/config if PACKAGE_kmod-ath diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index 92adf67ca..3f7896ca8 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -372,7 +372,7 @@ mac80211_hostapd_setup_bss() { hostapd_cfg= append hostapd_cfg "$type=$ifname" "$N" - hostapd_set_bss_options hostapd_cfg "$vif" || return 1 + hostapd_set_bss_options hostapd_cfg "$phy" "$vif" || return 1 json_get_vars wds wds_bridge dtim_period max_listen_int start_disabled set_default wds 0 @@ -627,7 +627,7 @@ mac80211_setup_supplicant() { local spobj="$(ubus -S list | grep wpa_supplicant.${ifname})" [ "$enable" = 0 ] && { - ubus call wpa_supplicant.${phy} config_del "{\"iface\":\"$ifname\"}" + ubus call wpa_supplicant.${phy} config_remove "{\"iface\":\"$ifname\"}" ip link set dev "$ifname" down iw dev "$ifname" del return 0 diff --git a/package/kernel/mac80211/patches/rt2x00/992-rt2x00-save-survey-for-every-channel-visited.patch b/package/kernel/mac80211/patches/rt2x00/992-rt2x00-save-survey-for-every-channel-visited.patch new file mode 100644 index 000000000..31a7baeee --- /dev/null +++ b/package/kernel/mac80211/patches/rt2x00/992-rt2x00-save-survey-for-every-channel-visited.patch @@ -0,0 +1,183 @@ +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c +@@ -1238,6 +1238,8 @@ void rt2800_watchdog(struct rt2x00_dev * + if (test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags)) + return; + ++ rt2800_update_survey(rt2x00dev); ++ + queue_for_each(rt2x00dev, queue) { + switch (queue->qid) { + case QID_AC_VO: +@@ -1274,6 +1276,18 @@ void rt2800_watchdog(struct rt2x00_dev * + } + EXPORT_SYMBOL_GPL(rt2800_watchdog); + ++void rt2800_update_survey(struct rt2x00_dev *rt2x00dev) ++{ ++ struct ieee80211_channel *chan = rt2x00dev->hw->conf.chandef.chan; ++ struct rt2x00_chan_survey *chan_survey = ++ &rt2x00dev->chan_survey[chan->hw_value]; ++ ++ chan_survey->time_idle += rt2800_register_read(rt2x00dev, CH_IDLE_STA); ++ chan_survey->time_busy += rt2800_register_read(rt2x00dev, CH_BUSY_STA); ++ chan_survey->time_ext_busy += rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC); ++} ++EXPORT_SYMBOL_GPL(rt2800_update_survey); ++ + static unsigned int rt2800_hw_beacon_base(struct rt2x00_dev *rt2x00dev, + unsigned int index) + { +@@ -12199,26 +12213,30 @@ int rt2800_get_survey(struct ieee80211_h + { + struct rt2x00_dev *rt2x00dev = hw->priv; + struct ieee80211_conf *conf = &hw->conf; +- u32 idle, busy, busy_ext; ++ struct rt2x00_chan_survey *chan_survey = ++ &rt2x00dev->chan_survey[idx]; ++ enum nl80211_band band = NL80211_BAND_2GHZ; + +- if (idx != 0) ++ if (idx >= rt2x00dev->bands[band].n_channels) { ++ idx -= rt2x00dev->bands[band].n_channels; ++ band = NL80211_BAND_5GHZ; ++ } ++ ++ if (idx >= rt2x00dev->bands[band].n_channels) + return -ENOENT; + +- survey->channel = conf->chandef.chan; ++ if (idx == 0) ++ rt2800_update_survey(rt2x00dev); + +- idle = rt2800_register_read(rt2x00dev, CH_IDLE_STA); +- busy = rt2800_register_read(rt2x00dev, CH_BUSY_STA); +- busy_ext = rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC); +- +- if (idle || busy) { +- survey->filled = SURVEY_INFO_TIME | +- SURVEY_INFO_TIME_BUSY | +- SURVEY_INFO_TIME_EXT_BUSY; +- +- survey->time = (idle + busy) / 1000; +- survey->time_busy = busy / 1000; +- survey->time_ext_busy = busy_ext / 1000; +- } ++ survey->channel = &rt2x00dev->bands[band].channels[idx]; ++ ++ survey->filled = SURVEY_INFO_TIME | ++ SURVEY_INFO_TIME_BUSY | ++ SURVEY_INFO_TIME_EXT_BUSY; ++ ++ survey->time = div_u64(chan_survey->time_idle + chan_survey->time_busy, 1000); ++ survey->time_busy = div_u64(chan_survey->time_busy, 1000); ++ survey->time_ext_busy = div_u64(chan_survey->time_ext_busy, 1000); + + if (!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) + survey->filled |= SURVEY_INFO_IN_USE; +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h +@@ -243,6 +243,7 @@ bool rt2800_txstatus_timeout(struct rt2x + bool rt2800_txstatus_pending(struct rt2x00_dev *rt2x00dev); + + void rt2800_watchdog(struct rt2x00_dev *rt2x00dev); ++void rt2800_update_survey(struct rt2x00_dev *rt2x00dev); + + void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc); + void rt2800_clear_beacon(struct queue_entry *entry); +--- a/drivers/net/wireless/ralink/rt2x00/rt2800pci.c ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800pci.c +@@ -360,6 +360,7 @@ static const struct rt2x00lib_ops rt2800 + .gain_calibration = rt2800_gain_calibration, + .vco_calibration = rt2800_vco_calibration, + .watchdog = rt2800_watchdog, ++ .update_survey = rt2800_update_survey, + .start_queue = rt2800mmio_start_queue, + .kick_queue = rt2800mmio_kick_queue, + .stop_queue = rt2800mmio_stop_queue, +--- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c +@@ -214,6 +214,7 @@ static const struct rt2x00lib_ops rt2800 + .gain_calibration = rt2800_gain_calibration, + .vco_calibration = rt2800_vco_calibration, + .watchdog = rt2800_watchdog, ++ .update_survey = rt2800_update_survey, + .start_queue = rt2800mmio_start_queue, + .kick_queue = rt2800mmio_kick_queue, + .stop_queue = rt2800mmio_stop_queue, +--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h ++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h +@@ -183,6 +183,15 @@ struct rf_channel { + }; + + /* ++ * Information structure for channel survey. ++ */ ++struct rt2x00_chan_survey { ++ u64 time_idle; ++ u64 time_busy; ++ u64 time_ext_busy; ++}; ++ ++/* + * Channel information structure + */ + struct channel_info { +@@ -567,6 +576,7 @@ struct rt2x00lib_ops { + * Data queue handlers. + */ + void (*watchdog) (struct rt2x00_dev *rt2x00dev); ++ void (*update_survey) (struct rt2x00_dev *rt2x00dev); + void (*start_queue) (struct data_queue *queue); + void (*kick_queue) (struct data_queue *queue); + void (*stop_queue) (struct data_queue *queue); +@@ -755,6 +765,7 @@ struct rt2x00_dev { + */ + struct ieee80211_hw *hw; + struct ieee80211_supported_band bands[NUM_NL80211_BANDS]; ++ struct rt2x00_chan_survey *chan_survey; + enum nl80211_band curr_band; + int curr_freq; + +--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c ++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c +@@ -1057,6 +1057,12 @@ static int rt2x00lib_probe_hw_modes(stru + if (!rates) + goto exit_free_channels; + ++ rt2x00dev->chan_survey = ++ kcalloc(spec->num_channels, sizeof(struct rt2x00_chan_survey), ++ GFP_KERNEL); ++ if (!rt2x00dev->chan_survey) ++ goto exit_free_rates; ++ + /* + * Initialize Rate list. + */ +@@ -1108,6 +1114,8 @@ static int rt2x00lib_probe_hw_modes(stru + + return 0; + ++ exit_free_rates: ++ kfree(rates); + exit_free_channels: + kfree(channels); + rt2x00_err(rt2x00dev, "Allocation ieee80211 modes failed\n"); +--- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c ++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c +@@ -317,6 +317,15 @@ int rt2x00mac_config(struct ieee80211_hw + return 0; + + /* ++ * To provide correct survey data for survey-based ACS algorithm ++ * we have to save survey data for current channel before switching. ++ */ ++ if (rt2x00dev->ops->lib->update_survey && ++ (changed & IEEE80211_CONF_CHANGE_CHANNEL)) { ++ rt2x00dev->ops->lib->update_survey(rt2x00dev); ++ } ++ ++ /* + * Some configuration parameters (e.g. channel and antenna values) can + * only be set when the radio is enabled, but do require the RX to + * be off. During this period we should keep link tuning enabled, diff --git a/package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch b/package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch new file mode 100644 index 000000000..486d10ea5 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch @@ -0,0 +1,35 @@ +From: Felix Fietkau +Date: Wed, 11 Nov 2020 13:34:26 +0100 +Subject: [PATCH] backports: backport tasklet_setup, from_tasklet + +Backport the new tasklet API + +Signed-off-by: Felix Fietkau +--- + +--- a/backport-include/linux/interrupt.h ++++ b/backport-include/linux/interrupt.h +@@ -31,6 +31,23 @@ static inline void backport_hrtimer_star + hrtimer_start(timer, _time, mode); + } + #define hrtimer_start LINUX_BACKPORT(hrtimer_start) ++ ++#endif ++ ++#if LINUX_VERSION_IS_LESS(5,9,0) ++ ++static inline void ++tasklet_setup(struct tasklet_struct *t, ++ void (*callback)(struct tasklet_struct *)) ++{ ++ void (*cb)(unsigned long data) = (void *)callback; ++ ++ tasklet_init(t, cb, (unsigned long)t); ++} ++ ++#define from_tasklet(var, callback_tasklet, tasklet_fieldname) \ ++ container_of(callback_tasklet, typeof(*var), tasklet_fieldname) ++ + #endif + + #endif /* _BP_LINUX_INTERRUPT_H */ diff --git a/package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch b/package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch new file mode 100644 index 000000000..cdbbcf5d0 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch @@ -0,0 +1,55 @@ +From: Felix Fietkau +Date: Fri, 16 Oct 2020 19:54:49 +0200 +Subject: [PATCH] mac80211: fix memory leak on filtered powersave frames + +After the status rework, ieee80211_tx_status_ext is leaking un-acknowledged +packets for stations in powersave mode. +To fix this, move the code handling those packets from __ieee80211_tx_status +into ieee80211_tx_status_ext + +Reported-by: Tobias Waldvogel +Fixes: 3318111cf63d ("mac80211: reduce duplication in tx status functions") +Signed-off-by: Felix Fietkau +--- + +--- a/net/mac80211/status.c ++++ b/net/mac80211/status.c +@@ -49,7 +49,8 @@ static void ieee80211_handle_filtered_fr + int ac; + + if (info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER | +- IEEE80211_TX_CTL_AMPDU)) { ++ IEEE80211_TX_CTL_AMPDU | ++ IEEE80211_TX_CTL_HW_80211_ENCAP)) { + ieee80211_free_txskb(&local->hw, skb); + return; + } +@@ -924,15 +925,6 @@ static void __ieee80211_tx_status(struct + ieee80211_mpsp_trigger_process( + ieee80211_get_qos_ctl(hdr), sta, true, acked); + +- if (!acked && test_sta_flag(sta, WLAN_STA_PS_STA)) { +- /* +- * The STA is in power save mode, so assume +- * that this TX packet failed because of that. +- */ +- ieee80211_handle_filtered_frame(local, sta, skb); +- return; +- } +- + if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL) && + (ieee80211_is_data(hdr->frame_control)) && + (rates_idx != -1)) +@@ -1159,6 +1151,12 @@ void ieee80211_tx_status_ext(struct ieee + -info->status.ack_signal); + } + } else if (test_sta_flag(sta, WLAN_STA_PS_STA)) { ++ /* ++ * The STA is in power save mode, so assume ++ * that this TX packet failed because of that. ++ */ ++ if (skb) ++ ieee80211_handle_filtered_frame(local, sta, skb); + return; + } else if (noack_success) { + /* nothing to do here, do not account as lost */ diff --git a/package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch b/package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch new file mode 100644 index 000000000..e3a877fb9 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch @@ -0,0 +1,96 @@ +From: Felix Fietkau +Date: Wed, 11 Nov 2020 19:17:44 +0100 +Subject: [PATCH] mac80211: minstrel: remove deferred sampling code + +Deferring sampling attempts to the second stage has some bad interactions +with drivers that process the rate table in hardware and use the probe flag +to indicate probing packets (e.g. most mt76 drivers). On affected drivers +it can lead to probing not working at all. + +If the link conditions turn worse, it might not be such a good idea to +do a lot of sampling for lower rates in this case. + +Fix this by simply skipping the sample attempt instead of deferring it, +but keep the checks that would allow it to be sampled if it was skipped +too often, but only if it has less than 95% success probability. + +Also ensure that IEEE80211_TX_CTL_RATE_CTRL_PROBE is set for all probing +packets. + +Cc: stable@vger.kernel.org +Fixes: cccf129f820e ("mac80211: add the 'minstrel' rate control algorithm") +Signed-off-by: Felix Fietkau +--- + +--- a/net/mac80211/rc80211_minstrel.c ++++ b/net/mac80211/rc80211_minstrel.c +@@ -287,12 +287,6 @@ minstrel_tx_status(void *priv, struct ie + mi->r[ndx].stats.success += success; + } + +- if ((info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) && (i >= 0)) +- mi->sample_packets++; +- +- if (mi->sample_deferred > 0) +- mi->sample_deferred--; +- + if (time_after(jiffies, mi->last_stats_update + + mp->update_interval / (mp->new_avg ? 2 : 1))) + minstrel_update_stats(mp, mi); +@@ -367,7 +361,7 @@ minstrel_get_rate(void *priv, struct iee + return; + + delta = (mi->total_packets * sampling_ratio / 100) - +- (mi->sample_packets + mi->sample_deferred / 2); ++ mi->sample_packets; + + /* delta < 0: no sampling required */ + prev_sample = mi->prev_sample; +@@ -376,7 +370,6 @@ minstrel_get_rate(void *priv, struct iee + return; + + if (mi->total_packets >= 10000) { +- mi->sample_deferred = 0; + mi->sample_packets = 0; + mi->total_packets = 0; + } else if (delta > mi->n_rates * 2) { +@@ -401,19 +394,8 @@ minstrel_get_rate(void *priv, struct iee + * rate sampling method should be used. + * Respect such rates that are not sampled for 20 interations. + */ +- if (mrr_capable && +- msr->perfect_tx_time > mr->perfect_tx_time && +- msr->stats.sample_skipped < 20) { +- /* Only use IEEE80211_TX_CTL_RATE_CTRL_PROBE to mark +- * packets that have the sampling rate deferred to the +- * second MRR stage. Increase the sample counter only +- * if the deferred sample rate was actually used. +- * Use the sample_deferred counter to make sure that +- * the sampling is not done in large bursts */ +- info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; +- rate++; +- mi->sample_deferred++; +- } else { ++ if (msr->perfect_tx_time < mr->perfect_tx_time || ++ msr->stats.sample_skipped >= 20) { + if (!msr->sample_limit) + return; + +@@ -433,6 +415,7 @@ minstrel_get_rate(void *priv, struct iee + + rate->idx = mi->r[ndx].rix; + rate->count = minstrel_get_retry_count(&mi->r[ndx], info); ++ info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; + } + + +--- a/net/mac80211/rc80211_minstrel.h ++++ b/net/mac80211/rc80211_minstrel.h +@@ -126,7 +126,6 @@ struct minstrel_sta_info { + u8 max_prob_rate; + unsigned int total_packets; + unsigned int sample_packets; +- int sample_deferred; + + unsigned int sample_row; + unsigned int sample_column; diff --git a/package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch b/package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch new file mode 100644 index 000000000..b1c339a1e --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch @@ -0,0 +1,26 @@ +From: Felix Fietkau +Date: Wed, 11 Nov 2020 19:25:39 +0100 +Subject: [PATCH] mac80211: minstrel: fix tx status processing corner case + +Some drivers fill the status rate list without setting the rate index after +the final rate to -1. minstrel_ht already deals with this, but minstrel +doesn't, which causes it to get stuck at the lowest rate on these drivers. + +Fix this by checking the count as well. + +Cc: stable@vger.kernel.org +Fixes: cccf129f820e ("mac80211: add the 'minstrel' rate control algorithm") +Signed-off-by: Felix Fietkau +--- + +--- a/net/mac80211/rc80211_minstrel.c ++++ b/net/mac80211/rc80211_minstrel.c +@@ -274,7 +274,7 @@ minstrel_tx_status(void *priv, struct ie + success = !!(info->flags & IEEE80211_TX_STAT_ACK); + + for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { +- if (ar[i].idx < 0) ++ if (ar[i].idx < 0 || !ar[i].count) + break; + + ndx = rix_to_ndx(mi, ar[i].idx); diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile index c151bd422..43fd3be65 100644 --- a/package/network/config/netifd/Makefile +++ b/package/network/config/netifd/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git -PKG_SOURCE_DATE:=2020-06-06 -PKG_SOURCE_VERSION:=51e9fb8151e8f2c16ac1400bf4d64147ee7e8f5a -PKG_MIRROR_HASH:=d89b76cb28a4c15c044f1b11ae8bc3ef7087a49cafe3dfff191163c6641a74b5 +PKG_SOURCE_DATE:=2020-09-08 +PKG_SOURCE_VERSION:=d7b614a86b815da711b5fecb10687297a70d859e +PKG_MIRROR_HASH:=266bab9e9fecb3ad86b4cea3303765c35d8b4db00274565368f69de0fa6c05df PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 diff --git a/package/network/services/hostapd/Config.in b/package/network/services/hostapd/Config.in index b211877fb..8aa878d20 100644 --- a/package/network/services/hostapd/Config.in +++ b/package/network/services/hostapd/Config.in @@ -13,6 +13,7 @@ config WPA_RFKILL_SUPPORT PACKAGE_wpad-openssl || \ PACKAGE_wpad-wolfssl || \ PACKAGE_wpad-basic || \ + PACKAGE_wpad-basic-openssl || \ PACKAGE_wpad-basic-wolfssl || \ PACKAGE_wpad-mini || \ PACKAGE_wpad-mesh-openssl || \ @@ -33,6 +34,7 @@ config WPA_MSG_MIN_PRIORITY PACKAGE_wpad-openssl || \ PACKAGE_wpad-wolfssl || \ PACKAGE_wpad-basic || \ + PACKAGE_wpad-basic-openssl || \ PACKAGE_wpad-basic-wolfssl || \ PACKAGE_wpad-mini || \ PACKAGE_wpad-mesh-openssl || \ diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index 6966ebdb8..1e20b5620 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=hostapd -PKG_RELEASE:=11 +PKG_RELEASE:=17 PKG_SOURCE_URL:=http://w1.fi/hostap.git PKG_SOURCE_PROTO:=git @@ -68,9 +68,6 @@ CONFIG_VARIANT:=$(LOCAL_VARIANT) ifeq ($(LOCAL_VARIANT),mesh) CONFIG_VARIANT:=full endif -ifeq ($(LOCAL_VARIANT),hs20) - CONFIG_VARIANT:=full -endif include $(INCLUDE_DIR)/package.mk @@ -105,22 +102,24 @@ ifeq ($(SSL_VARIANT),openssl) DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_SAE=y TARGET_LDFLAGS += -lcrypto -lssl + ifeq ($(LOCAL_VARIANT),basic) + DRIVER_MAKEOPTS += CONFIG_OWE=y + endif ifeq ($(LOCAL_VARIANT),mesh) DRIVER_MAKEOPTS += CONFIG_AP=y CONFIG_MESH=y endif ifeq ($(LOCAL_VARIANT),full) DRIVER_MAKEOPTS += CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y endif - ifeq ($(LOCAL_VARIANT),hs20) - DRIVER_MAKEOPTS += CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y CONFIG_DPP=y CONFIG_HS20=y CONFIG_INTERWORKING=y - endif - endif ifeq ($(SSL_VARIANT),wolfssl) DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_SAE=y TARGET_LDFLAGS += -lwolfssl + ifeq ($(LOCAL_VARIANT),basic) + DRIVER_MAKEOPTS += CONFIG_OWE=y + endif ifeq ($(LOCAL_VARIANT),mesh) DRIVER_MAKEOPTS += CONFIG_AP=y CONFIG_MESH=y CONFIG_WPS_NFC=1 endif @@ -175,15 +174,6 @@ endef Package/hostapd-openssl/description = $(Package/hostapd/description) -define Package/hostapd-hs20 -$(call Package/hostapd/Default,$(1)) - TITLE+= (OpenSSL with Hotspot 2.0) - VARIANT:=hs20-openssl - DEPENDS+=+libopenssl -endef - -Package/hostapd-hs20/description = $(Package/hostapd/description) - define Package/hostapd-wolfssl $(call Package/hostapd/Default,$(1)) TITLE+= (wolfSSL full) @@ -203,6 +193,28 @@ define Package/hostapd-basic/description This package contains a basic IEEE 802.1x/WPA Authenticator with WPA-PSK, 802.11r and 802.11w support. endef +define Package/hostapd-basic-openssl +$(call Package/hostapd/Default,$(1)) + TITLE+= (WPA-PSK, 11r and 11w) + VARIANT:=basic-openssl + DEPENDS+=+libopenssl +endef + +define Package/hostapd-basic-openssl/description + This package contains a basic IEEE 802.1x/WPA Authenticator with WPA-PSK, 802.11r and 802.11w support. +endef + +define Package/hostapd-basic-wolfssl +$(call Package/hostapd/Default,$(1)) + TITLE+= (WPA-PSK, 11r and 11w) + VARIANT:=basic-wolfssl + DEPENDS+=+libwolfssl +endef + +define Package/hostapd-basic-wolfssl/description + This package contains a basic IEEE 802.1x/WPA Authenticator with WPA-PSK, 802.11r and 802.11w support. +endef + define Package/hostapd-mini $(call Package/hostapd/Default,$(1)) TITLE+= (WPA-PSK only) @@ -266,6 +278,17 @@ define Package/wpad-basic/description This package contains a basic IEEE 802.1x/WPA Authenticator and Supplicant with WPA-PSK, 802.11r and 802.11w support. endef +define Package/wpad-basic-openssl +$(call Package/wpad/Default,$(1)) + TITLE+= (OpenSSL, 11r, 11w) + VARIANT:=wpad-basic-openssl + DEPENDS+=+libopenssl +endef + +define Package/wpad-basic-openssl/description + This package contains a basic IEEE 802.1x/WPA Authenticator and Supplicant with WPA-PSK, SAE (WPA3-Personal), 802.11r and 802.11w support. +endef + define Package/wpad-basic-wolfssl $(call Package/wpad/Default,$(1)) TITLE+= (wolfSSL, 11r, 11w) @@ -585,7 +608,8 @@ define Package/hostapd/install $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd $(1)/usr/sbin/ endef Package/hostapd-basic/install = $(Package/hostapd/install) -Package/hostapd-hs20/install = $(Package/hostapd/install) +Package/hostapd-basic-openssl/install = $(Package/hostapd/install) +Package/hostapd-basic-wolfssl/install = $(Package/hostapd/install) Package/hostapd-mini/install = $(Package/hostapd/install) Package/hostapd-openssl/install = $(Package/hostapd/install) Package/hostapd-wolfssl/install = $(Package/hostapd/install) @@ -605,6 +629,7 @@ define Package/wpad/install $(LN) wpad $(1)/usr/sbin/wpa_supplicant endef Package/wpad-basic/install = $(Package/wpad/install) +Package/wpad-basic-openssl/install = $(Package/wpad/install) Package/wpad-basic-wolfssl/install = $(Package/wpad/install) Package/wpad-mini/install = $(Package/wpad/install) Package/wpad-openssl/install = $(Package/wpad/install) @@ -654,7 +679,8 @@ endif $(eval $(call BuildPackage,hostapd)) $(eval $(call BuildPackage,hostapd-basic)) -$(eval $(call BuildPackage,hostapd-hs20)) +$(eval $(call BuildPackage,hostapd-basic-openssl)) +$(eval $(call BuildPackage,hostapd-basic-wolfssl)) $(eval $(call BuildPackage,hostapd-mini)) $(eval $(call BuildPackage,hostapd-openssl)) $(eval $(call BuildPackage,hostapd-wolfssl)) @@ -662,6 +688,7 @@ $(eval $(call BuildPackage,wpad)) $(eval $(call BuildPackage,wpad-mesh-openssl)) $(eval $(call BuildPackage,wpad-mesh-wolfssl)) $(eval $(call BuildPackage,wpad-basic)) +$(eval $(call BuildPackage,wpad-basic-openssl)) $(eval $(call BuildPackage,wpad-basic-wolfssl)) $(eval $(call BuildPackage,wpad-mini)) $(eval $(call BuildPackage,wpad-openssl)) diff --git a/package/network/services/hostapd/files/hostapd-basic.config b/package/network/services/hostapd/files/hostapd-basic.config index 19ea850f6..947e2fa20 100644 --- a/package/network/services/hostapd/files/hostapd-basic.config +++ b/package/network/services/hostapd/files/hostapd-basic.config @@ -268,7 +268,7 @@ CONFIG_GETRANDOM=y #CONFIG_ELOOP_POLL=y # Should we use epoll instead of select? Select is used by default. -#CONFIG_ELOOP_EPOLL=y +CONFIG_ELOOP_EPOLL=y # Should we use kqueue instead of select? Select is used by default. #CONFIG_ELOOP_KQUEUE=y diff --git a/package/network/services/hostapd/files/hostapd-full.config b/package/network/services/hostapd/files/hostapd-full.config index ab9d13aae..df272e443 100644 --- a/package/network/services/hostapd/files/hostapd-full.config +++ b/package/network/services/hostapd/files/hostapd-full.config @@ -268,7 +268,7 @@ CONFIG_GETRANDOM=y #CONFIG_ELOOP_POLL=y # Should we use epoll instead of select? Select is used by default. -#CONFIG_ELOOP_EPOLL=y +CONFIG_ELOOP_EPOLL=y # Should we use kqueue instead of select? Select is used by default. #CONFIG_ELOOP_KQUEUE=y @@ -313,7 +313,7 @@ CONFIG_INTERNAL_LIBTOMMATH=y # Interworking (IEEE 802.11u) # This can be used to enable functionality to improve interworking with # external networks. -#CONFIG_INTERWORKING=y +CONFIG_INTERWORKING=y # Hotspot 2.0 #CONFIG_HS20=y diff --git a/package/network/services/hostapd/files/hostapd-mini.config b/package/network/services/hostapd/files/hostapd-mini.config index d9511441e..b3050f7bb 100644 --- a/package/network/services/hostapd/files/hostapd-mini.config +++ b/package/network/services/hostapd/files/hostapd-mini.config @@ -268,7 +268,7 @@ CONFIG_GETRANDOM=y #CONFIG_ELOOP_POLL=y # Should we use epoll instead of select? Select is used by default. -#CONFIG_ELOOP_EPOLL=y +CONFIG_ELOOP_EPOLL=y # Should we use kqueue instead of select? Select is used by default. #CONFIG_ELOOP_KQUEUE=y diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index c2ecd2767..3c9a5023f 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -103,6 +103,8 @@ hostapd_common_add_device_config() { config_add_string acs_chan_bias config_add_array hostapd_options + config_add_int airtime_mode + hostapd_add_log_config } @@ -241,12 +243,15 @@ hostapd_common_add_bss_config() { config_add_string wps_device_type wps_device_name wps_manufacturer wps_pin config_add_string multi_ap_backhaul_ssid multi_ap_backhaul_key - config_add_boolean ieee80211v wnm_sleep_mode bss_transition + config_add_boolean wnm_sleep_mode bss_transition config_add_int time_advertisement config_add_string time_zone config_add_boolean ieee80211k rrm_neighbor_report rrm_beacon_report + config_add_boolean ftm_responder stationary_ap + config_add_string lci civic + config_add_boolean ieee80211r pmk_r1_push ft_psk_generate_local ft_over_ds config_add_int r0_key_lifetime reassociation_deadline config_add_string mobility_domain r1_key_holder @@ -268,6 +273,13 @@ hostapd_common_add_bss_config() { config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string' + config_add_boolean iw_enabled iw_internet iw_asra iw_esr iw_uesa + config_add_int iw_access_network_type iw_venue_group iw_venue_type + config_add_int iw_ipaddr_type_availability iw_gas_address3 + config_add_string iw_hessid iw_network_auth_type iw_qos_map_set + config_add_array iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm + config_add_array iw_anqp_elem + config_add_boolean hs20 disable_dgaf osen config_add_int anqp_domain_id config_add_int hs20_deauth_req_timeout @@ -277,6 +289,7 @@ hostapd_common_add_bss_config() { config_add_array hs20_conn_capab config_add_string osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp + config_add_array airtime_sta_weight config_add_int airtime_bss_weight airtime_bss_limit } @@ -313,6 +326,34 @@ hostapd_set_psk() { for_each_station hostapd_set_psk_file ${ifname} } +append_iw_roaming_consortium() { + [ -n "$1" ] && append bss_conf "roaming_consortium=$1" "$N" +} + +append_iw_domain_name() { + if [ -z "$iw_domain_name_conf" ]; then + iw_domain_name_conf="$1" + else + iw_domain_name_conf="$iw_domain_name_conf,$1" + fi +} + +append_iw_anqp_3gpp_cell_net() { + if [ -z "$iw_anqp_3gpp_cell_net_conf" ]; then + iw_anqp_3gpp_cell_net_conf="$1" + else + iw_anqp_3gpp_cell_net_conf="$iw_anqp_3gpp_cell_net_conf:$1" + fi +} + +append_iw_anqp_elem() { + [ -n "$1" ] && append bss_conf "anqp_elem=$1" "$N" +} + +append_iw_nai_realm() { + [ -n "$1" ] && append bss_conf "nai_realm=$1" "$N" +} + append_hs20_oper_friendly_name() { append bss_conf "hs20_oper_friendly_name=$1" "$N" } @@ -373,6 +414,10 @@ append_hs20_conn_capab() { [ -n "$1" ] && append bss_conf "hs20_conn_capab=$1" "$N" } +append_airtime_sta_weight() { + [ -n "$1" ] && append bss_conf "airtime_sta_weight=$1" "$N" +} + hostapd_set_bss_options() { local var="$1" local phy="$2" @@ -394,7 +439,7 @@ hostapd_set_bss_options() { acct_server acct_secret acct_port acct_interval \ bss_load_update_period chan_util_avg_period sae_require_mfp \ multi_ap multi_ap_backhaul_ssid multi_ap_backhaul_key \ - airtime_bss_weight airtime_bss_limit + airtime_bss_weight airtime_bss_limit airtime_sta_weight set_default isolate 0 set_default maxassoc 0 @@ -428,6 +473,7 @@ hostapd_set_bss_options() { [ "$airtime_bss_weight" -gt 0 ] && append bss_conf "airtime_bss_weight=$airtime_bss_weight" "$N" [ "$airtime_bss_limit" -gt 0 ] && append bss_conf "airtime_bss_limit=$airtime_bss_limit" "$N" + json_for_each_item append_airtime_sta_weight airtime_sta_weight append bss_conf "bss_load_update_period=$bss_load_update_period" "$N" append bss_conf "chan_util_avg_period=$chan_util_avg_period" "$N" @@ -612,30 +658,38 @@ hostapd_set_bss_options() { append bss_conf "iapp_interface=$ifname" "$N" } - json_get_vars ieee80211v - set_default ieee80211v 0 - if [ "$ieee80211v" -eq "1" ]; then - json_get_vars time_advertisement time_zone wnm_sleep_mode bss_transition + json_get_vars time_advertisement time_zone wnm_sleep_mode bss_transition + set_default bss_transition 0 + set_default wnm_sleep_mode 0 - set_default time_advertisement 0 - set_default wnm_sleep_mode 0 - set_default bss_transition 0 + [ -n "$time_advertisement" ] && append bss_conf "time_advertisement=$time_advertisement" "$N" + [ -n "$time_zone" ] && append bss_conf "time_zone=$time_zone" "$N" + [ "$wnm_sleep_mode" -eq "1" ] && append bss_conf "wnm_sleep_mode=1" "$N" + [ "$bss_transition" -eq "1" ] && append bss_conf "bss_transition=1" "$N" - append bss_conf "time_advertisement=$time_advertisement" "$N" - [ -n "$time_zone" ] && append bss_conf "time_zone=$time_zone" "$N" - append bss_conf "wnm_sleep_mode=$wnm_sleep_mode" "$N" - append bss_conf "bss_transition=$bss_transition" "$N" - fi - - json_get_vars ieee80211k + json_get_vars ieee80211k rrm_neighbor_report rrm_beacon_report set_default ieee80211k 0 if [ "$ieee80211k" -eq "1" ]; then - json_get_vars rrm_neighbor_report rrm_beacon_report - set_default rrm_neighbor_report 1 set_default rrm_beacon_report 1 - append bss_conf "rrm_neighbor_report=$rrm_neighbor_report" "$N" - append bss_conf "rrm_beacon_report=$rrm_beacon_report" "$N" + else + set_default rrm_neighbor_report 0 + set_default rrm_beacon_report 0 + fi + + [ "$rrm_neighbor_report" -eq "1" ] && append bss_conf "rrm_neighbor_report=1" "$N" + [ "$rrm_beacon_report" -eq "1" ] && append bss_conf "rrm_beacon_report=1" "$N" + + json_get_vars ftm_responder stationary_ap lci civic + set_default ftm_responder 0 + if [ "$ftm_responder" -eq "1" ]; then + set_default stationary_ap 0 + iw phy "$phy" info | grep -q "ENABLE_FTM_RESPONDER" && { + append bss_conf "ftm_responder=1" "$N" + [ "$stationary_ap" -eq "1" ] && append bss_conf "stationary_ap=1" "$N" + [ -n "$lci" ] && append bss_conf "lci=$lci" "$N" + [ -n "$civic" ] && append bss_conf "lci=$civic" "$N" + } fi if [ "$wpa" -ge "1" ]; then @@ -772,6 +826,51 @@ hostapd_set_bss_options() { } } + json_get_vars iw_enabled iw_internet iw_asra iw_esr iw_uesa iw_access_network_type + json_get_vars iw_hessid iw_venue_group iw_venue_type iw_network_auth_type + json_get_vars iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm + json_get_vars iw_anqp_elem iw_qos_map_set iw_ipaddr_type_availability iw_gas_address3 + + set_default iw_enabled 0 + if [ "$iw_enabled" = "1" ]; then + append bss_conf "interworking=1" "$N" + set_default iw_internet 1 + set_default iw_asra 0 + set_default iw_esr 0 + set_default iw_uesa 0 + + append bss_conf "internet=$iw_internet" "$N" + append bss_conf "asra=$iw_asra" "$N" + append bss_conf "esr=$iw_esr" "$N" + append bss_conf "uesa=$iw_uesa" "$N" + + [ -n "$iw_access_network_type" ] && \ + append bss_conf "access_network_type=$iw_access_network_type" "$N" + [ -n "$iw_hessid" ] && append bss_conf "hessid=$iw_hessid" "$N" + [ -n "$iw_venue_group" ] && \ + append bss_conf "venue_group=$iw_venue_group" "$N" + [ -n "$iw_venue_type" ] && append bss_conf "venue_type=$iw_venue_type" "$N" + [ -n "$iw_network_auth_type" ] && \ + append bss_conf "network_auth_type=$iw_network_auth_type" "$N" + [ -n "$iw_gas_address3" ] && append bss_conf "gas_address3=$iw_gas_address3" "$N" + [ -n "$iw_qos_map_set" ] && append bss_conf "qos_map_set=$iw_qos_map_set" "$N" + + json_for_each_item append_iw_roaming_consortium iw_roaming_consortium + json_for_each_item append_iw_anqp_elem iw_anqp_elem + json_for_each_item append_iw_nai_realm iw_nai_realm + + iw_domain_name_conf= + json_for_each_item append_iw_domain_name iw_domain_name + [ -n "$iw_domain_name_conf" ] && \ + append bss_conf "domain_name=$iw_domain_name_conf" "$N" + + iw_anqp_3gpp_cell_net_conf= + json_for_each_item append_iw_anqp_3gpp_cell_net iw_anqp_3gpp_cell_net + [ -n "$iw_anqp_3gpp_cell_net_conf" ] && \ + append bss_conf "anqp_3gpp_cell_net=$iw_anqp_3gpp_cell_net_conf" "$N" + fi + + local hs20 disable_dgaf osen anqp_domain_id hs20_deauth_req_timeout \ osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp json_get_vars hs20 disable_dgaf osen anqp_domain_id hs20_deauth_req_timeout \ diff --git a/package/network/services/hostapd/files/wpa_supplicant-basic.config b/package/network/services/hostapd/files/wpa_supplicant-basic.config index db3f7c7a1..c550b37b2 100644 --- a/package/network/services/hostapd/files/wpa_supplicant-basic.config +++ b/package/network/services/hostapd/files/wpa_supplicant-basic.config @@ -290,7 +290,7 @@ CONFIG_NO_CONFIG_WRITE=y #CONFIG_ELOOP_POLL=y # Should we use epoll instead of select? Select is used by default. -#CONFIG_ELOOP_EPOLL=y +CONFIG_ELOOP_EPOLL=y # Should we use kqueue instead of select? Select is used by default. #CONFIG_ELOOP_KQUEUE=y diff --git a/package/network/services/hostapd/files/wpa_supplicant-full.config b/package/network/services/hostapd/files/wpa_supplicant-full.config index 982f4d553..b3e85d073 100644 --- a/package/network/services/hostapd/files/wpa_supplicant-full.config +++ b/package/network/services/hostapd/files/wpa_supplicant-full.config @@ -290,7 +290,7 @@ CONFIG_BACKEND=file #CONFIG_ELOOP_POLL=y # Should we use epoll instead of select? Select is used by default. -#CONFIG_ELOOP_EPOLL=y +CONFIG_ELOOP_EPOLL=y # Should we use kqueue instead of select? Select is used by default. #CONFIG_ELOOP_KQUEUE=y @@ -490,10 +490,10 @@ CONFIG_WNM=y # This can be used to enable functionality to improve interworking with # external networks (GAS/ANQP to learn more about the networks and network # selection based on available credentials). -#CONFIG_INTERWORKING=y +CONFIG_INTERWORKING=y # Hotspot 2.0 -#CONFIG_HS20=y +CONFIG_HS20=y # Enable interface matching in wpa_supplicant #CONFIG_MATCH_IFACE=y diff --git a/package/network/services/hostapd/files/wpa_supplicant-mini.config b/package/network/services/hostapd/files/wpa_supplicant-mini.config index c1e0141ed..9eb1111e5 100644 --- a/package/network/services/hostapd/files/wpa_supplicant-mini.config +++ b/package/network/services/hostapd/files/wpa_supplicant-mini.config @@ -290,7 +290,7 @@ CONFIG_NO_CONFIG_WRITE=y #CONFIG_ELOOP_POLL=y # Should we use epoll instead of select? Select is used by default. -#CONFIG_ELOOP_EPOLL=y +CONFIG_ELOOP_EPOLL=y # Should we use kqueue instead of select? Select is used by default. #CONFIG_ELOOP_KQUEUE=y diff --git a/package/network/services/hostapd/files/wpa_supplicant-p2p.config b/package/network/services/hostapd/files/wpa_supplicant-p2p.config index 515604828..b00847a25 100644 --- a/package/network/services/hostapd/files/wpa_supplicant-p2p.config +++ b/package/network/services/hostapd/files/wpa_supplicant-p2p.config @@ -290,7 +290,7 @@ CONFIG_BACKEND=file #CONFIG_ELOOP_POLL=y # Should we use epoll instead of select? Select is used by default. -#CONFIG_ELOOP_EPOLL=y +CONFIG_ELOOP_EPOLL=y # Should we use kqueue instead of select? Select is used by default. #CONFIG_ELOOP_KQUEUE=y diff --git a/package/network/services/hostapd/patches/800-dfs-enter-DFS-state-if-no-available-channel-is-found.patch b/package/network/services/hostapd/patches/800-dfs-enter-DFS-state-if-no-available-channel-is-found.patch index e2db99eee..3e4638d7f 100644 --- a/package/network/services/hostapd/patches/800-dfs-enter-DFS-state-if-no-available-channel-is-found.patch +++ b/package/network/services/hostapd/patches/800-dfs-enter-DFS-state-if-no-available-channel-is-found.patch @@ -17,7 +17,7 @@ Signed-off-by: David Bauer --- a/src/ap/dfs.c +++ b/src/ap/dfs.c -@@ -1066,8 +1066,15 @@ static int hostapd_dfs_start_channel_swi +@@ -1086,8 +1086,15 @@ static int hostapd_dfs_start_channel_swi &oper_centr_freq_seg0_idx, &oper_centr_freq_seg1_idx, &skip_radar); diff --git a/package/network/services/hostapd/src/src/ap/ubus.c b/package/network/services/hostapd/src/src/ap/ubus.c index d816f2c03..8546d2ce6 100644 --- a/package/network/services/hostapd/src/src/ap/ubus.c +++ b/package/network/services/hostapd/src/src/ap/ubus.c @@ -206,12 +206,82 @@ hostapd_bss_reload(struct ubus_context *ctx, struct ubus_object *obj, return ret; } + +static void +hostapd_parse_vht_map_blobmsg(uint16_t map) +{ + char label[4]; + int16_t val; + int i; + + for (i = 0; i < 8; i++) { + snprintf(label, 4, "%dss", i + 1); + + val = (map & (BIT(1) | BIT(0))) + 7; + blobmsg_add_u16(&b, label, val == 10 ? -1 : val); + map = map >> 2; + } +} + +static void +hostapd_parse_vht_capab_blobmsg(struct ieee80211_vht_capabilities *vhtc) +{ + void *supported_mcs; + void *map; + int i; + + static const struct { + const char *name; + uint32_t flag; + } vht_capas[] = { + { "su_beamformee", VHT_CAP_SU_BEAMFORMEE_CAPABLE }, + { "mu_beamformee", VHT_CAP_MU_BEAMFORMEE_CAPABLE }, + }; + + for (i = 0; i < ARRAY_SIZE(vht_capas); i++) + blobmsg_add_u8(&b, vht_capas[i].name, + !!(vhtc->vht_capabilities_info & vht_capas[i].flag)); + + supported_mcs = blobmsg_open_table(&b, "mcs_map"); + + /* RX map */ + map = blobmsg_open_table(&b, "rx"); + hostapd_parse_vht_map_blobmsg(le_to_host16(vhtc->vht_supported_mcs_set.rx_map)); + blobmsg_close_table(&b, map); + + /* TX map */ + map = blobmsg_open_table(&b, "tx"); + hostapd_parse_vht_map_blobmsg(le_to_host16(vhtc->vht_supported_mcs_set.tx_map)); + blobmsg_close_table(&b, map); + + blobmsg_close_table(&b, supported_mcs); +} + +static void +hostapd_parse_capab_blobmsg(struct sta_info *sta) +{ + void *r, *v; + + v = blobmsg_open_table(&b, "capabilities"); + + if (sta->vht_capabilities) { + r = blobmsg_open_table(&b, "vht"); + hostapd_parse_vht_capab_blobmsg(sta->vht_capabilities); + blobmsg_close_table(&b, r); + } + + /* ToDo: Add HT / HE capability parsing */ + + blobmsg_close_table(&b, v); +} + static int hostapd_bss_get_clients(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj); + struct hostap_sta_driver_data sta_driver_data; struct sta_info *sta; void *list, *c; char mac_buf[20]; @@ -254,6 +324,31 @@ hostapd_bss_get_clients(struct ubus_context *ctx, struct ubus_object *obj, if (retrieve_sta_taxonomy(hapd, sta, r, 1024) > 0) blobmsg_add_string_buffer(&b); #endif + + /* Driver information */ + if (hostapd_drv_read_sta_data(hapd, &sta_driver_data, sta->addr) >= 0) { + r = blobmsg_open_table(&b, "bytes"); + blobmsg_add_u64(&b, "rx", sta_driver_data.rx_bytes); + blobmsg_add_u64(&b, "tx", sta_driver_data.tx_bytes); + blobmsg_close_table(&b, r); + r = blobmsg_open_table(&b, "airtime"); + blobmsg_add_u64(&b, "rx", sta_driver_data.rx_airtime); + blobmsg_add_u64(&b, "tx", sta_driver_data.tx_airtime); + blobmsg_close_table(&b, r); + r = blobmsg_open_table(&b, "packets"); + blobmsg_add_u32(&b, "rx", sta_driver_data.rx_packets); + blobmsg_add_u32(&b, "tx", sta_driver_data.tx_packets); + blobmsg_close_table(&b, r); + r = blobmsg_open_table(&b, "rate"); + /* Rate in kbits */ + blobmsg_add_u32(&b, "rx", sta_driver_data.current_rx_rate * 100); + blobmsg_add_u32(&b, "tx", sta_driver_data.current_tx_rate * 100); + blobmsg_close_table(&b, r); + blobmsg_add_u32(&b, "signal", sta_driver_data.signal); + } + + hostapd_parse_capab_blobmsg(sta); + blobmsg_close_table(&b, c); } blobmsg_close_array(&b, list); @@ -277,6 +372,45 @@ hostapd_bss_get_features(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +static int +hostapd_bss_get_status(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj); + void *airtime_table, *dfs_table; + struct os_reltime now; + char phy_name[17]; + char mac_buf[20]; + + blob_buf_init(&b, 0); + blobmsg_add_string(&b, "status", hostapd_state_text(hapd->iface->state)); + blobmsg_add_u32(&b, "freq", hapd->iface->freq); + + snprintf(phy_name, 17, "%s", hapd->iface->phy); + blobmsg_add_string(&b, "phy", phy_name); + + /* Airtime */ + airtime_table = blobmsg_open_table(&b, "airtime"); + blobmsg_add_u64(&b, "time", hapd->iface->last_channel_time); + blobmsg_add_u64(&b, "time_busy", hapd->iface->last_channel_time_busy); + blobmsg_add_u16(&b, "utilization", hapd->iface->channel_utilization); + blobmsg_close_table(&b, airtime_table); + + /* DFS */ + dfs_table = blobmsg_open_table(&b, "dfs"); + blobmsg_add_u32(&b, "cac_seconds", hapd->iface->dfs_cac_ms / 1000); + blobmsg_add_u8(&b, "cac_active", !!(hapd->iface->cac_started)); + os_reltime_age(&hapd->iface->dfs_cac_start, &now); + blobmsg_add_u32(&b, "cac_seconds_left", + hapd->iface->cac_started ? hapd->iface->dfs_cac_ms / 1000 - now.sec : 0); + blobmsg_close_table(&b, dfs_table); + + ubus_send_reply(ctx, req, b.head); + + return 0; +} + enum { NOTIFY_RESPONSE, __NOTIFY_MAX @@ -395,6 +529,7 @@ hostapd_bss_list_bans(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +#ifdef CONFIG_WPS static int hostapd_bss_wps_start(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, @@ -411,6 +546,53 @@ hostapd_bss_wps_start(struct ubus_context *ctx, struct ubus_object *obj, return 0; } + +static const char * pbc_status_enum_str(enum pbc_status status) +{ + switch (status) { + case WPS_PBC_STATUS_DISABLE: + return "Disabled"; + case WPS_PBC_STATUS_ACTIVE: + return "Active"; + case WPS_PBC_STATUS_TIMEOUT: + return "Timed-out"; + case WPS_PBC_STATUS_OVERLAP: + return "Overlap"; + default: + return "Unknown"; + } +} + +static int +hostapd_bss_wps_status(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + int rc; + struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj); + + blob_buf_init(&b, 0); + + blobmsg_add_string(&b, "pbc_status", pbc_status_enum_str(hapd->wps_stats.pbc_status)); + blobmsg_add_string(&b, "last_wps_result", + (hapd->wps_stats.status == WPS_STATUS_SUCCESS ? + "Success": + (hapd->wps_stats.status == WPS_STATUS_FAILURE ? + "Failed" : "None"))); + + /* If status == Failure - Add possible Reasons */ + if(hapd->wps_stats.status == WPS_STATUS_FAILURE && + hapd->wps_stats.failure_reason > 0) + blobmsg_add_string(&b, "reason", wps_ei_str(hapd->wps_stats.failure_reason)); + + if (hapd->wps_stats.status) + blobmsg_printf(&b, "peer_address", MACSTR, MAC2STR(hapd->wps_stats.peer_addr)); + + ubus_send_reply(ctx, req, b.head); + + return 0; +} + static int hostapd_bss_wps_cancel(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, @@ -426,6 +608,7 @@ hostapd_bss_wps_cancel(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +#endif /* CONFIG_WPS */ static int hostapd_bss_update_beacon(struct ubus_context *ctx, struct ubus_object *obj, @@ -1087,7 +1270,7 @@ hostapd_wnm_disassoc_imminent(struct ubus_context *ctx, struct ubus_object *obj, if (tb[WNM_DISASSOC_ABRIDGED] && blobmsg_get_bool(tb[WNM_DISASSOC_ABRIDGED])) req_mode |= WNM_BSS_TM_REQ_ABRIDGED; - if (wnm_send_bss_tm_req(hapd, sta, req_mode, duration, 0, NULL, + if (wnm_send_bss_tm_req(hapd, sta, req_mode, duration, duration, NULL, NULL, nr, nr_len, NULL, 0)) return UBUS_STATUS_UNKNOWN_ERROR; @@ -1098,10 +1281,14 @@ hostapd_wnm_disassoc_imminent(struct ubus_context *ctx, struct ubus_object *obj, static const struct ubus_method bss_methods[] = { UBUS_METHOD_NOARG("reload", hostapd_bss_reload), UBUS_METHOD_NOARG("get_clients", hostapd_bss_get_clients), + UBUS_METHOD_NOARG("get_status", hostapd_bss_get_status), UBUS_METHOD("del_client", hostapd_bss_del_client, del_policy), UBUS_METHOD_NOARG("list_bans", hostapd_bss_list_bans), +#ifdef CONFIG_WPS UBUS_METHOD_NOARG("wps_start", hostapd_bss_wps_start), + UBUS_METHOD_NOARG("wps_status", hostapd_bss_wps_status), UBUS_METHOD_NOARG("wps_cancel", hostapd_bss_wps_cancel), +#endif UBUS_METHOD_NOARG("update_beacon", hostapd_bss_update_beacon), UBUS_METHOD_NOARG("get_features", hostapd_bss_get_features), #ifdef NEED_AP_MLME diff --git a/package/network/services/hostapd/src/src/utils/build_features.h b/package/network/services/hostapd/src/src/utils/build_features.h index 9856756d9..7ca65fa39 100644 --- a/package/network/services/hostapd/src/src/utils/build_features.h +++ b/package/network/services/hostapd/src/src/utils/build_features.h @@ -50,6 +50,10 @@ static inline int has_feature(const char *feat) #ifdef CONFIG_HS20 if (!strcmp(feat, "hs20")) return 1; +#endif +#ifdef CONFIG_WPS + if (!strcmp(feat, "wps")) + return 1; #endif return 0; } diff --git a/package/network/utils/iw/Makefile b/package/network/utils/iw/Makefile index 7abf93e01..90e678291 100644 --- a/package/network/utils/iw/Makefile +++ b/package/network/utils/iw/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=iw -PKG_VERSION:=5.4 +PKG_VERSION:=5.8 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/software/network/iw -PKG_HASH:=a2469f677088d7b1070a7fbb28f3c747041697e8f6ec70783339cb1bc27a395f +PKG_HASH:=b59c4bacb0b6675cc09f2f30ebdceb91174cb65443d0a062fba2c09fad772db4 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 diff --git a/package/network/utils/iw/patches/001-nl80211_h_sync.patch b/package/network/utils/iw/patches/001-nl80211_h_sync.patch index d935a1dc3..4b462d3f2 100644 --- a/package/network/utils/iw/patches/001-nl80211_h_sync.patch +++ b/package/network/utils/iw/patches/001-nl80211_h_sync.patch @@ -1,696 +1,21 @@ --- a/nl80211.h +++ b/nl80211.h -@@ -11,7 +11,7 @@ - * Copyright 2008 Jouni Malinen - * Copyright 2008 Colin McCabe - * Copyright 2015-2017 Intel Deutschland GmbH -- * Copyright (C) 2018-2019 Intel Corporation -+ * Copyright (C) 2018-2020 Intel Corporation +@@ -2515,6 +2515,9 @@ enum nl80211_commands { + * @NL80211_ATTR_HE_6GHZ_CAPABILITY: HE 6 GHz Band Capability element (from + * association request when used with NL80211_CMD_NEW_STATION). * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above -@@ -249,6 +249,45 @@ - */ - - /** -+ * DOC: VLAN offload support for setting group keys and binding STAs to VLANs -+ * -+ * By setting @NL80211_EXT_FEATURE_VLAN_OFFLOAD flag drivers can indicate they -+ * support offloading VLAN functionality in a manner where the driver exposes a -+ * single netdev that uses VLAN tagged frames and separate VLAN-specific netdevs -+ * can then be added using RTM_NEWLINK/IFLA_VLAN_ID similarly to the Ethernet -+ * case. Frames received from stations that are not assigned to any VLAN are -+ * delivered on the main netdev and frames to such stations can be sent through -+ * that main netdev. -+ * -+ * %NL80211_CMD_NEW_KEY (for group keys), %NL80211_CMD_NEW_STATION, and -+ * %NL80211_CMD_SET_STATION will optionally specify vlan_id using -+ * %NL80211_ATTR_VLAN_ID. -+ */ -+ -+/** -+ * DOC: TID configuration -+ * -+ * TID config support can be checked in the %NL80211_ATTR_TID_CONFIG -+ * attribute given in wiphy capabilities. -+ * -+ * The necessary configuration parameters are mentioned in -+ * &enum nl80211_tid_config_attr and it will be passed to the -+ * %NL80211_CMD_SET_TID_CONFIG command in %NL80211_ATTR_TID_CONFIG. -+ * -+ * If the configuration needs to be applied for specific peer then the MAC -+ * address of the peer needs to be passed in %NL80211_ATTR_MAC, otherwise the -+ * configuration will be applied for all the connected peers in the vif except -+ * any peers that have peer specific configuration for the TID by default; if -+ * the %NL80211_TID_CONFIG_ATTR_OVERRIDE flag is set, peer specific values -+ * will be overwritten. -+ * -+ * All this configuration is valid only for STA's current connection -+ * i.e. the configuration will be reset to default when the STA connects back -+ * after disconnection/roaming, and this configuration will be cleared when -+ * the interface goes down. -+ */ -+ -+/** - * enum nl80211_commands - supported nl80211 commands - * - * @NL80211_CMD_UNSPEC: unspecified command to catch errors -@@ -257,13 +296,14 @@ - * to get a list of all present wiphys. - * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or - * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, -- * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ (and the -- * attributes determining the channel width; this is used for setting -- * monitor mode channel), %NL80211_ATTR_WIPHY_RETRY_SHORT, -- * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, -- * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. -- * However, for setting the channel, see %NL80211_CMD_SET_CHANNEL -- * instead, the support here is for backward compatibility only. -+ * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, -+ * %NL80211_ATTR_WIPHY_FREQ_OFFSET (and the attributes determining the -+ * channel width; this is used for setting monitor mode channel), -+ * %NL80211_ATTR_WIPHY_RETRY_SHORT, %NL80211_ATTR_WIPHY_RETRY_LONG, -+ * %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, and/or -+ * %NL80211_ATTR_WIPHY_RTS_THRESHOLD. However, for setting the channel, -+ * see %NL80211_CMD_SET_CHANNEL instead, the support here is for backward -+ * compatibility only. - * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request - * or rename notification. Has attributes %NL80211_ATTR_WIPHY and - * %NL80211_ATTR_WIPHY_NAME. -@@ -312,7 +352,8 @@ - * %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT, - * %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS. - * The channel to use can be set on the interface or be given using the -- * %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel width. -+ * %NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_WIPHY_FREQ_OFFSET, and the -+ * attributes determining channel width. - * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP - * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface - * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP -@@ -497,11 +538,12 @@ - * interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and - * BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify - * the SSID (mainly for association, but is included in authentication -- * request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used -- * to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE -- * is used to specify the authentication type. %NL80211_ATTR_IE is used to -- * define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs) -- * to be added to the frame. -+ * request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ + -+ * %NL80211_ATTR_WIPHY_FREQ_OFFSET is used to specify the frequence of the -+ * channel in MHz. %NL80211_ATTR_AUTH_TYPE is used to specify the -+ * authentication type. %NL80211_ATTR_IE is used to define IEs -+ * (VendorSpecificInfo, but also including RSN IE and FT IEs) to be added -+ * to the frame. - * When used as an event, this reports reception of an Authentication - * frame in station and IBSS modes when the local MLME processed the - * frame, i.e., it was for the local STA and was received in correct -@@ -556,8 +598,9 @@ - * requests to connect to a specified network but without separating - * auth and assoc steps. For this, you need to specify the SSID in a - * %NL80211_ATTR_SSID attribute, and can optionally specify the association -- * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP, -- * %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT, -+ * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, -+ * %NL80211_ATTR_USE_MFP, %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, -+ * %NL80211_ATTR_WIPHY_FREQ_OFFSET, %NL80211_ATTR_CONTROL_PORT, - * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, - * %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, - * %NL80211_ATTR_CONTROL_PORT_OVER_NL80211, %NL80211_ATTR_MAC_HINT, and -@@ -571,6 +614,14 @@ - * set of BSSID,frequency parameters is used (i.e., either the enforcing - * %NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict - * %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT). -+ * Driver shall not modify the IEs specified through %NL80211_ATTR_IE if -+ * %NL80211_ATTR_MAC is included. However, if %NL80211_ATTR_MAC_HINT is -+ * included, these IEs through %NL80211_ATTR_IE are specified by the user -+ * space based on the best possible BSS selected. Thus, if the driver ends -+ * up selecting a different BSS, it can modify these IEs accordingly (e.g. -+ * userspace asks the driver to perform PMKSA caching with BSS1 and the -+ * driver ends up selecting BSS2 with different PMKSA cache entry; RSNIE -+ * has to get updated with the apt PMKID). - * %NL80211_ATTR_PREV_BSSID can be used to request a reassociation within - * the ESS in case the device is already associated and an association with - * a different BSS is desired. -@@ -640,6 +691,10 @@ - * four bytes for vendor frames including the OUI. The registration - * cannot be dropped, but is removed automatically when the netlink - * socket is closed. Multiple registrations can be made. -+ * The %NL80211_ATTR_RECEIVE_MULTICAST flag attribute can be given if -+ * %NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS is available, in which -+ * case the registration can also be modified to include/exclude the -+ * flag, rather than requiring unregistration to change it. - * @NL80211_CMD_REGISTER_ACTION: Alias for @NL80211_CMD_REGISTER_FRAME for - * backward compatibility - * @NL80211_CMD_FRAME: Management frame TX request and RX notification. This -@@ -739,7 +794,7 @@ - * various triggers. These triggers can be configured through this - * command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For - * more background information, see -- * http://wireless.kernel.org/en/users/Documentation/WoWLAN. -+ * https://wireless.wiki.kernel.org/en/users/Documentation/WoWLAN. - * The @NL80211_CMD_SET_WOWLAN command can also be used as a notification - * from the driver reporting the wakeup reason. In this case, the - * @NL80211_ATTR_WOWLAN_TRIGGERS attribute will contain the reason -@@ -1101,6 +1156,20 @@ - * peer MAC address and %NL80211_ATTR_FRAME is used to specify the frame - * content. The frame is ethernet data. - * -+ * @NL80211_CMD_SET_TID_CONFIG: Data frame TID specific configuration -+ * is passed using %NL80211_ATTR_TID_CONFIG attribute. -+ * -+ * @NL80211_CMD_UNPROT_BEACON: Unprotected or incorrectly protected Beacon -+ * frame. This event is used to indicate that a received Beacon frame was -+ * dropped because it did not include a valid MME MIC while beacon -+ * protection was enabled (BIGTK configured in station mode). -+ * -+ * @NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS: Report TX status of a control -+ * port frame transmitted with %NL80211_CMD_CONTROL_PORT_FRAME. -+ * %NL80211_ATTR_COOKIE identifies the TX command and %NL80211_ATTR_FRAME -+ * includes the contents of the frame. %NL80211_ATTR_ACK flag is included -+ * if the recipient acknowledged the frame. -+ * - * @NL80211_CMD_MAX: highest used command number - * @__NL80211_CMD_AFTER_LAST: internal use - */ -@@ -1325,6 +1394,12 @@ enum nl80211_commands { - - NL80211_CMD_PROBE_MESH_LINK, - -+ NL80211_CMD_SET_TID_CONFIG, -+ -+ NL80211_CMD_UNPROT_BEACON, -+ -+ NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS, -+ - /* add new commands above here */ - - /* used to define NL80211_CMD_MAX below */ -@@ -1370,7 +1445,8 @@ enum nl80211_commands { - * of &enum nl80211_chan_width, describing the channel width. See the - * documentation of the enum for more information. - * @NL80211_ATTR_CENTER_FREQ1: Center frequency of the first part of the -- * channel, used for anything but 20 MHz bandwidth -+ * channel, used for anything but 20 MHz bandwidth. In S1G this is the -+ * operating channel center frequency. - * @NL80211_ATTR_CENTER_FREQ2: Center frequency of the second part of the - * channel, used only for 80+80 MHz bandwidth - * @NL80211_ATTR_WIPHY_CHANNEL_TYPE: included with NL80211_ATTR_WIPHY_FREQ -@@ -1580,7 +1656,8 @@ enum nl80211_commands { - * flag is included, then control port frames are sent over NL80211 instead - * using %CMD_CONTROL_PORT_FRAME. If control port routing over NL80211 is - * to be used then userspace must also use the %NL80211_ATTR_SOCKET_OWNER -- * flag. -+ * flag. When used with %NL80211_ATTR_CONTROL_PORT_NO_PREAUTH, pre-auth -+ * frames are not forwared over the control port. - * - * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. - * We recommend using nested, driver-specific attributes within this. -@@ -2373,6 +2450,64 @@ enum nl80211_commands { - * the allowed channel bandwidth configurations. (u8 attribute) - * Defined by IEEE P802.11ay/D4.0 section 9.4.2.251, Table 13. - * -+ * @NL80211_ATTR_VLAN_ID: VLAN ID (1..4094) for the station and VLAN group key -+ * (u16). -+ * -+ * @NL80211_ATTR_HE_BSS_COLOR: nested attribute for BSS Color Settings. -+ * -+ * @NL80211_ATTR_IFTYPE_AKM_SUITES: nested array attribute, with each entry -+ * using attributes from &enum nl80211_iftype_akm_attributes. This -+ * attribute is sent in a response to %NL80211_CMD_GET_WIPHY indicating -+ * supported AKM suites capability per interface. AKMs advertised in -+ * %NL80211_ATTR_AKM_SUITES are default capabilities if AKM suites not -+ * advertised for a specific interface type. -+ * -+ * @NL80211_ATTR_TID_CONFIG: TID specific configuration in a -+ * nested attribute with &enum nl80211_tid_config_attr sub-attributes; -+ * on output (in wiphy attributes) it contains only the feature sub- -+ * attributes. -+ * -+ * @NL80211_ATTR_CONTROL_PORT_NO_PREAUTH: disable preauth frame rx on control -+ * port in order to forward/receive them as ordinary data frames. -+ * -+ * @NL80211_ATTR_PMK_LIFETIME: Maximum lifetime for PMKSA in seconds (u32, -+ * dot11RSNAConfigPMKReauthThreshold; 0 is not a valid value). -+ * An optional parameter configured through %NL80211_CMD_SET_PMKSA. -+ * Drivers that trigger roaming need to know the lifetime of the -+ * configured PMKSA for triggering the full vs. PMKSA caching based -+ * authentication. This timeout helps authentication methods like SAE, -+ * where PMK gets updated only by going through a full (new SAE) -+ * authentication instead of getting updated during an association for EAP -+ * authentication. No new full authentication within the PMK expiry shall -+ * result in a disassociation at the end of the lifetime. -+ * -+ * @NL80211_ATTR_PMK_REAUTH_THRESHOLD: Reauthentication threshold time, in -+ * terms of percentage of %NL80211_ATTR_PMK_LIFETIME -+ * (u8, dot11RSNAConfigPMKReauthThreshold, 1..100). This is an optional -+ * parameter configured through %NL80211_CMD_SET_PMKSA. Requests the -+ * driver to trigger a full authentication roam (without PMKSA caching) -+ * after the reauthentication threshold time, but before the PMK lifetime -+ * has expired. -+ * -+ * Authentication methods like SAE need to be able to generate a new PMKSA -+ * entry without having to force a disconnection after the PMK timeout. If -+ * no roaming occurs between the reauth threshold and PMK expiration, -+ * disassociation is still forced. -+ * @NL80211_ATTR_RECEIVE_MULTICAST: multicast flag for the -+ * %NL80211_CMD_REGISTER_FRAME command, see the description there. -+ * @NL80211_ATTR_WIPHY_FREQ_OFFSET: offset of the associated -+ * %NL80211_ATTR_WIPHY_FREQ in positive KHz. Only valid when supplied with -+ * an %NL80211_ATTR_WIPHY_FREQ_OFFSET. -+ * @NL80211_ATTR_CENTER_FREQ1_OFFSET: Center frequency offset in KHz for the -+ * first channel segment specified in %NL80211_ATTR_CENTER_FREQ1. -+ * @NL80211_ATTR_SCAN_FREQ_KHZ: nested attribute with KHz frequencies -+ * -+ * @NL80211_ATTR_HE_6GHZ_CAPABILITY: HE 6 GHz Band Capability element (from -+ * association request when used with NL80211_CMD_NEW_STATION). -+ * + * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce + * transmit power to stay within regulatory limits. u32, dBi. + * * @NUM_NL80211_ATTR: total number of nl80211_attrs available * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use -@@ -2835,6 +2970,28 @@ enum nl80211_attrs { - NL80211_ATTR_WIPHY_EDMG_CHANNELS, - NL80211_ATTR_WIPHY_EDMG_BW_CONFIG, +@@ -2997,6 +3000,8 @@ enum nl80211_attrs { + + NL80211_ATTR_HE_6GHZ_CAPABILITY, -+ NL80211_ATTR_VLAN_ID, -+ -+ NL80211_ATTR_HE_BSS_COLOR, -+ -+ NL80211_ATTR_IFTYPE_AKM_SUITES, -+ -+ NL80211_ATTR_TID_CONFIG, -+ -+ NL80211_ATTR_CONTROL_PORT_NO_PREAUTH, -+ -+ NL80211_ATTR_PMK_LIFETIME, -+ NL80211_ATTR_PMK_REAUTH_THRESHOLD, -+ -+ NL80211_ATTR_RECEIVE_MULTICAST, -+ NL80211_ATTR_WIPHY_FREQ_OFFSET, -+ NL80211_ATTR_CENTER_FREQ1_OFFSET, -+ NL80211_ATTR_SCAN_FREQ_KHZ, -+ -+ NL80211_ATTR_HE_6GHZ_CAPABILITY, -+ + NL80211_ATTR_WIPHY_ANTENNA_GAIN, + /* add attributes here, update the policy in nl80211.c */ __NL80211_ATTR_AFTER_LAST, -@@ -3413,6 +3570,8 @@ enum nl80211_mpath_info { - * defined in HE capabilities IE - * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band HE capability attribute currently - * defined -+ * @NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA: HE 6GHz band capabilities (__le16), -+ * given for all 6 GHz band channels - * @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use - */ - enum nl80211_band_iftype_attr { -@@ -3423,6 +3582,7 @@ enum nl80211_band_iftype_attr { - NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY, - NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET, - NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE, -+ NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA, - - /* keep last */ - __NL80211_BAND_IFTYPE_ATTR_AFTER_LAST, -@@ -3554,6 +3714,9 @@ enum nl80211_wmm_rule { - * @NL80211_FREQUENCY_ATTR_WMM: this channel has wmm limitations. - * This is a nested attribute that contains the wmm limitation per AC. - * (see &enum nl80211_wmm_rule) -+ * @NL80211_FREQUENCY_ATTR_NO_HE: HE operation is not allowed on this channel -+ * in current regulatory domain. -+ * @NL80211_FREQUENCY_ATTR_OFFSET: frequency offset in KHz - * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number - * currently defined - * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use -@@ -3583,6 +3746,8 @@ enum nl80211_frequency_attr { - NL80211_FREQUENCY_ATTR_NO_20MHZ, - NL80211_FREQUENCY_ATTR_NO_10MHZ, - NL80211_FREQUENCY_ATTR_WMM, -+ NL80211_FREQUENCY_ATTR_NO_HE, -+ NL80211_FREQUENCY_ATTR_OFFSET, - - /* keep last */ - __NL80211_FREQUENCY_ATTR_AFTER_LAST, -@@ -3780,6 +3945,7 @@ enum nl80211_sched_scan_match_attr { - * @NL80211_RRF_NO_HT40PLUS: channels can't be used in HT40+ operation - * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed - * @NL80211_RRF_NO_160MHZ: 160MHz operation not allowed -+ * @NL80211_RRF_NO_HE: HE operation not allowed - */ - enum nl80211_reg_rule_flags { - NL80211_RRF_NO_OFDM = 1<<0, -@@ -3797,6 +3963,7 @@ enum nl80211_reg_rule_flags { - NL80211_RRF_NO_HT40PLUS = 1<<14, - NL80211_RRF_NO_80MHZ = 1<<15, - NL80211_RRF_NO_160MHZ = 1<<16, -+ NL80211_RRF_NO_HE = 1<<17, - }; - - #define NL80211_RRF_PASSIVE_SCAN NL80211_RRF_NO_IR -@@ -4351,6 +4518,7 @@ enum nl80211_bss_scan_width { - * @NL80211_BSS_CHAIN_SIGNAL: per-chain signal strength of last BSS update. - * Contains a nested array of signal strength attributes (u8, dBm), - * using the nesting index as the antenna number. -+ * @NL80211_BSS_FREQUENCY_OFFSET: frequency offset in KHz - * @__NL80211_BSS_AFTER_LAST: internal - * @NL80211_BSS_MAX: highest BSS attribute - */ -@@ -4375,6 +4543,7 @@ enum nl80211_bss { - NL80211_BSS_PARENT_TSF, - NL80211_BSS_PARENT_BSSID, - NL80211_BSS_CHAIN_SIGNAL, -+ NL80211_BSS_FREQUENCY_OFFSET, - - /* keep last */ - __NL80211_BSS_AFTER_LAST, -@@ -4503,6 +4672,7 @@ enum nl80211_key_default_types { - * See &enum nl80211_key_default_types. - * @NL80211_KEY_MODE: the mode from enum nl80211_key_mode. - * Defaults to @NL80211_KEY_RX_TX. -+ * @NL80211_KEY_DEFAULT_BEACON: flag indicating default Beacon frame key - * - * @__NL80211_KEY_AFTER_LAST: internal - * @NL80211_KEY_MAX: highest key attribute -@@ -4518,6 +4688,7 @@ enum nl80211_key_attributes { - NL80211_KEY_TYPE, - NL80211_KEY_DEFAULT_TYPES, - NL80211_KEY_MODE, -+ NL80211_KEY_DEFAULT_BEACON, - - /* keep last */ - __NL80211_KEY_AFTER_LAST, -@@ -4674,6 +4845,92 @@ enum nl80211_tx_power_setting { - }; - - /** -+ * enum nl80211_tid_config - TID config state -+ * @NL80211_TID_CONFIG_ENABLE: Enable config for the TID -+ * @NL80211_TID_CONFIG_DISABLE: Disable config for the TID -+ */ -+enum nl80211_tid_config { -+ NL80211_TID_CONFIG_ENABLE, -+ NL80211_TID_CONFIG_DISABLE, -+}; -+ -+/* enum nl80211_tx_rate_setting - TX rate configuration type -+ * @NL80211_TX_RATE_AUTOMATIC: automatically determine TX rate -+ * @NL80211_TX_RATE_LIMITED: limit the TX rate by the TX rate parameter -+ * @NL80211_TX_RATE_FIXED: fix TX rate to the TX rate parameter -+ */ -+enum nl80211_tx_rate_setting { -+ NL80211_TX_RATE_AUTOMATIC, -+ NL80211_TX_RATE_LIMITED, -+ NL80211_TX_RATE_FIXED, -+}; -+ -+/* enum nl80211_tid_config_attr - TID specific configuration. -+ * @NL80211_TID_CONFIG_ATTR_PAD: pad attribute for 64-bit values -+ * @NL80211_TID_CONFIG_ATTR_VIF_SUPP: a bitmap (u64) of attributes supported -+ * for per-vif configuration; doesn't list the ones that are generic -+ * (%NL80211_TID_CONFIG_ATTR_TIDS, %NL80211_TID_CONFIG_ATTR_OVERRIDE). -+ * @NL80211_TID_CONFIG_ATTR_PEER_SUPP: same as the previous per-vif one, but -+ * per peer instead. -+ * @NL80211_TID_CONFIG_ATTR_OVERRIDE: flag attribue, if set indicates -+ * that the new configuration overrides all previous peer -+ * configurations, otherwise previous peer specific configurations -+ * should be left untouched. -+ * @NL80211_TID_CONFIG_ATTR_TIDS: a bitmask value of TIDs (bit 0 to 7) -+ * Its type is u16. -+ * @NL80211_TID_CONFIG_ATTR_NOACK: Configure ack policy for the TID. -+ * specified in %NL80211_TID_CONFIG_ATTR_TID. see %enum nl80211_tid_config. -+ * Its type is u8. -+ * @NL80211_TID_CONFIG_ATTR_RETRY_SHORT: Number of retries used with data frame -+ * transmission, user-space sets this configuration in -+ * &NL80211_CMD_SET_TID_CONFIG. It is u8 type, min value is 1 and -+ * the max value is advertised by the driver in this attribute on -+ * output in wiphy capabilities. -+ * @NL80211_TID_CONFIG_ATTR_RETRY_LONG: Number of retries used with data frame -+ * transmission, user-space sets this configuration in -+ * &NL80211_CMD_SET_TID_CONFIG. Its type is u8, min value is 1 and -+ * the max value is advertised by the driver in this attribute on -+ * output in wiphy capabilities. -+ * @NL80211_TID_CONFIG_ATTR_AMPDU_CTRL: Enable/Disable MPDU aggregation -+ * for the TIDs specified in %NL80211_TID_CONFIG_ATTR_TIDS. -+ * Its type is u8, using the values from &nl80211_tid_config. -+ * @NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL: Enable/Disable RTS_CTS for the TIDs -+ * specified in %NL80211_TID_CONFIG_ATTR_TIDS. It is u8 type, using -+ * the values from &nl80211_tid_config. -+ * @NL80211_TID_CONFIG_ATTR_AMSDU_CTRL: Enable/Disable MSDU aggregation -+ * for the TIDs specified in %NL80211_TID_CONFIG_ATTR_TIDS. -+ * Its type is u8, using the values from &nl80211_tid_config. -+ * @NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE: This attribute will be useful -+ * to notfiy the driver that what type of txrate should be used -+ * for the TIDs specified in %NL80211_TID_CONFIG_ATTR_TIDS. using -+ * the values form &nl80211_tx_rate_setting. -+ * @NL80211_TID_CONFIG_ATTR_TX_RATE: Data frame TX rate mask should be applied -+ * with the parameters passed through %NL80211_ATTR_TX_RATES. -+ * configuration is applied to the data frame for the tid to that connected -+ * station. -+ */ -+enum nl80211_tid_config_attr { -+ __NL80211_TID_CONFIG_ATTR_INVALID, -+ NL80211_TID_CONFIG_ATTR_PAD, -+ NL80211_TID_CONFIG_ATTR_VIF_SUPP, -+ NL80211_TID_CONFIG_ATTR_PEER_SUPP, -+ NL80211_TID_CONFIG_ATTR_OVERRIDE, -+ NL80211_TID_CONFIG_ATTR_TIDS, -+ NL80211_TID_CONFIG_ATTR_NOACK, -+ NL80211_TID_CONFIG_ATTR_RETRY_SHORT, -+ NL80211_TID_CONFIG_ATTR_RETRY_LONG, -+ NL80211_TID_CONFIG_ATTR_AMPDU_CTRL, -+ NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL, -+ NL80211_TID_CONFIG_ATTR_AMSDU_CTRL, -+ NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE, -+ NL80211_TID_CONFIG_ATTR_TX_RATE, -+ -+ /* keep last */ -+ __NL80211_TID_CONFIG_ATTR_AFTER_LAST, -+ NL80211_TID_CONFIG_ATTR_MAX = __NL80211_TID_CONFIG_ATTR_AFTER_LAST - 1 -+}; -+ -+/** - * enum nl80211_packet_pattern_attr - packet pattern attribute - * @__NL80211_PKTPAT_INVALID: invalid number for nested attribute - * @NL80211_PKTPAT_PATTERN: the pattern, values where the mask has -@@ -5144,6 +5401,8 @@ enum plink_actions { - - #define NL80211_KCK_LEN 16 - #define NL80211_KEK_LEN 16 -+#define NL80211_KCK_EXT_LEN 24 -+#define NL80211_KEK_EXT_LEN 32 - #define NL80211_REPLAY_CTR_LEN 8 - - /** -@@ -5152,6 +5411,7 @@ enum plink_actions { - * @NL80211_REKEY_DATA_KEK: key encryption key (binary) - * @NL80211_REKEY_DATA_KCK: key confirmation key (binary) - * @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary) -+ * @NL80211_REKEY_DATA_AKM: AKM data (OUI, suite type) - * @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal) - * @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal) - */ -@@ -5160,6 +5420,7 @@ enum nl80211_rekey_data { - NL80211_REKEY_DATA_KEK, - NL80211_REKEY_DATA_KCK, - NL80211_REKEY_DATA_REPLAY_CTR, -+ NL80211_REKEY_DATA_AKM, - - /* keep last */ - NUM_NL80211_REKEY_DATA, -@@ -5484,6 +5745,39 @@ enum nl80211_feature_flags { - * @NL80211_EXT_FEATURE_SAE_OFFLOAD: Device wants to do SAE authentication in - * station mode (SAE password is passed as part of the connect command). - * -+ * @NL80211_EXT_FEATURE_VLAN_OFFLOAD: The driver supports a single netdev -+ * with VLAN tagged frames and separate VLAN-specific netdevs added using -+ * vconfig similarly to the Ethernet case. -+ * -+ * @NL80211_EXT_FEATURE_AQL: The driver supports the Airtime Queue Limit (AQL) -+ * feature, which prevents bufferbloat by using the expected transmission -+ * time to limit the amount of data buffered in the hardware. -+ * -+ * @NL80211_EXT_FEATURE_BEACON_PROTECTION: The driver supports Beacon protection -+ * and can receive key configuration for BIGTK using key indexes 6 and 7. -+ * @NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT: The driver supports Beacon -+ * protection as a client only and cannot transmit protected beacons. -+ * -+ * @NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH: The driver can disable the -+ * forwarding of preauth frames over the control port. They are then -+ * handled as ordinary data frames. -+ * -+ * @NL80211_EXT_FEATURE_PROTECTED_TWT: Driver supports protected TWT frames -+ * -+ * @NL80211_EXT_FEATURE_DEL_IBSS_STA: The driver supports removing stations -+ * in IBSS mode, essentially by dropping their state. -+ * -+ * @NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS: management frame registrations -+ * are possible for multicast frames and those will be reported properly. -+ * -+ * @NL80211_EXT_FEATURE_SCAN_FREQ_KHZ: This driver supports receiving and -+ * reporting scan request with %NL80211_ATTR_SCAN_FREQ_KHZ. In order to -+ * report %NL80211_ATTR_SCAN_FREQ_KHZ, %NL80211_SCAN_FLAG_FREQ_KHZ must be -+ * included in the scan request. -+ * -+ * @NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS: The driver -+ * can report tx status for control port over nl80211 tx operations. -+ * - * @NUM_NL80211_EXT_FEATURES: number of extended features. - * @MAX_NL80211_EXT_FEATURES: highest extended feature index. - */ -@@ -5529,6 +5823,16 @@ enum nl80211_ext_feature_index { - NL80211_EXT_FEATURE_EXT_KEY_ID, - NL80211_EXT_FEATURE_STA_TX_PWR, - NL80211_EXT_FEATURE_SAE_OFFLOAD, -+ NL80211_EXT_FEATURE_VLAN_OFFLOAD, -+ NL80211_EXT_FEATURE_AQL, -+ NL80211_EXT_FEATURE_BEACON_PROTECTION, -+ NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH, -+ NL80211_EXT_FEATURE_PROTECTED_TWT, -+ NL80211_EXT_FEATURE_DEL_IBSS_STA, -+ NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS, -+ NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT, -+ NL80211_EXT_FEATURE_SCAN_FREQ_KHZ, -+ NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS, - - /* add new features before the definition below */ - NUM_NL80211_EXT_FEATURES, -@@ -5640,6 +5944,9 @@ enum nl80211_timeout_reason { - * @NL80211_SCAN_FLAG_MIN_PREQ_CONTENT: minimize probe request content to - * only have supported rates and no additional capabilities (unless - * added by userspace explicitly.) -+ * @NL80211_SCAN_FLAG_FREQ_KHZ: report scan results with -+ * %NL80211_ATTR_SCAN_FREQ_KHZ. This also means -+ * %NL80211_ATTR_SCAN_FREQUENCIES will not be included. - */ - enum nl80211_scan_flags { - NL80211_SCAN_FLAG_LOW_PRIORITY = 1<<0, -@@ -5655,6 +5962,7 @@ enum nl80211_scan_flags { - NL80211_SCAN_FLAG_HIGH_ACCURACY = 1<<10, - NL80211_SCAN_FLAG_RANDOM_SN = 1<<11, - NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 1<<12, -+ NL80211_SCAN_FLAG_FREQ_KHZ = 1<<13, - }; - - /** -@@ -6151,12 +6459,14 @@ enum nl80211_ftm_responder_stats { - * @NL80211_PREAMBLE_HT: HT preamble - * @NL80211_PREAMBLE_VHT: VHT preamble - * @NL80211_PREAMBLE_DMG: DMG preamble -+ * @NL80211_PREAMBLE_HE: HE preamble - */ - enum nl80211_preamble { - NL80211_PREAMBLE_LEGACY, - NL80211_PREAMBLE_HT, - NL80211_PREAMBLE_VHT, - NL80211_PREAMBLE_DMG, -+ NL80211_PREAMBLE_HE, - }; - - /** -@@ -6349,6 +6659,10 @@ enum nl80211_peer_measurement_attrs { - * is valid) - * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST: u32 attribute indicating - * the maximum FTMs per burst (if not present anything is valid) -+ * @NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED: flag attribute indicating if -+ * trigger based ranging measurement is supported -+ * @NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED: flag attribute indicating -+ * if non trigger based ranging measurement is supported - * - * @NUM_NL80211_PMSR_FTM_CAPA_ATTR: internal - * @NL80211_PMSR_FTM_CAPA_ATTR_MAX: highest attribute number -@@ -6364,6 +6678,8 @@ enum nl80211_peer_measurement_ftm_capa { - NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS, - NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT, - NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST, -+ NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED, -+ NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED, - - /* keep last */ - NUM_NL80211_PMSR_FTM_CAPA_ATTR, -@@ -6393,6 +6709,20 @@ enum nl80211_peer_measurement_ftm_capa { - * @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI: request LCI data (flag) - * @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC: request civic location data - * (flag) -+ * @NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED: request trigger based ranging -+ * measurement (flag). -+ * This attribute and %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED are -+ * mutually exclusive. -+ * if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor -+ * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based -+ * ranging will be used. -+ * @NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED: request non trigger based -+ * ranging measurement (flag) -+ * This attribute and %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED are -+ * mutually exclusive. -+ * if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor -+ * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based -+ * ranging will be used. - * - * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal - * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number -@@ -6409,6 +6739,8 @@ enum nl80211_peer_measurement_ftm_req { - NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES, - NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI, - NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC, -+ NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED, -+ NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED, - - /* keep last */ - NUM_NL80211_PMSR_FTM_REQ_ATTR, -@@ -6548,5 +6880,51 @@ enum nl80211_obss_pd_attributes { - NL80211_HE_OBSS_PD_ATTR_MAX = __NL80211_HE_OBSS_PD_ATTR_LAST - 1, - }; - -+/** -+ * enum nl80211_bss_color_attributes - BSS Color attributes -+ * @__NL80211_HE_BSS_COLOR_ATTR_INVALID: Invalid -+ * -+ * @NL80211_HE_BSS_COLOR_ATTR_COLOR: the current BSS Color. -+ * @NL80211_HE_BSS_COLOR_ATTR_DISABLED: is BSS coloring disabled. -+ * @NL80211_HE_BSS_COLOR_ATTR_PARTIAL: the AID equation to be used.. -+ * -+ * @__NL80211_HE_BSS_COLOR_ATTR_LAST: Internal -+ * @NL80211_HE_BSS_COLOR_ATTR_MAX: highest BSS Color attribute. -+ */ -+enum nl80211_bss_color_attributes { -+ __NL80211_HE_BSS_COLOR_ATTR_INVALID, -+ -+ NL80211_HE_BSS_COLOR_ATTR_COLOR, -+ NL80211_HE_BSS_COLOR_ATTR_DISABLED, -+ NL80211_HE_BSS_COLOR_ATTR_PARTIAL, -+ -+ /* keep last */ -+ __NL80211_HE_BSS_COLOR_ATTR_LAST, -+ NL80211_HE_BSS_COLOR_ATTR_MAX = __NL80211_HE_BSS_COLOR_ATTR_LAST - 1, -+}; -+ -+/** -+ * enum nl80211_iftype_akm_attributes - interface type AKM attributes -+ * @__NL80211_IFTYPE_AKM_ATTR_INVALID: Invalid -+ * -+ * @NL80211_IFTYPE_AKM_ATTR_IFTYPES: nested attribute containing a flag -+ * attribute for each interface type that supports AKM suites specified in -+ * %NL80211_IFTYPE_AKM_ATTR_SUITES -+ * @NL80211_IFTYPE_AKM_ATTR_SUITES: an array of u32. Used to indicate supported -+ * AKM suites for the specified interface types. -+ * -+ * @__NL80211_IFTYPE_AKM_ATTR_LAST: Internal -+ * @NL80211_IFTYPE_AKM_ATTR_MAX: highest interface type AKM attribute. -+ */ -+enum nl80211_iftype_akm_attributes { -+ __NL80211_IFTYPE_AKM_ATTR_INVALID, -+ -+ NL80211_IFTYPE_AKM_ATTR_IFTYPES, -+ NL80211_IFTYPE_AKM_ATTR_SUITES, -+ -+ /* keep last */ -+ __NL80211_IFTYPE_AKM_ATTR_LAST, -+ NL80211_IFTYPE_AKM_ATTR_MAX = __NL80211_IFTYPE_AKM_ATTR_LAST - 1, -+}; - - #endif /* __LINUX_NL80211_H */ diff --git a/package/network/utils/iw/patches/200-reduce_size.patch b/package/network/utils/iw/patches/200-reduce_size.patch index 58613d59a..24eb96537 100644 --- a/package/network/utils/iw/patches/200-reduce_size.patch +++ b/package/network/utils/iw/patches/200-reduce_size.patch @@ -1,6 +1,6 @@ --- a/event.c +++ b/event.c -@@ -699,6 +699,7 @@ static int print_event(struct nl_msg *ms +@@ -944,6 +944,7 @@ static int print_event(struct nl_msg *ms } switch (gnlh->cmd) { @@ -8,15 +8,15 @@ case NL80211_CMD_NEW_WIPHY: printf("renamed to %s\n", nla_get_string(tb[NL80211_ATTR_WIPHY_NAME])); break; -@@ -734,6 +735,7 @@ static int print_event(struct nl_msg *ms +@@ -979,6 +980,7 @@ static int print_event(struct nl_msg *ms case NL80211_CMD_SCHED_SCAN_RESULTS: printf("got scheduled scan results\n"); break; +#endif + case NL80211_CMD_WIPHY_REG_CHANGE: case NL80211_CMD_REG_CHANGE: - printf("regulatory domain change: "); - -@@ -812,6 +814,7 @@ static int print_event(struct nl_msg *ms + if (gnlh->cmd == NL80211_CMD_WIPHY_REG_CHANGE) +@@ -1061,6 +1063,7 @@ static int print_event(struct nl_msg *ms mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC])); printf("del station %s\n", macbuf); break; @@ -24,10 +24,10 @@ case NL80211_CMD_JOIN_IBSS: mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC])); printf("IBSS %s joined\n", macbuf); -@@ -989,9 +992,9 @@ static int print_event(struct nl_msg *ms - parse_nan_match(tb); +@@ -1254,9 +1257,9 @@ static int print_event(struct nl_msg *ms + case NL80211_CMD_CH_SWITCH_NOTIFY: + parse_ch_switch_notify(tb, gnlh->cmd); break; - } +#endif default: - printf("unknown event %d (%s)\n", @@ -38,7 +38,7 @@ --- a/info.c +++ b/info.c -@@ -164,6 +164,7 @@ static int print_phy_handler(struct nl_m +@@ -167,6 +167,7 @@ static int print_phy_handler(struct nl_m tb_band[NL80211_BAND_ATTR_VHT_MCS_SET]) print_vht_info(nla_get_u32(tb_band[NL80211_BAND_ATTR_VHT_CAPA]), nla_data(tb_band[NL80211_BAND_ATTR_VHT_MCS_SET])); @@ -46,7 +46,7 @@ if (tb_band[NL80211_BAND_ATTR_IFTYPE_DATA]) { struct nlattr *nl_iftype; int rem_band; -@@ -171,6 +172,7 @@ static int print_phy_handler(struct nl_m +@@ -174,6 +175,7 @@ static int print_phy_handler(struct nl_m nla_for_each_nested(nl_iftype, tb_band[NL80211_BAND_ATTR_IFTYPE_DATA], rem_band) print_he_info(nl_iftype); } @@ -54,7 +54,7 @@ if (tb_band[NL80211_BAND_ATTR_FREQS]) { if (!band_had_freq) { printf("\t\tFrequencies:\n"); -@@ -213,6 +215,7 @@ next: +@@ -216,6 +218,7 @@ next: } } @@ -62,7 +62,7 @@ if (tb_band[NL80211_BAND_ATTR_RATES]) { printf("\t\tBitrates (non-HT):\n"); nla_for_each_nested(nl_rate, tb_band[NL80211_BAND_ATTR_RATES], rem_rate) { -@@ -229,6 +232,7 @@ next: +@@ -232,6 +235,7 @@ next: printf("\n"); } } @@ -70,7 +70,7 @@ } } -@@ -294,6 +298,7 @@ next: +@@ -297,6 +301,7 @@ next: printf("\tCoverage class: %d (up to %dm)\n", coverage, 450 * coverage); } @@ -78,7 +78,7 @@ if (tb_msg[NL80211_ATTR_CIPHER_SUITES]) { int num = nla_len(tb_msg[NL80211_ATTR_CIPHER_SUITES]) / sizeof(__u32); int i; -@@ -305,6 +310,7 @@ next: +@@ -308,6 +313,7 @@ next: cipher_name(ciphers[i])); } } @@ -86,7 +86,7 @@ if (tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX] && tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX]) -@@ -324,11 +330,13 @@ next: +@@ -327,11 +333,13 @@ next: printf("\t\t * %s\n", iftype_name(nla_type(nl_mode))); } @@ -100,7 +100,7 @@ if (tb_msg[NL80211_ATTR_INTERFACE_COMBINATIONS]) { struct nlattr *nl_combi; -@@ -425,6 +433,7 @@ broken_combination: +@@ -428,6 +436,7 @@ broken_combination: printf("\tinterface combinations are not supported\n"); } @@ -108,7 +108,7 @@ if (tb_msg[NL80211_ATTR_SUPPORTED_COMMANDS]) { printf("\tSupported commands:\n"); nla_for_each_nested(nl_cmd, tb_msg[NL80211_ATTR_SUPPORTED_COMMANDS], rem_cmd) -@@ -522,6 +531,7 @@ broken_combination: +@@ -525,6 +534,7 @@ broken_combination: printf("\t\t * wake up on TCP connection\n"); } } @@ -116,7 +116,7 @@ if (tb_msg[NL80211_ATTR_ROAM_SUPPORT]) printf("\tDevice supports roaming.\n"); -@@ -560,6 +570,7 @@ broken_combination: +@@ -563,6 +573,7 @@ broken_combination: } } @@ -124,7 +124,7 @@ if (tb_msg[NL80211_ATTR_FEATURE_FLAGS]) { unsigned int features = nla_get_u32(tb_msg[NL80211_ATTR_FEATURE_FLAGS]); -@@ -624,6 +635,7 @@ broken_combination: +@@ -627,6 +638,7 @@ broken_combination: if (features & NL80211_FEATURE_ND_RANDOM_MAC_ADDR) printf("\tDevice supports randomizing MAC-addr in net-detect scans.\n"); } @@ -132,7 +132,7 @@ if (tb_msg[NL80211_ATTR_TDLS_SUPPORT]) printf("\tDevice supports T-DLS.\n"); -@@ -732,6 +744,7 @@ TOPLEVEL(list, NULL, NL80211_CMD_GET_WIP +@@ -762,6 +774,7 @@ TOPLEVEL(list, NULL, NL80211_CMD_GET_WIP "List all wireless devices and their capabilities."); TOPLEVEL(phy, NULL, NL80211_CMD_GET_WIPHY, NLM_F_DUMP, CIB_NONE, handle_info, NULL); @@ -140,7 +140,7 @@ static int handle_commands(struct nl80211_state *state, struct nl_msg *msg, int argc, char **argv, enum id_input id) { -@@ -743,6 +756,7 @@ static int handle_commands(struct nl8021 +@@ -773,6 +786,7 @@ static int handle_commands(struct nl8021 } TOPLEVEL(commands, NULL, NL80211_CMD_GET_WIPHY, 0, CIB_NONE, handle_commands, "list all known commands and their decimal & hex value"); @@ -150,7 +150,7 @@ { --- a/scan.c +++ b/scan.c -@@ -1195,6 +1195,9 @@ static void print_ht_op(const uint8_t ty +@@ -1297,6 +1297,9 @@ static void print_ht_op(const uint8_t ty printf("\t\t * secondary channel offset: %s\n", ht_secondary_offset[data[1] & 0x3]); printf("\t\t * STA channel width: %s\n", sta_chan_width[(data[1] & 0x4)>>2]); @@ -160,7 +160,7 @@ printf("\t\t * RIFS: %d\n", (data[1] & 0x8)>>3); printf("\t\t * HT protection: %s\n", protection[data[2] & 0x3]); printf("\t\t * non-GF present: %d\n", (data[2] & 0x4) >> 2); -@@ -1522,6 +1525,14 @@ static void print_ie(const struct ie_pri +@@ -1707,6 +1710,14 @@ static void print_ie(const struct ie_pri static const struct ie_print ieprinters[] = { [0] = { "SSID", print_ssid, 0, 32, BIT(PRINT_SCAN) | BIT(PRINT_LINK), }, @@ -175,12 +175,15 @@ [1] = { "Supported rates", print_supprates, 0, 255, BIT(PRINT_SCAN), }, [3] = { "DS Parameter set", print_ds, 1, 1, BIT(PRINT_SCAN), }, [5] = { "TIM", print_tim, 4, 255, BIT(PRINT_SCAN), }, -@@ -1531,21 +1542,15 @@ static const struct ie_print ieprinters[ +@@ -1716,26 +1727,20 @@ static const struct ie_print ieprinters[ [32] = { "Power constraint", print_powerconstraint, 1, 1, BIT(PRINT_SCAN), }, [35] = { "TPC report", print_tpcreport, 2, 2, BIT(PRINT_SCAN), }, [42] = { "ERP", print_erp, 1, 255, BIT(PRINT_SCAN), }, - [45] = { "HT capabilities", print_ht_capa, 26, 26, BIT(PRINT_SCAN), }, [47] = { "ERP D4.0", print_erp, 1, 255, BIT(PRINT_SCAN), }, + [51] = { "AP Channel Report", print_ap_channel_report, 1, 255, BIT(PRINT_SCAN), }, + [59] = { "Supported operating classes", print_supp_op_classes, 1, 255, BIT(PRINT_SCAN), }, + [66] = { "Measurement Pilot Transmission", print_measurement_pilot_tx, 1, 255, BIT(PRINT_SCAN), }, [74] = { "Overlapping BSS scan params", print_obss_scan_params, 14, 255, BIT(PRINT_SCAN), }, - [61] = { "HT operation", print_ht_op, 22, 22, BIT(PRINT_SCAN), }, - [62] = { "Secondary Channel Offset", print_secchan_offs, 1, 1, BIT(PRINT_SCAN), }, @@ -188,17 +191,19 @@ - [192] = { "VHT operation", print_vht_oper, 5, 255, BIT(PRINT_SCAN), }, - [48] = { "RSN", print_rsn, 2, 255, BIT(PRINT_SCAN), }, [50] = { "Extended supported rates", print_supprates, 0, 255, BIT(PRINT_SCAN), }, + [70] = { "RM enabled capabilities", print_rm_enabled_capabilities, 5, 5, BIT(PRINT_SCAN), }, [113] = { "MESH Configuration", print_mesh_conf, 7, 7, BIT(PRINT_SCAN), }, - [114] = { "MESH ID", print_ssid, 0, 32, BIT(PRINT_SCAN) | BIT(PRINT_LINK), }, [127] = { "Extended capabilities", print_capabilities, 0, 255, BIT(PRINT_SCAN), }, [107] = { "802.11u Interworking", print_interworking, 0, 255, BIT(PRINT_SCAN), }, [108] = { "802.11u Advertisement", print_11u_advert, 0, 255, BIT(PRINT_SCAN), }, - [111] = { "802.11u Roaming Consortium", print_11u_rcon, 0, 255, BIT(PRINT_SCAN), }, + [111] = { "802.11u Roaming Consortium", print_11u_rcon, 2, 255, BIT(PRINT_SCAN), }, + [195] = { "Transmit Power Envelope", print_tx_power_envelope, 2, 5, BIT(PRINT_SCAN), }, +#endif }; static void print_wifi_wpa(const uint8_t type, uint8_t len, const uint8_t *data, -@@ -2024,6 +2029,7 @@ void print_ies(unsigned char *ie, int ie +@@ -2279,6 +2284,7 @@ void print_ies(unsigned char *ie, int ie ieprinters[ie[0]].flags & BIT(ptype)) { print_ie(&ieprinters[ie[0]], ie[0], ie[1], ie + 2, &ie_buffer); @@ -206,7 +211,7 @@ } else if (ie[0] == 221 /* vendor */) { print_vendor(ie[1], ie + 2, unknown, ptype); } else if (unknown) { -@@ -2033,6 +2039,7 @@ void print_ies(unsigned char *ie, int ie +@@ -2288,6 +2294,7 @@ void print_ies(unsigned char *ie, int ie for (i=0; i [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons ] [block-tx]\n" -@@ -727,3 +730,4 @@ COMMAND(switch, freq, - "Switch the operating channel by sending a channel switch announcement (CSA)."); - COMMAND(switch, channel, " [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons ] [block-tx]", - NL80211_CMD_CHANNEL_SWITCH, 0, CIB_NETDEV, handle_chan, NULL); +@@ -956,3 +959,4 @@ COMMAND(set, tidconf, "[peer