diff options
author | David S. Miller <davem@davemloft.net> | 2015-10-24 08:13:16 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-24 08:13:16 -0400 |
commit | a72c9512bf2bef12c5e66a4d910c4b348fe31d61 (patch) | |
tree | cfce1711f9a5fc1ef0774e9f2e31945600ff15e0 /include/net | |
parent | 379a80a1d048dcacfc2011d5d32e16d5c804b9f4 (diff) | |
parent | 13972adc3240ea8b18b44906b819c622941a64b6 (diff) |
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Johan Hedberg says:
====================
pull request: bluetooth-next 2015-10-22
Here's probably the last bluetooth-next pull request for 4.4. Among
several other changes it contains the rest of the fixes & cleanups from
the Bluetooth UnplugFest (that didn't need to be hurried to 4.3).
- Refactoring & cleanups to 6lowpan code
- New USB ids for two Atheros controllers and BCM43142A0 from Broadcom
- Fix (quirk) for broken Broadcom BCM2045 controllers
- Support for latest Apple controllers
- Improvements to the vendor diagnostic message support
Please let me know if there are any issues pulling. Thanks.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/6lowpan.h | 222 | ||||
-rw-r--r-- | include/net/bluetooth/hci.h | 10 | ||||
-rw-r--r-- | include/net/bluetooth/hci_core.h | 31 | ||||
-rw-r--r-- | include/net/mac802154.h | 10 |
4 files changed, 110 insertions, 163 deletions
diff --git a/include/net/6lowpan.h b/include/net/6lowpan.h index 07db532696df..cf3bc564ac03 100644 --- a/include/net/6lowpan.h +++ b/include/net/6lowpan.h | |||
@@ -56,85 +56,23 @@ | |||
56 | #include <net/ipv6.h> | 56 | #include <net/ipv6.h> |
57 | #include <net/net_namespace.h> | 57 | #include <net/net_namespace.h> |
58 | 58 | ||
59 | #define UIP_802154_SHORTADDR_LEN 2 /* compressed ipv6 address length */ | ||
60 | #define UIP_IPH_LEN 40 /* ipv6 fixed header size */ | ||
61 | #define UIP_PROTO_UDP 17 /* ipv6 next header value for UDP */ | ||
62 | #define UIP_FRAGH_LEN 8 /* ipv6 fragment header size */ | ||
63 | |||
64 | #define EUI64_ADDR_LEN 8 | 59 | #define EUI64_ADDR_LEN 8 |
65 | 60 | ||
66 | #define LOWPAN_NHC_MAX_ID_LEN 1 | 61 | #define LOWPAN_NHC_MAX_ID_LEN 1 |
62 | /* Maximum next header compression length which we currently support inclusive | ||
63 | * possible inline data. | ||
64 | */ | ||
65 | #define LOWPAN_NHC_MAX_HDR_LEN (sizeof(struct udphdr)) | ||
67 | /* Max IPHC Header len without IPv6 hdr specific inline data. | 66 | /* Max IPHC Header len without IPv6 hdr specific inline data. |
68 | * Useful for getting the "extra" bytes we need at worst case compression. | 67 | * Useful for getting the "extra" bytes we need at worst case compression. |
69 | * | 68 | * |
70 | * LOWPAN_IPHC + CID + LOWPAN_NHC_MAX_ID_LEN | 69 | * LOWPAN_IPHC + CID + LOWPAN_NHC_MAX_ID_LEN |
71 | */ | 70 | */ |
72 | #define LOWPAN_IPHC_MAX_HEADER_LEN (2 + 1 + LOWPAN_NHC_MAX_ID_LEN) | 71 | #define LOWPAN_IPHC_MAX_HEADER_LEN (2 + 1 + LOWPAN_NHC_MAX_ID_LEN) |
73 | 72 | /* Maximum worst case IPHC header buffer size */ | |
74 | /* | 73 | #define LOWPAN_IPHC_MAX_HC_BUF_LEN (sizeof(struct ipv6hdr) + \ |
75 | * ipv6 address based on mac | 74 | LOWPAN_IPHC_MAX_HEADER_LEN + \ |
76 | * second bit-flip (Universe/Local) is done according RFC2464 | 75 | LOWPAN_NHC_MAX_HDR_LEN) |
77 | */ | ||
78 | #define is_addr_mac_addr_based(a, m) \ | ||
79 | ((((a)->s6_addr[8]) == (((m)[0]) ^ 0x02)) && \ | ||
80 | (((a)->s6_addr[9]) == (m)[1]) && \ | ||
81 | (((a)->s6_addr[10]) == (m)[2]) && \ | ||
82 | (((a)->s6_addr[11]) == (m)[3]) && \ | ||
83 | (((a)->s6_addr[12]) == (m)[4]) && \ | ||
84 | (((a)->s6_addr[13]) == (m)[5]) && \ | ||
85 | (((a)->s6_addr[14]) == (m)[6]) && \ | ||
86 | (((a)->s6_addr[15]) == (m)[7])) | ||
87 | |||
88 | /* | ||
89 | * check whether we can compress the IID to 16 bits, | ||
90 | * it's possible for unicast adresses with first 49 bits are zero only. | ||
91 | */ | ||
92 | #define lowpan_is_iid_16_bit_compressable(a) \ | ||
93 | ((((a)->s6_addr16[4]) == 0) && \ | ||
94 | (((a)->s6_addr[10]) == 0) && \ | ||
95 | (((a)->s6_addr[11]) == 0xff) && \ | ||
96 | (((a)->s6_addr[12]) == 0xfe) && \ | ||
97 | (((a)->s6_addr[13]) == 0)) | ||
98 | |||
99 | /* check whether the 112-bit gid of the multicast address is mappable to: */ | ||
100 | |||
101 | /* 48 bits, FFXX::00XX:XXXX:XXXX */ | ||
102 | #define lowpan_is_mcast_addr_compressable48(a) \ | ||
103 | ((((a)->s6_addr16[1]) == 0) && \ | ||
104 | (((a)->s6_addr16[2]) == 0) && \ | ||
105 | (((a)->s6_addr16[3]) == 0) && \ | ||
106 | (((a)->s6_addr16[4]) == 0) && \ | ||
107 | (((a)->s6_addr[10]) == 0)) | ||
108 | |||
109 | /* 32 bits, FFXX::00XX:XXXX */ | ||
110 | #define lowpan_is_mcast_addr_compressable32(a) \ | ||
111 | ((((a)->s6_addr16[1]) == 0) && \ | ||
112 | (((a)->s6_addr16[2]) == 0) && \ | ||
113 | (((a)->s6_addr16[3]) == 0) && \ | ||
114 | (((a)->s6_addr16[4]) == 0) && \ | ||
115 | (((a)->s6_addr16[5]) == 0) && \ | ||
116 | (((a)->s6_addr[12]) == 0)) | ||
117 | |||
118 | /* 8 bits, FF02::00XX */ | ||
119 | #define lowpan_is_mcast_addr_compressable8(a) \ | ||
120 | ((((a)->s6_addr[1]) == 2) && \ | ||
121 | (((a)->s6_addr16[1]) == 0) && \ | ||
122 | (((a)->s6_addr16[2]) == 0) && \ | ||
123 | (((a)->s6_addr16[3]) == 0) && \ | ||
124 | (((a)->s6_addr16[4]) == 0) && \ | ||
125 | (((a)->s6_addr16[5]) == 0) && \ | ||
126 | (((a)->s6_addr16[6]) == 0) && \ | ||
127 | (((a)->s6_addr[14]) == 0)) | ||
128 | |||
129 | #define lowpan_is_addr_broadcast(a) \ | ||
130 | ((((a)[0]) == 0xFF) && \ | ||
131 | (((a)[1]) == 0xFF) && \ | ||
132 | (((a)[2]) == 0xFF) && \ | ||
133 | (((a)[3]) == 0xFF) && \ | ||
134 | (((a)[4]) == 0xFF) && \ | ||
135 | (((a)[5]) == 0xFF) && \ | ||
136 | (((a)[6]) == 0xFF) && \ | ||
137 | (((a)[7]) == 0xFF)) | ||
138 | 76 | ||
139 | #define LOWPAN_DISPATCH_IPV6 0x41 /* 01000001 = 65 */ | 77 | #define LOWPAN_DISPATCH_IPV6 0x41 /* 01000001 = 65 */ |
140 | #define LOWPAN_DISPATCH_IPHC 0x60 /* 011xxxxx = ... */ | 78 | #define LOWPAN_DISPATCH_IPHC 0x60 /* 011xxxxx = ... */ |
@@ -150,69 +88,6 @@ static inline bool lowpan_is_iphc(u8 dispatch) | |||
150 | return (dispatch & LOWPAN_DISPATCH_IPHC_MASK) == LOWPAN_DISPATCH_IPHC; | 88 | return (dispatch & LOWPAN_DISPATCH_IPHC_MASK) == LOWPAN_DISPATCH_IPHC; |
151 | } | 89 | } |
152 | 90 | ||
153 | #define LOWPAN_FRAG_TIMEOUT (HZ * 60) /* time-out 60 sec */ | ||
154 | |||
155 | #define LOWPAN_FRAG1_HEAD_SIZE 0x4 | ||
156 | #define LOWPAN_FRAGN_HEAD_SIZE 0x5 | ||
157 | |||
158 | /* | ||
159 | * Values of fields within the IPHC encoding first byte | ||
160 | * (C stands for compressed and I for inline) | ||
161 | */ | ||
162 | #define LOWPAN_IPHC_TF 0x18 | ||
163 | |||
164 | #define LOWPAN_IPHC_FL_C 0x10 | ||
165 | #define LOWPAN_IPHC_TC_C 0x08 | ||
166 | #define LOWPAN_IPHC_NH_C 0x04 | ||
167 | #define LOWPAN_IPHC_TTL_1 0x01 | ||
168 | #define LOWPAN_IPHC_TTL_64 0x02 | ||
169 | #define LOWPAN_IPHC_TTL_255 0x03 | ||
170 | #define LOWPAN_IPHC_TTL_I 0x00 | ||
171 | |||
172 | |||
173 | /* Values of fields within the IPHC encoding second byte */ | ||
174 | #define LOWPAN_IPHC_CID 0x80 | ||
175 | |||
176 | #define LOWPAN_IPHC_ADDR_00 0x00 | ||
177 | #define LOWPAN_IPHC_ADDR_01 0x01 | ||
178 | #define LOWPAN_IPHC_ADDR_02 0x02 | ||
179 | #define LOWPAN_IPHC_ADDR_03 0x03 | ||
180 | |||
181 | #define LOWPAN_IPHC_SAC 0x40 | ||
182 | #define LOWPAN_IPHC_SAM 0x30 | ||
183 | |||
184 | #define LOWPAN_IPHC_SAM_BIT 4 | ||
185 | |||
186 | #define LOWPAN_IPHC_M 0x08 | ||
187 | #define LOWPAN_IPHC_DAC 0x04 | ||
188 | #define LOWPAN_IPHC_DAM_00 0x00 | ||
189 | #define LOWPAN_IPHC_DAM_01 0x01 | ||
190 | #define LOWPAN_IPHC_DAM_10 0x02 | ||
191 | #define LOWPAN_IPHC_DAM_11 0x03 | ||
192 | |||
193 | #define LOWPAN_IPHC_DAM_BIT 0 | ||
194 | /* | ||
195 | * LOWPAN_UDP encoding (works together with IPHC) | ||
196 | */ | ||
197 | #define LOWPAN_NHC_UDP_MASK 0xF8 | ||
198 | #define LOWPAN_NHC_UDP_ID 0xF0 | ||
199 | #define LOWPAN_NHC_UDP_CHECKSUMC 0x04 | ||
200 | #define LOWPAN_NHC_UDP_CHECKSUMI 0x00 | ||
201 | |||
202 | #define LOWPAN_NHC_UDP_4BIT_PORT 0xF0B0 | ||
203 | #define LOWPAN_NHC_UDP_4BIT_MASK 0xFFF0 | ||
204 | #define LOWPAN_NHC_UDP_8BIT_PORT 0xF000 | ||
205 | #define LOWPAN_NHC_UDP_8BIT_MASK 0xFF00 | ||
206 | |||
207 | /* values for port compression, _with checksum_ ie bit 5 set to 0 */ | ||
208 | #define LOWPAN_NHC_UDP_CS_P_00 0xF0 /* all inline */ | ||
209 | #define LOWPAN_NHC_UDP_CS_P_01 0xF1 /* source 16bit inline, | ||
210 | dest = 0xF0 + 8 bit inline */ | ||
211 | #define LOWPAN_NHC_UDP_CS_P_10 0xF2 /* source = 0xF0 + 8bit inline, | ||
212 | dest = 16 bit inline */ | ||
213 | #define LOWPAN_NHC_UDP_CS_P_11 0xF3 /* source & dest = 0xF0B + 4bit inline */ | ||
214 | #define LOWPAN_NHC_UDP_CS_C 0x04 /* checksum elided */ | ||
215 | |||
216 | #define LOWPAN_PRIV_SIZE(llpriv_size) \ | 91 | #define LOWPAN_PRIV_SIZE(llpriv_size) \ |
217 | (sizeof(struct lowpan_priv) + llpriv_size) | 92 | (sizeof(struct lowpan_priv) + llpriv_size) |
218 | 93 | ||
@@ -250,7 +125,7 @@ struct lowpan_802154_cb *lowpan_802154_cb(const struct sk_buff *skb) | |||
250 | #ifdef DEBUG | 125 | #ifdef DEBUG |
251 | /* print data in line */ | 126 | /* print data in line */ |
252 | static inline void raw_dump_inline(const char *caller, char *msg, | 127 | static inline void raw_dump_inline(const char *caller, char *msg, |
253 | unsigned char *buf, int len) | 128 | const unsigned char *buf, int len) |
254 | { | 129 | { |
255 | if (msg) | 130 | if (msg) |
256 | pr_debug("%s():%s: ", caller, msg); | 131 | pr_debug("%s():%s: ", caller, msg); |
@@ -265,7 +140,7 @@ static inline void raw_dump_inline(const char *caller, char *msg, | |||
265 | * ... | 140 | * ... |
266 | */ | 141 | */ |
267 | static inline void raw_dump_table(const char *caller, char *msg, | 142 | static inline void raw_dump_table(const char *caller, char *msg, |
268 | unsigned char *buf, int len) | 143 | const unsigned char *buf, int len) |
269 | { | 144 | { |
270 | if (msg) | 145 | if (msg) |
271 | pr_debug("%s():%s:\n", caller, msg); | 146 | pr_debug("%s():%s:\n", caller, msg); |
@@ -274,24 +149,25 @@ static inline void raw_dump_table(const char *caller, char *msg, | |||
274 | } | 149 | } |
275 | #else | 150 | #else |
276 | static inline void raw_dump_table(const char *caller, char *msg, | 151 | static inline void raw_dump_table(const char *caller, char *msg, |
277 | unsigned char *buf, int len) { } | 152 | const unsigned char *buf, int len) { } |
278 | static inline void raw_dump_inline(const char *caller, char *msg, | 153 | static inline void raw_dump_inline(const char *caller, char *msg, |
279 | unsigned char *buf, int len) { } | 154 | const unsigned char *buf, int len) { } |
280 | #endif | 155 | #endif |
281 | 156 | ||
282 | static inline int lowpan_fetch_skb_u8(struct sk_buff *skb, u8 *val) | 157 | /** |
283 | { | 158 | * lowpan_fetch_skb - getting inline data from 6LoWPAN header |
284 | if (unlikely(!pskb_may_pull(skb, 1))) | 159 | * |
285 | return -EINVAL; | 160 | * This function will pull data from sk buffer and put it into data to |
286 | 161 | * remove the 6LoWPAN inline data. This function returns true if the | |
287 | *val = skb->data[0]; | 162 | * sk buffer is too small to pull the amount of data which is specified |
288 | skb_pull(skb, 1); | 163 | * by len. |
289 | 164 | * | |
290 | return 0; | 165 | * @skb: the buffer where the inline data should be pulled from. |
291 | } | 166 | * @data: destination buffer for the inline data. |
292 | 167 | * @len: amount of data which should be pulled in bytes. | |
293 | static inline bool lowpan_fetch_skb(struct sk_buff *skb, | 168 | */ |
294 | void *data, const unsigned int len) | 169 | static inline bool lowpan_fetch_skb(struct sk_buff *skb, void *data, |
170 | unsigned int len) | ||
295 | { | 171 | { |
296 | if (unlikely(!pskb_may_pull(skb, len))) | 172 | if (unlikely(!pskb_may_pull(skb, len))) |
297 | return true; | 173 | return true; |
@@ -311,14 +187,42 @@ static inline void lowpan_push_hc_data(u8 **hc_ptr, const void *data, | |||
311 | 187 | ||
312 | void lowpan_netdev_setup(struct net_device *dev, enum lowpan_lltypes lltype); | 188 | void lowpan_netdev_setup(struct net_device *dev, enum lowpan_lltypes lltype); |
313 | 189 | ||
314 | int | 190 | /** |
315 | lowpan_header_decompress(struct sk_buff *skb, struct net_device *dev, | 191 | * lowpan_header_decompress - replace 6LoWPAN header with IPv6 header |
316 | const u8 *saddr, const u8 saddr_type, | 192 | * |
317 | const u8 saddr_len, const u8 *daddr, | 193 | * This function replaces the IPHC 6LoWPAN header which should be pointed at |
318 | const u8 daddr_type, const u8 daddr_len, | 194 | * skb->data and skb_network_header, with the IPv6 header. |
319 | u8 iphc0, u8 iphc1); | 195 | * It would be nice that the caller have the necessary headroom of IPv6 header |
320 | int lowpan_header_compress(struct sk_buff *skb, struct net_device *dev, | 196 | * and greatest Transport layer header, this would reduce the overhead for |
321 | unsigned short type, const void *_daddr, | 197 | * reallocate headroom. |
322 | const void *_saddr, unsigned int len); | 198 | * |
199 | * @skb: the buffer which should be manipulate. | ||
200 | * @dev: the lowpan net device pointer. | ||
201 | * @daddr: destination lladdr of mac header which is used for compression | ||
202 | * methods. | ||
203 | * @saddr: source lladdr of mac header which is used for compression | ||
204 | * methods. | ||
205 | */ | ||
206 | int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev, | ||
207 | const void *daddr, const void *saddr); | ||
208 | |||
209 | /** | ||
210 | * lowpan_header_compress - replace IPv6 header with 6LoWPAN header | ||
211 | * | ||
212 | * This function replaces the IPv6 header which should be pointed at | ||
213 | * skb->data and skb_network_header, with the IPHC 6LoWPAN header. | ||
214 | * The caller need to be sure that the sk buffer is not shared and at have | ||
215 | * at least a headroom which is smaller or equal LOWPAN_IPHC_MAX_HEADER_LEN, | ||
216 | * which is the IPHC "more bytes than IPv6 header" at worst case. | ||
217 | * | ||
218 | * @skb: the buffer which should be manipulate. | ||
219 | * @dev: the lowpan net device pointer. | ||
220 | * @daddr: destination lladdr of mac header which is used for compression | ||
221 | * methods. | ||
222 | * @saddr: source lladdr of mac header which is used for compression | ||
223 | * methods. | ||
224 | */ | ||
225 | int lowpan_header_compress(struct sk_buff *skb, const struct net_device *dev, | ||
226 | const void *daddr, const void *saddr); | ||
323 | 227 | ||
324 | #endif /* __6LOWPAN_H__ */ | 228 | #endif /* __6LOWPAN_H__ */ |
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index a26ff28ca878..0205b80cc90b 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h | |||
@@ -46,6 +46,7 @@ | |||
46 | #define HCI_DEV_RESUME 6 | 46 | #define HCI_DEV_RESUME 6 |
47 | #define HCI_DEV_OPEN 7 | 47 | #define HCI_DEV_OPEN 7 |
48 | #define HCI_DEV_CLOSE 8 | 48 | #define HCI_DEV_CLOSE 8 |
49 | #define HCI_DEV_SETUP 9 | ||
49 | 50 | ||
50 | /* HCI notify events */ | 51 | /* HCI notify events */ |
51 | #define HCI_NOTIFY_CONN_ADD 1 | 52 | #define HCI_NOTIFY_CONN_ADD 1 |
@@ -170,6 +171,15 @@ enum { | |||
170 | * during the hdev->setup vendor callback. | 171 | * during the hdev->setup vendor callback. |
171 | */ | 172 | */ |
172 | HCI_QUIRK_SIMULTANEOUS_DISCOVERY, | 173 | HCI_QUIRK_SIMULTANEOUS_DISCOVERY, |
174 | |||
175 | /* When this quirk is set, the enabling of diagnostic mode is | ||
176 | * not persistent over HCI Reset. Every time the controller | ||
177 | * is brought up it needs to be reprogrammed. | ||
178 | * | ||
179 | * This quirk can be set before hci_register_dev is called or | ||
180 | * during the hdev->setup vendor callback. | ||
181 | */ | ||
182 | HCI_QUIRK_NON_PERSISTENT_DIAG, | ||
173 | }; | 183 | }; |
174 | 184 | ||
175 | /* HCI device flags */ | 185 | /* HCI device flags */ |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index f28470e59682..1878d0a96333 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -398,6 +398,7 @@ struct hci_dev { | |||
398 | int (*send)(struct hci_dev *hdev, struct sk_buff *skb); | 398 | int (*send)(struct hci_dev *hdev, struct sk_buff *skb); |
399 | void (*notify)(struct hci_dev *hdev, unsigned int evt); | 399 | void (*notify)(struct hci_dev *hdev, unsigned int evt); |
400 | void (*hw_error)(struct hci_dev *hdev, u8 code); | 400 | void (*hw_error)(struct hci_dev *hdev, u8 code); |
401 | int (*post_init)(struct hci_dev *hdev); | ||
401 | int (*set_diag)(struct hci_dev *hdev, bool enable); | 402 | int (*set_diag)(struct hci_dev *hdev, bool enable); |
402 | int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr); | 403 | int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr); |
403 | }; | 404 | }; |
@@ -470,6 +471,7 @@ struct hci_conn { | |||
470 | struct delayed_work auto_accept_work; | 471 | struct delayed_work auto_accept_work; |
471 | struct delayed_work idle_work; | 472 | struct delayed_work idle_work; |
472 | struct delayed_work le_conn_timeout; | 473 | struct delayed_work le_conn_timeout; |
474 | struct work_struct le_scan_cleanup; | ||
473 | 475 | ||
474 | struct device dev; | 476 | struct device dev; |
475 | struct dentry *debugfs; | 477 | struct dentry *debugfs; |
@@ -792,6 +794,30 @@ static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev, | |||
792 | return NULL; | 794 | return NULL; |
793 | } | 795 | } |
794 | 796 | ||
797 | static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev, | ||
798 | bdaddr_t *ba, | ||
799 | __u8 ba_type) | ||
800 | { | ||
801 | struct hci_conn_hash *h = &hdev->conn_hash; | ||
802 | struct hci_conn *c; | ||
803 | |||
804 | rcu_read_lock(); | ||
805 | |||
806 | list_for_each_entry_rcu(c, &h->list, list) { | ||
807 | if (c->type != LE_LINK) | ||
808 | continue; | ||
809 | |||
810 | if (ba_type == c->dst_type && !bacmp(&c->dst, ba)) { | ||
811 | rcu_read_unlock(); | ||
812 | return c; | ||
813 | } | ||
814 | } | ||
815 | |||
816 | rcu_read_unlock(); | ||
817 | |||
818 | return NULL; | ||
819 | } | ||
820 | |||
795 | static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev, | 821 | static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev, |
796 | __u8 type, __u16 state) | 822 | __u8 type, __u16 state) |
797 | { | 823 | { |
@@ -1016,9 +1042,6 @@ void hci_conn_params_clear_disabled(struct hci_dev *hdev); | |||
1016 | struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list, | 1042 | struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list, |
1017 | bdaddr_t *addr, | 1043 | bdaddr_t *addr, |
1018 | u8 addr_type); | 1044 | u8 addr_type); |
1019 | struct hci_conn_params *hci_explicit_connect_lookup(struct hci_dev *hdev, | ||
1020 | bdaddr_t *addr, | ||
1021 | u8 addr_type); | ||
1022 | 1045 | ||
1023 | void hci_uuids_clear(struct hci_dev *hdev); | 1046 | void hci_uuids_clear(struct hci_dev *hdev); |
1024 | 1047 | ||
@@ -1458,7 +1481,7 @@ void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, | |||
1458 | void mgmt_discovering(struct hci_dev *hdev, u8 discovering); | 1481 | void mgmt_discovering(struct hci_dev *hdev, u8 discovering); |
1459 | bool mgmt_powering_down(struct hci_dev *hdev); | 1482 | bool mgmt_powering_down(struct hci_dev *hdev); |
1460 | void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent); | 1483 | void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent); |
1461 | void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk); | 1484 | void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent); |
1462 | void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk, | 1485 | void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk, |
1463 | bool persistent); | 1486 | bool persistent); |
1464 | void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr, | 1487 | void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr, |
diff --git a/include/net/mac802154.h b/include/net/mac802154.h index 5718765cbd95..da574bbdc333 100644 --- a/include/net/mac802154.h +++ b/include/net/mac802154.h | |||
@@ -277,6 +277,16 @@ static inline void ieee802154_le64_to_be64(void *be64_dst, const void *le64_src) | |||
277 | } | 277 | } |
278 | 278 | ||
279 | /** | 279 | /** |
280 | * ieee802154_le16_to_be16 - copies and convert le16 to be16 | ||
281 | * @be16_dst: be16 destination pointer | ||
282 | * @le16_src: le16 source pointer | ||
283 | */ | ||
284 | static inline void ieee802154_le16_to_be16(void *be16_dst, const void *le16_src) | ||
285 | { | ||
286 | __put_unaligned_memmove16(swab16p(le16_src), be16_dst); | ||
287 | } | ||
288 | |||
289 | /** | ||
280 | * ieee802154_alloc_hw - Allocate a new hardware device | 290 | * ieee802154_alloc_hw - Allocate a new hardware device |
281 | * | 291 | * |
282 | * This must be called once for each hardware device. The returned pointer | 292 | * This must be called once for each hardware device. The returned pointer |