diff mbox

[v2] brcmfmac: add fallback for devices that do not report per-chain values

Message ID 1463070308-30789-1-git-send-email-jjmeijer88@gmail.com (mailing list archive)
State Accepted
Delegated to: Kalle Valo
Headers show

Commit Message

meijjaa May 12, 2016, 4:25 p.m. UTC
If brcmf_cfg80211_get_station fails to determine the RSSI from the
per-chain values get the value individually as a fallback.

Fixes: 1f0dc59a6de9 ("brcmfmac: rework .get_station() callback")

Signed-off-by: Jaap Jan Meijer <jjmeijer88@gmail.com>
---
change log:
v2:
 - remove beacon period and dtim, these values are obtained differently
 - add reverence to fixed commit
---
 .../net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c  | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Arend Van Spriel May 12, 2016, 9:37 p.m. UTC | #1
On 12-05-16 18:25, Jaap Jan Meijer wrote:
> If brcmf_cfg80211_get_station fails to determine the RSSI from the
> per-chain values get the value individually as a fallback.
> 
> Fixes: 1f0dc59a6de9 ("brcmfmac: rework .get_station() callback")

Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
> Signed-off-by: Jaap Jan Meijer <jjmeijer88@gmail.com>
> ---
> change log:
> v2:
>  - remove beacon period and dtim, these values are obtained differently
>  - add reverence to fixed commit
> ---
>  .../net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c  | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> index d5c2a27..e19847c 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> @@ -2480,12 +2480,14 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
>  			   const u8 *mac, struct station_info *sinfo)
>  {
>  	struct brcmf_if *ifp = netdev_priv(ndev);
> +	struct brcmf_scb_val_le scb_val;
>  	s32 err = 0;
>  	struct brcmf_sta_info_le sta_info_le;
>  	u32 sta_flags;
>  	u32 is_tdls_peer;
>  	s32 total_rssi;
>  	s32 count_rssi;
> +	int rssi;
>  	u32 i;
>  
>  	brcmf_dbg(TRACE, "Enter, MAC %pM\n", mac);
> @@ -2569,6 +2571,20 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
>  			sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
>  			total_rssi /= count_rssi;
>  			sinfo->signal = total_rssi;
> +		} else if (test_bit(BRCMF_VIF_STATUS_CONNECTED,
> +			&ifp->vif->sme_state)) {
> +			memset(&scb_val, 0, sizeof(scb_val));
> +			err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_RSSI,
> +						     &scb_val, sizeof(scb_val));
> +			if (err) {
> +				brcmf_err("Could not get rssi (%d)\n", err);
> +				goto done;
> +			} else {
> +				rssi = le32_to_cpu(scb_val.val);
> +				sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
> +				sinfo->signal = rssi;
> +				brcmf_dbg(CONN, "RSSI %d dBm\n", rssi);
> +			}
>  		}
>  	}
>  done:
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kalle Valo May 13, 2016, 10:42 a.m. UTC | #2
Jaap Jan Meijer <jjmeijer88@gmail.com> writes:

> If brcmf_cfg80211_get_station fails to determine the RSSI from the
> per-chain values get the value individually as a fallback.
>
> Fixes: 1f0dc59a6de9 ("brcmfmac: rework .get_station() callback")
>
> Signed-off-by: Jaap Jan Meijer <jjmeijer88@gmail.com>
> ---
> change log:
> v2:
>  - remove beacon period and dtim, these values are obtained differently
>  - add reverence to fixed commit

If no objections I'm planning to send this to 4.7-rc2.
Kalle Valo May 27, 2016, 5:52 p.m. UTC | #3
Jaap Jan Meijer <jjmeijer88@gmail.com> wrote:
> If brcmf_cfg80211_get_station fails to determine the RSSI from the
> per-chain values get the value individually as a fallback.
> 
> Fixes: 1f0dc59a6de9 ("brcmfmac: rework .get_station() callback")
> Signed-off-by: Jaap Jan Meijer <jjmeijer88@gmail.com>
> Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>

Thanks, 1 patch applied to wireless-drivers.git:

94abd778a7bb brcmfmac: add fallback for devices that do not report per-chain values
diff mbox

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index d5c2a27..e19847c 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -2480,12 +2480,14 @@  brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
 			   const u8 *mac, struct station_info *sinfo)
 {
 	struct brcmf_if *ifp = netdev_priv(ndev);
+	struct brcmf_scb_val_le scb_val;
 	s32 err = 0;
 	struct brcmf_sta_info_le sta_info_le;
 	u32 sta_flags;
 	u32 is_tdls_peer;
 	s32 total_rssi;
 	s32 count_rssi;
+	int rssi;
 	u32 i;
 
 	brcmf_dbg(TRACE, "Enter, MAC %pM\n", mac);
@@ -2569,6 +2571,20 @@  brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
 			sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
 			total_rssi /= count_rssi;
 			sinfo->signal = total_rssi;
+		} else if (test_bit(BRCMF_VIF_STATUS_CONNECTED,
+			&ifp->vif->sme_state)) {
+			memset(&scb_val, 0, sizeof(scb_val));
+			err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_RSSI,
+						     &scb_val, sizeof(scb_val));
+			if (err) {
+				brcmf_err("Could not get rssi (%d)\n", err);
+				goto done;
+			} else {
+				rssi = le32_to_cpu(scb_val.val);
+				sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
+				sinfo->signal = rssi;
+				brcmf_dbg(CONN, "RSSI %d dBm\n", rssi);
+			}
 		}
 	}
 done: