.. | .. |
---|
| 1 | +// SPDX-License-Identifier: ISC |
---|
1 | 2 | /* |
---|
2 | 3 | * 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. |
---|
15 | 4 | */ |
---|
16 | 5 | |
---|
17 | 6 | #include <linux/netdevice.h> |
---|
.. | .. |
---|
49 | 38 | { BRCMF_FEAT_MCHAN, "mchan" }, |
---|
50 | 39 | { BRCMF_FEAT_P2P, "p2p" }, |
---|
51 | 40 | { BRCMF_FEAT_MONITOR, "monitor" }, |
---|
| 41 | + { BRCMF_FEAT_MONITOR_FLAG, "rtap" }, |
---|
52 | 42 | { BRCMF_FEAT_MONITOR_FMT_RADIOTAP, "rtap" }, |
---|
| 43 | + { BRCMF_FEAT_DOT11H, "802.11h" }, |
---|
| 44 | + { BRCMF_FEAT_SAE, "sae" }, |
---|
| 45 | + { BRCMF_FEAT_FWAUTH, "idauth" }, |
---|
53 | 46 | }; |
---|
54 | 47 | |
---|
55 | 48 | #ifdef DEBUG |
---|
.. | .. |
---|
103 | 96 | { "01-6cb8e269", BIT(BRCMF_FEAT_MONITOR) }, |
---|
104 | 97 | /* brcmfmac4366b-pcie.bin from linux-firmware.git commit 52442afee990 */ |
---|
105 | 98 | { "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) }, |
---|
106 | 103 | }; |
---|
107 | 104 | |
---|
108 | 105 | static void brcmf_feat_firmware_overrides(struct brcmf_pub *drv) |
---|
.. | .. |
---|
181 | 178 | #define MAX_CAPS_BUFFER_SIZE 768 |
---|
182 | 179 | static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp) |
---|
183 | 180 | { |
---|
| 181 | + struct brcmf_pub *drvr = ifp->drvr; |
---|
184 | 182 | char caps[MAX_CAPS_BUFFER_SIZE]; |
---|
185 | 183 | enum brcmf_feat_id id; |
---|
186 | 184 | int i, err; |
---|
187 | 185 | |
---|
188 | 186 | err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps)); |
---|
189 | 187 | 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); |
---|
191 | 189 | return; |
---|
192 | 190 | } |
---|
193 | 191 | |
---|
.. | .. |
---|
212 | 210 | static int brcmf_feat_fwcap_debugfs_read(struct seq_file *seq, void *data) |
---|
213 | 211 | { |
---|
214 | 212 | 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); |
---|
216 | 215 | char caps[MAX_CAPS_BUFFER_SIZE + 1] = { }; |
---|
217 | 216 | char *tmp; |
---|
218 | 217 | int err; |
---|
219 | 218 | |
---|
220 | 219 | err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps)); |
---|
221 | 220 | 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); |
---|
223 | 222 | return err; |
---|
224 | 223 | } |
---|
225 | 224 | |
---|
.. | .. |
---|
268 | 267 | BIT(BRCMF_FEAT_WOWL_GTK); |
---|
269 | 268 | } |
---|
270 | 269 | } |
---|
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: |
---|
273 | 274 | ifp->drvr->feat_flags &= ~BIT(BRCMF_FEAT_MBSS); |
---|
| 275 | + break; |
---|
| 276 | + default: |
---|
| 277 | + break; |
---|
| 278 | + } |
---|
274 | 279 | brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_RSDB, "rsdb_mode"); |
---|
275 | 280 | brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_TDLS, "tdls_enable"); |
---|
276 | 281 | brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_MFP, "mfp"); |
---|