aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/cfg80211.h
diff options
context:
space:
mode:
authorLuciano Coelho <coelho@ti.com>2011-05-11 10:09:35 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-05-11 15:12:26 -0400
commit807f8a8c300435d5483e8d78df9dcdbc27333166 (patch)
tree1537d40e149d7a8712fe63d17ea3b51093bf03a1 /include/net/cfg80211.h
parent6bdbdbf4a151a3a1333818cd17a7d7795e936041 (diff)
cfg80211/nl80211: add support for scheduled scans
Implement new functionality for scheduled scan offload. With this feature we can scan automatically at certain intervals. The idea is that the hardware can perform scan automatically and filter on desired results without waking up the host unnecessarily. Add NL80211_CMD_START_SCHED_SCAN and NL80211_CMD_STOP_SCHED_SCAN commands to the nl80211 interface. When results are available they are reported by NL80211_CMD_SCHED_SCAN_RESULTS events. The userspace is informed when the scheduled scan has stopped with a NL80211_CMD_SCHED_SCAN_STOPPED event, which can be triggered either by the driver or by a call to NL80211_CMD_STOP_SCHED_SCAN. Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net/cfg80211.h')
-rw-r--r--include/net/cfg80211.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 4b0d035be64f..e214c85b74d2 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -824,6 +824,33 @@ struct cfg80211_scan_request {
824}; 824};
825 825
826/** 826/**
827 * struct cfg80211_sched_scan_request - scheduled scan request description
828 *
829 * @ssids: SSIDs to scan for (passed in the probe_reqs in active scans)
830 * @n_ssids: number of SSIDs
831 * @n_channels: total number of channels to scan
832 * @ie: optional information element(s) to add into Probe Request or %NULL
833 * @ie_len: length of ie in octets
834 * @wiphy: the wiphy this was for
835 * @dev: the interface
836 * @channels: channels to scan
837 */
838struct cfg80211_sched_scan_request {
839 struct cfg80211_ssid *ssids;
840 int n_ssids;
841 u32 n_channels;
842 const u8 *ie;
843 size_t ie_len;
844
845 /* internal */
846 struct wiphy *wiphy;
847 struct net_device *dev;
848
849 /* keep last */
850 struct ieee80211_channel *channels[0];
851};
852
853/**
827 * enum cfg80211_signal_type - signal type 854 * enum cfg80211_signal_type - signal type
828 * 855 *
829 * @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available 856 * @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available
@@ -1292,6 +1319,10 @@ struct cfg80211_wowlan {
1292 * @set_power_mgmt: Configure WLAN power management. A timeout value of -1 1319 * @set_power_mgmt: Configure WLAN power management. A timeout value of -1
1293 * allows the driver to adjust the dynamic ps timeout value. 1320 * allows the driver to adjust the dynamic ps timeout value.
1294 * @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold. 1321 * @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold.
1322 * @sched_scan_start: Tell the driver to start a scheduled scan.
1323 * @sched_scan_stop: Tell the driver to stop an ongoing scheduled
1324 * scan. The driver_initiated flag specifies whether the driver
1325 * itself has informed that the scan has stopped.
1295 * 1326 *
1296 * @mgmt_frame_register: Notify driver that a management frame type was 1327 * @mgmt_frame_register: Notify driver that a management frame type was
1297 * registered. Note that this callback may not sleep, and cannot run 1328 * registered. Note that this callback may not sleep, and cannot run
@@ -1478,6 +1509,12 @@ struct cfg80211_ops {
1478 int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx); 1509 int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx);
1479 void (*get_ringparam)(struct wiphy *wiphy, 1510 void (*get_ringparam)(struct wiphy *wiphy,
1480 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); 1511 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
1512
1513 int (*sched_scan_start)(struct wiphy *wiphy,
1514 struct net_device *dev,
1515 struct cfg80211_sched_scan_request *request);
1516 int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev,
1517 bool driver_initiated);
1481}; 1518};
1482 1519
1483/* 1520/*
@@ -1522,6 +1559,7 @@ struct cfg80211_ops {
1522 * @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN. 1559 * @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN.
1523 * @WIPHY_FLAG_MESH_AUTH: The device supports mesh authentication by routing 1560 * @WIPHY_FLAG_MESH_AUTH: The device supports mesh authentication by routing
1524 * auth frames to userspace. See @NL80211_MESH_SETUP_USERSPACE_AUTH. 1561 * auth frames to userspace. See @NL80211_MESH_SETUP_USERSPACE_AUTH.
1562 * @WIPHY_FLAG_SCHED_SCAN: The device supports scheduled scans.
1525 */ 1563 */
1526enum wiphy_flags { 1564enum wiphy_flags {
1527 WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0), 1565 WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0),
@@ -1534,6 +1572,7 @@ enum wiphy_flags {
1534 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), 1572 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
1535 WIPHY_FLAG_IBSS_RSN = BIT(8), 1573 WIPHY_FLAG_IBSS_RSN = BIT(8),
1536 WIPHY_FLAG_MESH_AUTH = BIT(10), 1574 WIPHY_FLAG_MESH_AUTH = BIT(10),
1575 WIPHY_FLAG_SUPPORTS_SCHED_SCAN = BIT(11),
1537}; 1576};
1538 1577
1539struct mac_address { 1578struct mac_address {
@@ -2355,6 +2394,24 @@ int cfg80211_wext_siwpmksa(struct net_device *dev,
2355void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted); 2394void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted);
2356 2395
2357/** 2396/**
2397 * cfg80211_sched_scan_results - notify that new scan results are available
2398 *
2399 * @wiphy: the wiphy which got scheduled scan results
2400 */
2401void cfg80211_sched_scan_results(struct wiphy *wiphy);
2402
2403/**
2404 * cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped
2405 *
2406 * @wiphy: the wiphy on which the scheduled scan stopped
2407 *
2408 * The driver can call this function to inform cfg80211 that the
2409 * scheduled scan had to be stopped, for whatever reason. The driver
2410 * is then called back via the sched_scan_stop operation when done.
2411 */
2412void cfg80211_sched_scan_stopped(struct wiphy *wiphy);
2413
2414/**
2358 * cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame 2415 * cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame
2359 * 2416 *
2360 * @wiphy: the wiphy reporting the BSS 2417 * @wiphy: the wiphy reporting the BSS