diff options
| author | John W. Linville <linville@tuxdriver.com> | 2013-04-24 10:54:20 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2013-04-24 10:54:20 -0400 |
| commit | 6ed0e321a0aef14a894e26658108bf7e895c36a6 (patch) | |
| tree | f49428d68ebcb1beb757296ea1559079210babbe /include/net | |
| parent | 3dec2246c2ff11beb24ca1950f074b2bcbc85953 (diff) | |
| parent | b006ed545cbadf1ebd4683719554742d20dbcede (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.h | 5 | ||||
| -rw-r--r-- | include/net/bluetooth/hci.h | 9 | ||||
| -rw-r--r-- | include/net/bluetooth/hci_core.h | 98 | ||||
| -rw-r--r-- | include/net/bluetooth/l2cap.h | 15 | ||||
| -rw-r--r-- | include/net/cfg80211.h | 38 | ||||
| -rw-r--r-- | include/net/mac80211.h | 127 | ||||
| -rw-r--r-- | include/net/nfc/nfc.h | 2 |
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 */ |
| 196 | static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2) | 196 | static 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 | } |
| 200 | static inline void bacpy(bdaddr_t *dst, bdaddr_t *src) | 200 | static 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 | ||
| 267 | struct hci_req_ctrl { | 267 | struct 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 |
| 988 | struct hci_cp_le_set_scan_param { | 991 | struct 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 |
| 1000 | struct hci_cp_le_set_scan_enable { | 1005 | struct 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 |
| 138 | struct hci_dev { | 140 | struct 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); | |||
| 584 | int hci_conn_del(struct hci_conn *conn); | 585 | int hci_conn_del(struct hci_conn *conn); |
| 585 | void hci_conn_hash_flush(struct hci_dev *hdev); | 586 | void hci_conn_hash_flush(struct hci_dev *hdev); |
| 586 | void hci_conn_check_pending(struct hci_dev *hdev); | 587 | void hci_conn_check_pending(struct hci_dev *hdev); |
| 587 | void hci_conn_accept(struct hci_conn *conn, int mask); | ||
| 588 | 588 | ||
| 589 | struct hci_chan *hci_chan_create(struct hci_conn *conn); | 589 | struct hci_chan *hci_chan_create(struct hci_conn *conn); |
| 590 | void hci_chan_del(struct hci_chan *chan); | 590 | void hci_chan_del(struct hci_chan *chan); |
| @@ -601,8 +601,36 @@ int hci_conn_switch_role(struct hci_conn *conn, __u8 role); | |||
| 601 | 601 | ||
| 602 | void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active); | 602 | void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active); |
| 603 | 603 | ||
| 604 | void hci_conn_hold_device(struct hci_conn *conn); | 604 | /* |
| 605 | void 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 | |||
| 625 | static inline void hci_conn_get(struct hci_conn *conn) | ||
| 626 | { | ||
| 627 | get_device(&conn->dev); | ||
| 628 | } | ||
| 629 | |||
| 630 | static inline void hci_conn_put(struct hci_conn *conn) | ||
| 631 | { | ||
| 632 | put_device(&conn->dev); | ||
| 633 | } | ||
| 606 | 634 | ||
| 607 | static inline void hci_conn_hold(struct hci_conn *conn) | 635 | static 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 | ||
| 615 | static inline void hci_conn_put(struct hci_conn *conn) | 643 | static 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 */ |
| 788 | static inline bool hci_amp_capable(void) | 816 | static inline bool hci_amp_capable(void) |
| @@ -1054,8 +1082,14 @@ struct hci_request { | |||
| 1054 | void hci_req_init(struct hci_request *req, struct hci_dev *hdev); | 1082 | void hci_req_init(struct hci_request *req, struct hci_dev *hdev); |
| 1055 | int hci_req_run(struct hci_request *req, hci_req_complete_t complete); | 1083 | int hci_req_run(struct hci_request *req, hci_req_complete_t complete); |
| 1056 | void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param); | 1084 | void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param); |
| 1085 | void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen, void *param, | ||
| 1086 | u8 event); | ||
| 1057 | void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status); | 1087 | void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status); |
| 1058 | void hci_req_cmd_status(struct hci_dev *hdev, u16 opcode, u8 status); | 1088 | |
| 1089 | struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen, | ||
| 1090 | void *param, u32 timeout); | ||
| 1091 | struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen, | ||
| 1092 | void *param, u8 event, u32 timeout); | ||
| 1059 | 1093 | ||
| 1060 | int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param); | 1094 | int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param); |
| 1061 | void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags); | 1095 | void 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 | |||
| 590 | struct 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 | ||
| 787 | int l2cap_init_sockets(void); | 795 | int l2cap_init_sockets(void); |
| 788 | void l2cap_cleanup_sockets(void); | 796 | void l2cap_cleanup_sockets(void); |
| 797 | bool l2cap_is_socket(struct socket *sock); | ||
| 789 | 798 | ||
| 790 | void __l2cap_connect_rsp_defer(struct l2cap_chan *chan); | 799 | void __l2cap_connect_rsp_defer(struct l2cap_chan *chan); |
| 791 | int __l2cap_wait_ack(struct sock *sk); | 800 | int __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); |
| 813 | void __l2cap_physical_cfm(struct l2cap_chan *chan, int result); | 822 | void __l2cap_physical_cfm(struct l2cap_chan *chan, int result); |
| 814 | 823 | ||
| 824 | void l2cap_conn_get(struct l2cap_conn *conn); | ||
| 825 | void l2cap_conn_put(struct l2cap_conn *conn); | ||
| 826 | |||
| 827 | int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user); | ||
| 828 | void 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 | */ |
| 2002 | struct cfg80211_ops { | 2012 | struct 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, | |||
| 4020 | void cfg80211_ch_switch_notify(struct net_device *dev, | 4036 | void 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 | */ | ||
| 4047 | bool 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 | */ | ||
| 4161 | void 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 | */ |
| 133 | struct ieee80211_tx_queue_params { | 134 | struct 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 | */ |
| 336 | struct ieee80211_bss_conf { | 337 | struct 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 | ||
| 610 | static inline u8 | 613 | static inline u8 |
| @@ -616,7 +619,7 @@ ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate) | |||
| 616 | static inline u8 | 619 | static inline u8 |
| 617 | ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate) | 620 | ieee80211_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 | */ |
| 1027 | struct ieee80211_channel_switch { | 1034 | struct 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 | */ | ||
| 1241 | struct 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 | */ |
| 1255 | struct ieee80211_sta { | 1281 | struct 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 | */ |
| 1540 | struct ieee80211_hw { | 1582 | struct 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 | */ | ||
| 3183 | void 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 | */ |
| 4104 | struct ieee80211_tx_rate_control { | 4167 | struct 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 | */ | ||
| 4277 | int rate_control_set_rates(struct ieee80211_hw *hw, | ||
| 4278 | struct ieee80211_sta *pubsta, | ||
| 4279 | struct ieee80211_sta_rates *rates); | ||
| 4280 | |||
| 4202 | int ieee80211_rate_control_register(struct rate_control_ops *ops); | 4281 | int ieee80211_rate_control_register(struct rate_control_ops *ops); |
| 4203 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); | 4282 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); |
| 4204 | 4283 | ||
| 4205 | static inline bool | 4284 | static inline bool |
| 4206 | conf_is_ht20(struct ieee80211_conf *conf) | 4285 | conf_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 | ||
| 4211 | static inline bool | 4290 | static inline bool |
| 4212 | conf_is_ht40_minus(struct ieee80211_conf *conf) | 4291 | conf_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 | ||
| 4217 | static inline bool | 4297 | static inline bool |
| 4218 | conf_is_ht40_plus(struct ieee80211_conf *conf) | 4298 | conf_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 | ||
| 4223 | static inline bool | 4304 | static inline bool |
| 4224 | conf_is_ht40(struct ieee80211_conf *conf) | 4305 | conf_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 | ||
| 4229 | static inline bool | 4310 | static inline bool |
| 4230 | conf_is_ht(struct ieee80211_conf *conf) | 4311 | conf_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 | ||
| 4235 | static inline enum nl80211_iftype | 4316 | static 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) |
