Skip to content

Commit

Permalink
wifi: cfg80211: export DFS CAC time and usable state helper functions
Browse files Browse the repository at this point in the history
cfg80211 has cfg80211_chandef_dfs_usable() function to know whether
at least one channel in the chandef is in usable state or not. Also,
cfg80211_chandef_dfs_cac_time() function is there which tells the CAC
time required for the given chandef.

Make these two functions visible to drivers by exporting their symbol
to global list of kernel symbols.

Lower level drivers can make use of these two functions to be aware
if CAC is required on the given chandef and for how long. For example
drivers which maintains the CAC state internally can make use of these.

Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Link: https://lore.kernel.org/r/20230912051857.2284-2-quic_adisi@quicinc.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Aditya Kumar Singh authored and Johannes Berg committed Sep 13, 2023
1 parent b13b6bb commit 30ca8b0
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 17 deletions.
24 changes: 24 additions & 0 deletions include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1002,6 +1002,30 @@ int cfg80211_chandef_dfs_required(struct wiphy *wiphy,
const struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype);

/**
* cfg80211_chandef_dfs_usable - checks if chandef is DFS usable and we
* can/need start CAC on such channel
* @wiphy: the wiphy to validate against
* @chandef: the channel definition to check
*
* Return: true if all channels available and at least
* one channel requires CAC (NL80211_DFS_USABLE)
*/
bool cfg80211_chandef_dfs_usable(struct wiphy *wiphy,
const struct cfg80211_chan_def *chandef);

/**
* cfg80211_chandef_dfs_cac_time - get the DFS CAC time (in ms) for given
* channel definition
* @wiphy: the wiphy to validate against
* @chandef: the channel definition to check
*
* Returns: DFS CAC time (in ms) which applies for this channel definition
*/
unsigned int
cfg80211_chandef_dfs_cac_time(struct wiphy *wiphy,
const struct cfg80211_chan_def *chandef);

/**
* nl80211_send_chandef - sends the channel definition.
* @msg: the msg to send channel definition
Expand Down
2 changes: 2 additions & 0 deletions net/wireless/chan.c
Original file line number Diff line number Diff line change
Expand Up @@ -666,6 +666,7 @@ bool cfg80211_chandef_dfs_usable(struct wiphy *wiphy,

return (r1 + r2 > 0);
}
EXPORT_SYMBOL(cfg80211_chandef_dfs_usable);

/*
* Checks if center frequency of chan falls with in the bandwidth
Expand Down Expand Up @@ -965,6 +966,7 @@ cfg80211_chandef_dfs_cac_time(struct wiphy *wiphy,

return max(t1, t2);
}
EXPORT_SYMBOL(cfg80211_chandef_dfs_cac_time);

static bool cfg80211_secondary_chans_ok(struct wiphy *wiphy,
u32 center_freq, u32 bandwidth,
Expand Down
17 changes: 0 additions & 17 deletions net/wireless/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -452,29 +452,12 @@ int cfg80211_scan(struct cfg80211_registered_device *rdev);

extern struct work_struct cfg80211_disconnect_work;

/**
* cfg80211_chandef_dfs_usable - checks if chandef is DFS usable
* @wiphy: the wiphy to validate against
* @chandef: the channel definition to check
*
* Checks if chandef is usable and we can/need start CAC on such channel.
*
* Return: true if all channels available and at least
* one channel requires CAC (NL80211_DFS_USABLE)
*/
bool cfg80211_chandef_dfs_usable(struct wiphy *wiphy,
const struct cfg80211_chan_def *chandef);

void cfg80211_set_dfs_state(struct wiphy *wiphy,
const struct cfg80211_chan_def *chandef,
enum nl80211_dfs_state dfs_state);

void cfg80211_dfs_channels_update_work(struct work_struct *work);

unsigned int
cfg80211_chandef_dfs_cac_time(struct wiphy *wiphy,
const struct cfg80211_chan_def *chandef);

void cfg80211_sched_dfs_chan_update(struct cfg80211_registered_device *rdev);

int
Expand Down

0 comments on commit 30ca8b0

Please sign in to comment.