diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-12-07 13:03:50 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-12-07 13:03:50 -0500 |
commit | 8024dc191025d6b981563236df02da5c0db0854d (patch) | |
tree | f42cd84995c804c3590c56616527f5399155060b /include | |
parent | fd3065b25b69ce345073bbd294a73343a608fd8b (diff) | |
parent | 9e2ff36beae4bedbad2a69d458f9404f35fcb528 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/bcm47xx_wdt.h | 19 | ||||
-rw-r--r-- | include/linux/bcma/bcma_driver_chipcommon.h | 7 | ||||
-rw-r--r-- | include/linux/ieee80211.h | 15 | ||||
-rw-r--r-- | include/linux/ssb/ssb.h | 2 | ||||
-rw-r--r-- | include/linux/ssb/ssb_driver_chipcommon.h | 5 | ||||
-rw-r--r-- | include/linux/ssb/ssb_driver_extif.h | 52 | ||||
-rw-r--r-- | include/net/bluetooth/hci_core.h | 31 | ||||
-rw-r--r-- | include/net/bluetooth/l2cap.h | 2 | ||||
-rw-r--r-- | include/net/cfg80211.h | 69 | ||||
-rw-r--r-- | include/net/ieee80211_radiotap.h | 24 | ||||
-rw-r--r-- | include/net/mac80211.h | 12 | ||||
-rw-r--r-- | include/uapi/linux/nl80211.h | 16 |
12 files changed, 218 insertions, 36 deletions
diff --git a/include/linux/bcm47xx_wdt.h b/include/linux/bcm47xx_wdt.h new file mode 100644 index 000000000000..e5dfc256485b --- /dev/null +++ b/include/linux/bcm47xx_wdt.h | |||
@@ -0,0 +1,19 @@ | |||
1 | #ifndef LINUX_BCM47XX_WDT_H_ | ||
2 | #define LINUX_BCM47XX_WDT_H_ | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | |||
7 | struct bcm47xx_wdt { | ||
8 | u32 (*timer_set)(struct bcm47xx_wdt *, u32); | ||
9 | u32 (*timer_set_ms)(struct bcm47xx_wdt *, u32); | ||
10 | u32 max_timer_ms; | ||
11 | |||
12 | void *driver_data; | ||
13 | }; | ||
14 | |||
15 | static inline void *bcm47xx_wdt_get_drvdata(struct bcm47xx_wdt *wdt) | ||
16 | { | ||
17 | return wdt->driver_data; | ||
18 | } | ||
19 | #endif /* LINUX_BCM47XX_WDT_H_ */ | ||
diff --git a/include/linux/bcma/bcma_driver_chipcommon.h b/include/linux/bcma/bcma_driver_chipcommon.h index 145f3c56227f..e51359180b6f 100644 --- a/include/linux/bcma/bcma_driver_chipcommon.h +++ b/include/linux/bcma/bcma_driver_chipcommon.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef LINUX_BCMA_DRIVER_CC_H_ | 1 | #ifndef LINUX_BCMA_DRIVER_CC_H_ |
2 | #define LINUX_BCMA_DRIVER_CC_H_ | 2 | #define LINUX_BCMA_DRIVER_CC_H_ |
3 | 3 | ||
4 | #include <linux/platform_device.h> | ||
5 | |||
4 | /** ChipCommon core registers. **/ | 6 | /** ChipCommon core registers. **/ |
5 | #define BCMA_CC_ID 0x0000 | 7 | #define BCMA_CC_ID 0x0000 |
6 | #define BCMA_CC_ID_ID 0x0000FFFF | 8 | #define BCMA_CC_ID_ID 0x0000FFFF |
@@ -570,6 +572,8 @@ struct bcma_drv_cc { | |||
570 | int nr_serial_ports; | 572 | int nr_serial_ports; |
571 | struct bcma_serial_port serial_ports[4]; | 573 | struct bcma_serial_port serial_ports[4]; |
572 | #endif /* CONFIG_BCMA_DRIVER_MIPS */ | 574 | #endif /* CONFIG_BCMA_DRIVER_MIPS */ |
575 | u32 ticks_per_ms; | ||
576 | struct platform_device *watchdog; | ||
573 | }; | 577 | }; |
574 | 578 | ||
575 | /* Register access */ | 579 | /* Register access */ |
@@ -593,8 +597,7 @@ extern void bcma_chipco_resume(struct bcma_drv_cc *cc); | |||
593 | 597 | ||
594 | void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable); | 598 | void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable); |
595 | 599 | ||
596 | extern void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, | 600 | extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); |
597 | u32 ticks); | ||
598 | 601 | ||
599 | void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); | 602 | void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); |
600 | 603 | ||
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index f9c5a787d350..8f690e53dd89 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -1213,6 +1213,21 @@ struct ieee80211_vht_cap { | |||
1213 | } __packed; | 1213 | } __packed; |
1214 | 1214 | ||
1215 | /** | 1215 | /** |
1216 | * enum ieee80211_vht_chanwidth - VHT channel width | ||
1217 | * @IEEE80211_VHT_CHANWIDTH_USE_HT: use the HT operation IE to | ||
1218 | * determine the channel width (20 or 40 MHz) | ||
1219 | * @IEEE80211_VHT_CHANWIDTH_80MHZ: 80 MHz bandwidth | ||
1220 | * @IEEE80211_VHT_CHANWIDTH_160MHZ: 160 MHz bandwidth | ||
1221 | * @IEEE80211_VHT_CHANWIDTH_80P80MHZ: 80+80 MHz bandwidth | ||
1222 | */ | ||
1223 | enum ieee80211_vht_chanwidth { | ||
1224 | IEEE80211_VHT_CHANWIDTH_USE_HT = 0, | ||
1225 | IEEE80211_VHT_CHANWIDTH_80MHZ = 1, | ||
1226 | IEEE80211_VHT_CHANWIDTH_160MHZ = 2, | ||
1227 | IEEE80211_VHT_CHANWIDTH_80P80MHZ = 3, | ||
1228 | }; | ||
1229 | |||
1230 | /** | ||
1216 | * struct ieee80211_vht_operation - VHT operation IE | 1231 | * struct ieee80211_vht_operation - VHT operation IE |
1217 | * | 1232 | * |
1218 | * This structure is the "VHT operation element" as | 1233 | * This structure is the "VHT operation element" as |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index bb674c02f306..1f64e3f1f22b 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <linux/pci.h> | 8 | #include <linux/pci.h> |
9 | #include <linux/mod_devicetable.h> | 9 | #include <linux/mod_devicetable.h> |
10 | #include <linux/dma-mapping.h> | 10 | #include <linux/dma-mapping.h> |
11 | #include <linux/platform_device.h> | ||
11 | 12 | ||
12 | #include <linux/ssb/ssb_regs.h> | 13 | #include <linux/ssb/ssb_regs.h> |
13 | 14 | ||
@@ -432,6 +433,7 @@ struct ssb_bus { | |||
432 | #ifdef CONFIG_SSB_EMBEDDED | 433 | #ifdef CONFIG_SSB_EMBEDDED |
433 | /* Lock for GPIO register access. */ | 434 | /* Lock for GPIO register access. */ |
434 | spinlock_t gpio_lock; | 435 | spinlock_t gpio_lock; |
436 | struct platform_device *watchdog; | ||
435 | #endif /* EMBEDDED */ | 437 | #endif /* EMBEDDED */ |
436 | 438 | ||
437 | /* Internal-only stuff follows. Do not touch. */ | 439 | /* Internal-only stuff follows. Do not touch. */ |
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h index c2b02a5c86ae..38339fd68a5f 100644 --- a/include/linux/ssb/ssb_driver_chipcommon.h +++ b/include/linux/ssb/ssb_driver_chipcommon.h | |||
@@ -591,6 +591,8 @@ struct ssb_chipcommon { | |||
591 | /* Fast Powerup Delay constant */ | 591 | /* Fast Powerup Delay constant */ |
592 | u16 fast_pwrup_delay; | 592 | u16 fast_pwrup_delay; |
593 | struct ssb_chipcommon_pmu pmu; | 593 | struct ssb_chipcommon_pmu pmu; |
594 | u32 ticks_per_ms; | ||
595 | u32 max_timer_ms; | ||
594 | }; | 596 | }; |
595 | 597 | ||
596 | static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) | 598 | static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) |
@@ -630,8 +632,7 @@ enum ssb_clkmode { | |||
630 | extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, | 632 | extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, |
631 | enum ssb_clkmode mode); | 633 | enum ssb_clkmode mode); |
632 | 634 | ||
633 | extern void ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc, | 635 | extern u32 ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc, u32 ticks); |
634 | u32 ticks); | ||
635 | 636 | ||
636 | void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); | 637 | void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); |
637 | 638 | ||
diff --git a/include/linux/ssb/ssb_driver_extif.h b/include/linux/ssb/ssb_driver_extif.h index 91161f0aa22b..99511d0e931d 100644 --- a/include/linux/ssb/ssb_driver_extif.h +++ b/include/linux/ssb/ssb_driver_extif.h | |||
@@ -152,6 +152,9 @@ | |||
152 | /* watchdog */ | 152 | /* watchdog */ |
153 | #define SSB_EXTIF_WATCHDOG_CLK 48000000 /* Hz */ | 153 | #define SSB_EXTIF_WATCHDOG_CLK 48000000 /* Hz */ |
154 | 154 | ||
155 | #define SSB_EXTIF_WATCHDOG_MAX_TIMER ((1 << 28) - 1) | ||
156 | #define SSB_EXTIF_WATCHDOG_MAX_TIMER_MS (SSB_EXTIF_WATCHDOG_MAX_TIMER \ | ||
157 | / (SSB_EXTIF_WATCHDOG_CLK / 1000)) | ||
155 | 158 | ||
156 | 159 | ||
157 | #ifdef CONFIG_SSB_DRIVER_EXTIF | 160 | #ifdef CONFIG_SSB_DRIVER_EXTIF |
@@ -171,8 +174,7 @@ extern void ssb_extif_get_clockcontrol(struct ssb_extif *extif, | |||
171 | extern void ssb_extif_timing_init(struct ssb_extif *extif, | 174 | extern void ssb_extif_timing_init(struct ssb_extif *extif, |
172 | unsigned long ns); | 175 | unsigned long ns); |
173 | 176 | ||
174 | extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif, | 177 | extern u32 ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks); |
175 | u32 ticks); | ||
176 | 178 | ||
177 | /* Extif GPIO pin access */ | 179 | /* Extif GPIO pin access */ |
178 | u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask); | 180 | u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask); |
@@ -205,10 +207,52 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif, | |||
205 | } | 207 | } |
206 | 208 | ||
207 | static inline | 209 | static inline |
208 | void ssb_extif_watchdog_timer_set(struct ssb_extif *extif, | 210 | void ssb_extif_timing_init(struct ssb_extif *extif, unsigned long ns) |
209 | u32 ticks) | ||
210 | { | 211 | { |
211 | } | 212 | } |
212 | 213 | ||
214 | static inline | ||
215 | u32 ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks) | ||
216 | { | ||
217 | return 0; | ||
218 | } | ||
219 | |||
220 | static inline u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask) | ||
221 | { | ||
222 | return 0; | ||
223 | } | ||
224 | |||
225 | static inline u32 ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, | ||
226 | u32 value) | ||
227 | { | ||
228 | return 0; | ||
229 | } | ||
230 | |||
231 | static inline u32 ssb_extif_gpio_outen(struct ssb_extif *extif, u32 mask, | ||
232 | u32 value) | ||
233 | { | ||
234 | return 0; | ||
235 | } | ||
236 | |||
237 | static inline u32 ssb_extif_gpio_polarity(struct ssb_extif *extif, u32 mask, | ||
238 | u32 value) | ||
239 | { | ||
240 | return 0; | ||
241 | } | ||
242 | |||
243 | static inline u32 ssb_extif_gpio_intmask(struct ssb_extif *extif, u32 mask, | ||
244 | u32 value) | ||
245 | { | ||
246 | return 0; | ||
247 | } | ||
248 | |||
249 | #ifdef CONFIG_SSB_SERIAL | ||
250 | static inline int ssb_extif_serial_init(struct ssb_extif *extif, | ||
251 | struct ssb_serial_port *ports) | ||
252 | { | ||
253 | return 0; | ||
254 | } | ||
255 | #endif /* CONFIG_SSB_SERIAL */ | ||
256 | |||
213 | #endif /* CONFIG_SSB_DRIVER_EXTIF */ | 257 | #endif /* CONFIG_SSB_DRIVER_EXTIF */ |
214 | #endif /* LINUX_SSB_EXTIFCORE_H_ */ | 258 | #endif /* LINUX_SSB_EXTIFCORE_H_ */ |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index ef5b85dac3f7..014a2eaa5389 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -376,7 +376,7 @@ extern int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt); | |||
376 | extern int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, | 376 | extern int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, |
377 | u16 flags); | 377 | u16 flags); |
378 | 378 | ||
379 | extern int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr); | 379 | extern int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags); |
380 | extern void sco_connect_cfm(struct hci_conn *hcon, __u8 status); | 380 | extern void sco_connect_cfm(struct hci_conn *hcon, __u8 status); |
381 | extern void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason); | 381 | extern void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason); |
382 | extern int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb); | 382 | extern int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb); |
@@ -577,6 +577,7 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst); | |||
577 | int hci_conn_del(struct hci_conn *conn); | 577 | int hci_conn_del(struct hci_conn *conn); |
578 | void hci_conn_hash_flush(struct hci_dev *hdev); | 578 | void hci_conn_hash_flush(struct hci_dev *hdev); |
579 | void hci_conn_check_pending(struct hci_dev *hdev); | 579 | void hci_conn_check_pending(struct hci_dev *hdev); |
580 | void hci_conn_accept(struct hci_conn *conn, int mask); | ||
580 | 581 | ||
581 | struct hci_chan *hci_chan_create(struct hci_conn *conn); | 582 | struct hci_chan *hci_chan_create(struct hci_conn *conn); |
582 | void hci_chan_del(struct hci_chan *chan); | 583 | void hci_chan_del(struct hci_chan *chan); |
@@ -766,7 +767,7 @@ void hci_conn_del_sysfs(struct hci_conn *conn); | |||
766 | #define lmp_sniffsubr_capable(dev) ((dev)->features[5] & LMP_SNIFF_SUBR) | 767 | #define lmp_sniffsubr_capable(dev) ((dev)->features[5] & LMP_SNIFF_SUBR) |
767 | #define lmp_pause_enc_capable(dev) ((dev)->features[5] & LMP_PAUSE_ENC) | 768 | #define lmp_pause_enc_capable(dev) ((dev)->features[5] & LMP_PAUSE_ENC) |
768 | #define lmp_ext_inq_capable(dev) ((dev)->features[6] & LMP_EXT_INQ) | 769 | #define lmp_ext_inq_capable(dev) ((dev)->features[6] & LMP_EXT_INQ) |
769 | #define lmp_le_br_capable(dev) ((dev)->features[6] & LMP_SIMUL_LE_BR) | 770 | #define lmp_le_br_capable(dev) !!((dev)->features[6] & LMP_SIMUL_LE_BR) |
770 | #define lmp_ssp_capable(dev) ((dev)->features[6] & LMP_SIMPLE_PAIR) | 771 | #define lmp_ssp_capable(dev) ((dev)->features[6] & LMP_SIMPLE_PAIR) |
771 | #define lmp_no_flush_capable(dev) ((dev)->features[6] & LMP_NO_FLUSH) | 772 | #define lmp_no_flush_capable(dev) ((dev)->features[6] & LMP_NO_FLUSH) |
772 | #define lmp_lsto_capable(dev) ((dev)->features[7] & LMP_LSTO) | 773 | #define lmp_lsto_capable(dev) ((dev)->features[7] & LMP_LSTO) |
@@ -775,12 +776,30 @@ void hci_conn_del_sysfs(struct hci_conn *conn); | |||
775 | 776 | ||
776 | /* ----- Extended LMP capabilities ----- */ | 777 | /* ----- Extended LMP capabilities ----- */ |
777 | #define lmp_host_ssp_capable(dev) ((dev)->host_features[0] & LMP_HOST_SSP) | 778 | #define lmp_host_ssp_capable(dev) ((dev)->host_features[0] & LMP_HOST_SSP) |
778 | #define lmp_host_le_capable(dev) ((dev)->host_features[0] & LMP_HOST_LE) | 779 | #define lmp_host_le_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE) |
779 | #define lmp_host_le_br_capable(dev) ((dev)->host_features[0] & LMP_HOST_LE_BREDR) | 780 | #define lmp_host_le_br_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE_BREDR) |
781 | |||
782 | /* returns true if at least one AMP active */ | ||
783 | static inline bool hci_amp_capable(void) | ||
784 | { | ||
785 | struct hci_dev *hdev; | ||
786 | bool ret = false; | ||
787 | |||
788 | read_lock(&hci_dev_list_lock); | ||
789 | list_for_each_entry(hdev, &hci_dev_list, list) | ||
790 | if (hdev->amp_type == HCI_AMP && | ||
791 | test_bit(HCI_UP, &hdev->flags)) | ||
792 | ret = true; | ||
793 | read_unlock(&hci_dev_list_lock); | ||
794 | |||
795 | return ret; | ||
796 | } | ||
780 | 797 | ||
781 | /* ----- HCI protocols ----- */ | 798 | /* ----- HCI protocols ----- */ |
799 | #define HCI_PROTO_DEFER 0x01 | ||
800 | |||
782 | static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, | 801 | static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, |
783 | __u8 type) | 802 | __u8 type, __u8 *flags) |
784 | { | 803 | { |
785 | switch (type) { | 804 | switch (type) { |
786 | case ACL_LINK: | 805 | case ACL_LINK: |
@@ -788,7 +807,7 @@ static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, | |||
788 | 807 | ||
789 | case SCO_LINK: | 808 | case SCO_LINK: |
790 | case ESCO_LINK: | 809 | case ESCO_LINK: |
791 | return sco_connect_ind(hdev, bdaddr); | 810 | return sco_connect_ind(hdev, bdaddr, flags); |
792 | 811 | ||
793 | default: | 812 | default: |
794 | BT_ERR("unknown link type %d", type); | 813 | BT_ERR("unknown link type %d", type); |
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index f57fab04e7c5..7588ef44ebaf 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -611,7 +611,7 @@ enum { | |||
611 | CONF_MTU_DONE, | 611 | CONF_MTU_DONE, |
612 | CONF_MODE_DONE, | 612 | CONF_MODE_DONE, |
613 | CONF_CONNECT_PEND, | 613 | CONF_CONNECT_PEND, |
614 | CONF_NO_FCS_RECV, | 614 | CONF_RECV_NO_FCS, |
615 | CONF_STATE2_DEVICE, | 615 | CONF_STATE2_DEVICE, |
616 | CONF_EWS_RECV, | 616 | CONF_EWS_RECV, |
617 | CONF_LOC_CONF_PEND, | 617 | CONF_LOC_CONF_PEND, |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index e78db2cf3d1b..8e6a6b73b9c9 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -58,6 +58,8 @@ | |||
58 | * structures here describe these capabilities in detail. | 58 | * structures here describe these capabilities in detail. |
59 | */ | 59 | */ |
60 | 60 | ||
61 | struct wiphy; | ||
62 | |||
61 | /* | 63 | /* |
62 | * wireless hardware capability structures | 64 | * wireless hardware capability structures |
63 | */ | 65 | */ |
@@ -388,6 +390,22 @@ cfg80211_chandef_compatible(const struct cfg80211_chan_def *chandef1, | |||
388 | const struct cfg80211_chan_def *chandef2); | 390 | const struct cfg80211_chan_def *chandef2); |
389 | 391 | ||
390 | /** | 392 | /** |
393 | * cfg80211_chandef_valid - check if a channel definition is valid | ||
394 | * @chandef: the channel definition to check | ||
395 | */ | ||
396 | bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef); | ||
397 | |||
398 | /** | ||
399 | * cfg80211_chandef_usable - check if secondary channels can be used | ||
400 | * @wiphy: the wiphy to validate against | ||
401 | * @chandef: the channel definition to check | ||
402 | * @prohibited_flags: the regulatory chanenl flags that must not be set | ||
403 | */ | ||
404 | bool cfg80211_chandef_usable(struct wiphy *wiphy, | ||
405 | const struct cfg80211_chan_def *chandef, | ||
406 | u32 prohibited_flags); | ||
407 | |||
408 | /** | ||
391 | * enum survey_info_flags - survey information flags | 409 | * enum survey_info_flags - survey information flags |
392 | * | 410 | * |
393 | * @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in | 411 | * @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in |
@@ -520,6 +538,8 @@ struct cfg80211_beacon_data { | |||
520 | * @privacy: the BSS uses privacy | 538 | * @privacy: the BSS uses privacy |
521 | * @auth_type: Authentication type (algorithm) | 539 | * @auth_type: Authentication type (algorithm) |
522 | * @inactivity_timeout: time in seconds to determine station's inactivity. | 540 | * @inactivity_timeout: time in seconds to determine station's inactivity. |
541 | * @p2p_ctwindow: P2P CT Window | ||
542 | * @p2p_opp_ps: P2P opportunistic PS | ||
523 | */ | 543 | */ |
524 | struct cfg80211_ap_settings { | 544 | struct cfg80211_ap_settings { |
525 | struct cfg80211_chan_def chandef; | 545 | struct cfg80211_chan_def chandef; |
@@ -534,6 +554,8 @@ struct cfg80211_ap_settings { | |||
534 | bool privacy; | 554 | bool privacy; |
535 | enum nl80211_auth_type auth_type; | 555 | enum nl80211_auth_type auth_type; |
536 | int inactivity_timeout; | 556 | int inactivity_timeout; |
557 | u8 p2p_ctwindow; | ||
558 | bool p2p_opp_ps; | ||
537 | }; | 559 | }; |
538 | 560 | ||
539 | /** | 561 | /** |
@@ -895,6 +917,8 @@ struct mpath_info { | |||
895 | * @ap_isolate: do not forward packets between connected stations | 917 | * @ap_isolate: do not forward packets between connected stations |
896 | * @ht_opmode: HT Operation mode | 918 | * @ht_opmode: HT Operation mode |
897 | * (u16 = opmode, -1 = do not change) | 919 | * (u16 = opmode, -1 = do not change) |
920 | * @p2p_ctwindow: P2P CT Window (-1 = no change) | ||
921 | * @p2p_opp_ps: P2P opportunistic PS (-1 = no change) | ||
898 | */ | 922 | */ |
899 | struct bss_parameters { | 923 | struct bss_parameters { |
900 | int use_cts_prot; | 924 | int use_cts_prot; |
@@ -904,6 +928,7 @@ struct bss_parameters { | |||
904 | u8 basic_rates_len; | 928 | u8 basic_rates_len; |
905 | int ap_isolate; | 929 | int ap_isolate; |
906 | int ht_opmode; | 930 | int ht_opmode; |
931 | s8 p2p_ctwindow, p2p_opp_ps; | ||
907 | }; | 932 | }; |
908 | 933 | ||
909 | /** | 934 | /** |
@@ -1045,9 +1070,6 @@ struct ieee80211_txq_params { | |||
1045 | u8 aifs; | 1070 | u8 aifs; |
1046 | }; | 1071 | }; |
1047 | 1072 | ||
1048 | /* from net/wireless.h */ | ||
1049 | struct wiphy; | ||
1050 | |||
1051 | /** | 1073 | /** |
1052 | * DOC: Scanning and BSS list handling | 1074 | * DOC: Scanning and BSS list handling |
1053 | * | 1075 | * |
@@ -1184,6 +1206,18 @@ enum cfg80211_signal_type { | |||
1184 | }; | 1206 | }; |
1185 | 1207 | ||
1186 | /** | 1208 | /** |
1209 | * struct cfg80211_bss_ie_data - BSS entry IE data | ||
1210 | * @rcu_head: internal use, for freeing | ||
1211 | * @len: length of the IEs | ||
1212 | * @data: IE data | ||
1213 | */ | ||
1214 | struct cfg80211_bss_ies { | ||
1215 | struct rcu_head rcu_head; | ||
1216 | int len; | ||
1217 | u8 data[]; | ||
1218 | }; | ||
1219 | |||
1220 | /** | ||
1187 | * struct cfg80211_bss - BSS description | 1221 | * struct cfg80211_bss - BSS description |
1188 | * | 1222 | * |
1189 | * This structure describes a BSS (which may also be a mesh network) | 1223 | * This structure describes a BSS (which may also be a mesh network) |
@@ -1194,36 +1228,34 @@ enum cfg80211_signal_type { | |||
1194 | * @tsf: timestamp of last received update | 1228 | * @tsf: timestamp of last received update |
1195 | * @beacon_interval: the beacon interval as from the frame | 1229 | * @beacon_interval: the beacon interval as from the frame |
1196 | * @capability: the capability field in host byte order | 1230 | * @capability: the capability field in host byte order |
1197 | * @information_elements: the information elements (Note that there | 1231 | * @ies: the information elements (Note that there |
1198 | * is no guarantee that these are well-formed!); this is a pointer to | 1232 | * is no guarantee that these are well-formed!); this is a pointer to |
1199 | * either the beacon_ies or proberesp_ies depending on whether Probe | 1233 | * either the beacon_ies or proberesp_ies depending on whether Probe |
1200 | * Response frame has been received | 1234 | * Response frame has been received |
1201 | * @len_information_elements: total length of the information elements | ||
1202 | * @beacon_ies: the information elements from the last Beacon frame | 1235 | * @beacon_ies: the information elements from the last Beacon frame |
1203 | * @len_beacon_ies: total length of the beacon_ies | ||
1204 | * @proberesp_ies: the information elements from the last Probe Response frame | 1236 | * @proberesp_ies: the information elements from the last Probe Response frame |
1205 | * @len_proberesp_ies: total length of the proberesp_ies | ||
1206 | * @signal: signal strength value (type depends on the wiphy's signal_type) | 1237 | * @signal: signal strength value (type depends on the wiphy's signal_type) |
1207 | * @free_priv: function pointer to free private data | 1238 | * @free_priv: function pointer to free private data |
1208 | * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes | 1239 | * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes |
1209 | */ | 1240 | */ |
1210 | struct cfg80211_bss { | 1241 | struct cfg80211_bss { |
1242 | u64 tsf; | ||
1243 | |||
1211 | struct ieee80211_channel *channel; | 1244 | struct ieee80211_channel *channel; |
1212 | 1245 | ||
1213 | u8 bssid[ETH_ALEN]; | 1246 | const struct cfg80211_bss_ies __rcu *ies; |
1214 | u64 tsf; | 1247 | const struct cfg80211_bss_ies __rcu *beacon_ies; |
1248 | const struct cfg80211_bss_ies __rcu *proberesp_ies; | ||
1249 | |||
1250 | void (*free_priv)(struct cfg80211_bss *bss); | ||
1251 | |||
1252 | s32 signal; | ||
1253 | |||
1215 | u16 beacon_interval; | 1254 | u16 beacon_interval; |
1216 | u16 capability; | 1255 | u16 capability; |
1217 | u8 *information_elements; | ||
1218 | size_t len_information_elements; | ||
1219 | u8 *beacon_ies; | ||
1220 | size_t len_beacon_ies; | ||
1221 | u8 *proberesp_ies; | ||
1222 | size_t len_proberesp_ies; | ||
1223 | 1256 | ||
1224 | s32 signal; | 1257 | u8 bssid[ETH_ALEN]; |
1225 | 1258 | ||
1226 | void (*free_priv)(struct cfg80211_bss *bss); | ||
1227 | u8 priv[0] __attribute__((__aligned__(sizeof(void *)))); | 1259 | u8 priv[0] __attribute__((__aligned__(sizeof(void *)))); |
1228 | }; | 1260 | }; |
1229 | 1261 | ||
@@ -1231,6 +1263,9 @@ struct cfg80211_bss { | |||
1231 | * ieee80211_bss_get_ie - find IE with given ID | 1263 | * ieee80211_bss_get_ie - find IE with given ID |
1232 | * @bss: the bss to search | 1264 | * @bss: the bss to search |
1233 | * @ie: the IE ID | 1265 | * @ie: the IE ID |
1266 | * | ||
1267 | * Note that the return value is an RCU-protected pointer, so | ||
1268 | * rcu_read_lock() must be held when calling this function. | ||
1234 | * Returns %NULL if not found. | 1269 | * Returns %NULL if not found. |
1235 | */ | 1270 | */ |
1236 | const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie); | 1271 | const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie); |
diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h index 7f0df133d119..c3999632e616 100644 --- a/include/net/ieee80211_radiotap.h +++ b/include/net/ieee80211_radiotap.h | |||
@@ -186,6 +186,10 @@ struct ieee80211_radiotap_header { | |||
186 | * IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitless | 186 | * IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitless |
187 | * | 187 | * |
188 | * Contains the AMPDU information for the subframe. | 188 | * Contains the AMPDU information for the subframe. |
189 | * | ||
190 | * IEEE80211_RADIOTAP_VHT u16, u8, u8, u8[4], u8, u8, u16 | ||
191 | * | ||
192 | * Contains VHT information about this frame. | ||
189 | */ | 193 | */ |
190 | enum ieee80211_radiotap_type { | 194 | enum ieee80211_radiotap_type { |
191 | IEEE80211_RADIOTAP_TSFT = 0, | 195 | IEEE80211_RADIOTAP_TSFT = 0, |
@@ -209,6 +213,7 @@ enum ieee80211_radiotap_type { | |||
209 | 213 | ||
210 | IEEE80211_RADIOTAP_MCS = 19, | 214 | IEEE80211_RADIOTAP_MCS = 19, |
211 | IEEE80211_RADIOTAP_AMPDU_STATUS = 20, | 215 | IEEE80211_RADIOTAP_AMPDU_STATUS = 20, |
216 | IEEE80211_RADIOTAP_VHT = 21, | ||
212 | 217 | ||
213 | /* valid in every it_present bitmap, even vendor namespaces */ | 218 | /* valid in every it_present bitmap, even vendor namespaces */ |
214 | IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, | 219 | IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, |
@@ -282,6 +287,25 @@ enum ieee80211_radiotap_type { | |||
282 | #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010 | 287 | #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010 |
283 | #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020 | 288 | #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020 |
284 | 289 | ||
290 | /* For IEEE80211_RADIOTAP_VHT */ | ||
291 | #define IEEE80211_RADIOTAP_VHT_KNOWN_STBC 0x0001 | ||
292 | #define IEEE80211_RADIOTAP_VHT_KNOWN_TXOP_PS_NA 0x0002 | ||
293 | #define IEEE80211_RADIOTAP_VHT_KNOWN_GI 0x0004 | ||
294 | #define IEEE80211_RADIOTAP_VHT_KNOWN_SGI_NSYM_DIS 0x0008 | ||
295 | #define IEEE80211_RADIOTAP_VHT_KNOWN_LDPC_EXTRA_OFDM_SYM 0x0010 | ||
296 | #define IEEE80211_RADIOTAP_VHT_KNOWN_BEAMFORMED 0x0020 | ||
297 | #define IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH 0x0040 | ||
298 | #define IEEE80211_RADIOTAP_VHT_KNOWN_GROUP_ID 0x0080 | ||
299 | #define IEEE80211_RADIOTAP_VHT_KNOWN_PARTIAL_AID 0x0100 | ||
300 | |||
301 | #define IEEE80211_RADIOTAP_VHT_FLAG_STBC 0x01 | ||
302 | #define IEEE80211_RADIOTAP_VHT_FLAG_TXOP_PS_NA 0x02 | ||
303 | #define IEEE80211_RADIOTAP_VHT_FLAG_SGI 0x04 | ||
304 | #define IEEE80211_RADIOTAP_VHT_FLAG_SGI_NSYM_M10_9 0x08 | ||
305 | #define IEEE80211_RADIOTAP_VHT_FLAG_LDPC_EXTRA_OFDM_SYM 0x10 | ||
306 | #define IEEE80211_RADIOTAP_VHT_FLAG_BEAMFORMED 0x20 | ||
307 | |||
308 | |||
285 | /* helpers */ | 309 | /* helpers */ |
286 | static inline int ieee80211_get_radiotap_len(unsigned char *data) | 310 | static inline int ieee80211_get_radiotap_len(unsigned char *data) |
287 | { | 311 | { |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index db7680acd0da..1c02fb3b3817 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -164,7 +164,7 @@ enum ieee80211_chanctx_change { | |||
164 | * active on the channel to receive MIMO transmissions | 164 | * active on the channel to receive MIMO transmissions |
165 | * @rx_chains_dynamic: The number of RX chains that must be enabled | 165 | * @rx_chains_dynamic: The number of RX chains that must be enabled |
166 | * after RTS/CTS handshake to receive SMPS MIMO transmissions; | 166 | * after RTS/CTS handshake to receive SMPS MIMO transmissions; |
167 | * this will always be >= @rx_chains_always. | 167 | * this will always be >= @rx_chains_static. |
168 | * @drv_priv: data area for driver use, will always be aligned to | 168 | * @drv_priv: data area for driver use, will always be aligned to |
169 | * sizeof(void *), size is determined in hw information. | 169 | * sizeof(void *), size is determined in hw information. |
170 | */ | 170 | */ |
@@ -1473,6 +1473,10 @@ enum ieee80211_hw_flags { | |||
1473 | * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only | 1473 | * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only |
1474 | * adding _BW is supported today. | 1474 | * adding _BW is supported today. |
1475 | * | 1475 | * |
1476 | * @radiotap_vht_details: lists which VHT MCS information the HW reports, | ||
1477 | * the default is _GI | _BANDWIDTH. | ||
1478 | * Use the %IEEE80211_RADIOTAP_VHT_KNOWN_* values. | ||
1479 | * | ||
1476 | * @netdev_features: netdev features to be set in each netdev created | 1480 | * @netdev_features: netdev features to be set in each netdev created |
1477 | * from this HW. Note only HW checksum features are currently | 1481 | * from this HW. Note only HW checksum features are currently |
1478 | * compatible with mac80211. Other feature bits will be rejected. | 1482 | * compatible with mac80211. Other feature bits will be rejected. |
@@ -1499,6 +1503,7 @@ struct ieee80211_hw { | |||
1499 | u8 max_tx_aggregation_subframes; | 1503 | u8 max_tx_aggregation_subframes; |
1500 | u8 offchannel_tx_hw_queue; | 1504 | u8 offchannel_tx_hw_queue; |
1501 | u8 radiotap_mcs_details; | 1505 | u8 radiotap_mcs_details; |
1506 | u16 radiotap_vht_details; | ||
1502 | netdev_features_t netdev_features; | 1507 | netdev_features_t netdev_features; |
1503 | }; | 1508 | }; |
1504 | 1509 | ||
@@ -3139,8 +3144,7 @@ struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw, | |||
3139 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | 3144 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
3140 | * @ssid: SSID buffer | 3145 | * @ssid: SSID buffer |
3141 | * @ssid_len: length of SSID | 3146 | * @ssid_len: length of SSID |
3142 | * @ie: buffer containing all IEs except SSID for the template | 3147 | * @tailroom: tailroom to reserve at end of SKB for IEs |
3143 | * @ie_len: length of the IE buffer | ||
3144 | * | 3148 | * |
3145 | * Creates a Probe Request template which can, for example, be uploaded to | 3149 | * Creates a Probe Request template which can, for example, be uploaded to |
3146 | * hardware. | 3150 | * hardware. |
@@ -3148,7 +3152,7 @@ struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw, | |||
3148 | struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw, | 3152 | struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw, |
3149 | struct ieee80211_vif *vif, | 3153 | struct ieee80211_vif *vif, |
3150 | const u8 *ssid, size_t ssid_len, | 3154 | const u8 *ssid, size_t ssid_len, |
3151 | const u8 *ie, size_t ie_len); | 3155 | size_t tailroom); |
3152 | 3156 | ||
3153 | /** | 3157 | /** |
3154 | * ieee80211_rts_get - RTS frame generation function | 3158 | * ieee80211_rts_get - RTS frame generation function |
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 33a417481ad8..e3e19f8b16f2 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h | |||
@@ -1303,6 +1303,13 @@ enum nl80211_commands { | |||
1303 | * | 1303 | * |
1304 | * @NL80211_ATTR_SCAN_FLAGS: scan request control flags (u32) | 1304 | * @NL80211_ATTR_SCAN_FLAGS: scan request control flags (u32) |
1305 | * | 1305 | * |
1306 | * @NL80211_ATTR_P2P_CTWINDOW: P2P GO Client Traffic Window (u8), used with | ||
1307 | * the START_AP and SET_BSS commands | ||
1308 | * @NL80211_ATTR_P2P_OPPPS: P2P GO opportunistic PS (u8), used with the | ||
1309 | * START_AP and SET_BSS commands. This can have the values 0 or 1; | ||
1310 | * if not given in START_AP 0 is assumed, if not given in SET_BSS | ||
1311 | * no change is made. | ||
1312 | * | ||
1306 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 1313 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
1307 | * @__NL80211_ATTR_AFTER_LAST: internal use | 1314 | * @__NL80211_ATTR_AFTER_LAST: internal use |
1308 | */ | 1315 | */ |
@@ -1570,6 +1577,9 @@ enum nl80211_attrs { | |||
1570 | NL80211_ATTR_CENTER_FREQ1, | 1577 | NL80211_ATTR_CENTER_FREQ1, |
1571 | NL80211_ATTR_CENTER_FREQ2, | 1578 | NL80211_ATTR_CENTER_FREQ2, |
1572 | 1579 | ||
1580 | NL80211_ATTR_P2P_CTWINDOW, | ||
1581 | NL80211_ATTR_P2P_OPPPS, | ||
1582 | |||
1573 | /* add attributes here, update the policy in nl80211.c */ | 1583 | /* add attributes here, update the policy in nl80211.c */ |
1574 | 1584 | ||
1575 | __NL80211_ATTR_AFTER_LAST, | 1585 | __NL80211_ATTR_AFTER_LAST, |
@@ -3126,6 +3136,10 @@ enum nl80211_ap_sme_features { | |||
3126 | * @NL80211_FEATURE_NEED_OBSS_SCAN: The driver expects userspace to perform | 3136 | * @NL80211_FEATURE_NEED_OBSS_SCAN: The driver expects userspace to perform |
3127 | * OBSS scans and generate 20/40 BSS coex reports. This flag is used only | 3137 | * OBSS scans and generate 20/40 BSS coex reports. This flag is used only |
3128 | * for drivers implementing the CONNECT API, for AUTH/ASSOC it is implied. | 3138 | * for drivers implementing the CONNECT API, for AUTH/ASSOC it is implied. |
3139 | * @NL80211_FEATURE_P2P_GO_CTWIN: P2P GO implementation supports CT Window | ||
3140 | * setting | ||
3141 | * @NL80211_FEATURE_P2P_GO_OPPPS: P2P GO implementation supports opportunistic | ||
3142 | * powersave | ||
3129 | */ | 3143 | */ |
3130 | enum nl80211_feature_flags { | 3144 | enum nl80211_feature_flags { |
3131 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, | 3145 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, |
@@ -3139,6 +3153,8 @@ enum nl80211_feature_flags { | |||
3139 | NL80211_FEATURE_AP_SCAN = 1 << 8, | 3153 | NL80211_FEATURE_AP_SCAN = 1 << 8, |
3140 | NL80211_FEATURE_VIF_TXPOWER = 1 << 9, | 3154 | NL80211_FEATURE_VIF_TXPOWER = 1 << 9, |
3141 | NL80211_FEATURE_NEED_OBSS_SCAN = 1 << 10, | 3155 | NL80211_FEATURE_NEED_OBSS_SCAN = 1 << 10, |
3156 | NL80211_FEATURE_P2P_GO_CTWIN = 1 << 11, | ||
3157 | NL80211_FEATURE_P2P_GO_OPPPS = 1 << 12, | ||
3142 | }; | 3158 | }; |
3143 | 3159 | ||
3144 | /** | 3160 | /** |