Compare commits
203 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f3f38f40da | ||
|
|
85e04e9f46 | ||
|
|
4cd9ae41c5 | ||
|
|
6ffd4d8a4d | ||
|
|
d2ee15ef76 | ||
|
|
4cd44e5dc7 | ||
|
|
3fecb06fb1 | ||
|
|
b36aa168d8 | ||
|
|
fa2369e59b | ||
|
|
612b64e6c4 | ||
|
|
511859de9b | ||
|
|
ddae86cc69 | ||
|
|
2efcfb1d1a | ||
|
|
ecea10f2b9 | ||
|
|
a8c92e9eda | ||
|
|
844b892a74 | ||
|
|
7e9d84ee4a | ||
|
|
81f3f6540e | ||
|
|
b956f6bd13 | ||
|
|
c61fbdd087 | ||
|
|
5e8b50da15 | ||
|
|
ac5d5d8d09 | ||
|
|
a6caa8fad1 | ||
|
|
3b9e4d6d4c | ||
|
|
d9244a1b5b | ||
|
|
429e4490c4 | ||
|
|
e678cb1595 | ||
|
|
8fa4ed9ef7 | ||
|
|
5c6dfb5bc0 | ||
|
|
607809dcdc | ||
|
|
96d280cc37 | ||
|
|
55ccb04046 | ||
|
|
ee480c50c1 | ||
|
|
5f0e25d966 | ||
|
|
005adba939 | ||
|
|
0974d59b5f | ||
|
|
f40947a8c0 | ||
|
|
65cf72d5d2 | ||
|
|
f9ef0c5705 | ||
|
|
2df0ea042d | ||
|
|
ec6cb33452 | ||
|
|
f141cdd200 | ||
|
|
54b6683390 | ||
|
|
55591e63bc | ||
|
|
35ea808b97 | ||
|
|
5feb0df9bb | ||
|
|
b80a98ae7f | ||
|
|
bfe652c5bd | ||
|
|
5b4e4a38d8 | ||
|
|
4e5a29827f | ||
|
|
c2efc973d5 | ||
|
|
6c020577ae | ||
|
|
efe837de84 | ||
|
|
1df49d98e7 | ||
|
|
b71c7c261b | ||
|
|
b6d8119c53 | ||
|
|
ef3df27507 | ||
|
|
55312cc202 | ||
|
|
3b6f079d8d | ||
|
|
67ed408af2 | ||
|
|
dee8fcfe9f | ||
|
|
d8e0b015e8 | ||
|
|
0232f57e1a | ||
|
|
286c407c3d | ||
|
|
02c6deab8c | ||
|
|
01b624e28e | ||
|
|
14c8ea0245 | ||
|
|
5b9b833f8c | ||
|
|
ab3549a870 | ||
|
|
35413b047c | ||
|
|
55c29c398c | ||
|
|
a89731ad7a | ||
|
|
36373c5ddb | ||
|
|
470f7c046c | ||
|
|
96ee7c8bfd | ||
|
|
96092a8eea | ||
|
|
bf5ea2a8dc | ||
|
|
83381ce95d | ||
|
|
45b586c4a6 | ||
|
|
79b60d878d | ||
|
|
a08394b3c6 | ||
|
|
66cbfeeaae | ||
|
|
eea3a9625c | ||
|
|
c6c3f6bb0a | ||
|
|
794fd4c6cf | ||
|
|
f5b3cd1539 | ||
|
|
bdbda30384 | ||
|
|
2e6bfab8c5 | ||
|
|
dba6f418fa | ||
|
|
27e77922a1 | ||
|
|
81264ebb51 | ||
|
|
39405644d5 | ||
|
|
d5b1f4430f | ||
|
|
798ff37aaa | ||
|
|
168acbb36d | ||
|
|
cf4520d15e | ||
|
|
456e1c60d6 | ||
|
|
e7fae8fc97 | ||
|
|
2bd9d2e08b | ||
|
|
74a8e36975 | ||
|
|
7ae345ecb7 | ||
|
|
76c1c1daea | ||
|
|
f1a3a6b79c | ||
|
|
e4107e30a7 | ||
|
|
83f1015a6c | ||
|
|
9f024d3587 | ||
|
|
b32129d30b | ||
|
|
9da31d0fb4 | ||
|
|
68351990dc | ||
|
|
6e4453aecc | ||
|
|
06f5a8d3e9 | ||
|
|
e7f1313bbb | ||
|
|
f6f0cd54a2 | ||
|
|
1713707673 | ||
|
|
ef391799e3 | ||
|
|
c56ed72d2b | ||
|
|
33732f4a9c | ||
|
|
65030d81f3 | ||
|
|
b33cfb7eb2 | ||
|
|
4edadfb997 | ||
|
|
cf118077cd | ||
|
|
0e9e5b1553 | ||
|
|
9e2a1af62f | ||
|
|
af79c3bccc | ||
|
|
bc0ca20ca9 | ||
|
|
191822b59f | ||
|
|
d0c8875faf | ||
|
|
c9b6bb43ce | ||
|
|
b2660e67f0 | ||
|
|
21bf718b8c | ||
|
|
2d3a93335a | ||
|
|
8fa6107aee | ||
|
|
6a950afde1 | ||
|
|
7cbd39421e | ||
|
|
085f38351f | ||
|
|
6b7eeb74db | ||
|
|
95d5cbdec3 | ||
|
|
2d21357b65 | ||
|
|
b6c01fec92 | ||
|
|
5000fc53a1 | ||
|
|
a0ca72d9ab | ||
|
|
53cd2299ee | ||
|
|
cff3795450 | ||
|
|
cf2b042855 | ||
|
|
887eb669f9 | ||
|
|
d91b52b1a2 | ||
|
|
2a844349fa | ||
|
|
eca8a2ee0d | ||
|
|
3d1c84d424 | ||
|
|
aed6632d31 | ||
|
|
a229907150 | ||
|
|
4668ae3bed | ||
|
|
901bbe2ab9 | ||
|
|
c155900f66 | ||
|
|
8ab2b42fac | ||
|
|
47935940d6 | ||
|
|
da5b5ae9b9 | ||
|
|
f84981f6f8 | ||
|
|
3212290a3b | ||
|
|
6ee0138a6c | ||
|
|
1c5ac590c4 | ||
|
|
8038846b62 | ||
|
|
4e91c4e156 | ||
|
|
4a58a871c4 | ||
|
|
abaf329dad | ||
|
|
177c9ed4b0 | ||
|
|
a1502b0443 | ||
|
|
b6675c2b2e | ||
|
|
eed8f30b98 | ||
|
|
1636e99e80 | ||
|
|
1b4b4e3fae | ||
|
|
c1245ebc96 | ||
|
|
f638ef4325 | ||
|
|
d3c2547cf1 | ||
|
|
f6ab1f1566 | ||
|
|
1d56a7b75d | ||
|
|
49b240cde8 | ||
|
|
d3eabe44d0 | ||
|
|
67595ce380 | ||
|
|
9c6913ccad | ||
|
|
f8902d1ae6 | ||
|
|
5ca066a5c2 | ||
|
|
ae953449f2 | ||
|
|
945db9fb01 | ||
|
|
9298c443df | ||
|
|
d46b00cf0f | ||
|
|
03c35bda03 | ||
|
|
a885f7d3d0 | ||
|
|
67c8e586c8 | ||
|
|
e18c87ef45 | ||
|
|
455ba76bf9 | ||
|
|
dd4d49dcc1 | ||
|
|
44b37774f9 | ||
|
|
a3b6ffe01b | ||
|
|
25e1afb9e1 | ||
|
|
fe197b8b09 | ||
|
|
08d9828b76 | ||
|
|
fd28ef59db | ||
|
|
7a0d9b2eea | ||
|
|
bd3eb071fd | ||
|
|
19ff3f5105 | ||
|
|
44c827215d | ||
|
|
eb15634541 |
@@ -1,4 +1,4 @@
|
||||
src-git packages https://git.openwrt.org/feed/packages.git^d974cd36735353204fac679cb9febd6c9814c326
|
||||
src-git luci https://git.openwrt.org/project/luci.git^35aa5270592f7e837c42aa097f8fbb06faa4017d
|
||||
src-git routing https://git.openwrt.org/feed/routing.git^c82ce8d095a87df32bbd3a89e3cf113721d3ae82
|
||||
src-git telephony https://git.openwrt.org/feed/telephony.git^6f95d6ab3f359ee2ce81c20522700937424d1591
|
||||
src-git packages https://git.openwrt.org/feed/packages.git^2e6bd4cb86682b224803325127d3f777d40b3231
|
||||
src-git luci https://git.openwrt.org/project/luci.git^fb2f36306756d0d0782dcab8413a8bb7ec379e54
|
||||
src-git routing https://git.openwrt.org/feed/routing.git^3f8571194c2765ed31aa73459e86c2ebf943d27d
|
||||
src-git telephony https://git.openwrt.org/feed/telephony.git^036cd451c35b82b3d8cac519864986894d9f6958
|
||||
|
||||
@@ -6,9 +6,9 @@ ifdef CONFIG_TESTING_KERNEL
|
||||
KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER)
|
||||
endif
|
||||
|
||||
LINUX_VERSION-4.14 = .162
|
||||
LINUX_VERSION-4.14 = .180
|
||||
|
||||
LINUX_KERNEL_HASH-4.14.162 = f65170224cd4359ce8b2793b492bd8127abdd0b91350484e001bce13f0c98b4b
|
||||
LINUX_KERNEL_HASH-4.14.180 = 444ef973d9b6a6ea174e4a9086f0aea980d8575d13302e431ad688f22e27ed0e
|
||||
|
||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||
|
||||
@@ -28,15 +28,8 @@ $(eval $(call TestHostCommand,proper-umask, \
|
||||
|
||||
$(eval $(call SetupHostCommand,gcc, \
|
||||
Please install the GNU C Compiler (gcc) 4.8 or later, \
|
||||
$(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
gcc48 --version | grep gcc, \
|
||||
gcc49 --version | grep gcc, \
|
||||
gcc5 --version | grep gcc, \
|
||||
gcc6 --version | grep gcc, \
|
||||
gcc7 --version | grep gcc, \
|
||||
gcc8 --version | grep gcc, \
|
||||
gcc9 --version | grep gcc, \
|
||||
$(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
gcc --version | grep -E 'Apple.(LLVM|clang)' ))
|
||||
|
||||
$(eval $(call TestHostCommand,working-gcc, \
|
||||
@@ -47,15 +40,8 @@ $(eval $(call TestHostCommand,working-gcc, \
|
||||
|
||||
$(eval $(call SetupHostCommand,g++, \
|
||||
Please install the GNU C++ Compiler (g++) 4.8 or later, \
|
||||
$(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
g++48 --version | grep g++, \
|
||||
g++49 --version | grep g++, \
|
||||
g++5 --version | grep g++, \
|
||||
g++6 --version | grep g++, \
|
||||
g++7 --version | grep g++, \
|
||||
g++8 --version | grep g++, \
|
||||
g++9 --version | grep g++, \
|
||||
$(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
g++ --version | grep -E 'Apple.(LLVM|clang)' ))
|
||||
|
||||
$(eval $(call TestHostCommand,working-g++, \
|
||||
|
||||
@@ -26,13 +26,13 @@ PKG_CONFIG_DEPENDS += \
|
||||
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
|
||||
|
||||
VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER))
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),19.07.0)
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),19.07.3)
|
||||
|
||||
VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r10860-a3ffeb413b)
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r11063-85e04e9f46)
|
||||
|
||||
VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO))
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.openwrt.org/releases/19.07.0)
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.openwrt.org/releases/19.07.3)
|
||||
|
||||
VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST))
|
||||
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt)
|
||||
|
||||
@@ -183,7 +183,7 @@ if VERSIONOPT
|
||||
config VERSION_REPO
|
||||
string
|
||||
prompt "Release repository"
|
||||
default "http://downloads.openwrt.org/releases/19.07.0"
|
||||
default "http://downloads.openwrt.org/releases/19.07.3"
|
||||
help
|
||||
This is the repository address embedded in the image, it defaults
|
||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||
|
||||
@@ -85,6 +85,11 @@ dr342|\
|
||||
dr531)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0xf800" "0x10000"
|
||||
;;
|
||||
gl-ar150|\
|
||||
gl-domino|\
|
||||
gl-mifi)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x8000" "0x10000"
|
||||
;;
|
||||
rambutan)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x100000" "0x20000" "0x20000"
|
||||
|
||||
@@ -32,7 +32,11 @@ yuncore,a782|\
|
||||
yuncore,xd4200)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000"
|
||||
;;
|
||||
netgear,wndr3700)
|
||||
glinet,gl-ar150)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x8000" "0x10000"
|
||||
;;
|
||||
netgear,wndr3700|\
|
||||
netgear,wndr3700-v2)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x10000"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=2019.01
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_HASH:=50bd7e5a466ab828914d080d5f6a432345b500e8fba1ad3b7b61e95e60d51c22
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
From 599f7aa541bb5a658cbfd2af73bd9d2f6e828d43 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Packham <judge.packham@gmail.com>
|
||||
Date: Mon, 18 Mar 2019 20:51:58 +1300
|
||||
Subject: [PATCH] ARM: kirkwood: disable dcache for Kirkwood boards
|
||||
|
||||
Prior to commit 93b283d49f93 ("ARM: CPU: arm926ejs: Consolidate cache
|
||||
routines to common file") the kirkwood boards didn't have and dcache
|
||||
support. The network and usb drivers rely on this. Set
|
||||
CONFIG_SYS_DCACHE_OFF in the Kirkwood specific config.h.
|
||||
|
||||
Reported-by: Leigh Brown <leigh@solinno.co.uk>
|
||||
Signed-off-by: Chris Packham <judge.packham@gmail.com>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
---
|
||||
arch/arm/mach-kirkwood/include/mach/config.h | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-kirkwood/include/mach/config.h b/arch/arm/mach-kirkwood/include/mach/config.h
|
||||
index fcd903887b..aea60688c2 100644
|
||||
--- a/arch/arm/mach-kirkwood/include/mach/config.h
|
||||
+++ b/arch/arm/mach-kirkwood/include/mach/config.h
|
||||
@@ -26,6 +26,12 @@
|
||||
#define CONFIG_KIRKWOOD_EGIGA_INIT /* Enable GbePort0/1 for kernel */
|
||||
#define CONFIG_KIRKWOOD_RGMII_PAD_1V8 /* Set RGMII Pad voltage to 1.8V */
|
||||
#define CONFIG_KIRKWOOD_PCIE_INIT /* Enable PCIE Port0 for kernel */
|
||||
+/*
|
||||
+ * Disable the dcache. Currently the network driver (mvgbe.c) and USB
|
||||
+ * EHCI driver (ehci-marvell.c) and possibly others rely on the data
|
||||
+ * cache being disabled.
|
||||
+ */
|
||||
+#define CONFIG_SYS_DCACHE_OFF
|
||||
|
||||
/*
|
||||
* By default kwbimage.cfg from board specific folder is used
|
||||
--
|
||||
2.20.1
|
||||
|
||||
@@ -49,6 +49,7 @@ define Package/binutils
|
||||
CATEGORY:=Development
|
||||
TITLE:=binutils
|
||||
DEPENDS:=+objdump +ar
|
||||
ALTERNATIVES:=200:/usr/bin/strings:/usr/bin/binutils-strings
|
||||
endef
|
||||
|
||||
define Package/objdump
|
||||
@@ -114,7 +115,7 @@ endef
|
||||
define Package/binutils/install
|
||||
$(INSTALL_DIR) $(1)/usr $(1)/bin
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/bin/ $(1)/usr/
|
||||
mv $(1)/usr/bin/strings $(1)/bin/strings
|
||||
mv $(1)/usr/bin/strings $(1)/usr/bin/binutils-strings
|
||||
rm -f $(1)/usr/bin/objdump
|
||||
rm -f $(1)/usr/bin/ar
|
||||
endef
|
||||
|
||||
@@ -52,6 +52,7 @@ MAKE_FLAGS = \
|
||||
NO_LIBAUDIT=1 \
|
||||
NO_LIBCRYPTO=1 \
|
||||
NO_LIBUNWIND=1 \
|
||||
NO_LIBCAP=1 \
|
||||
CROSS_COMPILE="$(TARGET_CROSS)" \
|
||||
CC="$(TARGET_CC)" \
|
||||
LD="$(TARGET_CROSS)ld" \
|
||||
|
||||
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=ath10k-firmware
|
||||
PKG_SOURCE_DATE:=2019-10-03
|
||||
PKG_SOURCE_VERSION:=d622d160e9f552ead68d9ae81b715422892dc2ef
|
||||
PKG_MIRROR_HASH:=9d56a9942b7be7effdeed6d0688a9bdcfae76a2921a630714c3e2d8390ea8934
|
||||
PKG_MIRROR_HASH:=2e504e071c3f896d629c4cfffe7ff4b5f1acdb4fecd3f01e8ff8c73e87a67cc7
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
@@ -2,6 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wireless-regdb
|
||||
PKG_VERSION:=2019.06.03
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=@KERNEL/software/network/wireless-regdb/
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Willi <martin@strongswan.org>
|
||||
Date: Tue, 2 Jul 2019 16:19:44 +0200
|
||||
Subject: [PATCH] wireless-regdb: Fix overlapping ranges for Switzerland and
|
||||
Liechtenstein
|
||||
|
||||
The commit referenced below changes the 5GHz frequency range 5250-5330
|
||||
to 5150-5330, making that range overlapping with the existing range
|
||||
5170-5250. This imposes DFS limitations and a reduced maximum power
|
||||
level for the range 5170-5250.
|
||||
|
||||
The change of the frequency range seems not intentional. Instead the
|
||||
commit should have changed the 5170-5250 range to 5150-5250, and the
|
||||
5250-5330 range to 5250-5350 (see [1]).
|
||||
|
||||
[1] https://www.ofcomnet.ch/api/rir/1010/05
|
||||
|
||||
Fixes: 957a7cff72a3 ("wireless-regdb: update regulatory rules for Switzerland (CH), and Liechtenstein (LI) on 5GHz")
|
||||
Signed-off-by: Martin Willi <martin@strongswan.org>
|
||||
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
|
||||
|
||||
diff --git a/db.txt b/db.txt
|
||||
index d47ab94c3aa5..37393e6a793e 100644
|
||||
--- a/db.txt
|
||||
+++ b/db.txt
|
||||
@@ -271,8 +271,8 @@ country CF: DFS-FCC
|
||||
# transmitter power control is in use: 5250-5330@23db, 5490-5710@30db
|
||||
country CH: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5150 - 5330 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
(5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
@@ -747,8 +747,8 @@ country LC: DFS-ETSI
|
||||
# transmitter power control is in use: 5250-5330@23db, 5490-5710@30db
|
||||
country LI: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5150 - 5330 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
(5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
@@ -0,0 +1,843 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Emil Petersky <emil.petersky@streamunlimited.com>
|
||||
Date: Tue, 17 Sep 2019 09:49:19 +0200
|
||||
Subject: [PATCH] wireless-regdb: Fix ranges of EU countries as they are
|
||||
harmonized since 2014
|
||||
|
||||
This patch unites entries for EU countries, as they have been harmonized
|
||||
latest by July 2014...
|
||||
|
||||
EU decision 2005/513/EC:
|
||||
https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
EU decision 2006/771/EC:
|
||||
https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
|
||||
Signed-off-by: Emil Petersky <emil.petersky@streamunlimited.com>
|
||||
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
|
||||
|
||||
diff --git a/db.txt b/db.txt
|
||||
index 2e149b6e0ea2..a57452479a9b 100644
|
||||
--- a/db.txt
|
||||
+++ b/db.txt
|
||||
@@ -87,12 +87,20 @@ country AS: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
+# AT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# AT: https://www.rtr.at/en/tk/Spektrum5GHz/1997_bmvit-info-052010en.pdf
|
||||
+# AT: acceptance https://www.ris.bka.gv.at/Dokumente/BgblAuth/BGBLA_2014_II_63/BGBLA_2014_II_63.pdfsig
|
||||
country AT: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
# Source:
|
||||
@@ -139,12 +147,22 @@ country BD: DFS-JP
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
+# BE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# BE: https://www.ibpt.be/public/files/en/21760/B03-01_2.1_EN.pdf
|
||||
+# BE: https://www.ibpt.be/public/files/en/21761/B03-02_2.1_EN.pdf
|
||||
+# BE: https://www.ibpt.be/public/files/en/21762/B03-03_2.1_EN.pdf
|
||||
+# BE: https://www.ibpt.be/public/files/en/22165/B01-28_3.1_EN.pdf
|
||||
country BE: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country BF: DFS-FCC
|
||||
@@ -167,22 +185,29 @@ country BF: DFS-FCC
|
||||
#
|
||||
# Note: The transmit power limits in the 5250-5350 MHz and 5470-5725 MHz bands
|
||||
# can be raised by 3 dBm if TPC is enabled. Refer to BDS EN 301 893 for details.
|
||||
+#
|
||||
+# BG as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# BG: https://crc.bg/files/_en/Electronic_Communications_Revised_EN1.pdf
|
||||
+# BG: acceptance of 2006/771/EC https://crc.bg/files/Pravila_06_12_2018.pdf
|
||||
country BG: DFS-ETSI
|
||||
# Wideband data transmission systems (WDTS) in the 2.4GHz ISM band, ref:
|
||||
# I.22 of the List, BDS EN 300 328
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
# 5 GHz Radio Local Area Networks (RLANs), ref:
|
||||
# II.H01 of the List, BDS EN 301 893
|
||||
- (5170 - 5250 @ 80), (23), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
# II.H01 of the List, I.54 from the List, BDS EN 301 893
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # Short range devices (SRDs) in the 5725-5875 MHz frequency range, ref:
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
# I.43 of the List, BDS EN 300 440-2, BDS EN 300 440-1
|
||||
- (5725 - 5875 @ 80), (14)
|
||||
- # 60 GHz Multiple-Gigabit RLAN Systems, ref:
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
# II.H03 of the List, BDS EN 302 567-2
|
||||
- (57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
+ (57000 - 66000 @ 2160), (40)
|
||||
|
||||
country BH: DFS-JP
|
||||
(2402 - 2482 @ 40), (20)
|
||||
@@ -265,16 +290,22 @@ country CF: DFS-FCC
|
||||
(5490 - 5730 @ 40), (24), DFS
|
||||
(5735 - 5835 @ 40), (30)
|
||||
|
||||
-# Source:
|
||||
-# https://www.ofcomnet.ch/#/fatTable
|
||||
-# Note that the maximum transmitter power can be doubled for 5250-5710MHz if
|
||||
-# transmitter power control is in use: 5250-5330@23db, 5490-5710@30db
|
||||
+# CH as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# CH: https://www.ofcomnet.ch/api/rir/1010/05
|
||||
+# CH: https://www.ofcomnet.ch/api/rir/1010/04
|
||||
+# CH: https://www.ofcomnet.ch/api/rir/1008/12
|
||||
+# CH: https://www.ofcomnet.ch/#/fatTable
|
||||
country CH: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country CI: DFS-FCC
|
||||
@@ -329,26 +360,42 @@ country CX: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
+# CY as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# CY: http://www.mcw.gov.cy/mcw/dec/dec.nsf/all/292484CFC7013DD4C2256EBA0023D447/$file/Sxedio%20Radiosyxnothtwn%20ths%20Dhmokratias-3-8-2018-E2.2(English%20Unified%20Unofficial).pdf?openelement
|
||||
country CY: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
-# Data from http://www.ctu.eu/164/download/VOR/VOR-12-08-2005-34.pdf
|
||||
-# and http://www.ctu.eu/164/download/VOR/VOR-12-05-2007-6-AN.pdf
|
||||
-# Power at 5250 - 5350 MHz and 5470 - 5725 MHz can be doubled if TPC is
|
||||
-# implemented.
|
||||
+# CZ as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# CZ: https://www.ctu.cz/cs/download/vseobecna-opravneni/archiv/vo-r_12-06_2010-09.pdf
|
||||
+# CZ: https://www.ctu.cz/sites/default/files/obsah/ctu/vseobecne-opravneni-c.vo-r/10/12.2017-10/obrazky/vo-r10-122017-10.pdf
|
||||
country CZ: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
(5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
+# DE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+#
|
||||
# Allocation for the 2.4 GHz band (Vfg 10 / 2013, Allgemeinzuteilung von
|
||||
# Frequenzen für die Nutzung in lokalen Netzwerken; Wireless Local Area
|
||||
# Networks (WLAN-Funkanwendungen).
|
||||
@@ -379,16 +426,22 @@ country DE: DFS-ETSI
|
||||
# 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
-# Sources:
|
||||
+# DK as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# DK: https://ens.dk/sites/ens.dk/files/Tele/frekvensplan_0.pdf
|
||||
# 5GHz: https://erhvervsstyrelsen.dk/sites/default/files/007_interface-datanet_5-6_ghz.pdf.pdf
|
||||
# 60GHz: https://erhvervsstyrelsen.dk/sites/default/files/radiograenseflader-63.pdf
|
||||
country DK: DFS-ETSI
|
||||
- (2400 - 2483.5 @ 40), (20)
|
||||
- (5150 - 5250 @ 80), (23), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5350 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5470 - 5725 @ 160), (27), DFS, wmmrule=ETSI
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
# 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
- (57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
+ (57000 - 66000 @ 2160), (40)
|
||||
|
||||
# Source:
|
||||
# http://www.ntrcdom.org/index.php?option=com_content&view=category&layout=blog&id=10&Itemid=55
|
||||
@@ -417,12 +470,20 @@ country EC: DFS-FCC
|
||||
(5490 - 5730 @ 20), (24), DFS
|
||||
(5735 - 5835 @ 20), (30)
|
||||
|
||||
+# EE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# EE: https://www.ttja.ee/et/ettevottele-organisatsioonile/sideteenused/raadioseadmed/wifi-seade
|
||||
+# EE: https://www.itu.int/ITU-D/study_groups/SGP_1998-2002/JGRES09/pdf/estonia.pdf
|
||||
country EE: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country EG: DFS-ETSI
|
||||
@@ -430,17 +491,19 @@ country EG: DFS-ETSI
|
||||
(5170 - 5250 @ 40), (20)
|
||||
(5250 - 5330 @ 40), (20), DFS
|
||||
|
||||
-# Source:
|
||||
-# Cuadro nacional de atribución de frecuencias (CNAF)
|
||||
-# https://avancedigital.gob.es/espectro/Paginas/cnaf.aspx
|
||||
+# ES as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# ES: https://avancedigital.gob.es/espectro/Paginas/cnaf.aspx
|
||||
country ES: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
(5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
- # Short Range Devices (SRD) (ETSI EN 300 440)
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country ET: DFS-ETSI
|
||||
@@ -449,14 +512,18 @@ country ET: DFS-ETSI
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
(5490 - 5710 @ 160), (27), DFS
|
||||
|
||||
+# FI as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
country FI: DFS-ETSI
|
||||
- (2400 - 2483.5 @ 40), (20)
|
||||
- (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5470 - 5725 @ 160), (27), DFS, wmmrule=ETSI
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country FM: DFS-FCC
|
||||
@@ -466,22 +533,34 @@ country FM: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
+# FR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
country FR: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5470 - 5725 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # short range devices (ETSI EN 300 440)
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
+# GB as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0019/136009/Ofcom-Information-Sheet-5-GHz-RLANs.pdf
|
||||
+# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0028/84970/ir-2030.pdf
|
||||
country GB: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country GD: DFS-FCC
|
||||
@@ -523,12 +602,20 @@ country GP: DFS-ETSI
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
(5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
|
||||
+# GR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# GR: https://www.eett.gr/opencms/export/sites/default/EETT_EN/Electronic_Communications/Radio_Communications/TelecommunicationEquipment/Radio_equipment_interface_requirement_2012.pdf
|
||||
+# GR: https://www.eett.gr/opencms/export/sites/default/EETT_EN/Electronic_Communications/Radio_Communications/TelecommunicationEquipment/Radio_equipment_interface_requirement_107.pdf
|
||||
country GR: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country GT: DFS-FCC
|
||||
@@ -563,11 +650,18 @@ country HN: DFS-FCC
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
country HR: DFS-ETSI
|
||||
- (2400 - 2483.5 @ 40), (20)
|
||||
- (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5470 - 5725 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+# HR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# HR: http://tablice.hakom.hr:8080/vis?lang=en
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country HT: DFS-FCC
|
||||
@@ -577,37 +671,42 @@ country HT: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
-# http://stir.nmhh.hu/?oldal=dokumentumGeneralo&root_rendeletelem_id=3&hatalyos=1
|
||||
-# http://english.nmhh.hu/cikk/297/Eljarasi_tajekoztato_a_24_GHzes_es_az_5_GHzes_savban_mukodo_berendezesek_engedelyezeserol
|
||||
-# http://nmhh.hu/dokumentum/319/kis_hatotavolsagu_eszkozok_srdk.pdf
|
||||
+# HU as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# HU: http://stir.nmhh.hu/?oldal=dokumentumGeneralo&root_rendeletelem_id=3&hatalyos=1
|
||||
+# HU: http://english.nmhh.hu/cikk/297/Eljarasi_tajekoztato_a_24_GHzes_es_az_5_GHzes_savban_mukodo_berendezesek_engedelyezeserol
|
||||
+# HU: http://nmhh.hu/dokumentum/319/kis_hatotavolsagu_eszkozok_srdk.pdf
|
||||
country HU: DFS-ETSI
|
||||
- # ref: 2006/771/EK, (EU) 2017/1483, MSZ EN 300 328
|
||||
- # additionally: 100mW @ 10MHz channels, 50mW @ 5MHz (max. 10mW/MHz)
|
||||
- (2400 - 2483.5 @ 40), (20)
|
||||
- # ref: 2005/513/EK
|
||||
- # note: TPC not needed @ 5150-5250
|
||||
- (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- # note: max would be +3dB with TPC @ 5250-5725
|
||||
- (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5470 - 5725 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # "Short Range Devices (SRD)"
|
||||
- # ref: 2006/771/EK, (EU) 2017/1483, MSZ EN 300 440, MSZ EN 302 064
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
- # 60 GHz band channels 1-4, "Fixed outdoor installation not allowed"
|
||||
- # ref: 2006/771/EK, (EU) 2017/1483, MSZ EN 302 567
|
||||
- (57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
+ (57000 - 66000 @ 2160), (40)
|
||||
|
||||
country ID: DFS-JP
|
||||
# ref: http://www.postel.go.id/content/ID/regulasi/standardisasi/kepdir/bwa%205,8%20ghz.pdf
|
||||
(2402 - 2482 @ 20), (20)
|
||||
(5735 - 5815 @ 20), (23)
|
||||
|
||||
+# IE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# IE: https://www.comreg.ie/publication-download/interface-requirements-for-radio-services-in-ireland
|
||||
+# IE: https://www.comreg.ie/publication-download/permitted-short-range-devices-ireland
|
||||
country IE: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country IL: DFS-ETSI
|
||||
@@ -626,20 +725,33 @@ country IR: DFS-JP
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
+# IS as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# IS: https://www.pfs.is/library/Skrar/Tidnir-og-taekni/MHZ_21022019.pdf
|
||||
country IS: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
+# IT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
country IT: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country JM: DFS-FCC
|
||||
@@ -741,16 +853,22 @@ country LC: DFS-ETSI
|
||||
(5490 - 5710 @ 160), (30), DFS
|
||||
(5735 - 5815 @ 80), (30)
|
||||
|
||||
-# Source:
|
||||
-# https://www.ofcomnet.ch/#/fatTable
|
||||
-# Note that the maximum transmitter power can be doubled for 5250-5710MHz if
|
||||
-# transmitter power control is in use: 5250-5330@23db, 5490-5710@30db
|
||||
+# LI as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# LI: https://www.ofcomnet.ch/api/rir/1010/05
|
||||
+# LI: https://www.ofcomnet.ch/api/rir/1010/04
|
||||
+# LI: https://www.ofcomnet.ch/api/rir/1008/12
|
||||
+# LI: https://www.ofcomnet.ch/#/fatTable
|
||||
country LI: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country LK: DFS-FCC
|
||||
@@ -768,28 +886,50 @@ country LS: DFS-ETSI
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
(5490 - 5710 @ 160), (27), DFS
|
||||
|
||||
+# LT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# LT: https://www.rrt.lt/en/radio-spectrum/frequency-management/ or direct link:
|
||||
+# LT: https://www.e-tar.lt/portal/lt/legalAct/6e718fd037a011e69101aaab2992cbcd/dGRioCBBHb
|
||||
country LT: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
+# LU as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# LU: https://assets.ilr.lu/frequences/Documents/ILRLU-1723895916-183.pdf#search=en%20300%20440
|
||||
country LU: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
+# LV as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# LV: http://likumi.lv/doc.php?id=198903
|
||||
country LV: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country MA: DFS-ETSI
|
||||
@@ -875,12 +1015,19 @@ country MR: DFS-ETSI
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
(5490 - 5710 @ 160), (27), DFS
|
||||
|
||||
+# MT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# MT: https://www.mca.org.mt/sites/default/files/NFP_edition%206-1.pdf
|
||||
country MT: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country MU: DFS-FCC
|
||||
@@ -930,34 +1077,36 @@ country NI: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
-# Regulation on the use of frequency space without a license and
|
||||
-# without notification 2015
|
||||
-#
|
||||
-# http://wetten.overheid.nl/BWBR0036378/2015-03-05
|
||||
-
|
||||
+# NL as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# NL: http://wetten.overheid.nl/BWBR0036378/2015-03-05
|
||||
country NL: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
-# Data from http://www.lovdata.no/dokument/SF/forskrift/2012-01-19-77
|
||||
-# Power at 5250 - 5350 MHz, 5470 - 5725 MHz and 5815 – 5850 MHz can
|
||||
-# be doubled if TPC is implemented.
|
||||
-# Up to 2W (or 4W with TPC) is allowed in the 5725 – 5795 MHz band
|
||||
-# which has been merged with 5470 - 5725 MHz to allow wide channels
|
||||
+# NO as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# NO: https://eng.nkom.no/technical/temporary-licenses/mobile-videolink/wireless-cameras-mobile-video-links/_attachment/9947
|
||||
+# NO: http://www.lovdata.no/dokument/SF/forskrift/2012-01-19-77
|
||||
+# In addition to EU NO can use 5725–5795 MHz and 5815–5850 bands with limit of 4 W EIRP (with DFS and TPC)
|
||||
country NO: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
- (5150 - 5250 @ 80), (200 mW), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5470 - 5795 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
- (5815 - 5850 @ 35), (2000 mW), DFS
|
||||
- (17100 - 17300 @ 200), (100 mW)
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country NP: DFS-JP
|
||||
@@ -1020,12 +1169,18 @@ country PK: DFS-JP
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
+# PL as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
country PL: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country PM: DFS-ETSI
|
||||
@@ -1041,14 +1196,19 @@ country PR: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
+# PT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# PT: https://www.anacom.pt/render.jsp?categoryId=336334
|
||||
country PT: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country PW: DFS-FCC
|
||||
@@ -1079,15 +1239,21 @@ country RE: DFS-ETSI
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
(5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
|
||||
+# RO as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# RO: http://www.ancom.org.ro/en/uploads/links_files/ordin_262_2006.pdf
|
||||
country RO: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
-
|
||||
# Source:
|
||||
# http://www.ratel.rs/upload/documents/Plan_namene/Plan_namene-sl_glasnik.pdf
|
||||
country RS: DFS-ETSI
|
||||
@@ -1119,18 +1285,20 @@ country SA: DFS-ETSI
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
(5490 - 5710 @ 160), (27), DFS
|
||||
|
||||
-# Source:
|
||||
-# https://pts.se/globalassets/startpage/dokument/legala-dokument/foreskrifter/radio/beslutade_ptsfs-2018-3-undantagsforeskrifter.pdf
|
||||
+# SE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# SE: https://pts.se/globalassets/startpage/dokument/legala-dokument/foreskrifter/radio/beslutade_ptsfs-2018-3-undantagsforeskrifter.pdf
|
||||
country SE: DFS-ETSI
|
||||
- (2400 - 2483.5 @ 40), (20)
|
||||
- (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
- # note: max would be +3dB with TPC @ 5250-5725
|
||||
- (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5470 - 5725 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # short range devices (ETSI EN 300 440)
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
- (57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
+ (57000 - 66000 @ 2160), (40)
|
||||
|
||||
# Source
|
||||
# https://www.imda.gov.sg/~/media/imda/files/regulation%20licensing%20and%20consultations/ict%20standards/telecommunication%20standards/radio-comms/imdatssrd.pdf?la=en
|
||||
@@ -1144,20 +1312,36 @@ country SG: DFS-FCC
|
||||
# (5470 - 5725 @ 160), (30), DFS
|
||||
(5725 - 5850 @ 80), (30)
|
||||
|
||||
+# SI as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# SI: https://www.akos-rs.si/bwa
|
||||
country SI: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
+# SK as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
+# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
+# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
+# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
+# SK: https://www.teleoff.gov.sk/data/files/25911.pdf
|
||||
+# SK: https://www.teleoff.gov.sk/data/files/41072.pdf
|
||||
+# SK: https://www.teleoff.gov.sk/data/files/49125_vpr-01_2018-rusi-vpr-10_2014a21_2012-nespecifik-srd_021018.pdf
|
||||
country SK: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
- (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI
|
||||
- # 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
+ (2400 - 2483.5 @ 40), (100 mW)
|
||||
+ (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
+ (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
+ (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
+ # short range devices (ETSI EN 300 440-1)
|
||||
+ (5725 - 5875 @ 80), (25 mW)
|
||||
+ # 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
# Source:
|
||||
@@ -0,0 +1,44 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Tunin <hanipouspilot@gmail.com>
|
||||
Date: Sat, 24 Aug 2019 11:48:10 +0300
|
||||
Subject: [PATCH] wireless-regdb: Update regulatory rules for Russia (RU)
|
||||
|
||||
Russian entry is incorrect. According to the last regulations
|
||||
document of Feb 29, 2016, 160 MHz channels and 802.11ad are allowed.
|
||||
|
||||
http://rfs-rf.ru/upload/medialibrary/c1a/prilozhenie-1-k-resheniyu-gkrch-_-16_36_03.pdf
|
||||
|
||||
Note that there was never a DFS requirement in Russia, but always was
|
||||
NO-OUTDOOR on 5GHz.
|
||||
Maximum power is 200mW that is ~23dBm on all 5GHz channels.
|
||||
Also Russia has never been regulated by ETSI.
|
||||
|
||||
EIRP has been reduced by 4dBm because of TPC requirement.
|
||||
|
||||
Signed-off-by: Dmitry Tunin <hanipouspilot@gmail.com>
|
||||
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
|
||||
|
||||
diff --git a/db.txt b/db.txt
|
||||
index f6b2f921416c..9c4b447536e4 100644
|
||||
--- a/db.txt
|
||||
+++ b/db.txt
|
||||
@@ -1349,14 +1349,12 @@ country RS: DFS-ETSI
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
-country RU: DFS-ETSI
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (20), AUTO-BW
|
||||
- (5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
- (5650 - 5730 @ 80), (30), DFS
|
||||
- (5735 - 5835 @ 80), (30)
|
||||
+country RU:
|
||||
+ (2400 - 2483.5 @ 40), (20)
|
||||
+ (5150 - 5350 @ 160), (20), NO-OUTDOOR
|
||||
+ (5650 - 5850 @ 160), (20), NO-OUTDOOR
|
||||
# 60 GHz band channels 1-4, ref: Changes to NLA 124_Order №129_22042015.pdf
|
||||
- (57000 - 66000 @ 2160), (40)
|
||||
+ (57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
|
||||
country RW: DFS-FCC
|
||||
(2402 - 2482 @ 40), (20)
|
||||
@@ -27,7 +27,6 @@ include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define KernelPackage/cryptodev
|
||||
SUBMENU:=Cryptographic API modules
|
||||
DEFAULT:=m if ALL
|
||||
TITLE:=Driver for cryptographic acceleration
|
||||
URL:=http://cryptodev-linux.org/
|
||||
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
|
||||
|
||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=ltq-ptm
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
PKG_LICENSE:=GPL-2.0+
|
||||
|
||||
@@ -336,6 +336,9 @@ static int ptm_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
dma_cache_wback((unsigned long)skb->data, skb->len);
|
||||
}
|
||||
|
||||
/* make the skb unowned */
|
||||
skb_orphan(skb);
|
||||
|
||||
*(struct sk_buff **)((unsigned int)skb->data - byteoff - sizeof(struct sk_buff *)) = skb;
|
||||
/* write back to physical memory */
|
||||
dma_cache_wback((unsigned long)skb->data - byteoff - sizeof(struct sk_buff *), skb->len + byteoff + sizeof(struct sk_buff *));
|
||||
|
||||
@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=4.19.85-1
|
||||
PKG_VERSION:=4.19.120-1
|
||||
PKG_RELEASE:=1
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.85/
|
||||
PKG_HASH:=6a92df43e8c3e2410638d84dfd18773d667757532dd0a911227c9b7d65aee34d
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.120/
|
||||
PKG_HASH:=2bafd75da301a30a5f2b98f433b6545d7b58c1fc3af15e9e9aa085df7f9db1d4
|
||||
|
||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/net/wireless/reg.c
|
||||
+++ b/net/wireless/reg.c
|
||||
@@ -3027,6 +3027,8 @@ void regulatory_hint_country_ie(struct w
|
||||
@@ -3034,6 +3034,8 @@ void regulatory_hint_country_ie(struct w
|
||||
enum environment_cap env = ENVIRON_ANY;
|
||||
struct regulatory_request *request = NULL, *lr;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/* IE len must be evenly divisible by 2 */
|
||||
if (country_ie_len & 0x01)
|
||||
return;
|
||||
@@ -3252,6 +3254,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
@@ -3259,6 +3261,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
|
||||
void regulatory_hint_disconnect(void)
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
- an->ackto = ackto;
|
||||
+ an->ackto = da->ackto;
|
||||
|
||||
spin_lock(&da->qlock);
|
||||
spin_lock_bh(&da->qlock);
|
||||
list_add_tail(&an->list, &da->nodes);
|
||||
@@ -356,20 +354,26 @@ EXPORT_SYMBOL(ath_dynack_node_deinit);
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
From: Linus Lüssing <ll@simonwunderlich.de>
|
||||
Date: Wed, 5 Feb 2020 20:10:43 +0100
|
||||
Subject: ath10k: increase rx buffer size to 2048
|
||||
|
||||
Before, only frames with a maximum size of 1528 bytes could be
|
||||
transmitted between two 802.11s nodes.
|
||||
|
||||
For batman-adv for instance, which adds its own header to each frame,
|
||||
we typically need an MTU of at least 1532 bytes to be able to transmit
|
||||
without fragmentation.
|
||||
|
||||
This patch now increases the maxmimum frame size from 1528 to 1656
|
||||
bytes.
|
||||
|
||||
Tested with two ath10k devices in 802.11s mode, as well as with
|
||||
batman-adv on top of 802.11s with forwarding disabled.
|
||||
|
||||
Fix originally found and developed by Ben Greear.
|
||||
|
||||
Link: https://github.com/greearb/ath10k-ct/issues/89
|
||||
Link: https://github.com/greearb/ath10k-ct/commit/9e5ab25027e0971fa24ccf93373324c08c4e992d
|
||||
Cc: Ben Greear <greearb@candelatech.com>
|
||||
Signed-off-by: Linus Lüssing <ll@simonwunderlich.de>
|
||||
|
||||
Forwarded: https://patchwork.kernel.org/patch/11367055/
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/htt.h
|
||||
+++ b/drivers/net/wireless/ath/ath10k/htt.h
|
||||
@@ -2004,7 +2004,7 @@ struct htt_rx_desc {
|
||||
* Should be: sizeof(struct htt_host_rx_desc) + max rx MSDU size,
|
||||
* rounded up to a cache line size.
|
||||
*/
|
||||
-#define HTT_RX_BUF_SIZE 1920
|
||||
+#define HTT_RX_BUF_SIZE 2048
|
||||
#define HTT_RX_MSDU_SIZE (HTT_RX_BUF_SIZE - (int)sizeof(struct htt_rx_desc))
|
||||
|
||||
/* Refill a bunch of RX buffers for each refill round so that FW/HW can handle
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -8287,6 +8287,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||
@@ -8297,6 +8297,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
int ath10k_mac_register(struct ath10k *ar)
|
||||
{
|
||||
static const u32 cipher_suites[] = {
|
||||
@@ -8577,6 +8592,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -8581,6 +8596,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||
|
||||
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ v9: use SM/MS macros from code.h to simplify shift/mask handling
|
||||
}
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
@@ -7365,12 +7365,7 @@ ath10k_wmi_peer_assoc_fill_10_4(struct a
|
||||
@@ -7378,12 +7378,7 @@ ath10k_wmi_peer_assoc_fill_10_4(struct a
|
||||
struct wmi_10_4_peer_assoc_complete_cmd *cmd = buf;
|
||||
|
||||
ath10k_wmi_peer_assoc_fill_10_2(ar, buf, arg);
|
||||
|
||||
@@ -13,7 +13,7 @@ v2: fix trailing whitespace issue and fix some typos within the commit note
|
||||
2 files changed, 8 insertions(+), 10 deletions(-)
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -4478,13 +4478,6 @@ static struct ieee80211_sta_vht_cap ath1
|
||||
@@ -4480,13 +4480,6 @@ static struct ieee80211_sta_vht_cap ath1
|
||||
vht_cap.cap |= val;
|
||||
}
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ v13:
|
||||
bool p2p;
|
||||
|
||||
struct {
|
||||
@@ -1099,6 +1099,13 @@ struct ath10k {
|
||||
@@ -1100,6 +1100,13 @@ struct ath10k {
|
||||
} testmode;
|
||||
|
||||
struct {
|
||||
@@ -475,7 +475,7 @@ v13:
|
||||
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
@@ -7185,6 +7185,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
@@ -7198,6 +7198,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
return skb;
|
||||
}
|
||||
|
||||
@@ -525,7 +525,7 @@ v13:
|
||||
static struct sk_buff *
|
||||
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
||||
enum wmi_sta_ps_mode psmode)
|
||||
@@ -8796,6 +8839,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
@@ -8809,6 +8852,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,
|
||||
@@ -535,7 +535,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -8866,6 +8912,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
@@ -8879,6 +8925,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,
|
||||
@@ -544,7 +544,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -8937,6 +8985,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
@@ -8950,6 +8998,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,
|
||||
@@ -553,7 +553,7 @@ v13:
|
||||
/* .gen_pdev_enable_adaptive_cca not implemented */
|
||||
};
|
||||
|
||||
@@ -9007,6 +9057,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
@@ -9020,6 +9070,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,
|
||||
@@ -562,7 +562,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9086,6 +9138,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||
@@ -9099,6 +9151,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,
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath10k/core.h
|
||||
@@ -1144,6 +1144,10 @@ struct ath10k {
|
||||
@@ -1145,6 +1145,10 @@ struct ath10k {
|
||||
struct ath10k_radar_found_info last_radar_info;
|
||||
struct work_struct radar_confirmation_work;
|
||||
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
||||
if (ret)
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -8609,7 +8609,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -8613,7 +8613,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
|
||||
|
||||
@@ -43,7 +43,7 @@ Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
|
||||
static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
|
||||
{
|
||||
switch ((mcs_map >> (2 * nss)) & 0x3) {
|
||||
@@ -5472,9 +5488,10 @@ static void ath10k_bss_info_changed(stru
|
||||
@@ -5482,9 +5498,10 @@ static void ath10k_bss_info_changed(stru
|
||||
struct cfg80211_chan_def def;
|
||||
u32 vdev_param, pdev_param, slottime, preamble;
|
||||
u16 bitrate, hw_value;
|
||||
@@ -56,7 +56,7 @@ Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
@@ -5680,6 +5697,30 @@ static void ath10k_bss_info_changed(stru
|
||||
@@ -5690,6 +5707,30 @@ static void ath10k_bss_info_changed(stru
|
||||
arvif->vdev_id, ret);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
|
||||
if (ath10k_rates[i].bitrate == bitrate)
|
||||
return hw_value_prefix | ath10k_rates[i].hw_value;
|
||||
}
|
||||
@@ -5703,22 +5703,22 @@ static void ath10k_bss_info_changed(stru
|
||||
@@ -5713,22 +5713,22 @@ static void ath10k_bss_info_changed(stru
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Origin: other, https://patchwork.kernel.org/patch/10723033/
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -5488,8 +5488,8 @@ static void ath10k_bss_info_changed(stru
|
||||
@@ -5498,8 +5498,8 @@ static void ath10k_bss_info_changed(stru
|
||||
struct cfg80211_chan_def def;
|
||||
u32 vdev_param, pdev_param, slottime, preamble;
|
||||
u16 bitrate, hw_value;
|
||||
@@ -28,7 +28,7 @@ Origin: other, https://patchwork.kernel.org/patch/10723033/
|
||||
enum nl80211_band band;
|
||||
const struct ieee80211_supported_band *sband;
|
||||
|
||||
@@ -5662,7 +5662,11 @@ static void ath10k_bss_info_changed(stru
|
||||
@@ -5672,7 +5672,11 @@ static void ath10k_bss_info_changed(stru
|
||||
if (changed & BSS_CHANGED_MCAST_RATE &&
|
||||
!ath10k_mac_vif_chan(arvif->vif, &def)) {
|
||||
band = def.chan->band;
|
||||
|
||||
@@ -29,7 +29,7 @@ Forwarded: no
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -988,6 +988,40 @@ static inline int ath10k_vdev_setup_sync
|
||||
return 0;
|
||||
return ar->last_wmi_vdev_start_status;
|
||||
}
|
||||
|
||||
+static u32 ath10k_get_max_antenna_gain(struct ath10k *ar,
|
||||
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1474,7 +1474,7 @@ static u8 brcmf_sdio_rxglom(struct brcmf
|
||||
@@ -1480,7 +1480,7 @@ static u8 brcmf_sdio_rxglom(struct brcmf
|
||||
struct sk_buff *pfirst, *pnext;
|
||||
|
||||
int errcode;
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
struct brcmf_sdio_hdrinfo rd_new;
|
||||
|
||||
@@ -1608,7 +1608,6 @@ static u8 brcmf_sdio_rxglom(struct brcmf
|
||||
@@ -1614,7 +1614,6 @@ static u8 brcmf_sdio_rxglom(struct brcmf
|
||||
|
||||
/* Remove superframe header, remember offset */
|
||||
skb_pull(pfirst, rd_new.dat_offset);
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
num = 0;
|
||||
|
||||
/* Validate all the subframe headers */
|
||||
@@ -3416,7 +3415,6 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
@@ -3426,7 +3425,6 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
|
||||
struct brcmf_sdio *bus = sdiodev->bus;
|
||||
struct brcmf_core *core = bus->sdio_core;
|
||||
@@ -47,7 +47,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
u32 value;
|
||||
int err;
|
||||
|
||||
@@ -3459,7 +3457,6 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
@@ -3467,7 +3465,6 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
if (sdiodev->sg_support) {
|
||||
bus->txglom = false;
|
||||
value = 1;
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
From edb6d6885bef82d1eac432dbeca9fbf4ec349d7e Mon Sep 17 00:00:00 2001
|
||||
From: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Date: Thu, 27 Sep 2018 14:59:44 +0000
|
||||
Subject: [PATCH] brcmfmac: reduce timeout for action frame scan
|
||||
|
||||
Finding a common channel to send an action frame out is required for
|
||||
some action types. Since a loop with several scan retry is used to find
|
||||
the channel, a short wait time could be considered for each attempt.
|
||||
This patch reduces the wait time from 1500 to 450 msec for each action
|
||||
frame scan.
|
||||
|
||||
This patch fixes the WFA p2p certification 5.1.20 failure caused by the
|
||||
long action frame send time.
|
||||
|
||||
Signed-off-by: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 9 ++++-----
|
||||
1 file changed, 4 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
@@ -74,7 +74,7 @@
|
||||
#define P2P_AF_MAX_WAIT_TIME msecs_to_jiffies(2000)
|
||||
#define P2P_INVALID_CHANNEL -1
|
||||
#define P2P_CHANNEL_SYNC_RETRY 5
|
||||
-#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(1500)
|
||||
+#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(450)
|
||||
#define P2P_DEFAULT_SLEEP_TIME_VSDB 200
|
||||
|
||||
/* WiFi P2P Public Action Frame OUI Subtypes */
|
||||
@@ -1134,7 +1134,6 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
{
|
||||
struct afx_hdl *afx_hdl = &p2p->afx_hdl;
|
||||
struct brcmf_cfg80211_vif *pri_vif;
|
||||
- unsigned long duration;
|
||||
s32 retry;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
@@ -1150,7 +1149,6 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
* pending action frame tx is cancelled.
|
||||
*/
|
||||
retry = 0;
|
||||
- duration = msecs_to_jiffies(P2P_AF_FRM_SCAN_MAX_WAIT);
|
||||
while ((retry < P2P_CHANNEL_SYNC_RETRY) &&
|
||||
(afx_hdl->peer_chan == P2P_INVALID_CHANNEL)) {
|
||||
afx_hdl->is_listen = false;
|
||||
@@ -1158,7 +1156,8 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
retry);
|
||||
/* search peer on peer's listen channel */
|
||||
schedule_work(&afx_hdl->afx_work);
|
||||
- wait_for_completion_timeout(&afx_hdl->act_frm_scan, duration);
|
||||
+ wait_for_completion_timeout(&afx_hdl->act_frm_scan,
|
||||
+ P2P_AF_FRM_SCAN_MAX_WAIT);
|
||||
if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) ||
|
||||
(!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL,
|
||||
&p2p->status)))
|
||||
@@ -1171,7 +1170,7 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
afx_hdl->is_listen = true;
|
||||
schedule_work(&afx_hdl->afx_work);
|
||||
wait_for_completion_timeout(&afx_hdl->act_frm_scan,
|
||||
- duration);
|
||||
+ P2P_AF_FRM_SCAN_MAX_WAIT);
|
||||
}
|
||||
if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) ||
|
||||
(!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL,
|
||||
@@ -1,79 +0,0 @@
|
||||
From fbf07000960d9c8a13fdc17c6de0230d681c7543 Mon Sep 17 00:00:00 2001
|
||||
From: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Date: Thu, 27 Sep 2018 14:59:49 +0000
|
||||
Subject: [PATCH] brcmfmac: fix full timeout waiting for action frame
|
||||
on-channel tx
|
||||
|
||||
The driver sends an action frame down and waits for a completion signal
|
||||
triggered by the received BRCMF_E_ACTION_FRAME_OFF_CHAN_COMPLETE event
|
||||
to continue the process. However, the action frame could be transmitted
|
||||
either on the current channel or on an off channel. For the on-channel
|
||||
case, only BRCMF_E_ACTION_FRAME_COMPLETE event will be received when
|
||||
the frame is transmitted, which make the driver always wait a full
|
||||
timeout duration. This patch has the completion signal be triggered by
|
||||
receiving the BRCMF_E_ACTION_FRAME_COMPLETE event for the on-channel
|
||||
case.
|
||||
|
||||
This change fixes WFA p2p certification 5.1.19 failure.
|
||||
|
||||
Signed-off-by: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 17 +++++++++++++++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h | 2 ++
|
||||
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
@@ -1457,10 +1457,12 @@ int brcmf_p2p_notify_action_tx_complete(
|
||||
return 0;
|
||||
|
||||
if (e->event_code == BRCMF_E_ACTION_FRAME_COMPLETE) {
|
||||
- if (e->status == BRCMF_E_STATUS_SUCCESS)
|
||||
+ if (e->status == BRCMF_E_STATUS_SUCCESS) {
|
||||
set_bit(BRCMF_P2P_STATUS_ACTION_TX_COMPLETED,
|
||||
&p2p->status);
|
||||
- else {
|
||||
+ if (!p2p->wait_for_offchan_complete)
|
||||
+ complete(&p2p->send_af_done);
|
||||
+ } else {
|
||||
set_bit(BRCMF_P2P_STATUS_ACTION_TX_NOACK, &p2p->status);
|
||||
/* If there is no ack, we don't need to wait for
|
||||
* WLC_E_ACTION_FRAME_OFFCHAN_COMPLETE event
|
||||
@@ -1511,6 +1513,17 @@ static s32 brcmf_p2p_tx_action_frame(str
|
||||
p2p->af_sent_channel = le32_to_cpu(af_params->channel);
|
||||
p2p->af_tx_sent_jiffies = jiffies;
|
||||
|
||||
+ if (test_bit(BRCMF_P2P_STATUS_DISCOVER_LISTEN, &p2p->status) &&
|
||||
+ p2p->af_sent_channel ==
|
||||
+ ieee80211_frequency_to_channel(p2p->remain_on_channel.center_freq))
|
||||
+ p2p->wait_for_offchan_complete = false;
|
||||
+ else
|
||||
+ p2p->wait_for_offchan_complete = true;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Waiting for %s tx completion event\n",
|
||||
+ (p2p->wait_for_offchan_complete) ?
|
||||
+ "off-channel" : "on-channel");
|
||||
+
|
||||
timeout = wait_for_completion_timeout(&p2p->send_af_done,
|
||||
P2P_AF_MAX_WAIT_TIME);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
|
||||
@@ -124,6 +124,7 @@ struct afx_hdl {
|
||||
* @gon_req_action: about to send go negotiation requets frame.
|
||||
* @block_gon_req_tx: drop tx go negotiation requets frame.
|
||||
* @p2pdev_dynamically: is p2p device if created by module param or supplicant.
|
||||
+ * @wait_for_offchan_complete: wait for off-channel tx completion event.
|
||||
*/
|
||||
struct brcmf_p2p_info {
|
||||
struct brcmf_cfg80211_info *cfg;
|
||||
@@ -144,6 +145,7 @@ struct brcmf_p2p_info {
|
||||
bool gon_req_action;
|
||||
bool block_gon_req_tx;
|
||||
bool p2pdev_dynamically;
|
||||
+ bool wait_for_offchan_complete;
|
||||
};
|
||||
|
||||
s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg, bool p2pdev_forced);
|
||||
@@ -67,7 +67,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
fwreq->bus_nr = devinfo->pdev->bus->number;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4185,6 +4185,7 @@ brcmf_sdio_prepare_fw_request(struct brc
|
||||
@@ -4213,6 +4213,7 @@ brcmf_sdio_prepare_fw_request(struct brc
|
||||
|
||||
fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6644,6 +6644,12 @@ static s32 brcmf_config_dongle(struct br
|
||||
@@ -6654,6 +6654,12 @@ static s32 brcmf_config_dongle(struct br
|
||||
|
||||
brcmf_configure_arp_nd_offload(ifp, true);
|
||||
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
From e1a08730eeb0bad4d82c3bc40e74854872de618d Mon Sep 17 00:00:00 2001
|
||||
From: Wright Feng <wright.feng@cypress.com>
|
||||
Date: Wed, 21 Nov 2018 07:53:44 +0000
|
||||
Subject: [PATCH] brcmfmac: set F2 watermark to 256 for 4373
|
||||
|
||||
We got SDIO_CRC_ERROR with 4373 on SDR104 when doing bi-directional
|
||||
throughput test. Enable watermark to 256 to guarantee the operation
|
||||
stability.
|
||||
|
||||
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/sdio.c | 26 +++++++++++++++++--
|
||||
1 file changed, 24 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -49,6 +49,10 @@
|
||||
#define DCMD_RESP_TIMEOUT msecs_to_jiffies(2500)
|
||||
#define CTL_DONE_TIMEOUT msecs_to_jiffies(2500)
|
||||
|
||||
+/* watermark expressed in number of words */
|
||||
+#define DEFAULT_F2_WATERMARK 0x8
|
||||
+#define CY_4373_F2_WATERMARK 0x40
|
||||
+
|
||||
#ifdef DEBUG
|
||||
|
||||
#define BRCMF_TRAP_INFO_SIZE 80
|
||||
@@ -138,6 +142,8 @@ struct rte_console {
|
||||
/* 1: isolate internal sdio signals, put external pads in tri-state; requires
|
||||
* sdio bus power cycle to clear (rev 9) */
|
||||
#define SBSDIO_DEVCTL_PADS_ISO 0x08
|
||||
+/* 1: enable F2 Watermark */
|
||||
+#define SBSDIO_DEVCTL_F2WM_ENAB 0x10
|
||||
/* Force SD->SB reset mapping (rev 11) */
|
||||
#define SBSDIO_DEVCTL_SB_RST_CTL 0x30
|
||||
/* Determined by CoreControl bit */
|
||||
@@ -4057,6 +4063,7 @@ static void brcmf_sdio_firmware_callback
|
||||
void *nvram;
|
||||
u32 nvram_len;
|
||||
u8 saveclk;
|
||||
+ u8 devctl;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
|
||||
|
||||
@@ -4112,8 +4119,23 @@ static void brcmf_sdio_firmware_callback
|
||||
brcmf_sdiod_writel(sdiod, core->base + SD_REG(hostintmask),
|
||||
bus->hostintmask, NULL);
|
||||
|
||||
-
|
||||
- brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK, 8, &err);
|
||||
+ switch (sdiod->func1->device) {
|
||||
+ case SDIO_DEVICE_ID_CYPRESS_4373:
|
||||
+ brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
|
||||
+ CY_4373_F2_WATERMARK);
|
||||
+ brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||
+ CY_4373_F2_WATERMARK, &err);
|
||||
+ devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
|
||||
+ &err);
|
||||
+ devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
|
||||
+ brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
|
||||
+ &err);
|
||||
+ break;
|
||||
+ default:
|
||||
+ brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||
+ DEFAULT_F2_WATERMARK, &err);
|
||||
+ break;
|
||||
+ }
|
||||
} else {
|
||||
/* Disable F2 again */
|
||||
sdio_disable_func(sdiod->func2);
|
||||
@@ -1,55 +0,0 @@
|
||||
From 58e4bbea0c1d9b5ace11df968c5dc096ce052a73 Mon Sep 17 00:00:00 2001
|
||||
From: Madhan Mohan R <MadhanMohan.R@cypress.com>
|
||||
Date: Wed, 21 Nov 2018 07:53:45 +0000
|
||||
Subject: [PATCH] brcmfmac: set SDIO F1 MesBusyCtrl for CYW4373
|
||||
|
||||
Along with F2 watermark (existing) configuration, F1 MesBusyCtrl
|
||||
should be enabled & sdio device RX FIFO watermark should be
|
||||
configured to avoid overflow errors.
|
||||
|
||||
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Madhan Mohan R <madhanmohan.r@cypress.com>
|
||||
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 +++
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 9 ++++++++-
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4130,6 +4130,9 @@ static void brcmf_sdio_firmware_callback
|
||||
devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
|
||||
brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
|
||||
&err);
|
||||
+ brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
|
||||
+ CY_4373_F2_WATERMARK |
|
||||
+ SBSDIO_MESBUSYCTRL_ENAB, &err);
|
||||
break;
|
||||
default:
|
||||
brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
||||
@@ -77,7 +77,7 @@
|
||||
#define SBSDIO_GPIO_OUT 0x10006
|
||||
/* gpio enable */
|
||||
#define SBSDIO_GPIO_EN 0x10007
|
||||
-/* rev < 7, watermark for sdio device */
|
||||
+/* rev < 7, watermark for sdio device TX path */
|
||||
#define SBSDIO_WATERMARK 0x10008
|
||||
/* control busy signal generation */
|
||||
#define SBSDIO_DEVICE_CTL 0x10009
|
||||
@@ -104,6 +104,13 @@
|
||||
#define SBSDIO_FUNC1_RFRAMEBCHI 0x1001C
|
||||
/* MesBusyCtl (rev 11) */
|
||||
#define SBSDIO_FUNC1_MESBUSYCTRL 0x1001D
|
||||
+/* Watermark for sdio device RX path */
|
||||
+#define SBSDIO_MESBUSY_RXFIFO_WM_MASK 0x7F
|
||||
+#define SBSDIO_MESBUSY_RXFIFO_WM_SHIFT 0
|
||||
+/* Enable busy capability for MES access */
|
||||
+#define SBSDIO_MESBUSYCTRL_ENAB 0x80
|
||||
+#define SBSDIO_MESBUSYCTRL_ENAB_SHIFT 7
|
||||
+
|
||||
/* Sdio Core Rev 12 */
|
||||
#define SBSDIO_FUNC1_WAKEUPCTRL 0x1001E
|
||||
#define SBSDIO_FUNC1_WCTRL_ALPWAIT_MASK 0x1
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
@@ -972,6 +972,7 @@ static const struct sdio_device_id brcmf
|
||||
@@ -970,6 +970,7 @@ static const struct sdio_device_id brcmf
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_4373),
|
||||
@@ -100,7 +100,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (on) {
|
||||
/* device WAKEUP through KSO:
|
||||
* write bit 0 & read back until
|
||||
@@ -2413,6 +2423,14 @@ static int brcmf_sdio_tx_ctrlframe(struc
|
||||
@@ -2414,6 +2424,14 @@ static int brcmf_sdio_tx_ctrlframe(struc
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
static void brcmf_sdio_bus_stop(struct device *dev)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
@@ -2420,7 +2438,7 @@ static void brcmf_sdio_bus_stop(struct d
|
||||
@@ -2421,7 +2439,7 @@ static void brcmf_sdio_bus_stop(struct d
|
||||
struct brcmf_sdio *bus = sdiodev->bus;
|
||||
struct brcmf_core *core = bus->sdio_core;
|
||||
u32 local_hostintmask;
|
||||
@@ -124,7 +124,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int err;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
@@ -2447,9 +2465,14 @@ static void brcmf_sdio_bus_stop(struct d
|
||||
@@ -2448,9 +2466,14 @@ static void brcmf_sdio_bus_stop(struct d
|
||||
/* Force backplane clocks to assure F2 interrupt propagates */
|
||||
saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||
&err);
|
||||
@@ -142,7 +142,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (err)
|
||||
brcmf_err("Failed to force clock for F2: err %d\n",
|
||||
err);
|
||||
@@ -3339,20 +3362,45 @@ err:
|
||||
@@ -3343,20 +3366,45 @@ err:
|
||||
return bcmerror;
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
|
||||
if (err) {
|
||||
brcmf_err("error writing SBSDIO_FUNC1_WAKEUPCTRL\n");
|
||||
@@ -3361,8 +3409,7 @@ static void brcmf_sdio_sr_init(struct br
|
||||
@@ -3365,8 +3413,7 @@ static void brcmf_sdio_sr_init(struct br
|
||||
|
||||
/* Add CMD14 Support */
|
||||
brcmf_sdiod_func0_wb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
|
||||
@@ -200,7 +200,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
&err);
|
||||
if (err) {
|
||||
brcmf_err("error writing SDIO_CCCR_BRCM_CARDCAP\n");
|
||||
@@ -3370,7 +3417,7 @@ static void brcmf_sdio_sr_init(struct br
|
||||
@@ -3374,7 +3421,7 @@ static void brcmf_sdio_sr_init(struct br
|
||||
}
|
||||
|
||||
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||
@@ -209,7 +209,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (err) {
|
||||
brcmf_err("error writing SBSDIO_FUNC1_CHIPCLKCSR\n");
|
||||
return;
|
||||
@@ -4062,7 +4109,7 @@ static void brcmf_sdio_firmware_callback
|
||||
@@ -4065,7 +4112,7 @@ static void brcmf_sdio_firmware_callback
|
||||
const struct firmware *code;
|
||||
void *nvram;
|
||||
u32 nvram_len;
|
||||
@@ -218,7 +218,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
u8 devctl;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
|
||||
@@ -4096,8 +4143,11 @@ static void brcmf_sdio_firmware_callback
|
||||
@@ -4099,8 +4146,11 @@ static void brcmf_sdio_firmware_callback
|
||||
/* Force clocks on backplane to be sure F2 interrupt propagates */
|
||||
saveclk = brcmf_sdiod_readb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR, &err);
|
||||
if (!err) {
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
@@ -4184,6 +4185,17 @@ static void brcmf_sdio_firmware_callback
|
||||
@@ -4187,6 +4188,17 @@ static void brcmf_sdio_firmware_callback
|
||||
CY_4373_F2_WATERMARK |
|
||||
SBSDIO_MESBUSYCTRL_ENAB, &err);
|
||||
break;
|
||||
|
||||
@@ -30,7 +30,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -3365,7 +3365,11 @@ err:
|
||||
@@ -3369,7 +3369,11 @@ err:
|
||||
|
||||
static bool brcmf_sdio_aos_no_decode(struct brcmf_sdio *bus)
|
||||
{
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From 861cb5eb467f5e38dce1aabe4e8db379255bd89b Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
Date: Wed, 12 Dec 2018 20:20:06 +0100
|
||||
Subject: [PATCH] brcmfmac: Fix access point mode
|
||||
|
||||
Since commit 1204aa17f3b4 ("brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag")
|
||||
the Raspberry Pi 3 A+ (BCM43455) isn't able to operate in AP mode with
|
||||
hostapd (device_ap_sme=1 use_monitor=0):
|
||||
|
||||
brcmfmac: brcmf_cfg80211_stop_ap: setting AP mode failed -52
|
||||
|
||||
So add the missing mgmt_stypes for AP mode to fix this.
|
||||
|
||||
Fixes: 1204aa17f3b4 ("brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag")
|
||||
Suggested-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6314,6 +6314,16 @@ brcmf_txrx_stypes[NUM_NL80211_IFTYPES] =
|
||||
.tx = 0xffff,
|
||||
.rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
|
||||
BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
|
||||
+ },
|
||||
+ [NL80211_IFTYPE_AP] = {
|
||||
+ .tx = 0xffff,
|
||||
+ .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_DISASSOC >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_AUTH >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_DEAUTH >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_ACTION >> 4)
|
||||
}
|
||||
};
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1557,6 +1557,10 @@ void brcmf_usb_exit(void)
|
||||
@@ -1558,6 +1558,10 @@ void brcmf_usb_exit(void)
|
||||
|
||||
void brcmf_usb_register(void)
|
||||
{
|
||||
|
||||
@@ -51,7 +51,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
* @ifidx: interface index.
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -508,7 +508,7 @@ static void brcmf_usb_rx_complete(struct
|
||||
@@ -509,7 +509,7 @@ static void brcmf_usb_rx_complete(struct
|
||||
skb = req->skb;
|
||||
req->skb = NULL;
|
||||
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
From aaf6a5e86e36766abbeedf220462bde8031f9a72 Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 14 Feb 2019 13:43:49 +0100
|
||||
Subject: [PATCH] brcmfmac: create debugfs files for bus-specific layer
|
||||
|
||||
Since we moved the drivers debugfs directory under ieee80211 debugfs the
|
||||
debugfs entries need to be added after wiphy_register() has been called.
|
||||
For most part that has been done accordingly, but for the debugfs entries
|
||||
added by SDIO it was not and failed silently. This patch fixes that by
|
||||
adding a bus-layer callback for it.
|
||||
|
||||
Fixes: 856d5a011c86 ("brcmfmac: allocate struct brcmf_pub instance using wiphy_new()")
|
||||
Reported-by: Russel King <linux@armlinux.org.uk>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 10 ++++++++++
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 1 +
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 12 +++++++-----
|
||||
3 files changed, 18 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -90,6 +90,7 @@ struct brcmf_bus_ops {
|
||||
int (*get_memdump)(struct device *dev, void *data, size_t len);
|
||||
int (*get_fwname)(struct device *dev, const char *ext,
|
||||
unsigned char *fw_name);
|
||||
+ void (*debugfs_create)(struct device *dev);
|
||||
};
|
||||
|
||||
|
||||
@@ -235,6 +236,15 @@ int brcmf_bus_get_fwname(struct brcmf_bu
|
||||
return bus->ops->get_fwname(bus->dev, ext, fw_name);
|
||||
}
|
||||
|
||||
+static inline
|
||||
+void brcmf_bus_debugfs_create(struct brcmf_bus *bus)
|
||||
+{
|
||||
+ if (!bus->ops->debugfs_create)
|
||||
+ return;
|
||||
+
|
||||
+ return bus->ops->debugfs_create(bus->dev);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* interface functions from common layer
|
||||
*/
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1181,6 +1181,7 @@ static int brcmf_bus_started(struct brcm
|
||||
brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
|
||||
brcmf_feat_debugfs_create(drvr);
|
||||
brcmf_proto_debugfs_create(drvr);
|
||||
+ brcmf_bus_debugfs_create(bus_if);
|
||||
|
||||
return 0;
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -3154,9 +3154,12 @@ static int brcmf_debugfs_sdio_count_read
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void brcmf_sdio_debugfs_create(struct brcmf_sdio *bus)
|
||||
+static void brcmf_sdio_debugfs_create(struct device *dev)
|
||||
{
|
||||
- struct brcmf_pub *drvr = bus->sdiodev->bus_if->drvr;
|
||||
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
+ struct brcmf_pub *drvr = bus_if->drvr;
|
||||
+ struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
|
||||
+ struct brcmf_sdio *bus = sdiodev->bus;
|
||||
struct dentry *dentry = brcmf_debugfs_get_devdir(drvr);
|
||||
|
||||
if (IS_ERR_OR_NULL(dentry))
|
||||
@@ -3176,7 +3179,7 @@ static int brcmf_sdio_checkdied(struct b
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void brcmf_sdio_debugfs_create(struct brcmf_sdio *bus)
|
||||
+static void brcmf_sdio_debugfs_create(struct device *dev)
|
||||
{
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
@@ -3488,8 +3491,6 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
if (bus->rxbuf)
|
||||
bus->rxblen = value;
|
||||
|
||||
- brcmf_sdio_debugfs_create(bus);
|
||||
-
|
||||
/* the commands below use the terms tx and rx from
|
||||
* a device perspective, ie. bus:txglom affects the
|
||||
* bus transfers from device to host.
|
||||
@@ -4099,6 +4100,7 @@ static const struct brcmf_bus_ops brcmf_
|
||||
.get_ramsize = brcmf_sdio_bus_get_ramsize,
|
||||
.get_memdump = brcmf_sdio_bus_get_memdump,
|
||||
.get_fwname = brcmf_sdio_get_fwname,
|
||||
+ .debugfs_create = brcmf_sdio_debugfs_create
|
||||
};
|
||||
|
||||
#define BRCMF_SDIO_FW_CODE 0
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -3010,21 +3010,35 @@ static int brcmf_sdio_trap_info(struct s
|
||||
@@ -3011,21 +3011,35 @@ static int brcmf_sdio_trap_info(struct s
|
||||
if (error < 0)
|
||||
return error;
|
||||
|
||||
@@ -69,7 +69,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3078,8 +3092,10 @@ static int brcmf_sdio_checkdied(struct b
|
||||
@@ -3079,8 +3093,10 @@ static int brcmf_sdio_checkdied(struct b
|
||||
else if (sh.flags & SDPCM_SHARED_ASSERT)
|
||||
brcmf_err("assertion in dongle\n");
|
||||
|
||||
@@ -81,7 +81,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -4210,7 +4226,7 @@ static void brcmf_sdio_firmware_callback
|
||||
@@ -4211,7 +4227,7 @@ static void brcmf_sdio_firmware_callback
|
||||
} else {
|
||||
/* Disable F2 again */
|
||||
sdio_disable_func(sdiod->func2);
|
||||
@@ -90,7 +90,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
|
||||
if (brcmf_chip_sr_capable(bus->ci)) {
|
||||
@@ -4231,8 +4247,10 @@ static void brcmf_sdio_firmware_callback
|
||||
@@ -4232,8 +4248,10 @@ static void brcmf_sdio_firmware_callback
|
||||
}
|
||||
|
||||
/* If we didn't come up, turn off backplane clock */
|
||||
@@ -102,7 +102,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
sdio_release_host(sdiod->func1);
|
||||
|
||||
@@ -4246,12 +4264,15 @@ static void brcmf_sdio_firmware_callback
|
||||
@@ -4247,12 +4265,15 @@ static void brcmf_sdio_firmware_callback
|
||||
err = brcmf_attach(sdiod->dev, sdiod->settings);
|
||||
if (err != 0) {
|
||||
brcmf_err("brcmf_attach failed\n");
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -575,7 +575,6 @@ static void
|
||||
@@ -576,7 +576,6 @@ static void
|
||||
brcmf_usb_state_change(struct brcmf_usbdev_info *devinfo, int state)
|
||||
{
|
||||
struct brcmf_bus *bcmf_bus = devinfo->bus_pub.bus;
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
brcmf_dbg(USB, "Enter, current state=%d, new state=%d\n",
|
||||
devinfo->bus_pub.state, state);
|
||||
@@ -583,7 +582,6 @@ brcmf_usb_state_change(struct brcmf_usbd
|
||||
@@ -584,7 +583,6 @@ brcmf_usb_state_change(struct brcmf_usbd
|
||||
if (devinfo->bus_pub.state == state)
|
||||
return;
|
||||
|
||||
|
||||
@@ -503,7 +503,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -1353,6 +1356,7 @@ static int brcmf_get_pend_8021x_cnt(stru
|
||||
@@ -1358,6 +1361,7 @@ static int brcmf_get_pend_8021x_cnt(stru
|
||||
|
||||
int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp)
|
||||
{
|
||||
@@ -511,7 +511,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int err;
|
||||
|
||||
err = wait_event_timeout(ifp->pend_8021x_wait,
|
||||
@@ -1360,7 +1364,7 @@ int brcmf_netdev_wait_pend8021x(struct b
|
||||
@@ -1365,7 +1369,7 @@ int brcmf_netdev_wait_pend8021x(struct b
|
||||
MAX_WAIT_FOR_8021X_TX);
|
||||
|
||||
if (!err)
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -445,9 +445,10 @@ fail:
|
||||
@@ -446,9 +446,10 @@ fail:
|
||||
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int i = 0;
|
||||
list_for_each_entry_safe(req, next, q, list) {
|
||||
if (!req->urb) {
|
||||
@@ -455,12 +456,8 @@ static void brcmf_usb_free_q(struct list
|
||||
@@ -456,12 +457,8 @@ static void brcmf_usb_free_q(struct list
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1029,8 +1026,8 @@ static void brcmf_usb_detach(struct brcm
|
||||
@@ -1030,8 +1027,8 @@ static void brcmf_usb_detach(struct brcm
|
||||
brcmf_dbg(USB, "Enter, devinfo %p\n", devinfo);
|
||||
|
||||
/* free the URBS */
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -449,13 +449,11 @@ static void brcmf_usb_free_q(struct list
|
||||
@@ -450,13 +450,11 @@ static void brcmf_usb_free_q(struct list
|
||||
{
|
||||
struct brcmf_usbreq *req, *next;
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From a927e8d8ab57e696800e20cf09a72b7dfe3bbebb Mon Sep 17 00:00:00 2001
|
||||
From: Colin Ian King <colin.king@canonical.com>
|
||||
Date: Tue, 9 Apr 2019 12:43:33 +0100
|
||||
Subject: [PATCH] brcmfmac: fix leak of mypkt on error return path
|
||||
|
||||
Currently if the call to brcmf_sdiod_set_backplane_window fails then
|
||||
error return path leaks mypkt. Fix this by returning by a new
|
||||
error path labelled 'out' that calls brcmu_pkt_buf_free_skb to free
|
||||
mypkt. Also remove redundant check on err before calling
|
||||
brcmf_sdiod_skbuff_write.
|
||||
|
||||
Addresses-Coverity: ("Resource Leak")
|
||||
Fixes: a7c3aa1509e2 ("brcmfmac: Remove brcmf_sdiod_addrprep()")
|
||||
Signed-off-by: Colin Ian King <colin.king@canonical.com>
|
||||
Reviewed-by: Mukesh Ojha <mojha@codeaurora.org>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 8 +++-----
|
||||
1 file changed, 3 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
@@ -617,15 +617,13 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
|
||||
|
||||
err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
|
||||
if (err)
|
||||
- return err;
|
||||
+ goto out;
|
||||
|
||||
addr &= SBSDIO_SB_OFT_ADDR_MASK;
|
||||
addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
|
||||
|
||||
- if (!err)
|
||||
- err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2, addr,
|
||||
- mypkt);
|
||||
-
|
||||
+ err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2, addr, mypkt);
|
||||
+out:
|
||||
brcmu_pkt_buf_free_skb(mypkt);
|
||||
|
||||
return err;
|
||||
@@ -71,10 +71,10 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
- brcmf_proto_detach_pre_delif(drvr);
|
||||
-
|
||||
/* make sure primary interface removed last */
|
||||
for (i = BRCMF_MAX_IFS-1; i > -1; i--)
|
||||
brcmf_remove_interface(drvr->iflist[i], false);
|
||||
@@ -1346,7 +1344,7 @@ void brcmf_detach(struct device *dev)
|
||||
if (drvr->mon_if) {
|
||||
brcmf_net_detach(drvr->mon_if->ndev, false);
|
||||
drvr->mon_if = NULL;
|
||||
@@ -1351,7 +1349,7 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1328,25 +1328,26 @@ void brcmf_detach(struct device *dev)
|
||||
@@ -1328,12 +1328,11 @@ void brcmf_detach(struct device *dev)
|
||||
unregister_inet6addr_notifier(&drvr->inet6addr_notifier);
|
||||
#endif
|
||||
|
||||
@@ -35,31 +35,36 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
- brcmf_p2p_detach(&drvr->config->p2p);
|
||||
-
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_DOWN);
|
||||
-
|
||||
- /* make sure primary interface removed last */
|
||||
+ brcmf_bus_stop(drvr->bus_if);
|
||||
+
|
||||
+ brcmf_fweh_detach(drvr);
|
||||
+ brcmf_proto_detach(drvr);
|
||||
|
||||
if (drvr->mon_if) {
|
||||
brcmf_net_detach(drvr->mon_if->ndev, false);
|
||||
@@ -1341,17 +1340,19 @@ void brcmf_detach(struct device *dev)
|
||||
}
|
||||
|
||||
/* make sure primary interface removed last */
|
||||
- for (i = BRCMF_MAX_IFS-1; i > -1; i--)
|
||||
- brcmf_remove_interface(drvr->iflist[i], false);
|
||||
-
|
||||
- brcmf_cfg80211_detach(drvr->config);
|
||||
- drvr->config = NULL;
|
||||
-
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
+ brcmf_fweh_detach(drvr);
|
||||
brcmf_proto_detach(drvr);
|
||||
|
||||
+ /* make sure primary interface removed last */
|
||||
- brcmf_bus_stop(drvr->bus_if);
|
||||
+ for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
|
||||
+ if (drvr->iflist[i])
|
||||
+ brcmf_del_if(drvr, drvr->iflist[i]->bsscfgidx, false);
|
||||
+ }
|
||||
+
|
||||
|
||||
- brcmf_proto_detach(drvr);
|
||||
+ if (drvr->config) {
|
||||
+ brcmf_p2p_detach(&drvr->config->p2p);
|
||||
+ brcmf_cfg80211_detach(drvr->config);
|
||||
+ drvr->config = NULL;
|
||||
+ }
|
||||
+
|
||||
|
||||
bus_if->drvr = NULL;
|
||||
+
|
||||
wiphy_free(drvr->wiphy);
|
||||
|
||||
@@ -74,7 +74,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1374,6 +1375,8 @@ void brcmf_detach(struct device *dev)
|
||||
@@ -1379,6 +1380,8 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
bus_if->drvr = NULL;
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (ret != 0) {
|
||||
bphy_err(drvr, "dongle is not responding: err=%d\n", ret);
|
||||
goto fail;
|
||||
@@ -1372,6 +1382,15 @@ void brcmf_detach(struct device *dev)
|
||||
@@ -1377,6 +1387,15 @@ void brcmf_detach(struct device *dev)
|
||||
brcmf_cfg80211_detach(drvr->config);
|
||||
drvr->config = NULL;
|
||||
}
|
||||
@@ -153,7 +153,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
kfree(bus->msgbuf->flowrings);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4251,17 +4251,26 @@ static void brcmf_sdio_firmware_callback
|
||||
@@ -4252,17 +4252,26 @@ static void brcmf_sdio_firmware_callback
|
||||
sdiod->bus_if->chip = bus->ci->chip;
|
||||
sdiod->bus_if->chiprev = bus->ci->chiprev;
|
||||
|
||||
@@ -185,7 +185,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
release:
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1178,8 +1178,12 @@ static void brcmf_usb_probe_phase2(struc
|
||||
@@ -1179,8 +1179,12 @@ static void brcmf_usb_probe_phase2(struc
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
@@ -199,7 +199,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
@@ -1251,7 +1255,10 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
@@ -1252,7 +1256,10 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
}
|
||||
|
||||
if (!brcmf_usb_dlneeded(devinfo)) {
|
||||
@@ -211,7 +211,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (ret)
|
||||
goto fail;
|
||||
/* we are done */
|
||||
@@ -1279,6 +1286,7 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
@@ -1280,6 +1287,7 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
|
||||
fail:
|
||||
/* Release resources in reverse order */
|
||||
@@ -219,7 +219,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
kfree(bus);
|
||||
brcmf_usb_detach(devinfo);
|
||||
return ret;
|
||||
@@ -1292,6 +1300,7 @@ brcmf_usb_disconnect_cb(struct brcmf_usb
|
||||
@@ -1293,6 +1301,7 @@ brcmf_usb_disconnect_cb(struct brcmf_usb
|
||||
brcmf_dbg(USB, "Enter, bus_pub %p\n", devinfo);
|
||||
|
||||
brcmf_detach(devinfo->dev);
|
||||
@@ -227,7 +227,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
kfree(devinfo->bus_pub.bus);
|
||||
brcmf_usb_detach(devinfo);
|
||||
}
|
||||
@@ -1435,10 +1444,12 @@ static int brcmf_usb_suspend(struct usb_
|
||||
@@ -1436,10 +1445,12 @@ static int brcmf_usb_suspend(struct usb_
|
||||
|
||||
brcmf_dbg(USB, "Enter\n");
|
||||
devinfo->bus_pub.state = BRCMFMAC_USB_STATE_SLEEP;
|
||||
@@ -242,7 +242,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1451,8 +1462,19 @@ static int brcmf_usb_resume(struct usb_i
|
||||
@@ -1452,8 +1463,19 @@ static int brcmf_usb_resume(struct usb_i
|
||||
struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
|
||||
|
||||
brcmf_dbg(USB, "Enter\n");
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 18 Nov 2019 13:35:20 +0100
|
||||
Subject: [PATCH 5.5] brcmfmac: remove monitor interface when detaching
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This fixes a minor WARNING in the cfg80211:
|
||||
[ 130.658034] ------------[ cut here ]------------
|
||||
[ 130.662805] WARNING: CPU: 1 PID: 610 at net/wireless/core.c:954 wiphy_unregister+0xb4/0x198 [cfg80211]
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1371,6 +1371,11 @@ void brcmf_detach(struct device *dev)
|
||||
brcmf_fweh_detach(drvr);
|
||||
brcmf_proto_detach(drvr);
|
||||
|
||||
+ if (drvr->mon_if) {
|
||||
+ brcmf_net_detach(drvr->mon_if->ndev, false);
|
||||
+ drvr->mon_if = NULL;
|
||||
+ }
|
||||
+
|
||||
/* make sure primary interface removed last */
|
||||
for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
|
||||
if (drvr->iflist[i])
|
||||
@@ -1,31 +0,0 @@
|
||||
From 216b44000ada87a63891a8214c347e05a4aea8fe Mon Sep 17 00:00:00 2001
|
||||
From: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Date: Tue, 3 Dec 2019 12:58:55 +0300
|
||||
Subject: [PATCH] brcmfmac: Fix use after free in brcmf_sdio_readframes()
|
||||
|
||||
The brcmu_pkt_buf_free_skb() function frees "pkt" so it leads to a
|
||||
static checker warning:
|
||||
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:1974 brcmf_sdio_readframes()
|
||||
error: dereferencing freed memory 'pkt'
|
||||
|
||||
It looks like there was supposed to be a continue after we free "pkt".
|
||||
|
||||
Fixes: 4754fceeb9a6 ("brcmfmac: streamline SDIO read frame routine")
|
||||
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Acked-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1935,6 +1935,7 @@ static uint brcmf_sdio_readframes(struct
|
||||
BRCMF_SDIO_FT_NORMAL)) {
|
||||
rd->len = 0;
|
||||
brcmu_pkt_buf_free_skb(pkt);
|
||||
+ continue;
|
||||
}
|
||||
bus->sdcnt.rx_readahead_cnt++;
|
||||
if (rd->len != roundup(rd_new.len, 16)) {
|
||||
@@ -1,40 +0,0 @@
|
||||
From 3428fbcd6e6c0850b1a8b2a12082b7b2aabb3da3 Mon Sep 17 00:00:00 2001
|
||||
From: Johan Hovold <johan@kernel.org>
|
||||
Date: Tue, 10 Dec 2019 12:44:22 +0100
|
||||
Subject: [PATCH] brcmfmac: fix interface sanity check
|
||||
|
||||
Make sure to use the current alternate setting when verifying the
|
||||
interface descriptors to avoid binding to an invalid interface.
|
||||
|
||||
Failing to do so could cause the driver to misbehave or trigger a WARN()
|
||||
in usb_submit_urb() that kernels with panic_on_warn set would choke on.
|
||||
|
||||
Fixes: 71bb244ba2fd ("brcm80211: fmac: add USB support for bcm43235/6/8 chipsets")
|
||||
Cc: stable <stable@vger.kernel.org> # 3.4
|
||||
Cc: Arend van Spriel <arend@broadcom.com>
|
||||
Signed-off-by: Johan Hovold <johan@kernel.org>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1348,7 +1348,7 @@ brcmf_usb_probe(struct usb_interface *in
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- desc = &intf->altsetting[0].desc;
|
||||
+ desc = &intf->cur_altsetting->desc;
|
||||
if ((desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
|
||||
(desc->bInterfaceSubClass != 2) ||
|
||||
(desc->bInterfaceProtocol != 0xff)) {
|
||||
@@ -1361,7 +1361,7 @@ brcmf_usb_probe(struct usb_interface *in
|
||||
|
||||
num_of_eps = desc->bNumEndpoints;
|
||||
for (ep = 0; ep < num_of_eps; ep++) {
|
||||
- endpoint = &intf->altsetting[0].endpoint[ep].desc;
|
||||
+ endpoint = &intf->cur_altsetting->endpoint[ep].desc;
|
||||
endpoint_num = usb_endpoint_num(endpoint);
|
||||
if (!usb_endpoint_xfer_bulk(endpoint))
|
||||
continue;
|
||||
@@ -0,0 +1,66 @@
|
||||
From a32de68edab7b73ded850bcf76cdf6858e92a7e5 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Osipenko <digetx@gmail.com>
|
||||
Date: Sun, 15 Dec 2019 21:42:24 +0300
|
||||
Subject: [PATCH] brcmfmac: Keep OOB wake-interrupt disabled when it shouldn't
|
||||
be enabled
|
||||
|
||||
NVIDIA Tegra SoCs do not like when OOB wake is enabled and WiFi interface
|
||||
is in DOWN state during suspend. This results in a CPU hang on programming
|
||||
OOB wake-up state of the GPIO controller during of system's suspend.
|
||||
|
||||
The solution is trivial: don't enable wake for the OOB interrupt when it
|
||||
should be disabled.
|
||||
|
||||
This fixes hang on Tegra20 (Acer A500) and Tegra30 (Nexus 7) devices which
|
||||
are using BCM4329 and BCM4330 WiFi chips respectively.
|
||||
|
||||
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 10 +++++-----
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 1 -
|
||||
2 files changed, 5 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
@@ -120,7 +120,7 @@ int brcmf_sdiod_intr_register(struct brc
|
||||
brcmf_err("enable_irq_wake failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
- sdiodev->irq_wake = true;
|
||||
+ disable_irq_wake(pdata->oob_irq_nr);
|
||||
|
||||
sdio_claim_host(sdiodev->func1);
|
||||
|
||||
@@ -179,10 +179,6 @@ void brcmf_sdiod_intr_unregister(struct
|
||||
sdio_release_host(sdiodev->func1);
|
||||
|
||||
sdiodev->oob_irq_requested = false;
|
||||
- if (sdiodev->irq_wake) {
|
||||
- disable_irq_wake(pdata->oob_irq_nr);
|
||||
- sdiodev->irq_wake = false;
|
||||
- }
|
||||
free_irq(pdata->oob_irq_nr, &sdiodev->func1->dev);
|
||||
sdiodev->irq_en = false;
|
||||
sdiodev->oob_irq_requested = false;
|
||||
@@ -1162,6 +1158,10 @@ static int brcmf_ops_sdio_resume(struct
|
||||
if (ret)
|
||||
brcmf_err("Failed to probe device on resume\n");
|
||||
} else {
|
||||
+ if (sdiodev->wowl_enabled &&
|
||||
+ sdiodev->settings->bus.sdio.oob_irq_supported)
|
||||
+ disable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr);
|
||||
+
|
||||
brcmf_sdiod_freezer_off(sdiodev);
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
||||
@@ -178,7 +178,6 @@ struct brcmf_sdio_dev {
|
||||
bool sd_irq_requested;
|
||||
bool irq_en; /* irq enable flags */
|
||||
spinlock_t irq_en_lock;
|
||||
- bool irq_wake; /* irq wake enable flags */
|
||||
bool sg_support;
|
||||
uint max_request_size;
|
||||
ushort max_segment_count;
|
||||
@@ -0,0 +1,27 @@
|
||||
From b92c017deda819e45a0f054f6df6b53e645d7fe4 Mon Sep 17 00:00:00 2001
|
||||
From: zhengbin <zhengbin13@huawei.com>
|
||||
Date: Tue, 24 Dec 2019 22:16:06 +0800
|
||||
Subject: [PATCH] brcmfmac: use true,false for bool variable
|
||||
|
||||
Fixes coccicheck warning:
|
||||
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c:911:2-24: WARNING: Assignment of 0/1 to bool variable
|
||||
|
||||
Reported-by: Hulk Robot <hulkci@huawei.com>
|
||||
Signed-off-by: zhengbin <zhengbin13@huawei.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -908,7 +908,7 @@ static u8 brcmf_fws_hdrpush(struct brcmf
|
||||
wlh += wlh[1] + 2;
|
||||
|
||||
if (entry->send_tim_signal) {
|
||||
- entry->send_tim_signal = 0;
|
||||
+ entry->send_tim_signal = false;
|
||||
wlh[0] = BRCMF_FWS_TYPE_PENDING_TRAFFIC_BMP;
|
||||
wlh[1] = BRCMF_FWS_TYPE_PENDING_TRAFFIC_BMP_LEN;
|
||||
wlh[2] = entry->mac_handle;
|
||||
@@ -0,0 +1,57 @@
|
||||
From 8c8e60fb86a90a30721bbd797f58f96b3980dcc1 Mon Sep 17 00:00:00 2001
|
||||
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
|
||||
Date: Thu, 26 Dec 2019 10:20:33 +0100
|
||||
Subject: [PATCH] brcmfmac: sdio: Fix OOB interrupt initialization on brcm43362
|
||||
|
||||
Commit 262f2b53f679 ("brcmfmac: call brcmf_attach() just before calling
|
||||
brcmf_bus_started()") changed the initialization order of the brcmfmac
|
||||
SDIO driver. Unfortunately since brcmf_sdiod_intr_register() is now
|
||||
called before the sdiodev->bus_if initialization, it reads the wrong
|
||||
chip ID and fails to initialize the GPIO on brcm43362. Thus the chip
|
||||
cannot send interrupts and fails to probe:
|
||||
|
||||
[ 12.517023] brcmfmac: brcmf_sdio_bus_rxctl: resumed on timeout
|
||||
[ 12.531214] ieee80211 phy0: brcmf_bus_started: failed: -110
|
||||
[ 12.536976] ieee80211 phy0: brcmf_attach: dongle is not responding: err=-110
|
||||
[ 12.566467] brcmfmac: brcmf_sdio_firmware_callback: brcmf_attach failed
|
||||
|
||||
Initialize the bus interface earlier to ensure that
|
||||
brcmf_sdiod_intr_register() properly sets up the OOB interrupt.
|
||||
|
||||
BugLink: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908438
|
||||
Fixes: 262f2b53f679 ("brcmfmac: call brcmf_attach() just before calling brcmf_bus_started()")
|
||||
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
|
||||
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4247,6 +4247,12 @@ static void brcmf_sdio_firmware_callback
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
+ /* Assign bus interface call back */
|
||||
+ sdiod->bus_if->dev = sdiod->dev;
|
||||
+ sdiod->bus_if->ops = &brcmf_sdio_bus_ops;
|
||||
+ sdiod->bus_if->chip = bus->ci->chip;
|
||||
+ sdiod->bus_if->chiprev = bus->ci->chiprev;
|
||||
+
|
||||
/* Allow full data communication using DPC from now on. */
|
||||
brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA);
|
||||
|
||||
@@ -4263,12 +4269,6 @@ static void brcmf_sdio_firmware_callback
|
||||
|
||||
sdio_release_host(sdiod->func1);
|
||||
|
||||
- /* Assign bus interface call back */
|
||||
- sdiod->bus_if->dev = sdiod->dev;
|
||||
- sdiod->bus_if->ops = &brcmf_sdio_bus_ops;
|
||||
- sdiod->bus_if->chip = bus->ci->chip;
|
||||
- sdiod->bus_if->chiprev = bus->ci->chiprev;
|
||||
-
|
||||
err = brcmf_alloc(sdiod->dev, sdiod->settings);
|
||||
if (err) {
|
||||
brcmf_err("brcmf_alloc failed\n");
|
||||
@@ -0,0 +1,103 @@
|
||||
From 24332f8068ff6df7f16aefee45d514de1de4de80 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 26 Dec 2019 14:30:49 +0100
|
||||
Subject: [PATCH] brcmfmac: simplify building interface combinations
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Move similar/duplicated code out of combination specific code blocks.
|
||||
This simplifies code a bit and allows adding more combinations later.
|
||||
A list of combinations remains unchanged.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 43 ++++++-------------
|
||||
1 file changed, 14 insertions(+), 29 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6471,12 +6471,13 @@ static int brcmf_setup_ifmodes(struct wi
|
||||
struct ieee80211_iface_limit *c0_limits = NULL;
|
||||
struct ieee80211_iface_limit *p2p_limits = NULL;
|
||||
struct ieee80211_iface_limit *mbss_limits = NULL;
|
||||
- bool mbss, p2p, rsdb;
|
||||
+ bool mbss, p2p, rsdb, mchan;
|
||||
int i, c, n_combos;
|
||||
|
||||
mbss = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MBSS);
|
||||
p2p = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_P2P);
|
||||
rsdb = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_RSDB);
|
||||
+ mchan = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MCHAN);
|
||||
|
||||
n_combos = 1 + !!(p2p && !rsdb) + !!mbss;
|
||||
combo = kcalloc(n_combos, sizeof(*combo), GFP_KERNEL);
|
||||
@@ -6486,6 +6487,10 @@ static int brcmf_setup_ifmodes(struct wi
|
||||
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_ADHOC) |
|
||||
BIT(NL80211_IFTYPE_AP);
|
||||
+ if (p2p)
|
||||
+ wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
+ BIT(NL80211_IFTYPE_P2P_GO) |
|
||||
+ BIT(NL80211_IFTYPE_P2P_DEVICE);
|
||||
|
||||
c = 0;
|
||||
i = 0;
|
||||
@@ -6497,48 +6502,28 @@ static int brcmf_setup_ifmodes(struct wi
|
||||
c0_limits = kcalloc(2, sizeof(*c0_limits), GFP_KERNEL);
|
||||
if (!c0_limits)
|
||||
goto err;
|
||||
- if (p2p && rsdb) {
|
||||
- combo[c].num_different_channels = 2;
|
||||
- wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
- BIT(NL80211_IFTYPE_P2P_GO) |
|
||||
- BIT(NL80211_IFTYPE_P2P_DEVICE);
|
||||
- c0_limits[i].max = 2;
|
||||
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
||||
+
|
||||
+ combo[c].num_different_channels = 1 + (rsdb || (p2p && mchan));
|
||||
+ c0_limits[i].max = 1 + rsdb;
|
||||
+ c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
||||
+ if (p2p) {
|
||||
c0_limits[i].max = 1;
|
||||
c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_DEVICE);
|
||||
- c0_limits[i].max = 2;
|
||||
+ c0_limits[i].max = 1 + rsdb;
|
||||
c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
BIT(NL80211_IFTYPE_P2P_GO);
|
||||
+ }
|
||||
+ if (p2p && rsdb) {
|
||||
c0_limits[i].max = 2;
|
||||
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
||||
combo[c].max_interfaces = 5;
|
||||
} else if (p2p) {
|
||||
- if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MCHAN))
|
||||
- combo[c].num_different_channels = 2;
|
||||
- else
|
||||
- combo[c].num_different_channels = 1;
|
||||
- c0_limits[i].max = 1;
|
||||
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
||||
- wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
- BIT(NL80211_IFTYPE_P2P_GO) |
|
||||
- BIT(NL80211_IFTYPE_P2P_DEVICE);
|
||||
- c0_limits[i].max = 1;
|
||||
- c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_DEVICE);
|
||||
- c0_limits[i].max = 1;
|
||||
- c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
- BIT(NL80211_IFTYPE_P2P_GO);
|
||||
combo[c].max_interfaces = i;
|
||||
} else if (rsdb) {
|
||||
- combo[c].num_different_channels = 2;
|
||||
- c0_limits[i].max = 2;
|
||||
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
||||
c0_limits[i].max = 2;
|
||||
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
||||
combo[c].max_interfaces = 3;
|
||||
} else {
|
||||
- combo[c].num_different_channels = 1;
|
||||
- c0_limits[i].max = 1;
|
||||
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
||||
c0_limits[i].max = 1;
|
||||
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
||||
combo[c].max_interfaces = i;
|
||||
@@ -0,0 +1,345 @@
|
||||
From 20f2c5fa3af060401c72e444999470a4cab641cf Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 26 Dec 2019 14:30:50 +0100
|
||||
Subject: [PATCH] brcmfmac: add initial support for monitor mode
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Report monitor interface availability using cfg80211 and support it in
|
||||
the add_virtual_intf() and del_virtual_intf() callbacks. This new
|
||||
feature is conditional and depends on firmware flagging monitor packets.
|
||||
Receiving monitor frames is already handled by the brcmf_netif_mon_rx().
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 112 ++++++++++++++++--
|
||||
.../broadcom/brcm80211/brcmfmac/core.c | 68 ++++++++++-
|
||||
.../broadcom/brcm80211/brcmfmac/core.h | 2 +
|
||||
.../broadcom/brcm80211/brcmfmac/feature.c | 1 +
|
||||
.../broadcom/brcm80211/brcmfmac/feature.h | 2 +
|
||||
.../broadcom/brcm80211/brcmfmac/fwil.h | 2 +
|
||||
6 files changed, 174 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/vmalloc.h>
|
||||
#include <net/cfg80211.h>
|
||||
#include <net/netlink.h>
|
||||
+#include <uapi/linux/if_arp.h>
|
||||
|
||||
#include <brcmu_utils.h>
|
||||
#include <defs.h>
|
||||
@@ -619,6 +620,82 @@ static bool brcmf_is_ibssmode(struct brc
|
||||
return vif->wdev.iftype == NL80211_IFTYPE_ADHOC;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * brcmf_mon_add_vif() - create monitor mode virtual interface
|
||||
+ *
|
||||
+ * @wiphy: wiphy device of new interface.
|
||||
+ * @name: name of the new interface.
|
||||
+ */
|
||||
+static struct wireless_dev *brcmf_mon_add_vif(struct wiphy *wiphy,
|
||||
+ const char *name)
|
||||
+{
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
+ struct brcmf_cfg80211_vif *vif;
|
||||
+ struct net_device *ndev;
|
||||
+ struct brcmf_if *ifp;
|
||||
+ int err;
|
||||
+
|
||||
+ if (cfg->pub->mon_if) {
|
||||
+ err = -EEXIST;
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+
|
||||
+ vif = brcmf_alloc_vif(cfg, NL80211_IFTYPE_MONITOR);
|
||||
+ if (IS_ERR(vif)) {
|
||||
+ err = PTR_ERR(vif);
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+
|
||||
+ ndev = alloc_netdev(sizeof(*ifp), name, NET_NAME_UNKNOWN, ether_setup);
|
||||
+ if (!ndev) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto err_free_vif;
|
||||
+ }
|
||||
+ ndev->type = ARPHRD_IEEE80211_RADIOTAP;
|
||||
+ ndev->ieee80211_ptr = &vif->wdev;
|
||||
+ ndev->needs_free_netdev = true;
|
||||
+ ndev->priv_destructor = brcmf_cfg80211_free_netdev;
|
||||
+ SET_NETDEV_DEV(ndev, wiphy_dev(cfg->wiphy));
|
||||
+
|
||||
+ ifp = netdev_priv(ndev);
|
||||
+ ifp->vif = vif;
|
||||
+ ifp->ndev = ndev;
|
||||
+ ifp->drvr = cfg->pub;
|
||||
+
|
||||
+ vif->ifp = ifp;
|
||||
+ vif->wdev.netdev = ndev;
|
||||
+
|
||||
+ err = brcmf_net_mon_attach(ifp);
|
||||
+ if (err) {
|
||||
+ brcmf_err("Failed to attach %s device\n", ndev->name);
|
||||
+ free_netdev(ndev);
|
||||
+ goto err_free_vif;
|
||||
+ }
|
||||
+
|
||||
+ cfg->pub->mon_if = ifp;
|
||||
+
|
||||
+ return &vif->wdev;
|
||||
+
|
||||
+err_free_vif:
|
||||
+ brcmf_free_vif(vif);
|
||||
+err_out:
|
||||
+ return ERR_PTR(err);
|
||||
+}
|
||||
+
|
||||
+static int brcmf_mon_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev)
|
||||
+{
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
+ struct net_device *ndev = wdev->netdev;
|
||||
+
|
||||
+ ndev->netdev_ops->ndo_stop(ndev);
|
||||
+
|
||||
+ brcmf_net_detach(ndev, true);
|
||||
+
|
||||
+ cfg->pub->mon_if = NULL;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy,
|
||||
const char *name,
|
||||
unsigned char name_assign_type,
|
||||
@@ -641,9 +718,10 @@ static struct wireless_dev *brcmf_cfg802
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
- case NL80211_IFTYPE_MONITOR:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
+ case NL80211_IFTYPE_MONITOR:
|
||||
+ return brcmf_mon_add_vif(wiphy, name);
|
||||
case NL80211_IFTYPE_AP:
|
||||
wdev = brcmf_ap_add_vif(wiphy, name, params);
|
||||
break;
|
||||
@@ -826,9 +904,10 @@ int brcmf_cfg80211_del_iface(struct wiph
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
- case NL80211_IFTYPE_MONITOR:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
return -EOPNOTSUPP;
|
||||
+ case NL80211_IFTYPE_MONITOR:
|
||||
+ return brcmf_mon_del_vif(wiphy, wdev);
|
||||
case NL80211_IFTYPE_AP:
|
||||
return brcmf_cfg80211_del_ap_iface(wiphy, wdev);
|
||||
case NL80211_IFTYPE_P2P_CLIENT:
|
||||
@@ -6471,9 +6550,10 @@ static int brcmf_setup_ifmodes(struct wi
|
||||
struct ieee80211_iface_limit *c0_limits = NULL;
|
||||
struct ieee80211_iface_limit *p2p_limits = NULL;
|
||||
struct ieee80211_iface_limit *mbss_limits = NULL;
|
||||
- bool mbss, p2p, rsdb, mchan;
|
||||
- int i, c, n_combos;
|
||||
+ bool mon_flag, mbss, p2p, rsdb, mchan;
|
||||
+ int i, c, n_combos, n_limits;
|
||||
|
||||
+ mon_flag = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MONITOR_FLAG);
|
||||
mbss = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MBSS);
|
||||
p2p = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_P2P);
|
||||
rsdb = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_RSDB);
|
||||
@@ -6487,6 +6567,8 @@ static int brcmf_setup_ifmodes(struct wi
|
||||
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_ADHOC) |
|
||||
BIT(NL80211_IFTYPE_AP);
|
||||
+ if (mon_flag)
|
||||
+ wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR);
|
||||
if (p2p)
|
||||
wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
BIT(NL80211_IFTYPE_P2P_GO) |
|
||||
@@ -6494,18 +6576,18 @@ static int brcmf_setup_ifmodes(struct wi
|
||||
|
||||
c = 0;
|
||||
i = 0;
|
||||
- if (p2p && rsdb)
|
||||
- c0_limits = kcalloc(4, sizeof(*c0_limits), GFP_KERNEL);
|
||||
- else if (p2p)
|
||||
- c0_limits = kcalloc(3, sizeof(*c0_limits), GFP_KERNEL);
|
||||
- else
|
||||
- c0_limits = kcalloc(2, sizeof(*c0_limits), GFP_KERNEL);
|
||||
+ n_limits = 1 + mon_flag + (p2p ? 2 : 0) + (rsdb || !p2p);
|
||||
+ c0_limits = kcalloc(n_limits, sizeof(*c0_limits), GFP_KERNEL);
|
||||
if (!c0_limits)
|
||||
goto err;
|
||||
|
||||
combo[c].num_different_channels = 1 + (rsdb || (p2p && mchan));
|
||||
c0_limits[i].max = 1 + rsdb;
|
||||
c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
||||
+ if (mon_flag) {
|
||||
+ c0_limits[i].max = 1;
|
||||
+ c0_limits[i++].types = BIT(NL80211_IFTYPE_MONITOR);
|
||||
+ }
|
||||
if (p2p) {
|
||||
c0_limits[i].max = 1;
|
||||
c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_DEVICE);
|
||||
@@ -6554,14 +6636,20 @@ static int brcmf_setup_ifmodes(struct wi
|
||||
if (mbss) {
|
||||
c++;
|
||||
i = 0;
|
||||
- mbss_limits = kcalloc(1, sizeof(*mbss_limits), GFP_KERNEL);
|
||||
+ n_limits = 1 + mon_flag;
|
||||
+ mbss_limits = kcalloc(n_limits, sizeof(*mbss_limits),
|
||||
+ GFP_KERNEL);
|
||||
if (!mbss_limits)
|
||||
goto err;
|
||||
mbss_limits[i].max = 4;
|
||||
mbss_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
||||
+ if (mon_flag) {
|
||||
+ mbss_limits[i].max = 1;
|
||||
+ mbss_limits[i++].types = BIT(NL80211_IFTYPE_MONITOR);
|
||||
+ }
|
||||
combo[c].beacon_int_infra_match = true;
|
||||
combo[c].num_different_channels = 1;
|
||||
- combo[c].max_interfaces = 4;
|
||||
+ combo[c].max_interfaces = 4 + mon_flag;
|
||||
combo[c].n_limits = i;
|
||||
combo[c].limits = mbss_limits;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -690,7 +690,7 @@ fail:
|
||||
return -EBADE;
|
||||
}
|
||||
|
||||
-static void brcmf_net_detach(struct net_device *ndev, bool rtnl_locked)
|
||||
+void brcmf_net_detach(struct net_device *ndev, bool rtnl_locked)
|
||||
{
|
||||
if (ndev->reg_state == NETREG_REGISTERED) {
|
||||
if (rtnl_locked)
|
||||
@@ -703,6 +703,72 @@ static void brcmf_net_detach(struct net_
|
||||
}
|
||||
}
|
||||
|
||||
+static int brcmf_net_mon_open(struct net_device *ndev)
|
||||
+{
|
||||
+ struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
+ struct brcmf_pub *drvr = ifp->drvr;
|
||||
+ u32 monitor;
|
||||
+ int err;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Enter\n");
|
||||
+
|
||||
+ err = brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_MONITOR, &monitor);
|
||||
+ if (err) {
|
||||
+ bphy_err(drvr, "BRCMF_C_GET_MONITOR error (%d)\n", err);
|
||||
+ return err;
|
||||
+ } else if (monitor) {
|
||||
+ bphy_err(drvr, "Monitor mode is already enabled\n");
|
||||
+ return -EEXIST;
|
||||
+ }
|
||||
+
|
||||
+ monitor = 3;
|
||||
+ err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_MONITOR, monitor);
|
||||
+ if (err)
|
||||
+ bphy_err(drvr, "BRCMF_C_SET_MONITOR error (%d)\n", err);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static int brcmf_net_mon_stop(struct net_device *ndev)
|
||||
+{
|
||||
+ struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
+ struct brcmf_pub *drvr = ifp->drvr;
|
||||
+ u32 monitor;
|
||||
+ int err;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Enter\n");
|
||||
+
|
||||
+ monitor = 0;
|
||||
+ err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_MONITOR, monitor);
|
||||
+ if (err)
|
||||
+ bphy_err(drvr, "BRCMF_C_SET_MONITOR error (%d)\n", err);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static const struct net_device_ops brcmf_netdev_ops_mon = {
|
||||
+ .ndo_open = brcmf_net_mon_open,
|
||||
+ .ndo_stop = brcmf_net_mon_stop,
|
||||
+};
|
||||
+
|
||||
+int brcmf_net_mon_attach(struct brcmf_if *ifp)
|
||||
+{
|
||||
+ struct brcmf_pub *drvr = ifp->drvr;
|
||||
+ struct net_device *ndev;
|
||||
+ int err;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Enter\n");
|
||||
+
|
||||
+ ndev = ifp->ndev;
|
||||
+ ndev->netdev_ops = &brcmf_netdev_ops_mon;
|
||||
+
|
||||
+ err = register_netdevice(ndev);
|
||||
+ if (err)
|
||||
+ bphy_err(drvr, "Failed to register %s device\n", ndev->name);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on)
|
||||
{
|
||||
struct net_device *ndev;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -210,6 +210,8 @@ void brcmf_txflowblock_if(struct brcmf_i
|
||||
void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
|
||||
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||
void brcmf_netif_mon_rx(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||
+void brcmf_net_detach(struct net_device *ndev, bool rtnl_locked);
|
||||
+int brcmf_net_mon_attach(struct brcmf_if *ifp);
|
||||
void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
|
||||
int __init brcmf_core_init(void);
|
||||
void __exit brcmf_core_exit(void);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
@@ -38,6 +38,7 @@ static const struct brcmf_feat_fwcap brc
|
||||
{ BRCMF_FEAT_MCHAN, "mchan" },
|
||||
{ BRCMF_FEAT_P2P, "p2p" },
|
||||
{ BRCMF_FEAT_MONITOR, "monitor" },
|
||||
+ { BRCMF_FEAT_MONITOR_FLAG, "rtap" },
|
||||
{ BRCMF_FEAT_MONITOR_FMT_RADIOTAP, "rtap" },
|
||||
{ BRCMF_FEAT_DOT11H, "802.11h" }
|
||||
};
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
||||
@@ -23,6 +23,7 @@
|
||||
* GSCAN: enhanced scan offload feature.
|
||||
* FWSUP: Firmware supplicant.
|
||||
* MONITOR: firmware can pass monitor packets to host.
|
||||
+ * MONITOR_FLAG: firmware flags monitor packets.
|
||||
* MONITOR_FMT_RADIOTAP: firmware provides monitor packets with radiotap header
|
||||
* MONITOR_FMT_HW_RX_HDR: firmware provides monitor packets with hw/ucode header
|
||||
* DOT11H: firmware supports 802.11h
|
||||
@@ -43,6 +44,7 @@
|
||||
BRCMF_FEAT_DEF(GSCAN) \
|
||||
BRCMF_FEAT_DEF(FWSUP) \
|
||||
BRCMF_FEAT_DEF(MONITOR) \
|
||||
+ BRCMF_FEAT_DEF(MONITOR_FLAG) \
|
||||
BRCMF_FEAT_DEF(MONITOR_FMT_RADIOTAP) \
|
||||
BRCMF_FEAT_DEF(MONITOR_FMT_HW_RX_HDR) \
|
||||
BRCMF_FEAT_DEF(DOT11H)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h
|
||||
@@ -49,6 +49,8 @@
|
||||
#define BRCMF_C_GET_PM 85
|
||||
#define BRCMF_C_SET_PM 86
|
||||
#define BRCMF_C_GET_REVINFO 98
|
||||
+#define BRCMF_C_GET_MONITOR 107
|
||||
+#define BRCMF_C_SET_MONITOR 108
|
||||
#define BRCMF_C_GET_CURR_RATESET 114
|
||||
#define BRCMF_C_GET_AP 117
|
||||
#define BRCMF_C_SET_AP 118
|
||||
@@ -0,0 +1,24 @@
|
||||
From 627b0d094240c38393b2f2d40626c33a8fff6103 Mon Sep 17 00:00:00 2001
|
||||
From: yuehaibing <yuehaibing@huawei.com>
|
||||
Date: Wed, 8 Jan 2020 21:57:48 +0800
|
||||
Subject: [PATCH] brcmfmac: Remove always false 'idx < 0' statement
|
||||
|
||||
idx is declared as u32, it will never less than 0.
|
||||
|
||||
Signed-off-by: yuehaibing <yuehaibing@huawei.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -365,7 +365,7 @@ brcmf_msgbuf_get_pktid(struct device *de
|
||||
struct brcmf_msgbuf_pktid *pktid;
|
||||
struct sk_buff *skb;
|
||||
|
||||
- if (idx < 0 || idx >= pktids->array_size) {
|
||||
+ if (idx >= pktids->array_size) {
|
||||
brcmf_err("Invalid packet id %d (max %d)\n", idx,
|
||||
pktids->array_size);
|
||||
return NULL;
|
||||
@@ -0,0 +1,100 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Fri, 27 Mar 2020 13:40:50 +0100
|
||||
Subject: [PATCH] brcmfmac: add stub for monitor interface xmit
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
According to the struct net_device_ops documentation .ndo_start_xmit is
|
||||
"Required; cannot be NULL.". Missing it may crash kernel easily:
|
||||
|
||||
[ 341.216709] Unable to handle kernel NULL pointer dereference at virtual address 00000000
|
||||
[ 341.224836] pgd = 26088755
|
||||
[ 341.227544] [00000000] *pgd=00000000
|
||||
[ 341.231135] Internal error: Oops: 80000007 [#1] SMP ARM
|
||||
[ 341.236367] Modules linked in: pppoe ppp_async iptable_nat brcmfmac xt_state xt_nat xt_conntrack xt_REDIRECT xt_MASQU
|
||||
[ 341.304689] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.24 #0
|
||||
[ 341.310621] Hardware name: BCM5301X
|
||||
[ 341.314116] PC is at 0x0
|
||||
[ 341.316664] LR is at dev_hard_start_xmit+0x8c/0x11c
|
||||
[ 341.321546] pc : [<00000000>] lr : [<c0469fa8>] psr: 60000113
|
||||
[ 341.327821] sp : c0801c30 ip : c610cf00 fp : c08048e4
|
||||
[ 341.333051] r10: c073a63a r9 : c08044dc r8 : c6c04e00
|
||||
[ 341.338283] r7 : 00000000 r6 : c60f5000 r5 : 00000000 r4 : c6a9c3c0
|
||||
[ 341.344820] r3 : 00000000 r2 : bf25a13c r1 : c60f5000 r0 : c6a9c3c0
|
||||
[ 341.351358] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
|
||||
[ 341.358504] Control: 10c5387d Table: 0611c04a DAC: 00000051
|
||||
[ 341.364257] Process swapper/0 (pid: 0, stack limit = 0xc68ed0ca)
|
||||
[ 341.370271] Stack: (0xc0801c30 to 0xc0802000)
|
||||
[ 341.374633] 1c20: c6e7d480 c0802d00 c60f5050 c0801c6c
|
||||
[ 341.382825] 1c40: c60f5000 c6a9c3c0 c6f90000 c6f9005c c6c04e00 c60f5000 00000000 c6f9005c
|
||||
[ 341.391015] 1c60: 00000000 c04a033c 00f90200 00000010 c6a9c3c0 c6a9c3c0 c6f90000 00000000
|
||||
[ 341.399205] 1c80: 00000000 00000000 00000000 c046a7ac c6f9005c 00000001 fffffff4 00000000
|
||||
[ 341.407395] 1ca0: c6f90200 00000000 c60f5000 c0479550 00000000 c6f90200 c6a9c3c0 16000000
|
||||
[ 341.415586] 1cc0: 0000001c 6f4ad52f c6197040 b6df9387 36000000 c0520404 c073a80c c6a9c3c0
|
||||
[ 341.423777] 1ce0: 00000000 c6d643c0 c6a9c3c0 c0800024 00000001 00000001 c6d643c8 c6a9c3c0
|
||||
[ 341.431967] 1d00: c081b9c0 c7abca80 c610c840 c081b9c0 0000001c 00400000 c6bc5e6c c0522fb4
|
||||
[ 341.440157] 1d20: c6d64400 00000004 c6bc5e0a 00000000 c60f5000 c7abca80 c081b9c0 c0522f54
|
||||
[ 341.448348] 1d40: c6a9c3c0 c7abca80 c0803e48 c0549c94 c610c828 0000000a c0801d74 00000003
|
||||
[ 341.456538] 1d60: c6ec8f0a 00000000 c60f5000 c7abca80 c081b9c0 c0548520 0000000a 00000000
|
||||
[ 341.464728] 1d80: 00000000 003a0000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
[ 341.472919] 1da0: 000002ff 00000000 00000000 16000000 00000000 00000000 00000000 00000000
|
||||
[ 341.481110] 1dc0: 00000000 0000008f 00000000 00000000 00000000 2d132a69 c6bc5e40 00000000
|
||||
[ 341.489300] 1de0: c6bc5e40 c6a9c3c0 00000000 c6ec8e50 00000001 c054b070 00000001 00000000
|
||||
[ 341.497490] 1e00: c0807200 c6bc5e00 00000000 ffffe000 00000100 c054aea4 00000000 00000000
|
||||
[ 341.505681] 1e20: 00000122 00400000 c0802d00 c0172e80 6f56a70e ffffffff 6f56a70e c7eb9cc0
|
||||
[ 341.513871] 1e40: c7eb82c0 00000000 c0801e60 c017309c 00000000 00000000 07780000 c07382c0
|
||||
[ 341.522061] 1e60: 00000000 c7eb9cc0 c0739cc0 c0803f74 c0801e70 c0801e70 c0801ea4 c013d380
|
||||
[ 341.530253] 1e80: 00000000 000000a0 00000001 c0802084 c0802080 40000001 ffffe000 00000100
|
||||
[ 341.538443] 1ea0: c0802080 c01021e8 c8803100 10c5387d 00000000 c07341f0 c0739880 0000000a
|
||||
[ 341.546633] 1ec0: c0734180 00001017 c0802d00 c062aa98 00200002 c062aa60 c8803100 c073984c
|
||||
[ 341.554823] 1ee0: 00000000 00000001 00000000 c7810000 c8803100 10c5387d 00000000 c011c188
|
||||
[ 341.563014] 1f00: c073984c c015f0f8 c0804244 c0815ae4 c880210c c8802100 c0801f40 c037c584
|
||||
[ 341.571204] 1f20: c01035f8 60000013 ffffffff c0801f74 c080afd4 c0800000 10c5387d c0101a8c
|
||||
[ 341.579395] 1f40: 00000000 004ac9dc c7eba4b4 c010ee60 ffffe000 c0803e68 c0803ea8 00000001
|
||||
[ 341.587587] 1f60: c080afd4 c062ca20 10c5387d 00000000 00000000 c0801f90 c01035f4 c01035f8
|
||||
[ 341.595776] 1f80: 60000013 ffffffff 00000051 00000000 ffffe000 c013ff50 000000ce c0803e40
|
||||
[ 341.603967] 1fa0: c082216c 00000000 00000001 c072ba38 10c5387d c0140214 c0822184 c0700df8
|
||||
[ 341.612157] 1fc0: ffffffff ffffffff 00000000 c070058c c072ba38 2d162e71 00000000 c0700330
|
||||
[ 341.620348] 1fe0: 00000051 10c0387d 000000ff 00a521d0 413fc090 00000000 00000000 00000000
|
||||
[ 341.628558] [<c0469fa8>] (dev_hard_start_xmit) from [<c04a033c>] (sch_direct_xmit+0xe4/0x2bc)
|
||||
[ 341.637106] [<c04a033c>] (sch_direct_xmit) from [<c046a7ac>] (__dev_queue_xmit+0x6a4/0x72c)
|
||||
[ 341.645481] [<c046a7ac>] (__dev_queue_xmit) from [<c0520404>] (ip6_finish_output2+0x18c/0x434)
|
||||
[ 341.654112] [<c0520404>] (ip6_finish_output2) from [<c0522fb4>] (ip6_output+0x5c/0xd0)
|
||||
[ 341.662053] [<c0522fb4>] (ip6_output) from [<c0549c94>] (mld_sendpack+0x1a0/0x1a8)
|
||||
[ 341.669640] [<c0549c94>] (mld_sendpack) from [<c054b070>] (mld_ifc_timer_expire+0x1cc/0x2e4)
|
||||
[ 341.678111] [<c054b070>] (mld_ifc_timer_expire) from [<c0172e80>] (call_timer_fn.constprop.3+0x24/0x98)
|
||||
[ 341.687527] [<c0172e80>] (call_timer_fn.constprop.3) from [<c017309c>] (run_timer_softirq+0x1a8/0x1e4)
|
||||
[ 341.696860] [<c017309c>] (run_timer_softirq) from [<c01021e8>] (__do_softirq+0x120/0x2b0)
|
||||
[ 341.705066] [<c01021e8>] (__do_softirq) from [<c011c188>] (irq_exit+0x78/0x84)
|
||||
[ 341.712317] [<c011c188>] (irq_exit) from [<c015f0f8>] (__handle_domain_irq+0x60/0xb4)
|
||||
[ 341.720179] [<c015f0f8>] (__handle_domain_irq) from [<c037c584>] (gic_handle_irq+0x4c/0x90)
|
||||
[ 341.728549] [<c037c584>] (gic_handle_irq) from [<c0101a8c>] (__irq_svc+0x6c/0x90)
|
||||
|
||||
Fixes: 20f2c5fa3af0 ("brcmfmac: add initial support for monitor mode")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -746,9 +746,18 @@ static int brcmf_net_mon_stop(struct net
|
||||
return err;
|
||||
}
|
||||
|
||||
+static netdev_tx_t brcmf_net_mon_start_xmit(struct sk_buff *skb,
|
||||
+ struct net_device *ndev)
|
||||
+{
|
||||
+ dev_kfree_skb_any(skb);
|
||||
+
|
||||
+ return NETDEV_TX_OK;
|
||||
+}
|
||||
+
|
||||
static const struct net_device_ops brcmf_netdev_ops_mon = {
|
||||
.ndo_open = brcmf_net_mon_open,
|
||||
.ndo_stop = brcmf_net_mon_stop,
|
||||
+ .ndo_start_xmit = brcmf_net_mon_start_xmit,
|
||||
};
|
||||
|
||||
int brcmf_net_mon_attach(struct brcmf_if *ifp)
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1479,6 +1479,7 @@ int __init brcmf_core_init(void)
|
||||
@@ -1554,6 +1554,7 @@ int __init brcmf_core_init(void)
|
||||
{
|
||||
if (!schedule_work(&brcmf_driver_work))
|
||||
return -EBUSY;
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -628,8 +628,36 @@ static struct wireless_dev *brcmf_cfg802
|
||||
@@ -705,8 +705,36 @@ static struct wireless_dev *brcmf_cfg802
|
||||
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_pub *drvr = cfg->pub;
|
||||
struct wireless_dev *wdev;
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -2787,6 +2787,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
|
||||
@@ -2866,6 +2866,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
|
||||
* preference in cfg struct to apply this to
|
||||
* FW later while initializing the dongle
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
|
||||
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
|
||||
@@ -11498,6 +11498,15 @@ static const struct attribute_group ipw_
|
||||
@@ -11499,6 +11499,15 @@ static const struct attribute_group ipw_
|
||||
.attrs = ipw_sysfs_entries,
|
||||
};
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#ifdef CPTCFG_IPW2200_PROMISCUOUS
|
||||
static int ipw_prom_open(struct net_device *dev)
|
||||
{
|
||||
@@ -11546,15 +11555,6 @@ static netdev_tx_t ipw_prom_hard_start_x
|
||||
@@ -11547,15 +11556,6 @@ static netdev_tx_t ipw_prom_hard_start_x
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
# LED support
|
||||
--- a/drivers/net/wireless/broadcom/b43legacy/main.c
|
||||
+++ b/drivers/net/wireless/broadcom/b43legacy/main.c
|
||||
@@ -1937,7 +1937,7 @@ static int b43legacy_gpio_init(struct b4
|
||||
@@ -1938,7 +1938,7 @@ static int b43legacy_gpio_init(struct b4
|
||||
if (dev->dev->id.revision >= 2)
|
||||
mask |= 0x0010; /* FIXME: This is redundant. */
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
pcidev = bus->pcicore.dev;
|
||||
#endif
|
||||
gpiodev = bus->chipco.dev ? : pcidev;
|
||||
@@ -1956,7 +1956,7 @@ static void b43legacy_gpio_cleanup(struc
|
||||
@@ -1957,7 +1957,7 @@ static void b43legacy_gpio_cleanup(struc
|
||||
struct ssb_bus *bus = dev->dev->bus;
|
||||
struct ssb_device *gpiodev, *pcidev = NULL;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/marvell/libertas/cfg.c
|
||||
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
|
||||
@@ -2041,6 +2041,8 @@ struct wireless_dev *lbs_cfg_alloc(struc
|
||||
@@ -2053,6 +2053,8 @@ struct wireless_dev *lbs_cfg_alloc(struc
|
||||
goto err_wiphy_new;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/marvell/libertas/cfg.c
|
||||
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
|
||||
@@ -2117,6 +2117,8 @@ int lbs_cfg_register(struct lbs_private
|
||||
@@ -2129,6 +2129,8 @@ int lbs_cfg_register(struct lbs_private
|
||||
wdev->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
||||
wdev->wiphy->reg_notifier = lbs_reg_notifier;
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -6612,6 +6612,11 @@ bool cfg80211_iftype_allowed(struct wiph
|
||||
@@ -6632,6 +6632,11 @@ bool cfg80211_iftype_allowed(struct wiph
|
||||
#define wiphy_info(wiphy, format, args...) \
|
||||
dev_info(&(wiphy)->dev, format, ##args)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3800,6 +3800,12 @@ out:
|
||||
@@ -3822,6 +3822,12 @@ out:
|
||||
netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -2238,7 +2238,7 @@ static int ieee80211_scan(struct wiphy *
|
||||
@@ -2188,7 +2188,7 @@ static int ieee80211_scan(struct wiphy *
|
||||
* the frames sent while scanning on other channel will be
|
||||
* lost)
|
||||
*/
|
||||
|
||||
@@ -77,7 +77,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES];
|
||||
|
||||
@@ -2046,6 +2048,7 @@ void ieee80211_txq_remove_vlan(struct ie
|
||||
@@ -2047,6 +2049,7 @@ void ieee80211_txq_remove_vlan(struct ie
|
||||
struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_fill_txq_stats(struct cfg80211_txq_stats *txqstats,
|
||||
struct txq_info *txqi);
|
||||
@@ -100,7 +100,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
(unsigned long) local);
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3485,13 +3485,19 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||
@@ -3487,13 +3487,19 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||
struct ieee80211_tx_info *info;
|
||||
struct ieee80211_tx_data tx;
|
||||
ieee80211_tx_result r;
|
||||
@@ -122,7 +122,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
/* Make sure fragments stay together. */
|
||||
skb = __skb_dequeue(&txqi->frags);
|
||||
if (skb)
|
||||
@@ -3586,6 +3592,7 @@ begin:
|
||||
@@ -3606,6 +3612,7 @@ begin:
|
||||
}
|
||||
|
||||
IEEE80211_SKB_CB(skb)->control.vif = vif;
|
||||
|
||||
@@ -20,16 +20,15 @@ Signed-off-by: Chaitanya TK <chaitanya.mgit@gmail.com>
|
||||
#define IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT 13
|
||||
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||
@@ -1130,7 +1130,7 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
@@ -1136,13 +1136,14 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
struct minstrel_ht_sta_priv *msp = priv_sta;
|
||||
struct minstrel_ht_sta *mi = &msp->ht;
|
||||
struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs;
|
||||
- u16 sta_cap = sta->ht_cap.cap;
|
||||
+ u16 ht_cap = sta->ht_cap.cap;
|
||||
struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
|
||||
struct sta_info *sinfo = container_of(sta, struct sta_info, sta);
|
||||
int use_vht;
|
||||
@@ -1138,6 +1138,7 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
int n_supported = 0;
|
||||
int ack_dur;
|
||||
int stbc;
|
||||
int i;
|
||||
@@ -37,7 +36,7 @@ Signed-off-by: Chaitanya TK <chaitanya.mgit@gmail.com>
|
||||
|
||||
/* fall back to the old minstrel for legacy stations */
|
||||
if (!sta->ht_cap.ht_supported)
|
||||
@@ -1175,16 +1176,24 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
@@ -1180,16 +1181,24 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
}
|
||||
mi->sample_tries = 4;
|
||||
|
||||
@@ -67,7 +66,7 @@ Signed-off-by: Chaitanya TK <chaitanya.mgit@gmail.com>
|
||||
for (i = 0; i < ARRAY_SIZE(mi->groups); i++) {
|
||||
u32 gflags = minstrel_mcs_groups[i].flags;
|
||||
int bw, nss;
|
||||
@@ -1197,10 +1206,10 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
@@ -1202,10 +1211,10 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
|
||||
if (gflags & IEEE80211_TX_RC_SHORT_GI) {
|
||||
if (gflags & IEEE80211_TX_RC_40_MHZ_WIDTH) {
|
||||
|
||||
@@ -96,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||
@@ -1393,7 +1393,6 @@ static const struct rate_control_ops mac
|
||||
@@ -1397,7 +1397,6 @@ static const struct rate_control_ops mac
|
||||
.free = minstrel_ht_free,
|
||||
#ifdef CPTCFG_MAC80211_DEBUGFS
|
||||
.add_sta_debugfs = minstrel_ht_add_sta_debugfs,
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
From: Markus Theil <markus.theil@tu-ilmenau.de>
|
||||
Date: Wed, 18 Dec 2019 15:27:36 +0100
|
||||
Subject: [PATCH] mac80211: fix tx status for no ack cases
|
||||
|
||||
Before this patch, frames which where successfully transmitted without
|
||||
requiring acks where accounted as lost frames.
|
||||
|
||||
Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
|
||||
Link: https://lore.kernel.org/r/20191218142736.15843-1-markus.theil@tu-ilmenau.de
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/status.c
|
||||
+++ b/net/mac80211/status.c
|
||||
@@ -719,6 +719,7 @@ static void __ieee80211_tx_status(struct
|
||||
int rates_idx;
|
||||
bool send_to_cooked;
|
||||
bool acked;
|
||||
+ bool noack_success;
|
||||
struct ieee80211_bar *bar;
|
||||
int shift = 0;
|
||||
int tid = IEEE80211_NUM_TIDS;
|
||||
@@ -736,6 +737,8 @@ static void __ieee80211_tx_status(struct
|
||||
clear_sta_flag(sta, WLAN_STA_SP);
|
||||
|
||||
acked = !!(info->flags & IEEE80211_TX_STAT_ACK);
|
||||
+ noack_success = !!(info->flags &
|
||||
+ IEEE80211_TX_STAT_NOACK_TRANSMITTED);
|
||||
|
||||
/* mesh Peer Service Period support */
|
||||
if (ieee80211_vif_is_mesh(&sta->sdata->vif) &&
|
||||
@@ -800,12 +803,12 @@ static void __ieee80211_tx_status(struct
|
||||
ieee80211_handle_filtered_frame(local, sta, skb);
|
||||
return;
|
||||
} else {
|
||||
- if (!acked)
|
||||
+ if (!acked && !noack_success)
|
||||
sta->status_stats.retry_failed++;
|
||||
sta->status_stats.retry_count += retry_count;
|
||||
|
||||
if (ieee80211_is_data_present(fc)) {
|
||||
- if (!acked)
|
||||
+ if (!acked && !noack_success)
|
||||
sta->status_stats.msdu_failed[tid]++;
|
||||
|
||||
sta->status_stats.msdu_retries[tid] +=
|
||||
@@ -826,7 +829,7 @@ static void __ieee80211_tx_status(struct
|
||||
acked, info->status.tx_time);
|
||||
|
||||
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
|
||||
- if (info->flags & IEEE80211_TX_STAT_ACK) {
|
||||
+ if (acked) {
|
||||
if (sta->status_stats.lost_packets)
|
||||
sta->status_stats.lost_packets = 0;
|
||||
|
||||
@@ -834,6 +837,8 @@ static void __ieee80211_tx_status(struct
|
||||
if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH))
|
||||
sta->status_stats.last_tdls_pkt_time =
|
||||
jiffies;
|
||||
+ } else if (noack_success) {
|
||||
+ /* nothing to do here, do not account as lost */
|
||||
} else {
|
||||
ieee80211_lost_packet(sta, info);
|
||||
}
|
||||
@@ -959,7 +964,7 @@ void ieee80211_tx_status_ext(struct ieee
|
||||
|
||||
sta = container_of(pubsta, struct sta_info, sta);
|
||||
|
||||
- if (!acked)
|
||||
+ if (!acked && !noack_success)
|
||||
sta->status_stats.retry_failed++;
|
||||
sta->status_stats.retry_count += retry_count;
|
||||
|
||||
@@ -974,6 +979,8 @@ void ieee80211_tx_status_ext(struct ieee
|
||||
sta->status_stats.last_tdls_pkt_time = jiffies;
|
||||
} else if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
|
||||
return;
|
||||
+ } else if (noack_success) {
|
||||
+ /* nothing to do here, do not account as lost */
|
||||
} else {
|
||||
ieee80211_lost_packet(sta, info);
|
||||
}
|
||||
@@ -388,7 +388,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
|
||||
static u8 sample_table[SAMPLE_COLUMNS][MCS_GROUP_RATES] __read_mostly;
|
||||
@@ -1146,12 +1142,10 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
@@ -1151,12 +1147,10 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(minstrel_mcs_groups) != MINSTREL_GROUPS_NB);
|
||||
|
||||
@@ -402,7 +402,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
msp->is_ht = true;
|
||||
memset(mi, 0, sizeof(*mi));
|
||||
@@ -1226,10 +1220,9 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
@@ -1231,10 +1225,9 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
|
||||
/* HT rate */
|
||||
if (gflags & IEEE80211_TX_RC_MCS) {
|
||||
@@ -414,7 +414,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
mi->supported[i] = mcs->rx_mask[nss - 1];
|
||||
if (mi->supported[i])
|
||||
n_supported++;
|
||||
@@ -1349,16 +1342,88 @@ minstrel_ht_free_sta(void *priv, struct
|
||||
@@ -1353,16 +1346,88 @@ minstrel_ht_free_sta(void *priv, struct
|
||||
kfree(msp);
|
||||
}
|
||||
|
||||
@@ -505,7 +505,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static u32 minstrel_ht_get_expected_throughput(void *priv_sta)
|
||||
@@ -1417,14 +1482,14 @@ static void __init init_sample_table(voi
|
||||
@@ -1421,14 +1486,14 @@ static void __init init_sample_table(voi
|
||||
}
|
||||
|
||||
int __init
|
||||
|
||||
@@ -118,7 +118,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
-#define CCK_GROUP \
|
||||
+#define CCK_GROUP(_s) \
|
||||
[MINSTREL_CCK_GROUP] = { \
|
||||
.streams = 0, \
|
||||
.streams = 1, \
|
||||
.flags = 0, \
|
||||
+ .shift = _s, \
|
||||
.duration = { \
|
||||
@@ -218,7 +218,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
|
||||
static u8 sample_table[SAMPLE_COLUMNS][MCS_GROUP_RATES] __read_mostly;
|
||||
@@ -307,7 +310,8 @@ minstrel_ht_get_tp_avg(struct minstrel_h
|
||||
@@ -308,7 +311,8 @@ minstrel_ht_get_tp_avg(struct minstrel_h
|
||||
if (group != MINSTREL_CCK_GROUP)
|
||||
nsecs = 1000 * mi->overhead / MINSTREL_TRUNC(mi->avg_ampdu_len);
|
||||
|
||||
@@ -228,7 +228,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* For the throughput calculation, limit the probability value to 90% to
|
||||
@@ -755,12 +759,19 @@ minstrel_ht_tx_status(void *priv, struct
|
||||
@@ -756,12 +760,19 @@ minstrel_ht_tx_status(void *priv, struct
|
||||
minstrel_ht_update_rates(mp, mi);
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
unsigned int tx_time, tx_time_rtscts, tx_time_data;
|
||||
unsigned int cw = mp->cw_min;
|
||||
unsigned int ctime = 0;
|
||||
@@ -779,8 +790,7 @@ minstrel_calc_retransmit(struct minstrel
|
||||
@@ -780,8 +791,7 @@ minstrel_calc_retransmit(struct minstrel
|
||||
mrs->retry_count_rtscts = 2;
|
||||
mrs->retry_updated = true;
|
||||
|
||||
@@ -259,7 +259,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* Contention time for first 2 tries */
|
||||
ctime = (t_slot * cw) >> 1;
|
||||
@@ -874,20 +884,24 @@ minstrel_ht_get_max_amsdu_len(struct min
|
||||
@@ -875,20 +885,24 @@ minstrel_ht_get_max_amsdu_len(struct min
|
||||
int group = mi->max_prob_rate / MCS_GROUP_RATES;
|
||||
const struct mcs_group *g = &minstrel_mcs_groups[group];
|
||||
int rate = mi->max_prob_rate % MCS_GROUP_RATES;
|
||||
@@ -286,7 +286,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
return 1600;
|
||||
|
||||
/*
|
||||
@@ -895,7 +909,7 @@ minstrel_ht_get_max_amsdu_len(struct min
|
||||
@@ -896,7 +910,7 @@ minstrel_ht_get_max_amsdu_len(struct min
|
||||
* rate success probability is less than 75%, limit A-MSDU to twice the usual
|
||||
* data packet size
|
||||
*/
|
||||
@@ -295,7 +295,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
(minstrel_ht_get_prob_ewma(mi, mi->max_tp_rate[0]) <
|
||||
MINSTREL_FRAC(75, 100)))
|
||||
return 3200;
|
||||
@@ -942,13 +956,6 @@ minstrel_ht_update_rates(struct minstrel
|
||||
@@ -943,13 +957,6 @@ minstrel_ht_update_rates(struct minstrel
|
||||
rate_control_set_rates(mp->hw, mi->sta, rates);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 10 Feb 2018 13:43:07 +0100
|
||||
Subject: [PATCH] mac80211: minstrel: fix using short preamble CCK rates on
|
||||
HT clients
|
||||
|
||||
mi->supported[MINSTREL_CCK_GROUP] needs to be updated
|
||||
|
||||
Fixes: 782dda00ab8e ("mac80211: minstrel_ht: move short preamble check out of get_rate")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||
@@ -1135,7 +1135,6 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs;
|
||||
u16 ht_cap = sta->ht_cap.cap;
|
||||
struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
|
||||
- struct sta_info *sinfo = container_of(sta, struct sta_info, sta);
|
||||
int use_vht;
|
||||
int n_supported = 0;
|
||||
int ack_dur;
|
||||
@@ -1267,8 +1266,7 @@ minstrel_ht_update_caps(void *priv, stru
|
||||
if (!n_supported)
|
||||
goto use_legacy;
|
||||
|
||||
- if (test_sta_flag(sinfo, WLAN_STA_SHORT_PREAMBLE))
|
||||
- mi->cck_supported_short |= mi->cck_supported_short << 4;
|
||||
+ mi->supported[MINSTREL_CCK_GROUP] |= mi->cck_supported_short << 4;
|
||||
|
||||
/* create an initial rate table with the lowest supported rates */
|
||||
minstrel_ht_update_stats(mp, mi);
|
||||
@@ -1,20 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 1 Mar 2018 13:27:54 +0100
|
||||
Subject: [PATCH] mac80211: minstrel: fix CCK rate group streams value
|
||||
|
||||
Fixes a harmless underflow issue when CCK rates are actively being used
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
#define CCK_GROUP(_s) \
|
||||
[MINSTREL_CCK_GROUP] = { \
|
||||
- .streams = 0, \
|
||||
+ .streams = 1, \
|
||||
.flags = 0, \
|
||||
.shift = _s, \
|
||||
.duration = { \
|
||||
@@ -1,58 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 1 Mar 2018 13:28:48 +0100
|
||||
Subject: [PATCH] mac80211: minstrel: fix sampling/reporting of CCK rates
|
||||
in HT mode
|
||||
|
||||
Long/short preamble selection cannot be sampled separately, since it
|
||||
depends on the BSS state. Because of that, sampling attempts to
|
||||
currently not used preamble modes are not counted in the statistics,
|
||||
which leads to CCK rates being sampled too often.
|
||||
|
||||
Fix statistics accounting for long/short preamble by increasing the
|
||||
index where necessary.
|
||||
Fix excessive CCK rate sampling by dropping unsupported sample attempts.
|
||||
|
||||
This improves throughput on 2.4 GHz channels
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||
@@ -281,7 +281,8 @@ minstrel_ht_get_stats(struct minstrel_pr
|
||||
break;
|
||||
|
||||
/* short preamble */
|
||||
- if (!(mi->supported[group] & BIT(idx)))
|
||||
+ if ((mi->supported[group] & BIT(idx + 4)) &&
|
||||
+ (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE))
|
||||
idx += 4;
|
||||
}
|
||||
return &mi->groups[group].rates[idx];
|
||||
@@ -1080,18 +1081,23 @@ minstrel_ht_get_rate(void *priv, struct
|
||||
return;
|
||||
|
||||
sample_group = &minstrel_mcs_groups[sample_idx / MCS_GROUP_RATES];
|
||||
+ sample_idx %= MCS_GROUP_RATES;
|
||||
+
|
||||
+ if (sample_group == &minstrel_mcs_groups[MINSTREL_CCK_GROUP] &&
|
||||
+ (sample_idx >= 4) != txrc->short_preamble)
|
||||
+ return;
|
||||
+
|
||||
info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
|
||||
rate->count = 1;
|
||||
|
||||
- if (sample_idx / MCS_GROUP_RATES == MINSTREL_CCK_GROUP) {
|
||||
+ if (sample_group == &minstrel_mcs_groups[MINSTREL_CCK_GROUP]) {
|
||||
int idx = sample_idx % ARRAY_SIZE(mp->cck_rates);
|
||||
rate->idx = mp->cck_rates[idx];
|
||||
} else if (sample_group->flags & IEEE80211_TX_RC_VHT_MCS) {
|
||||
ieee80211_rate_set_vht(rate, sample_idx % MCS_GROUP_RATES,
|
||||
sample_group->streams);
|
||||
} else {
|
||||
- rate->idx = sample_idx % MCS_GROUP_RATES +
|
||||
- (sample_group->streams - 1) * 8;
|
||||
+ rate->idx = sample_idx + (sample_group->streams - 1) * 8;
|
||||
}
|
||||
|
||||
rate->flags = sample_group->flags;
|
||||
@@ -1,22 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Fri, 14 Jun 2019 21:12:04 +0200
|
||||
Subject: [PATCH] mac80211: minstrel_ht: fix per-group max throughput rate
|
||||
initialization
|
||||
|
||||
The group number needs to be multiplied by the number of rates per group
|
||||
to get the full rate index
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||
@@ -542,7 +542,7 @@ minstrel_ht_update_stats(struct minstrel
|
||||
|
||||
/* (re)Initialize group rate indexes */
|
||||
for(j = 0; j < MAX_THR_RATES; j++)
|
||||
- tmp_group_tp_rate[j] = group;
|
||||
+ tmp_group_tp_rate[j] = MCS_GROUP_RATES * group;
|
||||
|
||||
for (i = 0; i < MCS_GROUP_RATES; i++) {
|
||||
if (!(mi->supported[group] & BIT(i)))
|
||||
@@ -191,7 +191,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -1244,7 +1244,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
|
||||
@@ -1249,7 +1249,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
|
||||
if (!txq_has_queue(sta->sta.txq[i]))
|
||||
continue;
|
||||
|
||||
@@ -229,7 +229,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -3600,6 +3604,60 @@ out:
|
||||
@@ -3620,6 +3624,60 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
||||
|
||||
@@ -289,4 +289,4 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
+
|
||||
void __ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev,
|
||||
u32 info_flags)
|
||||
u32 info_flags,
|
||||
|
||||
@@ -148,7 +148,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -463,6 +463,7 @@ static const struct nla_policy nl80211_p
|
||||
@@ -469,6 +469,7 @@ static const struct nla_policy nl80211_p
|
||||
[NL80211_ATTR_TXQ_QUANTUM] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_HE_CAPABILITY] = { .type = NLA_BINARY,
|
||||
.len = NL80211_HE_MAX_CAPABILITY_LEN },
|
||||
@@ -156,7 +156,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
};
|
||||
|
||||
/* policy for the key attributes */
|
||||
@@ -4703,6 +4704,11 @@ static int nl80211_send_station(struct s
|
||||
@@ -4709,6 +4710,11 @@ static int nl80211_send_station(struct s
|
||||
PUT_SINFO(PLID, plid, u16);
|
||||
PUT_SINFO(PLINK_STATE, plink_state, u8);
|
||||
PUT_SINFO_U64(RX_DURATION, rx_duration);
|
||||
@@ -168,7 +168,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
switch (rdev->wiphy.signal_type) {
|
||||
case CFG80211_SIGNAL_TYPE_MBM:
|
||||
@@ -5339,6 +5345,15 @@ static int nl80211_set_station(struct sk
|
||||
@@ -5345,6 +5351,15 @@ static int nl80211_set_station(struct sk
|
||||
nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
/* Include parameters for TDLS peer (will check later) */
|
||||
err = nl80211_set_station_tdls(info, ¶ms);
|
||||
if (err)
|
||||
@@ -5477,6 +5492,15 @@ static int nl80211_new_station(struct sk
|
||||
@@ -5483,6 +5498,15 @@ static int nl80211_new_station(struct sk
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
* The values are not guaranteed to be coherent with regard to each other, i.e.
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -1434,6 +1434,9 @@ static int sta_apply_parameters(struct i
|
||||
@@ -1390,6 +1390,9 @@ static int sta_apply_parameters(struct i
|
||||
if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||
sta_apply_mesh_params(local, sta, params);
|
||||
|
||||
@@ -302,7 +302,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
}
|
||||
|
||||
for (i = 0; i < IEEE80211_NUM_TIDS; i++)
|
||||
@@ -1821,6 +1821,27 @@ void ieee80211_sta_set_buffered(struct i
|
||||
@@ -1826,6 +1826,27 @@ void ieee80211_sta_set_buffered(struct i
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_sta_set_buffered);
|
||||
|
||||
@@ -330,7 +330,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
int sta_info_move_state(struct sta_info *sta,
|
||||
enum ieee80211_sta_state new_state)
|
||||
{
|
||||
@@ -2183,6 +2204,23 @@ void sta_set_sinfo(struct sta_info *sta,
|
||||
@@ -2192,6 +2213,23 @@ void sta_set_sinfo(struct sta_info *sta,
|
||||
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
|
||||
}
|
||||
|
||||
@@ -385,7 +385,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
--- a/net/mac80211/status.c
|
||||
+++ b/net/mac80211/status.c
|
||||
@@ -825,6 +825,12 @@ static void __ieee80211_tx_status(struct
|
||||
@@ -828,6 +828,12 @@ static void __ieee80211_tx_status(struct
|
||||
ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data,
|
||||
acked, info->status.tx_time);
|
||||
|
||||
@@ -396,7 +396,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
+ info->status.tx_time, 0);
|
||||
+
|
||||
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
|
||||
if (info->flags & IEEE80211_TX_STAT_ACK) {
|
||||
if (acked) {
|
||||
if (sta->status_stats.lost_packets)
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -412,7 +412,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
spin_lock_bh(&local->active_txq_lock[txqi->txq.ac]);
|
||||
list_del_init(&txqi->schedule_order);
|
||||
spin_unlock_bh(&local->active_txq_lock[txqi->txq.ac]);
|
||||
@@ -3611,11 +3614,28 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -3631,11 +3634,28 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
lockdep_assert_held(&local->active_txq_lock[ac]);
|
||||
|
||||
@@ -442,7 +442,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
return NULL;
|
||||
|
||||
list_del_init(&txqi->schedule_order);
|
||||
@@ -3633,12 +3653,74 @@ void ieee80211_return_txq(struct ieee802
|
||||
@@ -3653,12 +3673,74 @@ void ieee80211_return_txq(struct ieee802
|
||||
lockdep_assert_held(&local->active_txq_lock[txq->ac]);
|
||||
|
||||
if (list_empty(&txqi->schedule_order) &&
|
||||
|
||||
@@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3673,6 +3673,19 @@ void ieee80211_return_txq(struct ieee802
|
||||
@@ -3693,6 +3693,19 @@ void ieee80211_return_txq(struct ieee802
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_return_txq);
|
||||
|
||||
|
||||
@@ -48,15 +48,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (likely(sta)) {
|
||||
if (!IS_ERR(sta))
|
||||
tx->sta = sta;
|
||||
@@ -3523,6 +3523,7 @@ begin:
|
||||
@@ -3525,6 +3525,7 @@ begin:
|
||||
tx.local = local;
|
||||
tx.skb = skb;
|
||||
tx.sdata = vif_to_sdata(info->control.vif);
|
||||
+ tx.hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
||||
|
||||
if (txq->sta)
|
||||
if (txq->sta) {
|
||||
tx.sta = container_of(txq->sta, struct sta_info, sta);
|
||||
@@ -3549,7 +3550,7 @@ begin:
|
||||
@@ -3569,7 +3570,7 @@ begin:
|
||||
|
||||
if (tx.key &&
|
||||
(tx.key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))
|
||||
@@ -65,7 +65,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
ieee80211_xmit_fast_finish(sta->sdata, sta, pn_offs,
|
||||
tx.key, skb);
|
||||
@@ -4006,6 +4007,7 @@ ieee80211_build_data_template(struct iee
|
||||
@@ -4028,6 +4029,7 @@ ieee80211_build_data_template(struct iee
|
||||
hdr = (void *)skb->data;
|
||||
tx.sta = sta_info_get(sdata, hdr->addr1);
|
||||
tx.skb = skb;
|
||||
@@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
rcu_read_unlock();
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -1390,6 +1390,7 @@ void ieee80211_send_auth(struct ieee8021
|
||||
@@ -1396,6 +1396,7 @@ void ieee80211_send_auth(struct ieee8021
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct sk_buff *skb;
|
||||
struct ieee80211_mgmt *mgmt;
|
||||
@@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
int err;
|
||||
|
||||
/* 24 + 6 = header + auth_algo + auth_transaction + status_code */
|
||||
@@ -1413,8 +1414,10 @@ void ieee80211_send_auth(struct ieee8021
|
||||
@@ -1419,8 +1420,10 @@ void ieee80211_send_auth(struct ieee8021
|
||||
skb_put_data(skb, extra, extra_len);
|
||||
|
||||
if (auth_alg == WLAN_AUTH_SHARED_KEY && transaction == 3) {
|
||||
|
||||
@@ -236,7 +236,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (skb->len < len_rthdr + hdrlen)
|
||||
goto fail;
|
||||
@@ -2440,7 +2439,7 @@ static struct sk_buff *ieee80211_build_h
|
||||
@@ -2441,7 +2440,7 @@ static struct sk_buff *ieee80211_build_h
|
||||
struct ieee80211_chanctx_conf *chanctx_conf;
|
||||
struct ieee80211_sub_if_data *ap_sdata;
|
||||
enum nl80211_band band;
|
||||
@@ -245,7 +245,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (IS_ERR(sta))
|
||||
sta = NULL;
|
||||
@@ -2739,7 +2738,9 @@ static struct sk_buff *ieee80211_build_h
|
||||
@@ -2740,7 +2739,9 @@ static struct sk_buff *ieee80211_build_h
|
||||
}
|
||||
|
||||
skb_pull(skb, skip_header_bytes);
|
||||
@@ -255,7 +255,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* So we need to modify the skb header and hence need a copy of
|
||||
@@ -2772,6 +2773,9 @@ static struct sk_buff *ieee80211_build_h
|
||||
@@ -2773,6 +2774,9 @@ static struct sk_buff *ieee80211_build_h
|
||||
memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen);
|
||||
#endif
|
||||
|
||||
@@ -265,7 +265,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (ieee80211_is_data_qos(fc)) {
|
||||
__le16 *qos_control;
|
||||
|
||||
@@ -2947,6 +2951,8 @@ void ieee80211_check_fast_xmit(struct st
|
||||
@@ -2949,6 +2953,8 @@ void ieee80211_check_fast_xmit(struct st
|
||||
fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
|
||||
}
|
||||
|
||||
@@ -274,16 +274,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* We store the key here so there's no point in using rcu_dereference()
|
||||
* but that's fine because the code that changes the pointers will call
|
||||
* this function after doing so. For a single CPU that would be enough,
|
||||
@@ -3523,7 +3529,7 @@ begin:
|
||||
@@ -3525,7 +3531,7 @@ begin:
|
||||
tx.local = local;
|
||||
tx.skb = skb;
|
||||
tx.sdata = vif_to_sdata(info->control.vif);
|
||||
- tx.hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
||||
+ tx.hdrlen = ieee80211_padded_hdrlen(hw, hdr->frame_control);
|
||||
|
||||
if (txq->sta)
|
||||
if (txq->sta) {
|
||||
tx.sta = container_of(txq->sta, struct sta_info, sta);
|
||||
@@ -4007,7 +4013,7 @@ ieee80211_build_data_template(struct iee
|
||||
@@ -4029,7 +4035,7 @@ ieee80211_build_data_template(struct iee
|
||||
hdr = (void *)skb->data;
|
||||
tx.sta = sta_info_get(sdata, hdr->addr1);
|
||||
tx.skb = skb;
|
||||
|
||||
@@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
* ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3617,16 +3617,17 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
||||
@@ -3637,16 +3637,17 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
||||
struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
@@ -115,7 +115,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (txqi->txq.sta) {
|
||||
struct sta_info *sta = container_of(txqi->txq.sta,
|
||||
@@ -3643,21 +3644,25 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -3663,21 +3664,25 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
|
||||
if (txqi->schedule_round == local->schedule_round[ac])
|
||||
@@ -146,7 +146,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (list_empty(&txqi->schedule_order) &&
|
||||
(!skb_queue_empty(&txqi->frags) || txqi->tin.backlog_packets)) {
|
||||
@@ -3677,18 +3682,7 @@ void ieee80211_return_txq(struct ieee802
|
||||
@@ -3697,18 +3702,7 @@ void ieee80211_return_txq(struct ieee802
|
||||
list_add_tail(&txqi->schedule_order,
|
||||
&local->active_txqs[txq->ac]);
|
||||
}
|
||||
@@ -165,7 +165,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_unlock_bh(&local->active_txq_lock[txq->ac]);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_schedule_txq);
|
||||
@@ -3701,7 +3695,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -3721,7 +3715,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
struct sta_info *sta;
|
||||
u8 ac = txq->ac;
|
||||
|
||||
@@ -174,7 +174,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (!txqi->txq.sta)
|
||||
goto out;
|
||||
@@ -3731,34 +3725,27 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -3751,34 +3745,27 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
|
||||
sta->airtime[ac].deficit += sta->airtime_weight;
|
||||
list_move_tail(&txqi->schedule_order, &local->active_txqs[ac]);
|
||||
|
||||
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/mesh_hwmp.c
|
||||
+++ b/net/mac80211/mesh_hwmp.c
|
||||
@@ -1112,16 +1112,13 @@ int mesh_nexthop_resolve(struct ieee8021
|
||||
@@ -1115,16 +1115,13 @@ int mesh_nexthop_resolve(struct ieee8021
|
||||
struct mesh_path *mpath;
|
||||
struct sk_buff *skb_to_free = NULL;
|
||||
u8 *target_addr = hdr->addr3;
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* no nexthop found, start resolving */
|
||||
mpath = mesh_path_lookup(sdata, target_addr);
|
||||
@@ -1129,8 +1126,7 @@ int mesh_nexthop_resolve(struct ieee8021
|
||||
@@ -1132,8 +1129,7 @@ int mesh_nexthop_resolve(struct ieee8021
|
||||
mpath = mesh_path_add(sdata, target_addr);
|
||||
if (IS_ERR(mpath)) {
|
||||
mesh_path_discard_frame(sdata, skb);
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1143,13 +1139,10 @@ int mesh_nexthop_resolve(struct ieee8021
|
||||
@@ -1147,13 +1143,10 @@ int mesh_nexthop_resolve(struct ieee8021
|
||||
info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
||||
ieee80211_set_qos_hdr(sdata, skb);
|
||||
skb_queue_tail(&mpath->frame_queue, skb);
|
||||
@@ -53,7 +53,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1169,13 +1162,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||
@@ -1173,13 +1166,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||
struct sta_info *next_hop;
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
|
||||
u8 *target_addr = hdr->addr3;
|
||||
@@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (time_after(jiffies,
|
||||
mpath->exp_time -
|
||||
@@ -1190,12 +1180,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||
@@ -1194,12 +1184,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||
memcpy(hdr->addr1, next_hop->sta.addr, ETH_ALEN);
|
||||
memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN);
|
||||
ieee80211_mps_set_frame_flags(sdata, next_hop, hdr);
|
||||
|
||||
@@ -111,7 +111,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
schedule_and_wake_txq(local, txqi);
|
||||
|
||||
@@ -3198,6 +3199,7 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
@@ -3200,6 +3201,7 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
u8 max_subframes = sta->sta.max_amsdu_subframes;
|
||||
int max_frags = local->hw.max_tx_fragments;
|
||||
int max_amsdu_len = sta->sta.max_amsdu_len;
|
||||
@@ -119,7 +119,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
int orig_truesize;
|
||||
__be16 len;
|
||||
void *data;
|
||||
@@ -3220,6 +3222,8 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
@@ -3222,6 +3224,8 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
max_amsdu_len = min_t(int, max_amsdu_len,
|
||||
sta->sta.max_rc_amsdu_len);
|
||||
|
||||
@@ -128,7 +128,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_lock_bh(&fq->lock);
|
||||
|
||||
/* TODO: Ideally aggregation should be done on dequeue to remain
|
||||
@@ -3227,7 +3231,8 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
@@ -3229,7 +3233,8 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
*/
|
||||
|
||||
tin = &txqi->tin;
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3505,6 +3505,7 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||
@@ -3507,6 +3507,7 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||
ieee80211_tx_result r;
|
||||
struct ieee80211_vif *vif = txq->vif;
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_lock_bh(&fq->lock);
|
||||
|
||||
if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) ||
|
||||
@@ -3521,11 +3522,12 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||
@@ -3523,11 +3524,12 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||
if (skb)
|
||||
goto out;
|
||||
|
||||
@@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
info = IEEE80211_SKB_CB(skb);
|
||||
|
||||
@@ -3571,8 +3573,11 @@ begin:
|
||||
@@ -3591,8 +3593,11 @@ begin:
|
||||
|
||||
skb = __skb_dequeue(&tx.skbs);
|
||||
|
||||
@@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
if (skb && skb_has_frag_list(skb) &&
|
||||
@@ -3611,6 +3616,7 @@ begin:
|
||||
@@ -3631,6 +3636,7 @@ begin:
|
||||
}
|
||||
|
||||
IEEE80211_SKB_CB(skb)->control.vif = vif;
|
||||
|
||||
@@ -24,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1761,6 +1761,9 @@ void ieee80211_clear_fast_xmit(struct st
|
||||
@@ -1762,6 +1762,9 @@ void ieee80211_clear_fast_xmit(struct st
|
||||
int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev,
|
||||
const u8 *buf, size_t len,
|
||||
const u8 *dest, __be16 proto, bool unencrypted);
|
||||
@@ -143,7 +143,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ieee80211_free_txskb(&local->hw, skb);
|
||||
return;
|
||||
}
|
||||
@@ -2740,30 +2746,14 @@ static struct sk_buff *ieee80211_build_h
|
||||
@@ -2741,30 +2747,14 @@ static struct sk_buff *ieee80211_build_h
|
||||
|
||||
skb_pull(skb, skip_header_bytes);
|
||||
padsize = ieee80211_hdr_padsize(&local->hw, hdrlen);
|
||||
@@ -180,7 +180,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
if (encaps_data)
|
||||
@@ -3375,7 +3365,6 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3377,7 +3367,6 @@ static bool ieee80211_xmit_fast(struct i
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
u16 ethertype = (skb->data[12] << 8) | skb->data[13];
|
||||
int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2);
|
||||
@@ -188,7 +188,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct ethhdr eth;
|
||||
struct ieee80211_tx_info *info;
|
||||
struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
|
||||
@@ -3427,10 +3416,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3429,10 +3418,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||
* as the may-encrypt argument for the resize to not account for
|
||||
* more room than we already have in 'extra_head'
|
||||
*/
|
||||
|
||||
@@ -72,7 +72,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/**
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3653,8 +3653,9 @@ out:
|
||||
@@ -3673,8 +3673,9 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_next_txq);
|
||||
|
||||
@@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct txq_info *txqi = to_txq_info(txq);
|
||||
@@ -3662,7 +3663,8 @@ void ieee80211_schedule_txq(struct ieee8
|
||||
@@ -3682,7 +3683,8 @@ void ieee80211_schedule_txq(struct ieee8
|
||||
spin_lock_bh(&local->active_txq_lock[txq->ac]);
|
||||
|
||||
if (list_empty(&txqi->schedule_order) &&
|
||||
@@ -94,7 +94,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* If airtime accounting is active, always enqueue STAs at the
|
||||
* head of the list to ensure that they only get moved to the
|
||||
* back by the airtime DRR scheduler once they have a negative
|
||||
@@ -3682,7 +3684,7 @@ void ieee80211_schedule_txq(struct ieee8
|
||||
@@ -3702,7 +3704,7 @@ void ieee80211_schedule_txq(struct ieee8
|
||||
|
||||
spin_unlock_bh(&local->active_txq_lock[txq->ac]);
|
||||
}
|
||||
|
||||
@@ -13,15 +13,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3751,6 +3751,7 @@ void __ieee80211_subif_start_xmit(struct
|
||||
u32 info_flags)
|
||||
@@ -3772,6 +3772,7 @@ void __ieee80211_subif_start_xmit(struct
|
||||
u32 ctrl_flags)
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
+ struct ieee80211_local *local = sdata->local;
|
||||
struct sta_info *sta;
|
||||
struct sk_buff *next;
|
||||
|
||||
@@ -3764,7 +3765,15 @@ void __ieee80211_subif_start_xmit(struct
|
||||
@@ -3785,7 +3786,15 @@ void __ieee80211_subif_start_xmit(struct
|
||||
if (ieee80211_lookup_ra_sta(sdata, skb, &sta))
|
||||
goto out_free;
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
}
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2070,7 +2070,8 @@ void ieee80211_send_auth(struct ieee8021
|
||||
@@ -2071,7 +2071,8 @@ void ieee80211_send_auth(struct ieee8021
|
||||
const u8 *da, const u8 *key, u8 key_len, u8 key_idx,
|
||||
u32 tx_flags);
|
||||
void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
@@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
frame_buf);
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -1427,7 +1427,8 @@ void ieee80211_send_auth(struct ieee8021
|
||||
@@ -1433,7 +1433,8 @@ void ieee80211_send_auth(struct ieee8021
|
||||
}
|
||||
|
||||
void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
@@ -117,7 +117,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
bool send_frame, u8 *frame_buf)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
@@ -1438,7 +1439,7 @@ void ieee80211_send_deauth_disassoc(stru
|
||||
@@ -1444,7 +1445,7 @@ void ieee80211_send_deauth_disassoc(stru
|
||||
mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | stype);
|
||||
mgmt->duration = 0; /* initialize only */
|
||||
mgmt->seq_ctrl = 0; /* initialize only */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user