|
@@ -537,6 +537,21 @@ struct ieee80211_tx_info {
|
|
|
};
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * ieee80211_sched_scan_ies - scheduled scan IEs
|
|
|
+ *
|
|
|
+ * This structure is used to pass the appropriate IEs to be used in scheduled
|
|
|
+ * scans for all bands. It contains both the IEs passed from the userspace
|
|
|
+ * and the ones generated by mac80211.
|
|
|
+ *
|
|
|
+ * @ie: array with the IEs for each supported band
|
|
|
+ * @len: array with the total length of the IEs for each band
|
|
|
+ */
|
|
|
+struct ieee80211_sched_scan_ies {
|
|
|
+ u8 *ie[IEEE80211_NUM_BANDS];
|
|
|
+ size_t len[IEEE80211_NUM_BANDS];
|
|
|
+};
|
|
|
+
|
|
|
static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb)
|
|
|
{
|
|
|
return (struct ieee80211_tx_info *)skb->cb;
|
|
@@ -1693,6 +1708,13 @@ enum ieee80211_ampdu_mlme_action {
|
|
|
* any error unless this callback returned a negative error code.
|
|
|
* The callback can sleep.
|
|
|
*
|
|
|
+ * @sched_scan_start: Ask the hardware to start scanning repeatedly at
|
|
|
+ * specific intervals. The driver must call the
|
|
|
+ * ieee80211_sched_scan_results() function whenever it finds results.
|
|
|
+ * This process will continue until sched_scan_stop is called.
|
|
|
+ *
|
|
|
+ * @sched_scan_stop: Tell the hardware to stop an ongoing scheduled scan.
|
|
|
+ *
|
|
|
* @sw_scan_start: Notifier function that is called just before a software scan
|
|
|
* is started. Can be NULL, if the driver doesn't need this notification.
|
|
|
* The callback can sleep.
|
|
@@ -1877,6 +1899,12 @@ struct ieee80211_ops {
|
|
|
u32 iv32, u16 *phase1key);
|
|
|
int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
|
|
struct cfg80211_scan_request *req);
|
|
|
+ int (*sched_scan_start)(struct ieee80211_hw *hw,
|
|
|
+ struct ieee80211_vif *vif,
|
|
|
+ struct cfg80211_sched_scan_request *req,
|
|
|
+ struct ieee80211_sched_scan_ies *ies);
|
|
|
+ void (*sched_scan_stop)(struct ieee80211_hw *hw,
|
|
|
+ struct ieee80211_vif *vif);
|
|
|
void (*sw_scan_start)(struct ieee80211_hw *hw);
|
|
|
void (*sw_scan_complete)(struct ieee80211_hw *hw);
|
|
|
int (*get_stats)(struct ieee80211_hw *hw,
|
|
@@ -2593,6 +2621,28 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw);
|
|
|
*/
|
|
|
void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted);
|
|
|
|
|
|
+/**
|
|
|
+ * ieee80211_sched_scan_results - got results from scheduled scan
|
|
|
+ *
|
|
|
+ * When a scheduled scan is running, this function needs to be called by the
|
|
|
+ * driver whenever there are new scan results available.
|
|
|
+ *
|
|
|
+ * @hw: the hardware that is performing scheduled scans
|
|
|
+ */
|
|
|
+void ieee80211_sched_scan_results(struct ieee80211_hw *hw);
|
|
|
+
|
|
|
+/**
|
|
|
+ * ieee80211_sched_scan_stopped - inform that the scheduled scan has stopped
|
|
|
+ *
|
|
|
+ * When a scheduled scan is running, this function can be called by
|
|
|
+ * the driver if it needs to stop the scan to perform another task.
|
|
|
+ * Usual scenarios are drivers that cannot continue the scheduled scan
|
|
|
+ * while associating, for instance.
|
|
|
+ *
|
|
|
+ * @hw: the hardware that is performing scheduled scans
|
|
|
+ */
|
|
|
+void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw);
|
|
|
+
|
|
|
/**
|
|
|
* ieee80211_iterate_active_interfaces - iterate active interfaces
|
|
|
*
|