diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/Kbuild | 1 | ||||
-rw-r--r-- | include/linux/bcma/bcma.h | 7 | ||||
-rw-r--r-- | include/linux/bcma/bcma_driver_pci.h | 11 | ||||
-rw-r--r-- | include/linux/bootmem.h | 3 | ||||
-rw-r--r-- | include/linux/if_arp.h | 2 | ||||
-rw-r--r-- | include/linux/ipx.h | 2 | ||||
-rw-r--r-- | include/linux/micrel_phy.h | 2 | ||||
-rw-r--r-- | include/linux/nfc/pn544.h | 7 | ||||
-rw-r--r-- | include/linux/nl80211.h | 8 | ||||
-rw-r--r-- | include/linux/ssb/ssb.h | 1 | ||||
-rw-r--r-- | include/linux/ssb/ssb_regs.h | 61 | ||||
-rw-r--r-- | include/net/bluetooth/bluetooth.h | 32 | ||||
-rw-r--r-- | include/net/bluetooth/hci.h | 8 | ||||
-rw-r--r-- | include/net/bluetooth/hci_core.h | 67 | ||||
-rw-r--r-- | include/net/bluetooth/l2cap.h | 93 | ||||
-rw-r--r-- | include/net/bluetooth/mgmt.h | 9 | ||||
-rw-r--r-- | include/net/bluetooth/smp.h | 2 | ||||
-rw-r--r-- | include/net/cfg80211.h | 6 | ||||
-rw-r--r-- | include/net/mac80211.h | 12 | ||||
-rw-r--r-- | include/net/nfc/hci.h | 6 | ||||
-rw-r--r-- | include/net/nfc/nfc.h | 19 | ||||
-rw-r--r-- | include/net/nfc/shdlc.h | 2 |
22 files changed, 277 insertions, 84 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 74af192ef7ae..4cd59b95858f 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -270,6 +270,7 @@ header-y += netfilter_ipv4.h | |||
270 | header-y += netfilter_ipv6.h | 270 | header-y += netfilter_ipv6.h |
271 | header-y += netlink.h | 271 | header-y += netlink.h |
272 | header-y += netrom.h | 272 | header-y += netrom.h |
273 | header-y += nfc.h | ||
273 | header-y += nfs.h | 274 | header-y += nfs.h |
274 | header-y += nfs2.h | 275 | header-y += nfs2.h |
275 | header-y += nfs3.h | 276 | header-y += nfs3.h |
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h index 98bb2901d7b7..8deaf6d050c3 100644 --- a/include/linux/bcma/bcma.h +++ b/include/linux/bcma/bcma.h | |||
@@ -26,6 +26,11 @@ struct bcma_chipinfo { | |||
26 | u8 pkg; | 26 | u8 pkg; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | struct bcma_boardinfo { | ||
30 | u16 vendor; | ||
31 | u16 type; | ||
32 | }; | ||
33 | |||
29 | enum bcma_clkmode { | 34 | enum bcma_clkmode { |
30 | BCMA_CLKMODE_FAST, | 35 | BCMA_CLKMODE_FAST, |
31 | BCMA_CLKMODE_DYNAMIC, | 36 | BCMA_CLKMODE_DYNAMIC, |
@@ -199,6 +204,8 @@ struct bcma_bus { | |||
199 | 204 | ||
200 | struct bcma_chipinfo chipinfo; | 205 | struct bcma_chipinfo chipinfo; |
201 | 206 | ||
207 | struct bcma_boardinfo boardinfo; | ||
208 | |||
202 | struct bcma_device *mapped_core; | 209 | struct bcma_device *mapped_core; |
203 | struct list_head cores; | 210 | struct list_head cores; |
204 | u8 nr_cores; | 211 | u8 nr_cores; |
diff --git a/include/linux/bcma/bcma_driver_pci.h b/include/linux/bcma/bcma_driver_pci.h index 46c71e27d31f..41da581e1612 100644 --- a/include/linux/bcma/bcma_driver_pci.h +++ b/include/linux/bcma/bcma_driver_pci.h | |||
@@ -87,6 +87,13 @@ struct pci_dev; | |||
87 | #define BCMA_CORE_PCI_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */ | 87 | #define BCMA_CORE_PCI_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */ |
88 | #define BCMA_CORE_PCI_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */ | 88 | #define BCMA_CORE_PCI_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */ |
89 | #define BCMA_CORE_PCI_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */ | 89 | #define BCMA_CORE_PCI_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */ |
90 | #define BCMA_CORE_PCI_SPROM_PI_OFFSET 0 /* first word */ | ||
91 | #define BCMA_CORE_PCI_SPROM_PI_MASK 0xf000 /* bit 15:12 */ | ||
92 | #define BCMA_CORE_PCI_SPROM_PI_SHIFT 12 /* bit 15:12 */ | ||
93 | #define BCMA_CORE_PCI_SPROM_MISC_CONFIG 5 /* word 5 */ | ||
94 | #define BCMA_CORE_PCI_SPROM_L23READY_EXIT_NOPERST 0x8000 /* bit 15 */ | ||
95 | #define BCMA_CORE_PCI_SPROM_CLKREQ_OFFSET_REV5 20 /* word 20 for srom rev <= 5 */ | ||
96 | #define BCMA_CORE_PCI_SPROM_CLKREQ_ENB 0x0800 /* bit 11 */ | ||
90 | 97 | ||
91 | /* SBtoPCIx */ | 98 | /* SBtoPCIx */ |
92 | #define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000 | 99 | #define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000 |
@@ -133,6 +140,7 @@ struct pci_dev; | |||
133 | #define BCMA_CORE_PCI_DLLP_LRREG 0x120 /* Link Replay */ | 140 | #define BCMA_CORE_PCI_DLLP_LRREG 0x120 /* Link Replay */ |
134 | #define BCMA_CORE_PCI_DLLP_LACKTOREG 0x124 /* Link Ack Timeout */ | 141 | #define BCMA_CORE_PCI_DLLP_LACKTOREG 0x124 /* Link Ack Timeout */ |
135 | #define BCMA_CORE_PCI_DLLP_PMTHRESHREG 0x128 /* Power Management Threshold */ | 142 | #define BCMA_CORE_PCI_DLLP_PMTHRESHREG 0x128 /* Power Management Threshold */ |
143 | #define BCMA_CORE_PCI_ASPMTIMER_EXTEND 0x01000000 /* > rev7: enable extend ASPM timer */ | ||
136 | #define BCMA_CORE_PCI_DLLP_RTRYWPREG 0x12C /* Retry buffer write ptr */ | 144 | #define BCMA_CORE_PCI_DLLP_RTRYWPREG 0x12C /* Retry buffer write ptr */ |
137 | #define BCMA_CORE_PCI_DLLP_RTRYRPREG 0x130 /* Retry buffer Read ptr */ | 145 | #define BCMA_CORE_PCI_DLLP_RTRYRPREG 0x130 /* Retry buffer Read ptr */ |
138 | #define BCMA_CORE_PCI_DLLP_RTRYPPREG 0x134 /* Retry buffer Purged ptr */ | 146 | #define BCMA_CORE_PCI_DLLP_RTRYPPREG 0x134 /* Retry buffer Purged ptr */ |
@@ -201,12 +209,15 @@ struct bcma_drv_pci { | |||
201 | }; | 209 | }; |
202 | 210 | ||
203 | /* Register access */ | 211 | /* Register access */ |
212 | #define pcicore_read16(pc, offset) bcma_read16((pc)->core, offset) | ||
204 | #define pcicore_read32(pc, offset) bcma_read32((pc)->core, offset) | 213 | #define pcicore_read32(pc, offset) bcma_read32((pc)->core, offset) |
214 | #define pcicore_write16(pc, offset, val) bcma_write16((pc)->core, offset, val) | ||
205 | #define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val) | 215 | #define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val) |
206 | 216 | ||
207 | extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc); | 217 | extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc); |
208 | extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, | 218 | extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, |
209 | struct bcma_device *core, bool enable); | 219 | struct bcma_device *core, bool enable); |
220 | extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend); | ||
210 | 221 | ||
211 | extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); | 222 | extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); |
212 | extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); | 223 | extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 66d3e954eb6c..1a0cd270bb7a 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -154,7 +154,8 @@ extern void *alloc_large_system_hash(const char *tablename, | |||
154 | int flags, | 154 | int flags, |
155 | unsigned int *_hash_shift, | 155 | unsigned int *_hash_shift, |
156 | unsigned int *_hash_mask, | 156 | unsigned int *_hash_mask, |
157 | unsigned long limit); | 157 | unsigned long low_limit, |
158 | unsigned long high_limit); | ||
158 | 159 | ||
159 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ | 160 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ |
160 | #define HASH_SMALL 0x00000002 /* sub-page allocation allowed, min | 161 | #define HASH_SMALL 0x00000002 /* sub-page allocation allowed, min |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index 26cb3c2c5c71..f0e69c6e8208 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
@@ -82,7 +82,7 @@ | |||
82 | #define ARPHRD_FCPL 786 /* Fibrechannel public loop */ | 82 | #define ARPHRD_FCPL 786 /* Fibrechannel public loop */ |
83 | #define ARPHRD_FCFABRIC 787 /* Fibrechannel fabric */ | 83 | #define ARPHRD_FCFABRIC 787 /* Fibrechannel fabric */ |
84 | /* 787->799 reserved for fibrechannel media types */ | 84 | /* 787->799 reserved for fibrechannel media types */ |
85 | /* 800 used to be used for token ring */ | 85 | #define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */ |
86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ | 86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ |
87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ |
diff --git a/include/linux/ipx.h b/include/linux/ipx.h index 8f0243982eb6..3d48014cdd71 100644 --- a/include/linux/ipx.h +++ b/include/linux/ipx.h | |||
@@ -38,7 +38,7 @@ struct ipx_interface_definition { | |||
38 | #define IPX_FRAME_8022 2 | 38 | #define IPX_FRAME_8022 2 |
39 | #define IPX_FRAME_ETHERII 3 | 39 | #define IPX_FRAME_ETHERII 3 |
40 | #define IPX_FRAME_8023 4 | 40 | #define IPX_FRAME_8023 4 |
41 | /* obsolete token ring was 5 */ | 41 | #define IPX_FRAME_TR_8022 5 /* obsolete */ |
42 | unsigned char ipx_special; | 42 | unsigned char ipx_special; |
43 | #define IPX_SPECIAL_NONE 0 | 43 | #define IPX_SPECIAL_NONE 0 |
44 | #define IPX_PRIMARY 1 | 44 | #define IPX_PRIMARY 1 |
diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h index dd8da342a991..61f0905bdc48 100644 --- a/include/linux/micrel_phy.h +++ b/include/linux/micrel_phy.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | #define MICREL_PHY_ID_MASK 0x00fffff0 | 4 | #define MICREL_PHY_ID_MASK 0x00fffff0 |
5 | 5 | ||
6 | #define PHY_ID_KSZ9021 0x00221611 | 6 | #define PHY_ID_KSZ9021 0x00221610 |
7 | #define PHY_ID_KS8737 0x00221720 | 7 | #define PHY_ID_KS8737 0x00221720 |
8 | #define PHY_ID_KS8041 0x00221510 | 8 | #define PHY_ID_KS8041 0x00221510 |
9 | #define PHY_ID_KS8051 0x00221550 | 9 | #define PHY_ID_KS8051 0x00221550 |
diff --git a/include/linux/nfc/pn544.h b/include/linux/nfc/pn544.h index 7ab8521f2347..9890bbaf4328 100644 --- a/include/linux/nfc/pn544.h +++ b/include/linux/nfc/pn544.h | |||
@@ -84,6 +84,12 @@ struct pn544_fw_packet { | |||
84 | }; | 84 | }; |
85 | 85 | ||
86 | #ifdef __KERNEL__ | 86 | #ifdef __KERNEL__ |
87 | enum { | ||
88 | NFC_GPIO_ENABLE, | ||
89 | NFC_GPIO_FW_RESET, | ||
90 | NFC_GPIO_IRQ | ||
91 | }; | ||
92 | |||
87 | /* board config */ | 93 | /* board config */ |
88 | struct pn544_nfc_platform_data { | 94 | struct pn544_nfc_platform_data { |
89 | int (*request_resources) (struct i2c_client *client); | 95 | int (*request_resources) (struct i2c_client *client); |
@@ -91,6 +97,7 @@ struct pn544_nfc_platform_data { | |||
91 | void (*enable) (int fw); | 97 | void (*enable) (int fw); |
92 | int (*test) (void); | 98 | int (*test) (void); |
93 | void (*disable) (void); | 99 | void (*disable) (void); |
100 | int (*get_gpio)(int type); | ||
94 | }; | 101 | }; |
95 | #endif /* __KERNEL__ */ | 102 | #endif /* __KERNEL__ */ |
96 | 103 | ||
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 2540e86d99ab..a6959f72745e 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -1594,6 +1594,8 @@ enum nl80211_sta_flags { | |||
1594 | NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1 | 1594 | NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1 |
1595 | }; | 1595 | }; |
1596 | 1596 | ||
1597 | #define NL80211_STA_FLAG_MAX_OLD_API NL80211_STA_FLAG_TDLS_PEER | ||
1598 | |||
1597 | /** | 1599 | /** |
1598 | * struct nl80211_sta_flag_update - station flags mask/set | 1600 | * struct nl80211_sta_flag_update - station flags mask/set |
1599 | * @mask: mask of station flags to set | 1601 | * @mask: mask of station flags to set |
@@ -1994,9 +1996,9 @@ enum nl80211_reg_rule_flags { | |||
1994 | * enum nl80211_dfs_regions - regulatory DFS regions | 1996 | * enum nl80211_dfs_regions - regulatory DFS regions |
1995 | * | 1997 | * |
1996 | * @NL80211_DFS_UNSET: Country has no DFS master region specified | 1998 | * @NL80211_DFS_UNSET: Country has no DFS master region specified |
1997 | * @NL80211_DFS_FCC_: Country follows DFS master rules from FCC | 1999 | * @NL80211_DFS_FCC: Country follows DFS master rules from FCC |
1998 | * @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI | 2000 | * @NL80211_DFS_ETSI: Country follows DFS master rules from ETSI |
1999 | * @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec | 2001 | * @NL80211_DFS_JP: Country follows DFS master rules from JP/MKK/Telec |
2000 | */ | 2002 | */ |
2001 | enum nl80211_dfs_regions { | 2003 | enum nl80211_dfs_regions { |
2002 | NL80211_DFS_UNSET = 0, | 2004 | NL80211_DFS_UNSET = 0, |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index d27683180025..bc14bd738ade 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
@@ -188,7 +188,6 @@ struct ssb_sprom { | |||
188 | struct ssb_boardinfo { | 188 | struct ssb_boardinfo { |
189 | u16 vendor; | 189 | u16 vendor; |
190 | u16 type; | 190 | u16 type; |
191 | u8 rev; | ||
192 | }; | 191 | }; |
193 | 192 | ||
194 | 193 | ||
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index 40b1ef8595ee..a0525019e1d1 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h | |||
@@ -228,6 +228,7 @@ | |||
228 | #define SSB_SPROM1_AGAIN_BG_SHIFT 0 | 228 | #define SSB_SPROM1_AGAIN_BG_SHIFT 0 |
229 | #define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */ | 229 | #define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */ |
230 | #define SSB_SPROM1_AGAIN_A_SHIFT 8 | 230 | #define SSB_SPROM1_AGAIN_A_SHIFT 8 |
231 | #define SSB_SPROM1_CCODE 0x0076 | ||
231 | 232 | ||
232 | /* SPROM Revision 2 (inherits from rev 1) */ | 233 | /* SPROM Revision 2 (inherits from rev 1) */ |
233 | #define SSB_SPROM2_BFLHI 0x0038 /* Boardflags (high 16 bits) */ | 234 | #define SSB_SPROM2_BFLHI 0x0038 /* Boardflags (high 16 bits) */ |
@@ -267,6 +268,7 @@ | |||
267 | #define SSB_SPROM3_OFDMGPO 0x107A /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ | 268 | #define SSB_SPROM3_OFDMGPO 0x107A /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ |
268 | 269 | ||
269 | /* SPROM Revision 4 */ | 270 | /* SPROM Revision 4 */ |
271 | #define SSB_SPROM4_BOARDREV 0x0042 /* Board revision */ | ||
270 | #define SSB_SPROM4_BFLLO 0x0044 /* Boardflags (low 16 bits) */ | 272 | #define SSB_SPROM4_BFLLO 0x0044 /* Boardflags (low 16 bits) */ |
271 | #define SSB_SPROM4_BFLHI 0x0046 /* Board Flags Hi */ | 273 | #define SSB_SPROM4_BFLHI 0x0046 /* Board Flags Hi */ |
272 | #define SSB_SPROM4_BFL2LO 0x0048 /* Board flags 2 (low 16 bits) */ | 274 | #define SSB_SPROM4_BFL2LO 0x0048 /* Board flags 2 (low 16 bits) */ |
@@ -389,6 +391,11 @@ | |||
389 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ | 391 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ |
390 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ | 392 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ |
391 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 | 393 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 |
394 | #define SSB_SPROM8_LEDDC 0x009A | ||
395 | #define SSB_SPROM8_LEDDC_ON 0xFF00 /* oncount */ | ||
396 | #define SSB_SPROM8_LEDDC_ON_SHIFT 8 | ||
397 | #define SSB_SPROM8_LEDDC_OFF 0x00FF /* offcount */ | ||
398 | #define SSB_SPROM8_LEDDC_OFF_SHIFT 0 | ||
392 | #define SSB_SPROM8_ANTAVAIL 0x009C /* Antenna available bitfields*/ | 399 | #define SSB_SPROM8_ANTAVAIL 0x009C /* Antenna available bitfields*/ |
393 | #define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */ | 400 | #define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */ |
394 | #define SSB_SPROM8_ANTAVAIL_A_SHIFT 8 | 401 | #define SSB_SPROM8_ANTAVAIL_A_SHIFT 8 |
@@ -404,6 +411,13 @@ | |||
404 | #define SSB_SPROM8_AGAIN2_SHIFT 0 | 411 | #define SSB_SPROM8_AGAIN2_SHIFT 0 |
405 | #define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */ | 412 | #define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */ |
406 | #define SSB_SPROM8_AGAIN3_SHIFT 8 | 413 | #define SSB_SPROM8_AGAIN3_SHIFT 8 |
414 | #define SSB_SPROM8_TXRXC 0x00A2 | ||
415 | #define SSB_SPROM8_TXRXC_TXCHAIN 0x000f | ||
416 | #define SSB_SPROM8_TXRXC_TXCHAIN_SHIFT 0 | ||
417 | #define SSB_SPROM8_TXRXC_RXCHAIN 0x00f0 | ||
418 | #define SSB_SPROM8_TXRXC_RXCHAIN_SHIFT 4 | ||
419 | #define SSB_SPROM8_TXRXC_SWITCH 0xff00 | ||
420 | #define SSB_SPROM8_TXRXC_SWITCH_SHIFT 8 | ||
407 | #define SSB_SPROM8_RSSIPARM2G 0x00A4 /* RSSI params for 2GHz */ | 421 | #define SSB_SPROM8_RSSIPARM2G 0x00A4 /* RSSI params for 2GHz */ |
408 | #define SSB_SPROM8_RSSISMF2G 0x000F | 422 | #define SSB_SPROM8_RSSISMF2G 0x000F |
409 | #define SSB_SPROM8_RSSISMC2G 0x00F0 | 423 | #define SSB_SPROM8_RSSISMC2G 0x00F0 |
@@ -430,6 +444,7 @@ | |||
430 | #define SSB_SPROM8_TRI5GH_SHIFT 8 | 444 | #define SSB_SPROM8_TRI5GH_SHIFT 8 |
431 | #define SSB_SPROM8_RXPO 0x00AC /* RX power offsets */ | 445 | #define SSB_SPROM8_RXPO 0x00AC /* RX power offsets */ |
432 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ | 446 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ |
447 | #define SSB_SPROM8_RXPO2G_SHIFT 0 | ||
433 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ | 448 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ |
434 | #define SSB_SPROM8_RXPO5G_SHIFT 8 | 449 | #define SSB_SPROM8_RXPO5G_SHIFT 8 |
435 | #define SSB_SPROM8_FEM2G 0x00AE | 450 | #define SSB_SPROM8_FEM2G 0x00AE |
@@ -445,10 +460,38 @@ | |||
445 | #define SSB_SROM8_FEM_ANTSWLUT 0xF800 | 460 | #define SSB_SROM8_FEM_ANTSWLUT 0xF800 |
446 | #define SSB_SROM8_FEM_ANTSWLUT_SHIFT 11 | 461 | #define SSB_SROM8_FEM_ANTSWLUT_SHIFT 11 |
447 | #define SSB_SPROM8_THERMAL 0x00B2 | 462 | #define SSB_SPROM8_THERMAL 0x00B2 |
448 | #define SSB_SPROM8_MPWR_RAWTS 0x00B4 | 463 | #define SSB_SPROM8_THERMAL_OFFSET 0x00ff |
449 | #define SSB_SPROM8_TS_SLP_OPT_CORRX 0x00B6 | 464 | #define SSB_SPROM8_THERMAL_OFFSET_SHIFT 0 |
450 | #define SSB_SPROM8_FOC_HWIQ_IQSWP 0x00B8 | 465 | #define SSB_SPROM8_THERMAL_TRESH 0xff00 |
451 | #define SSB_SPROM8_PHYCAL_TEMPDELTA 0x00BA | 466 | #define SSB_SPROM8_THERMAL_TRESH_SHIFT 8 |
467 | /* Temp sense related entries */ | ||
468 | #define SSB_SPROM8_RAWTS 0x00B4 | ||
469 | #define SSB_SPROM8_RAWTS_RAWTEMP 0x01ff | ||
470 | #define SSB_SPROM8_RAWTS_RAWTEMP_SHIFT 0 | ||
471 | #define SSB_SPROM8_RAWTS_MEASPOWER 0xfe00 | ||
472 | #define SSB_SPROM8_RAWTS_MEASPOWER_SHIFT 9 | ||
473 | #define SSB_SPROM8_OPT_CORRX 0x00B6 | ||
474 | #define SSB_SPROM8_OPT_CORRX_TEMP_SLOPE 0x00ff | ||
475 | #define SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT 0 | ||
476 | #define SSB_SPROM8_OPT_CORRX_TEMPCORRX 0xfc00 | ||
477 | #define SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT 10 | ||
478 | #define SSB_SPROM8_OPT_CORRX_TEMP_OPTION 0x0300 | ||
479 | #define SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT 8 | ||
480 | /* FOC: freiquency offset correction, HWIQ: H/W IOCAL enable, IQSWP: IQ CAL swap disable */ | ||
481 | #define SSB_SPROM8_HWIQ_IQSWP 0x00B8 | ||
482 | #define SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR 0x000f | ||
483 | #define SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT 0 | ||
484 | #define SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP 0x0010 | ||
485 | #define SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT 4 | ||
486 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL 0x0020 | ||
487 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT 5 | ||
488 | #define SSB_SPROM8_TEMPDELTA 0x00BA | ||
489 | #define SSB_SPROM8_TEMPDELTA_PHYCAL 0x00ff | ||
490 | #define SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT 0 | ||
491 | #define SSB_SPROM8_TEMPDELTA_PERIOD 0x0f00 | ||
492 | #define SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT 8 | ||
493 | #define SSB_SPROM8_TEMPDELTA_HYSTERESIS 0xf000 | ||
494 | #define SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT 12 | ||
452 | 495 | ||
453 | /* There are 4 blocks with power info sharing the same layout */ | 496 | /* There are 4 blocks with power info sharing the same layout */ |
454 | #define SSB_SROM8_PWR_INFO_CORE0 0x00C0 | 497 | #define SSB_SROM8_PWR_INFO_CORE0 0x00C0 |
@@ -513,6 +556,16 @@ | |||
513 | #define SSB_SPROM8_OFDM5GLPO 0x014A /* 5.2GHz OFDM power offset */ | 556 | #define SSB_SPROM8_OFDM5GLPO 0x014A /* 5.2GHz OFDM power offset */ |
514 | #define SSB_SPROM8_OFDM5GHPO 0x014E /* 5.8GHz OFDM power offset */ | 557 | #define SSB_SPROM8_OFDM5GHPO 0x014E /* 5.8GHz OFDM power offset */ |
515 | 558 | ||
559 | #define SSB_SPROM8_2G_MCSPO 0x0152 | ||
560 | #define SSB_SPROM8_5G_MCSPO 0x0162 | ||
561 | #define SSB_SPROM8_5GL_MCSPO 0x0172 | ||
562 | #define SSB_SPROM8_5GH_MCSPO 0x0182 | ||
563 | |||
564 | #define SSB_SPROM8_CDDPO 0x0192 | ||
565 | #define SSB_SPROM8_STBCPO 0x0194 | ||
566 | #define SSB_SPROM8_BW40PO 0x0196 | ||
567 | #define SSB_SPROM8_BWDUPPO 0x0198 | ||
568 | |||
516 | /* Values for boardflags_lo read from SPROM */ | 569 | /* Values for boardflags_lo read from SPROM */ |
517 | #define SSB_BFL_BTCOEXIST 0x0001 /* implements Bluetooth coexistance */ | 570 | #define SSB_BFL_BTCOEXIST 0x0001 /* implements Bluetooth coexistance */ |
518 | #define SSB_BFL_PACTRL 0x0002 /* GPIO 9 controlling the PA */ | 571 | #define SSB_BFL_PACTRL 0x0002 /* GPIO 9 controlling the PA */ |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index a65910bda381..961669b648fd 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
@@ -163,6 +163,11 @@ typedef struct { | |||
163 | __u8 b[6]; | 163 | __u8 b[6]; |
164 | } __packed bdaddr_t; | 164 | } __packed bdaddr_t; |
165 | 165 | ||
166 | /* BD Address type */ | ||
167 | #define BDADDR_BREDR 0x00 | ||
168 | #define BDADDR_LE_PUBLIC 0x01 | ||
169 | #define BDADDR_LE_RANDOM 0x02 | ||
170 | |||
166 | #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) | 171 | #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) |
167 | #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) | 172 | #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) |
168 | 173 | ||
@@ -178,7 +183,6 @@ static inline void bacpy(bdaddr_t *dst, bdaddr_t *src) | |||
178 | 183 | ||
179 | void baswap(bdaddr_t *dst, bdaddr_t *src); | 184 | void baswap(bdaddr_t *dst, bdaddr_t *src); |
180 | char *batostr(bdaddr_t *ba); | 185 | char *batostr(bdaddr_t *ba); |
181 | bdaddr_t *strtoba(char *str); | ||
182 | 186 | ||
183 | /* Common socket structures and functions */ | 187 | /* Common socket structures and functions */ |
184 | 188 | ||
@@ -190,8 +194,12 @@ struct bt_sock { | |||
190 | bdaddr_t dst; | 194 | bdaddr_t dst; |
191 | struct list_head accept_q; | 195 | struct list_head accept_q; |
192 | struct sock *parent; | 196 | struct sock *parent; |
193 | u32 defer_setup; | 197 | unsigned long flags; |
194 | bool suspended; | 198 | }; |
199 | |||
200 | enum { | ||
201 | BT_SK_DEFER_SETUP, | ||
202 | BT_SK_SUSPEND, | ||
195 | }; | 203 | }; |
196 | 204 | ||
197 | struct bt_sock_list { | 205 | struct bt_sock_list { |
@@ -216,14 +224,24 @@ void bt_accept_unlink(struct sock *sk); | |||
216 | struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock); | 224 | struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock); |
217 | 225 | ||
218 | /* Skb helpers */ | 226 | /* Skb helpers */ |
227 | struct l2cap_ctrl { | ||
228 | unsigned int sframe : 1, | ||
229 | poll : 1, | ||
230 | final : 1, | ||
231 | fcs : 1, | ||
232 | sar : 2, | ||
233 | super : 2; | ||
234 | __u16 reqseq; | ||
235 | __u16 txseq; | ||
236 | __u8 retries; | ||
237 | }; | ||
238 | |||
219 | struct bt_skb_cb { | 239 | struct bt_skb_cb { |
220 | __u8 pkt_type; | 240 | __u8 pkt_type; |
221 | __u8 incoming; | 241 | __u8 incoming; |
222 | __u16 expect; | 242 | __u16 expect; |
223 | __u16 tx_seq; | ||
224 | __u8 retries; | ||
225 | __u8 sar; | ||
226 | __u8 force_active; | 243 | __u8 force_active; |
244 | struct l2cap_ctrl control; | ||
227 | }; | 245 | }; |
228 | #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) | 246 | #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) |
229 | 247 | ||
@@ -243,12 +261,10 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, | |||
243 | { | 261 | { |
244 | struct sk_buff *skb; | 262 | struct sk_buff *skb; |
245 | 263 | ||
246 | release_sock(sk); | ||
247 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { | 264 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { |
248 | skb_reserve(skb, BT_SKB_RESERVE); | 265 | skb_reserve(skb, BT_SKB_RESERVE); |
249 | bt_cb(skb)->incoming = 0; | 266 | bt_cb(skb)->incoming = 0; |
250 | } | 267 | } |
251 | lock_sock(sk); | ||
252 | 268 | ||
253 | if (!skb && *err) | 269 | if (!skb && *err) |
254 | return NULL; | 270 | return NULL; |
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index d47e523c9d83..66a7b579e31c 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h | |||
@@ -102,6 +102,7 @@ enum { | |||
102 | HCI_DISCOVERABLE, | 102 | HCI_DISCOVERABLE, |
103 | HCI_LINK_SECURITY, | 103 | HCI_LINK_SECURITY, |
104 | HCI_PENDING_CLASS, | 104 | HCI_PENDING_CLASS, |
105 | HCI_PERIODIC_INQ, | ||
105 | }; | 106 | }; |
106 | 107 | ||
107 | /* HCI ioctl defines */ | 108 | /* HCI ioctl defines */ |
@@ -324,6 +325,8 @@ struct hci_cp_inquiry { | |||
324 | 325 | ||
325 | #define HCI_OP_INQUIRY_CANCEL 0x0402 | 326 | #define HCI_OP_INQUIRY_CANCEL 0x0402 |
326 | 327 | ||
328 | #define HCI_OP_PERIODIC_INQ 0x0403 | ||
329 | |||
327 | #define HCI_OP_EXIT_PERIODIC_INQ 0x0404 | 330 | #define HCI_OP_EXIT_PERIODIC_INQ 0x0404 |
328 | 331 | ||
329 | #define HCI_OP_CREATE_CONN 0x0405 | 332 | #define HCI_OP_CREATE_CONN 0x0405 |
@@ -717,6 +720,10 @@ struct hci_rp_read_local_oob_data { | |||
717 | } __packed; | 720 | } __packed; |
718 | 721 | ||
719 | #define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58 | 722 | #define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58 |
723 | struct hci_rp_read_inq_rsp_tx_power { | ||
724 | __u8 status; | ||
725 | __s8 tx_power; | ||
726 | } __packed; | ||
720 | 727 | ||
721 | #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 | 728 | #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 |
722 | struct hci_rp_read_flow_control_mode { | 729 | struct hci_rp_read_flow_control_mode { |
@@ -1431,6 +1438,5 @@ struct hci_inquiry_req { | |||
1431 | #define IREQ_CACHE_FLUSH 0x0001 | 1438 | #define IREQ_CACHE_FLUSH 0x0001 |
1432 | 1439 | ||
1433 | extern bool enable_hs; | 1440 | extern bool enable_hs; |
1434 | extern bool enable_le; | ||
1435 | 1441 | ||
1436 | #endif /* __HCI_H */ | 1442 | #endif /* __HCI_H */ |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index db1c5df45224..9fc7728f94e4 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -155,9 +155,14 @@ struct hci_dev { | |||
155 | __u16 hci_rev; | 155 | __u16 hci_rev; |
156 | __u8 lmp_ver; | 156 | __u8 lmp_ver; |
157 | __u16 manufacturer; | 157 | __u16 manufacturer; |
158 | __le16 lmp_subver; | 158 | __u16 lmp_subver; |
159 | __u16 voice_setting; | 159 | __u16 voice_setting; |
160 | __u8 io_capability; | 160 | __u8 io_capability; |
161 | __s8 inq_tx_power; | ||
162 | __u16 devid_source; | ||
163 | __u16 devid_vendor; | ||
164 | __u16 devid_product; | ||
165 | __u16 devid_version; | ||
161 | 166 | ||
162 | __u16 pkt_type; | 167 | __u16 pkt_type; |
163 | __u16 esco_type; | 168 | __u16 esco_type; |
@@ -250,9 +255,6 @@ struct hci_dev { | |||
250 | 255 | ||
251 | struct list_head remote_oob_data; | 256 | struct list_head remote_oob_data; |
252 | 257 | ||
253 | struct list_head adv_entries; | ||
254 | struct delayed_work adv_work; | ||
255 | |||
256 | struct hci_dev_stats stat; | 258 | struct hci_dev_stats stat; |
257 | 259 | ||
258 | struct sk_buff_head driver_init; | 260 | struct sk_buff_head driver_init; |
@@ -263,7 +265,6 @@ struct hci_dev { | |||
263 | 265 | ||
264 | struct dentry *debugfs; | 266 | struct dentry *debugfs; |
265 | 267 | ||
266 | struct device *parent; | ||
267 | struct device dev; | 268 | struct device dev; |
268 | 269 | ||
269 | struct rfkill *rfkill; | 270 | struct rfkill *rfkill; |
@@ -571,7 +572,7 @@ int hci_chan_del(struct hci_chan *chan); | |||
571 | void hci_chan_list_flush(struct hci_conn *conn); | 572 | void hci_chan_list_flush(struct hci_conn *conn); |
572 | 573 | ||
573 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, | 574 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, |
574 | __u8 sec_level, __u8 auth_type); | 575 | __u8 dst_type, __u8 sec_level, __u8 auth_type); |
575 | int hci_conn_check_link_mode(struct hci_conn *conn); | 576 | int hci_conn_check_link_mode(struct hci_conn *conn); |
576 | int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level); | 577 | int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level); |
577 | int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type); | 578 | int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type); |
@@ -673,8 +674,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key, | |||
673 | bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len); | 674 | bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len); |
674 | struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8]); | 675 | struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8]); |
675 | int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type, | 676 | int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type, |
676 | int new_key, u8 authenticated, u8 tk[16], u8 enc_size, u16 ediv, | 677 | int new_key, u8 authenticated, u8 tk[16], u8 enc_size, |
677 | u8 rand[8]); | 678 | __le16 ediv, u8 rand[8]); |
678 | struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr, | 679 | struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr, |
679 | u8 addr_type); | 680 | u8 addr_type); |
680 | int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr); | 681 | int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr); |
@@ -688,14 +689,6 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash, | |||
688 | u8 *randomizer); | 689 | u8 *randomizer); |
689 | int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr); | 690 | int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr); |
690 | 691 | ||
691 | #define ADV_CLEAR_TIMEOUT (3*60*HZ) /* Three minutes */ | ||
692 | int hci_adv_entries_clear(struct hci_dev *hdev); | ||
693 | struct adv_entry *hci_find_adv_entry(struct hci_dev *hdev, bdaddr_t *bdaddr); | ||
694 | int hci_add_adv_entry(struct hci_dev *hdev, | ||
695 | struct hci_ev_le_advertising_info *ev); | ||
696 | |||
697 | void hci_del_off_timer(struct hci_dev *hdev); | ||
698 | |||
699 | void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb); | 692 | void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb); |
700 | 693 | ||
701 | int hci_recv_frame(struct sk_buff *skb); | 694 | int hci_recv_frame(struct sk_buff *skb); |
@@ -709,7 +702,7 @@ void hci_conn_init_sysfs(struct hci_conn *conn); | |||
709 | void hci_conn_add_sysfs(struct hci_conn *conn); | 702 | void hci_conn_add_sysfs(struct hci_conn *conn); |
710 | void hci_conn_del_sysfs(struct hci_conn *conn); | 703 | void hci_conn_del_sysfs(struct hci_conn *conn); |
711 | 704 | ||
712 | #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->parent = (pdev)) | 705 | #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev)) |
713 | 706 | ||
714 | /* ----- LMP capabilities ----- */ | 707 | /* ----- LMP capabilities ----- */ |
715 | #define lmp_rswitch_capable(dev) ((dev)->features[0] & LMP_RSWITCH) | 708 | #define lmp_rswitch_capable(dev) ((dev)->features[0] & LMP_RSWITCH) |
@@ -933,6 +926,23 @@ static inline bool eir_has_data_type(u8 *data, size_t data_len, u8 type) | |||
933 | return false; | 926 | return false; |
934 | } | 927 | } |
935 | 928 | ||
929 | static inline size_t eir_get_length(u8 *eir, size_t eir_len) | ||
930 | { | ||
931 | size_t parsed = 0; | ||
932 | |||
933 | while (parsed < eir_len) { | ||
934 | u8 field_len = eir[0]; | ||
935 | |||
936 | if (field_len == 0) | ||
937 | return parsed; | ||
938 | |||
939 | parsed += field_len + 1; | ||
940 | eir += field_len + 1; | ||
941 | } | ||
942 | |||
943 | return eir_len; | ||
944 | } | ||
945 | |||
936 | static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data, | 946 | static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data, |
937 | u8 data_len) | 947 | u8 data_len) |
938 | { | 948 | { |
@@ -961,17 +971,12 @@ void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb); | |||
961 | void hci_sock_dev_event(struct hci_dev *hdev, int event); | 971 | void hci_sock_dev_event(struct hci_dev *hdev, int event); |
962 | 972 | ||
963 | /* Management interface */ | 973 | /* Management interface */ |
964 | #define MGMT_ADDR_BREDR 0x00 | 974 | #define DISCOV_TYPE_BREDR (BIT(BDADDR_BREDR)) |
965 | #define MGMT_ADDR_LE_PUBLIC 0x01 | 975 | #define DISCOV_TYPE_LE (BIT(BDADDR_LE_PUBLIC) | \ |
966 | #define MGMT_ADDR_LE_RANDOM 0x02 | 976 | BIT(BDADDR_LE_RANDOM)) |
967 | #define MGMT_ADDR_INVALID 0xff | 977 | #define DISCOV_TYPE_INTERLEAVED (BIT(BDADDR_BREDR) | \ |
968 | 978 | BIT(BDADDR_LE_PUBLIC) | \ | |
969 | #define DISCOV_TYPE_BREDR (BIT(MGMT_ADDR_BREDR)) | 979 | BIT(BDADDR_LE_RANDOM)) |
970 | #define DISCOV_TYPE_LE (BIT(MGMT_ADDR_LE_PUBLIC) | \ | ||
971 | BIT(MGMT_ADDR_LE_RANDOM)) | ||
972 | #define DISCOV_TYPE_INTERLEAVED (BIT(MGMT_ADDR_BREDR) | \ | ||
973 | BIT(MGMT_ADDR_LE_PUBLIC) | \ | ||
974 | BIT(MGMT_ADDR_LE_RANDOM)) | ||
975 | 980 | ||
976 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); | 981 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); |
977 | int mgmt_index_added(struct hci_dev *hdev); | 982 | int mgmt_index_added(struct hci_dev *hdev); |
@@ -1067,12 +1072,12 @@ void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, | |||
1067 | u16 latency, u16 to_multiplier); | 1072 | u16 latency, u16 to_multiplier); |
1068 | void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8], | 1073 | void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8], |
1069 | __u8 ltk[16]); | 1074 | __u8 ltk[16]); |
1070 | void hci_le_ltk_reply(struct hci_conn *conn, u8 ltk[16]); | ||
1071 | void hci_le_ltk_neg_reply(struct hci_conn *conn); | ||
1072 | |||
1073 | int hci_do_inquiry(struct hci_dev *hdev, u8 length); | 1075 | int hci_do_inquiry(struct hci_dev *hdev, u8 length); |
1074 | int hci_cancel_inquiry(struct hci_dev *hdev); | 1076 | int hci_cancel_inquiry(struct hci_dev *hdev); |
1075 | int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window, | 1077 | int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window, |
1076 | int timeout); | 1078 | int timeout); |
1079 | int hci_cancel_le_scan(struct hci_dev *hdev); | ||
1080 | |||
1081 | u8 bdaddr_to_le(u8 bdaddr_type); | ||
1077 | 1082 | ||
1078 | #endif /* __HCI_CORE_H */ | 1083 | #endif /* __HCI_CORE_H */ |
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index 9b242c6bf55b..1c7d1cd5e679 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -44,6 +44,7 @@ | |||
44 | #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF | 44 | #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF |
45 | #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF | 45 | #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF |
46 | #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF | 46 | #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF |
47 | #define L2CAP_BREDR_MAX_PAYLOAD 1019 /* 3-DH5 packet */ | ||
47 | 48 | ||
48 | #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100) | 49 | #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100) |
49 | #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000) | 50 | #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000) |
@@ -57,6 +58,7 @@ struct sockaddr_l2 { | |||
57 | __le16 l2_psm; | 58 | __le16 l2_psm; |
58 | bdaddr_t l2_bdaddr; | 59 | bdaddr_t l2_bdaddr; |
59 | __le16 l2_cid; | 60 | __le16 l2_cid; |
61 | __u8 l2_bdaddr_type; | ||
60 | }; | 62 | }; |
61 | 63 | ||
62 | /* L2CAP socket options */ | 64 | /* L2CAP socket options */ |
@@ -139,6 +141,8 @@ struct l2cap_conninfo { | |||
139 | 141 | ||
140 | #define L2CAP_CTRL_TXSEQ_SHIFT 1 | 142 | #define L2CAP_CTRL_TXSEQ_SHIFT 1 |
141 | #define L2CAP_CTRL_SUPER_SHIFT 2 | 143 | #define L2CAP_CTRL_SUPER_SHIFT 2 |
144 | #define L2CAP_CTRL_POLL_SHIFT 4 | ||
145 | #define L2CAP_CTRL_FINAL_SHIFT 7 | ||
142 | #define L2CAP_CTRL_REQSEQ_SHIFT 8 | 146 | #define L2CAP_CTRL_REQSEQ_SHIFT 8 |
143 | #define L2CAP_CTRL_SAR_SHIFT 14 | 147 | #define L2CAP_CTRL_SAR_SHIFT 14 |
144 | 148 | ||
@@ -152,9 +156,11 @@ struct l2cap_conninfo { | |||
152 | #define L2CAP_EXT_CTRL_FINAL 0x00000002 | 156 | #define L2CAP_EXT_CTRL_FINAL 0x00000002 |
153 | #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 /* I- or S-Frame */ | 157 | #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 /* I- or S-Frame */ |
154 | 158 | ||
159 | #define L2CAP_EXT_CTRL_FINAL_SHIFT 1 | ||
155 | #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2 | 160 | #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2 |
156 | #define L2CAP_EXT_CTRL_SAR_SHIFT 16 | 161 | #define L2CAP_EXT_CTRL_SAR_SHIFT 16 |
157 | #define L2CAP_EXT_CTRL_SUPER_SHIFT 16 | 162 | #define L2CAP_EXT_CTRL_SUPER_SHIFT 16 |
163 | #define L2CAP_EXT_CTRL_POLL_SHIFT 18 | ||
158 | #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18 | 164 | #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18 |
159 | 165 | ||
160 | /* L2CAP Supervisory Function */ | 166 | /* L2CAP Supervisory Function */ |
@@ -186,6 +192,8 @@ struct l2cap_hdr { | |||
186 | #define L2CAP_FCS_SIZE 2 | 192 | #define L2CAP_FCS_SIZE 2 |
187 | #define L2CAP_SDULEN_SIZE 2 | 193 | #define L2CAP_SDULEN_SIZE 2 |
188 | #define L2CAP_PSMLEN_SIZE 2 | 194 | #define L2CAP_PSMLEN_SIZE 2 |
195 | #define L2CAP_ENH_CTRL_SIZE 2 | ||
196 | #define L2CAP_EXT_CTRL_SIZE 4 | ||
189 | 197 | ||
190 | struct l2cap_cmd_hdr { | 198 | struct l2cap_cmd_hdr { |
191 | __u8 code; | 199 | __u8 code; |
@@ -401,6 +409,16 @@ struct l2cap_conn_param_update_rsp { | |||
401 | #define L2CAP_CONN_PARAM_REJECTED 0x0001 | 409 | #define L2CAP_CONN_PARAM_REJECTED 0x0001 |
402 | 410 | ||
403 | /* ----- L2CAP channels and connections ----- */ | 411 | /* ----- L2CAP channels and connections ----- */ |
412 | struct l2cap_seq_list { | ||
413 | __u16 head; | ||
414 | __u16 tail; | ||
415 | __u16 mask; | ||
416 | __u16 *list; | ||
417 | }; | ||
418 | |||
419 | #define L2CAP_SEQ_LIST_CLEAR 0xFFFF | ||
420 | #define L2CAP_SEQ_LIST_TAIL 0x8000 | ||
421 | |||
404 | struct srej_list { | 422 | struct srej_list { |
405 | __u16 tx_seq; | 423 | __u16 tx_seq; |
406 | struct list_head list; | 424 | struct list_head list; |
@@ -446,6 +464,9 @@ struct l2cap_chan { | |||
446 | __u16 monitor_timeout; | 464 | __u16 monitor_timeout; |
447 | __u16 mps; | 465 | __u16 mps; |
448 | 466 | ||
467 | __u8 tx_state; | ||
468 | __u8 rx_state; | ||
469 | |||
449 | unsigned long conf_state; | 470 | unsigned long conf_state; |
450 | unsigned long conn_state; | 471 | unsigned long conn_state; |
451 | unsigned long flags; | 472 | unsigned long flags; |
@@ -456,9 +477,11 @@ struct l2cap_chan { | |||
456 | __u16 buffer_seq; | 477 | __u16 buffer_seq; |
457 | __u16 buffer_seq_srej; | 478 | __u16 buffer_seq_srej; |
458 | __u16 srej_save_reqseq; | 479 | __u16 srej_save_reqseq; |
480 | __u16 last_acked_seq; | ||
459 | __u16 frames_sent; | 481 | __u16 frames_sent; |
460 | __u16 unacked_frames; | 482 | __u16 unacked_frames; |
461 | __u8 retry_count; | 483 | __u8 retry_count; |
484 | __u16 srej_queue_next; | ||
462 | __u8 num_acked; | 485 | __u8 num_acked; |
463 | __u16 sdu_len; | 486 | __u16 sdu_len; |
464 | struct sk_buff *sdu; | 487 | struct sk_buff *sdu; |
@@ -490,6 +513,8 @@ struct l2cap_chan { | |||
490 | struct sk_buff *tx_send_head; | 513 | struct sk_buff *tx_send_head; |
491 | struct sk_buff_head tx_q; | 514 | struct sk_buff_head tx_q; |
492 | struct sk_buff_head srej_q; | 515 | struct sk_buff_head srej_q; |
516 | struct l2cap_seq_list srej_list; | ||
517 | struct l2cap_seq_list retrans_list; | ||
493 | struct list_head srej_l; | 518 | struct list_head srej_l; |
494 | 519 | ||
495 | struct list_head list; | 520 | struct list_head list; |
@@ -508,8 +533,7 @@ struct l2cap_ops { | |||
508 | void (*close) (void *data); | 533 | void (*close) (void *data); |
509 | void (*state_change) (void *data, int state); | 534 | void (*state_change) (void *data, int state); |
510 | struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, | 535 | struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, |
511 | unsigned long len, int nb, int *err); | 536 | unsigned long len, int nb); |
512 | |||
513 | }; | 537 | }; |
514 | 538 | ||
515 | struct l2cap_conn { | 539 | struct l2cap_conn { |
@@ -600,6 +624,44 @@ enum { | |||
600 | FLAG_EFS_ENABLE, | 624 | FLAG_EFS_ENABLE, |
601 | }; | 625 | }; |
602 | 626 | ||
627 | enum { | ||
628 | L2CAP_TX_STATE_XMIT, | ||
629 | L2CAP_TX_STATE_WAIT_F, | ||
630 | }; | ||
631 | |||
632 | enum { | ||
633 | L2CAP_RX_STATE_RECV, | ||
634 | L2CAP_RX_STATE_SREJ_SENT, | ||
635 | }; | ||
636 | |||
637 | enum { | ||
638 | L2CAP_TXSEQ_EXPECTED, | ||
639 | L2CAP_TXSEQ_EXPECTED_SREJ, | ||
640 | L2CAP_TXSEQ_UNEXPECTED, | ||
641 | L2CAP_TXSEQ_UNEXPECTED_SREJ, | ||
642 | L2CAP_TXSEQ_DUPLICATE, | ||
643 | L2CAP_TXSEQ_DUPLICATE_SREJ, | ||
644 | L2CAP_TXSEQ_INVALID, | ||
645 | L2CAP_TXSEQ_INVALID_IGNORE, | ||
646 | }; | ||
647 | |||
648 | enum { | ||
649 | L2CAP_EV_DATA_REQUEST, | ||
650 | L2CAP_EV_LOCAL_BUSY_DETECTED, | ||
651 | L2CAP_EV_LOCAL_BUSY_CLEAR, | ||
652 | L2CAP_EV_RECV_REQSEQ_AND_FBIT, | ||
653 | L2CAP_EV_RECV_FBIT, | ||
654 | L2CAP_EV_RETRANS_TO, | ||
655 | L2CAP_EV_MONITOR_TO, | ||
656 | L2CAP_EV_EXPLICIT_POLL, | ||
657 | L2CAP_EV_RECV_IFRAME, | ||
658 | L2CAP_EV_RECV_RR, | ||
659 | L2CAP_EV_RECV_REJ, | ||
660 | L2CAP_EV_RECV_RNR, | ||
661 | L2CAP_EV_RECV_SREJ, | ||
662 | L2CAP_EV_RECV_FRAME, | ||
663 | }; | ||
664 | |||
603 | static inline void l2cap_chan_hold(struct l2cap_chan *c) | 665 | static inline void l2cap_chan_hold(struct l2cap_chan *c) |
604 | { | 666 | { |
605 | atomic_inc(&c->refcnt); | 667 | atomic_inc(&c->refcnt); |
@@ -622,21 +684,26 @@ static inline void l2cap_chan_unlock(struct l2cap_chan *chan) | |||
622 | } | 684 | } |
623 | 685 | ||
624 | static inline void l2cap_set_timer(struct l2cap_chan *chan, | 686 | static inline void l2cap_set_timer(struct l2cap_chan *chan, |
625 | struct delayed_work *work, long timeout) | 687 | struct delayed_work *work, long timeout) |
626 | { | 688 | { |
627 | BT_DBG("chan %p state %s timeout %ld", chan, | 689 | BT_DBG("chan %p state %s timeout %ld", chan, |
628 | state_to_string(chan->state), timeout); | 690 | state_to_string(chan->state), timeout); |
629 | 691 | ||
692 | /* If delayed work cancelled do not hold(chan) | ||
693 | since it is already done with previous set_timer */ | ||
630 | if (!cancel_delayed_work(work)) | 694 | if (!cancel_delayed_work(work)) |
631 | l2cap_chan_hold(chan); | 695 | l2cap_chan_hold(chan); |
696 | |||
632 | schedule_delayed_work(work, timeout); | 697 | schedule_delayed_work(work, timeout); |
633 | } | 698 | } |
634 | 699 | ||
635 | static inline bool l2cap_clear_timer(struct l2cap_chan *chan, | 700 | static inline bool l2cap_clear_timer(struct l2cap_chan *chan, |
636 | struct delayed_work *work) | 701 | struct delayed_work *work) |
637 | { | 702 | { |
638 | bool ret; | 703 | bool ret; |
639 | 704 | ||
705 | /* put(chan) if delayed work cancelled otherwise it | ||
706 | is done in delayed work function */ | ||
640 | ret = cancel_delayed_work(work); | 707 | ret = cancel_delayed_work(work); |
641 | if (ret) | 708 | if (ret) |
642 | l2cap_chan_put(chan); | 709 | l2cap_chan_put(chan); |
@@ -658,13 +725,10 @@ static inline bool l2cap_clear_timer(struct l2cap_chan *chan, | |||
658 | 725 | ||
659 | static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2) | 726 | static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2) |
660 | { | 727 | { |
661 | int offset; | 728 | if (seq1 >= seq2) |
662 | 729 | return seq1 - seq2; | |
663 | offset = (seq1 - seq2) % (chan->tx_win_max + 1); | 730 | else |
664 | if (offset < 0) | 731 | return chan->tx_win_max + 1 - seq2 + seq1; |
665 | offset += (chan->tx_win_max + 1); | ||
666 | |||
667 | return offset; | ||
668 | } | 732 | } |
669 | 733 | ||
670 | static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq) | 734 | static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq) |
@@ -852,14 +916,15 @@ int __l2cap_wait_ack(struct sock *sk); | |||
852 | int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm); | 916 | int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm); |
853 | int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid); | 917 | int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid); |
854 | 918 | ||
855 | struct l2cap_chan *l2cap_chan_create(struct sock *sk); | 919 | struct l2cap_chan *l2cap_chan_create(void); |
856 | void l2cap_chan_close(struct l2cap_chan *chan, int reason); | 920 | void l2cap_chan_close(struct l2cap_chan *chan, int reason); |
857 | void l2cap_chan_destroy(struct l2cap_chan *chan); | 921 | void l2cap_chan_destroy(struct l2cap_chan *chan); |
858 | int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, | 922 | int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, |
859 | bdaddr_t *dst); | 923 | bdaddr_t *dst, u8 dst_type); |
860 | int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, | 924 | int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, |
861 | u32 priority); | 925 | u32 priority); |
862 | void l2cap_chan_busy(struct l2cap_chan *chan, int busy); | 926 | void l2cap_chan_busy(struct l2cap_chan *chan, int busy); |
863 | int l2cap_chan_check_security(struct l2cap_chan *chan); | 927 | int l2cap_chan_check_security(struct l2cap_chan *chan); |
928 | void l2cap_chan_set_defaults(struct l2cap_chan *chan); | ||
864 | 929 | ||
865 | #endif /* __L2CAP_H */ | 930 | #endif /* __L2CAP_H */ |
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index ebfd91fc20f8..23fd0546fccb 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h | |||
@@ -341,6 +341,15 @@ struct mgmt_cp_unblock_device { | |||
341 | } __packed; | 341 | } __packed; |
342 | #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE | 342 | #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE |
343 | 343 | ||
344 | #define MGMT_OP_SET_DEVICE_ID 0x0028 | ||
345 | struct mgmt_cp_set_device_id { | ||
346 | __le16 source; | ||
347 | __le16 vendor; | ||
348 | __le16 product; | ||
349 | __le16 version; | ||
350 | } __packed; | ||
351 | #define MGMT_SET_DEVICE_ID_SIZE 8 | ||
352 | |||
344 | #define MGMT_EV_CMD_COMPLETE 0x0001 | 353 | #define MGMT_EV_CMD_COMPLETE 0x0001 |
345 | struct mgmt_ev_cmd_complete { | 354 | struct mgmt_ev_cmd_complete { |
346 | __le16 opcode; | 355 | __le16 opcode; |
diff --git a/include/net/bluetooth/smp.h b/include/net/bluetooth/smp.h index 7b3acdd29134..ca356a734920 100644 --- a/include/net/bluetooth/smp.h +++ b/include/net/bluetooth/smp.h | |||
@@ -77,7 +77,7 @@ struct smp_cmd_encrypt_info { | |||
77 | 77 | ||
78 | #define SMP_CMD_MASTER_IDENT 0x07 | 78 | #define SMP_CMD_MASTER_IDENT 0x07 |
79 | struct smp_cmd_master_ident { | 79 | struct smp_cmd_master_ident { |
80 | __u16 ediv; | 80 | __le16 ediv; |
81 | __u8 rand[8]; | 81 | __u8 rand[8]; |
82 | } __packed; | 82 | } __packed; |
83 | 83 | ||
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index adb2320bccdf..0289d4ce7070 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -3365,9 +3365,9 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy, | |||
3365 | * @chan: main channel | 3365 | * @chan: main channel |
3366 | * @channel_type: HT mode | 3366 | * @channel_type: HT mode |
3367 | */ | 3367 | */ |
3368 | int cfg80211_can_beacon_sec_chan(struct wiphy *wiphy, | 3368 | bool cfg80211_can_beacon_sec_chan(struct wiphy *wiphy, |
3369 | struct ieee80211_channel *chan, | 3369 | struct ieee80211_channel *chan, |
3370 | enum nl80211_channel_type channel_type); | 3370 | enum nl80211_channel_type channel_type); |
3371 | 3371 | ||
3372 | /* | 3372 | /* |
3373 | * cfg80211_ch_switch_notify - update wdev channel and notify userspace | 3373 | * cfg80211_ch_switch_notify - update wdev channel and notify userspace |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 4d6e6c6818d0..1937c7d98304 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -667,6 +667,9 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info) | |||
667 | * @RX_FLAG_SHORT_GI: Short guard interval was used | 667 | * @RX_FLAG_SHORT_GI: Short guard interval was used |
668 | * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. | 668 | * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. |
669 | * Valid only for data frames (mainly A-MPDU) | 669 | * Valid only for data frames (mainly A-MPDU) |
670 | * @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if | ||
671 | * the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT | ||
672 | * to hw.radiotap_mcs_details to advertise that fact | ||
670 | */ | 673 | */ |
671 | enum mac80211_rx_flags { | 674 | enum mac80211_rx_flags { |
672 | RX_FLAG_MMIC_ERROR = 1<<0, | 675 | RX_FLAG_MMIC_ERROR = 1<<0, |
@@ -681,6 +684,7 @@ enum mac80211_rx_flags { | |||
681 | RX_FLAG_40MHZ = 1<<10, | 684 | RX_FLAG_40MHZ = 1<<10, |
682 | RX_FLAG_SHORT_GI = 1<<11, | 685 | RX_FLAG_SHORT_GI = 1<<11, |
683 | RX_FLAG_NO_SIGNAL_VAL = 1<<12, | 686 | RX_FLAG_NO_SIGNAL_VAL = 1<<12, |
687 | RX_FLAG_HT_GF = 1<<13, | ||
684 | }; | 688 | }; |
685 | 689 | ||
686 | /** | 690 | /** |
@@ -939,7 +943,7 @@ static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif) | |||
939 | * CCMP key if it requires CCMP encryption of management frames (MFP) to | 943 | * CCMP key if it requires CCMP encryption of management frames (MFP) to |
940 | * be done in software. | 944 | * be done in software. |
941 | * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver | 945 | * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver |
942 | * for a CCMP key if space should be prepared for the IV, but the IV | 946 | * if space should be prepared for the IV, but the IV |
943 | * itself should not be generated. Do not set together with | 947 | * itself should not be generated. Do not set together with |
944 | * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. | 948 | * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. |
945 | */ | 949 | */ |
@@ -1288,6 +1292,11 @@ enum ieee80211_hw_flags { | |||
1288 | * | 1292 | * |
1289 | * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX | 1293 | * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX |
1290 | * (if %IEEE80211_HW_QUEUE_CONTROL is set) | 1294 | * (if %IEEE80211_HW_QUEUE_CONTROL is set) |
1295 | * | ||
1296 | * @radiotap_mcs_details: lists which MCS information can the HW | ||
1297 | * reports, by default it is set to _MCS, _GI and _BW but doesn't | ||
1298 | * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only | ||
1299 | * adding _BW is supported today. | ||
1291 | */ | 1300 | */ |
1292 | struct ieee80211_hw { | 1301 | struct ieee80211_hw { |
1293 | struct ieee80211_conf conf; | 1302 | struct ieee80211_conf conf; |
@@ -1309,6 +1318,7 @@ struct ieee80211_hw { | |||
1309 | u8 max_rx_aggregation_subframes; | 1318 | u8 max_rx_aggregation_subframes; |
1310 | u8 max_tx_aggregation_subframes; | 1319 | u8 max_tx_aggregation_subframes; |
1311 | u8 offchannel_tx_hw_queue; | 1320 | u8 offchannel_tx_hw_queue; |
1321 | u8 radiotap_mcs_details; | ||
1312 | }; | 1322 | }; |
1313 | 1323 | ||
1314 | /** | 1324 | /** |
diff --git a/include/net/nfc/hci.h b/include/net/nfc/hci.h index aca65a5a9d0d..4467c9460857 100644 --- a/include/net/nfc/hci.h +++ b/include/net/nfc/hci.h | |||
@@ -39,6 +39,8 @@ struct nfc_hci_ops { | |||
39 | int (*data_exchange) (struct nfc_hci_dev *hdev, | 39 | int (*data_exchange) (struct nfc_hci_dev *hdev, |
40 | struct nfc_target *target, | 40 | struct nfc_target *target, |
41 | struct sk_buff *skb, struct sk_buff **res_skb); | 41 | struct sk_buff *skb, struct sk_buff **res_skb); |
42 | int (*check_presence)(struct nfc_hci_dev *hdev, | ||
43 | struct nfc_target *target); | ||
42 | }; | 44 | }; |
43 | 45 | ||
44 | #define NFC_HCI_MAX_CUSTOM_GATES 15 | 46 | #define NFC_HCI_MAX_CUSTOM_GATES 15 |
@@ -82,10 +84,6 @@ struct nfc_hci_dev { | |||
82 | 84 | ||
83 | u8 gate2pipe[NFC_HCI_MAX_GATES]; | 85 | u8 gate2pipe[NFC_HCI_MAX_GATES]; |
84 | 86 | ||
85 | bool poll_started; | ||
86 | struct nfc_target *targets; | ||
87 | int target_count; | ||
88 | |||
89 | u8 sw_romlib; | 87 | u8 sw_romlib; |
90 | u8 sw_patch; | 88 | u8 sw_patch; |
91 | u8 sw_flashlib_major; | 89 | u8 sw_flashlib_major; |
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h index 9a2505a5b8de..b7ca4a2a1d72 100644 --- a/include/net/nfc/nfc.h +++ b/include/net/nfc/nfc.h | |||
@@ -48,26 +48,28 @@ struct nfc_dev; | |||
48 | typedef void (*data_exchange_cb_t)(void *context, struct sk_buff *skb, | 48 | typedef void (*data_exchange_cb_t)(void *context, struct sk_buff *skb, |
49 | int err); | 49 | int err); |
50 | 50 | ||
51 | struct nfc_target; | ||
52 | |||
51 | struct nfc_ops { | 53 | struct nfc_ops { |
52 | int (*dev_up)(struct nfc_dev *dev); | 54 | int (*dev_up)(struct nfc_dev *dev); |
53 | int (*dev_down)(struct nfc_dev *dev); | 55 | int (*dev_down)(struct nfc_dev *dev); |
54 | int (*start_poll)(struct nfc_dev *dev, u32 protocols); | 56 | int (*start_poll)(struct nfc_dev *dev, u32 protocols); |
55 | void (*stop_poll)(struct nfc_dev *dev); | 57 | void (*stop_poll)(struct nfc_dev *dev); |
56 | int (*dep_link_up)(struct nfc_dev *dev, int target_idx, u8 comm_mode, | 58 | int (*dep_link_up)(struct nfc_dev *dev, struct nfc_target *target, |
57 | u8 *gb, size_t gb_len); | 59 | u8 comm_mode, u8 *gb, size_t gb_len); |
58 | int (*dep_link_down)(struct nfc_dev *dev); | 60 | int (*dep_link_down)(struct nfc_dev *dev); |
59 | int (*activate_target)(struct nfc_dev *dev, u32 target_idx, | 61 | int (*activate_target)(struct nfc_dev *dev, struct nfc_target *target, |
60 | u32 protocol); | 62 | u32 protocol); |
61 | void (*deactivate_target)(struct nfc_dev *dev, u32 target_idx); | 63 | void (*deactivate_target)(struct nfc_dev *dev, |
62 | int (*data_exchange)(struct nfc_dev *dev, u32 target_idx, | 64 | struct nfc_target *target); |
65 | int (*data_exchange)(struct nfc_dev *dev, struct nfc_target *target, | ||
63 | struct sk_buff *skb, data_exchange_cb_t cb, | 66 | struct sk_buff *skb, data_exchange_cb_t cb, |
64 | void *cb_context); | 67 | void *cb_context); |
65 | int (*check_presence)(struct nfc_dev *dev, u32 target_idx); | 68 | int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target); |
66 | }; | 69 | }; |
67 | 70 | ||
68 | #define NFC_TARGET_IDX_ANY -1 | 71 | #define NFC_TARGET_IDX_ANY -1 |
69 | #define NFC_MAX_GT_LEN 48 | 72 | #define NFC_MAX_GT_LEN 48 |
70 | #define NFC_TARGET_IDX_NONE 0xffffffff | ||
71 | 73 | ||
72 | struct nfc_target { | 74 | struct nfc_target { |
73 | u32 idx; | 75 | u32 idx; |
@@ -95,11 +97,10 @@ struct nfc_dev { | |||
95 | struct nfc_target *targets; | 97 | struct nfc_target *targets; |
96 | int n_targets; | 98 | int n_targets; |
97 | int targets_generation; | 99 | int targets_generation; |
98 | spinlock_t targets_lock; | ||
99 | struct device dev; | 100 | struct device dev; |
100 | bool dev_up; | 101 | bool dev_up; |
101 | bool polling; | 102 | bool polling; |
102 | u32 activated_target_idx; | 103 | struct nfc_target *active_target; |
103 | bool dep_link_up; | 104 | bool dep_link_up; |
104 | u32 dep_rf_mode; | 105 | u32 dep_rf_mode; |
105 | struct nfc_genl_data genl_data; | 106 | struct nfc_genl_data genl_data; |
diff --git a/include/net/nfc/shdlc.h b/include/net/nfc/shdlc.h index 1071987d0408..ab06afd462da 100644 --- a/include/net/nfc/shdlc.h +++ b/include/net/nfc/shdlc.h | |||
@@ -35,6 +35,8 @@ struct nfc_shdlc_ops { | |||
35 | int (*data_exchange) (struct nfc_shdlc *shdlc, | 35 | int (*data_exchange) (struct nfc_shdlc *shdlc, |
36 | struct nfc_target *target, | 36 | struct nfc_target *target, |
37 | struct sk_buff *skb, struct sk_buff **res_skb); | 37 | struct sk_buff *skb, struct sk_buff **res_skb); |
38 | int (*check_presence)(struct nfc_shdlc *shdlc, | ||
39 | struct nfc_target *target); | ||
38 | }; | 40 | }; |
39 | 41 | ||
40 | enum shdlc_state { | 42 | enum shdlc_state { |