| .. | .. |
|---|
| 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"); |
|---|