aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2013-04-24 10:54:20 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-24 10:54:20 -0400
commit6ed0e321a0aef14a894e26658108bf7e895c36a6 (patch)
treef49428d68ebcb1beb757296ea1559079210babbe /include/net
parent3dec2246c2ff11beb24ca1950f074b2bcbc85953 (diff)
parentb006ed545cbadf1ebd4683719554742d20dbcede (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'include/net')
-rw-r--r--include/net/bluetooth/bluetooth.h5
-rw-r--r--include/net/bluetooth/hci.h9
-rw-r--r--include/net/bluetooth/hci_core.h98
-rw-r--r--include/net/bluetooth/l2cap.h15
-rw-r--r--include/net/cfg80211.h38
-rw-r--r--include/net/mac80211.h127
-rw-r--r--include/net/nfc/nfc.h2
7 files changed, 235 insertions, 59 deletions
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index ed6e9552252e..6912ef9a1881 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -193,11 +193,11 @@ static inline bool bdaddr_type_is_le(__u8 type)
193#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff} }) 193#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff} })
194 194
195/* Copy, swap, convert BD Address */ 195/* Copy, swap, convert BD Address */
196static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2) 196static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
197{ 197{
198 return memcmp(ba1, ba2, sizeof(bdaddr_t)); 198 return memcmp(ba1, ba2, sizeof(bdaddr_t));
199} 199}
200static inline void bacpy(bdaddr_t *dst, bdaddr_t *src) 200static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
201{ 201{
202 memcpy(dst, src, sizeof(bdaddr_t)); 202 memcpy(dst, src, sizeof(bdaddr_t));
203} 203}
@@ -266,6 +266,7 @@ typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status);
266 266
267struct hci_req_ctrl { 267struct hci_req_ctrl {
268 bool start; 268 bool start;
269 u8 event;
269 hci_req_complete_t complete; 270 hci_req_complete_t complete;
270}; 271};
271 272
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index b3308927a0a1..e0512aaef4b8 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -984,6 +984,9 @@ struct hci_cp_le_set_adv_data {
984 984
985#define HCI_OP_LE_SET_ADV_ENABLE 0x200a 985#define HCI_OP_LE_SET_ADV_ENABLE 0x200a
986 986
987#define LE_SCAN_PASSIVE 0x00
988#define LE_SCAN_ACTIVE 0x01
989
987#define HCI_OP_LE_SET_SCAN_PARAM 0x200b 990#define HCI_OP_LE_SET_SCAN_PARAM 0x200b
988struct hci_cp_le_set_scan_param { 991struct hci_cp_le_set_scan_param {
989 __u8 type; 992 __u8 type;
@@ -993,8 +996,10 @@ struct hci_cp_le_set_scan_param {
993 __u8 filter_policy; 996 __u8 filter_policy;
994} __packed; 997} __packed;
995 998
996#define LE_SCANNING_DISABLED 0x00 999#define LE_SCAN_DISABLE 0x00
997#define LE_SCANNING_ENABLED 0x01 1000#define LE_SCAN_ENABLE 0x01
1001#define LE_SCAN_FILTER_DUP_DISABLE 0x00
1002#define LE_SCAN_FILTER_DUP_ENABLE 0x01
998 1003
999#define HCI_OP_LE_SET_SCAN_ENABLE 0x200c 1004#define HCI_OP_LE_SET_SCAN_ENABLE 0x200c
1000struct hci_cp_le_set_scan_enable { 1005struct hci_cp_le_set_scan_enable {
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 358a6983d3bb..80d718a9b31f 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -134,6 +134,8 @@ struct amp_assoc {
134 __u8 data[HCI_MAX_AMP_ASSOC_SIZE]; 134 __u8 data[HCI_MAX_AMP_ASSOC_SIZE];
135}; 135};
136 136
137#define HCI_MAX_PAGES 3
138
137#define NUM_REASSEMBLY 4 139#define NUM_REASSEMBLY 4
138struct hci_dev { 140struct hci_dev {
139 struct list_head list; 141 struct list_head list;
@@ -151,8 +153,8 @@ struct hci_dev {
151 __u8 dev_class[3]; 153 __u8 dev_class[3];
152 __u8 major_class; 154 __u8 major_class;
153 __u8 minor_class; 155 __u8 minor_class;
154 __u8 features[8]; 156 __u8 max_page;
155 __u8 host_features[8]; 157 __u8 features[HCI_MAX_PAGES][8];
156 __u8 le_features[8]; 158 __u8 le_features[8];
157 __u8 le_white_list_size; 159 __u8 le_white_list_size;
158 __u8 le_states[8]; 160 __u8 le_states[8];
@@ -244,6 +246,7 @@ struct hci_dev {
244 struct sk_buff_head raw_q; 246 struct sk_buff_head raw_q;
245 struct sk_buff_head cmd_q; 247 struct sk_buff_head cmd_q;
246 248
249 struct sk_buff *recv_evt;
247 struct sk_buff *sent_cmd; 250 struct sk_buff *sent_cmd;
248 struct sk_buff *reassembly[NUM_REASSEMBLY]; 251 struct sk_buff *reassembly[NUM_REASSEMBLY];
249 252
@@ -268,8 +271,6 @@ struct hci_dev {
268 271
269 struct hci_dev_stats stat; 272 struct hci_dev_stats stat;
270 273
271 struct sk_buff_head driver_init;
272
273 atomic_t promisc; 274 atomic_t promisc;
274 275
275 struct dentry *debugfs; 276 struct dentry *debugfs;
@@ -292,6 +293,7 @@ struct hci_dev {
292 int (*open)(struct hci_dev *hdev); 293 int (*open)(struct hci_dev *hdev);
293 int (*close)(struct hci_dev *hdev); 294 int (*close)(struct hci_dev *hdev);
294 int (*flush)(struct hci_dev *hdev); 295 int (*flush)(struct hci_dev *hdev);
296 int (*setup)(struct hci_dev *hdev);
295 int (*send)(struct sk_buff *skb); 297 int (*send)(struct sk_buff *skb);
296 void (*notify)(struct hci_dev *hdev, unsigned int evt); 298 void (*notify)(struct hci_dev *hdev, unsigned int evt);
297 int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg); 299 int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
@@ -313,7 +315,7 @@ struct hci_conn {
313 bool out; 315 bool out;
314 __u8 attempt; 316 __u8 attempt;
315 __u8 dev_class[3]; 317 __u8 dev_class[3];
316 __u8 features[8]; 318 __u8 features[HCI_MAX_PAGES][8];
317 __u16 interval; 319 __u16 interval;
318 __u16 pkt_type; 320 __u16 pkt_type;
319 __u16 link_policy; 321 __u16 link_policy;
@@ -345,7 +347,6 @@ struct hci_conn {
345 struct timer_list auto_accept_timer; 347 struct timer_list auto_accept_timer;
346 348
347 struct device dev; 349 struct device dev;
348 atomic_t devref;
349 350
350 struct hci_dev *hdev; 351 struct hci_dev *hdev;
351 void *l2cap_data; 352 void *l2cap_data;
@@ -584,7 +585,6 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
584int hci_conn_del(struct hci_conn *conn); 585int hci_conn_del(struct hci_conn *conn);
585void hci_conn_hash_flush(struct hci_dev *hdev); 586void hci_conn_hash_flush(struct hci_dev *hdev);
586void hci_conn_check_pending(struct hci_dev *hdev); 587void hci_conn_check_pending(struct hci_dev *hdev);
587void hci_conn_accept(struct hci_conn *conn, int mask);
588 588
589struct hci_chan *hci_chan_create(struct hci_conn *conn); 589struct hci_chan *hci_chan_create(struct hci_conn *conn);
590void hci_chan_del(struct hci_chan *chan); 590void hci_chan_del(struct hci_chan *chan);
@@ -601,8 +601,36 @@ int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
601 601
602void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active); 602void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
603 603
604void hci_conn_hold_device(struct hci_conn *conn); 604/*
605void hci_conn_put_device(struct hci_conn *conn); 605 * hci_conn_get() and hci_conn_put() are used to control the life-time of an
606 * "hci_conn" object. They do not guarantee that the hci_conn object is running,
607 * working or anything else. They just guarantee that the object is available
608 * and can be dereferenced. So you can use its locks, local variables and any
609 * other constant data.
610 * Before accessing runtime data, you _must_ lock the object and then check that
611 * it is still running. As soon as you release the locks, the connection might
612 * get dropped, though.
613 *
614 * On the other hand, hci_conn_hold() and hci_conn_drop() are used to control
615 * how long the underlying connection is held. So every channel that runs on the
616 * hci_conn object calls this to prevent the connection from disappearing. As
617 * long as you hold a device, you must also guarantee that you have a valid
618 * reference to the device via hci_conn_get() (or the initial reference from
619 * hci_conn_add()).
620 * The hold()/drop() ref-count is known to drop below 0 sometimes, which doesn't
621 * break because nobody cares for that. But this means, we cannot use
622 * _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
623 */
624
625static inline void hci_conn_get(struct hci_conn *conn)
626{
627 get_device(&conn->dev);
628}
629
630static inline void hci_conn_put(struct hci_conn *conn)
631{
632 put_device(&conn->dev);
633}
606 634
607static inline void hci_conn_hold(struct hci_conn *conn) 635static inline void hci_conn_hold(struct hci_conn *conn)
608{ 636{
@@ -612,7 +640,7 @@ static inline void hci_conn_hold(struct hci_conn *conn)
612 cancel_delayed_work(&conn->disc_work); 640 cancel_delayed_work(&conn->disc_work);
613} 641}
614 642
615static inline void hci_conn_put(struct hci_conn *conn) 643static inline void hci_conn_drop(struct hci_conn *conn)
616{ 644{
617 BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt)); 645 BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
618 646
@@ -760,29 +788,29 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
760#define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev)) 788#define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev))
761 789
762/* ----- LMP capabilities ----- */ 790/* ----- LMP capabilities ----- */
763#define lmp_encrypt_capable(dev) ((dev)->features[0] & LMP_ENCRYPT) 791#define lmp_encrypt_capable(dev) ((dev)->features[0][0] & LMP_ENCRYPT)
764#define lmp_rswitch_capable(dev) ((dev)->features[0] & LMP_RSWITCH) 792#define lmp_rswitch_capable(dev) ((dev)->features[0][0] & LMP_RSWITCH)
765#define lmp_hold_capable(dev) ((dev)->features[0] & LMP_HOLD) 793#define lmp_hold_capable(dev) ((dev)->features[0][0] & LMP_HOLD)
766#define lmp_sniff_capable(dev) ((dev)->features[0] & LMP_SNIFF) 794#define lmp_sniff_capable(dev) ((dev)->features[0][0] & LMP_SNIFF)
767#define lmp_park_capable(dev) ((dev)->features[1] & LMP_PARK) 795#define lmp_park_capable(dev) ((dev)->features[0][1] & LMP_PARK)
768#define lmp_inq_rssi_capable(dev) ((dev)->features[3] & LMP_RSSI_INQ) 796#define lmp_inq_rssi_capable(dev) ((dev)->features[0][3] & LMP_RSSI_INQ)
769#define lmp_esco_capable(dev) ((dev)->features[3] & LMP_ESCO) 797#define lmp_esco_capable(dev) ((dev)->features[0][3] & LMP_ESCO)
770#define lmp_bredr_capable(dev) (!((dev)->features[4] & LMP_NO_BREDR)) 798#define lmp_bredr_capable(dev) (!((dev)->features[0][4] & LMP_NO_BREDR))
771#define lmp_le_capable(dev) ((dev)->features[4] & LMP_LE) 799#define lmp_le_capable(dev) ((dev)->features[0][4] & LMP_LE)
772#define lmp_sniffsubr_capable(dev) ((dev)->features[5] & LMP_SNIFF_SUBR) 800#define lmp_sniffsubr_capable(dev) ((dev)->features[0][5] & LMP_SNIFF_SUBR)
773#define lmp_pause_enc_capable(dev) ((dev)->features[5] & LMP_PAUSE_ENC) 801#define lmp_pause_enc_capable(dev) ((dev)->features[0][5] & LMP_PAUSE_ENC)
774#define lmp_ext_inq_capable(dev) ((dev)->features[6] & LMP_EXT_INQ) 802#define lmp_ext_inq_capable(dev) ((dev)->features[0][6] & LMP_EXT_INQ)
775#define lmp_le_br_capable(dev) !!((dev)->features[6] & LMP_SIMUL_LE_BR) 803#define lmp_le_br_capable(dev) (!!((dev)->features[0][6] & LMP_SIMUL_LE_BR))
776#define lmp_ssp_capable(dev) ((dev)->features[6] & LMP_SIMPLE_PAIR) 804#define lmp_ssp_capable(dev) ((dev)->features[0][6] & LMP_SIMPLE_PAIR)
777#define lmp_no_flush_capable(dev) ((dev)->features[6] & LMP_NO_FLUSH) 805#define lmp_no_flush_capable(dev) ((dev)->features[0][6] & LMP_NO_FLUSH)
778#define lmp_lsto_capable(dev) ((dev)->features[7] & LMP_LSTO) 806#define lmp_lsto_capable(dev) ((dev)->features[0][7] & LMP_LSTO)
779#define lmp_inq_tx_pwr_capable(dev) ((dev)->features[7] & LMP_INQ_TX_PWR) 807#define lmp_inq_tx_pwr_capable(dev) ((dev)->features[0][7] & LMP_INQ_TX_PWR)
780#define lmp_ext_feat_capable(dev) ((dev)->features[7] & LMP_EXTFEATURES) 808#define lmp_ext_feat_capable(dev) ((dev)->features[0][7] & LMP_EXTFEATURES)
781 809
782/* ----- Extended LMP capabilities ----- */ 810/* ----- Extended LMP capabilities ----- */
783#define lmp_host_ssp_capable(dev) ((dev)->host_features[0] & LMP_HOST_SSP) 811#define lmp_host_ssp_capable(dev) ((dev)->features[1][0] & LMP_HOST_SSP)
784#define lmp_host_le_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE) 812#define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE))
785#define lmp_host_le_br_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE_BREDR) 813#define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
786 814
787/* returns true if at least one AMP active */ 815/* returns true if at least one AMP active */
788static inline bool hci_amp_capable(void) 816static inline bool hci_amp_capable(void)
@@ -1054,8 +1082,14 @@ struct hci_request {
1054void hci_req_init(struct hci_request *req, struct hci_dev *hdev); 1082void hci_req_init(struct hci_request *req, struct hci_dev *hdev);
1055int hci_req_run(struct hci_request *req, hci_req_complete_t complete); 1083int hci_req_run(struct hci_request *req, hci_req_complete_t complete);
1056void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param); 1084void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param);
1085void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen, void *param,
1086 u8 event);
1057void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status); 1087void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
1058void hci_req_cmd_status(struct hci_dev *hdev, u16 opcode, u8 status); 1088
1089struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1090 void *param, u32 timeout);
1091struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1092 void *param, u8 event, u32 timeout);
1059 1093
1060int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param); 1094int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param);
1061void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags); 1095void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index cdd33021f831..fb94cf13c777 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -583,6 +583,14 @@ struct l2cap_conn {
583 583
584 struct list_head chan_l; 584 struct list_head chan_l;
585 struct mutex chan_lock; 585 struct mutex chan_lock;
586 struct kref ref;
587 struct list_head users;
588};
589
590struct l2cap_user {
591 struct list_head list;
592 int (*probe) (struct l2cap_conn *conn, struct l2cap_user *user);
593 void (*remove) (struct l2cap_conn *conn, struct l2cap_user *user);
586}; 594};
587 595
588#define L2CAP_INFO_CL_MTU_REQ_SENT 0x01 596#define L2CAP_INFO_CL_MTU_REQ_SENT 0x01
@@ -786,6 +794,7 @@ extern bool disable_ertm;
786 794
787int l2cap_init_sockets(void); 795int l2cap_init_sockets(void);
788void l2cap_cleanup_sockets(void); 796void l2cap_cleanup_sockets(void);
797bool l2cap_is_socket(struct socket *sock);
789 798
790void __l2cap_connect_rsp_defer(struct l2cap_chan *chan); 799void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
791int __l2cap_wait_ack(struct sock *sk); 800int __l2cap_wait_ack(struct sock *sk);
@@ -812,4 +821,10 @@ void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
812 u8 status); 821 u8 status);
813void __l2cap_physical_cfm(struct l2cap_chan *chan, int result); 822void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
814 823
824void l2cap_conn_get(struct l2cap_conn *conn);
825void l2cap_conn_put(struct l2cap_conn *conn);
826
827int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);
828void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user);
829
815#endif /* __L2CAP_H */ 830#endif /* __L2CAP_H */
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index bdba9b619064..26b5b692c22b 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1998,6 +1998,16 @@ struct cfg80211_update_ft_ies_params {
1998 * advertise the support for MAC based ACL have to implement this callback. 1998 * advertise the support for MAC based ACL have to implement this callback.
1999 * 1999 *
2000 * @start_radar_detection: Start radar detection in the driver. 2000 * @start_radar_detection: Start radar detection in the driver.
2001 *
2002 * @update_ft_ies: Provide updated Fast BSS Transition information to the
2003 * driver. If the SME is in the driver/firmware, this information can be
2004 * used in building Authentication and Reassociation Request frames.
2005 *
2006 * @crit_proto_start: Indicates a critical protocol needs more link reliability
2007 * for a given duration (milliseconds). The protocol is provided so the
2008 * driver can take the most appropriate actions.
2009 * @crit_proto_stop: Indicates critical protocol no longer needs increased link
2010 * reliability. This operation can not fail.
2001 */ 2011 */
2002struct cfg80211_ops { 2012struct cfg80211_ops {
2003 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); 2013 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
@@ -2227,6 +2237,12 @@ struct cfg80211_ops {
2227 struct cfg80211_chan_def *chandef); 2237 struct cfg80211_chan_def *chandef);
2228 int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, 2238 int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev,
2229 struct cfg80211_update_ft_ies_params *ftie); 2239 struct cfg80211_update_ft_ies_params *ftie);
2240 int (*crit_proto_start)(struct wiphy *wiphy,
2241 struct wireless_dev *wdev,
2242 enum nl80211_crit_proto_id protocol,
2243 u16 duration);
2244 void (*crit_proto_stop)(struct wiphy *wiphy,
2245 struct wireless_dev *wdev);
2230}; 2246};
2231 2247
2232/* 2248/*
@@ -4020,6 +4036,17 @@ bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
4020void cfg80211_ch_switch_notify(struct net_device *dev, 4036void cfg80211_ch_switch_notify(struct net_device *dev,
4021 struct cfg80211_chan_def *chandef); 4037 struct cfg80211_chan_def *chandef);
4022 4038
4039/**
4040 * ieee80211_operating_class_to_band - convert operating class to band
4041 *
4042 * @operating_class: the operating class to convert
4043 * @band: band pointer to fill
4044 *
4045 * Returns %true if the conversion was successful, %false otherwise.
4046 */
4047bool ieee80211_operating_class_to_band(u8 operating_class,
4048 enum ieee80211_band *band);
4049
4023/* 4050/*
4024 * cfg80211_tdls_oper_request - request userspace to perform TDLS operation 4051 * cfg80211_tdls_oper_request - request userspace to perform TDLS operation
4025 * @dev: the device on which the operation is requested 4052 * @dev: the device on which the operation is requested
@@ -4122,6 +4149,17 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev,
4122 struct cfg80211_wowlan_wakeup *wakeup, 4149 struct cfg80211_wowlan_wakeup *wakeup,
4123 gfp_t gfp); 4150 gfp_t gfp);
4124 4151
4152/**
4153 * cfg80211_crit_proto_stopped() - indicate critical protocol stopped by driver.
4154 *
4155 * @wdev: the wireless device for which critical protocol is stopped.
4156 *
4157 * This function can be called by the driver to indicate it has reverted
4158 * operation back to normal. One reason could be that the duration given
4159 * by .crit_proto_start() has expired.
4160 */
4161void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp);
4162
4125/* Logging, debugging and troubleshooting/diagnostic helpers. */ 4163/* Logging, debugging and troubleshooting/diagnostic helpers. */
4126 4164
4127/* wiphy_printk helpers, similar to dev_printk */ 4165/* wiphy_printk helpers, similar to dev_printk */
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index dd73b8c6746b..04c2d4670dc6 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -128,6 +128,7 @@ enum ieee80211_ac_numbers {
128 * 2^n-1 in the range 1..32767] 128 * 2^n-1 in the range 1..32767]
129 * @cw_max: maximum contention window [like @cw_min] 129 * @cw_max: maximum contention window [like @cw_min]
130 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled 130 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled
131 * @acm: is mandatory admission control required for the access category
131 * @uapsd: is U-APSD mode enabled for the queue 132 * @uapsd: is U-APSD mode enabled for the queue
132 */ 133 */
133struct ieee80211_tx_queue_params { 134struct ieee80211_tx_queue_params {
@@ -135,6 +136,7 @@ struct ieee80211_tx_queue_params {
135 u16 cw_min; 136 u16 cw_min;
136 u16 cw_max; 137 u16 cw_max;
137 u8 aifs; 138 u8 aifs;
139 bool acm;
138 bool uapsd; 140 bool uapsd;
139}; 141};
140 142
@@ -209,7 +211,7 @@ struct ieee80211_chanctx_conf {
209 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note 211 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note
210 * that it is only ever disabled for station mode. 212 * that it is only ever disabled for station mode.
211 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface. 213 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface.
212 * @BSS_CHANGED_SSID: SSID changed for this BSS (AP mode) 214 * @BSS_CHANGED_SSID: SSID changed for this BSS (AP and IBSS mode)
213 * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode) 215 * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode)
214 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode) 216 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode)
215 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface 217 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface
@@ -326,12 +328,11 @@ enum ieee80211_rssi_event {
326 * your driver/device needs to do. 328 * your driver/device needs to do.
327 * @ps: power-save mode (STA only). This flag is NOT affected by 329 * @ps: power-save mode (STA only). This flag is NOT affected by
328 * offchannel/dynamic_ps operations. 330 * offchannel/dynamic_ps operations.
329 * @ssid: The SSID of the current vif. Only valid in AP-mode. 331 * @ssid: The SSID of the current vif. Valid in AP and IBSS mode.
330 * @ssid_len: Length of SSID given in @ssid. 332 * @ssid_len: Length of SSID given in @ssid.
331 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. 333 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
332 * @txpower: TX power in dBm 334 * @txpower: TX power in dBm
333 * @p2p_ctwindow: P2P CTWindow, only for P2P client interfaces 335 * @p2p_noa_attr: P2P NoA attribute for P2P powersave
334 * @p2p_oppps: P2P opportunistic PS is enabled
335 */ 336 */
336struct ieee80211_bss_conf { 337struct ieee80211_bss_conf {
337 const u8 *bssid; 338 const u8 *bssid;
@@ -365,8 +366,7 @@ struct ieee80211_bss_conf {
365 size_t ssid_len; 366 size_t ssid_len;
366 bool hidden_ssid; 367 bool hidden_ssid;
367 int txpower; 368 int txpower;
368 u8 p2p_ctwindow; 369 struct ieee80211_p2p_noa_attr p2p_noa_attr;
369 bool p2p_oppps;
370}; 370};
371 371
372/** 372/**
@@ -563,6 +563,9 @@ enum mac80211_rate_control_flags {
563/* maximum number of rate stages */ 563/* maximum number of rate stages */
564#define IEEE80211_TX_MAX_RATES 4 564#define IEEE80211_TX_MAX_RATES 4
565 565
566/* maximum number of rate table entries */
567#define IEEE80211_TX_RATE_TABLE_SIZE 4
568
566/** 569/**
567 * struct ieee80211_tx_rate - rate selection/status 570 * struct ieee80211_tx_rate - rate selection/status
568 * 571 *
@@ -603,8 +606,8 @@ static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate *rate,
603 u8 mcs, u8 nss) 606 u8 mcs, u8 nss)
604{ 607{
605 WARN_ON(mcs & ~0xF); 608 WARN_ON(mcs & ~0xF);
606 WARN_ON(nss & ~0x7); 609 WARN_ON((nss - 1) & ~0x7);
607 rate->idx = (nss << 4) | mcs; 610 rate->idx = ((nss - 1) << 4) | mcs;
608} 611}
609 612
610static inline u8 613static inline u8
@@ -616,7 +619,7 @@ ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate)
616static inline u8 619static inline u8
617ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate) 620ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate)
618{ 621{
619 return rate->idx >> 4; 622 return (rate->idx >> 4) + 1;
620} 623}
621 624
622/** 625/**
@@ -657,7 +660,11 @@ struct ieee80211_tx_info {
657 struct ieee80211_tx_rate rates[ 660 struct ieee80211_tx_rate rates[
658 IEEE80211_TX_MAX_RATES]; 661 IEEE80211_TX_MAX_RATES];
659 s8 rts_cts_rate_idx; 662 s8 rts_cts_rate_idx;
660 /* 3 bytes free */ 663 u8 use_rts:1;
664 u8 use_cts_prot:1;
665 u8 short_preamble:1;
666 u8 skip_table:1;
667 /* 2 bytes free */
661 }; 668 };
662 /* only needed before rate control */ 669 /* only needed before rate control */
663 unsigned long jiffies; 670 unsigned long jiffies;
@@ -678,6 +685,8 @@ struct ieee80211_tx_info {
678 struct { 685 struct {
679 struct ieee80211_tx_rate driver_rates[ 686 struct ieee80211_tx_rate driver_rates[
680 IEEE80211_TX_MAX_RATES]; 687 IEEE80211_TX_MAX_RATES];
688 u8 pad[4];
689
681 void *rate_driver_data[ 690 void *rate_driver_data[
682 IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)]; 691 IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)];
683 }; 692 };
@@ -976,8 +985,7 @@ enum ieee80211_smps_mode {
976 * @power_level: requested transmit power (in dBm), backward compatibility 985 * @power_level: requested transmit power (in dBm), backward compatibility
977 * value only that is set to the minimum of all interfaces 986 * value only that is set to the minimum of all interfaces
978 * 987 *
979 * @channel: the channel to tune to 988 * @chandef: the channel definition to tune to
980 * @channel_type: the channel (HT) type
981 * @radar_enabled: whether radar detection is enabled 989 * @radar_enabled: whether radar detection is enabled
982 * 990 *
983 * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame 991 * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
@@ -1003,8 +1011,7 @@ struct ieee80211_conf {
1003 1011
1004 u8 long_frame_max_tx_count, short_frame_max_tx_count; 1012 u8 long_frame_max_tx_count, short_frame_max_tx_count;
1005 1013
1006 struct ieee80211_channel *channel; 1014 struct cfg80211_chan_def chandef;
1007 enum nl80211_channel_type channel_type;
1008 bool radar_enabled; 1015 bool radar_enabled;
1009 enum ieee80211_smps_mode smps_mode; 1016 enum ieee80211_smps_mode smps_mode;
1010}; 1017};
@@ -1021,13 +1028,13 @@ struct ieee80211_conf {
1021 * the driver passed into mac80211. 1028 * the driver passed into mac80211.
1022 * @block_tx: Indicates whether transmission must be blocked before the 1029 * @block_tx: Indicates whether transmission must be blocked before the
1023 * scheduled channel switch, as indicated by the AP. 1030 * scheduled channel switch, as indicated by the AP.
1024 * @channel: the new channel to switch to 1031 * @chandef: the new channel to switch to
1025 * @count: the number of TBTT's until the channel switch event 1032 * @count: the number of TBTT's until the channel switch event
1026 */ 1033 */
1027struct ieee80211_channel_switch { 1034struct ieee80211_channel_switch {
1028 u64 timestamp; 1035 u64 timestamp;
1029 bool block_tx; 1036 bool block_tx;
1030 struct ieee80211_channel *channel; 1037 struct cfg80211_chan_def chandef;
1031 u8 count; 1038 u8 count;
1032}; 1039};
1033 1040
@@ -1225,6 +1232,24 @@ enum ieee80211_sta_rx_bandwidth {
1225}; 1232};
1226 1233
1227/** 1234/**
1235 * struct ieee80211_sta_rates - station rate selection table
1236 *
1237 * @rcu_head: RCU head used for freeing the table on update
1238 * @rates: transmit rates/flags to be used by default.
1239 * Overriding entries per-packet is possible by using cb tx control.
1240 */
1241struct ieee80211_sta_rates {
1242 struct rcu_head rcu_head;
1243 struct {
1244 s8 idx;
1245 u8 count;
1246 u8 count_cts;
1247 u8 count_rts;
1248 u16 flags;
1249 } rate[IEEE80211_TX_RATE_TABLE_SIZE];
1250};
1251
1252/**
1228 * struct ieee80211_sta - station table entry 1253 * struct ieee80211_sta - station table entry
1229 * 1254 *
1230 * A station table entry represents a station we are possibly 1255 * A station table entry represents a station we are possibly
@@ -1251,6 +1276,7 @@ enum ieee80211_sta_rx_bandwidth {
1251 * notifications and capabilities. The value is only valid after 1276 * notifications and capabilities. The value is only valid after
1252 * the station moves to associated state. 1277 * the station moves to associated state.
1253 * @smps_mode: current SMPS mode (off, static or dynamic) 1278 * @smps_mode: current SMPS mode (off, static or dynamic)
1279 * @tx_rates: rate control selection table
1254 */ 1280 */
1255struct ieee80211_sta { 1281struct ieee80211_sta {
1256 u32 supp_rates[IEEE80211_NUM_BANDS]; 1282 u32 supp_rates[IEEE80211_NUM_BANDS];
@@ -1264,6 +1290,7 @@ struct ieee80211_sta {
1264 u8 rx_nss; 1290 u8 rx_nss;
1265 enum ieee80211_sta_rx_bandwidth bandwidth; 1291 enum ieee80211_sta_rx_bandwidth bandwidth;
1266 enum ieee80211_smps_mode smps_mode; 1292 enum ieee80211_smps_mode smps_mode;
1293 struct ieee80211_sta_rates __rcu *rates;
1267 1294
1268 /* must be last */ 1295 /* must be last */
1269 u8 drv_priv[0] __aligned(sizeof(void *)); 1296 u8 drv_priv[0] __aligned(sizeof(void *));
@@ -1419,6 +1446,9 @@ struct ieee80211_tx_control {
1419 * for different virtual interfaces. See the doc section on HW queue 1446 * for different virtual interfaces. See the doc section on HW queue
1420 * control for more details. 1447 * control for more details.
1421 * 1448 *
1449 * @IEEE80211_HW_SUPPORTS_RC_TABLE: The driver supports using a rate
1450 * selection table provided by the rate control algorithm.
1451 *
1422 * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any 1452 * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
1423 * P2P Interface. This will be honoured even if more than one interface 1453 * P2P Interface. This will be honoured even if more than one interface
1424 * is supported. 1454 * is supported.
@@ -1451,6 +1481,7 @@ enum ieee80211_hw_flags {
1451 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21, 1481 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21,
1452 IEEE80211_HW_AP_LINK_PS = 1<<22, 1482 IEEE80211_HW_AP_LINK_PS = 1<<22,
1453 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23, 1483 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23,
1484 IEEE80211_HW_SUPPORTS_RC_TABLE = 1<<24,
1454 IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25, 1485 IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25,
1455 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26, 1486 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26,
1456}; 1487};
@@ -1536,6 +1567,17 @@ enum ieee80211_hw_flags {
1536 * @netdev_features: netdev features to be set in each netdev created 1567 * @netdev_features: netdev features to be set in each netdev created
1537 * from this HW. Note only HW checksum features are currently 1568 * from this HW. Note only HW checksum features are currently
1538 * compatible with mac80211. Other feature bits will be rejected. 1569 * compatible with mac80211. Other feature bits will be rejected.
1570 *
1571 * @uapsd_queues: This bitmap is included in (re)association frame to indicate
1572 * for each access category if it is uAPSD trigger-enabled and delivery-
1573 * enabled. Use IEEE80211_WMM_IE_STA_QOSINFO_AC_* to set this bitmap.
1574 * Each bit corresponds to different AC. Value '1' in specific bit means
1575 * that corresponding AC is both trigger- and delivery-enabled. '0' means
1576 * neither enabled.
1577 *
1578 * @uapsd_max_sp_len: maximum number of total buffered frames the WMM AP may
1579 * deliver to a WMM STA during any Service Period triggered by the WMM STA.
1580 * Use IEEE80211_WMM_IE_STA_QOSINFO_SP_* for correct values.
1539 */ 1581 */
1540struct ieee80211_hw { 1582struct ieee80211_hw {
1541 struct ieee80211_conf conf; 1583 struct ieee80211_conf conf;
@@ -1561,6 +1603,8 @@ struct ieee80211_hw {
1561 u8 radiotap_mcs_details; 1603 u8 radiotap_mcs_details;
1562 u16 radiotap_vht_details; 1604 u16 radiotap_vht_details;
1563 netdev_features_t netdev_features; 1605 netdev_features_t netdev_features;
1606 u8 uapsd_queues;
1607 u8 uapsd_max_sp_len;
1564}; 1608};
1565 1609
1566/** 1610/**
@@ -3124,6 +3168,25 @@ void ieee80211_sta_set_buffered(struct ieee80211_sta *sta,
3124 u8 tid, bool buffered); 3168 u8 tid, bool buffered);
3125 3169
3126/** 3170/**
3171 * ieee80211_get_tx_rates - get the selected transmit rates for a packet
3172 *
3173 * Call this function in a driver with per-packet rate selection support
3174 * to combine the rate info in the packet tx info with the most recent
3175 * rate selection table for the station entry.
3176 *
3177 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3178 * @sta: the receiver station to which this packet is sent.
3179 * @skb: the frame to be transmitted.
3180 * @dest: buffer for extracted rate/retry information
3181 * @max_rates: maximum number of rates to fetch
3182 */
3183void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
3184 struct ieee80211_sta *sta,
3185 struct sk_buff *skb,
3186 struct ieee80211_tx_rate *dest,
3187 int max_rates);
3188
3189/**
3127 * ieee80211_tx_status - transmit status callback 3190 * ieee80211_tx_status - transmit status callback
3128 * 3191 *
3129 * Call this function for all transmitted frames after they have been 3192 * Call this function for all transmitted frames after they have been
@@ -4098,7 +4161,7 @@ void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn);
4098 * (deprecated; this will be removed once drivers get updated to use 4161 * (deprecated; this will be removed once drivers get updated to use
4099 * rate_idx_mask) 4162 * rate_idx_mask)
4100 * @rate_idx_mask: user-requested (legacy) rate mask 4163 * @rate_idx_mask: user-requested (legacy) rate mask
4101 * @rate_idx_mcs_mask: user-requested MCS rate mask 4164 * @rate_idx_mcs_mask: user-requested MCS rate mask (NULL if not in use)
4102 * @bss: whether this frame is sent out in AP or IBSS mode 4165 * @bss: whether this frame is sent out in AP or IBSS mode
4103 */ 4166 */
4104struct ieee80211_tx_rate_control { 4167struct ieee80211_tx_rate_control {
@@ -4110,7 +4173,7 @@ struct ieee80211_tx_rate_control {
4110 bool rts, short_preamble; 4173 bool rts, short_preamble;
4111 u8 max_rate_idx; 4174 u8 max_rate_idx;
4112 u32 rate_idx_mask; 4175 u32 rate_idx_mask;
4113 u8 rate_idx_mcs_mask[IEEE80211_HT_MCS_MASK_LEN]; 4176 u8 *rate_idx_mcs_mask;
4114 bool bss; 4177 bool bss;
4115}; 4178};
4116 4179
@@ -4199,37 +4262,55 @@ bool rate_usable_index_exists(struct ieee80211_supported_band *sband,
4199 return false; 4262 return false;
4200} 4263}
4201 4264
4265/**
4266 * rate_control_set_rates - pass the sta rate selection to mac80211/driver
4267 *
4268 * When not doing a rate control probe to test rates, rate control should pass
4269 * its rate selection to mac80211. If the driver supports receiving a station
4270 * rate table, it will use it to ensure that frames are always sent based on
4271 * the most recent rate control module decision.
4272 *
4273 * @hw: pointer as obtained from ieee80211_alloc_hw()
4274 * @pubsta: &struct ieee80211_sta pointer to the target destination.
4275 * @rates: new tx rate set to be used for this station.
4276 */
4277int rate_control_set_rates(struct ieee80211_hw *hw,
4278 struct ieee80211_sta *pubsta,
4279 struct ieee80211_sta_rates *rates);
4280
4202int ieee80211_rate_control_register(struct rate_control_ops *ops); 4281int ieee80211_rate_control_register(struct rate_control_ops *ops);
4203void ieee80211_rate_control_unregister(struct rate_control_ops *ops); 4282void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
4204 4283
4205static inline bool 4284static inline bool
4206conf_is_ht20(struct ieee80211_conf *conf) 4285conf_is_ht20(struct ieee80211_conf *conf)
4207{ 4286{
4208 return conf->channel_type == NL80211_CHAN_HT20; 4287 return conf->chandef.width == NL80211_CHAN_WIDTH_20;
4209} 4288}
4210 4289
4211static inline bool 4290static inline bool
4212conf_is_ht40_minus(struct ieee80211_conf *conf) 4291conf_is_ht40_minus(struct ieee80211_conf *conf)
4213{ 4292{
4214 return conf->channel_type == NL80211_CHAN_HT40MINUS; 4293 return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
4294 conf->chandef.center_freq1 < conf->chandef.chan->center_freq;
4215} 4295}
4216 4296
4217static inline bool 4297static inline bool
4218conf_is_ht40_plus(struct ieee80211_conf *conf) 4298conf_is_ht40_plus(struct ieee80211_conf *conf)
4219{ 4299{
4220 return conf->channel_type == NL80211_CHAN_HT40PLUS; 4300 return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
4301 conf->chandef.center_freq1 > conf->chandef.chan->center_freq;
4221} 4302}
4222 4303
4223static inline bool 4304static inline bool
4224conf_is_ht40(struct ieee80211_conf *conf) 4305conf_is_ht40(struct ieee80211_conf *conf)
4225{ 4306{
4226 return conf_is_ht40_minus(conf) || conf_is_ht40_plus(conf); 4307 return conf->chandef.width == NL80211_CHAN_WIDTH_40;
4227} 4308}
4228 4309
4229static inline bool 4310static inline bool
4230conf_is_ht(struct ieee80211_conf *conf) 4311conf_is_ht(struct ieee80211_conf *conf)
4231{ 4312{
4232 return conf->channel_type != NL80211_CHAN_NO_HT; 4313 return conf->chandef.width != NL80211_CHAN_WIDTH_20_NOHT;
4233} 4314}
4234 4315
4235static inline enum nl80211_iftype 4316static inline enum nl80211_iftype
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h
index 87a6417fc934..5eb80bb3cbb2 100644
--- a/include/net/nfc/nfc.h
+++ b/include/net/nfc/nfc.h
@@ -122,6 +122,8 @@ struct nfc_dev {
122 122
123 bool shutting_down; 123 bool shutting_down;
124 124
125 struct rfkill *rfkill;
126
125 struct nfc_ops *ops; 127 struct nfc_ops *ops;
126}; 128};
127#define to_nfc_dev(_dev) container_of(_dev, struct nfc_dev, dev) 129#define to_nfc_dev(_dev) container_of(_dev, struct nfc_dev, dev)