mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 22:02:28 +00:00
brcmfmac: Add get_station support for IBSS
When get_station is requested for IBSS then an error will be printed and no information will be returned. This patch adds IBSS specific get station information function. Reviewed-by: Arend Van Spriel <arend@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Hante Meuleman <meuleman@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
44129ed04b
commit
3f5893d1b3
@ -2428,6 +2428,54 @@ static void brcmf_fill_bss_param(struct brcmf_if *ifp, struct station_info *si)
|
||||
si->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
|
||||
}
|
||||
|
||||
static s32
|
||||
brcmf_cfg80211_get_station_ibss(struct brcmf_if *ifp,
|
||||
struct station_info *sinfo)
|
||||
{
|
||||
struct brcmf_scb_val_le scbval;
|
||||
struct brcmf_pktcnt_le pktcnt;
|
||||
s32 err;
|
||||
u32 rate;
|
||||
u32 rssi;
|
||||
|
||||
/* Get the current tx rate */
|
||||
err = brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_RATE, &rate);
|
||||
if (err < 0) {
|
||||
brcmf_err("BRCMF_C_GET_RATE error (%d)\n", err);
|
||||
return err;
|
||||
}
|
||||
sinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE);
|
||||
sinfo->txrate.legacy = rate * 5;
|
||||
|
||||
memset(&scbval, 0, sizeof(scbval));
|
||||
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_RSSI, &scbval,
|
||||
sizeof(scbval));
|
||||
if (err) {
|
||||
brcmf_err("BRCMF_C_GET_RSSI error (%d)\n", err);
|
||||
return err;
|
||||
}
|
||||
rssi = le32_to_cpu(scbval.val);
|
||||
sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
|
||||
sinfo->signal = rssi;
|
||||
|
||||
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_GET_PKTCNTS, &pktcnt,
|
||||
sizeof(pktcnt));
|
||||
if (err) {
|
||||
brcmf_err("BRCMF_C_GET_GET_PKTCNTS error (%d)\n", err);
|
||||
return err;
|
||||
}
|
||||
sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS) |
|
||||
BIT(NL80211_STA_INFO_RX_DROP_MISC) |
|
||||
BIT(NL80211_STA_INFO_TX_PACKETS) |
|
||||
BIT(NL80211_STA_INFO_TX_FAILED);
|
||||
sinfo->rx_packets = le32_to_cpu(pktcnt.rx_good_pkt);
|
||||
sinfo->rx_dropped_misc = le32_to_cpu(pktcnt.rx_bad_pkt);
|
||||
sinfo->tx_packets = le32_to_cpu(pktcnt.tx_good_pkt);
|
||||
sinfo->tx_failed = le32_to_cpu(pktcnt.tx_bad_pkt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static s32
|
||||
brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
|
||||
const u8 *mac, struct station_info *sinfo)
|
||||
@ -2445,6 +2493,9 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
|
||||
if (!check_vif_up(ifp->vif))
|
||||
return -EIO;
|
||||
|
||||
if (brcmf_is_ibssmode(ifp->vif))
|
||||
return brcmf_cfg80211_get_station_ibss(ifp, sinfo);
|
||||
|
||||
memset(&sta_info_le, 0, sizeof(sta_info_le));
|
||||
memcpy(&sta_info_le, mac, ETH_ALEN);
|
||||
err = brcmf_fil_iovar_data_get(ifp, "tdls_sta_info",
|
||||
|
@ -70,6 +70,7 @@
|
||||
#define BRCMF_C_SET_WSEC 134
|
||||
#define BRCMF_C_GET_PHY_NOISE 135
|
||||
#define BRCMF_C_GET_BSS_INFO 136
|
||||
#define BRCMF_C_GET_GET_PKTCNTS 137
|
||||
#define BRCMF_C_GET_BANDLIST 140
|
||||
#define BRCMF_C_SET_SCB_TIMEOUT 158
|
||||
#define BRCMF_C_GET_ASSOCLIST 159
|
||||
|
@ -751,4 +751,21 @@ struct brcmf_pno_scanresults_le {
|
||||
__le32 count;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct brcmf_pktcnt_le - packet counters.
|
||||
*
|
||||
* @rx_good_pkt: packets (MSDUs & MMPDUs) received from this station
|
||||
* @rx_bad_pkt: failed rx packets
|
||||
* @tx_good_pkt: packets (MSDUs & MMPDUs) transmitted to this station
|
||||
* @tx_bad_pkt: failed tx packets
|
||||
* @rx_ocast_good_pkt: unicast packets destined for others
|
||||
*/
|
||||
struct brcmf_pktcnt_le {
|
||||
__le32 rx_good_pkt;
|
||||
__le32 rx_bad_pkt;
|
||||
__le32 tx_good_pkt;
|
||||
__le32 tx_bad_pkt;
|
||||
__le32 rx_ocast_good_pkt;
|
||||
};
|
||||
|
||||
#endif /* FWIL_TYPES_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user