mac80211: introduce channel context skeleton code
Channel context are the foundation for multi-channel operation. They are are immutable and are re-created (or re-used if other interfaces are bound to a certain channel and a compatible channel type) on channel switching. This is an initial implementation and more features will come in separate patches. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> [some changes including RCU protection] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
committed by
Johannes Berg
parent
ddffeb8c4d
commit
d01a1e6586
@@ -658,6 +658,30 @@ enum ieee80211_sdata_state_bits {
|
||||
SDATA_STATE_OFFCHANNEL,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee80211_chanctx_mode - channel context configuration mode
|
||||
*
|
||||
* @IEEE80211_CHANCTX_SHARED: channel context may be used by
|
||||
* multiple interfaces
|
||||
* @IEEE80211_CHANCTX_EXCLUSIVE: channel context can be used
|
||||
* only by a single interface. This can be used for example for
|
||||
* non-fixed channel IBSS.
|
||||
*/
|
||||
enum ieee80211_chanctx_mode {
|
||||
IEEE80211_CHANCTX_SHARED,
|
||||
IEEE80211_CHANCTX_EXCLUSIVE
|
||||
};
|
||||
|
||||
struct ieee80211_chanctx {
|
||||
struct list_head list;
|
||||
struct rcu_head rcu_head;
|
||||
|
||||
enum ieee80211_chanctx_mode mode;
|
||||
int refcount;
|
||||
|
||||
struct ieee80211_chanctx_conf conf;
|
||||
};
|
||||
|
||||
struct ieee80211_sub_if_data {
|
||||
struct list_head list;
|
||||
|
||||
@@ -987,6 +1011,10 @@ struct ieee80211_local {
|
||||
struct ieee80211_channel *tmp_channel;
|
||||
enum nl80211_channel_type tmp_channel_type;
|
||||
|
||||
/* channel contexts */
|
||||
struct list_head chanctx_list;
|
||||
struct mutex chanctx_mtx;
|
||||
|
||||
/* SNMP counters */
|
||||
/* dot11CountersTable */
|
||||
u32 dot11TransmittedFragmentCount;
|
||||
@@ -1510,6 +1538,13 @@ bool ieee80211_set_channel_type(struct ieee80211_local *local,
|
||||
enum nl80211_channel_type
|
||||
ieee80211_ht_oper_to_channel_type(struct ieee80211_ht_operation *ht_oper);
|
||||
|
||||
int __must_check
|
||||
ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_channel *channel,
|
||||
enum nl80211_channel_type channel_type,
|
||||
enum ieee80211_chanctx_mode mode);
|
||||
void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata);
|
||||
|
||||
#ifdef CONFIG_MAC80211_NOINLINE
|
||||
#define debug_noinline noinline
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user