get_maintainer: quiet noisy implicit -f vcs_file_exists checking
[cascardo/linux.git] / include / net / cfg80211.h
index 6392167..9c23f4d 100644 (file)
@@ -330,6 +330,9 @@ struct ieee80211_supported_band {
  * in a separate chapter.
  */
 
+#define VHT_MUMIMO_GROUPS_DATA_LEN (WLAN_MEMBERSHIP_LEN +\
+                                   WLAN_USER_POSITION_LEN)
+
 /**
  * struct vif_params - describes virtual interface parameters
  * @use_4addr: use 4-address frames
@@ -339,10 +342,13 @@ struct ieee80211_supported_band {
  *     This feature is only fully supported by drivers that enable the
  *     %NL80211_FEATURE_MAC_ON_CREATE flag.  Others may support creating
  **    only p2p devices with specified MAC.
+ * @vht_mumimo_groups: MU-MIMO groupID. used for monitoring only
+ *      packets belonging to that MU-MIMO groupID.
  */
 struct vif_params {
-       int use_4addr;
-       u8 macaddr[ETH_ALEN];
+       int use_4addr;
+       u8 macaddr[ETH_ALEN];
+       u8 vht_mumimo_groups[VHT_MUMIMO_GROUPS_DATA_LEN];
 };
 
 /**
@@ -774,6 +780,7 @@ enum station_parameters_apply_mask {
  *     (bitmask of BIT(NL80211_STA_FLAG_...))
  * @listen_interval: listen interval or -1 for no change
  * @aid: AID or zero for no change
+ * @peer_aid: mesh peer AID or zero for no change
  * @plink_action: plink action to take
  * @plink_state: set the peer link state for a station
  * @ht_capa: HT capabilities of station
@@ -805,6 +812,7 @@ struct station_parameters {
        u32 sta_modify_mask;
        int listen_interval;
        u16 aid;
+       u16 peer_aid;
        u8 supported_rates_len;
        u8 plink_action;
        u8 plink_state;
@@ -1417,6 +1425,21 @@ struct cfg80211_ssid {
        u8 ssid_len;
 };
 
+/**
+ * struct cfg80211_scan_info - information about completed scan
+ * @scan_start_tsf: scan start time in terms of the TSF of the BSS that the
+ *     wireless device that requested the scan is connected to. If this
+ *     information is not available, this field is left zero.
+ * @tsf_bssid: the BSSID according to which %scan_start_tsf is set.
+ * @aborted: set to true if the scan was aborted for any reason,
+ *     userspace will be notified of that
+ */
+struct cfg80211_scan_info {
+       u64 scan_start_tsf;
+       u8 tsf_bssid[ETH_ALEN] __aligned(2);
+       bool aborted;
+};
+
 /**
  * struct cfg80211_scan_request - scan request description
  *
@@ -1427,12 +1450,17 @@ struct cfg80211_ssid {
  * @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
+ * @duration: how long to listen on each channel, in TUs. If
+ *     %duration_mandatory is not set, this is the maximum dwell time and
+ *     the actual dwell time may be shorter.
+ * @duration_mandatory: if set, the scan duration must be as specified by the
+ *     %duration field.
  * @flags: bit field of flags controlling operation
  * @rates: bitmap of rates to advertise for each band
  * @wiphy: the wiphy this was for
  * @scan_start: time (in jiffies) when the scan started
  * @wdev: the wireless device to scan for
- * @aborted: (internal) scan request was notified as aborted
+ * @info: (internal) information about completed scan
  * @notified: (internal) scan request was notified as done or aborted
  * @no_cck: used to send probe requests at non CCK rate in 2GHz band
  * @mac_addr: MAC address used with randomisation
@@ -1448,6 +1476,8 @@ struct cfg80211_scan_request {
        enum nl80211_bss_scan_width scan_width;
        const u8 *ie;
        size_t ie_len;
+       u16 duration;
+       bool duration_mandatory;
        u32 flags;
 
        u32 rates[NUM_NL80211_BANDS];
@@ -1461,7 +1491,8 @@ struct cfg80211_scan_request {
        /* internal */
        struct wiphy *wiphy;
        unsigned long scan_start;
-       bool aborted, notified;
+       struct cfg80211_scan_info info;
+       bool notified;
        bool no_cck;
 
        /* keep last */
@@ -1594,12 +1625,19 @@ enum cfg80211_signal_type {
  *     buffered on the device) and be accurate to about 10ms.
  *     If the frame isn't buffered, just passing the return value of
  *     ktime_get_boot_ns() is likely appropriate.
+ * @parent_tsf: the time at the start of reception of the first octet of the
+ *     timestamp field of the frame. The time is the TSF of the BSS specified
+ *     by %parent_bssid.
+ * @parent_bssid: the BSS according to which %parent_tsf is set. This is set to
+ *     the BSS that requested the scan in which the beacon/probe was received.
  */
 struct cfg80211_inform_bss {
        struct ieee80211_channel *chan;
        enum nl80211_bss_scan_width scan_width;
        s32 signal;
        u64 boottime_ns;
+       u64 parent_tsf;
+       u8 parent_bssid[ETH_ALEN] __aligned(2);
 };
 
 /**
@@ -2367,19 +2405,23 @@ struct cfg80211_qos_map {
  *     (invoked with the wireless_dev mutex held)
  *
  * @connect: Connect to the ESS with the specified parameters. When connected,
- *     call cfg80211_connect_result() with status code %WLAN_STATUS_SUCCESS.
- *     If the connection fails for some reason, call cfg80211_connect_result()
- *     with the status from the AP. The driver is allowed to roam to other
- *     BSSes within the ESS when the other BSS matches the connect parameters.
- *     When such roaming is initiated by the driver, the driver is expected to
- *     verify that the target matches the configured security parameters and
- *     to use Reassociation Request frame instead of Association Request frame.
- *     The connect function can also be used to request the driver to perform
- *     a specific roam when connected to an ESS. In that case, the prev_bssid
+ *     call cfg80211_connect_result()/cfg80211_connect_bss() with status code
+ *     %WLAN_STATUS_SUCCESS. If the connection fails for some reason, call
+ *     cfg80211_connect_result()/cfg80211_connect_bss() with the status code
+ *     from the AP or cfg80211_connect_timeout() if no frame with status code
+ *     was received.
+ *     The driver is allowed to roam to other BSSes within the ESS when the
+ *     other BSS matches the connect parameters. When such roaming is initiated
+ *     by the driver, the driver is expected to verify that the target matches
+ *     the configured security parameters and to use Reassociation Request
+ *     frame instead of Association Request frame.
+ *     The connect function can also be used to request the driver to perform a
+ *     specific roam when connected to an ESS. In that case, the prev_bssid
  *     parameter is set to the BSSID of the currently associated BSS as an
- *     indication of requesting reassociation. In both the driver-initiated and
- *     new connect() call initiated roaming cases, the result of roaming is
- *     indicated with a call to cfg80211_roamed() or cfg80211_roamed_bss().
+ *     indication of requesting reassociation.
+ *     In both the driver-initiated and new connect() call initiated roaming
+ *     cases, the result of roaming is indicated with a call to
+ *     cfg80211_roamed() or cfg80211_roamed_bss().
  *     (invoked with the wireless_dev mutex held)
  * @disconnect: Disconnect from the BSS/ESS.
  *     (invoked with the wireless_dev mutex held)
@@ -3079,6 +3121,24 @@ struct wiphy_vendor_command {
                      unsigned long *storage);
 };
 
+/**
+ * struct wiphy_iftype_ext_capab - extended capabilities per interface type
+ * @iftype: interface type
+ * @extended_capabilities: extended capabilities supported by the driver,
+ *     additional capabilities might be supported by userspace; these are the
+ *     802.11 extended capabilities ("Extended Capabilities element") and are
+ *     in the same format as in the information element. See IEEE Std
+ *     802.11-2012 8.4.2.29 for the defined fields.
+ * @extended_capabilities_mask: mask of the valid values
+ * @extended_capabilities_len: length of the extended capabilities
+ */
+struct wiphy_iftype_ext_capab {
+       enum nl80211_iftype iftype;
+       const u8 *extended_capabilities;
+       const u8 *extended_capabilities_mask;
+       u8 extended_capabilities_len;
+};
+
 /**
  * struct wiphy - wireless hardware description
  * @reg_notifier: the driver's regulatory notification callback,
@@ -3199,9 +3259,14 @@ struct wiphy_vendor_command {
  *     additional capabilities might be supported by userspace; these are
  *     the 802.11 extended capabilities ("Extended Capabilities element")
  *     and are in the same format as in the information element. See
- *     802.11-2012 8.4.2.29 for the defined fields.
+ *     802.11-2012 8.4.2.29 for the defined fields. These are the default
+ *     extended capabilities to be used if the capabilities are not specified
+ *     for a specific interface type in iftype_ext_capab.
  * @extended_capabilities_mask: mask of the valid values
  * @extended_capabilities_len: length of the extended capabilities
+ * @iftype_ext_capab: array of extended capabilities per interface type
+ * @num_iftype_ext_capab: number of interface types for which extended
+ *     capabilities are specified separately.
  * @coalesce: packet coalescing support information
  *
  * @vendor_commands: array of vendor commands supported by the hardware
@@ -3301,6 +3366,9 @@ struct wiphy {
        const u8 *extended_capabilities, *extended_capabilities_mask;
        u8 extended_capabilities_len;
 
+       const struct wiphy_iftype_ext_capab *iftype_ext_capab;
+       unsigned int num_iftype_ext_capab;
+
        /* If multiple wiphys are registered and you're handed e.g.
         * a regular netdev with assigned ieee80211_ptr, you won't
         * know whether it points to a wiphy your driver has registered
@@ -4031,10 +4099,10 @@ const char *reg_initiator_name(enum nl80211_reg_initiator initiator);
  * cfg80211_scan_done - notify that scan finished
  *
  * @request: the corresponding scan request
- * @aborted: set to true if the scan was aborted for any reason,
- *     userspace will be notified of that
+ * @info: information about the completed scan
  */
-void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted);
+void cfg80211_scan_done(struct cfg80211_scan_request *request,
+                       struct cfg80211_scan_info *info);
 
 /**
  * cfg80211_sched_scan_results - notify that new scan results are available
@@ -4680,7 +4748,7 @@ static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
 void cfg80211_connect_bss(struct net_device *dev, const u8 *bssid,
                          struct cfg80211_bss *bss, const u8 *req_ie,
                          size_t req_ie_len, const u8 *resp_ie,
-                         size_t resp_ie_len, u16 status, gfp_t gfp);
+                         size_t resp_ie_len, int status, gfp_t gfp);
 
 /**
  * cfg80211_connect_result - notify cfg80211 of connection result
@@ -4709,6 +4777,29 @@ cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
                             resp_ie_len, status, gfp);
 }
 
+/**
+ * cfg80211_connect_timeout - notify cfg80211 of connection timeout
+ *
+ * @dev: network device
+ * @bssid: the BSSID of the AP
+ * @req_ie: association request IEs (maybe be %NULL)
+ * @req_ie_len: association request IEs length
+ * @gfp: allocation flags
+ *
+ * It should be called by the underlying driver whenever connect() has failed
+ * in a sequence where no explicit authentication/association rejection was
+ * received from the AP. This could happen, e.g., due to not being able to send
+ * out the Authentication or Association Request frame or timing out while
+ * waiting for the response.
+ */
+static inline void
+cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid,
+                        const u8 *req_ie, size_t req_ie_len, gfp_t gfp)
+{
+       cfg80211_connect_bss(dev, bssid, NULL, req_ie, req_ie_len, NULL, 0, -1,
+                            gfp);
+}
+
 /**
  * cfg80211_roamed - notify cfg80211 of roaming
  *