|
@@ -1285,6 +1285,7 @@ struct cfg80211_ssid {
|
|
|
* @n_ssids: number of SSIDs
|
|
|
* @channels: channels to scan on.
|
|
|
* @n_channels: total number of channels to scan
|
|
|
+ * @scan_width: channel width for scanning
|
|
|
* @ie: optional information element(s) to add into Probe Request or %NULL
|
|
|
* @ie_len: length of ie in octets
|
|
|
* @flags: bit field of flags controlling operation
|
|
@@ -1300,6 +1301,7 @@ struct cfg80211_scan_request {
|
|
|
struct cfg80211_ssid *ssids;
|
|
|
int n_ssids;
|
|
|
u32 n_channels;
|
|
|
+ enum nl80211_bss_scan_width scan_width;
|
|
|
const u8 *ie;
|
|
|
size_t ie_len;
|
|
|
u32 flags;
|
|
@@ -1333,6 +1335,7 @@ struct cfg80211_match_set {
|
|
|
* @ssids: SSIDs to scan for (passed in the probe_reqs in active scans)
|
|
|
* @n_ssids: number of SSIDs
|
|
|
* @n_channels: total number of channels to scan
|
|
|
+ * @scan_width: channel width for scanning
|
|
|
* @interval: interval between each scheduled scan cycle
|
|
|
* @ie: optional information element(s) to add into Probe Request or %NULL
|
|
|
* @ie_len: length of ie in octets
|
|
@@ -1352,6 +1355,7 @@ struct cfg80211_sched_scan_request {
|
|
|
struct cfg80211_ssid *ssids;
|
|
|
int n_ssids;
|
|
|
u32 n_channels;
|
|
|
+ enum nl80211_bss_scan_width scan_width;
|
|
|
u32 interval;
|
|
|
const u8 *ie;
|
|
|
size_t ie_len;
|
|
@@ -1403,6 +1407,7 @@ struct cfg80211_bss_ies {
|
|
|
* for use in scan results and similar.
|
|
|
*
|
|
|
* @channel: channel this BSS is on
|
|
|
+ * @scan_width: width of the control channel
|
|
|
* @bssid: BSSID of the BSS
|
|
|
* @beacon_interval: the beacon interval as from the frame
|
|
|
* @capability: the capability field in host byte order
|
|
@@ -1424,6 +1429,7 @@ struct cfg80211_bss_ies {
|
|
|
*/
|
|
|
struct cfg80211_bss {
|
|
|
struct ieee80211_channel *channel;
|
|
|
+ enum nl80211_bss_scan_width scan_width;
|
|
|
|
|
|
const struct cfg80211_bss_ies __rcu *ies;
|
|
|
const struct cfg80211_bss_ies __rcu *beacon_ies;
|
|
@@ -3438,10 +3444,11 @@ void cfg80211_sched_scan_results(struct wiphy *wiphy);
|
|
|
void cfg80211_sched_scan_stopped(struct wiphy *wiphy);
|
|
|
|
|
|
/**
|
|
|
- * cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame
|
|
|
+ * cfg80211_inform_bss_width_frame - inform cfg80211 of a received BSS frame
|
|
|
*
|
|
|
* @wiphy: the wiphy reporting the BSS
|
|
|
* @channel: The channel the frame was received on
|
|
|
+ * @scan_width: width of the control channel
|
|
|
* @mgmt: the management frame (probe response or beacon)
|
|
|
* @len: length of the management frame
|
|
|
* @signal: the signal strength, type depends on the wiphy's signal_type
|
|
@@ -3454,16 +3461,29 @@ void cfg80211_sched_scan_stopped(struct wiphy *wiphy);
|
|
|
* Or %NULL on error.
|
|
|
*/
|
|
|
struct cfg80211_bss * __must_check
|
|
|
+cfg80211_inform_bss_width_frame(struct wiphy *wiphy,
|
|
|
+ struct ieee80211_channel *channel,
|
|
|
+ enum nl80211_bss_scan_width scan_width,
|
|
|
+ struct ieee80211_mgmt *mgmt, size_t len,
|
|
|
+ s32 signal, gfp_t gfp);
|
|
|
+
|
|
|
+static inline struct cfg80211_bss * __must_check
|
|
|
cfg80211_inform_bss_frame(struct wiphy *wiphy,
|
|
|
struct ieee80211_channel *channel,
|
|
|
struct ieee80211_mgmt *mgmt, size_t len,
|
|
|
- s32 signal, gfp_t gfp);
|
|
|
+ s32 signal, gfp_t gfp)
|
|
|
+{
|
|
|
+ return cfg80211_inform_bss_width_frame(wiphy, channel,
|
|
|
+ NL80211_BSS_CHAN_WIDTH_20,
|
|
|
+ mgmt, len, signal, gfp);
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
* cfg80211_inform_bss - inform cfg80211 of a new BSS
|
|
|
*
|
|
|
* @wiphy: the wiphy reporting the BSS
|
|
|
* @channel: The channel the frame was received on
|
|
|
+ * @scan_width: width of the control channel
|
|
|
* @bssid: the BSSID of the BSS
|
|
|
* @tsf: the TSF sent by the peer in the beacon/probe response (or 0)
|
|
|
* @capability: the capability field sent by the peer
|
|
@@ -3480,11 +3500,26 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
|
|
|
* Or %NULL on error.
|
|
|
*/
|
|
|
struct cfg80211_bss * __must_check
|
|
|
+cfg80211_inform_bss_width(struct wiphy *wiphy,
|
|
|
+ struct ieee80211_channel *channel,
|
|
|
+ enum nl80211_bss_scan_width scan_width,
|
|
|
+ const u8 *bssid, u64 tsf, u16 capability,
|
|
|
+ u16 beacon_interval, const u8 *ie, size_t ielen,
|
|
|
+ s32 signal, gfp_t gfp);
|
|
|
+
|
|
|
+static inline struct cfg80211_bss * __must_check
|
|
|
cfg80211_inform_bss(struct wiphy *wiphy,
|
|
|
struct ieee80211_channel *channel,
|
|
|
const u8 *bssid, u64 tsf, u16 capability,
|
|
|
u16 beacon_interval, const u8 *ie, size_t ielen,
|
|
|
- s32 signal, gfp_t gfp);
|
|
|
+ s32 signal, gfp_t gfp)
|
|
|
+{
|
|
|
+ return cfg80211_inform_bss_width(wiphy, channel,
|
|
|
+ NL80211_BSS_CHAN_WIDTH_20,
|
|
|
+ bssid, tsf, capability,
|
|
|
+ beacon_interval, ie, ielen, signal,
|
|
|
+ gfp);
|
|
|
+}
|
|
|
|
|
|
struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy,
|
|
|
struct ieee80211_channel *channel,
|
|
@@ -3530,6 +3565,19 @@ void cfg80211_put_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);
|
|
|
*/
|
|
|
void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);
|
|
|
|
|
|
+static inline enum nl80211_bss_scan_width
|
|
|
+cfg80211_chandef_to_scan_width(const struct cfg80211_chan_def *chandef)
|
|
|
+{
|
|
|
+ switch (chandef->width) {
|
|
|
+ case NL80211_CHAN_WIDTH_5:
|
|
|
+ return NL80211_BSS_CHAN_WIDTH_5;
|
|
|
+ case NL80211_CHAN_WIDTH_10:
|
|
|
+ return NL80211_BSS_CHAN_WIDTH_10;
|
|
|
+ default:
|
|
|
+ return NL80211_BSS_CHAN_WIDTH_20;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* cfg80211_rx_mlme_mgmt - notification of processed MLME management frame
|
|
|
* @dev: network device
|