mac80211: Add debugfs callbacks for station addition/removal
Provide drivers with hooks to create debugfs files when a new station is added. This would help drivers to take advantage of mac80211's station list infrastructure and not maintain tedious station management code internally. Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com> [ifdef inline wrapper functions] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
fe5f255930
commit
77d2ece6fd
@ -2208,6 +2208,14 @@ enum ieee80211_rate_control_changed {
|
|||||||
* @sta_remove: Notifies low level driver about removal of an associated
|
* @sta_remove: Notifies low level driver about removal of an associated
|
||||||
* station, AP, IBSS/WDS/mesh peer etc. This callback can sleep.
|
* station, AP, IBSS/WDS/mesh peer etc. This callback can sleep.
|
||||||
*
|
*
|
||||||
|
* @sta_add_debugfs: Drivers can use this callback to add debugfs files
|
||||||
|
* when a station is added to mac80211's station list. This callback
|
||||||
|
* and @sta_remove_debugfs should be within a CONFIG_MAC80211_DEBUGFS
|
||||||
|
* conditional. This callback can sleep.
|
||||||
|
*
|
||||||
|
* @sta_remove_debugfs: Remove the debugfs files which were added using
|
||||||
|
* @sta_add_debugfs. This callback can sleep.
|
||||||
|
*
|
||||||
* @sta_notify: Notifies low level driver about power state transition of an
|
* @sta_notify: Notifies low level driver about power state transition of an
|
||||||
* associated station, AP, IBSS/WDS/mesh peer etc. For a VIF operating
|
* associated station, AP, IBSS/WDS/mesh peer etc. For a VIF operating
|
||||||
* in AP mode, this callback will not be called when the flag
|
* in AP mode, this callback will not be called when the flag
|
||||||
@ -2489,6 +2497,16 @@ struct ieee80211_ops {
|
|||||||
struct ieee80211_sta *sta);
|
struct ieee80211_sta *sta);
|
||||||
int (*sta_remove)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
int (*sta_remove)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
struct ieee80211_sta *sta);
|
struct ieee80211_sta *sta);
|
||||||
|
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||||
|
void (*sta_add_debugfs)(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct dentry *dir);
|
||||||
|
void (*sta_remove_debugfs)(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct dentry *dir);
|
||||||
|
#endif
|
||||||
void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
enum sta_notify_cmd, struct ieee80211_sta *sta);
|
enum sta_notify_cmd, struct ieee80211_sta *sta);
|
||||||
int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "debugfs.h"
|
#include "debugfs.h"
|
||||||
#include "debugfs_sta.h"
|
#include "debugfs_sta.h"
|
||||||
#include "sta_info.h"
|
#include "sta_info.h"
|
||||||
|
#include "driver-ops.h"
|
||||||
|
|
||||||
/* sta attributtes */
|
/* sta attributtes */
|
||||||
|
|
||||||
@ -334,6 +335,8 @@ STA_OPS(ht_capa);
|
|||||||
|
|
||||||
void ieee80211_sta_debugfs_add(struct sta_info *sta)
|
void ieee80211_sta_debugfs_add(struct sta_info *sta)
|
||||||
{
|
{
|
||||||
|
struct ieee80211_local *local = sta->local;
|
||||||
|
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
||||||
struct dentry *stations_dir = sta->sdata->debugfs.subdir_stations;
|
struct dentry *stations_dir = sta->sdata->debugfs.subdir_stations;
|
||||||
u8 mac[3*ETH_ALEN];
|
u8 mac[3*ETH_ALEN];
|
||||||
|
|
||||||
@ -379,10 +382,16 @@ void ieee80211_sta_debugfs_add(struct sta_info *sta)
|
|||||||
DEBUGFS_ADD_COUNTER(tx_retry_failed, tx_retry_failed);
|
DEBUGFS_ADD_COUNTER(tx_retry_failed, tx_retry_failed);
|
||||||
DEBUGFS_ADD_COUNTER(tx_retry_count, tx_retry_count);
|
DEBUGFS_ADD_COUNTER(tx_retry_count, tx_retry_count);
|
||||||
DEBUGFS_ADD_COUNTER(wep_weak_iv_count, wep_weak_iv_count);
|
DEBUGFS_ADD_COUNTER(wep_weak_iv_count, wep_weak_iv_count);
|
||||||
|
|
||||||
|
drv_sta_add_debugfs(local, sdata, &sta->sta, sta->debugfs.dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ieee80211_sta_debugfs_remove(struct sta_info *sta)
|
void ieee80211_sta_debugfs_remove(struct sta_info *sta)
|
||||||
{
|
{
|
||||||
|
struct ieee80211_local *local = sta->local;
|
||||||
|
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
||||||
|
|
||||||
|
drv_sta_remove_debugfs(local, sdata, &sta->sta, sta->debugfs.dir);
|
||||||
debugfs_remove_recursive(sta->debugfs.dir);
|
debugfs_remove_recursive(sta->debugfs.dir);
|
||||||
sta->debugfs.dir = NULL;
|
sta->debugfs.dir = NULL;
|
||||||
}
|
}
|
||||||
|
@ -490,6 +490,38 @@ static inline void drv_sta_remove(struct ieee80211_local *local,
|
|||||||
trace_drv_return_void(local);
|
trace_drv_return_void(local);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||||
|
static inline void drv_sta_add_debugfs(struct ieee80211_local *local,
|
||||||
|
struct ieee80211_sub_if_data *sdata,
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct dentry *dir)
|
||||||
|
{
|
||||||
|
might_sleep();
|
||||||
|
|
||||||
|
sdata = get_bss_sdata(sdata);
|
||||||
|
check_sdata_in_driver(sdata);
|
||||||
|
|
||||||
|
if (local->ops->sta_add_debugfs)
|
||||||
|
local->ops->sta_add_debugfs(&local->hw, &sdata->vif,
|
||||||
|
sta, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void drv_sta_remove_debugfs(struct ieee80211_local *local,
|
||||||
|
struct ieee80211_sub_if_data *sdata,
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct dentry *dir)
|
||||||
|
{
|
||||||
|
might_sleep();
|
||||||
|
|
||||||
|
sdata = get_bss_sdata(sdata);
|
||||||
|
check_sdata_in_driver(sdata);
|
||||||
|
|
||||||
|
if (local->ops->sta_remove_debugfs)
|
||||||
|
local->ops->sta_remove_debugfs(&local->hw, &sdata->vif,
|
||||||
|
sta, dir);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline __must_check
|
static inline __must_check
|
||||||
int drv_sta_state(struct ieee80211_local *local,
|
int drv_sta_state(struct ieee80211_local *local,
|
||||||
struct ieee80211_sub_if_data *sdata,
|
struct ieee80211_sub_if_data *sdata,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user