diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2016-01-10 00:19:16 +0000 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2016-01-10 00:19:16 +0000 |
commit | acad802bceb2d41e003c07a0f17d800151ba7975 (patch) | |
tree | 8abbb86e4c12bf345dcebe199ca195f45557925b /package/kernel/mac80211/patches/372-0008-brcmfmac-Add-dump_station-support-to-cfg80221-ops.patch | |
parent | 615ff23d4f635cfefaf2960cd9233e540b1eaab5 (diff) | |
download | upstream-acad802bceb2d41e003c07a0f17d800151ba7975.tar.gz upstream-acad802bceb2d41e003c07a0f17d800151ba7975.tar.bz2 upstream-acad802bceb2d41e003c07a0f17d800151ba7975.zip |
mac80211: brcmfmac: support dumping stations
It allows user-space fetch associated STAs and e.g. iwinfo/luci display
them.
git-svn-id: svn://svn.openwrt.org/openwrt/branches/chaos_calmer@48167 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/kernel/mac80211/patches/372-0008-brcmfmac-Add-dump_station-support-to-cfg80221-ops.patch')
-rw-r--r-- | package/kernel/mac80211/patches/372-0008-brcmfmac-Add-dump_station-support-to-cfg80221-ops.patch | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/372-0008-brcmfmac-Add-dump_station-support-to-cfg80221-ops.patch b/package/kernel/mac80211/patches/372-0008-brcmfmac-Add-dump_station-support-to-cfg80221-ops.patch new file mode 100644 index 0000000000..a6bafd2497 --- /dev/null +++ b/package/kernel/mac80211/patches/372-0008-brcmfmac-Add-dump_station-support-to-cfg80221-ops.patch @@ -0,0 +1,107 @@ +From: Hante Meuleman <meuleman@broadcom.com> +Date: Thu, 8 Oct 2015 20:33:18 +0200 +Subject: [PATCH] brcmfmac: Add dump_station support to cfg80221 ops. + +With this feature it becomes possible to request a station +assoc list. + +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> +--- + +--- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c +@@ -2520,6 +2520,35 @@ done: + return err; + } + ++static int ++brcmf_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *ndev, ++ int idx, u8 *mac, struct station_info *sinfo) ++{ ++ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); ++ struct brcmf_if *ifp = netdev_priv(ndev); ++ s32 err; ++ ++ brcmf_dbg(TRACE, "Enter, idx %d\n", idx); ++ ++ if (idx == 0) { ++ cfg->assoclist.count = cpu_to_le32(BRCMF_MAX_ASSOCLIST); ++ err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_ASSOCLIST, ++ &cfg->assoclist, ++ sizeof(cfg->assoclist)); ++ if (err) { ++ brcmf_err("BRCMF_C_GET_ASSOCLIST unsupported, err=%d\n", ++ err); ++ cfg->assoclist.count = 0; ++ return -EOPNOTSUPP; ++ } ++ } ++ if (idx < le32_to_cpu(cfg->assoclist.count)) { ++ memcpy(mac, cfg->assoclist.mac[idx], ETH_ALEN); ++ return brcmf_cfg80211_get_station(wiphy, ndev, mac, sinfo); ++ } ++ return -ENOENT; ++} ++ + static s32 + brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev, + bool enabled, s32 timeout) +@@ -4619,6 +4648,7 @@ static struct cfg80211_ops wl_cfg80211_o + .join_ibss = brcmf_cfg80211_join_ibss, + .leave_ibss = brcmf_cfg80211_leave_ibss, + .get_station = brcmf_cfg80211_get_station, ++ .dump_station = brcmf_cfg80211_dump_station, + .set_tx_power = brcmf_cfg80211_set_tx_power, + .get_tx_power = brcmf_cfg80211_get_tx_power, + .add_key = brcmf_cfg80211_add_key, +--- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h ++++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h +@@ -407,6 +407,7 @@ struct brcmf_cfg80211_info { + struct brcmu_d11inf d11inf; + bool wowl_enabled; + u32 pre_wowl_pmmode; ++ struct brcmf_assoclist_le assoclist; + }; + + /** +--- a/drivers/net/wireless/brcm80211/brcmfmac/fwil.h ++++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil.h +@@ -72,6 +72,7 @@ + #define BRCMF_C_GET_BSS_INFO 136 + #define BRCMF_C_GET_BANDLIST 140 + #define BRCMF_C_SET_SCB_TIMEOUT 158 ++#define BRCMF_C_GET_ASSOCLIST 159 + #define BRCMF_C_GET_PHYLIST 180 + #define BRCMF_C_SET_SCAN_CHANNEL_TIME 185 + #define BRCMF_C_SET_SCAN_UNASSOC_TIME 187 +--- a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h ++++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h +@@ -119,6 +119,8 @@ + #define BRCMF_COUNTRY_BUF_SZ 4 + #define BRCMF_ANT_MAX 4 + ++#define BRCMF_MAX_ASSOCLIST 128 ++ + /* join preference types for join_pref iovar */ + enum brcmf_join_pref_types { + BRCMF_JOIN_PREF_RSSI = 1, +@@ -621,4 +623,15 @@ struct brcmf_rev_info_le { + __le32 nvramrev; + }; + ++/** ++ * struct brcmf_assoclist_le - request assoc list. ++ * ++ * @count: indicates number of stations. ++ * @mac: MAC addresses of stations. ++ */ ++struct brcmf_assoclist_le { ++ __le32 count; ++ u8 mac[BRCMF_MAX_ASSOCLIST][ETH_ALEN]; ++}; ++ + #endif /* FWIL_TYPES_H_ */ |