aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-09-08 19:43:58 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-08 19:43:58 -0400
commit5b4c314575ea6edd57c547c2123083d88d8ff4e6 (patch)
treec3149c5f8c99b36a631d9776a3bb5541d217a0bb /include
parenta7f26b7e1ee73ac9e766c430fea5af658d839954 (diff)
parent61a3d4f9d52c00b2016bc27fc66b10a194043f76 (diff)
Merge tag 'master-2014-09-08' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next
John W. Linville says: ==================== pull request: wireless-next 2014-09-08 Please pull this batch of updates intended for the 3.18 stream... For the mac80211 bits, Johannes says: "Not that much content this time. Some RCU cleanups, crypto performance improvements, and various patches all over, rather than listing them one might as well look into the git log instead." For the Bluetooth bits, Gustavo says: "The changes consists of: - Coding style fixes to HCI drivers - Corrupted ack value fix for the H5 HCI driver - A couple of Enhanced L2CAP fixes - Conversion of SMP code to use common L2CAP channel API - Page scan optimizations when using the kernel-side whitelist - Various mac802154 and and ieee802154 6lowpan cleanups - One new Atheros USB ID" For the iwlwifi bits, Emmanuel says: "We have a new big thing coming up which is called Dynamic Queue Allocation (or DQA). This is a completely new way to work with the Tx queues and it requires major refactoring. This is being done by Johannes and Avri. Besides this, Johannes disables U-APSD by default because of APs that would disable A-MPDU if the association supports U-ASPD. Luca contributed to the power area which he was cleaning up on the way while working on CSA. A few more random things here and there." For the Atheros bits, Kalle says: "For ath6kl we had two small fixes and a new SDIO device id. For ath10k the bigger changes are: * support for new firmware version 10.2 (Michal) * spectral scan support (Simon, Sven & Mathias) * export a firmware crash dump file (Ben & me) * cleaning up of pci.c (Michal) * print pci id in all messages, which causes most of the churn (Michal)" Beyond that, we have the usual collection of various updates to ath9k, b43, mwifiex, and wil6210, as well as a few other bits here and there. Please let me know if there are problems! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/bcma/bcma_regs.h5
-rw-r--r--include/linux/ieee80211.h65
-rw-r--r--include/net/bluetooth/hci_core.h8
-rw-r--r--include/net/bluetooth/l2cap.h33
-rw-r--r--include/net/cfg80211.h25
-rw-r--r--include/net/mac80211.h14
-rw-r--r--include/uapi/linux/nl80211.h16
7 files changed, 153 insertions, 13 deletions
diff --git a/include/linux/bcma/bcma_regs.h b/include/linux/bcma/bcma_regs.h
index 917dcd7965e7..e64ae7bf80a1 100644
--- a/include/linux/bcma/bcma_regs.h
+++ b/include/linux/bcma/bcma_regs.h
@@ -39,6 +39,11 @@
39#define BCMA_RESET_CTL_RESET 0x0001 39#define BCMA_RESET_CTL_RESET 0x0001
40#define BCMA_RESET_ST 0x0804 40#define BCMA_RESET_ST 0x0804
41 41
42#define BCMA_NS_ROM_IOST_BOOT_DEV_MASK 0x0003
43#define BCMA_NS_ROM_IOST_BOOT_DEV_NOR 0x0000
44#define BCMA_NS_ROM_IOST_BOOT_DEV_NAND 0x0001
45#define BCMA_NS_ROM_IOST_BOOT_DEV_ROM 0x0002
46
42/* BCMA PCI config space registers. */ 47/* BCMA PCI config space registers. */
43#define BCMA_PCI_PMCSR 0x44 48#define BCMA_PCI_PMCSR 0x44
44#define BCMA_PCI_PE 0x100 49#define BCMA_PCI_PE 0x100
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 63ab3873c5ed..8018c915ee63 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -838,6 +838,16 @@ enum ieee80211_vht_opmode_bits {
838 838
839#define WLAN_SA_QUERY_TR_ID_LEN 2 839#define WLAN_SA_QUERY_TR_ID_LEN 2
840 840
841/**
842 * struct ieee80211_tpc_report_ie
843 *
844 * This structure refers to "TPC Report element"
845 */
846struct ieee80211_tpc_report_ie {
847 u8 tx_power;
848 u8 link_margin;
849} __packed;
850
841struct ieee80211_mgmt { 851struct ieee80211_mgmt {
842 __le16 frame_control; 852 __le16 frame_control;
843 __le16 duration; 853 __le16 duration;
@@ -973,6 +983,13 @@ struct ieee80211_mgmt {
973 u8 action_code; 983 u8 action_code;
974 u8 operating_mode; 984 u8 operating_mode;
975 } __packed vht_opmode_notif; 985 } __packed vht_opmode_notif;
986 struct {
987 u8 action_code;
988 u8 dialog_token;
989 u8 tpc_elem_id;
990 u8 tpc_elem_length;
991 struct ieee80211_tpc_report_ie tpc;
992 } __packed tpc_report;
976 } u; 993 } u;
977 } __packed action; 994 } __packed action;
978 } u; 995 } u;
@@ -1865,6 +1882,7 @@ enum ieee80211_category {
1865 WLAN_CATEGORY_DLS = 2, 1882 WLAN_CATEGORY_DLS = 2,
1866 WLAN_CATEGORY_BACK = 3, 1883 WLAN_CATEGORY_BACK = 3,
1867 WLAN_CATEGORY_PUBLIC = 4, 1884 WLAN_CATEGORY_PUBLIC = 4,
1885 WLAN_CATEGORY_RADIO_MEASUREMENT = 5,
1868 WLAN_CATEGORY_HT = 7, 1886 WLAN_CATEGORY_HT = 7,
1869 WLAN_CATEGORY_SA_QUERY = 8, 1887 WLAN_CATEGORY_SA_QUERY = 8,
1870 WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, 1888 WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9,
@@ -2378,4 +2396,51 @@ static inline bool ieee80211_check_tim(const struct ieee80211_tim_ie *tim,
2378#define TU_TO_JIFFIES(x) (usecs_to_jiffies((x) * 1024)) 2396#define TU_TO_JIFFIES(x) (usecs_to_jiffies((x) * 1024))
2379#define TU_TO_EXP_TIME(x) (jiffies + TU_TO_JIFFIES(x)) 2397#define TU_TO_EXP_TIME(x) (jiffies + TU_TO_JIFFIES(x))
2380 2398
2399/**
2400 * ieee80211_action_contains_tpc - checks if the frame contains TPC element
2401 * @skb: the skb containing the frame, length will be checked
2402 *
2403 * This function checks if it's either TPC report action frame or Link
2404 * Measurement report action frame as defined in IEEE Std. 802.11-2012 8.5.2.5
2405 * and 8.5.7.5 accordingly.
2406 */
2407static inline bool ieee80211_action_contains_tpc(struct sk_buff *skb)
2408{
2409 struct ieee80211_mgmt *mgmt = (void *)skb->data;
2410
2411 if (!ieee80211_is_action(mgmt->frame_control))
2412 return false;
2413
2414 if (skb->len < IEEE80211_MIN_ACTION_SIZE +
2415 sizeof(mgmt->u.action.u.tpc_report))
2416 return false;
2417
2418 /*
2419 * TPC report - check that:
2420 * category = 0 (Spectrum Management) or 5 (Radio Measurement)
2421 * spectrum management action = 3 (TPC/Link Measurement report)
2422 * TPC report EID = 35
2423 * TPC report element length = 2
2424 *
2425 * The spectrum management's tpc_report struct is used here both for
2426 * parsing tpc_report and radio measurement's link measurement report
2427 * frame, since the relevant part is identical in both frames.
2428 */
2429 if (mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT &&
2430 mgmt->u.action.category != WLAN_CATEGORY_RADIO_MEASUREMENT)
2431 return false;
2432
2433 /* both spectrum mgmt and link measurement have same action code */
2434 if (mgmt->u.action.u.tpc_report.action_code !=
2435 WLAN_ACTION_SPCT_TPC_RPRT)
2436 return false;
2437
2438 if (mgmt->u.action.u.tpc_report.tpc_elem_id != WLAN_EID_TPC_REPORT ||
2439 mgmt->u.action.u.tpc_report.tpc_elem_length !=
2440 sizeof(struct ieee80211_tpc_report_ie))
2441 return false;
2442
2443 return true;
2444}
2445
2381#endif /* LINUX_IEEE80211_H */ 2446#endif /* LINUX_IEEE80211_H */
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 6f884e6c731e..b0ded1333865 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -302,7 +302,7 @@ struct hci_dev {
302 __u32 req_status; 302 __u32 req_status;
303 __u32 req_result; 303 __u32 req_result;
304 304
305 struct crypto_blkcipher *tfm_aes; 305 void *smp_data;
306 306
307 struct discovery_state discovery; 307 struct discovery_state discovery;
308 struct hci_conn_hash conn_hash; 308 struct hci_conn_hash conn_hash;
@@ -970,6 +970,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
970#define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE)) 970#define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE))
971#define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR)) 971#define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
972 972
973#define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
974 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
975
973/* ----- HCI protocols ----- */ 976/* ----- HCI protocols ----- */
974#define HCI_PROTO_DEFER 0x01 977#define HCI_PROTO_DEFER 0x01
975 978
@@ -1258,6 +1261,8 @@ bool hci_req_pending(struct hci_dev *hdev);
1258void hci_req_add_le_scan_disable(struct hci_request *req); 1261void hci_req_add_le_scan_disable(struct hci_request *req);
1259void hci_req_add_le_passive_scan(struct hci_request *req); 1262void hci_req_add_le_passive_scan(struct hci_request *req);
1260 1263
1264void hci_update_page_scan(struct hci_dev *hdev, struct hci_request *req);
1265
1261struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen, 1266struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1262 const void *param, u32 timeout); 1267 const void *param, u32 timeout);
1263struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen, 1268struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
@@ -1353,6 +1358,7 @@ void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1353void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, 1358void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1354 u8 addr_type, s8 rssi, u8 *name, u8 name_len); 1359 u8 addr_type, s8 rssi, u8 *name, u8 name_len);
1355void mgmt_discovering(struct hci_dev *hdev, u8 discovering); 1360void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1361bool mgmt_powering_down(struct hci_dev *hdev);
1356void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent); 1362void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1357void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk); 1363void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk);
1358void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk, 1364void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 8df15ad0d43f..cedda399f9c0 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -625,6 +625,9 @@ struct l2cap_conn {
625 625
626 struct delayed_work info_timer; 626 struct delayed_work info_timer;
627 627
628 int disconn_err;
629 struct work_struct disconn_work;
630
628 struct sk_buff *rx_skb; 631 struct sk_buff *rx_skb;
629 __u32 rx_len; 632 __u32 rx_len;
630 __u8 tx_ident; 633 __u8 tx_ident;
@@ -635,8 +638,7 @@ struct l2cap_conn {
635 638
636 __u8 disc_reason; 639 __u8 disc_reason;
637 640
638 struct delayed_work security_timer; 641 struct l2cap_chan *smp;
639 struct smp_chan *smp_chan;
640 642
641 struct list_head chan_l; 643 struct list_head chan_l;
642 struct mutex chan_lock; 644 struct mutex chan_lock;
@@ -708,6 +710,7 @@ enum {
708 FLAG_EFS_ENABLE, 710 FLAG_EFS_ENABLE,
709 FLAG_DEFER_SETUP, 711 FLAG_DEFER_SETUP,
710 FLAG_LE_CONN_REQ_SENT, 712 FLAG_LE_CONN_REQ_SENT,
713 FLAG_PENDING_SECURITY,
711}; 714};
712 715
713enum { 716enum {
@@ -837,18 +840,43 @@ static inline struct l2cap_chan *l2cap_chan_no_new_connection(struct l2cap_chan
837 return NULL; 840 return NULL;
838} 841}
839 842
843static inline int l2cap_chan_no_recv(struct l2cap_chan *chan, struct sk_buff *skb)
844{
845 return -ENOSYS;
846}
847
848static inline struct sk_buff *l2cap_chan_no_alloc_skb(struct l2cap_chan *chan,
849 unsigned long hdr_len,
850 unsigned long len, int nb)
851{
852 return ERR_PTR(-ENOSYS);
853}
854
840static inline void l2cap_chan_no_teardown(struct l2cap_chan *chan, int err) 855static inline void l2cap_chan_no_teardown(struct l2cap_chan *chan, int err)
841{ 856{
842} 857}
843 858
859static inline void l2cap_chan_no_close(struct l2cap_chan *chan)
860{
861}
862
844static inline void l2cap_chan_no_ready(struct l2cap_chan *chan) 863static inline void l2cap_chan_no_ready(struct l2cap_chan *chan)
845{ 864{
846} 865}
847 866
867static inline void l2cap_chan_no_state_change(struct l2cap_chan *chan,
868 int state, int err)
869{
870}
871
848static inline void l2cap_chan_no_defer(struct l2cap_chan *chan) 872static inline void l2cap_chan_no_defer(struct l2cap_chan *chan)
849{ 873{
850} 874}
851 875
876static inline void l2cap_chan_no_suspend(struct l2cap_chan *chan)
877{
878}
879
852static inline void l2cap_chan_no_resume(struct l2cap_chan *chan) 880static inline void l2cap_chan_no_resume(struct l2cap_chan *chan)
853{ 881{
854} 882}
@@ -918,6 +946,7 @@ void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
918 u8 status); 946 u8 status);
919void __l2cap_physical_cfm(struct l2cap_chan *chan, int result); 947void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
920 948
949void l2cap_conn_shutdown(struct l2cap_conn *conn, int err);
921void l2cap_conn_get(struct l2cap_conn *conn); 950void l2cap_conn_get(struct l2cap_conn *conn);
922void l2cap_conn_put(struct l2cap_conn *conn); 951void l2cap_conn_put(struct l2cap_conn *conn);
923 952
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 0a080c4de275..ab21299c8f4d 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1503,12 +1503,14 @@ enum cfg80211_signal_type {
1503 * @tsf: TSF contained in the frame that carried these IEs 1503 * @tsf: TSF contained in the frame that carried these IEs
1504 * @rcu_head: internal use, for freeing 1504 * @rcu_head: internal use, for freeing
1505 * @len: length of the IEs 1505 * @len: length of the IEs
1506 * @from_beacon: these IEs are known to come from a beacon
1506 * @data: IE data 1507 * @data: IE data
1507 */ 1508 */
1508struct cfg80211_bss_ies { 1509struct cfg80211_bss_ies {
1509 u64 tsf; 1510 u64 tsf;
1510 struct rcu_head rcu_head; 1511 struct rcu_head rcu_head;
1511 int len; 1512 int len;
1513 bool from_beacon;
1512 u8 data[]; 1514 u8 data[];
1513}; 1515};
1514 1516
@@ -3765,11 +3767,25 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
3765} 3767}
3766 3768
3767/** 3769/**
3768 * cfg80211_inform_bss - inform cfg80211 of a new BSS 3770 * enum cfg80211_bss_frame_type - frame type that the BSS data came from
3771 * @CFG80211_BSS_FTYPE_UNKNOWN: driver doesn't know whether the data is
3772 * from a beacon or probe response
3773 * @CFG80211_BSS_FTYPE_BEACON: data comes from a beacon
3774 * @CFG80211_BSS_FTYPE_PRESP: data comes from a probe response
3775 */
3776enum cfg80211_bss_frame_type {
3777 CFG80211_BSS_FTYPE_UNKNOWN,
3778 CFG80211_BSS_FTYPE_BEACON,
3779 CFG80211_BSS_FTYPE_PRESP,
3780};
3781
3782/**
3783 * cfg80211_inform_bss_width - inform cfg80211 of a new BSS
3769 * 3784 *
3770 * @wiphy: the wiphy reporting the BSS 3785 * @wiphy: the wiphy reporting the BSS
3771 * @rx_channel: The channel the frame was received on 3786 * @rx_channel: The channel the frame was received on
3772 * @scan_width: width of the control channel 3787 * @scan_width: width of the control channel
3788 * @ftype: frame type (if known)
3773 * @bssid: the BSSID of the BSS 3789 * @bssid: the BSSID of the BSS
3774 * @tsf: the TSF sent by the peer in the beacon/probe response (or 0) 3790 * @tsf: the TSF sent by the peer in the beacon/probe response (or 0)
3775 * @capability: the capability field sent by the peer 3791 * @capability: the capability field sent by the peer
@@ -3789,6 +3805,7 @@ struct cfg80211_bss * __must_check
3789cfg80211_inform_bss_width(struct wiphy *wiphy, 3805cfg80211_inform_bss_width(struct wiphy *wiphy,
3790 struct ieee80211_channel *rx_channel, 3806 struct ieee80211_channel *rx_channel,
3791 enum nl80211_bss_scan_width scan_width, 3807 enum nl80211_bss_scan_width scan_width,
3808 enum cfg80211_bss_frame_type ftype,
3792 const u8 *bssid, u64 tsf, u16 capability, 3809 const u8 *bssid, u64 tsf, u16 capability,
3793 u16 beacon_interval, const u8 *ie, size_t ielen, 3810 u16 beacon_interval, const u8 *ie, size_t ielen,
3794 s32 signal, gfp_t gfp); 3811 s32 signal, gfp_t gfp);
@@ -3796,12 +3813,13 @@ cfg80211_inform_bss_width(struct wiphy *wiphy,
3796static inline struct cfg80211_bss * __must_check 3813static inline struct cfg80211_bss * __must_check
3797cfg80211_inform_bss(struct wiphy *wiphy, 3814cfg80211_inform_bss(struct wiphy *wiphy,
3798 struct ieee80211_channel *rx_channel, 3815 struct ieee80211_channel *rx_channel,
3816 enum cfg80211_bss_frame_type ftype,
3799 const u8 *bssid, u64 tsf, u16 capability, 3817 const u8 *bssid, u64 tsf, u16 capability,
3800 u16 beacon_interval, const u8 *ie, size_t ielen, 3818 u16 beacon_interval, const u8 *ie, size_t ielen,
3801 s32 signal, gfp_t gfp) 3819 s32 signal, gfp_t gfp)
3802{ 3820{
3803 return cfg80211_inform_bss_width(wiphy, rx_channel, 3821 return cfg80211_inform_bss_width(wiphy, rx_channel,
3804 NL80211_BSS_CHAN_WIDTH_20, 3822 NL80211_BSS_CHAN_WIDTH_20, ftype,
3805 bssid, tsf, capability, 3823 bssid, tsf, capability,
3806 beacon_interval, ie, ielen, signal, 3824 beacon_interval, ie, ielen, signal,
3807 gfp); 3825 gfp);
@@ -4412,7 +4430,6 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
4412 * @buf: Management frame (header + body) 4430 * @buf: Management frame (header + body)
4413 * @len: length of the frame data 4431 * @len: length of the frame data
4414 * @flags: flags, as defined in enum nl80211_rxmgmt_flags 4432 * @flags: flags, as defined in enum nl80211_rxmgmt_flags
4415 * @gfp: context flags
4416 * 4433 *
4417 * This function is called whenever an Action frame is received for a station 4434 * This function is called whenever an Action frame is received for a station
4418 * mode interface, but is not processed in kernel. 4435 * mode interface, but is not processed in kernel.
@@ -4423,7 +4440,7 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
4423 * driver is responsible for rejecting the frame. 4440 * driver is responsible for rejecting the frame.
4424 */ 4441 */
4425bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm, 4442bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
4426 const u8 *buf, size_t len, u32 flags, gfp_t gfp); 4443 const u8 *buf, size_t len, u32 flags);
4427 4444
4428/** 4445/**
4429 * cfg80211_mgmt_tx_status - notification of TX status for management frame 4446 * cfg80211_mgmt_tx_status - notification of TX status for management frame
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index dae2e24616e1..c9b2bec8db47 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1226,7 +1226,8 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
1226 * 1226 *
1227 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the 1227 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the
1228 * driver to indicate that it requires IV generation for this 1228 * driver to indicate that it requires IV generation for this
1229 * particular key. 1229 * particular key. Setting this flag does not necessarily mean that SKBs
1230 * will have sufficient tailroom for ICV or MIC.
1230 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by 1231 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by
1231 * the driver for a TKIP key if it requires Michael MIC 1232 * the driver for a TKIP key if it requires Michael MIC
1232 * generation in software. 1233 * generation in software.
@@ -1238,7 +1239,9 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
1238 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver 1239 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver
1239 * if space should be prepared for the IV, but the IV 1240 * if space should be prepared for the IV, but the IV
1240 * itself should not be generated. Do not set together with 1241 * itself should not be generated. Do not set together with
1241 * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. 1242 * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. Setting this flag does
1243 * not necessarily mean that SKBs will have sufficient tailroom for ICV or
1244 * MIC.
1242 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received 1245 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received
1243 * management frames. The flag can help drivers that have a hardware 1246 * management frames. The flag can help drivers that have a hardware
1244 * crypto implementation that doesn't deal with management frames 1247 * crypto implementation that doesn't deal with management frames
@@ -1405,7 +1408,7 @@ struct ieee80211_sta_rates {
1405 * @supp_rates: Bitmap of supported rates (per band) 1408 * @supp_rates: Bitmap of supported rates (per band)
1406 * @ht_cap: HT capabilities of this STA; restricted to our own capabilities 1409 * @ht_cap: HT capabilities of this STA; restricted to our own capabilities
1407 * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities 1410 * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities
1408 * @wme: indicates whether the STA supports WME. Only valid during AP-mode. 1411 * @wme: indicates whether the STA supports QoS/WME.
1409 * @drv_priv: data area for driver use, will always be aligned to 1412 * @drv_priv: data area for driver use, will always be aligned to
1410 * sizeof(void *), size is determined in hw information. 1413 * sizeof(void *), size is determined in hw information.
1411 * @uapsd_queues: bitmap of queues configured for uapsd. Only valid 1414 * @uapsd_queues: bitmap of queues configured for uapsd. Only valid
@@ -1606,6 +1609,9 @@ struct ieee80211_tx_control {
1606 * is not enabled the default action is to disconnect when getting the 1609 * is not enabled the default action is to disconnect when getting the
1607 * CSA frame. 1610 * CSA frame.
1608 * 1611 *
1612 * @IEEE80211_HW_SUPPORTS_CLONED_SKBS: The driver will never modify the payload
1613 * or tailroom of TX skbs without copying them first.
1614 *
1609 * @IEEE80211_SINGLE_HW_SCAN_ON_ALL_BANDS: The HW supports scanning on all bands 1615 * @IEEE80211_SINGLE_HW_SCAN_ON_ALL_BANDS: The HW supports scanning on all bands
1610 * in one command, mac80211 doesn't have to run separate scans per band. 1616 * in one command, mac80211 doesn't have to run separate scans per band.
1611 */ 1617 */
@@ -1639,7 +1645,7 @@ enum ieee80211_hw_flags {
1639 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26, 1645 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26,
1640 IEEE80211_HW_SUPPORTS_HT_CCK_RATES = 1<<27, 1646 IEEE80211_HW_SUPPORTS_HT_CCK_RATES = 1<<27,
1641 IEEE80211_HW_CHANCTX_STA_CSA = 1<<28, 1647 IEEE80211_HW_CHANCTX_STA_CSA = 1<<28,
1642 /* bit 29 unused */ 1648 IEEE80211_HW_SUPPORTS_CLONED_SKBS = 1<<29,
1643 IEEE80211_SINGLE_HW_SCAN_ON_ALL_BANDS = 1<<30, 1649 IEEE80211_SINGLE_HW_SCAN_ON_ALL_BANDS = 1<<30,
1644}; 1650};
1645 1651
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index f1db15b9c041..d097568da690 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3055,14 +3055,20 @@ enum nl80211_bss_scan_width {
3055 * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets) 3055 * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets)
3056 * @NL80211_BSS_FREQUENCY: frequency in MHz (u32) 3056 * @NL80211_BSS_FREQUENCY: frequency in MHz (u32)
3057 * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64) 3057 * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64)
3058 * (if @NL80211_BSS_PRESP_DATA is present then this is known to be
3059 * from a probe response, otherwise it may be from the same beacon
3060 * that the NL80211_BSS_BEACON_TSF will be from)
3058 * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16) 3061 * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16)
3059 * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16) 3062 * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16)
3060 * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the 3063 * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the
3061 * raw information elements from the probe response/beacon (bin); 3064 * raw information elements from the probe response/beacon (bin);
3062 * if the %NL80211_BSS_BEACON_IES attribute is present, the IEs here are 3065 * if the %NL80211_BSS_BEACON_IES attribute is present and the data is
3063 * from a Probe Response frame; otherwise they are from a Beacon frame. 3066 * different then the IEs here are from a Probe Response frame; otherwise
3067 * they are from a Beacon frame.
3064 * However, if the driver does not indicate the source of the IEs, these 3068 * However, if the driver does not indicate the source of the IEs, these
3065 * IEs may be from either frame subtype. 3069 * IEs may be from either frame subtype.
3070 * If present, the @NL80211_BSS_PRESP_DATA attribute indicates that the
3071 * data here is known to be from a probe response, without any heuristics.
3066 * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon 3072 * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon
3067 * in mBm (100 * dBm) (s32) 3073 * in mBm (100 * dBm) (s32)
3068 * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon 3074 * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon
@@ -3074,6 +3080,10 @@ enum nl80211_bss_scan_width {
3074 * yet been received 3080 * yet been received
3075 * @NL80211_BSS_CHAN_WIDTH: channel width of the control channel 3081 * @NL80211_BSS_CHAN_WIDTH: channel width of the control channel
3076 * (u32, enum nl80211_bss_scan_width) 3082 * (u32, enum nl80211_bss_scan_width)
3083 * @NL80211_BSS_BEACON_TSF: TSF of the last received beacon (u64)
3084 * (not present if no beacon frame has been received yet)
3085 * @NL80211_BSS_PRESP_DATA: the data in @NL80211_BSS_INFORMATION_ELEMENTS and
3086 * @NL80211_BSS_TSF is known to be from a probe response (flag attribute)
3077 * @__NL80211_BSS_AFTER_LAST: internal 3087 * @__NL80211_BSS_AFTER_LAST: internal
3078 * @NL80211_BSS_MAX: highest BSS attribute 3088 * @NL80211_BSS_MAX: highest BSS attribute
3079 */ 3089 */
@@ -3091,6 +3101,8 @@ enum nl80211_bss {
3091 NL80211_BSS_SEEN_MS_AGO, 3101 NL80211_BSS_SEEN_MS_AGO,
3092 NL80211_BSS_BEACON_IES, 3102 NL80211_BSS_BEACON_IES,
3093 NL80211_BSS_CHAN_WIDTH, 3103 NL80211_BSS_CHAN_WIDTH,
3104 NL80211_BSS_BEACON_TSF,
3105 NL80211_BSS_PRESP_DATA,
3094 3106
3095 /* keep last */ 3107 /* keep last */
3096 __NL80211_BSS_AFTER_LAST, 3108 __NL80211_BSS_AFTER_LAST,