mac80211: backport brcmfmac changes from kernel 4.18
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
		| @@ -0,0 +1,48 @@ | |||||||
|  | From 1f589e2510d5df1192dca7c089103a2cbd028101 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Dan Haab <dhaab@luxul.com> | ||||||
|  | Date: Tue, 3 Apr 2018 10:21:56 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: add support for BCM4366E chipset | ||||||
|  |  | ||||||
|  | BCM4366E is a wireless chipset with a BCM43664 ChipCommon. It's | ||||||
|  | supported by the same firmware as 4366c0. | ||||||
|  |  | ||||||
|  | Signed-off-by: Dan Haab <dan.haab@luxul.com> | ||||||
|  | [arend: rebase patch and remove unnecessary definition] | ||||||
|  | Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-by: Kalle Valo <kvalo@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c       | 1 + | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c       | 1 + | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 1 + | ||||||
|  |  3 files changed, 3 insertions(+) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | ||||||
|  | @@ -689,6 +689,7 @@ static u32 brcmf_chip_tcm_rambase(struct | ||||||
|  |  	case BRCM_CC_43525_CHIP_ID: | ||||||
|  |  	case BRCM_CC_4365_CHIP_ID: | ||||||
|  |  	case BRCM_CC_4366_CHIP_ID: | ||||||
|  | +	case BRCM_CC_43664_CHIP_ID: | ||||||
|  |  		return 0x200000; | ||||||
|  |  	case CY_CC_4373_CHIP_ID: | ||||||
|  |  		return 0x160000; | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | @@ -75,6 +75,7 @@ static struct brcmf_firmware_mapping brc | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFF0, 4365C), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0x0000000F, 4366B), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C), | ||||||
|  | +	BRCMF_FW_ENTRY(BRCM_CC_43664_CHIP_ID, 0xFFFFFFF0, 4366C), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371), | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | ||||||
|  | @@ -57,6 +57,7 @@ | ||||||
|  |  #define BRCM_CC_43602_CHIP_ID		43602 | ||||||
|  |  #define BRCM_CC_4365_CHIP_ID		0x4365 | ||||||
|  |  #define BRCM_CC_4366_CHIP_ID		0x4366 | ||||||
|  | +#define BRCM_CC_43664_CHIP_ID		43664 | ||||||
|  |  #define BRCM_CC_4371_CHIP_ID		0x4371 | ||||||
|  |  #define CY_CC_4373_CHIP_ID		0x4373 | ||||||
|  |   | ||||||
| @@ -0,0 +1,34 @@ | |||||||
|  | From cb746e47837ad0f35c8ae28e9aacc8eb07916d2a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Arend Van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Date: Thu, 26 Apr 2018 12:16:47 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: check p2pdev mac address uniqueness | ||||||
|  |  | ||||||
|  | The mac address for p2pdev must be different from the primary interface | ||||||
|  | due to firmware requirement. Add an explicit check for this requirement | ||||||
|  | if user-space provides a mac address. | ||||||
|  |  | ||||||
|  | Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com> | ||||||
|  | Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> | ||||||
|  | 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> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 7 +++++++ | ||||||
|  |  1 file changed, 7 insertions(+) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | ||||||
|  | @@ -2073,6 +2073,13 @@ static struct wireless_dev *brcmf_p2p_cr | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	pri_ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp; | ||||||
|  | + | ||||||
|  | +	/* firmware requires unique mac address for p2pdev interface */ | ||||||
|  | +	if (addr && ether_addr_equal(addr, pri_ifp->mac_addr)) { | ||||||
|  | +		brcmf_err("discovery vif must be different from primary interface\n"); | ||||||
|  | +		return ERR_PTR(-EINVAL); | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	brcmf_p2p_generate_bss_mac(p2p, addr); | ||||||
|  |  	brcmf_p2p_set_firmware(pri_ifp, p2p->dev_addr); | ||||||
|  |   | ||||||
| @@ -0,0 +1,76 @@ | |||||||
|  | From 7742fce4c007141617dab9bcb90034b3c0fe2347 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Franky Lin <franky.lin@broadcom.com> | ||||||
|  | Date: Thu, 26 Apr 2018 12:18:35 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: reports boottime_ns while informing bss | ||||||
|  |  | ||||||
|  | Provides a timestamp in bss information so user space can see when the | ||||||
|  | bss info was updated. Since tsf is not available from the dongle events | ||||||
|  | boottime is reported instead. | ||||||
|  |  | ||||||
|  | Reported-by: Dmitry Shmidt <dimitrysh@google.com> | ||||||
|  | Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-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> | ||||||
|  | --- | ||||||
|  |  .../broadcom/brcm80211/brcmfmac/cfg80211.c         | 26 +++++++++++----------- | ||||||
|  |  1 file changed, 13 insertions(+), 13 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | @@ -2728,7 +2728,6 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  |  				   struct brcmf_bss_info_le *bi) | ||||||
|  |  { | ||||||
|  |  	struct wiphy *wiphy = cfg_to_wiphy(cfg); | ||||||
|  | -	struct ieee80211_channel *notify_channel; | ||||||
|  |  	struct cfg80211_bss *bss; | ||||||
|  |  	struct ieee80211_supported_band *band; | ||||||
|  |  	struct brcmu_chan ch; | ||||||
|  | @@ -2738,7 +2737,7 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  |  	u16 notify_interval; | ||||||
|  |  	u8 *notify_ie; | ||||||
|  |  	size_t notify_ielen; | ||||||
|  | -	s32 notify_signal; | ||||||
|  | +	struct cfg80211_inform_bss bss_data = { 0 }; | ||||||
|  |   | ||||||
|  |  	if (le32_to_cpu(bi->length) > WL_BSS_INFO_MAX) { | ||||||
|  |  		brcmf_err("Bss info is larger than buffer. Discarding\n"); | ||||||
|  | @@ -2758,27 +2757,28 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  |  		band = wiphy->bands[NL80211_BAND_5GHZ]; | ||||||
|  |   | ||||||
|  |  	freq = ieee80211_channel_to_frequency(channel, band->band); | ||||||
|  | -	notify_channel = ieee80211_get_channel(wiphy, freq); | ||||||
|  | +	bss_data.chan = ieee80211_get_channel(wiphy, freq); | ||||||
|  | +	bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20; | ||||||
|  | +	bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime()); | ||||||
|  |   | ||||||
|  |  	notify_capability = le16_to_cpu(bi->capability); | ||||||
|  |  	notify_interval = le16_to_cpu(bi->beacon_period); | ||||||
|  |  	notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset); | ||||||
|  |  	notify_ielen = le32_to_cpu(bi->ie_length); | ||||||
|  | -	notify_signal = (s16)le16_to_cpu(bi->RSSI) * 100; | ||||||
|  | +	bss_data.signal = (s16)le16_to_cpu(bi->RSSI) * 100; | ||||||
|  |   | ||||||
|  |  	brcmf_dbg(CONN, "bssid: %pM\n", bi->BSSID); | ||||||
|  |  	brcmf_dbg(CONN, "Channel: %d(%d)\n", channel, freq); | ||||||
|  |  	brcmf_dbg(CONN, "Capability: %X\n", notify_capability); | ||||||
|  |  	brcmf_dbg(CONN, "Beacon interval: %d\n", notify_interval); | ||||||
|  | -	brcmf_dbg(CONN, "Signal: %d\n", notify_signal); | ||||||
|  | +	brcmf_dbg(CONN, "Signal: %d\n", bss_data.signal); | ||||||
|  |   | ||||||
|  | -	bss = cfg80211_inform_bss(wiphy, notify_channel, | ||||||
|  | -				  CFG80211_BSS_FTYPE_UNKNOWN, | ||||||
|  | -				  (const u8 *)bi->BSSID, | ||||||
|  | -				  0, notify_capability, | ||||||
|  | -				  notify_interval, notify_ie, | ||||||
|  | -				  notify_ielen, notify_signal, | ||||||
|  | -				  GFP_KERNEL); | ||||||
|  | +	bss = cfg80211_inform_bss_data(wiphy, &bss_data, | ||||||
|  | +				       CFG80211_BSS_FTYPE_UNKNOWN, | ||||||
|  | +				       (const u8 *)bi->BSSID, | ||||||
|  | +				       0, notify_capability, | ||||||
|  | +				       notify_interval, notify_ie, | ||||||
|  | +				       notify_ielen, GFP_KERNEL); | ||||||
|  |   | ||||||
|  |  	if (!bss) | ||||||
|  |  		return -ENOMEM; | ||||||
| @@ -0,0 +1,43 @@ | |||||||
|  | From aed14219067ab96e5eeb7730e9bceed10d9be989 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Franky Lin <franky.lin@broadcom.com> | ||||||
|  | Date: Thu, 26 Apr 2018 12:16:48 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: use nl80211_band directly to get ieee80211 channel | ||||||
|  |  | ||||||
|  | The enum nl80211_band used to retrieve wiphy->bands is the same as | ||||||
|  | wiphy->bands->band which is checked by wiphy_register(). So it can be used | ||||||
|  | directly as parameter of ieee80211_channel_to_frequency(). | ||||||
|  |  | ||||||
|  | Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-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> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 8 ++++---- | ||||||
|  |  1 file changed, 4 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | @@ -2729,7 +2729,7 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  |  { | ||||||
|  |  	struct wiphy *wiphy = cfg_to_wiphy(cfg); | ||||||
|  |  	struct cfg80211_bss *bss; | ||||||
|  | -	struct ieee80211_supported_band *band; | ||||||
|  | +	enum nl80211_band band; | ||||||
|  |  	struct brcmu_chan ch; | ||||||
|  |  	u16 channel; | ||||||
|  |  	u32 freq; | ||||||
|  | @@ -2752,11 +2752,11 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  |  	channel = bi->ctl_ch; | ||||||
|  |   | ||||||
|  |  	if (channel <= CH_MAX_2G_CHANNEL) | ||||||
|  | -		band = wiphy->bands[NL80211_BAND_2GHZ]; | ||||||
|  | +		band = NL80211_BAND_2GHZ; | ||||||
|  |  	else | ||||||
|  | -		band = wiphy->bands[NL80211_BAND_5GHZ]; | ||||||
|  | +		band = NL80211_BAND_5GHZ; | ||||||
|  |   | ||||||
|  | -	freq = ieee80211_channel_to_frequency(channel, band->band); | ||||||
|  | +	freq = ieee80211_channel_to_frequency(channel, band); | ||||||
|  |  	bss_data.chan = ieee80211_get_channel(wiphy, freq); | ||||||
|  |  	bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20; | ||||||
|  |  	bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime()); | ||||||
| @@ -0,0 +1,76 @@ | |||||||
|  | From ff68c9f9c06d1fd437c8f90fc05ca28c47f7d85e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Arend Van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Date: Thu, 26 Apr 2018 12:16:49 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: constify firmware mapping tables | ||||||
|  |  | ||||||
|  | The information in the firmware mapping does not need to be modified | ||||||
|  | so it can be static const. | ||||||
|  |  | ||||||
|  | Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com> | ||||||
|  | Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> | ||||||
|  | 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> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 2 +- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h | 2 +- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c     | 2 +- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c     | 2 +- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c      | 2 +- | ||||||
|  |  5 files changed, 5 insertions(+), 5 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | ||||||
|  | @@ -634,7 +634,7 @@ int brcmf_fw_get_firmwares(struct device | ||||||
|  |   | ||||||
|  |  struct brcmf_fw_request * | ||||||
|  |  brcmf_fw_alloc_request(u32 chip, u32 chiprev, | ||||||
|  | -		       struct brcmf_firmware_mapping mapping_table[], | ||||||
|  | +		       const struct brcmf_firmware_mapping mapping_table[], | ||||||
|  |  		       u32 table_size, struct brcmf_fw_name *fwnames, | ||||||
|  |  		       u32 n_fwnames) | ||||||
|  |  { | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h | ||||||
|  | @@ -80,7 +80,7 @@ struct brcmf_fw_name { | ||||||
|  |   | ||||||
|  |  struct brcmf_fw_request * | ||||||
|  |  brcmf_fw_alloc_request(u32 chip, u32 chiprev, | ||||||
|  | -		       struct brcmf_firmware_mapping mapping_table[], | ||||||
|  | +		       const struct brcmf_firmware_mapping mapping_table[], | ||||||
|  |  		       u32 table_size, struct brcmf_fw_name *fwnames, | ||||||
|  |  		       u32 n_fwnames); | ||||||
|  |   | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | @@ -59,7 +59,7 @@ BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie" | ||||||
|  |  BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie"); | ||||||
|  |  BRCMF_FW_DEF(4371, "brcmfmac4371-pcie"); | ||||||
|  |   | ||||||
|  | -static struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = { | ||||||
|  | +static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = { | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43465_CHIP_ID, 0xFFFFFFF0, 4366C), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0x000000FF, 4350C), | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | ||||||
|  | @@ -619,7 +619,7 @@ BRCMF_FW_DEF(4354, "brcmfmac4354-sdio"); | ||||||
|  |  BRCMF_FW_DEF(4356, "brcmfmac4356-sdio"); | ||||||
|  |  BRCMF_FW_DEF(4373, "brcmfmac4373-sdio"); | ||||||
|  |   | ||||||
|  | -static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = { | ||||||
|  | +static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = { | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4), | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | ||||||
|  | @@ -52,7 +52,7 @@ BRCMF_FW_DEF(43242A, "brcmfmac43242a"); | ||||||
|  |  BRCMF_FW_DEF(43569, "brcmfmac43569"); | ||||||
|  |  BRCMF_FW_DEF(4373, "brcmfmac4373"); | ||||||
|  |   | ||||||
|  | -static struct brcmf_firmware_mapping brcmf_usb_fwnames[] = { | ||||||
|  | +static const struct brcmf_firmware_mapping brcmf_usb_fwnames[] = { | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43235_CHIP_ID, 0x00000008, 43236B), | ||||||
|  |  	BRCMF_FW_ENTRY(BRCM_CC_43236_CHIP_ID, 0x00000008, 43236B), | ||||||
| @@ -0,0 +1,74 @@ | |||||||
|  | From 84ad327d18debe19b8d509059b61db445d048b02 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Franky Lin <franky.lin@broadcom.com> | ||||||
|  | Date: Thu, 26 Apr 2018 12:16:50 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: add hostready indication | ||||||
|  |  | ||||||
|  | A hostready signal is introduced to inform firmware through mailbox | ||||||
|  | doorbell1 when common ring initialized or D3 exited. | ||||||
|  |  | ||||||
|  | Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-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> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 14 ++++++++++++-- | ||||||
|  |  1 file changed, 12 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | @@ -105,7 +105,8 @@ static const struct brcmf_firmware_mappi | ||||||
|  |  #define BRCMF_PCIE_PCIE2REG_MAILBOXMASK		0x4C | ||||||
|  |  #define BRCMF_PCIE_PCIE2REG_CONFIGADDR		0x120 | ||||||
|  |  #define BRCMF_PCIE_PCIE2REG_CONFIGDATA		0x124 | ||||||
|  | -#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX		0x140 | ||||||
|  | +#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0	0x140 | ||||||
|  | +#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1	0x144 | ||||||
|  |   | ||||||
|  |  #define BRCMF_PCIE2_INTA			0x01 | ||||||
|  |  #define BRCMF_PCIE2_INTB			0x02 | ||||||
|  | @@ -140,6 +141,7 @@ static const struct brcmf_firmware_mappi | ||||||
|  |  #define BRCMF_PCIE_SHARED_VERSION_MASK		0x00FF | ||||||
|  |  #define BRCMF_PCIE_SHARED_DMA_INDEX		0x10000 | ||||||
|  |  #define BRCMF_PCIE_SHARED_DMA_2B_IDX		0x100000 | ||||||
|  | +#define BRCMF_PCIE_SHARED_HOSTRDY_DB1		0x10000000 | ||||||
|  |   | ||||||
|  |  #define BRCMF_PCIE_FLAGS_HTOD_SPLIT		0x4000 | ||||||
|  |  #define BRCMF_PCIE_FLAGS_DTOH_SPLIT		0x8000 | ||||||
|  | @@ -782,6 +784,12 @@ static void brcmf_pcie_intr_enable(struc | ||||||
|  |  			       BRCMF_PCIE_MB_INT_FN0_1); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static void brcmf_pcie_hostready(struct brcmf_pciedev_info *devinfo) | ||||||
|  | +{ | ||||||
|  | +	if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1) | ||||||
|  | +		brcmf_pcie_write_reg32(devinfo, | ||||||
|  | +				       BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1, 1); | ||||||
|  | +} | ||||||
|  |   | ||||||
|  |  static irqreturn_t brcmf_pcie_quick_check_isr(int irq, void *arg) | ||||||
|  |  { | ||||||
|  | @@ -924,7 +932,7 @@ static int brcmf_pcie_ring_mb_ring_bell( | ||||||
|  |   | ||||||
|  |  	brcmf_dbg(PCIE, "RING !\n"); | ||||||
|  |  	/* Any arbitrary value will do, lets use 1 */ | ||||||
|  | -	brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX, 1); | ||||||
|  | +	brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0, 1); | ||||||
|  |   | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  | @@ -1728,6 +1736,7 @@ static void brcmf_pcie_setup(struct devi | ||||||
|  |  	init_waitqueue_head(&devinfo->mbdata_resp_wait); | ||||||
|  |   | ||||||
|  |  	brcmf_pcie_intr_enable(devinfo); | ||||||
|  | +	brcmf_pcie_hostready(devinfo); | ||||||
|  |  	if (brcmf_attach(&devinfo->pdev->dev, devinfo->settings) == 0) | ||||||
|  |  		return; | ||||||
|  |   | ||||||
|  | @@ -1950,6 +1959,7 @@ static int brcmf_pcie_pm_leave_D3(struct | ||||||
|  |  		brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); | ||||||
|  |  		brcmf_bus_change_state(bus, BRCMF_BUS_UP); | ||||||
|  |  		brcmf_pcie_intr_enable(devinfo); | ||||||
|  | +		brcmf_pcie_hostready(devinfo); | ||||||
|  |  		return 0; | ||||||
|  |  	} | ||||||
|  |   | ||||||
| @@ -0,0 +1,97 @@ | |||||||
|  | From f56324baf329bc9362a52ad77a4a1a0f3356d1bc Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Franky Lin <franky.lin@broadcom.com> | ||||||
|  | Date: Thu, 26 Apr 2018 12:16:51 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: coarse support for PCIe shared structure rev7 | ||||||
|  |  | ||||||
|  | Revision 7 of PCIe dongle interface increases the item size of tx and rx | ||||||
|  | complete rings to accommodate extra payload for new feature. This patch | ||||||
|  | simply bump up the size of these two rings without adding the support | ||||||
|  | for utilizing the new space. This makes brcmfmac compatible with rev7 | ||||||
|  | firmware. | ||||||
|  |  | ||||||
|  | Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-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> | ||||||
|  | --- | ||||||
|  |  .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.h  |  6 ++++-- | ||||||
|  |  .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    | 23 ++++++++++++++++++---- | ||||||
|  |  2 files changed, 23 insertions(+), 6 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h | ||||||
|  | @@ -27,8 +27,10 @@ | ||||||
|  |  #define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE	40 | ||||||
|  |  #define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE	32 | ||||||
|  |  #define BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE	24 | ||||||
|  | -#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE		16 | ||||||
|  | -#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE		32 | ||||||
|  | +#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7	16 | ||||||
|  | +#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE		24 | ||||||
|  | +#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7	32 | ||||||
|  | +#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE		40 | ||||||
|  |  #define BRCMF_H2D_TXFLOWRING_ITEMSIZE			48 | ||||||
|  |   | ||||||
|  |  struct msgbuf_buf_addr { | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||||||
|  | @@ -136,8 +136,9 @@ static const struct brcmf_firmware_mappi | ||||||
|  |  						 BRCMF_PCIE_MB_INT_D2H3_DB0 | \ | ||||||
|  |  						 BRCMF_PCIE_MB_INT_D2H3_DB1) | ||||||
|  |   | ||||||
|  | +#define BRCMF_PCIE_SHARED_VERSION_7		7 | ||||||
|  |  #define BRCMF_PCIE_MIN_SHARED_VERSION		5 | ||||||
|  | -#define BRCMF_PCIE_MAX_SHARED_VERSION		6 | ||||||
|  | +#define BRCMF_PCIE_MAX_SHARED_VERSION		BRCMF_PCIE_SHARED_VERSION_7 | ||||||
|  |  #define BRCMF_PCIE_SHARED_VERSION_MASK		0x00FF | ||||||
|  |  #define BRCMF_PCIE_SHARED_DMA_INDEX		0x10000 | ||||||
|  |  #define BRCMF_PCIE_SHARED_DMA_2B_IDX		0x100000 | ||||||
|  | @@ -318,6 +319,14 @@ static const u32 brcmf_ring_max_item[BRC | ||||||
|  |  	BRCMF_D2H_MSGRING_RX_COMPLETE_MAX_ITEM | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +static const u32 brcmf_ring_itemsize_pre_v7[BRCMF_NROF_COMMON_MSGRINGS] = { | ||||||
|  | +	BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE, | ||||||
|  | +	BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE, | ||||||
|  | +	BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE, | ||||||
|  | +	BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7, | ||||||
|  | +	BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7 | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  static const u32 brcmf_ring_itemsize[BRCMF_NROF_COMMON_MSGRINGS] = { | ||||||
|  |  	BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE, | ||||||
|  |  	BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE, | ||||||
|  | @@ -1007,8 +1016,14 @@ brcmf_pcie_alloc_dma_and_ring(struct brc | ||||||
|  |  	struct brcmf_pcie_ringbuf *ring; | ||||||
|  |  	u32 size; | ||||||
|  |  	u32 addr; | ||||||
|  | +	const u32 *ring_itemsize_array; | ||||||
|  | + | ||||||
|  | +	if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7) | ||||||
|  | +		ring_itemsize_array = brcmf_ring_itemsize_pre_v7; | ||||||
|  | +	else | ||||||
|  | +		ring_itemsize_array = brcmf_ring_itemsize; | ||||||
|  |   | ||||||
|  | -	size = brcmf_ring_max_item[ring_id] * brcmf_ring_itemsize[ring_id]; | ||||||
|  | +	size = brcmf_ring_max_item[ring_id] * ring_itemsize_array[ring_id]; | ||||||
|  |  	dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size, | ||||||
|  |  			tcm_ring_phys_addr + BRCMF_RING_MEM_BASE_ADDR_OFFSET, | ||||||
|  |  			&dma_handle); | ||||||
|  | @@ -1018,7 +1033,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc | ||||||
|  |  	addr = tcm_ring_phys_addr + BRCMF_RING_MAX_ITEM_OFFSET; | ||||||
|  |  	brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]); | ||||||
|  |  	addr = tcm_ring_phys_addr + BRCMF_RING_LEN_ITEMS_OFFSET; | ||||||
|  | -	brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_itemsize[ring_id]); | ||||||
|  | +	brcmf_pcie_write_tcm16(devinfo, addr, ring_itemsize_array[ring_id]); | ||||||
|  |   | ||||||
|  |  	ring = kzalloc(sizeof(*ring), GFP_KERNEL); | ||||||
|  |  	if (!ring) { | ||||||
|  | @@ -1027,7 +1042,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc | ||||||
|  |  		return NULL; | ||||||
|  |  	} | ||||||
|  |  	brcmf_commonring_config(&ring->commonring, brcmf_ring_max_item[ring_id], | ||||||
|  | -				brcmf_ring_itemsize[ring_id], dma_buf); | ||||||
|  | +				ring_itemsize_array[ring_id], dma_buf); | ||||||
|  |  	ring->dma_handle = dma_handle; | ||||||
|  |  	ring->devinfo = devinfo; | ||||||
|  |  	brcmf_commonring_register_cb(&ring->commonring, | ||||||
| @@ -0,0 +1,45 @@ | |||||||
|  | From 9c4a121e82634aa000a702c98cd6f05b27d6e186 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Sean Lanigan <sean@lano.id.au> | ||||||
|  | Date: Fri, 4 May 2018 16:48:23 +1000 | ||||||
|  | Subject: [PATCH] brcmfmac: Add support for bcm43364 wireless chipset | ||||||
|  |  | ||||||
|  | Add support for the BCM43364 chipset via an SDIO interface, as used in | ||||||
|  | e.g. the Murata 1FX module. | ||||||
|  |  | ||||||
|  | The BCM43364 uses the same firmware as the BCM43430 (which is already | ||||||
|  | included), the only difference is the omission of Bluetooth. | ||||||
|  |  | ||||||
|  | However, the SDIO_ID for the BCM43364 is 02D0:A9A4, giving it a MODALIAS | ||||||
|  | of sdio:c00v02D0dA9A4, which doesn't get recognised and hence doesn't | ||||||
|  | load the brcmfmac module. Adding the 'A9A4' ID in the appropriate place | ||||||
|  | triggers the brcmfmac driver to load, and then correctly use the | ||||||
|  | firmware file 'brcmfmac43430-sdio.bin'. | ||||||
|  |  | ||||||
|  | Signed-off-by: Sean Lanigan <sean@lano.id.au> | ||||||
|  | Acked-by: Ulf Hansson <ulf.hansson@linaro.org> | ||||||
|  | Signed-off-by: Kalle Valo <kvalo@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 + | ||||||
|  |  include/linux/mmc/sdio_ids.h                              | 1 + | ||||||
|  |  2 files changed, 2 insertions(+) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | ||||||
|  | @@ -963,6 +963,7 @@ static const struct sdio_device_id brcmf | ||||||
|  |  	BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340), | ||||||
|  |  	BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341), | ||||||
|  |  	BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362), | ||||||
|  | + 	BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364), | ||||||
|  |  	BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339), | ||||||
|  |  	BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339), | ||||||
|  |  	BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430), | ||||||
|  | --- a/include/linux/mmc/sdio_ids.h | ||||||
|  | +++ b/include/linux/mmc/sdio_ids.h | ||||||
|  | @@ -34,6 +34,7 @@ | ||||||
|  |  #define SDIO_DEVICE_ID_BROADCOM_4335_4339	0x4335 | ||||||
|  |  #define SDIO_DEVICE_ID_BROADCOM_4339		0x4339 | ||||||
|  |  #define SDIO_DEVICE_ID_BROADCOM_43362		0xa962 | ||||||
|  | +#define SDIO_DEVICE_ID_BROADCOM_43364		0xa9a4 | ||||||
|  |  #define SDIO_DEVICE_ID_BROADCOM_43430		0xa9a6 | ||||||
|  |  #define SDIO_DEVICE_ID_BROADCOM_4345		0x4345 | ||||||
|  |  #define SDIO_DEVICE_ID_BROADCOM_43455		0xa9bf | ||||||
| @@ -0,0 +1,34 @@ | |||||||
|  | From 1204aa17f3b4f63e67ac9b7c9afa9496485969c5 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Thu, 10 May 2018 15:21:39 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | brcmfmac is a FullMAC driver and it implements/uses cfg80211 interface | ||||||
|  | for stations management. At the same time it doesn't receive or pass up | ||||||
|  | management frames. | ||||||
|  |  | ||||||
|  | This flag indicates that authenticator doesn't have to subscribe to or | ||||||
|  | handle management frames. Some authenticators (e.g. hostapd) were | ||||||
|  | working with brcmfmac thanks to some extra assumptions. This commit | ||||||
|  | clears up the situation. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-by: Kalle Valo <kvalo@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 1 + | ||||||
|  |  1 file changed, 1 insertion(+) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | @@ -6513,6 +6513,7 @@ static int brcmf_setup_wiphy(struct wiph | ||||||
|  |   | ||||||
|  |  	wiphy->flags |= WIPHY_FLAG_NETNS_OK | | ||||||
|  |  			WIPHY_FLAG_PS_ON_BY_DEFAULT | | ||||||
|  | +			WIPHY_FLAG_HAVE_AP_SME | | ||||||
|  |  			WIPHY_FLAG_OFFCHAN_TX | | ||||||
|  |  			WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; | ||||||
|  |  	if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_TDLS)) | ||||||
| @@ -0,0 +1,29 @@ | |||||||
|  | From 763ece85f45a6b93268e25a0abf02922f911dab4 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Franky Lin <franky.lin@broadcom.com> | ||||||
|  | Date: Tue, 15 May 2018 11:14:44 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: fix initialization of struct cfg80211_inform_bss | ||||||
|  |  variable | ||||||
|  |  | ||||||
|  | This patch fixes a sparse warning "Using plain integer as NULL pointer" | ||||||
|  | about cfg80211_inform_bss structure initialization. | ||||||
|  |  | ||||||
|  | Reported-by: kbuild test robot <lkp@intel.com> | ||||||
|  | Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-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> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
|  | @@ -2737,7 +2737,7 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  |  	u16 notify_interval; | ||||||
|  |  	u8 *notify_ie; | ||||||
|  |  	size_t notify_ielen; | ||||||
|  | -	struct cfg80211_inform_bss bss_data = { 0 }; | ||||||
|  | +	struct cfg80211_inform_bss bss_data = {}; | ||||||
|  |   | ||||||
|  |  	if (le32_to_cpu(bi->length) > WL_BSS_INFO_MAX) { | ||||||
|  |  		brcmf_err("Bss info is larger than buffer. Discarding\n"); | ||||||
| @@ -0,0 +1,75 @@ | |||||||
|  | From 88001968245c42c26416476bf0ef960442371605 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Mon, 14 May 2018 08:48:20 +0200 | ||||||
|  | Subject: [PATCH] brcmfmac: add debugfs entry for reading firmware capabilities | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | This allows reading all capabilities as reported by a firmware. They are | ||||||
|  | printed using native (raw) names, just like developers like it the most. | ||||||
|  | It's how firmware reports support for various features, e.g. supported | ||||||
|  | modes, supported standards, power saving details, max BSS-es. | ||||||
|  |  | ||||||
|  | Access to all that info is useful for trying new firmwares, comparing | ||||||
|  | them and debugging features AKA bugs. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> | ||||||
|  | Signed-off-by: Kalle Valo <kvalo@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  .../wireless/broadcom/brcm80211/brcmfmac/feature.c | 36 ++++++++++++++++++++++ | ||||||
|  |  1 file changed, 36 insertions(+) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | ||||||
|  | @@ -165,6 +165,41 @@ static void brcmf_feat_firmware_capabili | ||||||
|  |  	} | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/** | ||||||
|  | + * brcmf_feat_fwcap_debugfs_read() - expose firmware capabilities to debugfs. | ||||||
|  | + * | ||||||
|  | + * @seq: sequence for debugfs entry. | ||||||
|  | + * @data: raw data pointer. | ||||||
|  | + */ | ||||||
|  | +static int brcmf_feat_fwcap_debugfs_read(struct seq_file *seq, void *data) | ||||||
|  | +{ | ||||||
|  | +	struct brcmf_bus *bus_if = dev_get_drvdata(seq->private); | ||||||
|  | +	struct brcmf_if *ifp = brcmf_get_ifp(bus_if->drvr, 0); | ||||||
|  | +	char caps[MAX_CAPS_BUFFER_SIZE + 1] = { }; | ||||||
|  | +	char *tmp; | ||||||
|  | +	int err; | ||||||
|  | + | ||||||
|  | +	err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps)); | ||||||
|  | +	if (err) { | ||||||
|  | +		brcmf_err("could not get firmware cap (%d)\n", err); | ||||||
|  | +		return err; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Put every capability in a new line */ | ||||||
|  | +	for (tmp = caps; *tmp; tmp++) { | ||||||
|  | +		if (*tmp == ' ') | ||||||
|  | +			*tmp = '\n'; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Usually there is a space at the end of capabilities string */ | ||||||
|  | +	seq_printf(seq, "%s", caps); | ||||||
|  | +	/* So make sure we don't print two line breaks */ | ||||||
|  | +	if (tmp > caps && *(tmp - 1) != '\n') | ||||||
|  | +		seq_printf(seq, "\n"); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  void brcmf_feat_attach(struct brcmf_pub *drvr) | ||||||
|  |  { | ||||||
|  |  	struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0); | ||||||
|  | @@ -233,6 +268,7 @@ void brcmf_feat_attach(struct brcmf_pub | ||||||
|  |  void brcmf_feat_debugfs_create(struct brcmf_pub *drvr) | ||||||
|  |  { | ||||||
|  |  	brcmf_debugfs_add_entry(drvr, "features", brcmf_feat_debugfs_read); | ||||||
|  | +	brcmf_debugfs_add_entry(drvr, "fwcap", brcmf_feat_fwcap_debugfs_read); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  bool brcmf_feat_is_enabled(struct brcmf_if *ifp, enum brcmf_feat_id id) | ||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki