diff options
author | Luciano Coelho <coelho@ti.com> | 2011-05-11 10:09:36 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-05-11 15:12:27 -0400 |
commit | 79f460ca49d8d5700756ab7071c951311c7f29cc (patch) | |
tree | b11b62473697c6c1858b83b3abe5181990f85c19 /include/net/mac80211.h | |
parent | 807f8a8c300435d5483e8d78df9dcdbc27333166 (diff) |
mac80211: add support for HW scheduled scan
Implement support for HW scheduled scan. The mac80211 code doesn't perform
scheduled scans itself, but calls the driver to start and stop scheduled
scans.
This patch also creates a trace event class to be used by drv_hw_scan
and the new drv_sched_scan_start and drv_sched_stop functions, in
order to avoid duplicate code.
Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r-- | include/net/mac80211.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 9e5542794b95..62a1c225b7cb 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -537,6 +537,21 @@ struct ieee80211_tx_info { | |||
537 | }; | 537 | }; |
538 | }; | 538 | }; |
539 | 539 | ||
540 | /** | ||
541 | * ieee80211_sched_scan_ies - scheduled scan IEs | ||
542 | * | ||
543 | * This structure is used to pass the appropriate IEs to be used in scheduled | ||
544 | * scans for all bands. It contains both the IEs passed from the userspace | ||
545 | * and the ones generated by mac80211. | ||
546 | * | ||
547 | * @ie: array with the IEs for each supported band | ||
548 | * @len: array with the total length of the IEs for each band | ||
549 | */ | ||
550 | struct ieee80211_sched_scan_ies { | ||
551 | u8 *ie[IEEE80211_NUM_BANDS]; | ||
552 | size_t len[IEEE80211_NUM_BANDS]; | ||
553 | }; | ||
554 | |||
540 | static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb) | 555 | static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb) |
541 | { | 556 | { |
542 | return (struct ieee80211_tx_info *)skb->cb; | 557 | return (struct ieee80211_tx_info *)skb->cb; |
@@ -1693,6 +1708,13 @@ enum ieee80211_ampdu_mlme_action { | |||
1693 | * any error unless this callback returned a negative error code. | 1708 | * any error unless this callback returned a negative error code. |
1694 | * The callback can sleep. | 1709 | * The callback can sleep. |
1695 | * | 1710 | * |
1711 | * @sched_scan_start: Ask the hardware to start scanning repeatedly at | ||
1712 | * specific intervals. The driver must call the | ||
1713 | * ieee80211_sched_scan_results() function whenever it finds results. | ||
1714 | * This process will continue until sched_scan_stop is called. | ||
1715 | * | ||
1716 | * @sched_scan_stop: Tell the hardware to stop an ongoing scheduled scan. | ||
1717 | * | ||
1696 | * @sw_scan_start: Notifier function that is called just before a software scan | 1718 | * @sw_scan_start: Notifier function that is called just before a software scan |
1697 | * is started. Can be NULL, if the driver doesn't need this notification. | 1719 | * is started. Can be NULL, if the driver doesn't need this notification. |
1698 | * The callback can sleep. | 1720 | * The callback can sleep. |
@@ -1877,6 +1899,12 @@ struct ieee80211_ops { | |||
1877 | u32 iv32, u16 *phase1key); | 1899 | u32 iv32, u16 *phase1key); |
1878 | int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | 1900 | int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
1879 | struct cfg80211_scan_request *req); | 1901 | struct cfg80211_scan_request *req); |
1902 | int (*sched_scan_start)(struct ieee80211_hw *hw, | ||
1903 | struct ieee80211_vif *vif, | ||
1904 | struct cfg80211_sched_scan_request *req, | ||
1905 | struct ieee80211_sched_scan_ies *ies); | ||
1906 | void (*sched_scan_stop)(struct ieee80211_hw *hw, | ||
1907 | struct ieee80211_vif *vif); | ||
1880 | void (*sw_scan_start)(struct ieee80211_hw *hw); | 1908 | void (*sw_scan_start)(struct ieee80211_hw *hw); |
1881 | void (*sw_scan_complete)(struct ieee80211_hw *hw); | 1909 | void (*sw_scan_complete)(struct ieee80211_hw *hw); |
1882 | int (*get_stats)(struct ieee80211_hw *hw, | 1910 | int (*get_stats)(struct ieee80211_hw *hw, |
@@ -2594,6 +2622,28 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw); | |||
2594 | void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted); | 2622 | void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted); |
2595 | 2623 | ||
2596 | /** | 2624 | /** |
2625 | * ieee80211_sched_scan_results - got results from scheduled scan | ||
2626 | * | ||
2627 | * When a scheduled scan is running, this function needs to be called by the | ||
2628 | * driver whenever there are new scan results available. | ||
2629 | * | ||
2630 | * @hw: the hardware that is performing scheduled scans | ||
2631 | */ | ||
2632 | void ieee80211_sched_scan_results(struct ieee80211_hw *hw); | ||
2633 | |||
2634 | /** | ||
2635 | * ieee80211_sched_scan_stopped - inform that the scheduled scan has stopped | ||
2636 | * | ||
2637 | * When a scheduled scan is running, this function can be called by | ||
2638 | * the driver if it needs to stop the scan to perform another task. | ||
2639 | * Usual scenarios are drivers that cannot continue the scheduled scan | ||
2640 | * while associating, for instance. | ||
2641 | * | ||
2642 | * @hw: the hardware that is performing scheduled scans | ||
2643 | */ | ||
2644 | void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw); | ||
2645 | |||
2646 | /** | ||
2597 | * ieee80211_iterate_active_interfaces - iterate active interfaces | 2647 | * ieee80211_iterate_active_interfaces - iterate active interfaces |
2598 | * | 2648 | * |
2599 | * This function iterates over the interfaces associated with a given | 2649 | * This function iterates over the interfaces associated with a given |