From 610591578648713436016e700d085457edcb8e6a Mon Sep 17 00:00:00 2001 From: AmadeusGhost <42570690+AmadeusGhost@users.noreply.github.com> Date: Wed, 27 May 2020 11:45:56 +0800 Subject: [PATCH] Wireless: rollback with mac80211 (#4683) mt76: fix build ath10k-ct: rollback to 4.19 Revert "iw/iwinfo/mwlwifi: bump version" Revert "mac80211/5.4: fix build on kernel 4.9" Revert "mac80211: switch to upstream owl-loader driver" --- package/firmware/ath10k-ct-firmware/Makefile | 677 ------------------ package/firmware/ath10k-firmware/Makefile | 446 ++++++++++++ package/kernel/ath10k-ct/Makefile | 12 +- ...rt-for-configuring-management-packet.patch | 89 +++ ...ble-out-of-bound-access-of-ath10k_ra.patch | 66 ++ ...rect-multicast-broadcast-rate-settin.patch | 43 ++ ...64-ath10k-commit-rates-from-mac80211.patch | 10 +- ...olling-support-for-various-chipsets.patch} | 144 ++-- ...10k-4.16-use-tpt-trigger-by-default.patch} | 24 +- ...ilable-channels-via-DT-ieee80211-fre.patch | 39 + ...10k-Add-NL80211_EXT_FEATURE_AQL-flag.patch | 10 - ...0-0010-ath10k-limit-htt-rx-ring-size.patch | 18 +- ...60-0011-ath10k-limit-pci-buffer-size.patch | 54 +- package/kernel/linux/modules/wireless.mk | 21 + package/kernel/mac80211/Makefile | 2 +- package/kernel/mt76/Makefile | 19 +- package/kernel/mwlwifi/Makefile | 6 +- ...compile-with-mac80211-backports-5_3+.patch | 35 - ...le-AMSDU.patch => 001-disable-AMSDU.patch} | 0 package/network/utils/iw/Makefile | 9 +- .../utils/iw/patches/001-nl80211_h_sync.patch | 52 +- .../utils/iw/patches/120-antenna_gain.patch | 2 +- .../iw/patches/130-survey-bss-rx-time.patch | 12 - .../utils/iw/patches/200-reduce_size.patch | 92 +-- package/network/utils/iwinfo/Makefile | 8 +- package/system/rpcd/Makefile | 7 +- package/system/rpcd/files/rpcd.init | 4 + ...c_page_frag-to-page_frag_alloc-and-_.patch | 137 ++++ ..._frag-functions-to-__page_frag_cache.patch | 79 ++ .../generic/files/drivers/misc/owl-loader.c | 246 +++++++ .../hack-4.14/835-misc-owl_loader.patch | 52 ++ .../hack-4.19/835-misc-owl_loader.patch | 52 ++ .../hack-4.9/202-reduce_module_size.patch | 24 + .../640-bridge-only-accept-EAP-locally.patch | 59 +- .../hack-4.9/835-misc-owl_loader.patch | 52 ++ 35 files changed, 1608 insertions(+), 994 deletions(-) delete mode 100644 package/firmware/ath10k-ct-firmware/Makefile create mode 100644 package/kernel/ath10k-ct/patches/161-ath10k-add-support-for-configuring-management-packet.patch create mode 100644 package/kernel/ath10k-ct/patches/162-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch create mode 100644 package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch rename package/kernel/ath10k-ct/patches/{201-ath10k-add-LED-and-GPIO-controlling-support-for-various-chipsets.patch => 201-ath10k-4.16_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch} (85%) rename package/kernel/ath10k-ct/patches/{202-ath10k-use-tpt-trigger-by-default.patch => 202-ath10k-4.16-use-tpt-trigger-by-default.patch} (76%) create mode 100644 package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch delete mode 100644 package/kernel/ath10k-ct/patches/205-ath10k-Add-NL80211_EXT_FEATURE_AQL-flag.patch delete mode 100644 package/kernel/mwlwifi/patches/001-Fix-compile-with-mac80211-backports-5_3+.patch rename package/kernel/mwlwifi/patches/{002-disable-AMSDU.patch => 001-disable-AMSDU.patch} (100%) delete mode 100644 package/network/utils/iw/patches/130-survey-bss-rx-time.patch create mode 100644 target/linux/generic/backport-4.9/041-mm-rename-__alloc_page_frag-to-page_frag_alloc-and-_.patch create mode 100644 target/linux/generic/backport-4.9/042-mm-rename-__page_frag-functions-to-__page_frag_cache.patch create mode 100644 target/linux/generic/files/drivers/misc/owl-loader.c create mode 100644 target/linux/generic/hack-4.14/835-misc-owl_loader.patch create mode 100644 target/linux/generic/hack-4.19/835-misc-owl_loader.patch create mode 100644 target/linux/generic/hack-4.9/202-reduce_module_size.patch create mode 100644 target/linux/generic/hack-4.9/835-misc-owl_loader.patch diff --git a/package/firmware/ath10k-ct-firmware/Makefile b/package/firmware/ath10k-ct-firmware/Makefile deleted file mode 100644 index 18370b7d8..000000000 --- a/package/firmware/ath10k-ct-firmware/Makefile +++ /dev/null @@ -1,677 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=ath10k-ct-firmware -PKG_VERSION:=2020-04-24 -PKG_RELEASE:=2 - -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) - -define Download/ct-firmware - URL:=https://www.candelatech.com/downloads/$(2) - FILE:=$(call CT_FIRMWARE_FILE,$(1)) - URL_FILE:=$($(1)_FIRMWARE_FILE_CT) -endef - -define Download/ct-firmware-full-htt - URL:=https://www.candelatech.com/downloads/$(2) - FILE:=$(call CT_FIRMWARE_FILE_FULL_HTT,$(1)) - URL_FILE:=$($(1)_FIRMWARE_FILE_CT_FULL_HTT) -endef - -define Download/ct-firmware-htt - URL:=https://www.candelatech.com/downloads/$(2) - FILE:=$(call CT_FIRMWARE_FILE_HTT,$(1)) - URL_FILE:=$($(1)_FIRMWARE_FILE_CT_HTT) -endef - -QCA988X_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.018 -define Download/ath10k-firmware-qca988x-ct - $(call Download/ct-firmware,QCA988X,) - HASH:=8b4c99253aa309d35f2e060c190091b8db1b84dbda06a6a15c83ac0f9a938126 -endef -$(eval $(call Download,ath10k-firmware-qca988x-ct)) - -QCA988X_FIRMWARE_FILE_CT_FULL_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.018 -define Download/ath10k-firmware-qca988x-ct-full-htt - $(call Download/ct-firmware-full-htt,QCA988X,) - HASH:=a7168916d6aa5e4d7858f8b620c0c980c76d03f390929db6f4077685ce2051e7 -endef -$(eval $(call Download,ath10k-firmware-qca988x-ct-full-htt)) - - -QCA9887_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.018 -define Download/ath10k-firmware-qca9887-ct - $(call Download/ct-firmware,QCA9887,ath10k-9887) - HASH:=459692deb186a63ab8eeddb7ad5d54779266e68ca686e7c46062554db6dca12b -endef -$(eval $(call Download,ath10k-firmware-qca9887-ct)) - -QCA9887_FIRMWARE_FILE_CT_FULL_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.018 -define Download/ath10k-firmware-qca9887-ct-full-htt - $(call Download/ct-firmware-full-htt,QCA9887,ath10k-9887) - HASH:=fd126a457d0927d0c8ea10d66ef5b67d5e1e0741f8692bb3016bb602d0af3098 -endef -$(eval $(call Download,ath10k-firmware-qca9887-ct-full-htt)) - - -QCA99X0_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.018 -define Download/ath10k-firmware-qca99x0-ct - $(call Download/ct-firmware,QCA99X0,ath10k-10-4b) - HASH:=cf26eb37524de54af51fe9b2efffc85e0e70ab849e8607ef63ce5a8ecffeaa42 -endef -$(eval $(call Download,ath10k-firmware-qca99x0-ct)) - -QCA99X0_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca99x0-ct-full-htt - $(call Download/ct-firmware-full-htt,QCA99X0,ath10k-10-4b) - HASH:=e9737538d7379e13ad4e4c8c519a63659b5e34a35455ed9ac4399ae8097caabc -endef -$(eval $(call Download,ath10k-firmware-qca99x0-ct-full-htt)) - -QCA99X0_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca99x0-ct-htt - $(call Download/ct-firmware-htt,QCA99X0,ath10k-10-4b) - HASH:=4d4f74afca487d452f244cd48304cf9710d8941eb97a6346a949ed6b6877d657 -endef -$(eval $(call Download,ath10k-firmware-qca99x0-ct-htt)) - - -QCA9984_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.018 -define Download/ath10k-firmware-qca9984-ct - $(call Download/ct-firmware,QCA9984,ath10k-9984-10-4b) - HASH:=a6b3d66efe640a430a837f238e91eddcd423eed6b887d3ae19716d87a71fd0b1 -endef -$(eval $(call Download,ath10k-firmware-qca9984-ct)) - -QCA9984_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca9984-ct-full-htt - $(call Download/ct-firmware-full-htt,QCA9984,ath10k-9984-10-4b) - HASH:=96060227e372b3b210badccbe6b0bd75d9a35335a7a0f2966964e9e89f66b00f -endef -$(eval $(call Download,ath10k-firmware-qca9984-ct-full-htt)) - -QCA9984_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca9984-ct-htt - $(call Download/ct-firmware-htt,QCA9984,ath10k-9984-10-4b) - HASH:=ee593fb5724d75c372de02ac7894e1630ee9f909fcb2e2bbf17aadef67cb9d43 -endef -$(eval $(call Download,ath10k-firmware-qca9984-ct-htt)) - - -QCA4019_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.018 -define Download/ath10k-firmware-qca4019-ct - $(call Download/ct-firmware,QCA4019,ath10k-4019-10-4b) - HASH:=46d8f8f1e780813299dc8780eedcfceda103c6b4d8908589ad1adbef921714c0 -endef -$(eval $(call Download,ath10k-firmware-qca4019-ct)) - -QCA4019_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca4019-ct-full-htt - $(call Download/ct-firmware-full-htt,QCA4019,ath10k-4019-10-4b) - HASH:=d884624fc34f4b5de7a3ec0534627c46cea25fca45657f3a2f6bb85f6c5893d7 -endef -$(eval $(call Download,ath10k-firmware-qca4019-ct-full-htt)) - -QCA4019_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca4019-ct-htt - $(call Download/ct-firmware-htt,QCA4019,ath10k-4019-10-4b) - HASH:=51fe06f66365771647d16039cca8b541de3d642c45271977a4cfd433c2c5d45b -endef -$(eval $(call Download,ath10k-firmware-qca4019-ct-htt)) - - -QCA9888_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.018 -define Download/ath10k-firmware-qca9888-ct - $(call Download/ct-firmware,QCA9888,ath10k-9888-10-4b) - HASH:=d01f1429aaf0bfac07eee3547e5821d19136840b2f983e75e76979a5ac19b6f0 -endef -$(eval $(call Download,ath10k-firmware-qca9888-ct)) - -QCA9888_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca9888-ct-full-htt - $(call Download/ct-firmware-full-htt,QCA9888,ath10k-9888-10-4b) - HASH:=68c42f8e0dcf77f18d4813ac93174bf06ff5cf5aa4f69befe7f35f9fae1de1e3 -endef -$(eval $(call Download,ath10k-firmware-qca9888-ct-full-htt)) - -QCA9888_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.018 -define Download/ath10k-firmware-qca9888-ct-htt - $(call Download/ct-firmware-htt,QCA9888,ath10k-9888-10-4b) - HASH:=6c692141155f5bb74c0117553d5d48ff2aaba73bd4d5e90a5044a5e2ec0faab0 -endef -$(eval $(call Download,ath10k-firmware-qca9888-ct-htt)) - - -define Package/ath10k-ct-firmware-default - SECTION:=firmware - CATEGORY:=Firmware - URL:=https://www.candelatech.com/ath10k.php - DEPENDS:= -endef - -define Package/ath10k-firmware-qca988x-ct -$(Package/ath10k-ct-firmware-default) - TITLE:=ath10k CT 10.1 firmware for QCA988x devices - SECTION:=firmware - CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-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 -endef - -define Package/ath10k-firmware-qca9887-ct -$(Package/ath10k-ct-firmware-default) - TITLE:=ath10k CT 10.1 firmware for QCA9887 devices - SECTION:=firmware - CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-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 -endef - -define Package/ath10k-firmware-qca99x0-ct -$(Package/ath10k-ct-firmware-default) - TITLE:=ath10k CT 10.4 firmware for QCA99x0 devices - SECTION:=firmware - CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-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 -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 -endef - -define Package/ath10k-firmware-qca9984-ct -$(Package/ath10k-ct-firmware-default) - TITLE:=ath10k CT 10.4 firmware for QCA9984 devices - SECTION:=firmware - CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-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 -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 -endef - -define Package/ath10k-firmware-qca4019-ct -$(Package/ath10k-ct-firmware-default) - TITLE:=ath10k CT 10.4 firmware for QCA4018/9 - SECTION:=firmware - CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-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 -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 -endef - -define Package/ath10k-firmware-qca9888-ct -$(Package/ath10k-ct-firmware-default) - TITLE:=ath10k CT 10.4 fw for QCA9886/8 devices - SECTION:=firmware - CATEGORY:=Firmware - PROVIDES:=ath10k-firmware-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 -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 -endef - - -define Package/ath10k-firmware-qca9887-ct/description -Alternative ath10k firmware for QCA9887 from Candela Technologies. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.1.php -This firmware conflicts with the standard 9887 firmware, so select only -one. -endef -define Package/ath10k-firmware-qca9887-ct-full-htt/description -Alternative ath10k firmware for QCA9887 from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and fixes .11r authentication. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.1.php -This firmware selects and requires the ath10k-ct driver. -endef - -define Package/ath10k-firmware-qca988x-ct/description -Alternative ath10k firmware for QCA988X from Candela Technologies. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.1.php -This firmware will NOT be used unless the standard ath10k-firmware-qca988x -is un-selected since the driver will try to load firmware-5.bin before -firmware-2.bin -endef -define Package/ath10k-firmware-qca988x-ct-full-htt/description -Alternative ath10k firmware for QCA988X from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and fixes .11r authentication. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.1.php -This firmware selects and requires the ath10k-ct driver. -endef - -define Package/ath10k-firmware-qca99x0-ct/description -Alternative ath10k firmware for QCA99x0 from Candela Technologies. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware conflicts with the standard 99x0 firmware, so select only -one. -endef -define Package/ath10k-firmware-qca99x0-ct-full-htt/description -Alternative ath10k firmware for QCA99x0 from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef -define Package/ath10k-firmware-qca99x0-ct-htt/description -Alternative ath10k firmware for QCA99x0 from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -This firmware lacks a lot of features that ath10k does not use, saving -a lot of resources. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef - -define Package/ath10k-firmware-qca9984-ct/description -Alternative ath10k firmware for QCA9984 from Candela Technologies. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware conflicts with the standard 9984 firmware, so select only -one. -endef -define Package/ath10k-firmware-qca9984-ct-full-htt/description -Alternative ath10k firmware for QCA9984 from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef -define Package/ath10k-firmware-qca9984-ct-htt/description -Alternative ath10k firmware for QCA9984 from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -This firmware lacks a lot of features that ath10k does not use, saving -a lot of resources. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef - -define Package/ath10k-firmware-qca4019-ct/description -Alternative ath10k firmware for IPQ4019 radio from Candela Technologies. -Enables IBSS and other features. Works with standard or ath10k-ct driver. -See: http://www.candelatech.com/ath10k-10.4.php -endef -define Package/ath10k-firmware-qca4019-ct-full-htt/description -Alternative ath10k firmware for IPQ4019 radio from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -Enables IBSS and other features. -See: http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef -define Package/ath10k-firmware-qca4019-ct-htt/description -Alternative ath10k firmware for IPQ4019 radio from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -This firmware lacks a lot of features that ath10k does not use, saving -a lot of resources. -Enables IBSS and other features. -See: http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef - -define Package/ath10k-firmware-qca9888-ct/description -Alternative ath10k firmware for QCA9886 and QCA9888 from Candela Technologies. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware conflicts with the standard 9886 and 9888 firmware, so select only -one. -endef -define Package/ath10k-firmware-qca9888-ct-full-htt/description -Alternative ath10k firmware for QCA9886 and QCA9888 from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef -define Package/ath10k-firmware-qca9888-ct-htt/description -Alternative ath10k firmware for QCA9886 and QCA9888 from Candela Technologies. -Uses normal HTT TX data path for management frames, which improves -stability in busy networks and may be required for .11r authentication. -This firmware lacks a lot of features that ath10k does not use, saving -a lot of resources. -Enables IBSS and other features. See: -http://www.candelatech.com/ath10k-10.4.php -This firmware selects and requires the ath10k-ct driver. -endef - - -define Build/Compile - -endef - - -define Package/ath10k-firmware-qca9887-ct/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 - $(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 -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 -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 -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 -endef - -define Package/ath10k-firmware-qca9888-ct/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 - 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 -endef -define Package/ath10k-firmware-qca9888-ct-full-htt/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 - 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 -endef -define Package/ath10k-firmware-qca9888-ct-htt/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 - 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 -endef - - -$(eval $(call BuildPackage,ath10k-firmware-qca9887-ct)) -$(eval $(call BuildPackage,ath10k-firmware-qca9887-ct-full-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca988x-ct)) -$(eval $(call BuildPackage,ath10k-firmware-qca988x-ct-full-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca99x0-ct)) -$(eval $(call BuildPackage,ath10k-firmware-qca99x0-ct-full-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca99x0-ct-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca9984-ct)) -$(eval $(call BuildPackage,ath10k-firmware-qca9984-ct-full-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca9984-ct-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca4019-ct)) -$(eval $(call BuildPackage,ath10k-firmware-qca4019-ct-full-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca4019-ct-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca9888-ct)) -$(eval $(call BuildPackage,ath10k-firmware-qca9888-ct-full-htt)) -$(eval $(call BuildPackage,ath10k-firmware-qca9888-ct-htt)) diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile index df06f3b3e..f6ed7826f 100644 --- a/package/firmware/ath10k-firmware/Makefile +++ b/package/firmware/ath10k-firmware/Makefile @@ -37,6 +37,11 @@ $(Package/ath10k-firmware-default) TITLE:=ath10k firmware for QCA9888 devices endef +define Package/ath10k-firmware-qca9887-ct +$(Package/ath10k-firmware-default) + TITLE:=ath10k-CT firmware for QCA9887 devices +endef + define Package/ath10k-firmware-qca988x $(Package/ath10k-firmware-default) TITLE:=ath10k firmware for QCA988x devices @@ -44,6 +49,111 @@ $(Package/ath10k-firmware-default) CATEGORY:=Firmware endef +CT_FIRMWARE_FILE = $(1)-$($(1)_FIRMWARE_FILE_CT) +CT_FIRMWARE_FILE_HTT = $(1)-$($(1)_FIRMWARE_FILE_CT_HTT) + +define Download/ct-firmware + URL:=https://www.candelatech.com/downloads/$(2) + FILE:=$(call CT_FIRMWARE_FILE,$(1)) + URL_FILE:=$($(1)_FIRMWARE_FILE_CT) +endef + +define Download/ct-firmware-htt + URL:=https://www.candelatech.com/downloads/$(2) + FILE:=$(call CT_FIRMWARE_FILE_HTT,$(1)) + URL_FILE:=$($(1)_FIRMWARE_FILE_CT_HTT) +endef + +QCA988X_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.013 +define Download/ath10k-firmware-qca988x-ct + $(call Download/ct-firmware,QCA988X,) + HASH:=19db86003509dedb8ace339c183813ca637d65af24d00666411d1590efe33e13 +endef +$(eval $(call Download,ath10k-firmware-qca988x-ct)) + +QCA988X_FIRMWARE_FILE_CT_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.013 +define Download/ath10k-firmware-qca988x-ct-htt + $(call Download/ct-firmware-htt,QCA988X,) + HASH:=454e67dab545e720369a07be2fee16de008c76db4ab3119e7760bf9f7504c066 +endef +$(eval $(call Download,ath10k-firmware-qca988x-ct-htt)) + + +QCA9887_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.013 +define Download/ath10k-firmware-qca9887-ct + $(call Download/ct-firmware,QCA9887,ath10k-9887) + HASH:=b3c738328427e124701a5735d65cde0f60e4172ae5bc23b00e5b16df7995dbd4 +endef +$(eval $(call Download,ath10k-firmware-qca9887-ct)) + +QCA9887_FIRMWARE_FILE_CT_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.013 +define Download/ath10k-firmware-qca9887-ct-htt + $(call Download/ct-firmware-htt,QCA9887,ath10k-9887) + HASH:=4432ccee23133bbaa4a5552e50a1e7e889b257362603e05530e751b67c29b7b5 +endef +$(eval $(call Download,ath10k-firmware-qca9887-ct-htt)) + + +QCA99X0_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.013 +define Download/ath10k-firmware-qca99x0-ct + $(call Download/ct-firmware,QCA99X0,ath10k-10-4b) + HASH:=6fa74a3fc87cba97dbc4a7213b760f8d997cd9c5f11900d47d387b23764cf20a +endef +$(eval $(call Download,ath10k-firmware-qca99x0-ct)) + +QCA99X0_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.013 +define Download/ath10k-firmware-qca99x0-ct-htt + $(call Download/ct-firmware-htt,QCA99X0,ath10k-10-4b) + HASH:=68e92820c51270eba4f68b24654c4a9408902b2600762b70204f4cb5419bb714 +endef +$(eval $(call Download,ath10k-firmware-qca99x0-ct-htt)) + + +QCA9984_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.013 +define Download/ath10k-firmware-qca9984-ct + $(call Download/ct-firmware,QCA9984,ath10k-9984-10-4b) + HASH:=08aeb883bd2d9258e8f1907cca8a0d2eda1c559a66e228dadffd6798f6877c7d +endef +$(eval $(call Download,ath10k-firmware-qca9984-ct)) + +QCA9984_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.013 +define Download/ath10k-firmware-qca9984-ct-htt + $(call Download/ct-firmware-htt,QCA9984,ath10k-9984-10-4b) + HASH:=38ed59a2b3c66c10926706a21ae2d3aeaf83e589f19345a8f48d6520522e4fde +endef +$(eval $(call Download,ath10k-firmware-qca9984-ct-htt)) + + +QCA4019_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.013 +define Download/ath10k-firmware-qca4019-ct + $(call Download/ct-firmware,QCA4019,ath10k-4019-10-4b) + HASH:=feca75fe89af9a3e998047f85ff3428676f4d574b770d51773bb419d0dd98e5a +endef +$(eval $(call Download,ath10k-firmware-qca4019-ct)) + +QCA4019_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.013 +define Download/ath10k-firmware-qca4019-ct-htt + $(call Download/ct-firmware-htt,QCA4019,ath10k-4019-10-4b) + HASH:=6a4977689343f43edd934823512f031fd1a026e872004343b9952077f9607cb0 +endef +$(eval $(call Download,ath10k-firmware-qca4019-ct-htt)) + + +QCA9888_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.013 +define Download/ath10k-firmware-qca9888-ct + $(call Download/ct-firmware,QCA9888,ath10k-9888-10-4b) + HASH:=d6a59c17bfbec1abc8498762d9f00b2449cab352feb8bef8b621771168376dbf +endef +$(eval $(call Download,ath10k-firmware-qca9888-ct)) + +QCA9888_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.013 +define Download/ath10k-firmware-qca9888-ct-htt + $(call Download/ct-firmware-htt,QCA9888,ath10k-9888-10-4b) + HASH:=fe242c0d56494975d7a1aeb6969d90cc21cb133fba99040d4da7a25fdb90d92c +endef +$(eval $(call Download,ath10k-firmware-qca9888-ct-htt)) + + define Package/ath10k-firmware-qca99x0 $(Package/ath10k-firmware-default) TITLE:=ath10k firmware for QCA99x0 devices @@ -51,12 +161,206 @@ $(Package/ath10k-firmware-default) CATEGORY:=Firmware endef +define Package/ath10k-firmware-qca988x-ct +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.1 firmware for QCA988x devices + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca988x +endef +define Package/ath10k-firmware-qca988x-ct-htt +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.1 htt-mgt fw for QCA988x + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca988x + DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct +endef + +define Package/ath10k-firmware-qca9887-ct +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.1 firmware for QCA9887 devices + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca9887 +endef +define Package/ath10k-firmware-qca9887-ct-htt +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.1 htt-mgt fw for QCA9887 + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca9887 + DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct +endef + +define Package/ath10k-firmware-qca988x-ct/description +Alternative ath10k firmware for QCA988X from Candela Technologies. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.1.php +This firmware will NOT be used unless the standard ath10k-firmware-qca988x +is un-selected since the driver will try to load firmware-5.bin before +firmware-2.bin +endef +define Package/ath10k-firmware-qca988x-ct-htt/description +Alternative ath10k firmware for QCA988X from Candela Technologies. +Uses normal HTT TX data path for management frames, which improves +stability in busy networks and fixes .11r authentication. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.1.php +This firmware selects and requires the ath10k-ct driver. +endef + +define Package/ath10k-firmware-qca9887-ct/description +Alternative ath10k firmware for QCA9887 from Candela Technologies. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.1.php +This firmware conflicts with the standard 9887 firmware, so select only +one. +endef +define Package/ath10k-firmware-qca9887-ct-htt/description +Alternative ath10k firmware for QCA9887 from Candela Technologies. +Uses normal HTT TX data path for management frames, which improves +stability in busy networks and fixes .11r authentication. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.1.php +This firmware selects and requires the ath10k-ct driver. +endef + +define Package/ath10k-firmware-qca99x0-ct/description +Alternative ath10k firmware for QCA99x0 from Candela Technologies. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.4.php +This firmware conflicts with the standard 99x0 firmware, so select only +one. +endef +define Package/ath10k-firmware-qca99x0-ct-htt/description +Alternative ath10k firmware for QCA99x0 from Candela Technologies. +Uses normal HTT TX data path for management frames, which improves +stability in busy networks and may be required for .11r authentication. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.4.php +This firmware selects and requires the ath10k-ct driver. +endef + +define Package/ath10k-firmware-qca9984-ct/description +Alternative ath10k firmware for QCA9984 from Candela Technologies. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.4.php +This firmware conflicts with the standard 9984 firmware, so select only +one. +endef +define Package/ath10k-firmware-qca9984-ct-htt/description +Alternative ath10k firmware for QCA9984 from Candela Technologies. +Uses normal HTT TX data path for management frames, which improves +stability in busy networks and may be required for .11r authentication. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.4.php +This firmware selects and requires the ath10k-ct driver. +endef + +define Package/ath10k-firmware-qca4019-ct/description +Alternative ath10k firmware for IPQ4019 radio from Candela Technologies. +Enables IBSS and other features. Works with standard or ath10k-ct driver. +See: http://www.candelatech.com/ath10k-10.4.php +endef +define Package/ath10k-firmware-qca4019-ct-htt/description +Alternative ath10k firmware for IPQ4019 radio from Candela Technologies. +Uses normal HTT TX data path for management frames, which improves +stability in busy networks and may be required for .11r authentication. +Enables IBSS and other features. +See: http://www.candelatech.com/ath10k-10.4.php +This firmware selects and requires the ath10k-ct driver. +endef + +define Package/ath10k-firmware-qca9888-ct/description +Alternative ath10k firmware for QCA9886 and QCA9888 from Candela Technologies. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.4.php +This firmware conflicts with the standard 9886 and 9888 firmware, so select only +one. +endef +define Package/ath10k-firmware-qca9888-ct-htt/description +Alternative ath10k firmware for QCA9886 and QCA9888 from Candela Technologies. +Uses normal HTT TX data path for management frames, which improves +stability in busy networks and may be required for .11r authentication. +Enables IBSS and other features. See: +http://www.candelatech.com/ath10k-10.4.php +This firmware selects and requires the ath10k-ct driver. +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-qca99x0-ct +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 firmware for QCA99x0 devices + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca99x0 +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 +endef + +define Package/ath10k-firmware-qca9984-ct +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 firmware for QCA9984 devices + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca9984 +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 +endef + +define Package/ath10k-firmware-qca4019-ct +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 firmware for QCA4018/9 + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca4019 +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 +endef + +define Package/ath10k-firmware-qca9888-ct +$(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 fw for QCA9886/8 devices + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca9888 +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 +endef + + + define Package/ath10k-firmware-qca9984 $(Package/ath10k-firmware-default) TITLE:=ath10k firmware for QCA9984 devices @@ -173,6 +477,135 @@ define Package/ath10k-firmware-qca9984/install $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin endef + +# CT related firmware + +define Package/ath10k-firmware-qca9887-ct/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9887) \ + $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-2.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-qca9887-ct-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9887) \ + $(1)/lib/firmware/ath10k/QCA9887/hw1.0/ct-firmware-2.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-qca988x-ct/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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA988X) \ + $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-2.bin +endef +define Package/ath10k-firmware-qca988x-ct-htt/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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA988X) \ + $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ct-firmware-2.bin +endef + +define Package/ath10k-firmware-qca99x0-ct/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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA99X0) \ + $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/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_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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA99X0) \ + $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/ct-firmware-5.bin +endef + +define Package/ath10k-firmware-qca9984-ct/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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9984) \ + $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin +endef +define Package/ath10k-firmware-qca9984-ct-htt/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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9984) \ + $(1)/lib/firmware/ath10k/QCA9984/hw1.0/ct-firmware-5.bin +endef + +define Package/ath10k-firmware-qca4019-ct/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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA4019) \ + $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin +endef +define Package/ath10k-firmware-qca4019-ct-htt/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) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA4019) \ + $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ct-firmware-5.bin +endef + +define Package/ath10k-firmware-qca9888-ct/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 + ln -s \ + ../../cal-pci-0000:01:00.0.bin \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/QCA9888/hw2.0/board-2.bin \ + $(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 +endef +define Package/ath10k-firmware-qca9888-ct-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 + ln -s \ + ../../cal-pci-0000:01:00.0.bin \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/QCA9888/hw2.0/board-2.bin \ + $(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 +endef + $(eval $(call BuildPackage,ath10k-firmware-qca9887)) #$(eval $(call BuildPackage,ath10k-firmware-qca9888)) $(eval $(call BuildPackage,ath10k-firmware-qca988x)) @@ -180,3 +613,16 @@ $(eval $(call BuildPackage,ath10k-firmware-qca988x)) #$(eval $(call BuildPackage,ath10k-firmware-qca6174)) #$(eval $(call BuildPackage,ath10k-firmware-qca9984)) #$(eval $(call BuildPackage,ath10k-firmware-qca4019)) + +$(eval $(call BuildPackage,ath10k-firmware-qca9887-ct)) +$(eval $(call BuildPackage,ath10k-firmware-qca9887-ct-htt)) +$(eval $(call BuildPackage,ath10k-firmware-qca988x-ct)) +$(eval $(call BuildPackage,ath10k-firmware-qca988x-ct-htt)) +$(eval $(call BuildPackage,ath10k-firmware-qca99x0-ct)) +$(eval $(call BuildPackage,ath10k-firmware-qca99x0-ct-htt)) +$(eval $(call BuildPackage,ath10k-firmware-qca9984-ct)) +$(eval $(call BuildPackage,ath10k-firmware-qca9984-ct-htt)) +$(eval $(call BuildPackage,ath10k-firmware-qca4019-ct)) +$(eval $(call BuildPackage,ath10k-firmware-qca4019-ct-htt)) +$(eval $(call BuildPackage,ath10k-firmware-qca9888-ct)) +$(eval $(call BuildPackage,ath10k-firmware-qca9888-ct-htt)) diff --git a/package/kernel/ath10k-ct/Makefile b/package/kernel/ath10k-ct/Makefile index 16930a13a..dbf9d8cd6 100644 --- a/package/kernel/ath10k-ct/Makefile +++ b/package/kernel/ath10k-ct/Makefile @@ -8,14 +8,14 @@ PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/greearb/ath10k-ct.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2020-04-29 -PKG_SOURCE_VERSION:=3637be6f6baf99e85a7f0b27f80a99a2f2a5f78d -PKG_MIRROR_HASH:=97cf22a4a57381c7eb7a9b8a8b1e347e9711ce51c89db971b4ab9a35af476ece +PKG_SOURCE_DATE:=2019-09-09 +PKG_SOURCE_VERSION:=5e8cd86f90dac966d12df6ece84ac41458d0e95f +PKG_MIRROR_HASH:=dc1097f3a7b4b7e346918f206746d00a0b7df07ae3be9b89be55dfaef3cbbe45 -# Build the 5.4 ath10k-ct driver version. Other option is "-4.19". -# Probably this should match as closely as +# Build the 4.19 ath10k-ct driver version. Other options are "-4.16", or +# leave un-defined for 4.7 kernel. Probably this should match as closely as # possible to whatever mac80211 backports version is being used. -CT_KVER="-5.4" +CT_KVER="-4.19" PKG_MAINTAINER:=Ben Greear PKG_BUILD_PARALLEL:=1 diff --git a/package/kernel/ath10k-ct/patches/161-ath10k-add-support-for-configuring-management-packet.patch b/package/kernel/ath10k-ct/patches/161-ath10k-add-support-for-configuring-management-packet.patch new file mode 100644 index 000000000..e67003c5a --- /dev/null +++ b/package/kernel/ath10k-ct/patches/161-ath10k-add-support-for-configuring-management-packet.patch @@ -0,0 +1,89 @@ +From: Sriram R +Date: Mon, 10 Sep 2018 11:09:40 +0530 +Subject: [PATCH] ath10k: add support for configuring management packet rate + +By default the firmware uses 1Mbps and 6Mbps rate for management packets +in 2G and 5G bands respectively. But when the user selects different +basic rates from the userspace, we need to send the management +packets at the lowest basic rate selected by the user. + +This change makes use of WMI_VDEV_PARAM_MGMT_RATE param for configuring the +management packets rate to the firmware. + +Chipsets Tested : QCA988X, QCA9887, QCA9984 +FW Tested : 10.2.4-1.0-41, 10.4-3.6.104 + +Signed-off-by: Sriram R +Signed-off-by: Kalle Valo + +Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f279294e9ee22a8f306fdc8e4181cf555e6f0f70 +--- +--- a/ath10k-4.19/mac.c ++++ b/ath10k-4.19/mac.c +@@ -157,6 +157,22 @@ u8 ath10k_mac_bitrate_to_idx(const struc + return 0; + } + ++static int ath10k_mac_get_rate_hw_value(int bitrate) ++{ ++ int i; ++ u8 hw_value_prefix = 0; ++ ++ if (ath10k_mac_bitrate_is_cck(bitrate)) ++ hw_value_prefix = WMI_RATE_PREAMBLE_CCK << 6; ++ ++ for (i = 0; i < sizeof(ath10k_rates); i++) { ++ if (ath10k_rates[i].bitrate == bitrate) ++ return hw_value_prefix | ath10k_rates[i].hw_value; ++ } ++ ++ return -EINVAL; ++} ++ + static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss) + { + switch ((mcs_map >> (2 * nss)) & 0x3) { +@@ -6405,9 +6421,10 @@ static void ath10k_bss_info_changed(stru + struct cfg80211_chan_def def; + u32 vdev_param, pdev_param, slottime, preamble; + u16 bitrate, hw_value; +- u8 rate; +- int rateidx, ret = 0; ++ u8 rate, basic_rate_idx; ++ int rateidx, ret = 0, hw_rate_code; + enum nl80211_band band; ++ const struct ieee80211_supported_band *sband; + + mutex_lock(&ar->conf_mutex); + +@@ -6613,6 +6630,30 @@ static void ath10k_bss_info_changed(stru + arvif->vdev_id, ret); + } + ++ if (changed & BSS_CHANGED_BASIC_RATES) { ++ if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) { ++ mutex_unlock(&ar->conf_mutex); ++ return; ++ } ++ ++ sband = ar->hw->wiphy->bands[def.chan->band]; ++ basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1; ++ bitrate = sband->bitrates[basic_rate_idx].bitrate; ++ ++ hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate); ++ if (hw_rate_code < 0) { ++ ath10k_warn(ar, "bitrate not supported %d\n", bitrate); ++ mutex_unlock(&ar->conf_mutex); ++ return; ++ } ++ ++ vdev_param = ar->wmi.vdev_param->mgmt_rate; ++ ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ++ hw_rate_code); ++ if (ret) ++ ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret); ++ } ++ + mutex_unlock(&ar->conf_mutex); + } + diff --git a/package/kernel/ath10k-ct/patches/162-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch b/package/kernel/ath10k-ct/patches/162-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch new file mode 100644 index 000000000..a24029983 --- /dev/null +++ b/package/kernel/ath10k-ct/patches/162-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch @@ -0,0 +1,66 @@ +From: Sriram R +Date: Wed, 3 Oct 2018 08:43:50 +0530 +Subject: [PATCH] ath10k: fix possible out of bound access of ath10k_rates array + +While using 'ath10k_mac_get_rate_hw_value()' to obtain the hw value +from the passed bitrate, there is a chance of out of bound array access +when wrong bitrate is passed. This is fixed by comparing the bitrates +within the correct size of the ath10k_rates array. + +Fixes commit f279294e9ee2 ("ath10k: add support for configuring management +packet rate"). Also correction made to some indents used in the above commit. + +Signed-off-by: Sriram R +Signed-off-by: Kalle Valo + +Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e141eea7dd8525dd1ef7a925459e455b4d307f +--- +--- a/ath10k-4.19/mac.c ++++ b/ath10k-4.19/mac.c +@@ -165,7 +165,7 @@ static int ath10k_mac_get_rate_hw_value( + if (ath10k_mac_bitrate_is_cck(bitrate)) + hw_value_prefix = WMI_RATE_PREAMBLE_CCK << 6; + +- for (i = 0; i < sizeof(ath10k_rates); i++) { ++ for (i = 0; i < ARRAY_SIZE(ath10k_rates); i++) { + if (ath10k_rates[i].bitrate == bitrate) + return hw_value_prefix | ath10k_rates[i].hw_value; + } +@@ -6636,22 +6636,22 @@ static void ath10k_bss_info_changed(stru + return; + } + +- sband = ar->hw->wiphy->bands[def.chan->band]; +- basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1; +- bitrate = sband->bitrates[basic_rate_idx].bitrate; +- +- hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate); +- if (hw_rate_code < 0) { +- ath10k_warn(ar, "bitrate not supported %d\n", bitrate); +- mutex_unlock(&ar->conf_mutex); +- return; +- } ++ sband = ar->hw->wiphy->bands[def.chan->band]; ++ basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1; ++ bitrate = sband->bitrates[basic_rate_idx].bitrate; ++ ++ hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate); ++ if (hw_rate_code < 0) { ++ ath10k_warn(ar, "bitrate not supported %d\n", bitrate); ++ mutex_unlock(&ar->conf_mutex); ++ return; ++ } + +- vdev_param = ar->wmi.vdev_param->mgmt_rate; +- ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, +- hw_rate_code); +- if (ret) +- ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret); ++ vdev_param = ar->wmi.vdev_param->mgmt_rate; ++ ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ++ hw_rate_code); ++ if (ret) ++ ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret); + } + + mutex_unlock(&ar->conf_mutex); diff --git a/package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch b/package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch new file mode 100644 index 000000000..f6fd75b7e --- /dev/null +++ b/package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch @@ -0,0 +1,43 @@ +From: Pradeep kumar Chitrapu +Date: Mon, 10 Dec 2018 20:56:11 -0800 +Subject: ath10k: fix incorrect multicast/broadcast rate setting + +Invalid rate code is sent to firmware when multicast rate value of 0 is +sent to driver indicating disabled case, causing broken mesh path. +so fix that. + +Tested on QCA9984 with firmware 10.4-3.6.1-00827 + +Fixes: cd93b83ad92 ("ath10k: support for multicast rate control") +Co-developed-by: Zhi Chen +Signed-off-by: Zhi Chen +Signed-off-by: Pradeep Kumar Chitrapu + +Origin: other, https://patchwork.kernel.org/patch/10723033/ + +--- a/ath10k-4.19/mac.c ++++ b/ath10k-4.19/mac.c +@@ -6421,8 +6421,8 @@ static void ath10k_bss_info_changed(stru + struct cfg80211_chan_def def; + u32 vdev_param, pdev_param, slottime, preamble; + u16 bitrate, hw_value; +- u8 rate, basic_rate_idx; +- int rateidx, ret = 0, hw_rate_code; ++ u8 rate, basic_rate_idx, rateidx; ++ int ret = 0, hw_rate_code, mcast_rate; + enum nl80211_band band; + const struct ieee80211_supported_band *sband; + +@@ -6595,7 +6595,11 @@ static void ath10k_bss_info_changed(stru + if (changed & BSS_CHANGED_MCAST_RATE && + !WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) { + band = def.chan->band; +- rateidx = vif->bss_conf.mcast_rate[band] - 1; ++ mcast_rate = vif->bss_conf.mcast_rate[band]; ++ if (mcast_rate > 0) ++ rateidx = mcast_rate - 1; ++ else ++ rateidx = ffs(vif->bss_conf.basic_rates) - 1; + + if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) + rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX; 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..cd570a100 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,9 @@ 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-4.19/mac.c ++++ b/ath10k-4.19/mac.c +@@ -6617,6 +6617,7 @@ static void ath10k_bss_info_changed(stru "mac vdev %d mcast_rate %x\n", arvif->vdev_id, rate); @@ -19,7 +19,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 +@@ -6625,6 +6626,7 @@ static void ath10k_bss_info_changed(stru "failed to set mcast rate on vdev %i: %d\n", arvif->vdev_id, ret); @@ -27,7 +27,7 @@ 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 +@@ -6651,6 +6653,7 @@ static void ath10k_bss_info_changed(stru return; } 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-4.16_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch similarity index 85% rename from package/kernel/ath10k-ct/patches/201-ath10k-add-LED-and-GPIO-controlling-support-for-various-chipsets.patch rename to package/kernel/ath10k-ct/patches/201-ath10k-4.16_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch index c20800209..b454796fc 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-4.16_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 ++++++++++ - 12 files changed, 314 insertions(+), 1 deletion(-) - create mode 100644 ath10k-5.4/leds.c - create mode 100644 ath10k-5.4/leds.h ---- a/ath10k-5.4/Kconfig -+++ b/ath10k-5.4/Kconfig -@@ -66,6 +66,16 @@ config ATH10K_DEBUGFS + ath10k-4.16/Kconfig | 10 +++ + ath10k-4.16/Makefile | 1 + + ath10k-4.16/core.c | 22 +++++++ + ath10k-4.16/core.h | 9 ++- + ath10k-4.16/hw.h | 1 + + ath10k-4.16/leds.c | 103 ++++++++++++++++++++++++++++++ + ath10k-4.16/leds.h | 45 +++++++++++++ + ath10k-4.16/mac.c | 1 + + ath10k-4.16/wmi-ops.h | 32 ++++++++++ + ath10k-4.16/wmi-tlv.c | 2 + + ath10k-4.16/wmi.c | 54 ++++++++++++++++ + ath10k-4.16/wmi.h | 35 ++++++++++ + 12 files changed, 314 insertions(+), 1 deletion(-) + create mode 100644 ath10k-4.16/leds.c + create mode 100644 ath10k-4.16/leds.h +--- a/ath10k-4.19/Kconfig ++++ b/ath10k-4.19/Kconfig +@@ -64,6 +64,16 @@ config ATH10K_DEBUGFS If unsure, say Y to make it easier to debug problems. @@ -101,8 +101,8 @@ v13: config ATH10K_SPECTRAL bool "Atheros ath10k spectral scan support" depends on ATH10K_DEBUGFS ---- a/ath10k-5.4/Makefile -+++ b/ath10k-5.4/Makefile +--- a/ath10k-4.19/Makefile ++++ b/ath10k-4.19/Makefile @@ -19,6 +19,7 @@ ath10k_core-$(CONFIG_ATH10K_SPECTRAL) += ath10k_core-$(CONFIG_NL80211_TESTMODE) += testmode.o ath10k_core-$(CONFIG_ATH10K_TRACING) += trace.o @@ -111,9 +111,9 @@ v13: 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 @@ +--- a/ath10k-4.19/core.c ++++ b/ath10k-4.19/core.c +@@ -35,6 +35,7 @@ #include "testmode.h" #include "wmi-ops.h" #include "coredump.h" @@ -121,47 +121,47 @@ 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 +@@ -72,6 +73,7 @@ static const struct ath10k_hw_params ath + .id = QCA988X_HW_2_0_VERSION, .dev_id = QCA988X_2_0_DEVICE_ID, - .bus = ATH10K_BUS_PCI, .name = "qca988x hw2.0", + .led_pin = 1, .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 + .id = QCA9887_HW_1_0_VERSION, .dev_id = QCA9887_1_0_DEVICE_ID, - .bus = ATH10K_BUS_PCI, .name = "qca9887 hw1.0", + .led_pin = 1, .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 +@@ -301,6 +304,7 @@ static const struct ath10k_hw_params ath + .id = QCA99X0_HW_2_0_DEV_VERSION, .dev_id = QCA99X0_2_0_DEVICE_ID, - .bus = ATH10K_BUS_PCI, .name = "qca99x0 hw2.0", + .led_pin = 17, .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 +@@ -339,6 +343,7 @@ static const struct ath10k_hw_params ath + .id = QCA9984_HW_1_0_DEV_VERSION, .dev_id = QCA9984_1_0_DEVICE_ID, - .bus = ATH10K_BUS_PCI, .name = "qca9984/qca9994 hw1.0", + .led_pin = 17, .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 +@@ -382,6 +387,7 @@ static const struct ath10k_hw_params ath + .id = QCA9888_HW_2_0_DEV_VERSION, .dev_id = QCA9888_2_0_DEVICE_ID, - .bus = ATH10K_BUS_PCI, .name = "qca9888 hw2.0", + .led_pin = 17, .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, +@@ -3167,6 +3173,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 +@@ -3421,9 +3431,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 +@@ -3481,6 +3500,8 @@ void ath10k_core_unregister(struct ath10 if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags)) return; @@ -200,9 +200,9 @@ 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 -@@ -14,6 +14,7 @@ +--- a/ath10k-4.19/core.h ++++ b/ath10k-4.19/core.h +@@ -25,6 +25,7 @@ #include #include #include @@ -210,7 +210,15 @@ v13: #include "htt.h" #include "htc.h" -@@ -1469,6 +1470,13 @@ struct ath10k { +@@ -1138,7 +1139,6 @@ struct ath10k { + u32 low_5ghz_chan; + u32 high_5ghz_chan; + bool ani_enabled; +- + bool p2p; + bool ct_all_pkts_htt; /* CT firmware only: native-wifi for all pkts */ + +@@ -1389,6 +1389,13 @@ struct ath10k { } testmode; struct { @@ -224,9 +232,9 @@ v13: /* protected by data_lock */ 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-4.19/hw.h ++++ b/ath10k-4.19/hw.h +@@ -508,6 +508,7 @@ struct ath10k_hw_params { const char *name; u32 patch_load_addr; int uart_pin; @@ -235,7 +243,7 @@ v13: /* Type of hw cycle counter wraparound logic, for more info --- /dev/null -+++ b/ath10k-5.4/leds.c ++++ b/ath10k-4.19/leds.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2005-2011 Atheros Communications Inc. @@ -341,7 +349,7 @@ v13: +} + --- /dev/null -+++ b/ath10k-5.4/leds.h ++++ b/ath10k-4.19/leds.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018, The Linux Foundation. All rights reserved. @@ -384,9 +392,9 @@ v13: + +#endif +#endif /* _LEDS_H_ */ ---- a/ath10k-5.4/mac.c -+++ b/ath10k-5.4/mac.c -@@ -24,6 +24,7 @@ +--- a/ath10k-4.19/mac.c ++++ b/ath10k-4.19/mac.c +@@ -34,6 +34,7 @@ #include "wmi-tlv.h" #include "wmi-ops.h" #include "wow.h" @@ -394,12 +402,12 @@ v13: /*********/ /* Rates */ ---- a/ath10k-5.4/wmi-ops.h -+++ b/ath10k-5.4/wmi-ops.h +--- a/ath10k-4.19/wmi-ops.h ++++ b/ath10k-4.19/wmi-ops.h @@ -218,7 +218,10 @@ struct wmi_ops { - struct sk_buff *(*gen_bb_timing) - (struct ath10k *ar, - const struct wmi_bb_timing_cfg_arg *arg); + struct sk_buff *(*gen_echo)(struct ath10k *ar, u32 value); + struct sk_buff *(*gen_pdev_get_tpc_table_cmdid)(struct ath10k *ar, + u32 param); + struct sk_buff *(*gen_gpio_config)(struct ath10k *ar, u32 gpio_num, + u32 input, u32 pull_type, u32 intr_mode); @@ -407,7 +415,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 * +@@ -1079,6 +1082,35 @@ ath10k_wmi_force_fw_hang(struct ath10k * return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->force_fw_hang_cmdid); } @@ -443,9 +451,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 -@@ -4364,6 +4364,8 @@ static const struct wmi_ops wmi_tlv_ops +--- a/ath10k-4.19/wmi-tlv.c ++++ b/ath10k-4.19/wmi-tlv.c +@@ -3976,6 +3976,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 +462,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 -@@ -8295,6 +8295,49 @@ ath10k_wmi_op_gen_peer_set_param(struct +--- a/ath10k-4.19/wmi.c ++++ b/ath10k-4.19/wmi.c +@@ -8070,6 +8070,49 @@ ath10k_wmi_op_gen_peer_set_param(struct return skb; } @@ -506,7 +514,7 @@ v13: static struct sk_buff * ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id, enum wmi_sta_ps_mode psmode) -@@ -10094,6 +10137,9 @@ static const struct wmi_ops wmi_ops = { +@@ -9821,6 +9864,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 +524,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -10164,6 +10210,8 @@ static const struct wmi_ops wmi_10_1_ops +@@ -9891,6 +9937,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 +533,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -10243,6 +10291,8 @@ static const struct wmi_ops wmi_10_2_ops +@@ -9969,6 +10017,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,16 +542,16 @@ v13: /* .gen_pdev_enable_adaptive_cca not implemented */ }; -@@ -10314,6 +10364,8 @@ static const struct wmi_ops wmi_10_2_4_o +@@ -10039,6 +10089,8 @@ static const struct wmi_ops wmi_10_2_4_o + .gen_pdev_enable_adaptive_cca = 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, + .gen_gpio_config = ath10k_wmi_op_gen_gpio_config, + .gen_gpio_output = ath10k_wmi_op_gen_gpio_output, /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -10395,6 +10447,8 @@ static const struct wmi_ops wmi_10_4_ops +@@ -10119,6 +10171,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 +560,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-4.19/wmi.h ++++ b/ath10k-4.19/wmi.h +@@ -3084,6 +3084,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-4.16-use-tpt-trigger-by-default.patch similarity index 76% rename from package/kernel/ath10k-ct/patches/202-ath10k-use-tpt-trigger-by-default.patch rename to package/kernel/ath10k-ct/patches/202-ath10k-4.16-use-tpt-trigger-by-default.patch index b1c7bae19..562137fd3 100644 --- a/package/kernel/ath10k-ct/patches/202-ath10k-use-tpt-trigger-by-default.patch +++ b/package/kernel/ath10k-ct/patches/202-ath10k-4.16-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-4.16/core.h | 4 ++++ + ath10k-4.16/leds.c | 4 +--- + ath10k-4.16/mac.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) ---- a/ath10k-5.4/core.h -+++ b/ath10k-5.4/core.h -@@ -1573,6 +1573,10 @@ struct ath10k { +--- a/ath10k-4.19/core.h ++++ b/ath10k-4.19/core.h +@@ -1488,6 +1488,10 @@ struct ath10k { u8 csi_data[4096]; u16 csi_data_len; @@ -27,8 +27,8 @@ Signed-off-by: Mathias Kresin /* must be last */ u8 drv_priv[0] __aligned(sizeof(void *)); }; ---- a/ath10k-5.4/leds.c -+++ b/ath10k-5.4/leds.c +--- a/ath10k-4.19/leds.c ++++ b/ath10k-4.19/leds.c @@ -81,9 +81,7 @@ int ath10k_leds_register(struct ath10k * ar->leds.cdev.name = ar->leds.label; @@ -40,10 +40,10 @@ 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 -@@ -10367,7 +10367,7 @@ int ath10k_mac_register(struct ath10k *a - ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; +--- a/ath10k-4.19/mac.c ++++ b/ath10k-4.19/mac.c +@@ -9982,7 +9982,7 @@ int ath10k_mac_register(struct ath10k *a + wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST); #ifdef CPTCFG_MAC80211_LEDS - ieee80211_create_tpt_led_trigger(ar->hw, diff --git a/package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch b/package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch new file mode 100644 index 000000000..d770948f7 --- /dev/null +++ b/package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch @@ -0,0 +1,39 @@ +From bbf0a8af2261bc7ae39b227ff6a1e9f45a008c27 Mon Sep 17 00:00:00 2001 +From: Sven Eckelmann +Date: Mon, 30 Jul 2018 17:31:41 +0200 +Subject: [PATCH] ath10k: Limit available channels via DT ieee80211-freq-limit + +Tri-band devices (1x 2.4GHz + 2x 5GHz) often incorporate special filters in +the RX and TX path. These filtered channel can in theory still be used by +the hardware but the signal strength is reduced so much that it makes no +sense. + +There is already a DT property to limit the available channels but ath10k +has to manually call this functionality to limit the currrently set wiphy +channels further. + +Signed-off-by: Sven Eckelmann + +Forwarded: https://patchwork.kernel.org/patch/10549245/ +--- + drivers/net/wireless/ath/ath10k/mac.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/ath10k-4.19/mac.c ++++ b/ath10k-4.19/mac.c +@@ -18,6 +18,7 @@ + + #include "mac.h" + ++#include + #include + #include + #include +@@ -9706,6 +9707,7 @@ int ath10k_mac_register(struct ath10k *a + ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band; + } + ++ wiphy_read_of_freq_limits(ar->hw->wiphy); + ath10k_mac_setup_ht_vht_cap(ar); + + ar->hw->wiphy->interface_modes = 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 41b917089..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 -@@ -10180,6 +10180,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..a3a939440 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,5 +1,19 @@ ---- a/ath10k-5.4/htt.h -+++ b/ath10k-5.4/htt.h +--- a/ath10k-4.19/htt.h ++++ b/ath10k-4.19/htt.h +@@ -237,7 +237,11 @@ enum htt_rx_ring_flags { + }; + + #define HTT_RX_RING_SIZE_MIN 128 ++#ifndef CONFIG_ATH10K_SMALLBUFFERS + #define HTT_RX_RING_SIZE_MAX 2048 ++#else ++#define HTT_RX_RING_SIZE_MAX 512 ++#endif + #define HTT_RX_RING_SIZE HTT_RX_RING_SIZE_MAX + #define HTT_RX_RING_FILL_LEVEL (((HTT_RX_RING_SIZE) / 2) - 1) + #define HTT_RX_RING_FILL_LEVEL_DUAL_MAC (HTT_RX_RING_SIZE - 1) +--- a/ath10k-5.2/htt.h ++++ b/ath10k-5.2/htt.h @@ -225,7 +225,11 @@ enum htt_rx_ring_flags { }; 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..517be89da 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,5 +1,55 @@ ---- a/ath10k-5.4/pci.c -+++ b/ath10k-5.4/pci.c +--- a/ath10k-4.19/pci.c ++++ b/ath10k-4.19/pci.c +@@ -142,7 +142,11 @@ static struct ce_attr host_ce_config_wla + .flags = CE_ATTR_FLAGS, + .src_nentries = 0, + .src_sz_max = 2048, ++#ifndef CONFIG_ATH10K_SMALLBUFFERS + .dest_nentries = 512, ++#else ++ .dest_nentries = 128, ++#endif + .recv_cb = ath10k_pci_htt_htc_rx_cb, + }, + +@@ -151,7 +155,11 @@ static struct ce_attr host_ce_config_wla + .flags = CE_ATTR_FLAGS, + .src_nentries = 0, + .src_sz_max = 2048, ++#ifndef CONFIG_ATH10K_SMALLBUFFERS + .dest_nentries = 128, ++#else ++ .dest_nentries = 64, ++#endif + .recv_cb = ath10k_pci_htc_rx_cb, + }, + +@@ -178,7 +186,11 @@ static struct ce_attr host_ce_config_wla + .flags = CE_ATTR_FLAGS, + .src_nentries = 0, + .src_sz_max = 512, ++#ifndef CONFIG_ATH10K_SMALLBUFFERS + .dest_nentries = 512, ++#else ++ .dest_nentries = 128, ++#endif + .recv_cb = ath10k_pci_htt_rx_cb, + }, + +@@ -203,7 +215,11 @@ static struct ce_attr host_ce_config_wla + .flags = CE_ATTR_FLAGS, + .src_nentries = 0, + .src_sz_max = 2048, ++#ifndef CONFIG_ATH10K_SMALLBUFFERS + .dest_nentries = 128, ++#else ++ .dest_nentries = 96, ++#endif + .recv_cb = ath10k_pci_pktlog_rx_cb, + }, + +--- a/ath10k-5.2/pci.c ++++ b/ath10k-5.2/pci.c @@ -131,7 +131,11 @@ static struct ce_attr host_ce_config_wla .flags = CE_ATTR_FLAGS, .src_nentries = 0, diff --git a/package/kernel/linux/modules/wireless.mk b/package/kernel/linux/modules/wireless.mk index 72e2bf477..7b1c66356 100644 --- a/package/kernel/linux/modules/wireless.mk +++ b/package/kernel/linux/modules/wireless.mk @@ -41,3 +41,24 @@ define KernelPackage/net-rtl8192su/description endef $(eval $(call KernelPackage,net-rtl8192su)) + + +define KernelPackage/owl-loader + SUBMENU:=$(WIRELESS_MENU) + TITLE:=Owl loader for initializing Atheros PCI(e) Wifi chips + DEPENDS:=@PCI_SUPPORT + KCONFIG:=CONFIG_OWL_LOADER + FILES:=$(LINUX_DIR)/drivers/misc/owl-loader.ko + AUTOLOAD:=$(call AutoProbe,owl-loader) +endef + +define KernelPackage/owl-loader/description + Kernel module that helps to initialize certain Qualcomm + Atheros' PCI(e) Wifi chips, which have the init data + (which contains the PCI device ID for example) stored + together with the calibration data in the file system. + + This is necessary for devices like the Cisco Meraki Z1. +endef + +$(eval $(call KernelPackage,owl-loader)) diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile index 1782bae0f..d26bcb813 100644 --- a/package/kernel/mac80211/Makefile +++ b/package/kernel/mac80211/Makefile @@ -1,4 +1,4 @@ -# +# # Copyright (C) 2007-2015 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile index f4b37989c..59e00cc54 100644 --- a/package/kernel/mt76/Makefile +++ b/package/kernel/mt76/Makefile @@ -1,16 +1,16 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mt76 -PKG_RELEASE=2 +PKG_RELEASE=1 PKG_LICENSE:=GPLv2 PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/openwrt/mt76 PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2020-04-27 -PKG_SOURCE_VERSION:=5f3ccc7226272198c21ec934d9072a56b0953f47 -PKG_MIRROR_HASH:=6f1a7b7d7b9f4db79d72405baeafa318769eeab270fea4479756f91ac5a2494d +PKG_SOURCE_DATE:=2020-03-10 +PKG_SOURCE_VERSION:=08054d5ab1350fcb8563feb90e6ab7f8f4a0a1b7 +PKG_MIRROR_HASH:=b41a3cab1485c68befb1dcb4c1e426d41705db1b2a57851dafd6e8f75eeea3d7 PKG_MAINTAINER:=Felix Fietkau PKG_BUILD_PARALLEL:=1 @@ -143,7 +143,6 @@ define KernelPackage/mt7615e TITLE:=MediaTek MT7615 wireless driver DEPENDS+=@PCI_SUPPORT +kmod-mt76-core FILES:=\ - $(PKG_BUILD_DIR)/mt7615/mt7615-common.ko \ $(PKG_BUILD_DIR)/mt7615/mt7615e.ko AUTOLOAD:=$(call AutoProbe,mt7615e) endef @@ -192,19 +191,14 @@ ifdef CONFIG_PACKAGE_kmod-mt7603 PKG_MAKE_FLAGS += CONFIG_MT7603E=m endif ifdef CONFIG_PACKAGE_kmod-mt7615e - PKG_MAKE_FLAGS += CONFIG_MT7615_COMMON=m PKG_MAKE_FLAGS += CONFIG_MT7615E=m - ifdef CONFIG_TARGET_mediatek_mt7622 - PKG_MAKE_FLAGS += CONFIG_MT7622_WMAC=y - NOSTDINC_FLAGS += -DCONFIG_MT7622_WMAC - endif endif define Build/Compile +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ $(KERNEL_MAKE_FLAGS) \ $(PKG_MAKE_FLAGS) \ - M="$(PKG_BUILD_DIR)" \ + SUBDIRS="$(PKG_BUILD_DIR)" \ NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \ modules endef @@ -257,9 +251,6 @@ define KernelPackage/mt7615e/install $(PKG_BUILD_DIR)/firmware/mt7615_cr4.bin \ $(PKG_BUILD_DIR)/firmware/mt7615_n9.bin \ $(PKG_BUILD_DIR)/firmware/mt7615_rom_patch.bin \ - $(if $(CONFIG_TARGET_mediatek_mt7622), \ - $(PKG_BUILD_DIR)/firmware/mt7622_n9.bin \ - $(PKG_BUILD_DIR)/firmware/mt7622_rom_patch.bin) \ $(1)/lib/firmware/mediatek endef diff --git a/package/kernel/mwlwifi/Makefile b/package/kernel/mwlwifi/Makefile index 37232fdb3..642d80083 100644 --- a/package/kernel/mwlwifi/Makefile +++ b/package/kernel/mwlwifi/Makefile @@ -15,9 +15,9 @@ PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/kaloz/mwlwifi PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2020-02-06 -PKG_SOURCE_VERSION:=a2fd00bb74c35820dfe233d762690c0433a87ef5 -PKG_MIRROR_HASH:=0eda0e774a87e58e611d6436350e1cf2be3de50fddde334909a07a15b0c9862b +PKG_SOURCE_DATE:=2019-03-02 +PKG_SOURCE_VERSION:=31d9386079b91cc699658c19294e139b62b512bc +PKG_MIRROR_HASH:=7bdd05765d8215a9c293cdcb028d63a04c9e55b337eaac9e8d3659bd86218321 PKG_MAINTAINER:=Imre Kaloz PKG_BUILD_PARALLEL:=1 diff --git a/package/kernel/mwlwifi/patches/001-Fix-compile-with-mac80211-backports-5_3+.patch b/package/kernel/mwlwifi/patches/001-Fix-compile-with-mac80211-backports-5_3+.patch deleted file mode 100644 index fdba575f0..000000000 --- a/package/kernel/mwlwifi/patches/001-Fix-compile-with-mac80211-backports-5_3+.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 182391a3c96ff6ad79bbba0758338a16a66abbd8 Mon Sep 17 00:00:00 2001 -From: DENG Qingfang -Date: Wed, 12 Feb 2020 14:18:58 +0800 -Subject: [PATCH] Fix driver loading with backports 5.3+ - -Commit 747796b2f126 did not solve the issue that it crashes when an older kernel -with a newer backport tries loading it, because it only detects kernel version. - -As net/cfg80211.h in 5.3+ defines VENDOR_CMD_RAW_DATA, use it as a condition. - -Signed-off-by: DENG Qingfang ---- - vendor_cmd.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/vendor_cmd.c -+++ b/vendor_cmd.c -@@ -92,7 +92,7 @@ static const struct wiphy_vendor_command - .subcmd = MWL_VENDOR_CMD_SET_BF_TYPE}, - .flags = WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = mwl_vendor_cmd_set_bf_type, --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0)) -+#ifdef VENDOR_CMD_RAW_DATA - .policy = mwl_vendor_attr_policy, - #endif - }, -@@ -101,7 +101,7 @@ static const struct wiphy_vendor_command - .subcmd = MWL_VENDOR_CMD_GET_BF_TYPE}, - .flags = WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = mwl_vendor_cmd_get_bf_type, --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0)) -+#ifdef VENDOR_CMD_RAW_DATA - .policy = mwl_vendor_attr_policy, - #endif - } diff --git a/package/kernel/mwlwifi/patches/002-disable-AMSDU.patch b/package/kernel/mwlwifi/patches/001-disable-AMSDU.patch similarity index 100% rename from package/kernel/mwlwifi/patches/002-disable-AMSDU.patch rename to package/kernel/mwlwifi/patches/001-disable-AMSDU.patch diff --git a/package/network/utils/iw/Makefile b/package/network/utils/iw/Makefile index 7abf93e01..64438a193 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.0.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/software/network/iw -PKG_HASH:=a2469f677088d7b1070a7fbb28f3c747041697e8f6ec70783339cb1bc27a395f +PKG_HASH:=1e38ea794a223525b2ea7fe78fd14f2a56121e62e21ba5f9dbe8c494b35b5c0d PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 @@ -46,8 +46,7 @@ TARGET_CPPFLAGS:= \ -I$(STAGING_DIR)/usr/include/libnl-tiny \ $(TARGET_CPPFLAGS) \ -DCONFIG_LIBNL20 \ - -D_GNU_SOURCE \ - -flto + -D_GNU_SOURCE ifeq ($(BUILD_VARIANT),full) TARGET_CPPFLAGS += -DIW_FULL @@ -56,7 +55,7 @@ endif MAKE_FLAGS += \ CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -ffunction-sections -fdata-sections" \ - LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections -flto" \ + LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections" \ NL1FOUND="" NL2FOUND=Y \ NLLIBNAME="libnl-tiny" \ LIBS="-lm -lnl-tiny" \ 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 6b65f6184..5f15684d3 100644 --- a/package/network/utils/iw/patches/001-nl80211_h_sync.patch +++ b/package/network/utils/iw/patches/001-nl80211_h_sync.patch @@ -1,41 +1,45 @@ --- a/nl80211.h +++ b/nl80211.h -@@ -2373,6 +2373,9 @@ enum nl80211_commands { - * the allowed channel bandwidth configurations. (u8 attribute) - * Defined by IEEE P802.11ay/D4.0 section 9.4.2.251, Table 13. +@@ -2299,6 +2299,12 @@ enum nl80211_commands { + * This is also used for capability advertisement in the wiphy information, + * with the appropriate sub-attributes. * ++ * @NL80211_ATTR_AIRTIME_WEIGHT: Station's weight when scheduled by the airtime ++ * scheduler. ++ * + * @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 +2838,8 @@ enum nl80211_attrs { - NL80211_ATTR_WIPHY_EDMG_CHANNELS, - NL80211_ATTR_WIPHY_EDMG_BW_CONFIG, +@@ -2748,6 +2754,10 @@ enum nl80211_attrs { + NL80211_ATTR_PEER_MEASUREMENTS, + ++ NL80211_ATTR_AIRTIME_WEIGHT, ++ + NL80211_ATTR_WIPHY_ANTENNA_GAIN, + /* add attributes here, update the policy in nl80211.c */ __NL80211_ATTR_AFTER_LAST, -@@ -5484,6 +5489,10 @@ 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_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. -+ * - * @NUM_NL80211_EXT_FEATURES: number of extended features. - * @MAX_NL80211_EXT_FEATURES: highest extended feature index. +@@ -3125,6 +3135,9 @@ enum nl80211_sta_bss_param { + * might not be fully accurate. + * @NL80211_STA_INFO_CONNECTED_TO_GATE: set to true if STA has a path to a + * mesh gate (u8, 0 or 1) ++ * @NL80211_STA_INFO_TX_DURATION: aggregate PPDU duration for all frames ++ * sent to the station (u64, usec) ++ * @NL80211_STA_INFO_AIRTIME_WEIGHT: current airtime weight for station (u16) + * @__NL80211_STA_INFO_AFTER_LAST: internal + * @NL80211_STA_INFO_MAX: highest possible station info attribute */ -@@ -5529,6 +5538,8 @@ 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, +@@ -3168,6 +3181,8 @@ enum nl80211_sta_info { + NL80211_STA_INFO_RX_MPDUS, + NL80211_STA_INFO_FCS_ERROR_COUNT, + NL80211_STA_INFO_CONNECTED_TO_GATE, ++ NL80211_STA_INFO_TX_DURATION, ++ NL80211_STA_INFO_AIRTIME_WEIGHT, - /* add new features before the definition below */ - NUM_NL80211_EXT_FEATURES, + /* keep last */ + __NL80211_STA_INFO_AFTER_LAST, diff --git a/package/network/utils/iw/patches/120-antenna_gain.patch b/package/network/utils/iw/patches/120-antenna_gain.patch index f8d537fe1..c81bcab60 100644 --- a/package/network/utils/iw/patches/120-antenna_gain.patch +++ b/package/network/utils/iw/patches/120-antenna_gain.patch @@ -1,6 +1,6 @@ --- a/phy.c +++ b/phy.c -@@ -855,3 +855,30 @@ static int handle_get_txq(struct nl80211 +@@ -843,3 +843,30 @@ static int handle_get_txq(struct nl80211 COMMAND(get, txq, "", NL80211_CMD_GET_WIPHY, 0, CIB_PHY, handle_get_txq, "Get TXQ parameters."); diff --git a/package/network/utils/iw/patches/130-survey-bss-rx-time.patch b/package/network/utils/iw/patches/130-survey-bss-rx-time.patch deleted file mode 100644 index d488c141c..000000000 --- a/package/network/utils/iw/patches/130-survey-bss-rx-time.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/survey.c -+++ b/survey.c -@@ -60,6 +60,9 @@ static int print_survey_handler(struct n - if (sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_RX]) - printf("\tchannel receive time:\t\t%llu ms\n", - (unsigned long long)nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_RX])); -+ if (sinfo[NL80211_SURVEY_INFO_TIME_BSS_RX]) -+ printf("\tchannel BSS receive time:\t%llu ms\n", -+ (unsigned long long)nla_get_u64(sinfo[NL80211_SURVEY_INFO_TIME_BSS_RX])); - if (sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_TX]) - printf("\tchannel transmit time:\t\t%llu ms\n", - (unsigned long long)nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_TX])); diff --git a/package/network/utils/iw/patches/200-reduce_size.patch b/package/network/utils/iw/patches/200-reduce_size.patch index 58613d59a..07ea7113e 100644 --- a/package/network/utils/iw/patches/200-reduce_size.patch +++ b/package/network/utils/iw/patches/200-reduce_size.patch @@ -38,23 +38,7 @@ --- a/info.c +++ b/info.c -@@ -164,6 +164,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])); -+#ifdef IW_FULL - 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 - nla_for_each_nested(nl_iftype, tb_band[NL80211_BAND_ATTR_IFTYPE_DATA], rem_band) - print_he_info(nl_iftype); - } -+#endif - if (tb_band[NL80211_BAND_ATTR_FREQS]) { - if (!band_had_freq) { - printf("\t\tFrequencies:\n"); -@@ -213,6 +215,7 @@ next: +@@ -205,6 +205,7 @@ next: } } @@ -62,7 +46,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: +@@ -221,6 +222,7 @@ next: printf("\n"); } } @@ -70,7 +54,7 @@ } } -@@ -294,6 +298,7 @@ next: +@@ -286,6 +288,7 @@ next: printf("\tCoverage class: %d (up to %dm)\n", coverage, 450 * coverage); } @@ -78,7 +62,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: +@@ -297,6 +300,7 @@ next: cipher_name(ciphers[i])); } } @@ -86,7 +70,7 @@ if (tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX] && tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX]) -@@ -324,11 +330,13 @@ next: +@@ -316,11 +320,13 @@ next: printf("\t\t * %s\n", iftype_name(nla_type(nl_mode))); } @@ -100,7 +84,7 @@ if (tb_msg[NL80211_ATTR_INTERFACE_COMBINATIONS]) { struct nlattr *nl_combi; -@@ -425,6 +433,7 @@ broken_combination: +@@ -417,6 +423,7 @@ broken_combination: printf("\tinterface combinations are not supported\n"); } @@ -108,7 +92,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: +@@ -514,6 +521,7 @@ broken_combination: printf("\t\t * wake up on TCP connection\n"); } } @@ -116,7 +100,7 @@ if (tb_msg[NL80211_ATTR_ROAM_SUPPORT]) printf("\tDevice supports roaming.\n"); -@@ -560,6 +570,7 @@ broken_combination: +@@ -552,6 +560,7 @@ broken_combination: } } @@ -124,7 +108,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: +@@ -616,6 +625,7 @@ broken_combination: if (features & NL80211_FEATURE_ND_RANDOM_MAC_ADDR) printf("\tDevice supports randomizing MAC-addr in net-detect scans.\n"); } @@ -132,7 +116,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 +@@ -740,6 +750,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 +124,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 +@@ -751,6 +762,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 +134,7 @@ { --- a/scan.c +++ b/scan.c -@@ -1195,6 +1195,9 @@ static void print_ht_op(const uint8_t ty +@@ -1197,6 +1197,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 +144,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 +@@ -1524,6 +1527,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,7 +159,7 @@ [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[ +@@ -1533,21 +1544,15 @@ 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), }, @@ -198,7 +182,7 @@ }; 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 +@@ -2026,6 +2031,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 +190,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 +@@ -2035,6 +2041,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, +@@ -721,3 +724,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); +#endif --- a/phy.c +++ b/phy.c -@@ -369,6 +369,7 @@ err_out: - free(cac_trigger_argv); - return err; +@@ -359,6 +359,7 @@ static int handle_cac(struct nl80211_sta + + return 0; } +#ifdef IW_FULL TOPLEVEL(cac, "channel [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n" "freq [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n" "freq [5|10|20|40|80|80+80|160] [ []]", -@@ -380,6 +381,7 @@ COMMAND(cac, trigger, +@@ -370,6 +371,7 @@ COMMAND(cac, trigger, NL80211_CMD_RADAR_DETECT, 0, CIB_NETDEV, handle_cac_trigger, "Start or trigger a channel availability check (CAC) looking to look for\n" "radars on the given channel."); diff --git a/package/network/utils/iwinfo/Makefile b/package/network/utils/iwinfo/Makefile index b1b60e671..cee7253a3 100644 --- a/package/network/utils/iwinfo/Makefile +++ b/package/network/utils/iwinfo/Makefile @@ -11,9 +11,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git -PKG_SOURCE_DATE:=2020-03-22 -PKG_SOURCE_VERSION:=9f5a7c4f9b78cb2de8fe5dd7af55bf0221706402 -PKG_MIRROR_HASH:=d62cae4b3d2f65c189f179c3dabf1c8c244c5de801439c483ea87dcf8e85b476 +PKG_SOURCE_DATE:=2019-10-16 +PKG_SOURCE_VERSION:=07315b6fdb2566a8626d8a1e4de76eb30456fe17 +PKG_MIRROR_HASH:=924914a51b8a668779e41dc2f40adfc1ae51846ea8b013de3e45999b4d04eecd PKG_MAINTAINER:=Jo-Philipp Wich PKG_LICENSE:=GPL-2.0 @@ -33,7 +33,7 @@ define Package/libiwinfo CATEGORY:=Libraries TITLE:=Generalized Wireless Information Library (iwinfo) DEPENDS:=+PACKAGE_kmod-cfg80211:libnl-tiny +libuci +libubus - ABI_VERSION:=20200105 + ABI_VERSION:=20181126 endef define Package/libiwinfo/description diff --git a/package/system/rpcd/Makefile b/package/system/rpcd/Makefile index 3e85f0ce1..653c859ba 100644 --- a/package/system/rpcd/Makefile +++ b/package/system/rpcd/Makefile @@ -12,16 +12,15 @@ PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/rpcd.git -PKG_SOURCE_DATE:=2020-01-05 -PKG_SOURCE_VERSION:=efe51f41d6288fa8503cc4f2efb37a777767d505 +PKG_SOURCE_DATE:=2019-12-10 +PKG_SOURCE_VERSION:=aaa08366e6384d9933a405d1218b03c1b167f9e5 PKG_MAINTAINER:=Jo-Philipp Wich -PKG_MIRROR_HASH:=cf4bd4670ce8d49f5fb97f0e74a817324c1a503c90527282e30365d8b9a2e17a +PKG_MIRROR_HASH:=9b126ab4af26e5bd16e21175ccc24318e0a98afaf60f14199cebd4ec50ed2d8f PKG_LICENSE:=ISC PKG_LICENSE_FILES:= PKG_BUILD_PARALLEL:=1 -PKG_ASLR_PIE_REGULAR:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk diff --git a/package/system/rpcd/files/rpcd.init b/package/system/rpcd/files/rpcd.init index f75d0e0f0..4c701a28e 100755 --- a/package/system/rpcd/files/rpcd.init +++ b/package/system/rpcd/files/rpcd.init @@ -19,3 +19,7 @@ start_service() { reload_service() { procd_send_signal rpcd } + +service_running() { + procd_running rpcd +} diff --git a/target/linux/generic/backport-4.9/041-mm-rename-__alloc_page_frag-to-page_frag_alloc-and-_.patch b/target/linux/generic/backport-4.9/041-mm-rename-__alloc_page_frag-to-page_frag_alloc-and-_.patch new file mode 100644 index 000000000..03481d13c --- /dev/null +++ b/target/linux/generic/backport-4.9/041-mm-rename-__alloc_page_frag-to-page_frag_alloc-and-_.patch @@ -0,0 +1,137 @@ +From: Alexander Duyck +Date: Tue, 10 Jan 2017 16:58:06 -0800 +Subject: [PATCH] mm: rename __alloc_page_frag to page_frag_alloc and + __free_page_frag to page_frag_free + +Patch series "Page fragment updates", v4. + +This patch series takes care of a few cleanups for the page fragments +API. + +First we do some renames so that things are much more consistent. First +we move the page_frag_ portion of the name to the front of the functions +names. Secondly we split out the cache specific functions from the +other page fragment functions by adding the word "cache" to the name. + +Finally I added a bit of documentation that will hopefully help to +explain some of this. I plan to revisit this later as we get things +more ironed out in the near future with the changes planned for the DMA +setup to support eXpress Data Path. + +This patch (of 3): + +This patch renames the page frag functions to be more consistent with +other APIs. Specifically we place the name page_frag first in the name +and then have either an alloc or free call name that we append as the +suffix. This makes it a bit clearer in terms of naming. + +In addition we drop the leading double underscores since we are +technically no longer a backing interface and instead the front end that +is called from the networking APIs. + +Link: http://lkml.kernel.org/r/20170104023854.13451.67390.stgit@localhost.localdomain +Signed-off-by: Alexander Duyck +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + +--- a/include/linux/gfp.h ++++ b/include/linux/gfp.h +@@ -531,9 +531,9 @@ extern void free_hot_cold_page_list(stru + struct page_frag_cache; + extern void __page_frag_drain(struct page *page, unsigned int order, + unsigned int count); +-extern void *__alloc_page_frag(struct page_frag_cache *nc, +- unsigned int fragsz, gfp_t gfp_mask); +-extern void __free_page_frag(void *addr); ++extern void *page_frag_alloc(struct page_frag_cache *nc, ++ unsigned int fragsz, gfp_t gfp_mask); ++extern void page_frag_free(void *addr); + + #define __free_page(page) __free_pages((page), 0) + #define free_page(addr) free_pages((addr), 0) +--- a/include/linux/skbuff.h ++++ b/include/linux/skbuff.h +@@ -2477,7 +2477,7 @@ static inline struct sk_buff *netdev_all + + static inline void skb_free_frag(void *addr) + { +- __free_page_frag(addr); ++ page_frag_free(addr); + } + + void *napi_alloc_frag(unsigned int fragsz); +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -3949,8 +3949,8 @@ void __page_frag_drain(struct page *page + } + EXPORT_SYMBOL(__page_frag_drain); + +-void *__alloc_page_frag(struct page_frag_cache *nc, +- unsigned int fragsz, gfp_t gfp_mask) ++void *page_frag_alloc(struct page_frag_cache *nc, ++ unsigned int fragsz, gfp_t gfp_mask) + { + unsigned int size = PAGE_SIZE; + struct page *page; +@@ -4001,19 +4001,19 @@ refill: + + return nc->va + offset; + } +-EXPORT_SYMBOL(__alloc_page_frag); ++EXPORT_SYMBOL(page_frag_alloc); + + /* + * Frees a page fragment allocated out of either a compound or order 0 page. + */ +-void __free_page_frag(void *addr) ++void page_frag_free(void *addr) + { + struct page *page = virt_to_head_page(addr); + + if (unlikely(put_page_testzero(page))) + __free_pages_ok(page, compound_order(page)); + } +-EXPORT_SYMBOL(__free_page_frag); ++EXPORT_SYMBOL(page_frag_free); + + static void *make_alloc_exact(unsigned long addr, unsigned int order, + size_t size) +--- a/net/core/skbuff.c ++++ b/net/core/skbuff.c +@@ -369,7 +369,7 @@ static void *__netdev_alloc_frag(unsigne + + local_irq_save(flags); + nc = this_cpu_ptr(&netdev_alloc_cache); +- data = __alloc_page_frag(nc, fragsz, gfp_mask); ++ data = page_frag_alloc(nc, fragsz, gfp_mask); + local_irq_restore(flags); + return data; + } +@@ -393,7 +393,7 @@ static void *__napi_alloc_frag(unsigned + { + struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache); + +- return __alloc_page_frag(&nc->page, fragsz, gfp_mask); ++ return page_frag_alloc(&nc->page, fragsz, gfp_mask); + } + + void *napi_alloc_frag(unsigned int fragsz) +@@ -445,7 +445,7 @@ struct sk_buff *__netdev_alloc_skb(struc + local_irq_save(flags); + + nc = this_cpu_ptr(&netdev_alloc_cache); +- data = __alloc_page_frag(nc, len, gfp_mask); ++ data = page_frag_alloc(nc, len, gfp_mask); + pfmemalloc = nc->pfmemalloc; + + local_irq_restore(flags); +@@ -509,7 +509,7 @@ struct sk_buff *__napi_alloc_skb(struct + if (sk_memalloc_socks()) + gfp_mask |= __GFP_MEMALLOC; + +- data = __alloc_page_frag(&nc->page, len, gfp_mask); ++ data = page_frag_alloc(&nc->page, len, gfp_mask); + if (unlikely(!data)) + return NULL; + diff --git a/target/linux/generic/backport-4.9/042-mm-rename-__page_frag-functions-to-__page_frag_cache.patch b/target/linux/generic/backport-4.9/042-mm-rename-__page_frag-functions-to-__page_frag_cache.patch new file mode 100644 index 000000000..cb2bdfc7e --- /dev/null +++ b/target/linux/generic/backport-4.9/042-mm-rename-__page_frag-functions-to-__page_frag_cache.patch @@ -0,0 +1,79 @@ +From: Alexander Duyck +Date: Tue, 10 Jan 2017 16:58:09 -0800 +Subject: [PATCH] mm: rename __page_frag functions to __page_frag_cache, drop + order from drain + +This patch does two things. + +First it goes through and renames the __page_frag prefixed functions to +__page_frag_cache so that we can be clear that we are draining or +refilling the cache, not the frags themselves. + +Second we drop the order parameter from __page_frag_cache_drain since we +don't actually need to pass it since all fragments are either order 0 or +must be a compound page. + +Link: http://lkml.kernel.org/r/20170104023954.13451.5678.stgit@localhost.localdomain +Signed-off-by: Alexander Duyck +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + +--- a/include/linux/gfp.h ++++ b/include/linux/gfp.h +@@ -529,8 +529,7 @@ extern void free_hot_cold_page(struct pa + extern void free_hot_cold_page_list(struct list_head *list, bool cold); + + struct page_frag_cache; +-extern void __page_frag_drain(struct page *page, unsigned int order, +- unsigned int count); ++extern void __page_frag_cache_drain(struct page *page, unsigned int count); + extern void *page_frag_alloc(struct page_frag_cache *nc, + unsigned int fragsz, gfp_t gfp_mask); + extern void page_frag_free(void *addr); +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -3914,8 +3914,8 @@ EXPORT_SYMBOL(free_pages); + * drivers to provide a backing region of memory for use as either an + * sk_buff->head, or to be used in the "frags" portion of skb_shared_info. + */ +-static struct page *__page_frag_refill(struct page_frag_cache *nc, +- gfp_t gfp_mask) ++static struct page *__page_frag_cache_refill(struct page_frag_cache *nc, ++ gfp_t gfp_mask) + { + struct page *page = NULL; + gfp_t gfp = gfp_mask; +@@ -3935,19 +3935,20 @@ static struct page *__page_frag_refill(s + return page; + } + +-void __page_frag_drain(struct page *page, unsigned int order, +- unsigned int count) ++void __page_frag_cache_drain(struct page *page, unsigned int count) + { + VM_BUG_ON_PAGE(page_ref_count(page) == 0, page); + + if (page_ref_sub_and_test(page, count)) { ++ unsigned int order = compound_order(page); ++ + if (order == 0) + free_hot_cold_page(page, false); + else + __free_pages_ok(page, order); + } + } +-EXPORT_SYMBOL(__page_frag_drain); ++EXPORT_SYMBOL(__page_frag_cache_drain); + + void *page_frag_alloc(struct page_frag_cache *nc, + unsigned int fragsz, gfp_t gfp_mask) +@@ -3958,7 +3959,7 @@ void *page_frag_alloc(struct page_frag_c + + if (unlikely(!nc->va)) { + refill: +- page = __page_frag_refill(nc, gfp_mask); ++ page = __page_frag_cache_refill(nc, gfp_mask); + if (!page) + return NULL; + diff --git a/target/linux/generic/files/drivers/misc/owl-loader.c b/target/linux/generic/files/drivers/misc/owl-loader.c new file mode 100644 index 000000000..f11cb2b49 --- /dev/null +++ b/target/linux/generic/files/drivers/misc/owl-loader.c @@ -0,0 +1,246 @@ +/* + * Initialize Owl Emulation Devices + * + * Copyright (C) 2016 Christian Lamparter + * Copyright (C) 2016 Martin Blumenstingl + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + * + * Some devices (like the Cisco Meraki Z1 Cloud Managed Teleworker Gateway) + * need to be able to initialize the PCIe wifi device. Normally, this is done + * during the early stages of booting linux, because the necessary init code + * is read from the memory mapped SPI and passed to pci_enable_ath9k_fixup. + * However,this isn't possible for devices which have the init code for the + * Atheros chip stored on NAND. Hence, this module can be used to initialze + * the chip when the user-space is ready to extract the init code. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct owl_ctx { + struct completion eeprom_load; +}; + +#define EEPROM_FILENAME_LEN 100 + +#define AR5416_EEPROM_MAGIC 0xa55a + +static int ath9k_pci_fixup(struct pci_dev *pdev, const u16 *cal_data, + size_t cal_len) +{ + void __iomem *mem; + const void *cal_end = (void *)cal_data + cal_len; + const struct { + __be16 reg; + __be16 low_val; + __be16 high_val; + } __packed *data; + u16 cmd; + u32 bar0; + bool swap_needed = false; + + if (*cal_data != AR5416_EEPROM_MAGIC) { + if (*cal_data != swab16(AR5416_EEPROM_MAGIC)) { + dev_err(&pdev->dev, "invalid calibration data\n"); + return -EINVAL; + } + + dev_dbg(&pdev->dev, "calibration data needs swapping\n"); + swap_needed = true; + } + + dev_info(&pdev->dev, "fixup device configuration\n"); + + mem = pcim_iomap(pdev, 0, 0); + if (!mem) { + dev_err(&pdev->dev, "ioremap error\n"); + return -EINVAL; + } + + pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &bar0); + pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, + pci_resource_start(pdev, 0)); + pci_read_config_word(pdev, PCI_COMMAND, &cmd); + cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; + pci_write_config_word(pdev, PCI_COMMAND, cmd); + + /* set pointer to first reg address */ + for (data = (const void *) (cal_data + 3); + (const void *) data <= cal_end && data->reg != cpu_to_be16(~0); + data++) { + u32 val; + u16 reg; + + reg = data->reg; + val = data->low_val; + val |= data->high_val << 16; + + if (swap_needed) { + reg = swab16(reg); + val = swahb32(val); + } + +#ifdef CONFIG_LANTIQ + val = swab32(val); +#endif + + __raw_writel(val, mem + reg); + udelay(100); + } + + pci_read_config_word(pdev, PCI_COMMAND, &cmd); + cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); + pci_write_config_word(pdev, PCI_COMMAND, cmd); + + pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, bar0); + pcim_iounmap(pdev, mem); + + pci_disable_device(pdev); + + return 0; +} + +static void owl_fw_cb(const struct firmware *fw, void *context) +{ + struct pci_dev *pdev = (struct pci_dev *) context; + struct owl_ctx *ctx = (struct owl_ctx *) pci_get_drvdata(pdev); + struct ath9k_platform_data *pdata = dev_get_platdata(&pdev->dev); + struct pci_bus *bus; + + complete(&ctx->eeprom_load); + + if (!fw) { + dev_err(&pdev->dev, "no eeprom data received.\n"); + goto release; + } + + /* also note that we are doing *u16 operations on the file */ + if (fw->size > sizeof(pdata->eeprom_data) || fw->size < 0x200 || + (fw->size & 1) == 1) { + dev_err(&pdev->dev, "eeprom file has an invalid size.\n"); + goto release; + } + + if (pdata) { + memcpy(pdata->eeprom_data, fw->data, fw->size); + + /* + * eeprom has been successfully loaded - pass the data to ath9k + * but remove the eeprom_name, so it doesn't try to load it too. + */ + pdata->eeprom_name = NULL; + } + + if (ath9k_pci_fixup(pdev, (const u16 *) fw->data, fw->size)) + goto release; + + pci_lock_rescan_remove(); + bus = pdev->bus; + pci_stop_and_remove_bus_device(pdev); + /* + * the device should come back with the proper + * ProductId. But we have to initiate a rescan. + */ + pci_rescan_bus(bus); + pci_unlock_rescan_remove(); + +release: + release_firmware(fw); +} + +static const char *owl_get_eeprom_name(struct pci_dev *pdev) +{ + struct device *dev = &pdev->dev; + struct ath9k_platform_data *pdata; + char *eeprom_name; + + /* try the existing platform data first */ + pdata = dev_get_platdata(dev); + if (pdata && pdata->eeprom_name) + return pdata->eeprom_name; + + dev_dbg(dev, "using auto-generated eeprom filename\n"); + + eeprom_name = devm_kzalloc(dev, EEPROM_FILENAME_LEN, GFP_KERNEL); + if (!eeprom_name) + return NULL; + + /* this should match the pattern used in ath9k/init.c */ + scnprintf(eeprom_name, EEPROM_FILENAME_LEN, "ath9k-eeprom-pci-%s.bin", + dev_name(dev)); + + return eeprom_name; +} + +static int owl_probe(struct pci_dev *pdev, + const struct pci_device_id *id) +{ + struct owl_ctx *ctx; + const char *eeprom_name; + int err = 0; + + if (pcim_enable_device(pdev)) + return -EIO; + + pcim_pin_device(pdev); + + eeprom_name = owl_get_eeprom_name(pdev); + if (!eeprom_name) { + dev_err(&pdev->dev, "no eeprom filename found.\n"); + return -ENODEV; + } + + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); + if (!ctx) { + dev_err(&pdev->dev, "failed to alloc device context.\n"); + return -ENOMEM; + } + init_completion(&ctx->eeprom_load); + + pci_set_drvdata(pdev, ctx); + err = request_firmware_nowait(THIS_MODULE, true, eeprom_name, + &pdev->dev, GFP_KERNEL, pdev, owl_fw_cb); + if (err) { + dev_err(&pdev->dev, "failed to request caldata (%d).\n", err); + kfree(ctx); + } + return err; +} + +static void owl_remove(struct pci_dev *pdev) +{ + struct owl_ctx *ctx = pci_get_drvdata(pdev); + + if (ctx) { + wait_for_completion(&ctx->eeprom_load); + pci_set_drvdata(pdev, NULL); + kfree(ctx); + } +} + +static const struct pci_device_id owl_pci_table[] = { + { PCI_VDEVICE(ATHEROS, 0xff1c) }, /* PCIe */ + { PCI_VDEVICE(ATHEROS, 0xff1d) }, /* PCI */ + { }, +}; +MODULE_DEVICE_TABLE(pci, owl_pci_table); + +static struct pci_driver owl_driver = { + .name = "owl-loader", + .id_table = owl_pci_table, + .probe = owl_probe, + .remove = owl_remove, +}; +module_pci_driver(owl_driver); +MODULE_AUTHOR("Christian Lamparter "); +MODULE_DESCRIPTION("Initializes Atheros' Owl Emulation devices"); +MODULE_LICENSE("GPL v2"); diff --git a/target/linux/generic/hack-4.14/835-misc-owl_loader.patch b/target/linux/generic/hack-4.14/835-misc-owl_loader.patch new file mode 100644 index 000000000..bf7f7d5cb --- /dev/null +++ b/target/linux/generic/hack-4.14/835-misc-owl_loader.patch @@ -0,0 +1,52 @@ +From dd36f935973d91644449bd9749f6062a2bed821b Mon Sep 17 00:00:00 2001 +From: Christian Lamparter +Date: Fri, 7 Jul 2017 17:26:46 +0200 +Subject: misc: owl-loader for delayed Atheros ath9k fixup + +Some devices (like the Cisco Meraki Z1 Cloud Managed Teleworker Gateway) +need to be able to initialize the PCIe wifi device. Normally, this is done +during the early stages of booting linux, because the necessary init code +is read from the memory mapped SPI and passed to pci_enable_ath9k_fixup. +However,this isn't possible for devices which have the init code for the +Atheros chip stored on NAND in an UBI volume. Hence, this module can be +used to initialze the chip when the user-space is ready to extract the +init code. + +Signed-off-by: Martin Blumenstingl +Signed-off-by: Christian Lamparter +--- + drivers/misc/Kconfig | 12 ++++++++++++ + drivers/misc/Makefile | 1 + + 2 files changed, 13 insertions(+) + +--- a/drivers/misc/Kconfig ++++ b/drivers/misc/Kconfig +@@ -151,6 +151,18 @@ config SGI_IOC4 + If you have an SGI Altix with an IOC4-based card say Y. + Otherwise say N. + ++config OWL_LOADER ++ tristate "Owl loader for initializing Atheros PCI(e) Wifi chips" ++ depends on PCI ++ ---help--- ++ This kernel module helps to initialize certain Qualcomm ++ Atheros' PCI(e) Wifi chips, which have the init data ++ (which contains the PCI device ID for example) stored ++ together with the calibration data in the file system. ++ ++ This is necessary for devices like the Cisco Meraki Z1, say M. ++ Otherwise say N. ++ + config TIFM_CORE + tristate "TI Flash Media interface support" + depends on PCI +--- a/drivers/misc/Makefile ++++ b/drivers/misc/Makefile +@@ -13,6 +13,7 @@ obj-$(CONFIG_ATMEL_TCLIB) += atmel_tclib + obj-$(CONFIG_DUMMY_IRQ) += dummy-irq.o + obj-$(CONFIG_ICS932S401) += ics932s401.o + obj-$(CONFIG_LKDTM) += lkdtm.o ++obj-$(CONFIG_OWL_LOADER) += owl-loader.o + obj-$(CONFIG_TIFM_CORE) += tifm_core.o + obj-$(CONFIG_TIFM_7XX1) += tifm_7xx1.o + obj-$(CONFIG_PHANTOM) += phantom.o diff --git a/target/linux/generic/hack-4.19/835-misc-owl_loader.patch b/target/linux/generic/hack-4.19/835-misc-owl_loader.patch new file mode 100644 index 000000000..bf0fa596a --- /dev/null +++ b/target/linux/generic/hack-4.19/835-misc-owl_loader.patch @@ -0,0 +1,52 @@ +From dd36f935973d91644449bd9749f6062a2bed821b Mon Sep 17 00:00:00 2001 +From: Christian Lamparter +Date: Fri, 7 Jul 2017 17:26:46 +0200 +Subject: misc: owl-loader for delayed Atheros ath9k fixup + +Some devices (like the Cisco Meraki Z1 Cloud Managed Teleworker Gateway) +need to be able to initialize the PCIe wifi device. Normally, this is done +during the early stages of booting linux, because the necessary init code +is read from the memory mapped SPI and passed to pci_enable_ath9k_fixup. +However,this isn't possible for devices which have the init code for the +Atheros chip stored on NAND in an UBI volume. Hence, this module can be +used to initialze the chip when the user-space is ready to extract the +init code. + +Signed-off-by: Martin Blumenstingl +Signed-off-by: Christian Lamparter +--- + drivers/misc/Kconfig | 12 ++++++++++++ + drivers/misc/Makefile | 1 + + 2 files changed, 13 insertions(+) + +--- a/drivers/misc/Kconfig ++++ b/drivers/misc/Kconfig +@@ -164,6 +164,18 @@ config SGI_IOC4 + If you have an SGI Altix with an IOC4-based card say Y. + Otherwise say N. + ++config OWL_LOADER ++ tristate "Owl loader for initializing Atheros PCI(e) Wifi chips" ++ depends on PCI ++ ---help--- ++ This kernel module helps to initialize certain Qualcomm ++ Atheros' PCI(e) Wifi chips, which have the init data ++ (which contains the PCI device ID for example) stored ++ together with the calibration data in the file system. ++ ++ This is necessary for devices like the Cisco Meraki Z1, say M. ++ Otherwise say N. ++ + config TIFM_CORE + tristate "TI Flash Media interface support" + depends on PCI +--- a/drivers/misc/Makefile ++++ b/drivers/misc/Makefile +@@ -14,6 +14,7 @@ obj-$(CONFIG_ATMEL_TCLIB) += atmel_tclib + obj-$(CONFIG_DUMMY_IRQ) += dummy-irq.o + obj-$(CONFIG_ICS932S401) += ics932s401.o + obj-$(CONFIG_LKDTM) += lkdtm/ ++obj-$(CONFIG_OWL_LOADER) += owl-loader.o + obj-$(CONFIG_TIFM_CORE) += tifm_core.o + obj-$(CONFIG_TIFM_7XX1) += tifm_7xx1.o + obj-$(CONFIG_PHANTOM) += phantom.o diff --git a/target/linux/generic/hack-4.9/202-reduce_module_size.patch b/target/linux/generic/hack-4.9/202-reduce_module_size.patch new file mode 100644 index 000000000..e48638677 --- /dev/null +++ b/target/linux/generic/hack-4.9/202-reduce_module_size.patch @@ -0,0 +1,24 @@ +From fd66884da2f96d2a7ea73f58b1b86251b959a913 Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Fri, 7 Jul 2017 16:56:19 +0200 +Subject: kernel: strip unnecessary symbol table information from kernel modules + +reduces default squashfs size on ar71xx by about 4k + +lede-commit: 058d331a39077f159ca8922f1f422a1346d6aa67 +Signed-off-by: Felix Fietkau +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/Makefile ++++ b/Makefile +@@ -398,7 +398,7 @@ KBUILD_AFLAGS_KERNEL := + KBUILD_CFLAGS_KERNEL := + KBUILD_AFLAGS_MODULE := -DMODULE + KBUILD_CFLAGS_MODULE := -DMODULE +-KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds ++KBUILD_LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds $(if $(CONFIG_PROFILING),,-s) + GCC_PLUGINS_CFLAGS := + CLANG_FLAGS := + diff --git a/target/linux/generic/hack-4.9/640-bridge-only-accept-EAP-locally.patch b/target/linux/generic/hack-4.9/640-bridge-only-accept-EAP-locally.patch index 3a71f68b8..ba87420b3 100644 --- a/target/linux/generic/hack-4.9/640-bridge-only-accept-EAP-locally.patch +++ b/target/linux/generic/hack-4.9/640-bridge-only-accept-EAP-locally.patch @@ -7,8 +7,9 @@ When bridging, do not forward EAP frames to other ports, only deliver them locally, regardless of the state. Signed-off-by: Felix Fietkau -[add disable_eap_hack sysfs attribute] -Signed-off-by: Etienne Champetier +--- + net/bridge/br_input.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c @@ -18,7 +19,7 @@ Signed-off-by: Etienne Champetier + BR_INPUT_SKB_CB(skb)->brdev = br->dev; + -+ if (skb->protocol == htons(ETH_P_PAE) && !br->disable_eap_hack) ++ if (skb->protocol == htons(ETH_P_PAE)) + return br_pass_frame_up(skb); + if (p->state == BR_STATE_LEARNING) @@ -29,55 +30,3 @@ Signed-off-by: Etienne Champetier if (IS_ENABLED(CONFIG_INET) && skb->protocol == htons(ETH_P_ARP)) br_do_proxy_arp(skb, br, vid, p); ---- a/net/bridge/br_private.h -+++ b/net/bridge/br_private.h -@@ -295,6 +295,8 @@ struct net_bridge - u16 group_fwd_mask; - u16 group_fwd_mask_required; - -+ bool disable_eap_hack; -+ - /* STP */ - bridge_id designated_root; - bridge_id bridge_id; ---- a/net/bridge/br_sysfs_br.c -+++ b/net/bridge/br_sysfs_br.c -@@ -169,6 +169,30 @@ static ssize_t group_fwd_mask_store(stru - } - static DEVICE_ATTR_RW(group_fwd_mask); - -+static ssize_t disable_eap_hack_show(struct device *d, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct net_bridge *br = to_bridge(d); -+ return sprintf(buf, "%u\n", br->disable_eap_hack); -+} -+ -+static int set_disable_eap_hack(struct net_bridge *br, unsigned long val) -+{ -+ br->disable_eap_hack = !!val; -+ -+ return 0; -+} -+ -+static ssize_t disable_eap_hack_store(struct device *d, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t len) -+{ -+ return store_bridge_parm(d, buf, len, set_disable_eap_hack); -+} -+static DEVICE_ATTR_RW(disable_eap_hack); -+ - static ssize_t priority_show(struct device *d, struct device_attribute *attr, - char *buf) - { -@@ -780,6 +804,7 @@ static struct attribute *bridge_attrs[] - &dev_attr_ageing_time.attr, - &dev_attr_stp_state.attr, - &dev_attr_group_fwd_mask.attr, -+ &dev_attr_disable_eap_hack.attr, - &dev_attr_priority.attr, - &dev_attr_bridge_id.attr, - &dev_attr_root_id.attr, diff --git a/target/linux/generic/hack-4.9/835-misc-owl_loader.patch b/target/linux/generic/hack-4.9/835-misc-owl_loader.patch new file mode 100644 index 000000000..07cd4e580 --- /dev/null +++ b/target/linux/generic/hack-4.9/835-misc-owl_loader.patch @@ -0,0 +1,52 @@ +From dd36f935973d91644449bd9749f6062a2bed821b Mon Sep 17 00:00:00 2001 +From: Christian Lamparter +Date: Fri, 7 Jul 2017 17:26:46 +0200 +Subject: misc: owl-loader for delayed Atheros ath9k fixup + +Some devices (like the Cisco Meraki Z1 Cloud Managed Teleworker Gateway) +need to be able to initialize the PCIe wifi device. Normally, this is done +during the early stages of booting linux, because the necessary init code +is read from the memory mapped SPI and passed to pci_enable_ath9k_fixup. +However,this isn't possible for devices which have the init code for the +Atheros chip stored on NAND in an UBI volume. Hence, this module can be +used to initialze the chip when the user-space is ready to extract the +init code. + +Signed-off-by: Martin Blumenstingl +Signed-off-by: Christian Lamparter +--- + drivers/misc/Kconfig | 12 ++++++++++++ + drivers/misc/Makefile | 1 + + 2 files changed, 13 insertions(+) + +--- a/drivers/misc/Kconfig ++++ b/drivers/misc/Kconfig +@@ -151,6 +151,18 @@ config SGI_IOC4 + If you have an SGI Altix with an IOC4-based card say Y. + Otherwise say N. + ++config OWL_LOADER ++ tristate "Owl loader for initializing Atheros PCI(e) Wifi chips" ++ depends on PCI ++ ---help--- ++ This kernel module helps to initialize certain Qualcomm ++ Atheros' PCI(e) Wifi chips, which have the init data ++ (which contains the PCI device ID for example) stored ++ together with the calibration data in the file system. ++ ++ This is necessary for devices like the Cisco Meraki Z1, say M. ++ Otherwise say N. ++ + config TIFM_CORE + tristate "TI Flash Media interface support" + depends on PCI +--- a/drivers/misc/Makefile ++++ b/drivers/misc/Makefile +@@ -12,6 +12,7 @@ obj-$(CONFIG_ATMEL_TCLIB) += atmel_tclib + obj-$(CONFIG_DUMMY_IRQ) += dummy-irq.o + obj-$(CONFIG_ICS932S401) += ics932s401.o + obj-$(CONFIG_LKDTM) += lkdtm.o ++obj-$(CONFIG_OWL_LOADER) += owl-loader.o + obj-$(CONFIG_TIFM_CORE) += tifm_core.o + obj-$(CONFIG_TIFM_7XX1) += tifm_7xx1.o + obj-$(CONFIG_PHANTOM) += phantom.o