hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
....@@ -1,17 +1,6 @@
1
+// SPDX-License-Identifier: ISC
12 /*
23 * Copyright (c) 2014 Broadcom Corporation
3
- *
4
- * Permission to use, copy, modify, and/or distribute this software for any
5
- * purpose with or without fee is hereby granted, provided that the above
6
- * copyright notice and this permission notice appear in all copies.
7
- *
8
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
154 */
165
176 #include <linux/netdevice.h>
....@@ -49,7 +38,11 @@
4938 { BRCMF_FEAT_MCHAN, "mchan" },
5039 { BRCMF_FEAT_P2P, "p2p" },
5140 { BRCMF_FEAT_MONITOR, "monitor" },
41
+ { BRCMF_FEAT_MONITOR_FLAG, "rtap" },
5242 { BRCMF_FEAT_MONITOR_FMT_RADIOTAP, "rtap" },
43
+ { BRCMF_FEAT_DOT11H, "802.11h" },
44
+ { BRCMF_FEAT_SAE, "sae" },
45
+ { BRCMF_FEAT_FWAUTH, "idauth" },
5346 };
5447
5548 #ifdef DEBUG
....@@ -103,6 +96,10 @@
10396 { "01-6cb8e269", BIT(BRCMF_FEAT_MONITOR) },
10497 /* brcmfmac4366b-pcie.bin from linux-firmware.git commit 52442afee990 */
10598 { "01-c47a91a4", BIT(BRCMF_FEAT_MONITOR) },
99
+ /* brcmfmac4366b-pcie.bin from linux-firmware.git commit 211de1679a68 */
100
+ { "01-801fb449", BIT(BRCMF_FEAT_MONITOR_FMT_HW_RX_HDR) },
101
+ /* brcmfmac4366c-pcie.bin from linux-firmware.git commit 211de1679a68 */
102
+ { "01-d2cbb8fd", BIT(BRCMF_FEAT_MONITOR_FMT_HW_RX_HDR) },
106103 };
107104
108105 static void brcmf_feat_firmware_overrides(struct brcmf_pub *drv)
....@@ -181,13 +178,14 @@
181178 #define MAX_CAPS_BUFFER_SIZE 768
182179 static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp)
183180 {
181
+ struct brcmf_pub *drvr = ifp->drvr;
184182 char caps[MAX_CAPS_BUFFER_SIZE];
185183 enum brcmf_feat_id id;
186184 int i, err;
187185
188186 err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
189187 if (err) {
190
- brcmf_err("could not get firmware cap (%d)\n", err);
188
+ bphy_err(drvr, "could not get firmware cap (%d)\n", err);
191189 return;
192190 }
193191
....@@ -212,14 +210,15 @@
212210 static int brcmf_feat_fwcap_debugfs_read(struct seq_file *seq, void *data)
213211 {
214212 struct brcmf_bus *bus_if = dev_get_drvdata(seq->private);
215
- struct brcmf_if *ifp = brcmf_get_ifp(bus_if->drvr, 0);
213
+ struct brcmf_pub *drvr = bus_if->drvr;
214
+ struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
216215 char caps[MAX_CAPS_BUFFER_SIZE + 1] = { };
217216 char *tmp;
218217 int err;
219218
220219 err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
221220 if (err) {
222
- brcmf_err("could not get firmware cap (%d)\n", err);
221
+ bphy_err(drvr, "could not get firmware cap (%d)\n", err);
223222 return err;
224223 }
225224
....@@ -268,9 +267,15 @@
268267 BIT(BRCMF_FEAT_WOWL_GTK);
269268 }
270269 }
271
- /* MBSS does not work for 43362 */
272
- if (drvr->bus_if->chip == BRCM_CC_43362_CHIP_ID)
270
+ /* MBSS does not work for all chips */
271
+ switch (drvr->bus_if->chip) {
272
+ case BRCM_CC_4330_CHIP_ID:
273
+ case BRCM_CC_43362_CHIP_ID:
273274 ifp->drvr->feat_flags &= ~BIT(BRCMF_FEAT_MBSS);
275
+ break;
276
+ default:
277
+ break;
278
+ }
274279 brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_RSDB, "rsdb_mode");
275280 brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_TDLS, "tdls_enable");
276281 brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_MFP, "mfp");