diff options
author | Luciano Coelho <coelho@ti.com> | 2011-05-11 10:09:35 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-05-11 15:12:26 -0400 |
commit | 807f8a8c300435d5483e8d78df9dcdbc27333166 (patch) | |
tree | 1537d40e149d7a8712fe63d17ea3b51093bf03a1 /include/net/cfg80211.h | |
parent | 6bdbdbf4a151a3a1333818cd17a7d7795e936041 (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.h | 57 |
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 | */ | ||
838 | struct 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 | */ |
1526 | enum wiphy_flags { | 1564 | enum 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 | ||
1539 | struct mac_address { | 1578 | struct mac_address { |
@@ -2355,6 +2394,24 @@ int cfg80211_wext_siwpmksa(struct net_device *dev, | |||
2355 | void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted); | 2394 | void 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 | */ | ||
2401 | void 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 | */ | ||
2412 | void 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 |