#include <linux/nl80211.h>
#include <linux/export.h>
#include <linux/rtnetlink.h>
#include <net/cfg80211.h>
#include "ieee80211_i.h"
#include "driver-ops.h"
#include "rate.h"
static int ieee80211_chanctx_num_assigned(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx)
{ … }
static int ieee80211_chanctx_num_reserved(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx)
{ … }
int ieee80211_chanctx_refcount(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx)
{ … }
static int ieee80211_num_chanctx(struct ieee80211_local *local, int radio_idx)
{ … }
static bool ieee80211_can_create_new_chanctx(struct ieee80211_local *local,
int radio_idx)
{ … }
static struct ieee80211_chanctx *
ieee80211_link_get_chanctx(struct ieee80211_link_data *link)
{ … }
bool ieee80211_chanreq_identical(const struct ieee80211_chan_req *a,
const struct ieee80211_chan_req *b)
{ … }
static const struct ieee80211_chan_req *
ieee80211_chanreq_compatible(const struct ieee80211_chan_req *a,
const struct ieee80211_chan_req *b,
struct ieee80211_chan_req *tmp)
{ … }
static const struct ieee80211_chan_req *
ieee80211_chanctx_compatible(struct ieee80211_chanctx *ctx,
const struct ieee80211_chan_req *req,
struct ieee80211_chan_req *tmp)
{ … }
static const struct ieee80211_chan_req *
ieee80211_chanctx_reserved_chanreq(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
const struct ieee80211_chan_req *req,
struct ieee80211_chan_req *tmp)
{ … }
static const struct ieee80211_chan_req *
ieee80211_chanctx_non_reserved_chandef(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
const struct ieee80211_chan_req *compat,
struct ieee80211_chan_req *tmp)
{ … }
static bool
ieee80211_chanctx_can_reserve(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
const struct ieee80211_chan_req *req)
{ … }
static struct ieee80211_chanctx *
ieee80211_find_reservation_chanctx(struct ieee80211_local *local,
const struct ieee80211_chan_req *chanreq,
enum ieee80211_chanctx_mode mode)
{ … }
static enum nl80211_chan_width ieee80211_get_sta_bw(struct sta_info *sta,
unsigned int link_id)
{ … }
static enum nl80211_chan_width
ieee80211_get_max_required_bw(struct ieee80211_link_data *link)
{ … }
static enum nl80211_chan_width
ieee80211_get_chanctx_max_required_bw(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
struct ieee80211_link_data *rsvd_for,
bool check_reserved)
{ … }
static u32
_ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
struct ieee80211_link_data *rsvd_for,
bool check_reserved)
{ … }
static void ieee80211_chan_bw_change(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
bool reserved, bool narrowed)
{ … }
void ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
struct ieee80211_link_data *rsvd_for,
bool check_reserved)
{ … }
static void _ieee80211_change_chanctx(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
struct ieee80211_chanctx *old_ctx,
const struct ieee80211_chan_req *chanreq,
struct ieee80211_link_data *rsvd_for)
{ … }
static void ieee80211_change_chanctx(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
struct ieee80211_chanctx *old_ctx,
const struct ieee80211_chan_req *chanreq)
{ … }
static struct ieee80211_chanctx *
ieee80211_find_chanctx(struct ieee80211_local *local,
struct ieee80211_link_data *link,
const struct ieee80211_chan_req *chanreq,
enum ieee80211_chanctx_mode mode)
{ … }
bool ieee80211_is_radar_required(struct ieee80211_local *local)
{ … }
static bool
ieee80211_chanctx_radar_required(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx)
{ … }
static struct ieee80211_chanctx *
ieee80211_alloc_chanctx(struct ieee80211_local *local,
const struct ieee80211_chan_req *chanreq,
enum ieee80211_chanctx_mode mode,
int radio_idx)
{ … }
static int ieee80211_add_chanctx(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx)
{ … }
static struct ieee80211_chanctx *
ieee80211_new_chanctx(struct ieee80211_local *local,
const struct ieee80211_chan_req *chanreq,
enum ieee80211_chanctx_mode mode,
bool assign_on_failure,
int radio_idx)
{ … }
static void ieee80211_del_chanctx(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
bool skip_idle_recalc)
{ … }
static void ieee80211_free_chanctx(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx,
bool skip_idle_recalc)
{ … }
void ieee80211_recalc_chanctx_chantype(struct ieee80211_local *local,
struct ieee80211_chanctx *ctx)
{ … }
static void ieee80211_recalc_radar_chanctx(struct ieee80211_local *local,
struct ieee80211_chanctx *chanctx)
{ … }
static int ieee80211_assign_link_chanctx(struct ieee80211_link_data *link,
struct ieee80211_chanctx *new_ctx,
bool assign_on_failure)
{ … }
void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
struct ieee80211_chanctx *chanctx)
{ … }
static void
__ieee80211_link_copy_chanctx_to_vlans(struct ieee80211_link_data *link,
bool clear)
{ … }
void ieee80211_link_copy_chanctx_to_vlans(struct ieee80211_link_data *link,
bool clear)
{ … }
int ieee80211_link_unreserve_chanctx(struct ieee80211_link_data *link)
{ … }
static struct ieee80211_chanctx *
ieee80211_replace_chanctx(struct ieee80211_local *local,
const struct ieee80211_chan_req *chanreq,
enum ieee80211_chanctx_mode mode,
struct ieee80211_chanctx *curr_ctx)
{ … }
static bool
ieee80211_find_available_radio(struct ieee80211_local *local,
const struct ieee80211_chan_req *chanreq,
int *radio_idx)
{ … }
int ieee80211_link_reserve_chanctx(struct ieee80211_link_data *link,
const struct ieee80211_chan_req *chanreq,
enum ieee80211_chanctx_mode mode,
bool radar_required)
{ … }
static void
ieee80211_link_chanctx_reservation_complete(struct ieee80211_link_data *link)
{ … }
static void
ieee80211_link_update_chanreq(struct ieee80211_link_data *link,
const struct ieee80211_chan_req *chanreq)
{ … }
static int
ieee80211_link_use_reserved_reassign(struct ieee80211_link_data *link)
{ … }
static int
ieee80211_link_use_reserved_assign(struct ieee80211_link_data *link)
{ … }
static bool
ieee80211_link_has_in_place_reservation(struct ieee80211_link_data *link)
{ … }
static int ieee80211_chsw_switch_vifs(struct ieee80211_local *local,
int n_vifs)
{ … }
static int ieee80211_chsw_switch_ctxs(struct ieee80211_local *local)
{ … }
static int ieee80211_vif_use_reserved_switch(struct ieee80211_local *local)
{ … }
void __ieee80211_link_release_channel(struct ieee80211_link_data *link,
bool skip_idle_recalc)
{ … }
int _ieee80211_link_use_channel(struct ieee80211_link_data *link,
const struct ieee80211_chan_req *chanreq,
enum ieee80211_chanctx_mode mode,
bool assign_on_failure)
{ … }
int ieee80211_link_use_reserved_context(struct ieee80211_link_data *link)
{ … }
static const struct ieee80211_chan_req *
ieee80211_chanctx_recheck(struct ieee80211_local *local,
struct ieee80211_link_data *skip_link,
struct ieee80211_chanctx *ctx,
const struct ieee80211_chan_req *req,
struct ieee80211_chan_req *tmp)
{ … }
int ieee80211_link_change_chanreq(struct ieee80211_link_data *link,
const struct ieee80211_chan_req *chanreq,
u64 *changed)
{ … }
void ieee80211_link_release_channel(struct ieee80211_link_data *link)
{ … }
void ieee80211_link_vlan_copy_chanctx(struct ieee80211_link_data *link)
{ … }
void ieee80211_iter_chan_contexts_atomic(
struct ieee80211_hw *hw,
void (*iter)(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *chanctx_conf,
void *data),
void *iter_data)
{ … }
EXPORT_SYMBOL_GPL(…);