Merge tag 'docs-4.9-2' of git://git.lwn.net/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 14 Oct 2016 21:11:22 +0000 (14:11 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 14 Oct 2016 21:11:22 +0000 (14:11 -0700)
Pull one more documentation update from Jonathan Corbet:
 "A single commit converting the mac80211 DocBook template over to
  Sphinx.  Only 32 more to go..."

* tag 'docs-4.9-2' of git://git.lwn.net/linux:
  docs-rst: sphinxify 802.11 documentation

1  2 
include/net/cfg80211.h

diff --combined include/net/cfg80211.h
@@@ -5,7 -5,7 +5,7 @@@
   *
   * Copyright 2006-2010        Johannes Berg <johannes@sipsolutions.net>
   * Copyright 2013-2014 Intel Mobile Communications GmbH
 - * Copyright 2015     Intel Deutschland GmbH
 + * Copyright 2015-2016        Intel Deutschland GmbH
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
@@@ -593,8 -593,6 +593,8 @@@ struct survey_info 
        s8 noise;
  };
  
 +#define CFG80211_MAX_WEP_KEYS 4
 +
  /**
   * struct cfg80211_crypto_settings - Crypto settings
   * @wpa_versions: indicates which, if any, WPA versions are enabled
   *    allowed through even on unauthorized ports
   * @control_port_no_encrypt: TRUE to prevent encryption of control port
   *    protocol frames.
 + * @wep_keys: static WEP keys, if not NULL points to an array of
 + *    CFG80211_MAX_WEP_KEYS WEP keys
 + * @wep_tx_key: key index (0..3) of the default TX static WEP key
   */
  struct cfg80211_crypto_settings {
        u32 wpa_versions;
        bool control_port;
        __be16 control_port_ethertype;
        bool control_port_no_encrypt;
 +      struct key_params *wep_keys;
 +      int wep_tx_key;
  };
  
  /**
@@@ -683,18 -676,6 +683,18 @@@ struct cfg80211_acl_data 
        struct mac_address mac_addrs[];
  };
  
 +/*
 + * cfg80211_bitrate_mask - masks for bitrate control
 + */
 +struct cfg80211_bitrate_mask {
 +      struct {
 +              u32 legacy;
 +              u8 ht_mcs[IEEE80211_HT_MCS_MASK_LEN];
 +              u16 vht_mcs[NL80211_VHT_NSS_MAX];
 +              enum nl80211_txrate_gi gi;
 +      } control[NUM_NL80211_BANDS];
 +};
 +
  /**
   * struct cfg80211_ap_settings - AP configuration
   *
   *    MAC address based access control
   * @pbss: If set, start as a PCP instead of AP. Relevant for DMG
   *    networks.
 + * @beacon_rate: bitrate to be used for beacons
   */
  struct cfg80211_ap_settings {
        struct cfg80211_chan_def chandef;
        bool p2p_opp_ps;
        const struct cfg80211_acl_data *acl;
        bool pbss;
 +      struct cfg80211_bitrate_mask beacon_rate;
  };
  
  /**
@@@ -796,9 -775,9 +796,9 @@@ enum station_parameters_apply_mask 
   *    (or NULL for no change)
   * @supported_rates_len: number of supported rates
   * @sta_flags_mask: station flags that changed
-  *    (bitmask of BIT(NL80211_STA_FLAG_...))
+  *    (bitmask of BIT(%NL80211_STA_FLAG_...))
   * @sta_flags_set: station flags values
-  *    (bitmask of BIT(NL80211_STA_FLAG_...))
+  *    (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
@@@ -1123,7 -1102,6 +1123,7 @@@ struct station_info 
        struct cfg80211_tid_stats pertid[IEEE80211_NUM_TIDS + 1];
  };
  
 +#if IS_ENABLED(CONFIG_CFG80211)
  /**
   * cfg80211_get_station - retrieve information about a given station
   * @dev: the device where the station is supposed to be connected to
   */
  int cfg80211_get_station(struct net_device *dev, const u8 *mac_addr,
                         struct station_info *sinfo);
 +#else
 +static inline int cfg80211_get_station(struct net_device *dev,
 +                                     const u8 *mac_addr,
 +                                     struct station_info *sinfo)
 +{
 +      return -ENOENT;
 +}
 +#endif
  
  /**
   * enum monitor_flags - monitor flags
@@@ -1372,7 -1342,6 +1372,7 @@@ struct mesh_config 
   * @beacon_interval: beacon interval to use
   * @mcast_rate: multicat rate for Mesh Node [6Mbps is the default for 802.11a]
   * @basic_rates: basic rates to use when creating the mesh
 + * @beacon_rate: bitrate to be used for beacons
   *
   * These parameters are fixed when the mesh is created.
   */
@@@ -1393,7 -1362,6 +1393,7 @@@ struct mesh_setup 
        u16 beacon_interval;
        int mcast_rate[NUM_NL80211_BANDS];
        u32 basic_rates;
 +      struct cfg80211_bitrate_mask beacon_rate;
  };
  
  /**
@@@ -2033,6 -2001,17 +2033,6 @@@ enum wiphy_params_flags 
        WIPHY_PARAM_DYN_ACK             = 1 << 5,
  };
  
 -/*
 - * cfg80211_bitrate_mask - masks for bitrate control
 - */
 -struct cfg80211_bitrate_mask {
 -      struct {
 -              u32 legacy;
 -              u8 ht_mcs[IEEE80211_HT_MCS_MASK_LEN];
 -              u16 vht_mcs[NL80211_VHT_NSS_MAX];
 -              enum nl80211_txrate_gi gi;
 -      } control[NUM_NL80211_BANDS];
 -};
  /**
   * struct cfg80211_pmksa - PMK Security Association
   *
@@@ -2313,98 -2292,6 +2313,98 @@@ struct cfg80211_qos_map 
        struct cfg80211_dscp_range up[8];
  };
  
 +/**
 + * struct cfg80211_nan_conf - NAN configuration
 + *
 + * This struct defines NAN configuration parameters
 + *
 + * @master_pref: master preference (1 - 255)
 + * @dual: dual band operation mode, see &enum nl80211_nan_dual_band_conf
 + */
 +struct cfg80211_nan_conf {
 +      u8 master_pref;
 +      u8 dual;
 +};
 +
 +/**
 + * enum cfg80211_nan_conf_changes - indicates changed fields in NAN
 + * configuration
 + *
 + * @CFG80211_NAN_CONF_CHANGED_PREF: master preference
 + * @CFG80211_NAN_CONF_CHANGED_DUAL: dual band operation
 + */
 +enum cfg80211_nan_conf_changes {
 +      CFG80211_NAN_CONF_CHANGED_PREF = BIT(0),
 +      CFG80211_NAN_CONF_CHANGED_DUAL = BIT(1),
 +};
 +
 +/**
 + * struct cfg80211_nan_func_filter - a NAN function Rx / Tx filter
 + *
 + * @filter: the content of the filter
 + * @len: the length of the filter
 + */
 +struct cfg80211_nan_func_filter {
 +      const u8 *filter;
 +      u8 len;
 +};
 +
 +/**
 + * struct cfg80211_nan_func - a NAN function
 + *
 + * @type: &enum nl80211_nan_function_type
 + * @service_id: the service ID of the function
 + * @publish_type: &nl80211_nan_publish_type
 + * @close_range: if true, the range should be limited. Threshold is
 + *    implementation specific.
 + * @publish_bcast: if true, the solicited publish should be broadcasted
 + * @subscribe_active: if true, the subscribe is active
 + * @followup_id: the instance ID for follow up
 + * @followup_reqid: the requestor instance ID for follow up
 + * @followup_dest: MAC address of the recipient of the follow up
 + * @ttl: time to live counter in DW.
 + * @serv_spec_info: Service Specific Info
 + * @serv_spec_info_len: Service Specific Info length
 + * @srf_include: if true, SRF is inclusive
 + * @srf_bf: Bloom Filter
 + * @srf_bf_len: Bloom Filter length
 + * @srf_bf_idx: Bloom Filter index
 + * @srf_macs: SRF MAC addresses
 + * @srf_num_macs: number of MAC addresses in SRF
 + * @rx_filters: rx filters that are matched with corresponding peer's tx_filter
 + * @tx_filters: filters that should be transmitted in the SDF.
 + * @num_rx_filters: length of &rx_filters.
 + * @num_tx_filters: length of &tx_filters.
 + * @instance_id: driver allocated id of the function.
 + * @cookie: unique NAN function identifier.
 + */
 +struct cfg80211_nan_func {
 +      enum nl80211_nan_function_type type;
 +      u8 service_id[NL80211_NAN_FUNC_SERVICE_ID_LEN];
 +      u8 publish_type;
 +      bool close_range;
 +      bool publish_bcast;
 +      bool subscribe_active;
 +      u8 followup_id;
 +      u8 followup_reqid;
 +      struct mac_address followup_dest;
 +      u32 ttl;
 +      const u8 *serv_spec_info;
 +      u8 serv_spec_info_len;
 +      bool srf_include;
 +      const u8 *srf_bf;
 +      u8 srf_bf_len;
 +      u8 srf_bf_idx;
 +      struct mac_address *srf_macs;
 +      int srf_num_macs;
 +      struct cfg80211_nan_func_filter *rx_filters;
 +      struct cfg80211_nan_func_filter *tx_filters;
 +      u8 num_tx_filters;
 +      u8 num_rx_filters;
 +      u8 instance_id;
 +      u64 cookie;
 +};
 +
  /**
   * struct cfg80211_ops - backend description for wireless configuration
   *
   *    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.
 + * @disconnect: Disconnect from the BSS/ESS. Once done, call
 + *    cfg80211_disconnected().
   *    (invoked with the wireless_dev mutex held)
   *
   * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call
   *    and returning to the base channel for communication with the AP.
   * @tdls_cancel_channel_switch: Stop channel-switching with a TDLS peer. Both
   *    peers must be on the base channel when the call completes.
 + * @start_nan: Start the NAN interface.
 + * @stop_nan: Stop the NAN interface.
 + * @add_nan_func: Add a NAN function. Returns negative value on failure.
 + *    On success @nan_func ownership is transferred to the driver and
 + *    it may access it outside of the scope of this function. The driver
 + *    should free the @nan_func when no longer needed by calling
 + *    cfg80211_free_nan_func().
 + *    On success the driver should assign an instance_id in the
 + *    provided @nan_func.
 + * @del_nan_func: Delete a NAN function.
 + * @nan_change_conf: changes NAN configuration. The changed parameters must
 + *    be specified in @changes (using &enum cfg80211_nan_conf_changes);
 + *    All other parameters must be ignored.
   */
  struct cfg80211_ops {
        int     (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
        void    (*tdls_cancel_channel_switch)(struct wiphy *wiphy,
                                              struct net_device *dev,
                                              const u8 *addr);
 +      int     (*start_nan)(struct wiphy *wiphy, struct wireless_dev *wdev,
 +                           struct cfg80211_nan_conf *conf);
 +      void    (*stop_nan)(struct wiphy *wiphy, struct wireless_dev *wdev);
 +      int     (*add_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev,
 +                              struct cfg80211_nan_func *nan_func);
 +      void    (*del_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev,
 +                             u64 cookie);
 +      int     (*nan_change_conf)(struct wiphy *wiphy,
 +                                 struct wireless_dev *wdev,
 +                                 struct cfg80211_nan_conf *conf,
 +                                 u32 changes);
  };
  
  /*
   * @WIPHY_FLAG_SUPPORTS_5_10_MHZ: Device supports 5 MHz and 10 MHz channels.
   * @WIPHY_FLAG_HAS_CHANNEL_SWITCH: Device supports channel switch in
   *    beaconing mode (AP, IBSS, Mesh, ...).
 + * @WIPHY_FLAG_HAS_STATIC_WEP: The device supports static WEP key installation
 + *    before connection.
   */
  enum wiphy_flags {
        /* use hole at 0 */
        WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL        = BIT(21),
        WIPHY_FLAG_SUPPORTS_5_10_MHZ            = BIT(22),
        WIPHY_FLAG_HAS_CHANNEL_SWITCH           = BIT(23),
 +      WIPHY_FLAG_HAS_STATIC_WEP               = BIT(24),
  };
  
  /**
@@@ -3088,47 -2947,54 +3088,54 @@@ struct ieee80211_iface_limit 
   *
   * 1. Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total:
   *
-  *  struct ieee80211_iface_limit limits1[] = {
-  *    { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
-  *    { .max = 1, .types = BIT(NL80211_IFTYPE_AP}, },
-  *  };
-  *  struct ieee80211_iface_combination combination1 = {
-  *    .limits = limits1,
-  *    .n_limits = ARRAY_SIZE(limits1),
-  *    .max_interfaces = 2,
-  *    .beacon_int_infra_match = true,
-  *  };
+  *    .. code-block:: c
+  *
+  *    struct ieee80211_iface_limit limits1[] = {
+  *            { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
+  *            { .max = 1, .types = BIT(NL80211_IFTYPE_AP}, },
+  *    };
+  *    struct ieee80211_iface_combination combination1 = {
+  *            .limits = limits1,
+  *            .n_limits = ARRAY_SIZE(limits1),
+  *            .max_interfaces = 2,
+  *            .beacon_int_infra_match = true,
+  *    };
   *
   *
   * 2. Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total:
   *
-  *  struct ieee80211_iface_limit limits2[] = {
-  *    { .max = 8, .types = BIT(NL80211_IFTYPE_AP) |
-  *                         BIT(NL80211_IFTYPE_P2P_GO), },
-  *  };
-  *  struct ieee80211_iface_combination combination2 = {
-  *    .limits = limits2,
-  *    .n_limits = ARRAY_SIZE(limits2),
-  *    .max_interfaces = 8,
-  *    .num_different_channels = 1,
-  *  };
+  *    .. code-block:: c
+  *
+  *    struct ieee80211_iface_limit limits2[] = {
+  *            { .max = 8, .types = BIT(NL80211_IFTYPE_AP) |
+  *                                 BIT(NL80211_IFTYPE_P2P_GO), },
+  *    };
+  *    struct ieee80211_iface_combination combination2 = {
+  *            .limits = limits2,
+  *            .n_limits = ARRAY_SIZE(limits2),
+  *            .max_interfaces = 8,
+  *            .num_different_channels = 1,
+  *    };
   *
   *
   * 3. Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total.
   *
-  * This allows for an infrastructure connection and three P2P connections.
-  *
-  *  struct ieee80211_iface_limit limits3[] = {
-  *    { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
-  *    { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) |
-  *                         BIT(NL80211_IFTYPE_P2P_CLIENT), },
-  *  };
-  *  struct ieee80211_iface_combination combination3 = {
-  *    .limits = limits3,
-  *    .n_limits = ARRAY_SIZE(limits3),
-  *    .max_interfaces = 4,
-  *    .num_different_channels = 2,
-  *  };
+  *    This allows for an infrastructure connection and three P2P connections.
+  *
+  *    .. code-block:: c
+  *
+  *    struct ieee80211_iface_limit limits3[] = {
+  *            { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
+  *            { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) |
+  *                                 BIT(NL80211_IFTYPE_P2P_CLIENT), },
+  *    };
+  *    struct ieee80211_iface_combination combination3 = {
+  *            .limits = limits3,
+  *            .n_limits = ARRAY_SIZE(limits3),
+  *            .max_interfaces = 4,
+  *            .num_different_channels = 2,
+  *    };
+  *
   */
  struct ieee80211_iface_combination {
        const struct ieee80211_iface_limit *limits;
@@@ -3433,8 -3299,6 +3440,8 @@@ struct wiphy_iftype_ext_capab 
   * @bss_select_support: bitmask indicating the BSS selection criteria supported
   *    by the driver in the .connect() callback. The bit position maps to the
   *    attribute indices defined in &enum nl80211_bss_select_attr.
 + *
 + * @cookie_counter: unique generic cookie counter, used to identify objects.
   */
  struct wiphy {
        /* assign these fields before you register the wiphy */
  
        u32 bss_select_support;
  
 +      u64 cookie_counter;
 +
        char priv[0] __aligned(NETDEV_ALIGN);
  };
  
@@@ -3746,7 -3608,6 +3753,7 @@@ struct cfg80211_cached_keys
   *    beacons, 0 when not valid
   * @address: The address for this device, valid only if @netdev is %NULL
   * @p2p_started: true if this is a P2P Device that has been started
 + * @nan_started: true if this is a NAN interface that has been started
   * @cac_started: true if DFS channel availability check has been started
   * @cac_start_time: timestamp (jiffies) when the dfs state was entered.
   * @cac_time_ms: CAC time in ms
@@@ -3778,7 -3639,7 +3785,7 @@@ struct wireless_dev 
  
        struct mutex mtx;
  
 -      bool use_4addr, p2p_started;
 +      bool use_4addr, p2p_started, nan_started;
  
        u8 address[ETH_ALEN] __aligned(sizeof(u16));
  
@@@ -4091,34 -3952,6 +4098,34 @@@ void ieee80211_amsdu_to_8023s(struct sk
  unsigned int cfg80211_classify8021d(struct sk_buff *skb,
                                    struct cfg80211_qos_map *qos_map);
  
 +/**
 + * cfg80211_find_ie_match - match information element and byte array in data
 + *
 + * @eid: element ID
 + * @ies: data consisting of IEs
 + * @len: length of data
 + * @match: byte array to match
 + * @match_len: number of bytes in the match array
 + * @match_offset: offset in the IE where the byte array should match.
 + *    If match_len is zero, this must also be set to zero.
 + *    Otherwise this must be set to 2 or more, because the first
 + *    byte is the element id, which is already compared to eid, and
 + *    the second byte is the IE length.
 + *
 + * Return: %NULL if the element ID could not be found or if
 + * the element is invalid (claims to be longer than the given
 + * data) or if the byte array doesn't match, or a pointer to the first
 + * byte of the requested element, that is the byte containing the
 + * element ID.
 + *
 + * Note: There are no checks on the element length other than
 + * having to fit into the given data and being large enough for the
 + * byte array to match.
 + */
 +const u8 *cfg80211_find_ie_match(u8 eid, const u8 *ies, int len,
 +                               const u8 *match, int match_len,
 +                               int match_offset);
 +
  /**
   * cfg80211_find_ie - find information element in data
   *
   * Note: There are no checks on the element length other than
   * having to fit into the given data.
   */
 -const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len);
 +static inline const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len)
 +{
 +      return cfg80211_find_ie_match(eid, ies, len, NULL, 0, 0);
 +}
  
  /**
   * cfg80211_find_vendor_ie - find vendor specific information element in data
@@@ -5686,67 -5516,6 +5693,67 @@@ wiphy_ext_feature_isset(struct wiphy *w
        return (ft_byte & BIT(ftidx % 8)) != 0;
  }
  
 +/**
 + * cfg80211_free_nan_func - free NAN function
 + * @f: NAN function that should be freed
 + *
 + * Frees all the NAN function and all it's allocated members.
 + */
 +void cfg80211_free_nan_func(struct cfg80211_nan_func *f);
 +
 +/**
 + * struct cfg80211_nan_match_params - NAN match parameters
 + * @type: the type of the function that triggered a match. If it is
 + *     %NL80211_NAN_FUNC_SUBSCRIBE it means that we replied to a subscriber.
 + *     If it is %NL80211_NAN_FUNC_PUBLISH, it means that we got a discovery
 + *     result.
 + *     If it is %NL80211_NAN_FUNC_FOLLOW_UP, we received a follow up.
 + * @inst_id: the local instance id
 + * @peer_inst_id: the instance id of the peer's function
 + * @addr: the MAC address of the peer
 + * @info_len: the length of the &info
 + * @info: the Service Specific Info from the peer (if any)
 + * @cookie: unique identifier of the corresponding function
 + */
 +struct cfg80211_nan_match_params {
 +      enum nl80211_nan_function_type type;
 +      u8 inst_id;
 +      u8 peer_inst_id;
 +      const u8 *addr;
 +      u8 info_len;
 +      const u8 *info;
 +      u64 cookie;
 +};
 +
 +/**
 + * cfg80211_nan_match - report a match for a NAN function.
 + * @wdev: the wireless device reporting the match
 + * @match: match notification parameters
 + * @gfp: allocation flags
 + *
 + * This function reports that the a NAN function had a match. This
 + * can be a subscribe that had a match or a solicited publish that
 + * was sent. It can also be a follow up that was received.
 + */
 +void cfg80211_nan_match(struct wireless_dev *wdev,
 +                      struct cfg80211_nan_match_params *match, gfp_t gfp);
 +
 +/**
 + * cfg80211_nan_func_terminated - notify about NAN function termination.
 + *
 + * @wdev: the wireless device reporting the match
 + * @inst_id: the local instance id
 + * @reason: termination reason (one of the NL80211_NAN_FUNC_TERM_REASON_*)
 + * @cookie: unique NAN function identifier
 + * @gfp: allocation flags
 + *
 + * This function reports that the a NAN function is terminated.
 + */
 +void cfg80211_nan_func_terminated(struct wireless_dev *wdev,
 +                                u8 inst_id,
 +                                enum nl80211_nan_func_term_reason reason,
 +                                u64 cookie, gfp_t gfp);
 +
  /* ethtool helper */
  void cfg80211_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info);