Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next

+1641 -394
+17 -11
drivers/bluetooth/btmrvl_sdio.c
··· 492 492 static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv) 493 493 { 494 494 u16 buf_len = 0; 495 - int ret, buf_block_len, blksz; 495 + int ret, num_blocks, blksz; 496 496 struct sk_buff *skb = NULL; 497 497 u32 type; 498 498 u8 *payload = NULL; ··· 514 514 } 515 515 516 516 blksz = SDIO_BLOCK_SIZE; 517 - buf_block_len = (buf_len + blksz - 1) / blksz; 517 + num_blocks = DIV_ROUND_UP(buf_len, blksz); 518 518 519 519 if (buf_len <= SDIO_HEADER_LEN 520 - || (buf_block_len * blksz) > ALLOC_BUF_SIZE) { 520 + || (num_blocks * blksz) > ALLOC_BUF_SIZE) { 521 521 BT_ERR("invalid packet length: %d", buf_len); 522 522 ret = -EINVAL; 523 523 goto exit; 524 524 } 525 525 526 526 /* Allocate buffer */ 527 - skb = bt_skb_alloc(buf_block_len * blksz + BTSDIO_DMA_ALIGN, 528 - GFP_ATOMIC); 527 + skb = bt_skb_alloc(num_blocks * blksz + BTSDIO_DMA_ALIGN, GFP_ATOMIC); 529 528 if (skb == NULL) { 530 529 BT_ERR("No free skb"); 531 530 goto exit; ··· 540 541 payload = skb->data; 541 542 542 543 ret = sdio_readsb(card->func, payload, card->ioport, 543 - buf_block_len * blksz); 544 + num_blocks * blksz); 544 545 if (ret < 0) { 545 546 BT_ERR("readsb failed: %d", ret); 546 547 ret = -EIO; ··· 552 553 */ 553 554 554 555 buf_len = payload[0]; 555 - buf_len |= (u16) payload[1] << 8; 556 + buf_len |= payload[1] << 8; 557 + buf_len |= payload[2] << 16; 558 + 559 + if (buf_len > blksz * num_blocks) { 560 + BT_ERR("Skip incorrect packet: hdrlen %d buffer %d", 561 + buf_len, blksz * num_blocks); 562 + ret = -EIO; 563 + goto exit; 564 + } 565 + 556 566 type = payload[3]; 557 567 558 568 switch (type) { ··· 597 589 598 590 default: 599 591 BT_ERR("Unknown packet type:%d", type); 600 - print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, payload, 601 - blksz * buf_block_len); 592 + BT_ERR("hex: %*ph", blksz * num_blocks, payload); 602 593 603 594 kfree_skb(skb); 604 595 skb = NULL; ··· 856 849 if (ret < 0) { 857 850 i++; 858 851 BT_ERR("i=%d writesb failed: %d", i, ret); 859 - print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, 860 - payload, nb); 852 + BT_ERR("hex: %*ph", nb, payload); 861 853 ret = -EIO; 862 854 if (i > MAX_WRITE_IOMEM_RETRY) 863 855 goto exit;
+23 -1
include/net/bluetooth/a2mp.h
··· 19 19 20 20 #define A2MP_FEAT_EXT 0x8000 21 21 22 + enum amp_mgr_state { 23 + READ_LOC_AMP_INFO, 24 + READ_LOC_AMP_ASSOC, 25 + READ_LOC_AMP_ASSOC_FINAL, 26 + }; 27 + 22 28 struct amp_mgr { 29 + struct list_head list; 23 30 struct l2cap_conn *l2cap_conn; 24 31 struct l2cap_chan *a2mp_chan; 32 + struct l2cap_chan *bredr_chan; 25 33 struct kref kref; 26 34 __u8 ident; 27 35 __u8 handle; 36 + enum amp_mgr_state state; 28 37 unsigned long flags; 38 + 39 + struct list_head amp_ctrls; 40 + struct mutex amp_ctrls_lock; 29 41 }; 30 42 31 43 struct a2mp_cmd { ··· 130 118 #define A2MP_STATUS_PHYS_LINK_EXISTS 0x05 131 119 #define A2MP_STATUS_SECURITY_VIOLATION 0x06 132 120 133 - void amp_mgr_get(struct amp_mgr *mgr); 121 + extern struct list_head amp_mgr_list; 122 + extern struct mutex amp_mgr_list_lock; 123 + 124 + struct amp_mgr *amp_mgr_get(struct amp_mgr *mgr); 134 125 int amp_mgr_put(struct amp_mgr *mgr); 126 + u8 __next_ident(struct amp_mgr *mgr); 135 127 struct l2cap_chan *a2mp_channel_create(struct l2cap_conn *conn, 136 128 struct sk_buff *skb); 129 + struct amp_mgr *amp_mgr_lookup_by_state(u8 state); 130 + void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, void *data); 131 + void a2mp_discover_amp(struct l2cap_chan *chan); 132 + void a2mp_send_getinfo_rsp(struct hci_dev *hdev); 133 + void a2mp_send_getampassoc_rsp(struct hci_dev *hdev, u8 status); 134 + void a2mp_send_create_phy_link_req(struct hci_dev *hdev, u8 status); 137 135 138 136 #endif /* __A2MP_H */
+50
include/net/bluetooth/amp.h
··· 1 + /* 2 + Copyright (c) 2011,2012 Intel Corp. 3 + 4 + This program is free software; you can redistribute it and/or modify 5 + it under the terms of the GNU General Public License version 2 and 6 + only version 2 as published by the Free Software Foundation. 7 + 8 + This program is distributed in the hope that it will be useful, 9 + but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + GNU General Public License for more details. 12 + */ 13 + 14 + #ifndef __AMP_H 15 + #define __AMP_H 16 + 17 + struct amp_ctrl { 18 + struct list_head list; 19 + struct kref kref; 20 + __u8 id; 21 + __u16 assoc_len_so_far; 22 + __u16 assoc_rem_len; 23 + __u16 assoc_len; 24 + __u8 *assoc; 25 + }; 26 + 27 + int amp_ctrl_put(struct amp_ctrl *ctrl); 28 + void amp_ctrl_get(struct amp_ctrl *ctrl); 29 + struct amp_ctrl *amp_ctrl_add(struct amp_mgr *mgr, u8 id); 30 + struct amp_ctrl *amp_ctrl_lookup(struct amp_mgr *mgr, u8 id); 31 + void amp_ctrl_list_flush(struct amp_mgr *mgr); 32 + 33 + struct hci_conn *phylink_add(struct hci_dev *hdev, struct amp_mgr *mgr, 34 + u8 remote_id, bool out); 35 + 36 + int phylink_gen_key(struct hci_conn *hcon, u8 *data, u8 *len, u8 *type); 37 + 38 + void amp_read_loc_info(struct hci_dev *hdev, struct amp_mgr *mgr); 39 + void amp_read_loc_assoc_frag(struct hci_dev *hdev, u8 phy_handle); 40 + void amp_read_loc_assoc(struct hci_dev *hdev, struct amp_mgr *mgr); 41 + void amp_read_loc_assoc_final_data(struct hci_dev *hdev, 42 + struct hci_conn *hcon); 43 + void amp_create_phylink(struct hci_dev *hdev, struct amp_mgr *mgr, 44 + struct hci_conn *hcon); 45 + void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr, 46 + struct hci_conn *hcon); 47 + void amp_write_remote_assoc(struct hci_dev *hdev, u8 handle); 48 + void amp_write_rem_assoc_continue(struct hci_dev *hdev, u8 handle); 49 + 50 + #endif /* __AMP_H */
-1
include/net/bluetooth/bluetooth.h
··· 180 180 } 181 181 182 182 void baswap(bdaddr_t *dst, bdaddr_t *src); 183 - char *batostr(bdaddr_t *ba); 184 183 185 184 /* Common socket structures and functions */ 186 185
+39 -1
include/net/bluetooth/hci.h
··· 33 33 #define HCI_LINK_KEY_SIZE 16 34 34 #define HCI_AMP_LINK_KEY_SIZE (2 * HCI_LINK_KEY_SIZE) 35 35 36 + #define HCI_MAX_AMP_ASSOC_SIZE 672 37 + 36 38 /* HCI dev events */ 37 39 #define HCI_DEV_REG 1 38 40 #define HCI_DEV_UNREG 2 ··· 198 196 #define ACL_START_NO_FLUSH 0x00 199 197 #define ACL_CONT 0x01 200 198 #define ACL_START 0x02 199 + #define ACL_COMPLETE 0x03 201 200 #define ACL_ACTIVE_BCAST 0x04 202 201 #define ACL_PICO_BCAST 0x08 203 202 ··· 208 205 #define ESCO_LINK 0x02 209 206 /* Low Energy links do not have defined link type. Use invented one */ 210 207 #define LE_LINK 0x80 208 + #define AMP_LINK 0x81 211 209 212 210 /* LMP features */ 213 211 #define LMP_3SLOT 0x01 ··· 560 556 __u8 key[HCI_AMP_LINK_KEY_SIZE]; 561 557 } __packed; 562 558 563 - #define HCI_OP_DISCONN_PHY_LINK 0x0437 559 + #define HCI_OP_DISCONN_PHY_LINK 0x0437 564 560 struct hci_cp_disconn_phy_link { 565 561 __u8 phy_handle; 566 562 __u8 reason; 563 + } __packed; 564 + 565 + struct ext_flow_spec { 566 + __u8 id; 567 + __u8 stype; 568 + __le16 msdu; 569 + __le32 sdu_itime; 570 + __le32 acc_lat; 571 + __le32 flush_to; 572 + } __packed; 573 + 574 + #define HCI_OP_CREATE_LOGICAL_LINK 0x0438 575 + #define HCI_OP_ACCEPT_LOGICAL_LINK 0x0439 576 + struct hci_cp_create_accept_logical_link { 577 + __u8 phy_handle; 578 + struct ext_flow_spec tx_flow_spec; 579 + struct ext_flow_spec rx_flow_spec; 580 + } __packed; 581 + 582 + #define HCI_OP_DISCONN_LOGICAL_LINK 0x043a 583 + struct hci_cp_disconn_logical_link { 584 + __le16 log_handle; 585 + } __packed; 586 + 587 + #define HCI_OP_LOGICAL_LINK_CANCEL 0x043b 588 + struct hci_cp_logical_link_cancel { 589 + __u8 phy_handle; 590 + __u8 flow_spec_id; 591 + } __packed; 592 + 593 + struct hci_rp_logical_link_cancel { 594 + __u8 status; 595 + __u8 phy_handle; 596 + __u8 flow_spec_id; 567 597 } __packed; 568 598 569 599 #define HCI_OP_SNIFF_MODE 0x0803
+42 -6
include/net/bluetooth/hci_core.h
··· 73 73 struct hci_conn_hash { 74 74 struct list_head list; 75 75 unsigned int acl_num; 76 + unsigned int amp_num; 76 77 unsigned int sco_num; 77 78 unsigned int le_num; 78 79 }; ··· 124 123 }; 125 124 126 125 #define HCI_MAX_SHORT_NAME_LENGTH 10 126 + 127 + struct amp_assoc { 128 + __u16 len; 129 + __u16 offset; 130 + __u16 rem_len; 131 + __u16 len_so_far; 132 + __u8 data[HCI_MAX_AMP_ASSOC_SIZE]; 133 + }; 127 134 128 135 #define NUM_REASSEMBLY 4 129 136 struct hci_dev { ··· 185 176 __u16 amp_assoc_size; 186 177 __u32 amp_max_flush_to; 187 178 __u32 amp_be_flush_to; 179 + 180 + struct amp_assoc loc_assoc; 188 181 189 182 __u8 flow_ctl_mode; 190 183 ··· 263 252 264 253 struct sk_buff_head driver_init; 265 254 266 - void *core_data; 267 - 268 255 atomic_t promisc; 269 256 270 257 struct dentry *debugfs; ··· 285 276 void (*notify)(struct hci_dev *hdev, unsigned int evt); 286 277 int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg); 287 278 }; 279 + 280 + #define HCI_PHY_HANDLE(handle) (handle & 0xff) 288 281 289 282 struct hci_conn { 290 283 struct list_head list; ··· 321 310 322 311 __u8 remote_cap; 323 312 __u8 remote_auth; 313 + __u8 remote_id; 324 314 bool flush_key; 325 315 326 316 unsigned int sent; ··· 351 339 352 340 struct hci_chan { 353 341 struct list_head list; 354 - 342 + __u16 handle; 355 343 struct hci_conn *conn; 356 344 struct sk_buff_head data_q; 357 345 unsigned int sent; ··· 450 438 case ACL_LINK: 451 439 h->acl_num++; 452 440 break; 441 + case AMP_LINK: 442 + h->amp_num++; 443 + break; 453 444 case LE_LINK: 454 445 h->le_num++; 455 446 break; ··· 474 459 case ACL_LINK: 475 460 h->acl_num--; 476 461 break; 462 + case AMP_LINK: 463 + h->amp_num--; 464 + break; 477 465 case LE_LINK: 478 466 h->le_num--; 479 467 break; ··· 493 475 switch (type) { 494 476 case ACL_LINK: 495 477 return h->acl_num; 478 + case AMP_LINK: 479 + return h->amp_num; 496 480 case LE_LINK: 497 481 return h->le_num; 498 482 case SCO_LINK: ··· 576 556 struct hci_chan *hci_chan_create(struct hci_conn *conn); 577 557 void hci_chan_del(struct hci_chan *chan); 578 558 void hci_chan_list_flush(struct hci_conn *conn); 559 + struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle); 579 560 580 561 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, 581 562 __u8 dst_type, __u8 sec_level, __u8 auth_type); ··· 605 584 606 585 if (atomic_dec_and_test(&conn->refcnt)) { 607 586 unsigned long timeo; 608 - if (conn->type == ACL_LINK || conn->type == LE_LINK) { 587 + 588 + switch (conn->type) { 589 + case ACL_LINK: 590 + case LE_LINK: 609 591 del_timer(&conn->idle_timer); 610 592 if (conn->state == BT_CONNECTED) { 611 593 timeo = conn->disc_timeout; ··· 617 593 } else { 618 594 timeo = msecs_to_jiffies(10); 619 595 } 620 - } else { 596 + break; 597 + 598 + case AMP_LINK: 599 + timeo = conn->disc_timeout; 600 + break; 601 + 602 + default: 621 603 timeo = msecs_to_jiffies(10); 604 + break; 622 605 } 606 + 623 607 cancel_delayed_work(&conn->disc_work); 624 608 queue_delayed_work(conn->hdev->workqueue, 625 - &conn->disc_work, timeo); 609 + &conn->disc_work, timeo); 626 610 } 627 611 } 628 612 ··· 819 787 case SCO_LINK: 820 788 case ESCO_LINK: 821 789 sco_disconn_cfm(conn, reason); 790 + break; 791 + 792 + /* L2CAP would be handled for BREDR chan */ 793 + case AMP_LINK: 822 794 break; 823 795 824 796 default:
+12 -2
include/net/bluetooth/l2cap.h
··· 32 32 /* L2CAP defaults */ 33 33 #define L2CAP_DEFAULT_MTU 672 34 34 #define L2CAP_DEFAULT_MIN_MTU 48 35 - #define L2CAP_DEFAULT_FLUSH_TO 0xffff 35 + #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF 36 + #define L2CAP_EFS_DEFAULT_FLUSH_TO 0xFFFFFFFF 36 37 #define L2CAP_DEFAULT_TX_WINDOW 63 37 38 #define L2CAP_DEFAULT_EXT_WINDOW 0x3FFF 38 39 #define L2CAP_DEFAULT_MAX_TX 3 39 40 #define L2CAP_DEFAULT_RETRANS_TO 2000 /* 2 seconds */ 40 41 #define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */ 41 - #define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */ 42 + #define L2CAP_DEFAULT_MAX_PDU_SIZE 1492 /* Sized for AMP packet */ 42 43 #define L2CAP_DEFAULT_ACK_TO 200 43 44 #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF 44 45 #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF ··· 509 508 __u32 remote_acc_lat; 510 509 __u32 remote_flush_to; 511 510 511 + __u8 ctrl_id; 512 + 512 513 struct delayed_work chan_timer; 513 514 struct delayed_work retrans_timer; 514 515 struct delayed_work monitor_timer; ··· 541 538 void (*state_change) (struct l2cap_chan *chan, 542 539 int state); 543 540 void (*ready) (struct l2cap_chan *chan); 541 + void (*defer) (struct l2cap_chan *chan); 544 542 struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, 545 543 unsigned long len, int nb); 546 544 }; ··· 749 745 { 750 746 } 751 747 748 + static inline void l2cap_chan_no_defer(struct l2cap_chan *chan) 749 + { 750 + } 751 + 752 752 extern bool disable_ertm; 753 753 754 754 int l2cap_init_sockets(void); ··· 775 767 void l2cap_chan_set_defaults(struct l2cap_chan *chan); 776 768 int l2cap_ertm_init(struct l2cap_chan *chan); 777 769 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan); 770 + void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan); 778 771 void l2cap_chan_del(struct l2cap_chan *chan, int err); 772 + void l2cap_send_conn_req(struct l2cap_chan *chan); 779 773 780 774 #endif /* __L2CAP_H */
+1
net/bluetooth/Kconfig
··· 11 11 select CRYPTO_BLKCIPHER 12 12 select CRYPTO_AES 13 13 select CRYPTO_ECB 14 + select CRYPTO_SHA256 14 15 help 15 16 Bluetooth is low-cost, low-power, short-range wireless technology. 16 17 It was designed as a replacement for cables and other short-range
+1 -1
net/bluetooth/Makefile
··· 10 10 11 11 bluetooth-y := af_bluetooth.o hci_core.o hci_conn.o hci_event.o mgmt.o \ 12 12 hci_sock.o hci_sysfs.o l2cap_core.o l2cap_sock.o smp.o sco.o lib.o \ 13 - a2mp.o 13 + a2mp.o amp.o
+429 -30
net/bluetooth/a2mp.c
··· 16 16 #include <net/bluetooth/hci_core.h> 17 17 #include <net/bluetooth/l2cap.h> 18 18 #include <net/bluetooth/a2mp.h> 19 + #include <net/bluetooth/amp.h> 20 + 21 + /* Global AMP Manager list */ 22 + LIST_HEAD(amp_mgr_list); 23 + DEFINE_MUTEX(amp_mgr_list_lock); 19 24 20 25 /* A2MP build & send command helper functions */ 21 26 static struct a2mp_cmd *__a2mp_build(u8 code, u8 ident, u16 len, void *data) ··· 42 37 return cmd; 43 38 } 44 39 45 - static void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, 46 - void *data) 40 + void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, void *data) 47 41 { 48 42 struct l2cap_chan *chan = mgr->a2mp_chan; 49 43 struct a2mp_cmd *cmd; ··· 65 61 l2cap_chan_send(chan, &msg, total_len, 0); 66 62 67 63 kfree(cmd); 64 + } 65 + 66 + u8 __next_ident(struct amp_mgr *mgr) 67 + { 68 + if (++mgr->ident == 0) 69 + mgr->ident = 1; 70 + 71 + return mgr->ident; 68 72 } 69 73 70 74 static inline void __a2mp_cl_bredr(struct a2mp_cl *cl) ··· 173 161 return 0; 174 162 } 175 163 164 + static int a2mp_discover_rsp(struct amp_mgr *mgr, struct sk_buff *skb, 165 + struct a2mp_cmd *hdr) 166 + { 167 + struct a2mp_discov_rsp *rsp = (void *) skb->data; 168 + u16 len = le16_to_cpu(hdr->len); 169 + struct a2mp_cl *cl; 170 + u16 ext_feat; 171 + bool found = false; 172 + 173 + if (len < sizeof(*rsp)) 174 + return -EINVAL; 175 + 176 + len -= sizeof(*rsp); 177 + skb_pull(skb, sizeof(*rsp)); 178 + 179 + ext_feat = le16_to_cpu(rsp->ext_feat); 180 + 181 + BT_DBG("mtu %d efm 0x%4.4x", le16_to_cpu(rsp->mtu), ext_feat); 182 + 183 + /* check that packet is not broken for now */ 184 + while (ext_feat & A2MP_FEAT_EXT) { 185 + if (len < sizeof(ext_feat)) 186 + return -EINVAL; 187 + 188 + ext_feat = get_unaligned_le16(skb->data); 189 + BT_DBG("efm 0x%4.4x", ext_feat); 190 + len -= sizeof(ext_feat); 191 + skb_pull(skb, sizeof(ext_feat)); 192 + } 193 + 194 + cl = (void *) skb->data; 195 + while (len >= sizeof(*cl)) { 196 + BT_DBG("Remote AMP id %d type %d status %d", cl->id, cl->type, 197 + cl->status); 198 + 199 + if (cl->id != HCI_BREDR_ID && cl->type == HCI_AMP) { 200 + struct a2mp_info_req req; 201 + 202 + found = true; 203 + req.id = cl->id; 204 + a2mp_send(mgr, A2MP_GETINFO_REQ, __next_ident(mgr), 205 + sizeof(req), &req); 206 + } 207 + 208 + len -= sizeof(*cl); 209 + cl = (void *) skb_pull(skb, sizeof(*cl)); 210 + } 211 + 212 + /* Fall back to L2CAP init sequence */ 213 + if (!found) { 214 + struct l2cap_conn *conn = mgr->l2cap_conn; 215 + struct l2cap_chan *chan; 216 + 217 + mutex_lock(&conn->chan_lock); 218 + 219 + list_for_each_entry(chan, &conn->chan_l, list) { 220 + 221 + BT_DBG("chan %p state %s", chan, 222 + state_to_string(chan->state)); 223 + 224 + if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) 225 + continue; 226 + 227 + l2cap_chan_lock(chan); 228 + 229 + if (chan->state == BT_CONNECT) 230 + l2cap_send_conn_req(chan); 231 + 232 + l2cap_chan_unlock(chan); 233 + } 234 + 235 + mutex_unlock(&conn->chan_lock); 236 + } 237 + 238 + return 0; 239 + } 240 + 176 241 static int a2mp_change_notify(struct amp_mgr *mgr, struct sk_buff *skb, 177 242 struct a2mp_cmd *hdr) 178 243 { ··· 270 181 struct a2mp_cmd *hdr) 271 182 { 272 183 struct a2mp_info_req *req = (void *) skb->data; 273 - struct a2mp_info_rsp rsp; 274 184 struct hci_dev *hdev; 275 185 276 186 if (le16_to_cpu(hdr->len) < sizeof(*req)) ··· 277 189 278 190 BT_DBG("id %d", req->id); 279 191 280 - rsp.id = req->id; 281 - rsp.status = A2MP_STATUS_INVALID_CTRL_ID; 282 - 283 192 hdev = hci_dev_get(req->id); 284 - if (hdev && hdev->amp_type != HCI_BREDR) { 285 - rsp.status = 0; 286 - rsp.total_bw = cpu_to_le32(hdev->amp_total_bw); 287 - rsp.max_bw = cpu_to_le32(hdev->amp_max_bw); 288 - rsp.min_latency = cpu_to_le32(hdev->amp_min_latency); 289 - rsp.pal_cap = cpu_to_le16(hdev->amp_pal_cap); 290 - rsp.assoc_size = cpu_to_le16(hdev->amp_assoc_size); 193 + if (!hdev || hdev->dev_type != HCI_AMP) { 194 + struct a2mp_info_rsp rsp; 195 + 196 + rsp.id = req->id; 197 + rsp.status = A2MP_STATUS_INVALID_CTRL_ID; 198 + 199 + a2mp_send(mgr, A2MP_GETINFO_RSP, hdr->ident, sizeof(rsp), 200 + &rsp); 201 + 202 + goto done; 291 203 } 292 204 205 + mgr->state = READ_LOC_AMP_INFO; 206 + hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL); 207 + 208 + done: 293 209 if (hdev) 294 210 hci_dev_put(hdev); 295 211 296 - a2mp_send(mgr, A2MP_GETINFO_RSP, hdr->ident, sizeof(rsp), &rsp); 297 - 298 212 skb_pull(skb, sizeof(*req)); 213 + return 0; 214 + } 215 + 216 + static int a2mp_getinfo_rsp(struct amp_mgr *mgr, struct sk_buff *skb, 217 + struct a2mp_cmd *hdr) 218 + { 219 + struct a2mp_info_rsp *rsp = (struct a2mp_info_rsp *) skb->data; 220 + struct a2mp_amp_assoc_req req; 221 + struct amp_ctrl *ctrl; 222 + 223 + if (le16_to_cpu(hdr->len) < sizeof(*rsp)) 224 + return -EINVAL; 225 + 226 + BT_DBG("id %d status 0x%2.2x", rsp->id, rsp->status); 227 + 228 + if (rsp->status) 229 + return -EINVAL; 230 + 231 + ctrl = amp_ctrl_add(mgr, rsp->id); 232 + if (!ctrl) 233 + return -ENOMEM; 234 + 235 + req.id = rsp->id; 236 + a2mp_send(mgr, A2MP_GETAMPASSOC_REQ, __next_ident(mgr), sizeof(req), 237 + &req); 238 + 239 + skb_pull(skb, sizeof(*rsp)); 299 240 return 0; 300 241 } 301 242 ··· 333 216 { 334 217 struct a2mp_amp_assoc_req *req = (void *) skb->data; 335 218 struct hci_dev *hdev; 219 + struct amp_mgr *tmp; 336 220 337 221 if (le16_to_cpu(hdr->len) < sizeof(*req)) 338 222 return -EINVAL; 339 223 340 224 BT_DBG("id %d", req->id); 341 225 226 + /* Make sure that other request is not processed */ 227 + tmp = amp_mgr_lookup_by_state(READ_LOC_AMP_ASSOC); 228 + 342 229 hdev = hci_dev_get(req->id); 343 - if (!hdev || hdev->amp_type == HCI_BREDR) { 230 + if (!hdev || hdev->amp_type == HCI_BREDR || tmp) { 344 231 struct a2mp_amp_assoc_rsp rsp; 345 232 rsp.id = req->id; 346 - rsp.status = A2MP_STATUS_INVALID_CTRL_ID; 233 + 234 + if (tmp) { 235 + rsp.status = A2MP_STATUS_COLLISION_OCCURED; 236 + amp_mgr_put(tmp); 237 + } else { 238 + rsp.status = A2MP_STATUS_INVALID_CTRL_ID; 239 + } 347 240 348 241 a2mp_send(mgr, A2MP_GETAMPASSOC_RSP, hdr->ident, sizeof(rsp), 349 242 &rsp); 350 - goto clean; 243 + 244 + goto done; 351 245 } 352 246 353 - /* Placeholder for HCI Read AMP Assoc */ 247 + amp_read_loc_assoc(hdev, mgr); 354 248 355 - clean: 249 + done: 356 250 if (hdev) 357 251 hci_dev_put(hdev); 358 252 359 253 skb_pull(skb, sizeof(*req)); 254 + return 0; 255 + } 256 + 257 + static int a2mp_getampassoc_rsp(struct amp_mgr *mgr, struct sk_buff *skb, 258 + struct a2mp_cmd *hdr) 259 + { 260 + struct a2mp_amp_assoc_rsp *rsp = (void *) skb->data; 261 + u16 len = le16_to_cpu(hdr->len); 262 + struct hci_dev *hdev; 263 + struct amp_ctrl *ctrl; 264 + struct hci_conn *hcon; 265 + size_t assoc_len; 266 + 267 + if (len < sizeof(*rsp)) 268 + return -EINVAL; 269 + 270 + assoc_len = len - sizeof(*rsp); 271 + 272 + BT_DBG("id %d status 0x%2.2x assoc len %zu", rsp->id, rsp->status, 273 + assoc_len); 274 + 275 + if (rsp->status) 276 + return -EINVAL; 277 + 278 + /* Save remote ASSOC data */ 279 + ctrl = amp_ctrl_lookup(mgr, rsp->id); 280 + if (ctrl) { 281 + u8 *assoc; 282 + 283 + assoc = kzalloc(assoc_len, GFP_KERNEL); 284 + if (!assoc) { 285 + amp_ctrl_put(ctrl); 286 + return -ENOMEM; 287 + } 288 + 289 + memcpy(assoc, rsp->amp_assoc, assoc_len); 290 + ctrl->assoc = assoc; 291 + ctrl->assoc_len = assoc_len; 292 + ctrl->assoc_rem_len = assoc_len; 293 + ctrl->assoc_len_so_far = 0; 294 + 295 + amp_ctrl_put(ctrl); 296 + } 297 + 298 + /* Create Phys Link */ 299 + hdev = hci_dev_get(rsp->id); 300 + if (!hdev) 301 + return -EINVAL; 302 + 303 + hcon = phylink_add(hdev, mgr, rsp->id, true); 304 + if (!hcon) 305 + goto done; 306 + 307 + BT_DBG("Created hcon %p: loc:%d -> rem:%d", hcon, hdev->id, rsp->id); 308 + 309 + mgr->bredr_chan->ctrl_id = rsp->id; 310 + 311 + amp_create_phylink(hdev, mgr, hcon); 312 + 313 + done: 314 + hci_dev_put(hdev); 315 + skb_pull(skb, len); 360 316 return 0; 361 317 } 362 318 ··· 440 250 441 251 struct a2mp_physlink_rsp rsp; 442 252 struct hci_dev *hdev; 253 + struct hci_conn *hcon; 254 + struct amp_ctrl *ctrl; 443 255 444 256 if (le16_to_cpu(hdr->len) < sizeof(*req)) 445 257 return -EINVAL; ··· 457 265 goto send_rsp; 458 266 } 459 267 460 - /* TODO process physlink create */ 268 + ctrl = amp_ctrl_lookup(mgr, rsp.remote_id); 269 + if (!ctrl) { 270 + ctrl = amp_ctrl_add(mgr, rsp.remote_id); 271 + if (ctrl) { 272 + amp_ctrl_get(ctrl); 273 + } else { 274 + rsp.status = A2MP_STATUS_UNABLE_START_LINK_CREATION; 275 + goto send_rsp; 276 + } 277 + } 461 278 462 - rsp.status = A2MP_STATUS_SUCCESS; 279 + if (ctrl) { 280 + size_t assoc_len = le16_to_cpu(hdr->len) - sizeof(*req); 281 + u8 *assoc; 282 + 283 + assoc = kzalloc(assoc_len, GFP_KERNEL); 284 + if (!assoc) { 285 + amp_ctrl_put(ctrl); 286 + return -ENOMEM; 287 + } 288 + 289 + memcpy(assoc, req->amp_assoc, assoc_len); 290 + ctrl->assoc = assoc; 291 + ctrl->assoc_len = assoc_len; 292 + ctrl->assoc_rem_len = assoc_len; 293 + ctrl->assoc_len_so_far = 0; 294 + 295 + amp_ctrl_put(ctrl); 296 + } 297 + 298 + hcon = phylink_add(hdev, mgr, req->local_id, false); 299 + if (hcon) { 300 + amp_accept_phylink(hdev, mgr, hcon); 301 + rsp.status = A2MP_STATUS_SUCCESS; 302 + } else { 303 + rsp.status = A2MP_STATUS_UNABLE_START_LINK_CREATION; 304 + } 463 305 464 306 send_rsp: 465 307 if (hdev) ··· 512 286 struct a2mp_physlink_req *req = (void *) skb->data; 513 287 struct a2mp_physlink_rsp rsp; 514 288 struct hci_dev *hdev; 289 + struct hci_conn *hcon; 515 290 516 291 if (le16_to_cpu(hdr->len) < sizeof(*req)) 517 292 return -EINVAL; ··· 523 296 rsp.remote_id = req->local_id; 524 297 rsp.status = A2MP_STATUS_SUCCESS; 525 298 526 - hdev = hci_dev_get(req->local_id); 299 + hdev = hci_dev_get(req->remote_id); 527 300 if (!hdev) { 528 301 rsp.status = A2MP_STATUS_INVALID_CTRL_ID; 529 302 goto send_rsp; 530 303 } 531 304 305 + hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK, mgr->l2cap_conn->dst); 306 + if (!hcon) { 307 + BT_ERR("No phys link exist"); 308 + rsp.status = A2MP_STATUS_NO_PHYSICAL_LINK_EXISTS; 309 + goto clean; 310 + } 311 + 532 312 /* TODO Disconnect Phys Link here */ 533 313 314 + clean: 534 315 hci_dev_put(hdev); 535 316 536 317 send_rsp: ··· 612 377 err = a2mp_discphyslink_req(mgr, skb, hdr); 613 378 break; 614 379 615 - case A2MP_CHANGE_RSP: 616 380 case A2MP_DISCOVER_RSP: 381 + err = a2mp_discover_rsp(mgr, skb, hdr); 382 + break; 383 + 617 384 case A2MP_GETINFO_RSP: 385 + err = a2mp_getinfo_rsp(mgr, skb, hdr); 386 + break; 387 + 618 388 case A2MP_GETAMPASSOC_RSP: 389 + err = a2mp_getampassoc_rsp(mgr, skb, hdr); 390 + break; 391 + 392 + case A2MP_CHANGE_RSP: 619 393 case A2MP_CREATEPHYSLINK_RSP: 620 394 case A2MP_DISCONNPHYSLINK_RSP: 621 395 err = a2mp_cmd_rsp(mgr, skb, hdr); ··· 699 455 .new_connection = l2cap_chan_no_new_connection, 700 456 .teardown = l2cap_chan_no_teardown, 701 457 .ready = l2cap_chan_no_ready, 458 + .defer = l2cap_chan_no_defer, 702 459 }; 703 460 704 - static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn) 461 + static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn, bool locked) 705 462 { 706 463 struct l2cap_chan *chan; 707 464 int err; ··· 737 492 738 493 chan->conf_state = 0; 739 494 740 - l2cap_chan_add(conn, chan); 495 + if (locked) 496 + __l2cap_chan_add(conn, chan); 497 + else 498 + l2cap_chan_add(conn, chan); 741 499 742 500 chan->remote_mps = chan->omtu; 743 501 chan->mps = chan->omtu; ··· 751 503 } 752 504 753 505 /* AMP Manager functions */ 754 - void amp_mgr_get(struct amp_mgr *mgr) 506 + struct amp_mgr *amp_mgr_get(struct amp_mgr *mgr) 755 507 { 756 508 BT_DBG("mgr %p orig refcnt %d", mgr, atomic_read(&mgr->kref.refcount)); 757 509 758 510 kref_get(&mgr->kref); 511 + 512 + return mgr; 759 513 } 760 514 761 515 static void amp_mgr_destroy(struct kref *kref) ··· 766 516 767 517 BT_DBG("mgr %p", mgr); 768 518 519 + mutex_lock(&amp_mgr_list_lock); 520 + list_del(&mgr->list); 521 + mutex_unlock(&amp_mgr_list_lock); 522 + 523 + amp_ctrl_list_flush(mgr); 769 524 kfree(mgr); 770 525 } 771 526 ··· 781 526 return kref_put(&mgr->kref, &amp_mgr_destroy); 782 527 } 783 528 784 - static struct amp_mgr *amp_mgr_create(struct l2cap_conn *conn) 529 + static struct amp_mgr *amp_mgr_create(struct l2cap_conn *conn, bool locked) 785 530 { 786 531 struct amp_mgr *mgr; 787 532 struct l2cap_chan *chan; ··· 794 539 795 540 mgr->l2cap_conn = conn; 796 541 797 - chan = a2mp_chan_open(conn); 542 + chan = a2mp_chan_open(conn, locked); 798 543 if (!chan) { 799 544 kfree(mgr); 800 545 return NULL; ··· 807 552 808 553 kref_init(&mgr->kref); 809 554 555 + /* Remote AMP ctrl list initialization */ 556 + INIT_LIST_HEAD(&mgr->amp_ctrls); 557 + mutex_init(&mgr->amp_ctrls_lock); 558 + 559 + mutex_lock(&amp_mgr_list_lock); 560 + list_add(&mgr->list, &amp_mgr_list); 561 + mutex_unlock(&amp_mgr_list_lock); 562 + 810 563 return mgr; 811 564 } 812 565 ··· 823 560 { 824 561 struct amp_mgr *mgr; 825 562 826 - mgr = amp_mgr_create(conn); 563 + mgr = amp_mgr_create(conn, false); 827 564 if (!mgr) { 828 565 BT_ERR("Could not create AMP manager"); 829 566 return NULL; ··· 832 569 BT_DBG("mgr: %p chan %p", mgr, mgr->a2mp_chan); 833 570 834 571 return mgr->a2mp_chan; 572 + } 573 + 574 + struct amp_mgr *amp_mgr_lookup_by_state(u8 state) 575 + { 576 + struct amp_mgr *mgr; 577 + 578 + mutex_lock(&amp_mgr_list_lock); 579 + list_for_each_entry(mgr, &amp_mgr_list, list) { 580 + if (mgr->state == state) { 581 + amp_mgr_get(mgr); 582 + mutex_unlock(&amp_mgr_list_lock); 583 + return mgr; 584 + } 585 + } 586 + mutex_unlock(&amp_mgr_list_lock); 587 + 588 + return NULL; 589 + } 590 + 591 + void a2mp_send_getinfo_rsp(struct hci_dev *hdev) 592 + { 593 + struct amp_mgr *mgr; 594 + struct a2mp_info_rsp rsp; 595 + 596 + mgr = amp_mgr_lookup_by_state(READ_LOC_AMP_INFO); 597 + if (!mgr) 598 + return; 599 + 600 + BT_DBG("%s mgr %p", hdev->name, mgr); 601 + 602 + rsp.id = hdev->id; 603 + rsp.status = A2MP_STATUS_INVALID_CTRL_ID; 604 + 605 + if (hdev->amp_type != HCI_BREDR) { 606 + rsp.status = 0; 607 + rsp.total_bw = cpu_to_le32(hdev->amp_total_bw); 608 + rsp.max_bw = cpu_to_le32(hdev->amp_max_bw); 609 + rsp.min_latency = cpu_to_le32(hdev->amp_min_latency); 610 + rsp.pal_cap = cpu_to_le16(hdev->amp_pal_cap); 611 + rsp.assoc_size = cpu_to_le16(hdev->amp_assoc_size); 612 + } 613 + 614 + a2mp_send(mgr, A2MP_GETINFO_RSP, mgr->ident, sizeof(rsp), &rsp); 615 + amp_mgr_put(mgr); 616 + } 617 + 618 + void a2mp_send_getampassoc_rsp(struct hci_dev *hdev, u8 status) 619 + { 620 + struct amp_mgr *mgr; 621 + struct amp_assoc *loc_assoc = &hdev->loc_assoc; 622 + struct a2mp_amp_assoc_rsp *rsp; 623 + size_t len; 624 + 625 + mgr = amp_mgr_lookup_by_state(READ_LOC_AMP_ASSOC); 626 + if (!mgr) 627 + return; 628 + 629 + BT_DBG("%s mgr %p", hdev->name, mgr); 630 + 631 + len = sizeof(struct a2mp_amp_assoc_rsp) + loc_assoc->len; 632 + rsp = kzalloc(len, GFP_KERNEL); 633 + if (!rsp) { 634 + amp_mgr_put(mgr); 635 + return; 636 + } 637 + 638 + rsp->id = hdev->id; 639 + 640 + if (status) { 641 + rsp->status = A2MP_STATUS_INVALID_CTRL_ID; 642 + } else { 643 + rsp->status = A2MP_STATUS_SUCCESS; 644 + memcpy(rsp->amp_assoc, loc_assoc->data, loc_assoc->len); 645 + } 646 + 647 + a2mp_send(mgr, A2MP_GETAMPASSOC_RSP, mgr->ident, len, rsp); 648 + amp_mgr_put(mgr); 649 + kfree(rsp); 650 + } 651 + 652 + void a2mp_send_create_phy_link_req(struct hci_dev *hdev, u8 status) 653 + { 654 + struct amp_mgr *mgr; 655 + struct amp_assoc *loc_assoc = &hdev->loc_assoc; 656 + struct a2mp_physlink_req *req; 657 + struct l2cap_chan *bredr_chan; 658 + size_t len; 659 + 660 + mgr = amp_mgr_lookup_by_state(READ_LOC_AMP_ASSOC_FINAL); 661 + if (!mgr) 662 + return; 663 + 664 + len = sizeof(*req) + loc_assoc->len; 665 + 666 + BT_DBG("%s mgr %p assoc_len %zu", hdev->name, mgr, len); 667 + 668 + req = kzalloc(len, GFP_KERNEL); 669 + if (!req) { 670 + amp_mgr_put(mgr); 671 + return; 672 + } 673 + 674 + bredr_chan = mgr->bredr_chan; 675 + if (!bredr_chan) 676 + goto clean; 677 + 678 + req->local_id = hdev->id; 679 + req->remote_id = bredr_chan->ctrl_id; 680 + memcpy(req->amp_assoc, loc_assoc->data, loc_assoc->len); 681 + 682 + a2mp_send(mgr, A2MP_CREATEPHYSLINK_REQ, __next_ident(mgr), len, req); 683 + 684 + clean: 685 + amp_mgr_put(mgr); 686 + kfree(req); 687 + } 688 + 689 + void a2mp_discover_amp(struct l2cap_chan *chan) 690 + { 691 + struct l2cap_conn *conn = chan->conn; 692 + struct amp_mgr *mgr = conn->hcon->amp_mgr; 693 + struct a2mp_discov_req req; 694 + 695 + BT_DBG("chan %p conn %p mgr %p", chan, conn, mgr); 696 + 697 + if (!mgr) { 698 + mgr = amp_mgr_create(conn, true); 699 + if (!mgr) 700 + return; 701 + } 702 + 703 + mgr->bredr_chan = chan; 704 + 705 + req.mtu = cpu_to_le16(L2CAP_A2MP_DEFAULT_MTU); 706 + req.ext_feat = 0; 707 + a2mp_send(mgr, A2MP_DISCOVER_REQ, 1, sizeof(req), &req); 835 708 }
+4 -6
net/bluetooth/af_bluetooth.c
··· 569 569 { 570 570 struct bt_seq_state *s = seq->private; 571 571 struct bt_sock_list *l = s->l; 572 - bdaddr_t src_baswapped, dst_baswapped; 573 572 574 573 if (v == SEQ_START_TOKEN) { 575 574 seq_puts(seq ,"sk RefCnt Rmem Wmem User Inode Src Dst Parent"); ··· 582 583 } else { 583 584 struct sock *sk = sk_entry(v); 584 585 struct bt_sock *bt = bt_sk(sk); 585 - baswap(&src_baswapped, &bt->src); 586 - baswap(&dst_baswapped, &bt->dst); 587 586 588 - seq_printf(seq, "%pK %-6d %-6u %-6u %-6u %-6lu %pM %pM %-6lu", 587 + seq_printf(seq, 588 + "%pK %-6d %-6u %-6u %-6u %-6lu %pMR %pMR %-6lu", 589 589 sk, 590 590 atomic_read(&sk->sk_refcnt), 591 591 sk_rmem_alloc_get(sk), 592 592 sk_wmem_alloc_get(sk), 593 593 from_kuid(seq_user_ns(seq), sock_i_uid(sk)), 594 594 sock_i_ino(sk), 595 - &src_baswapped, 596 - &dst_baswapped, 595 + &bt->src, 596 + &bt->dst, 597 597 bt->parent? sock_i_ino(bt->parent): 0LU); 598 598 599 599 if (l->custom_seq_show) {
+374
net/bluetooth/amp.c
··· 1 + /* 2 + Copyright (c) 2011,2012 Intel Corp. 3 + 4 + This program is free software; you can redistribute it and/or modify 5 + it under the terms of the GNU General Public License version 2 and 6 + only version 2 as published by the Free Software Foundation. 7 + 8 + This program is distributed in the hope that it will be useful, 9 + but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + GNU General Public License for more details. 12 + */ 13 + 14 + #include <net/bluetooth/bluetooth.h> 15 + #include <net/bluetooth/hci.h> 16 + #include <net/bluetooth/hci_core.h> 17 + #include <net/bluetooth/a2mp.h> 18 + #include <net/bluetooth/amp.h> 19 + #include <crypto/hash.h> 20 + 21 + /* Remote AMP Controllers interface */ 22 + void amp_ctrl_get(struct amp_ctrl *ctrl) 23 + { 24 + BT_DBG("ctrl %p orig refcnt %d", ctrl, 25 + atomic_read(&ctrl->kref.refcount)); 26 + 27 + kref_get(&ctrl->kref); 28 + } 29 + 30 + static void amp_ctrl_destroy(struct kref *kref) 31 + { 32 + struct amp_ctrl *ctrl = container_of(kref, struct amp_ctrl, kref); 33 + 34 + BT_DBG("ctrl %p", ctrl); 35 + 36 + kfree(ctrl->assoc); 37 + kfree(ctrl); 38 + } 39 + 40 + int amp_ctrl_put(struct amp_ctrl *ctrl) 41 + { 42 + BT_DBG("ctrl %p orig refcnt %d", ctrl, 43 + atomic_read(&ctrl->kref.refcount)); 44 + 45 + return kref_put(&ctrl->kref, &amp_ctrl_destroy); 46 + } 47 + 48 + struct amp_ctrl *amp_ctrl_add(struct amp_mgr *mgr, u8 id) 49 + { 50 + struct amp_ctrl *ctrl; 51 + 52 + ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL); 53 + if (!ctrl) 54 + return NULL; 55 + 56 + kref_init(&ctrl->kref); 57 + ctrl->id = id; 58 + 59 + mutex_lock(&mgr->amp_ctrls_lock); 60 + list_add(&ctrl->list, &mgr->amp_ctrls); 61 + mutex_unlock(&mgr->amp_ctrls_lock); 62 + 63 + BT_DBG("mgr %p ctrl %p", mgr, ctrl); 64 + 65 + return ctrl; 66 + } 67 + 68 + void amp_ctrl_list_flush(struct amp_mgr *mgr) 69 + { 70 + struct amp_ctrl *ctrl, *n; 71 + 72 + BT_DBG("mgr %p", mgr); 73 + 74 + mutex_lock(&mgr->amp_ctrls_lock); 75 + list_for_each_entry_safe(ctrl, n, &mgr->amp_ctrls, list) { 76 + list_del(&ctrl->list); 77 + amp_ctrl_put(ctrl); 78 + } 79 + mutex_unlock(&mgr->amp_ctrls_lock); 80 + } 81 + 82 + struct amp_ctrl *amp_ctrl_lookup(struct amp_mgr *mgr, u8 id) 83 + { 84 + struct amp_ctrl *ctrl; 85 + 86 + BT_DBG("mgr %p id %d", mgr, id); 87 + 88 + mutex_lock(&mgr->amp_ctrls_lock); 89 + list_for_each_entry(ctrl, &mgr->amp_ctrls, list) { 90 + if (ctrl->id == id) { 91 + amp_ctrl_get(ctrl); 92 + mutex_unlock(&mgr->amp_ctrls_lock); 93 + return ctrl; 94 + } 95 + } 96 + mutex_unlock(&mgr->amp_ctrls_lock); 97 + 98 + return NULL; 99 + } 100 + 101 + /* Physical Link interface */ 102 + static u8 __next_handle(struct amp_mgr *mgr) 103 + { 104 + if (++mgr->handle == 0) 105 + mgr->handle = 1; 106 + 107 + return mgr->handle; 108 + } 109 + 110 + struct hci_conn *phylink_add(struct hci_dev *hdev, struct amp_mgr *mgr, 111 + u8 remote_id, bool out) 112 + { 113 + bdaddr_t *dst = mgr->l2cap_conn->dst; 114 + struct hci_conn *hcon; 115 + 116 + hcon = hci_conn_add(hdev, AMP_LINK, dst); 117 + if (!hcon) 118 + return NULL; 119 + 120 + BT_DBG("hcon %p dst %pMR", hcon, dst); 121 + 122 + hcon->state = BT_CONNECT; 123 + hcon->attempt++; 124 + hcon->handle = __next_handle(mgr); 125 + hcon->remote_id = remote_id; 126 + hcon->amp_mgr = amp_mgr_get(mgr); 127 + hcon->out = out; 128 + 129 + return hcon; 130 + } 131 + 132 + /* AMP crypto key generation interface */ 133 + static int hmac_sha256(u8 *key, u8 ksize, char *plaintext, u8 psize, u8 *output) 134 + { 135 + int ret = 0; 136 + struct crypto_shash *tfm; 137 + 138 + if (!ksize) 139 + return -EINVAL; 140 + 141 + tfm = crypto_alloc_shash("hmac(sha256)", 0, 0); 142 + if (IS_ERR(tfm)) { 143 + BT_DBG("crypto_alloc_ahash failed: err %ld", PTR_ERR(tfm)); 144 + return PTR_ERR(tfm); 145 + } 146 + 147 + ret = crypto_shash_setkey(tfm, key, ksize); 148 + if (ret) { 149 + BT_DBG("crypto_ahash_setkey failed: err %d", ret); 150 + } else { 151 + struct { 152 + struct shash_desc shash; 153 + char ctx[crypto_shash_descsize(tfm)]; 154 + } desc; 155 + 156 + desc.shash.tfm = tfm; 157 + desc.shash.flags = CRYPTO_TFM_REQ_MAY_SLEEP; 158 + 159 + ret = crypto_shash_digest(&desc.shash, plaintext, psize, 160 + output); 161 + } 162 + 163 + crypto_free_shash(tfm); 164 + return ret; 165 + } 166 + 167 + int phylink_gen_key(struct hci_conn *conn, u8 *data, u8 *len, u8 *type) 168 + { 169 + struct hci_dev *hdev = conn->hdev; 170 + struct link_key *key; 171 + u8 keybuf[HCI_AMP_LINK_KEY_SIZE]; 172 + u8 gamp_key[HCI_AMP_LINK_KEY_SIZE]; 173 + int err; 174 + 175 + if (!hci_conn_check_link_mode(conn)) 176 + return -EACCES; 177 + 178 + BT_DBG("conn %p key_type %d", conn, conn->key_type); 179 + 180 + /* Legacy key */ 181 + if (conn->key_type < 3) { 182 + BT_ERR("Legacy key type %d", conn->key_type); 183 + return -EACCES; 184 + } 185 + 186 + *type = conn->key_type; 187 + *len = HCI_AMP_LINK_KEY_SIZE; 188 + 189 + key = hci_find_link_key(hdev, &conn->dst); 190 + if (!key) { 191 + BT_DBG("No Link key for conn %p dst %pMR", conn, &conn->dst); 192 + return -EACCES; 193 + } 194 + 195 + /* BR/EDR Link Key concatenated together with itself */ 196 + memcpy(&keybuf[0], key->val, HCI_LINK_KEY_SIZE); 197 + memcpy(&keybuf[HCI_LINK_KEY_SIZE], key->val, HCI_LINK_KEY_SIZE); 198 + 199 + /* Derive Generic AMP Link Key (gamp) */ 200 + err = hmac_sha256(keybuf, HCI_AMP_LINK_KEY_SIZE, "gamp", 4, gamp_key); 201 + if (err) { 202 + BT_ERR("Could not derive Generic AMP Key: err %d", err); 203 + return err; 204 + } 205 + 206 + if (conn->key_type == HCI_LK_DEBUG_COMBINATION) { 207 + BT_DBG("Use Generic AMP Key (gamp)"); 208 + memcpy(data, gamp_key, HCI_AMP_LINK_KEY_SIZE); 209 + return err; 210 + } 211 + 212 + /* Derive Dedicated AMP Link Key: "802b" is 802.11 PAL keyID */ 213 + return hmac_sha256(gamp_key, HCI_AMP_LINK_KEY_SIZE, "802b", 4, data); 214 + } 215 + 216 + void amp_read_loc_assoc_frag(struct hci_dev *hdev, u8 phy_handle) 217 + { 218 + struct hci_cp_read_local_amp_assoc cp; 219 + struct amp_assoc *loc_assoc = &hdev->loc_assoc; 220 + 221 + BT_DBG("%s handle %d", hdev->name, phy_handle); 222 + 223 + cp.phy_handle = phy_handle; 224 + cp.max_len = cpu_to_le16(hdev->amp_assoc_size); 225 + cp.len_so_far = cpu_to_le16(loc_assoc->offset); 226 + 227 + hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_ASSOC, sizeof(cp), &cp); 228 + } 229 + 230 + void amp_read_loc_assoc(struct hci_dev *hdev, struct amp_mgr *mgr) 231 + { 232 + struct hci_cp_read_local_amp_assoc cp; 233 + 234 + memset(&hdev->loc_assoc, 0, sizeof(struct amp_assoc)); 235 + memset(&cp, 0, sizeof(cp)); 236 + 237 + cp.max_len = cpu_to_le16(hdev->amp_assoc_size); 238 + 239 + mgr->state = READ_LOC_AMP_ASSOC; 240 + hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_ASSOC, sizeof(cp), &cp); 241 + } 242 + 243 + void amp_read_loc_assoc_final_data(struct hci_dev *hdev, 244 + struct hci_conn *hcon) 245 + { 246 + struct hci_cp_read_local_amp_assoc cp; 247 + struct amp_mgr *mgr = hcon->amp_mgr; 248 + 249 + cp.phy_handle = hcon->handle; 250 + cp.len_so_far = cpu_to_le16(0); 251 + cp.max_len = cpu_to_le16(hdev->amp_assoc_size); 252 + 253 + mgr->state = READ_LOC_AMP_ASSOC_FINAL; 254 + 255 + /* Read Local AMP Assoc final link information data */ 256 + hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_ASSOC, sizeof(cp), &cp); 257 + } 258 + 259 + /* Write AMP Assoc data fragments, returns true with last fragment written*/ 260 + static bool amp_write_rem_assoc_frag(struct hci_dev *hdev, 261 + struct hci_conn *hcon) 262 + { 263 + struct hci_cp_write_remote_amp_assoc *cp; 264 + struct amp_mgr *mgr = hcon->amp_mgr; 265 + struct amp_ctrl *ctrl; 266 + u16 frag_len, len; 267 + 268 + ctrl = amp_ctrl_lookup(mgr, hcon->remote_id); 269 + if (!ctrl) 270 + return false; 271 + 272 + if (!ctrl->assoc_rem_len) { 273 + BT_DBG("all fragments are written"); 274 + ctrl->assoc_rem_len = ctrl->assoc_len; 275 + ctrl->assoc_len_so_far = 0; 276 + 277 + amp_ctrl_put(ctrl); 278 + return true; 279 + } 280 + 281 + frag_len = min_t(u16, 248, ctrl->assoc_rem_len); 282 + len = frag_len + sizeof(*cp); 283 + 284 + cp = kzalloc(len, GFP_KERNEL); 285 + if (!cp) { 286 + amp_ctrl_put(ctrl); 287 + return false; 288 + } 289 + 290 + BT_DBG("hcon %p ctrl %p frag_len %u assoc_len %u rem_len %u", 291 + hcon, ctrl, frag_len, ctrl->assoc_len, ctrl->assoc_rem_len); 292 + 293 + cp->phy_handle = hcon->handle; 294 + cp->len_so_far = cpu_to_le16(ctrl->assoc_len_so_far); 295 + cp->rem_len = cpu_to_le16(ctrl->assoc_rem_len); 296 + memcpy(cp->frag, ctrl->assoc, frag_len); 297 + 298 + ctrl->assoc_len_so_far += frag_len; 299 + ctrl->assoc_rem_len -= frag_len; 300 + 301 + amp_ctrl_put(ctrl); 302 + 303 + hci_send_cmd(hdev, HCI_OP_WRITE_REMOTE_AMP_ASSOC, len, cp); 304 + 305 + kfree(cp); 306 + 307 + return false; 308 + } 309 + 310 + void amp_write_rem_assoc_continue(struct hci_dev *hdev, u8 handle) 311 + { 312 + struct hci_conn *hcon; 313 + 314 + BT_DBG("%s phy handle 0x%2.2x", hdev->name, handle); 315 + 316 + hcon = hci_conn_hash_lookup_handle(hdev, handle); 317 + if (!hcon) 318 + return; 319 + 320 + amp_write_rem_assoc_frag(hdev, hcon); 321 + } 322 + 323 + void amp_write_remote_assoc(struct hci_dev *hdev, u8 handle) 324 + { 325 + struct hci_conn *hcon; 326 + 327 + BT_DBG("%s phy handle 0x%2.2x", hdev->name, handle); 328 + 329 + hcon = hci_conn_hash_lookup_handle(hdev, handle); 330 + if (!hcon) 331 + return; 332 + 333 + BT_DBG("%s phy handle 0x%2.2x hcon %p", hdev->name, handle, hcon); 334 + 335 + amp_write_rem_assoc_frag(hdev, hcon); 336 + } 337 + 338 + void amp_create_phylink(struct hci_dev *hdev, struct amp_mgr *mgr, 339 + struct hci_conn *hcon) 340 + { 341 + struct hci_cp_create_phy_link cp; 342 + 343 + cp.phy_handle = hcon->handle; 344 + 345 + BT_DBG("%s hcon %p phy handle 0x%2.2x", hdev->name, hcon, 346 + hcon->handle); 347 + 348 + if (phylink_gen_key(mgr->l2cap_conn->hcon, cp.key, &cp.key_len, 349 + &cp.key_type)) { 350 + BT_DBG("Cannot create link key"); 351 + return; 352 + } 353 + 354 + hci_send_cmd(hdev, HCI_OP_CREATE_PHY_LINK, sizeof(cp), &cp); 355 + } 356 + 357 + void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr, 358 + struct hci_conn *hcon) 359 + { 360 + struct hci_cp_accept_phy_link cp; 361 + 362 + cp.phy_handle = hcon->handle; 363 + 364 + BT_DBG("%s hcon %p phy handle 0x%2.2x", hdev->name, hcon, 365 + hcon->handle); 366 + 367 + if (phylink_gen_key(mgr->l2cap_conn->hcon, cp.key, &cp.key_len, 368 + &cp.key_type)) { 369 + BT_DBG("Cannot create link key"); 370 + return; 371 + } 372 + 373 + hci_send_cmd(hdev, HCI_OP_ACCEPT_PHY_LINK, sizeof(cp), &cp); 374 + }
+1 -2
net/bluetooth/bnep/core.c
··· 182 182 a2 = data; 183 183 data += ETH_ALEN; 184 184 185 - BT_DBG("mc filter %s -> %s", 186 - batostr((void *) a1), batostr((void *) a2)); 185 + BT_DBG("mc filter %pMR -> %pMR", a1, a2); 187 186 188 187 /* Iterate from a1 to a2 */ 189 188 set_bit(bnep_mc_hash(a1), (ulong *) &s->mc_filter);
+1 -1
net/bluetooth/cmtp/core.c
··· 353 353 354 354 BT_DBG("mtu %d", session->mtu); 355 355 356 - sprintf(session->name, "%s", batostr(&bt_sk(sock->sk)->dst)); 356 + sprintf(session->name, "%pMR", &bt_sk(sock->sk)->dst); 357 357 358 358 session->sock = sock; 359 359 session->state = BT_CONFIG;
+64 -6
net/bluetooth/hci_conn.c
··· 130 130 hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp); 131 131 } 132 132 133 + static void hci_amp_disconn(struct hci_conn *conn, __u8 reason) 134 + { 135 + struct hci_cp_disconn_phy_link cp; 136 + 137 + BT_DBG("hcon %p", conn); 138 + 139 + conn->state = BT_DISCONN; 140 + 141 + cp.phy_handle = HCI_PHY_HANDLE(conn->handle); 142 + cp.reason = reason; 143 + hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK, 144 + sizeof(cp), &cp); 145 + } 146 + 133 147 static void hci_add_sco(struct hci_conn *conn, __u16 handle) 134 148 { 135 149 struct hci_dev *hdev = conn->hdev; ··· 244 230 } 245 231 } 246 232 233 + static void hci_conn_disconnect(struct hci_conn *conn) 234 + { 235 + __u8 reason = hci_proto_disconn_ind(conn); 236 + 237 + switch (conn->type) { 238 + case ACL_LINK: 239 + hci_acl_disconn(conn, reason); 240 + break; 241 + case AMP_LINK: 242 + hci_amp_disconn(conn, reason); 243 + break; 244 + } 245 + } 246 + 247 247 static void hci_conn_timeout(struct work_struct *work) 248 248 { 249 249 struct hci_conn *conn = container_of(work, struct hci_conn, 250 250 disc_work.work); 251 - __u8 reason; 252 251 253 252 BT_DBG("hcon %p state %s", conn, state_to_string(conn->state)); 254 253 ··· 280 253 break; 281 254 case BT_CONFIG: 282 255 case BT_CONNECTED: 283 - reason = hci_proto_disconn_ind(conn); 284 - hci_acl_disconn(conn, reason); 256 + hci_conn_disconnect(conn); 285 257 break; 286 258 default: 287 259 conn->state = BT_CLOSED; ··· 346 320 { 347 321 struct hci_conn *conn; 348 322 349 - BT_DBG("%s dst %s", hdev->name, batostr(dst)); 323 + BT_DBG("%s dst %pMR", hdev->name, dst); 350 324 351 325 conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL); 352 326 if (!conn) ··· 463 437 int use_src = bacmp(src, BDADDR_ANY); 464 438 struct hci_dev *hdev = NULL, *d; 465 439 466 - BT_DBG("%s -> %s", batostr(src), batostr(dst)); 440 + BT_DBG("%pMR -> %pMR", src, dst); 467 441 468 442 read_lock(&hci_dev_list_lock); 469 443 ··· 593 567 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, 594 568 __u8 dst_type, __u8 sec_level, __u8 auth_type) 595 569 { 596 - BT_DBG("%s dst %s type 0x%x", hdev->name, batostr(dst), type); 570 + BT_DBG("%s dst %pMR type 0x%x", hdev->name, dst, type); 597 571 598 572 switch (type) { 599 573 case LE_LINK: ··· 988 962 989 963 list_for_each_entry_safe(chan, n, &conn->chan_list, list) 990 964 hci_chan_del(chan); 965 + } 966 + 967 + static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon, 968 + __u16 handle) 969 + { 970 + struct hci_chan *hchan; 971 + 972 + list_for_each_entry(hchan, &hcon->chan_list, list) { 973 + if (hchan->handle == handle) 974 + return hchan; 975 + } 976 + 977 + return NULL; 978 + } 979 + 980 + struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle) 981 + { 982 + struct hci_conn_hash *h = &hdev->conn_hash; 983 + struct hci_conn *hcon; 984 + struct hci_chan *hchan = NULL; 985 + 986 + rcu_read_lock(); 987 + 988 + list_for_each_entry_rcu(hcon, &h->list, list) { 989 + hchan = __hci_chan_lookup_handle(hcon, handle); 990 + if (hchan) 991 + break; 992 + } 993 + 994 + rcu_read_unlock(); 995 + 996 + return hchan; 991 997 }
+46 -19
net/bluetooth/hci_core.c
··· 405 405 struct discovery_state *cache = &hdev->discovery; 406 406 struct inquiry_entry *e; 407 407 408 - BT_DBG("cache %p, %s", cache, batostr(bdaddr)); 408 + BT_DBG("cache %p, %pMR", cache, bdaddr); 409 409 410 410 list_for_each_entry(e, &cache->all, all) { 411 411 if (!bacmp(&e->data.bdaddr, bdaddr)) ··· 421 421 struct discovery_state *cache = &hdev->discovery; 422 422 struct inquiry_entry *e; 423 423 424 - BT_DBG("cache %p, %s", cache, batostr(bdaddr)); 424 + BT_DBG("cache %p, %pMR", cache, bdaddr); 425 425 426 426 list_for_each_entry(e, &cache->unknown, list) { 427 427 if (!bacmp(&e->data.bdaddr, bdaddr)) ··· 438 438 struct discovery_state *cache = &hdev->discovery; 439 439 struct inquiry_entry *e; 440 440 441 - BT_DBG("cache %p bdaddr %s state %d", cache, batostr(bdaddr), state); 441 + BT_DBG("cache %p bdaddr %pMR state %d", cache, bdaddr, state); 442 442 443 443 list_for_each_entry(e, &cache->resolve, list) { 444 444 if (!bacmp(bdaddr, BDADDR_ANY) && e->name_state == state) ··· 475 475 struct discovery_state *cache = &hdev->discovery; 476 476 struct inquiry_entry *ie; 477 477 478 - BT_DBG("cache %p, %s", cache, batostr(&data->bdaddr)); 478 + BT_DBG("cache %p, %pMR", cache, &data->bdaddr); 479 479 480 480 if (ssp) 481 481 *ssp = data->ssp_mode; ··· 1259 1259 list_add(&key->list, &hdev->link_keys); 1260 1260 } 1261 1261 1262 - BT_DBG("%s key for %s type %u", hdev->name, batostr(bdaddr), type); 1262 + BT_DBG("%s key for %pMR type %u", hdev->name, bdaddr, type); 1263 1263 1264 1264 /* Some buggy controller combinations generate a changed 1265 1265 * combination key for legacy pairing even when there's no ··· 1338 1338 if (!key) 1339 1339 return -ENOENT; 1340 1340 1341 - BT_DBG("%s removing %s", hdev->name, batostr(bdaddr)); 1341 + BT_DBG("%s removing %pMR", hdev->name, bdaddr); 1342 1342 1343 1343 list_del(&key->list); 1344 1344 kfree(key); ··· 1354 1354 if (bacmp(bdaddr, &k->bdaddr)) 1355 1355 continue; 1356 1356 1357 - BT_DBG("%s removing %s", hdev->name, batostr(bdaddr)); 1357 + BT_DBG("%s removing %pMR", hdev->name, bdaddr); 1358 1358 1359 1359 list_del(&k->list); 1360 1360 kfree(k); ··· 1401 1401 if (!data) 1402 1402 return -ENOENT; 1403 1403 1404 - BT_DBG("%s removing %s", hdev->name, batostr(bdaddr)); 1404 + BT_DBG("%s removing %pMR", hdev->name, bdaddr); 1405 1405 1406 1406 list_del(&data->list); 1407 1407 kfree(data); ··· 1440 1440 memcpy(data->hash, hash, sizeof(data->hash)); 1441 1441 memcpy(data->randomizer, randomizer, sizeof(data->randomizer)); 1442 1442 1443 - BT_DBG("%s for %s", hdev->name, batostr(bdaddr)); 1443 + BT_DBG("%s for %pMR", hdev->name, bdaddr); 1444 1444 1445 1445 return 0; 1446 1446 } ··· 2153 2153 hdr->dlen = cpu_to_le16(len); 2154 2154 } 2155 2155 2156 - static void hci_queue_acl(struct hci_conn *conn, struct sk_buff_head *queue, 2156 + static void hci_queue_acl(struct hci_chan *chan, struct sk_buff_head *queue, 2157 2157 struct sk_buff *skb, __u16 flags) 2158 2158 { 2159 + struct hci_conn *conn = chan->conn; 2159 2160 struct hci_dev *hdev = conn->hdev; 2160 2161 struct sk_buff *list; 2161 2162 ··· 2164 2163 skb->data_len = 0; 2165 2164 2166 2165 bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT; 2167 - hci_add_acl_hdr(skb, conn->handle, flags); 2166 + 2167 + switch (hdev->dev_type) { 2168 + case HCI_BREDR: 2169 + hci_add_acl_hdr(skb, conn->handle, flags); 2170 + break; 2171 + case HCI_AMP: 2172 + hci_add_acl_hdr(skb, chan->handle, flags); 2173 + break; 2174 + default: 2175 + BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type); 2176 + return; 2177 + } 2168 2178 2169 2179 list = skb_shinfo(skb)->frag_list; 2170 2180 if (!list) { ··· 2214 2202 2215 2203 void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags) 2216 2204 { 2217 - struct hci_conn *conn = chan->conn; 2218 - struct hci_dev *hdev = conn->hdev; 2205 + struct hci_dev *hdev = chan->conn->hdev; 2219 2206 2220 2207 BT_DBG("%s chan %p flags 0x%4.4x", hdev->name, chan, flags); 2221 2208 2222 2209 skb->dev = (void *) hdev; 2223 2210 2224 - hci_queue_acl(conn, &chan->data_q, skb, flags); 2211 + hci_queue_acl(chan, &chan->data_q, skb, flags); 2225 2212 2226 2213 queue_work(hdev->workqueue, &hdev->tx_work); 2227 2214 } ··· 2322 2311 /* Kill stalled connections */ 2323 2312 list_for_each_entry_rcu(c, &h->list, list) { 2324 2313 if (c->type == type && c->sent) { 2325 - BT_ERR("%s killing stalled connection %s", 2326 - hdev->name, batostr(&c->dst)); 2314 + BT_ERR("%s killing stalled connection %pMR", 2315 + hdev->name, &c->dst); 2327 2316 hci_acl_disconn(c, HCI_ERROR_REMOTE_USER_TERM); 2328 2317 } 2329 2318 } ··· 2391 2380 switch (chan->conn->type) { 2392 2381 case ACL_LINK: 2393 2382 cnt = hdev->acl_cnt; 2383 + break; 2384 + case AMP_LINK: 2385 + cnt = hdev->block_cnt; 2394 2386 break; 2395 2387 case SCO_LINK: 2396 2388 case ESCO_LINK: ··· 2524 2510 struct hci_chan *chan; 2525 2511 struct sk_buff *skb; 2526 2512 int quote; 2513 + u8 type; 2527 2514 2528 2515 __check_timeout(hdev, cnt); 2529 2516 2517 + BT_DBG("%s", hdev->name); 2518 + 2519 + if (hdev->dev_type == HCI_AMP) 2520 + type = AMP_LINK; 2521 + else 2522 + type = ACL_LINK; 2523 + 2530 2524 while (hdev->block_cnt > 0 && 2531 - (chan = hci_chan_sent(hdev, ACL_LINK, &quote))) { 2525 + (chan = hci_chan_sent(hdev, type, &quote))) { 2532 2526 u32 priority = (skb_peek(&chan->data_q))->priority; 2533 2527 while (quote > 0 && (skb = skb_peek(&chan->data_q))) { 2534 2528 int blocks; ··· 2569 2547 } 2570 2548 2571 2549 if (cnt != hdev->block_cnt) 2572 - hci_prio_recalculate(hdev, ACL_LINK); 2550 + hci_prio_recalculate(hdev, type); 2573 2551 } 2574 2552 2575 2553 static void hci_sched_acl(struct hci_dev *hdev) 2576 2554 { 2577 2555 BT_DBG("%s", hdev->name); 2578 2556 2579 - if (!hci_conn_num(hdev, ACL_LINK)) 2557 + /* No ACL link over BR/EDR controller */ 2558 + if (!hci_conn_num(hdev, ACL_LINK) && hdev->dev_type == HCI_BREDR) 2559 + return; 2560 + 2561 + /* No AMP link over AMP controller */ 2562 + if (!hci_conn_num(hdev, AMP_LINK) && hdev->dev_type == HCI_AMP) 2580 2563 return; 2581 2564 2582 2565 switch (hdev->flow_ctl_mode) {
+156 -11
net/bluetooth/hci_event.c
··· 30 30 #include <net/bluetooth/bluetooth.h> 31 31 #include <net/bluetooth/hci_core.h> 32 32 #include <net/bluetooth/mgmt.h> 33 + #include <net/bluetooth/a2mp.h> 34 + #include <net/bluetooth/amp.h> 33 35 34 36 /* Handle HCI Event packets */ 35 37 ··· 848 846 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status); 849 847 850 848 if (rp->status) 851 - return; 849 + goto a2mp_rsp; 852 850 853 851 hdev->amp_status = rp->amp_status; 854 852 hdev->amp_total_bw = __le32_to_cpu(rp->total_bw); ··· 862 860 hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to); 863 861 864 862 hci_req_complete(hdev, HCI_OP_READ_LOCAL_AMP_INFO, rp->status); 863 + 864 + a2mp_rsp: 865 + a2mp_send_getinfo_rsp(hdev); 866 + } 867 + 868 + static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev, 869 + struct sk_buff *skb) 870 + { 871 + struct hci_rp_read_local_amp_assoc *rp = (void *) skb->data; 872 + struct amp_assoc *assoc = &hdev->loc_assoc; 873 + size_t rem_len, frag_len; 874 + 875 + BT_DBG("%s status 0x%2.2x", hdev->name, rp->status); 876 + 877 + if (rp->status) 878 + goto a2mp_rsp; 879 + 880 + frag_len = skb->len - sizeof(*rp); 881 + rem_len = __le16_to_cpu(rp->rem_len); 882 + 883 + if (rem_len > frag_len) { 884 + BT_DBG("frag_len %zu rem_len %zu", frag_len, rem_len); 885 + 886 + memcpy(assoc->data + assoc->offset, rp->frag, frag_len); 887 + assoc->offset += frag_len; 888 + 889 + /* Read other fragments */ 890 + amp_read_loc_assoc_frag(hdev, rp->phy_handle); 891 + 892 + return; 893 + } 894 + 895 + memcpy(assoc->data + assoc->offset, rp->frag, rem_len); 896 + assoc->len = assoc->offset + rem_len; 897 + assoc->offset = 0; 898 + 899 + a2mp_rsp: 900 + /* Send A2MP Rsp when all fragments are received */ 901 + a2mp_send_getampassoc_rsp(hdev, rp->status); 902 + a2mp_send_create_phy_link_req(hdev, rp->status); 865 903 } 866 904 867 905 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev, ··· 1216 1174 hci_req_complete(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, status); 1217 1175 } 1218 1176 1177 + static void hci_cc_write_remote_amp_assoc(struct hci_dev *hdev, 1178 + struct sk_buff *skb) 1179 + { 1180 + struct hci_rp_write_remote_amp_assoc *rp = (void *) skb->data; 1181 + 1182 + BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x", 1183 + hdev->name, rp->status, rp->phy_handle); 1184 + 1185 + if (rp->status) 1186 + return; 1187 + 1188 + amp_write_rem_assoc_continue(hdev, rp->phy_handle); 1189 + } 1190 + 1219 1191 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status) 1220 1192 { 1221 1193 BT_DBG("%s status 0x%2.2x", hdev->name, status); ··· 1266 1210 1267 1211 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr); 1268 1212 1269 - BT_DBG("%s bdaddr %s hcon %p", hdev->name, batostr(&cp->bdaddr), conn); 1213 + BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn); 1270 1214 1271 1215 if (status) { 1272 1216 if (conn && conn->state == BT_CONNECT) { ··· 1695 1639 return; 1696 1640 } 1697 1641 1698 - BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&conn->dst), 1699 - conn); 1642 + BT_DBG("%s bdaddr %pMR conn %p", hdev->name, &conn->dst, conn); 1700 1643 1701 1644 conn->state = BT_CLOSED; 1702 1645 mgmt_connect_failed(hdev, &conn->dst, conn->type, ··· 1710 1655 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status) 1711 1656 { 1712 1657 BT_DBG("%s status 0x%2.2x", hdev->name, status); 1658 + } 1659 + 1660 + static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status) 1661 + { 1662 + struct hci_cp_create_phy_link *cp; 1663 + 1664 + BT_DBG("%s status 0x%2.2x", hdev->name, status); 1665 + 1666 + if (status) 1667 + return; 1668 + 1669 + cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_PHY_LINK); 1670 + if (!cp) 1671 + return; 1672 + 1673 + amp_write_remote_assoc(hdev, cp->phy_handle); 1674 + } 1675 + 1676 + static void hci_cs_accept_phylink(struct hci_dev *hdev, u8 status) 1677 + { 1678 + struct hci_cp_accept_phy_link *cp; 1679 + 1680 + BT_DBG("%s status 0x%2.2x", hdev->name, status); 1681 + 1682 + if (status) 1683 + return; 1684 + 1685 + cp = hci_sent_cmd_data(hdev, HCI_OP_ACCEPT_PHY_LINK); 1686 + if (!cp) 1687 + return; 1688 + 1689 + amp_write_remote_assoc(hdev, cp->phy_handle); 1713 1690 } 1714 1691 1715 1692 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) ··· 1909 1822 struct hci_ev_conn_request *ev = (void *) skb->data; 1910 1823 int mask = hdev->link_mode; 1911 1824 1912 - BT_DBG("%s bdaddr %s type 0x%x", hdev->name, batostr(&ev->bdaddr), 1825 + BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr, 1913 1826 ev->link_type); 1914 1827 1915 1828 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type); ··· 2401 2314 hci_cc_read_local_amp_info(hdev, skb); 2402 2315 break; 2403 2316 2317 + case HCI_OP_READ_LOCAL_AMP_ASSOC: 2318 + hci_cc_read_local_amp_assoc(hdev, skb); 2319 + break; 2320 + 2404 2321 case HCI_OP_DELETE_STORED_LINK_KEY: 2405 2322 hci_cc_delete_stored_link_key(hdev, skb); 2406 2323 break; ··· 2475 2384 2476 2385 case HCI_OP_WRITE_LE_HOST_SUPPORTED: 2477 2386 hci_cc_write_le_host_supported(hdev, skb); 2387 + break; 2388 + 2389 + case HCI_OP_WRITE_REMOTE_AMP_ASSOC: 2390 + hci_cc_write_remote_amp_assoc(hdev, skb); 2478 2391 break; 2479 2392 2480 2393 default: ··· 2560 2465 2561 2466 case HCI_OP_LE_START_ENC: 2562 2467 hci_cs_le_start_enc(hdev, ev->status); 2468 + break; 2469 + 2470 + case HCI_OP_CREATE_PHY_LINK: 2471 + hci_cs_create_phylink(hdev, ev->status); 2472 + break; 2473 + 2474 + case HCI_OP_ACCEPT_PHY_LINK: 2475 + hci_cs_accept_phylink(hdev, ev->status); 2563 2476 break; 2564 2477 2565 2478 default: ··· 2677 2574 queue_work(hdev->workqueue, &hdev->tx_work); 2678 2575 } 2679 2576 2577 + static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev, 2578 + __u16 handle) 2579 + { 2580 + struct hci_chan *chan; 2581 + 2582 + switch (hdev->dev_type) { 2583 + case HCI_BREDR: 2584 + return hci_conn_hash_lookup_handle(hdev, handle); 2585 + case HCI_AMP: 2586 + chan = hci_chan_lookup_handle(hdev, handle); 2587 + if (chan) 2588 + return chan->conn; 2589 + break; 2590 + default: 2591 + BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type); 2592 + break; 2593 + } 2594 + 2595 + return NULL; 2596 + } 2597 + 2680 2598 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb) 2681 2599 { 2682 2600 struct hci_ev_num_comp_blocks *ev = (void *) skb->data; ··· 2719 2595 2720 2596 for (i = 0; i < ev->num_hndl; i++) { 2721 2597 struct hci_comp_blocks_info *info = &ev->handles[i]; 2722 - struct hci_conn *conn; 2598 + struct hci_conn *conn = NULL; 2723 2599 __u16 handle, block_count; 2724 2600 2725 2601 handle = __le16_to_cpu(info->handle); 2726 2602 block_count = __le16_to_cpu(info->blocks); 2727 2603 2728 - conn = hci_conn_hash_lookup_handle(hdev, handle); 2604 + conn = __hci_conn_lookup_handle(hdev, handle); 2729 2605 if (!conn) 2730 2606 continue; 2731 2607 ··· 2733 2609 2734 2610 switch (conn->type) { 2735 2611 case ACL_LINK: 2612 + case AMP_LINK: 2736 2613 hdev->block_cnt += block_count; 2737 2614 if (hdev->block_cnt > hdev->num_blocks) 2738 2615 hdev->block_cnt = hdev->num_blocks; ··· 2830 2705 2831 2706 key = hci_find_link_key(hdev, &ev->bdaddr); 2832 2707 if (!key) { 2833 - BT_DBG("%s link key not found for %s", hdev->name, 2834 - batostr(&ev->bdaddr)); 2708 + BT_DBG("%s link key not found for %pMR", hdev->name, 2709 + &ev->bdaddr); 2835 2710 goto not_found; 2836 2711 } 2837 2712 2838 - BT_DBG("%s found key type %u for %s", hdev->name, key->type, 2839 - batostr(&ev->bdaddr)); 2713 + BT_DBG("%s found key type %u for %pMR", hdev->name, key->type, 2714 + &ev->bdaddr); 2840 2715 2841 2716 if (!test_bit(HCI_DEBUG_KEYS, &hdev->dev_flags) && 2842 2717 key->type == HCI_LK_DEBUG_COMBINATION) { ··· 3683 3558 } 3684 3559 } 3685 3560 3561 + static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb) 3562 + { 3563 + struct hci_ev_channel_selected *ev = (void *) skb->data; 3564 + struct hci_conn *hcon; 3565 + 3566 + BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle); 3567 + 3568 + skb_pull(skb, sizeof(*ev)); 3569 + 3570 + hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle); 3571 + if (!hcon) 3572 + return; 3573 + 3574 + amp_read_loc_assoc_final_data(hdev, hcon); 3575 + } 3576 + 3686 3577 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb) 3687 3578 { 3688 3579 struct hci_event_hdr *hdr = (void *) skb->data; ··· 3861 3720 3862 3721 case HCI_EV_LE_META: 3863 3722 hci_le_meta_evt(hdev, skb); 3723 + break; 3724 + 3725 + case HCI_EV_CHANNEL_SELECTED: 3726 + hci_chan_selected_evt(hdev, skb); 3864 3727 break; 3865 3728 3866 3729 case HCI_EV_REMOTE_OOB_DATA_REQUEST:
+5 -5
net/bluetooth/hci_sysfs.c
··· 38 38 struct device_attribute *attr, char *buf) 39 39 { 40 40 struct hci_conn *conn = to_hci_conn(dev); 41 - return sprintf(buf, "%s\n", batostr(&conn->dst)); 41 + return sprintf(buf, "%pMR\n", &conn->dst); 42 42 } 43 43 44 44 static ssize_t show_link_features(struct device *dev, ··· 224 224 struct device_attribute *attr, char *buf) 225 225 { 226 226 struct hci_dev *hdev = to_hci_dev(dev); 227 - return sprintf(buf, "%s\n", batostr(&hdev->bdaddr)); 227 + return sprintf(buf, "%pMR\n", &hdev->bdaddr); 228 228 } 229 229 230 230 static ssize_t show_features(struct device *dev, ··· 406 406 407 407 list_for_each_entry(e, &cache->all, all) { 408 408 struct inquiry_data *data = &e->data; 409 - seq_printf(f, "%s %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n", 410 - batostr(&data->bdaddr), 409 + seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n", 410 + &data->bdaddr, 411 411 data->pscan_rep_mode, data->pscan_period_mode, 412 412 data->pscan_mode, data->dev_class[2], 413 413 data->dev_class[1], data->dev_class[0], ··· 440 440 hci_dev_lock(hdev); 441 441 442 442 list_for_each_entry(b, &hdev->blacklist, list) 443 - seq_printf(f, "%s\n", batostr(&b->bdaddr)); 443 + seq_printf(f, "%pMR\n", &b->bdaddr); 444 444 445 445 hci_dev_unlock(hdev); 446 446
+6 -2
net/bluetooth/hidp/core.c
··· 932 932 hid->country = req->country; 933 933 934 934 strncpy(hid->name, req->name, 128); 935 - strncpy(hid->phys, batostr(&bt_sk(session->ctrl_sock->sk)->src), 64); 936 - strncpy(hid->uniq, batostr(&bt_sk(session->ctrl_sock->sk)->dst), 64); 935 + 936 + snprintf(hid->phys, sizeof(hid->phys), "%pMR", 937 + &bt_sk(session->ctrl_sock->sk)->src); 938 + 939 + snprintf(hid->uniq, sizeof(hid->uniq), "%pMR", 940 + &bt_sk(session->ctrl_sock->sk)->dst); 937 941 938 942 hid->dev.parent = &session->conn->dev; 939 943 hid->ll_driver = &hidp_hid_driver;
+286 -217
net/bluetooth/l2cap_core.c
··· 48 48 static DEFINE_RWLOCK(chan_list_lock); 49 49 50 50 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, 51 - u8 code, u8 ident, u16 dlen, void *data); 51 + u8 code, u8 ident, u16 dlen, void *data); 52 52 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, 53 - void *data); 53 + void *data); 54 54 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data); 55 55 static void l2cap_send_disconn_req(struct l2cap_conn *conn, 56 56 struct l2cap_chan *chan, int err); 57 57 58 58 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control, 59 - struct sk_buff_head *skbs, u8 event); 59 + struct sk_buff_head *skbs, u8 event); 60 60 61 61 /* ---- L2CAP channels ---- */ 62 62 63 - static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid) 63 + static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, 64 + u16 cid) 64 65 { 65 66 struct l2cap_chan *c; 66 67 ··· 72 71 return NULL; 73 72 } 74 73 75 - static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid) 74 + static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, 75 + u16 cid) 76 76 { 77 77 struct l2cap_chan *c; 78 78 ··· 86 84 87 85 /* Find channel with given SCID. 88 86 * Returns locked channel. */ 89 - static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid) 87 + static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, 88 + u16 cid) 90 89 { 91 90 struct l2cap_chan *c; 92 91 ··· 100 97 return c; 101 98 } 102 99 103 - static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident) 100 + static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, 101 + u8 ident) 104 102 { 105 103 struct l2cap_chan *c; 106 104 ··· 182 178 static void __l2cap_state_change(struct l2cap_chan *chan, int state) 183 179 { 184 180 BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state), 185 - state_to_string(state)); 181 + state_to_string(state)); 186 182 187 183 chan->state = state; 188 184 chan->ops->state_change(chan, state); ··· 365 361 static void l2cap_chan_timeout(struct work_struct *work) 366 362 { 367 363 struct l2cap_chan *chan = container_of(work, struct l2cap_chan, 368 - chan_timer.work); 364 + chan_timer.work); 369 365 struct l2cap_conn *conn = chan->conn; 370 366 int reason; 371 367 ··· 377 373 if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG) 378 374 reason = ECONNREFUSED; 379 375 else if (chan->state == BT_CONNECT && 380 - chan->sec_level != BT_SECURITY_SDP) 376 + chan->sec_level != BT_SECURITY_SDP) 381 377 reason = ECONNREFUSED; 382 378 else 383 379 reason = ETIMEDOUT; ··· 459 455 set_bit(FLAG_FORCE_ACTIVE, &chan->flags); 460 456 } 461 457 462 - static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan) 458 + void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan) 463 459 { 464 460 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, 465 461 __le16_to_cpu(chan->psm), chan->dcid); ··· 508 504 chan->local_msdu = L2CAP_DEFAULT_MAX_SDU_SIZE; 509 505 chan->local_sdu_itime = L2CAP_DEFAULT_SDU_ITIME; 510 506 chan->local_acc_lat = L2CAP_DEFAULT_ACC_LAT; 511 - chan->local_flush_to = L2CAP_DEFAULT_FLUSH_TO; 507 + chan->local_flush_to = L2CAP_EFS_DEFAULT_FLUSH_TO; 512 508 513 509 l2cap_chan_hold(chan); 514 510 ··· 531 527 BT_DBG("chan %p, conn %p, err %d", chan, conn, err); 532 528 533 529 if (conn) { 530 + struct amp_mgr *mgr = conn->hcon->amp_mgr; 534 531 /* Delete from channel list */ 535 532 list_del(&chan->list); 536 533 ··· 541 536 542 537 if (chan->chan_type != L2CAP_CHAN_CONN_FIX_A2MP) 543 538 hci_conn_put(conn->hcon); 539 + 540 + if (mgr && mgr->bredr_chan == chan) 541 + mgr->bredr_chan = NULL; 544 542 } 545 543 546 - if (chan->ops->teardown) 547 - chan->ops->teardown(chan, err); 544 + chan->ops->teardown(chan, err); 548 545 549 546 if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state)) 550 547 return; ··· 580 573 struct l2cap_conn *conn = chan->conn; 581 574 struct sock *sk = chan->sk; 582 575 583 - BT_DBG("chan %p state %s sk %p", chan, 584 - state_to_string(chan->state), sk); 576 + BT_DBG("chan %p state %s sk %p", chan, state_to_string(chan->state), 577 + sk); 585 578 586 579 switch (chan->state) { 587 580 case BT_LISTEN: 588 - if (chan->ops->teardown) 589 - chan->ops->teardown(chan, 0); 581 + chan->ops->teardown(chan, 0); 590 582 break; 591 583 592 584 case BT_CONNECTED: 593 585 case BT_CONFIG: 594 586 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && 595 - conn->hcon->type == ACL_LINK) { 587 + conn->hcon->type == ACL_LINK) { 596 588 __set_chan_timer(chan, sk->sk_sndtimeo); 597 589 l2cap_send_disconn_req(conn, chan, reason); 598 590 } else ··· 600 594 601 595 case BT_CONNECT2: 602 596 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && 603 - conn->hcon->type == ACL_LINK) { 597 + conn->hcon->type == ACL_LINK) { 604 598 struct l2cap_conn_rsp rsp; 605 599 __u16 result; 606 600 ··· 615 609 rsp.result = cpu_to_le16(result); 616 610 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 617 611 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 618 - sizeof(rsp), &rsp); 612 + sizeof(rsp), &rsp); 619 613 } 620 614 621 615 l2cap_chan_del(chan, reason); ··· 627 621 break; 628 622 629 623 default: 630 - if (chan->ops->teardown) 631 - chan->ops->teardown(chan, 0); 624 + chan->ops->teardown(chan, 0); 632 625 break; 633 626 } 634 627 } ··· 696 691 return id; 697 692 } 698 693 699 - static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data) 694 + static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, 695 + void *data) 700 696 { 701 697 struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data); 702 698 u8 flags; ··· 724 718 u16 flags; 725 719 726 720 BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len, 727 - skb->priority); 721 + skb->priority); 728 722 729 723 if (!test_bit(FLAG_FLUSHABLE, &chan->flags) && 730 - lmp_no_flush_capable(hcon->hdev)) 724 + lmp_no_flush_capable(hcon->hdev)) 731 725 flags = ACL_START_NO_FLUSH; 732 726 else 733 727 flags = ACL_START; ··· 952 946 return !test_bit(CONF_CONNECT_PEND, &chan->conf_state); 953 947 } 954 948 955 - static void l2cap_send_conn_req(struct l2cap_chan *chan) 949 + static bool __amp_capable(struct l2cap_chan *chan) 950 + { 951 + struct l2cap_conn *conn = chan->conn; 952 + 953 + if (enable_hs && 954 + chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED && 955 + conn->fixed_chan_mask & L2CAP_FC_A2MP) 956 + return true; 957 + else 958 + return false; 959 + } 960 + 961 + void l2cap_send_conn_req(struct l2cap_chan *chan) 956 962 { 957 963 struct l2cap_conn *conn = chan->conn; 958 964 struct l2cap_conn_req req; ··· 990 972 chan->ops->ready(chan); 991 973 } 992 974 975 + static void l2cap_start_connection(struct l2cap_chan *chan) 976 + { 977 + if (__amp_capable(chan)) { 978 + BT_DBG("chan %p AMP capable: discover AMPs", chan); 979 + a2mp_discover_amp(chan); 980 + } else { 981 + l2cap_send_conn_req(chan); 982 + } 983 + } 984 + 993 985 static void l2cap_do_start(struct l2cap_chan *chan) 994 986 { 995 987 struct l2cap_conn *conn = chan->conn; ··· 1014 986 return; 1015 987 1016 988 if (l2cap_chan_check_security(chan) && 1017 - __l2cap_no_conn_pending(chan)) 1018 - l2cap_send_conn_req(chan); 989 + __l2cap_no_conn_pending(chan)) { 990 + l2cap_start_connection(chan); 991 + } 1019 992 } else { 1020 993 struct l2cap_info_req req; 1021 994 req.type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK); ··· 1026 997 1027 998 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT); 1028 999 1029 - l2cap_send_cmd(conn, conn->info_ident, 1030 - L2CAP_INFO_REQ, sizeof(req), &req); 1000 + l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ, 1001 + sizeof(req), &req); 1031 1002 } 1032 1003 } 1033 1004 ··· 1047 1018 } 1048 1019 } 1049 1020 1050 - static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err) 1021 + static void l2cap_send_disconn_req(struct l2cap_conn *conn, 1022 + struct l2cap_chan *chan, int err) 1051 1023 { 1052 1024 struct sock *sk = chan->sk; 1053 1025 struct l2cap_disconn_req req; ··· 1063 1033 } 1064 1034 1065 1035 if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) { 1066 - __l2cap_state_change(chan, BT_DISCONN); 1036 + l2cap_state_change(chan, BT_DISCONN); 1067 1037 return; 1068 1038 } 1069 1039 1070 1040 req.dcid = cpu_to_le16(chan->dcid); 1071 1041 req.scid = cpu_to_le16(chan->scid); 1072 - l2cap_send_cmd(conn, l2cap_get_ident(conn), 1073 - L2CAP_DISCONN_REQ, sizeof(req), &req); 1042 + l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_DISCONN_REQ, 1043 + sizeof(req), &req); 1074 1044 1075 1045 lock_sock(sk); 1076 1046 __l2cap_state_change(chan, BT_DISCONN); ··· 1099 1069 1100 1070 if (chan->state == BT_CONNECT) { 1101 1071 if (!l2cap_chan_check_security(chan) || 1102 - !__l2cap_no_conn_pending(chan)) { 1072 + !__l2cap_no_conn_pending(chan)) { 1103 1073 l2cap_chan_unlock(chan); 1104 1074 continue; 1105 1075 } 1106 1076 1107 1077 if (!l2cap_mode_supported(chan->mode, conn->feat_mask) 1108 - && test_bit(CONF_STATE2_DEVICE, 1078 + && test_bit(CONF_STATE2_DEVICE, 1109 1079 &chan->conf_state)) { 1110 1080 l2cap_chan_close(chan, ECONNRESET); 1111 1081 l2cap_chan_unlock(chan); 1112 1082 continue; 1113 1083 } 1114 1084 1115 - l2cap_send_conn_req(chan); 1085 + l2cap_start_connection(chan); 1116 1086 1117 1087 } else if (chan->state == BT_CONNECT2) { 1118 1088 struct l2cap_conn_rsp rsp; ··· 1124 1094 lock_sock(sk); 1125 1095 if (test_bit(BT_SK_DEFER_SETUP, 1126 1096 &bt_sk(sk)->flags)) { 1127 - struct sock *parent = bt_sk(sk)->parent; 1128 1097 rsp.result = __constant_cpu_to_le16(L2CAP_CR_PEND); 1129 1098 rsp.status = __constant_cpu_to_le16(L2CAP_CS_AUTHOR_PEND); 1130 - if (parent) 1131 - parent->sk_data_ready(parent, 0); 1099 + chan->ops->defer(chan); 1132 1100 1133 1101 } else { 1134 1102 __l2cap_state_change(chan, BT_CONFIG); ··· 1140 1112 } 1141 1113 1142 1114 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 1143 - sizeof(rsp), &rsp); 1115 + sizeof(rsp), &rsp); 1144 1116 1145 1117 if (test_bit(CONF_REQ_SENT, &chan->conf_state) || 1146 - rsp.result != L2CAP_CR_SUCCESS) { 1118 + rsp.result != L2CAP_CR_SUCCESS) { 1147 1119 l2cap_chan_unlock(chan); 1148 1120 continue; 1149 1121 } 1150 1122 1151 1123 set_bit(CONF_REQ_SENT, &chan->conf_state); 1152 1124 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 1153 - l2cap_build_conf_req(chan, buf), buf); 1125 + l2cap_build_conf_req(chan, buf), buf); 1154 1126 chan->num_conf_req++; 1155 1127 } 1156 1128 ··· 1232 1204 bacpy(&bt_sk(sk)->src, conn->src); 1233 1205 bacpy(&bt_sk(sk)->dst, conn->dst); 1234 1206 1235 - bt_accept_enqueue(parent, sk); 1236 - 1237 1207 l2cap_chan_add(conn, chan); 1238 1208 1239 1209 l2cap_chan_ready(chan); ··· 1296 1270 1297 1271 list_for_each_entry(chan, &conn->chan_l, list) { 1298 1272 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags)) 1299 - __l2cap_chan_set_err(chan, err); 1273 + l2cap_chan_set_err(chan, err); 1300 1274 } 1301 1275 1302 1276 mutex_unlock(&conn->chan_lock); ··· 1305 1279 static void l2cap_info_timeout(struct work_struct *work) 1306 1280 { 1307 1281 struct l2cap_conn *conn = container_of(work, struct l2cap_conn, 1308 - info_timer.work); 1282 + info_timer.work); 1309 1283 1310 1284 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 1311 1285 conn->info_ident = 0; ··· 1359 1333 static void security_timeout(struct work_struct *work) 1360 1334 { 1361 1335 struct l2cap_conn *conn = container_of(work, struct l2cap_conn, 1362 - security_timer.work); 1336 + security_timer.work); 1363 1337 1364 1338 BT_DBG("conn %p", conn); 1365 1339 ··· 1381 1355 if (!hchan) 1382 1356 return NULL; 1383 1357 1384 - conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC); 1358 + conn = kzalloc(sizeof(struct l2cap_conn), GFP_KERNEL); 1385 1359 if (!conn) { 1386 1360 hci_chan_del(hchan); 1387 1361 return NULL; ··· 1393 1367 1394 1368 BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan); 1395 1369 1396 - if (hcon->hdev->le_mtu && hcon->type == LE_LINK) 1397 - conn->mtu = hcon->hdev->le_mtu; 1398 - else 1370 + switch (hcon->type) { 1371 + case AMP_LINK: 1372 + conn->mtu = hcon->hdev->block_mtu; 1373 + break; 1374 + 1375 + case LE_LINK: 1376 + if (hcon->hdev->le_mtu) { 1377 + conn->mtu = hcon->hdev->le_mtu; 1378 + break; 1379 + } 1380 + /* fall through */ 1381 + 1382 + default: 1399 1383 conn->mtu = hcon->hdev->acl_mtu; 1384 + break; 1385 + } 1400 1386 1401 1387 conn->src = &hcon->hdev->bdaddr; 1402 1388 conn->dst = &hcon->dst; ··· 1486 1448 __u8 auth_type; 1487 1449 int err; 1488 1450 1489 - BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst), 1451 + BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", src, dst, 1490 1452 dst_type, __le16_to_cpu(psm)); 1491 1453 1492 1454 hdev = hci_get_route(dst, src); ··· 1499 1461 1500 1462 /* PSM must be odd and lsb of upper byte must be 0 */ 1501 1463 if ((__le16_to_cpu(psm) & 0x0101) != 0x0001 && !cid && 1502 - chan->chan_type != L2CAP_CHAN_RAW) { 1464 + chan->chan_type != L2CAP_CHAN_RAW) { 1503 1465 err = -EINVAL; 1504 1466 goto done; 1505 1467 } ··· 1808 1770 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq); 1809 1771 if (!skb) { 1810 1772 BT_DBG("Error: Can't retransmit seq %d, frame missing", 1811 - seq); 1773 + seq); 1812 1774 continue; 1813 1775 } 1814 1776 ··· 1833 1795 /* Cloned sk_buffs are read-only, so we need a 1834 1796 * writeable copy 1835 1797 */ 1836 - tx_skb = skb_copy(skb, GFP_ATOMIC); 1798 + tx_skb = skb_copy(skb, GFP_KERNEL); 1837 1799 } else { 1838 - tx_skb = skb_clone(skb, GFP_ATOMIC); 1800 + tx_skb = skb_clone(skb, GFP_KERNEL); 1839 1801 } 1840 1802 1841 1803 if (!tx_skb) { ··· 1893 1855 if (chan->unacked_frames) { 1894 1856 skb_queue_walk(&chan->tx_q, skb) { 1895 1857 if (bt_cb(skb)->control.txseq == control->reqseq || 1896 - skb == chan->tx_send_head) 1858 + skb == chan->tx_send_head) 1897 1859 break; 1898 1860 } 1899 1861 ··· 2194 2156 } 2195 2157 2196 2158 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, 2197 - u32 priority) 2159 + u32 priority) 2198 2160 { 2199 2161 struct sk_buff *skb; 2200 2162 int err; ··· 2581 2543 /* Don't send frame to the socket it came from */ 2582 2544 if (skb->sk == sk) 2583 2545 continue; 2584 - nskb = skb_clone(skb, GFP_ATOMIC); 2546 + nskb = skb_clone(skb, GFP_KERNEL); 2585 2547 if (!nskb) 2586 2548 continue; 2587 2549 ··· 2607 2569 len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen; 2608 2570 count = min_t(unsigned int, conn->mtu, len); 2609 2571 2610 - skb = bt_skb_alloc(count, GFP_ATOMIC); 2572 + skb = bt_skb_alloc(count, GFP_KERNEL); 2611 2573 if (!skb) 2612 2574 return NULL; 2613 2575 ··· 2637 2599 while (len) { 2638 2600 count = min_t(unsigned int, conn->mtu, len); 2639 2601 2640 - *frag = bt_skb_alloc(count, GFP_ATOMIC); 2602 + *frag = bt_skb_alloc(count, GFP_KERNEL); 2641 2603 if (!*frag) 2642 2604 goto fail; 2643 2605 ··· 2656 2618 return NULL; 2657 2619 } 2658 2620 2659 - static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val) 2621 + static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, 2622 + unsigned long *val) 2660 2623 { 2661 2624 struct l2cap_conf_opt *opt = *ptr; 2662 2625 int len; ··· 2731 2692 efs.msdu = cpu_to_le16(chan->local_msdu); 2732 2693 efs.sdu_itime = cpu_to_le32(chan->local_sdu_itime); 2733 2694 efs.acc_lat = __constant_cpu_to_le32(L2CAP_DEFAULT_ACC_LAT); 2734 - efs.flush_to = __constant_cpu_to_le32(L2CAP_DEFAULT_FLUSH_TO); 2695 + efs.flush_to = __constant_cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO); 2735 2696 break; 2736 2697 2737 2698 case L2CAP_MODE_STREAMING: ··· 2748 2709 } 2749 2710 2750 2711 l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs), 2751 - (unsigned long) &efs); 2712 + (unsigned long) &efs); 2752 2713 } 2753 2714 2754 2715 static void l2cap_ack_timeout(struct work_struct *work) ··· 2837 2798 static inline void l2cap_txwin_setup(struct l2cap_chan *chan) 2838 2799 { 2839 2800 if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW && 2840 - __l2cap_ews_supported(chan)) { 2801 + __l2cap_ews_supported(chan)) { 2841 2802 /* use extended control field */ 2842 2803 set_bit(FLAG_EXT_CTRL, &chan->flags); 2843 2804 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW; 2844 2805 } else { 2845 2806 chan->tx_win = min_t(u16, chan->tx_win, 2846 - L2CAP_DEFAULT_TX_WINDOW); 2807 + L2CAP_DEFAULT_TX_WINDOW); 2847 2808 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW; 2848 2809 } 2849 2810 chan->ack_win = chan->tx_win; ··· 2883 2844 switch (chan->mode) { 2884 2845 case L2CAP_MODE_BASIC: 2885 2846 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) && 2886 - !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING)) 2847 + !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING)) 2887 2848 break; 2888 2849 2889 2850 rfc.mode = L2CAP_MODE_BASIC; ··· 2894 2855 rfc.max_pdu_size = 0; 2895 2856 2896 2857 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 2897 - (unsigned long) &rfc); 2858 + (unsigned long) &rfc); 2898 2859 break; 2899 2860 2900 2861 case L2CAP_MODE_ERTM: ··· 2904 2865 rfc.monitor_timeout = 0; 2905 2866 2906 2867 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu - 2907 - L2CAP_EXT_HDR_SIZE - 2908 - L2CAP_SDULEN_SIZE - 2909 - L2CAP_FCS_SIZE); 2868 + L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE - 2869 + L2CAP_FCS_SIZE); 2910 2870 rfc.max_pdu_size = cpu_to_le16(size); 2911 2871 2912 2872 l2cap_txwin_setup(chan); 2913 2873 2914 2874 rfc.txwin_size = min_t(u16, chan->tx_win, 2915 - L2CAP_DEFAULT_TX_WINDOW); 2875 + L2CAP_DEFAULT_TX_WINDOW); 2916 2876 2917 2877 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 2918 - (unsigned long) &rfc); 2878 + (unsigned long) &rfc); 2919 2879 2920 2880 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) 2921 2881 l2cap_add_opt_efs(&ptr, chan); ··· 2923 2885 break; 2924 2886 2925 2887 if (chan->fcs == L2CAP_FCS_NONE || 2926 - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { 2888 + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { 2927 2889 chan->fcs = L2CAP_FCS_NONE; 2928 2890 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); 2929 2891 } 2930 2892 2931 2893 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 2932 2894 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, 2933 - chan->tx_win); 2895 + chan->tx_win); 2934 2896 break; 2935 2897 2936 2898 case L2CAP_MODE_STREAMING: ··· 2942 2904 rfc.monitor_timeout = 0; 2943 2905 2944 2906 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu - 2945 - L2CAP_EXT_HDR_SIZE - 2946 - L2CAP_SDULEN_SIZE - 2947 - L2CAP_FCS_SIZE); 2907 + L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE - 2908 + L2CAP_FCS_SIZE); 2948 2909 rfc.max_pdu_size = cpu_to_le16(size); 2949 2910 2950 2911 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 2951 - (unsigned long) &rfc); 2912 + (unsigned long) &rfc); 2952 2913 2953 2914 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) 2954 2915 l2cap_add_opt_efs(&ptr, chan); ··· 2956 2919 break; 2957 2920 2958 2921 if (chan->fcs == L2CAP_FCS_NONE || 2959 - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { 2922 + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { 2960 2923 chan->fcs = L2CAP_FCS_NONE; 2961 2924 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); 2962 2925 } ··· 3048 3011 case L2CAP_MODE_ERTM: 3049 3012 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) { 3050 3013 chan->mode = l2cap_select_mode(rfc.mode, 3051 - chan->conn->feat_mask); 3014 + chan->conn->feat_mask); 3052 3015 break; 3053 3016 } 3054 3017 ··· 3073 3036 if (chan->num_conf_rsp == 1) 3074 3037 return -ECONNREFUSED; 3075 3038 3076 - l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, 3077 - sizeof(rfc), (unsigned long) &rfc); 3039 + l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 3040 + (unsigned long) &rfc); 3078 3041 } 3079 3042 3080 3043 if (result == L2CAP_CONF_SUCCESS) { ··· 3091 3054 3092 3055 if (remote_efs) { 3093 3056 if (chan->local_stype != L2CAP_SERV_NOTRAFIC && 3094 - efs.stype != L2CAP_SERV_NOTRAFIC && 3095 - efs.stype != chan->local_stype) { 3057 + efs.stype != L2CAP_SERV_NOTRAFIC && 3058 + efs.stype != chan->local_stype) { 3096 3059 3097 3060 result = L2CAP_CONF_UNACCEPT; 3098 3061 ··· 3100 3063 return -ECONNREFUSED; 3101 3064 3102 3065 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, 3103 - sizeof(efs), 3104 - (unsigned long) &efs); 3066 + sizeof(efs), 3067 + (unsigned long) &efs); 3105 3068 } else { 3106 3069 /* Send PENDING Conf Rsp */ 3107 3070 result = L2CAP_CONF_PENDING; ··· 3124 3087 chan->remote_max_tx = rfc.max_transmit; 3125 3088 3126 3089 size = min_t(u16, le16_to_cpu(rfc.max_pdu_size), 3127 - chan->conn->mtu - 3128 - L2CAP_EXT_HDR_SIZE - 3129 - L2CAP_SDULEN_SIZE - 3130 - L2CAP_FCS_SIZE); 3090 + chan->conn->mtu - L2CAP_EXT_HDR_SIZE - 3091 + L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE); 3131 3092 rfc.max_pdu_size = cpu_to_le16(size); 3132 3093 chan->remote_mps = size; 3133 3094 ··· 3137 3102 set_bit(CONF_MODE_DONE, &chan->conf_state); 3138 3103 3139 3104 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, 3140 - sizeof(rfc), (unsigned long) &rfc); 3105 + sizeof(rfc), (unsigned long) &rfc); 3141 3106 3142 3107 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) { 3143 3108 chan->remote_id = efs.id; 3144 3109 chan->remote_stype = efs.stype; 3145 3110 chan->remote_msdu = le16_to_cpu(efs.msdu); 3146 3111 chan->remote_flush_to = 3147 - le32_to_cpu(efs.flush_to); 3112 + le32_to_cpu(efs.flush_to); 3148 3113 chan->remote_acc_lat = 3149 - le32_to_cpu(efs.acc_lat); 3114 + le32_to_cpu(efs.acc_lat); 3150 3115 chan->remote_sdu_itime = 3151 3116 le32_to_cpu(efs.sdu_itime); 3152 3117 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, 3153 - sizeof(efs), (unsigned long) &efs); 3118 + sizeof(efs), 3119 + (unsigned long) &efs); 3154 3120 } 3155 3121 break; 3156 3122 3157 3123 case L2CAP_MODE_STREAMING: 3158 3124 size = min_t(u16, le16_to_cpu(rfc.max_pdu_size), 3159 - chan->conn->mtu - 3160 - L2CAP_EXT_HDR_SIZE - 3161 - L2CAP_SDULEN_SIZE - 3162 - L2CAP_FCS_SIZE); 3125 + chan->conn->mtu - L2CAP_EXT_HDR_SIZE - 3126 + L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE); 3163 3127 rfc.max_pdu_size = cpu_to_le16(size); 3164 3128 chan->remote_mps = size; 3165 3129 3166 3130 set_bit(CONF_MODE_DONE, &chan->conf_state); 3167 3131 3168 - l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, 3169 - sizeof(rfc), (unsigned long) &rfc); 3132 + l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 3133 + (unsigned long) &rfc); 3170 3134 3171 3135 break; 3172 3136 ··· 3186 3152 return ptr - data; 3187 3153 } 3188 3154 3189 - static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result) 3155 + static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, 3156 + void *data, u16 *result) 3190 3157 { 3191 3158 struct l2cap_conf_req *req = data; 3192 3159 void *ptr = req->data; ··· 3214 3179 case L2CAP_CONF_FLUSH_TO: 3215 3180 chan->flush_to = val; 3216 3181 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 3217 - 2, chan->flush_to); 3182 + 2, chan->flush_to); 3218 3183 break; 3219 3184 3220 3185 case L2CAP_CONF_RFC: ··· 3222 3187 memcpy(&rfc, (void *)val, olen); 3223 3188 3224 3189 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) && 3225 - rfc.mode != chan->mode) 3190 + rfc.mode != chan->mode) 3226 3191 return -ECONNREFUSED; 3227 3192 3228 3193 chan->fcs = 0; 3229 3194 3230 3195 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, 3231 - sizeof(rfc), (unsigned long) &rfc); 3196 + sizeof(rfc), (unsigned long) &rfc); 3232 3197 break; 3233 3198 3234 3199 case L2CAP_CONF_EWS: ··· 3242 3207 memcpy(&efs, (void *)val, olen); 3243 3208 3244 3209 if (chan->local_stype != L2CAP_SERV_NOTRAFIC && 3245 - efs.stype != L2CAP_SERV_NOTRAFIC && 3246 - efs.stype != chan->local_stype) 3210 + efs.stype != L2CAP_SERV_NOTRAFIC && 3211 + efs.stype != chan->local_stype) 3247 3212 return -ECONNREFUSED; 3248 3213 3249 - l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, 3250 - sizeof(efs), (unsigned long) &efs); 3214 + l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs), 3215 + (unsigned long) &efs); 3251 3216 break; 3252 3217 } 3253 3218 } ··· 3270 3235 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) { 3271 3236 chan->local_msdu = le16_to_cpu(efs.msdu); 3272 3237 chan->local_sdu_itime = 3273 - le32_to_cpu(efs.sdu_itime); 3238 + le32_to_cpu(efs.sdu_itime); 3274 3239 chan->local_acc_lat = le32_to_cpu(efs.acc_lat); 3275 3240 chan->local_flush_to = 3276 - le32_to_cpu(efs.flush_to); 3241 + le32_to_cpu(efs.flush_to); 3277 3242 } 3278 3243 break; 3279 3244 ··· 3288 3253 return ptr - data; 3289 3254 } 3290 3255 3291 - static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags) 3256 + static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, 3257 + u16 result, u16 flags) 3292 3258 { 3293 3259 struct l2cap_conf_rsp *rsp = data; 3294 3260 void *ptr = rsp->data; ··· 3313 3277 rsp.dcid = cpu_to_le16(chan->scid); 3314 3278 rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS); 3315 3279 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 3316 - l2cap_send_cmd(conn, chan->ident, 3317 - L2CAP_CONN_RSP, sizeof(rsp), &rsp); 3280 + l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp); 3318 3281 3319 3282 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) 3320 3283 return; 3321 3284 3322 3285 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 3323 - l2cap_build_conf_req(chan, buf), buf); 3286 + l2cap_build_conf_req(chan, buf), buf); 3324 3287 chan->num_conf_req++; 3325 3288 } 3326 3289 ··· 3374 3339 } 3375 3340 } 3376 3341 3377 - static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3342 + static inline int l2cap_command_rej(struct l2cap_conn *conn, 3343 + struct l2cap_cmd_hdr *cmd, u8 *data) 3378 3344 { 3379 3345 struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data; 3380 3346 ··· 3383 3347 return 0; 3384 3348 3385 3349 if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) && 3386 - cmd->ident == conn->info_ident) { 3350 + cmd->ident == conn->info_ident) { 3387 3351 cancel_delayed_work(&conn->info_timer); 3388 3352 3389 3353 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; ··· 3395 3359 return 0; 3396 3360 } 3397 3361 3398 - static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3362 + static void l2cap_connect(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, 3363 + u8 *data, u8 rsp_code, u8 amp_id) 3399 3364 { 3400 3365 struct l2cap_conn_req *req = (struct l2cap_conn_req *) data; 3401 3366 struct l2cap_conn_rsp rsp; ··· 3423 3386 3424 3387 /* Check if the ACL is secure enough (if not SDP) */ 3425 3388 if (psm != __constant_cpu_to_le16(L2CAP_PSM_SDP) && 3426 - !hci_conn_check_link_mode(conn->hcon)) { 3389 + !hci_conn_check_link_mode(conn->hcon)) { 3427 3390 conn->disc_reason = HCI_ERROR_AUTH_FAILURE; 3428 3391 result = L2CAP_CR_SEC_BLOCK; 3429 3392 goto response; ··· 3448 3411 chan->psm = psm; 3449 3412 chan->dcid = scid; 3450 3413 3451 - bt_accept_enqueue(parent, sk); 3452 - 3453 3414 __l2cap_chan_add(conn, chan); 3454 3415 3455 3416 dcid = chan->scid; ··· 3462 3427 __l2cap_state_change(chan, BT_CONNECT2); 3463 3428 result = L2CAP_CR_PEND; 3464 3429 status = L2CAP_CS_AUTHOR_PEND; 3465 - parent->sk_data_ready(parent, 0); 3430 + chan->ops->defer(chan); 3466 3431 } else { 3467 3432 __l2cap_state_change(chan, BT_CONFIG); 3468 3433 result = L2CAP_CR_SUCCESS; ··· 3488 3453 rsp.dcid = cpu_to_le16(dcid); 3489 3454 rsp.result = cpu_to_le16(result); 3490 3455 rsp.status = cpu_to_le16(status); 3491 - l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp); 3456 + l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp); 3492 3457 3493 3458 if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) { 3494 3459 struct l2cap_info_req info; ··· 3499 3464 3500 3465 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT); 3501 3466 3502 - l2cap_send_cmd(conn, conn->info_ident, 3503 - L2CAP_INFO_REQ, sizeof(info), &info); 3467 + l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ, 3468 + sizeof(info), &info); 3504 3469 } 3505 3470 3506 3471 if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) && 3507 - result == L2CAP_CR_SUCCESS) { 3472 + result == L2CAP_CR_SUCCESS) { 3508 3473 u8 buf[128]; 3509 3474 set_bit(CONF_REQ_SENT, &chan->conf_state); 3510 3475 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 3511 - l2cap_build_conf_req(chan, buf), buf); 3476 + l2cap_build_conf_req(chan, buf), buf); 3512 3477 chan->num_conf_req++; 3513 3478 } 3479 + } 3514 3480 3481 + static int l2cap_connect_req(struct l2cap_conn *conn, 3482 + struct l2cap_cmd_hdr *cmd, u8 *data) 3483 + { 3484 + l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0); 3515 3485 return 0; 3516 3486 } 3517 3487 3518 - static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3488 + static inline int l2cap_connect_rsp(struct l2cap_conn *conn, 3489 + struct l2cap_cmd_hdr *cmd, u8 *data) 3519 3490 { 3520 3491 struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data; 3521 3492 u16 scid, dcid, result, status; ··· 3535 3494 status = __le16_to_cpu(rsp->status); 3536 3495 3537 3496 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", 3538 - dcid, scid, result, status); 3497 + dcid, scid, result, status); 3539 3498 3540 3499 mutex_lock(&conn->chan_lock); 3541 3500 ··· 3568 3527 break; 3569 3528 3570 3529 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 3571 - l2cap_build_conf_req(chan, req), req); 3530 + l2cap_build_conf_req(chan, req), req); 3572 3531 chan->num_conf_req++; 3573 3532 break; 3574 3533 ··· 3600 3559 chan->fcs = L2CAP_FCS_CRC16; 3601 3560 } 3602 3561 3603 - static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data) 3562 + static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data, 3563 + u8 ident, u16 flags) 3564 + { 3565 + struct l2cap_conn *conn = chan->conn; 3566 + 3567 + BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident, 3568 + flags); 3569 + 3570 + clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state); 3571 + set_bit(CONF_OUTPUT_DONE, &chan->conf_state); 3572 + 3573 + l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP, 3574 + l2cap_build_conf_rsp(chan, data, 3575 + L2CAP_CONF_SUCCESS, flags), data); 3576 + } 3577 + 3578 + static inline int l2cap_config_req(struct l2cap_conn *conn, 3579 + struct l2cap_cmd_hdr *cmd, u16 cmd_len, 3580 + u8 *data) 3604 3581 { 3605 3582 struct l2cap_conf_req *req = (struct l2cap_conf_req *) data; 3606 3583 u16 dcid, flags; ··· 3643 3584 rej.dcid = cpu_to_le16(chan->dcid); 3644 3585 3645 3586 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ, 3646 - sizeof(rej), &rej); 3587 + sizeof(rej), &rej); 3647 3588 goto unlock; 3648 3589 } 3649 3590 ··· 3651 3592 len = cmd_len - sizeof(*req); 3652 3593 if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) { 3653 3594 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 3654 - l2cap_build_conf_rsp(chan, rsp, 3655 - L2CAP_CONF_REJECT, flags), rsp); 3595 + l2cap_build_conf_rsp(chan, rsp, 3596 + L2CAP_CONF_REJECT, flags), rsp); 3656 3597 goto unlock; 3657 3598 } 3658 3599 ··· 3663 3604 if (flags & L2CAP_CONF_FLAG_CONTINUATION) { 3664 3605 /* Incomplete config. Send empty response. */ 3665 3606 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 3666 - l2cap_build_conf_rsp(chan, rsp, 3667 - L2CAP_CONF_SUCCESS, flags), rsp); 3607 + l2cap_build_conf_rsp(chan, rsp, 3608 + L2CAP_CONF_SUCCESS, flags), rsp); 3668 3609 goto unlock; 3669 3610 } 3670 3611 ··· 3702 3643 if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) { 3703 3644 u8 buf[64]; 3704 3645 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 3705 - l2cap_build_conf_req(chan, buf), buf); 3646 + l2cap_build_conf_req(chan, buf), buf); 3706 3647 chan->num_conf_req++; 3707 3648 } 3708 3649 3709 3650 /* Got Conf Rsp PENDING from remote side and asume we sent 3710 3651 Conf Rsp PENDING in the code above */ 3711 3652 if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) && 3712 - test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) { 3653 + test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) { 3713 3654 3714 3655 /* check compatibility */ 3715 3656 3716 - clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state); 3717 - set_bit(CONF_OUTPUT_DONE, &chan->conf_state); 3718 - 3719 - l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 3720 - l2cap_build_conf_rsp(chan, rsp, 3721 - L2CAP_CONF_SUCCESS, flags), rsp); 3657 + /* Send rsp for BR/EDR channel */ 3658 + if (!chan->ctrl_id) 3659 + l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags); 3660 + else 3661 + chan->ident = cmd->ident; 3722 3662 } 3723 3663 3724 3664 unlock: ··· 3725 3667 return err; 3726 3668 } 3727 3669 3728 - static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3670 + static inline int l2cap_config_rsp(struct l2cap_conn *conn, 3671 + struct l2cap_cmd_hdr *cmd, u8 *data) 3729 3672 { 3730 3673 struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data; 3731 3674 u16 scid, flags, result; ··· 3758 3699 char buf[64]; 3759 3700 3760 3701 len = l2cap_parse_conf_rsp(chan, rsp->data, len, 3761 - buf, &result); 3702 + buf, &result); 3762 3703 if (len < 0) { 3763 3704 l2cap_send_disconn_req(conn, chan, ECONNRESET); 3764 3705 goto done; ··· 3766 3707 3767 3708 /* check compatibility */ 3768 3709 3769 - clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state); 3770 - set_bit(CONF_OUTPUT_DONE, &chan->conf_state); 3771 - 3772 - l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 3773 - l2cap_build_conf_rsp(chan, buf, 3774 - L2CAP_CONF_SUCCESS, 0x0000), buf); 3710 + if (!chan->ctrl_id) 3711 + l2cap_send_efs_conf_rsp(chan, buf, cmd->ident, 3712 + 0); 3713 + else 3714 + chan->ident = cmd->ident; 3775 3715 } 3776 3716 goto done; 3777 3717 ··· 3786 3728 /* throw out any old stored conf requests */ 3787 3729 result = L2CAP_CONF_SUCCESS; 3788 3730 len = l2cap_parse_conf_rsp(chan, rsp->data, len, 3789 - req, &result); 3731 + req, &result); 3790 3732 if (len < 0) { 3791 3733 l2cap_send_disconn_req(conn, chan, ECONNRESET); 3792 3734 goto done; 3793 3735 } 3794 3736 3795 3737 l2cap_send_cmd(conn, l2cap_get_ident(conn), 3796 - L2CAP_CONF_REQ, len, req); 3738 + L2CAP_CONF_REQ, len, req); 3797 3739 chan->num_conf_req++; 3798 3740 if (result != L2CAP_CONF_SUCCESS) 3799 3741 goto done; ··· 3831 3773 return err; 3832 3774 } 3833 3775 3834 - static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3776 + static inline int l2cap_disconnect_req(struct l2cap_conn *conn, 3777 + struct l2cap_cmd_hdr *cmd, u8 *data) 3835 3778 { 3836 3779 struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data; 3837 3780 struct l2cap_disconn_rsp rsp; ··· 3878 3819 return 0; 3879 3820 } 3880 3821 3881 - static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3822 + static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, 3823 + struct l2cap_cmd_hdr *cmd, u8 *data) 3882 3824 { 3883 3825 struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data; 3884 3826 u16 dcid, scid; ··· 3913 3853 return 0; 3914 3854 } 3915 3855 3916 - static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3856 + static inline int l2cap_information_req(struct l2cap_conn *conn, 3857 + struct l2cap_cmd_hdr *cmd, u8 *data) 3917 3858 { 3918 3859 struct l2cap_info_req *req = (struct l2cap_info_req *) data; 3919 3860 u16 type; ··· 3931 3870 rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS); 3932 3871 if (!disable_ertm) 3933 3872 feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING 3934 - | L2CAP_FEAT_FCS; 3873 + | L2CAP_FEAT_FCS; 3935 3874 if (enable_hs) 3936 3875 feat_mask |= L2CAP_FEAT_EXT_FLOW 3937 - | L2CAP_FEAT_EXT_WINDOW; 3876 + | L2CAP_FEAT_EXT_WINDOW; 3938 3877 3939 3878 put_unaligned_le32(feat_mask, rsp->data); 3940 - l2cap_send_cmd(conn, cmd->ident, 3941 - L2CAP_INFO_RSP, sizeof(buf), buf); 3879 + l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf), 3880 + buf); 3942 3881 } else if (type == L2CAP_IT_FIXED_CHAN) { 3943 3882 u8 buf[12]; 3944 3883 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf; ··· 3951 3890 rsp->type = __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN); 3952 3891 rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS); 3953 3892 memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan)); 3954 - l2cap_send_cmd(conn, cmd->ident, 3955 - L2CAP_INFO_RSP, sizeof(buf), buf); 3893 + l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf), 3894 + buf); 3956 3895 } else { 3957 3896 struct l2cap_info_rsp rsp; 3958 3897 rsp.type = cpu_to_le16(type); 3959 3898 rsp.result = __constant_cpu_to_le16(L2CAP_IR_NOTSUPP); 3960 - l2cap_send_cmd(conn, cmd->ident, 3961 - L2CAP_INFO_RSP, sizeof(rsp), &rsp); 3899 + l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp), 3900 + &rsp); 3962 3901 } 3963 3902 3964 3903 return 0; 3965 3904 } 3966 3905 3967 - static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data) 3906 + static inline int l2cap_information_rsp(struct l2cap_conn *conn, 3907 + struct l2cap_cmd_hdr *cmd, u8 *data) 3968 3908 { 3969 3909 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data; 3970 3910 u16 type, result; ··· 3977 3915 3978 3916 /* L2CAP Info req/rsp are unbound to channels, add extra checks */ 3979 3917 if (cmd->ident != conn->info_ident || 3980 - conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) 3918 + conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) 3981 3919 return 0; 3982 3920 3983 3921 cancel_delayed_work(&conn->info_timer); ··· 4002 3940 conn->info_ident = l2cap_get_ident(conn); 4003 3941 4004 3942 l2cap_send_cmd(conn, conn->info_ident, 4005 - L2CAP_INFO_REQ, sizeof(req), &req); 3943 + L2CAP_INFO_REQ, sizeof(req), &req); 4006 3944 } else { 4007 3945 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 4008 3946 conn->info_ident = 0; ··· 4024 3962 } 4025 3963 4026 3964 static inline int l2cap_create_channel_req(struct l2cap_conn *conn, 4027 - struct l2cap_cmd_hdr *cmd, u16 cmd_len, 4028 - void *data) 3965 + struct l2cap_cmd_hdr *cmd, 3966 + u16 cmd_len, void *data) 4029 3967 { 4030 3968 struct l2cap_create_chan_req *req = data; 4031 3969 struct l2cap_create_chan_rsp rsp; ··· 4055 3993 } 4056 3994 4057 3995 static inline int l2cap_create_channel_rsp(struct l2cap_conn *conn, 4058 - struct l2cap_cmd_hdr *cmd, void *data) 3996 + struct l2cap_cmd_hdr *cmd, 3997 + void *data) 4059 3998 { 4060 3999 BT_DBG("conn %p", conn); 4061 4000 ··· 4189 4126 } 4190 4127 4191 4128 static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency, 4192 - u16 to_multiplier) 4129 + u16 to_multiplier) 4193 4130 { 4194 4131 u16 max_latency; 4195 4132 ··· 4210 4147 } 4211 4148 4212 4149 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn, 4213 - struct l2cap_cmd_hdr *cmd, u8 *data) 4150 + struct l2cap_cmd_hdr *cmd, 4151 + u8 *data) 4214 4152 { 4215 4153 struct hci_conn *hcon = conn->hcon; 4216 4154 struct l2cap_conn_param_update_req *req; ··· 4233 4169 to_multiplier = __le16_to_cpu(req->to_multiplier); 4234 4170 4235 4171 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x", 4236 - min, max, latency, to_multiplier); 4172 + min, max, latency, to_multiplier); 4237 4173 4238 4174 memset(&rsp, 0, sizeof(rsp)); 4239 4175 ··· 4244 4180 rsp.result = __constant_cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED); 4245 4181 4246 4182 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP, 4247 - sizeof(rsp), &rsp); 4183 + sizeof(rsp), &rsp); 4248 4184 4249 4185 if (!err) 4250 4186 hci_le_conn_update(hcon, min, max, latency, to_multiplier); ··· 4253 4189 } 4254 4190 4255 4191 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn, 4256 - struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data) 4192 + struct l2cap_cmd_hdr *cmd, u16 cmd_len, 4193 + u8 *data) 4257 4194 { 4258 4195 int err = 0; 4259 4196 ··· 4268 4203 break; 4269 4204 4270 4205 case L2CAP_CONN_RSP: 4206 + case L2CAP_CREATE_CHAN_RSP: 4271 4207 err = l2cap_connect_rsp(conn, cmd, data); 4272 4208 break; 4273 4209 ··· 4307 4241 err = l2cap_create_channel_req(conn, cmd, cmd_len, data); 4308 4242 break; 4309 4243 4310 - case L2CAP_CREATE_CHAN_RSP: 4311 - err = l2cap_create_channel_rsp(conn, cmd, data); 4312 - break; 4313 - 4314 4244 case L2CAP_MOVE_CHAN_REQ: 4315 4245 err = l2cap_move_channel_req(conn, cmd, cmd_len, data); 4316 4246 break; ··· 4333 4271 } 4334 4272 4335 4273 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn, 4336 - struct l2cap_cmd_hdr *cmd, u8 *data) 4274 + struct l2cap_cmd_hdr *cmd, u8 *data) 4337 4275 { 4338 4276 switch (cmd->code) { 4339 4277 case L2CAP_COMMAND_REJ: ··· 4352 4290 } 4353 4291 4354 4292 static inline void l2cap_sig_channel(struct l2cap_conn *conn, 4355 - struct sk_buff *skb) 4293 + struct sk_buff *skb) 4356 4294 { 4357 4295 u8 *data = skb->data; 4358 4296 int len = skb->len; ··· 4369 4307 4370 4308 cmd_len = le16_to_cpu(cmd.len); 4371 4309 4372 - BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident); 4310 + BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, 4311 + cmd.ident); 4373 4312 4374 4313 if (cmd_len > len || !cmd.ident) { 4375 4314 BT_DBG("corrupted command"); ··· 4389 4326 4390 4327 /* FIXME: Map err to a valid reason */ 4391 4328 rej.reason = __constant_cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD); 4392 - l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej); 4329 + l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, 4330 + sizeof(rej), &rej); 4393 4331 } 4394 4332 4395 4333 data += cmd_len; ··· 4455 4391 } 4456 4392 } 4457 4393 4458 - static void append_skb_frag(struct sk_buff *skb, 4459 - struct sk_buff *new_frag, struct sk_buff **last_frag) 4394 + static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag, 4395 + struct sk_buff **last_frag) 4460 4396 { 4461 4397 /* skb->len reflects data in skb as well as all fragments 4462 4398 * skb->data_len reflects only data in fragments ··· 4705 4641 4706 4642 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) { 4707 4643 if (__seq_offset(chan, txseq, chan->last_acked_seq) >= 4708 - chan->tx_win) { 4644 + chan->tx_win) { 4709 4645 /* See notes below regarding "double poll" and 4710 4646 * invalid packets. 4711 4647 */ ··· 4746 4682 } 4747 4683 4748 4684 if (__seq_offset(chan, txseq, chan->last_acked_seq) < 4749 - __seq_offset(chan, chan->expected_tx_seq, 4750 - chan->last_acked_seq)){ 4685 + __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) { 4751 4686 BT_DBG("Duplicate - expected_tx_seq later than txseq"); 4752 4687 return L2CAP_TXSEQ_DUPLICATE; 4753 4688 } ··· 5386 5323 int exact = 0, lm1 = 0, lm2 = 0; 5387 5324 struct l2cap_chan *c; 5388 5325 5389 - BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr)); 5326 + BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr); 5390 5327 5391 5328 /* Find listening sockets and check their link_mode */ 5392 5329 read_lock(&chan_list_lock); ··· 5416 5353 { 5417 5354 struct l2cap_conn *conn; 5418 5355 5419 - BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status); 5356 + BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status); 5420 5357 5421 5358 if (!status) { 5422 5359 conn = l2cap_conn_add(hcon, status); ··· 5506 5443 } 5507 5444 5508 5445 if (!status && (chan->state == BT_CONNECTED || 5509 - chan->state == BT_CONFIG)) { 5446 + chan->state == BT_CONFIG)) { 5510 5447 struct sock *sk = chan->sk; 5511 5448 5512 5449 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); ··· 5519 5456 5520 5457 if (chan->state == BT_CONNECT) { 5521 5458 if (!status) { 5522 - l2cap_send_conn_req(chan); 5459 + l2cap_start_connection(chan); 5523 5460 } else { 5524 5461 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT); 5525 5462 } ··· 5533 5470 if (!status) { 5534 5471 if (test_bit(BT_SK_DEFER_SETUP, 5535 5472 &bt_sk(sk)->flags)) { 5536 - struct sock *parent = bt_sk(sk)->parent; 5537 5473 res = L2CAP_CR_PEND; 5538 5474 stat = L2CAP_CS_AUTHOR_PEND; 5539 - if (parent) 5540 - parent->sk_data_ready(parent, 0); 5475 + chan->ops->defer(chan); 5541 5476 } else { 5542 5477 __l2cap_state_change(chan, BT_CONFIG); 5543 5478 res = L2CAP_CR_SUCCESS; ··· 5555 5494 rsp.result = cpu_to_le16(res); 5556 5495 rsp.status = cpu_to_le16(stat); 5557 5496 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 5558 - sizeof(rsp), &rsp); 5497 + sizeof(rsp), &rsp); 5559 5498 5560 5499 if (!test_bit(CONF_REQ_SENT, &chan->conf_state) && 5561 5500 res == L2CAP_CR_SUCCESS) { ··· 5580 5519 int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) 5581 5520 { 5582 5521 struct l2cap_conn *conn = hcon->l2cap_data; 5522 + struct l2cap_hdr *hdr; 5523 + int len; 5524 + 5525 + /* For AMP controller do not create l2cap conn */ 5526 + if (!conn && hcon->hdev->dev_type != HCI_BREDR) 5527 + goto drop; 5583 5528 5584 5529 if (!conn) 5585 5530 conn = l2cap_conn_add(hcon, 0); ··· 5595 5528 5596 5529 BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags); 5597 5530 5598 - if (!(flags & ACL_CONT)) { 5599 - struct l2cap_hdr *hdr; 5600 - int len; 5601 - 5531 + switch (flags) { 5532 + case ACL_START: 5533 + case ACL_START_NO_FLUSH: 5534 + case ACL_COMPLETE: 5602 5535 if (conn->rx_len) { 5603 5536 BT_ERR("Unexpected start frame (len %d)", skb->len); 5604 5537 kfree_skb(conn->rx_skb); ··· 5627 5560 5628 5561 if (skb->len > len) { 5629 5562 BT_ERR("Frame is too long (len %d, expected len %d)", 5630 - skb->len, len); 5563 + skb->len, len); 5631 5564 l2cap_conn_unreliable(conn, ECOMM); 5632 5565 goto drop; 5633 5566 } 5634 5567 5635 5568 /* Allocate skb for the complete frame (with header) */ 5636 - conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC); 5569 + conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL); 5637 5570 if (!conn->rx_skb) 5638 5571 goto drop; 5639 5572 5640 5573 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len), 5641 - skb->len); 5574 + skb->len); 5642 5575 conn->rx_len = len - skb->len; 5643 - } else { 5576 + break; 5577 + 5578 + case ACL_CONT: 5644 5579 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len); 5645 5580 5646 5581 if (!conn->rx_len) { ··· 5653 5584 5654 5585 if (skb->len > conn->rx_len) { 5655 5586 BT_ERR("Fragment is too long (len %d, expected %d)", 5656 - skb->len, conn->rx_len); 5587 + skb->len, conn->rx_len); 5657 5588 kfree_skb(conn->rx_skb); 5658 5589 conn->rx_skb = NULL; 5659 5590 conn->rx_len = 0; ··· 5662 5593 } 5663 5594 5664 5595 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len), 5665 - skb->len); 5596 + skb->len); 5666 5597 conn->rx_len -= skb->len; 5667 5598 5668 5599 if (!conn->rx_len) { ··· 5670 5601 l2cap_recv_frame(conn, conn->rx_skb); 5671 5602 conn->rx_skb = NULL; 5672 5603 } 5604 + break; 5673 5605 } 5674 5606 5675 5607 drop: ··· 5687 5617 list_for_each_entry(c, &chan_list, global_l) { 5688 5618 struct sock *sk = c->sk; 5689 5619 5690 - seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n", 5691 - batostr(&bt_sk(sk)->src), 5692 - batostr(&bt_sk(sk)->dst), 5693 - c->state, __le16_to_cpu(c->psm), 5694 - c->scid, c->dcid, c->imtu, c->omtu, 5695 - c->sec_level, c->mode); 5620 + seq_printf(f, "%pMR %pMR %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n", 5621 + &bt_sk(sk)->src, &bt_sk(sk)->dst, 5622 + c->state, __le16_to_cpu(c->psm), 5623 + c->scid, c->dcid, c->imtu, c->omtu, 5624 + c->sec_level, c->mode); 5696 5625 } 5697 5626 5698 5627 read_unlock(&chan_list_lock); ··· 5722 5653 return err; 5723 5654 5724 5655 if (bt_debugfs) { 5725 - l2cap_debugfs = debugfs_create_file("l2cap", 0444, 5726 - bt_debugfs, NULL, &l2cap_debugfs_fops); 5656 + l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs, 5657 + NULL, &l2cap_debugfs_fops); 5727 5658 if (!l2cap_debugfs) 5728 5659 BT_ERR("Failed to create L2CAP debug file"); 5729 5660 }
+58 -31
net/bluetooth/l2cap_sock.c
··· 40 40 41 41 static const struct proto_ops l2cap_sock_ops; 42 42 static void l2cap_sock_init(struct sock *sk, struct sock *parent); 43 - static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio); 43 + static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, 44 + int proto, gfp_t prio); 44 45 45 46 static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) 46 47 { ··· 107 106 return err; 108 107 } 109 108 110 - static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags) 109 + static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, 110 + int alen, int flags) 111 111 { 112 112 struct sock *sk = sock->sk; 113 113 struct l2cap_chan *chan = l2cap_pi(sk)->chan; ··· 136 134 lock_sock(sk); 137 135 138 136 err = bt_sock_wait_state(sk, BT_CONNECTED, 139 - sock_sndtimeo(sk, flags & O_NONBLOCK)); 137 + sock_sndtimeo(sk, flags & O_NONBLOCK)); 140 138 141 139 release_sock(sk); 142 140 ··· 187 185 return err; 188 186 } 189 187 190 - static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags) 188 + static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, 189 + int flags) 191 190 { 192 191 DECLARE_WAITQUEUE(wait, current); 193 192 struct sock *sk = sock->sk, *nsk; ··· 244 241 return err; 245 242 } 246 243 247 - static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer) 244 + static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, 245 + int *len, int peer) 248 246 { 249 247 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr; 250 248 struct sock *sk = sock->sk; ··· 270 266 return 0; 271 267 } 272 268 273 - static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen) 269 + static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, 270 + char __user *optval, int __user *optlen) 274 271 { 275 272 struct sock *sk = sock->sk; 276 273 struct l2cap_chan *chan = l2cap_pi(sk)->chan; ··· 314 309 break; 315 310 case BT_SECURITY_HIGH: 316 311 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT | 317 - L2CAP_LM_SECURE; 312 + L2CAP_LM_SECURE; 318 313 break; 319 314 default: 320 315 opt = 0; ··· 358 353 return err; 359 354 } 360 355 361 - static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen) 356 + static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, 357 + char __user *optval, int __user *optlen) 362 358 { 363 359 struct sock *sk = sock->sk; 364 360 struct l2cap_chan *chan = l2cap_pi(sk)->chan; ··· 383 377 switch (optname) { 384 378 case BT_SECURITY: 385 379 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 386 - chan->chan_type != L2CAP_CHAN_RAW) { 380 + chan->chan_type != L2CAP_CHAN_RAW) { 387 381 err = -EINVAL; 388 382 break; 389 383 } 390 384 391 385 memset(&sec, 0, sizeof(sec)); 392 - if (chan->conn) 386 + if (chan->conn) { 393 387 sec.level = chan->conn->hcon->sec_level; 394 - else 395 - sec.level = chan->sec_level; 396 388 397 - if (sk->sk_state == BT_CONNECTED) 398 - sec.key_size = chan->conn->hcon->enc_key_size; 389 + if (sk->sk_state == BT_CONNECTED) 390 + sec.key_size = chan->conn->hcon->enc_key_size; 391 + } else { 392 + sec.level = chan->sec_level; 393 + } 399 394 400 395 len = min_t(unsigned int, len, sizeof(sec)); 401 396 if (copy_to_user(optval, (char *) &sec, len)) ··· 418 411 419 412 case BT_FLUSHABLE: 420 413 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags), 421 - (u32 __user *) optval)) 414 + (u32 __user *) optval)) 422 415 err = -EFAULT; 423 416 424 417 break; 425 418 426 419 case BT_POWER: 427 420 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 428 - && sk->sk_type != SOCK_RAW) { 421 + && sk->sk_type != SOCK_RAW) { 429 422 err = -EINVAL; 430 423 break; 431 424 } ··· 473 466 return true; 474 467 } 475 468 476 - static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen) 469 + static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, 470 + char __user *optval, unsigned int optlen) 477 471 { 478 472 struct sock *sk = sock->sk; 479 473 struct l2cap_chan *chan = l2cap_pi(sk)->chan; ··· 537 529 chan->fcs = opts.fcs; 538 530 chan->max_tx = opts.max_tx; 539 531 chan->tx_win = opts.txwin_size; 532 + chan->flush_to = opts.flush_to; 540 533 break; 541 534 542 535 case L2CAP_LM: ··· 573 564 return err; 574 565 } 575 566 576 - static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) 567 + static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, 568 + char __user *optval, unsigned int optlen) 577 569 { 578 570 struct sock *sk = sock->sk; 579 571 struct l2cap_chan *chan = l2cap_pi(sk)->chan; ··· 597 587 switch (optname) { 598 588 case BT_SECURITY: 599 589 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 600 - chan->chan_type != L2CAP_CHAN_RAW) { 590 + chan->chan_type != L2CAP_CHAN_RAW) { 601 591 err = -EINVAL; 602 592 break; 603 593 } ··· 611 601 } 612 602 613 603 if (sec.level < BT_SECURITY_LOW || 614 - sec.level > BT_SECURITY_HIGH) { 604 + sec.level > BT_SECURITY_HIGH) { 615 605 err = -EINVAL; 616 606 break; 617 607 } ··· 637 627 638 628 /* or for ACL link */ 639 629 } else if ((sk->sk_state == BT_CONNECT2 && 640 - test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || 630 + test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || 641 631 sk->sk_state == BT_CONNECTED) { 642 632 if (!l2cap_chan_check_security(chan)) 643 633 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); ··· 694 684 695 685 case BT_POWER: 696 686 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 697 - chan->chan_type != L2CAP_CHAN_RAW) { 687 + chan->chan_type != L2CAP_CHAN_RAW) { 698 688 err = -EINVAL; 699 689 break; 700 690 } ··· 730 720 } 731 721 732 722 if (chan->mode != L2CAP_MODE_ERTM && 733 - chan->mode != L2CAP_MODE_STREAMING) { 723 + chan->mode != L2CAP_MODE_STREAMING) { 734 724 err = -EOPNOTSUPP; 735 725 break; 736 726 } ··· 747 737 return err; 748 738 } 749 739 750 - static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len) 740 + static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, 741 + struct msghdr *msg, size_t len) 751 742 { 752 743 struct sock *sk = sock->sk; 753 744 struct l2cap_chan *chan = l2cap_pi(sk)->chan; ··· 773 762 return err; 774 763 } 775 764 776 - static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags) 765 + static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, 766 + struct msghdr *msg, size_t len, int flags) 777 767 { 778 768 struct sock *sk = sock->sk; 779 769 struct l2cap_pinfo *pi = l2cap_pi(sk); ··· 878 866 879 867 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) 880 868 err = bt_sock_wait_state(sk, BT_CLOSED, 881 - sk->sk_lingertime); 869 + sk->sk_lingertime); 882 870 } 883 871 884 872 if (!err && sk->sk_err) ··· 942 930 } 943 931 944 932 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, 945 - GFP_ATOMIC); 933 + GFP_ATOMIC); 946 934 if (!sk) 947 935 return NULL; 948 936 949 937 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); 950 938 951 939 l2cap_sock_init(sk, parent); 940 + 941 + bt_accept_enqueue(parent, sk); 952 942 953 943 return l2cap_pi(sk)->chan; 954 944 } ··· 1082 1068 release_sock(sk); 1083 1069 } 1084 1070 1071 + static void l2cap_sock_defer_cb(struct l2cap_chan *chan) 1072 + { 1073 + struct sock *sk = chan->data; 1074 + struct sock *parent = bt_sk(sk)->parent; 1075 + 1076 + if (parent) 1077 + parent->sk_data_ready(parent, 0); 1078 + } 1079 + 1085 1080 static struct l2cap_ops l2cap_chan_ops = { 1086 1081 .name = "L2CAP Socket Interface", 1087 1082 .new_connection = l2cap_sock_new_connection_cb, ··· 1099 1076 .teardown = l2cap_sock_teardown_cb, 1100 1077 .state_change = l2cap_sock_state_change_cb, 1101 1078 .ready = l2cap_sock_ready_cb, 1079 + .defer = l2cap_sock_defer_cb, 1102 1080 .alloc_skb = l2cap_sock_alloc_skb_cb, 1103 1081 }; 1104 1082 ··· 1107 1083 { 1108 1084 BT_DBG("sk %p", sk); 1109 1085 1110 - l2cap_chan_put(l2cap_pi(sk)->chan); 1086 + if (l2cap_pi(sk)->chan) 1087 + l2cap_chan_put(l2cap_pi(sk)->chan); 1111 1088 if (l2cap_pi(sk)->rx_busy_skb) { 1112 1089 kfree_skb(l2cap_pi(sk)->rx_busy_skb); 1113 1090 l2cap_pi(sk)->rx_busy_skb = NULL; ··· 1184 1159 .obj_size = sizeof(struct l2cap_pinfo) 1185 1160 }; 1186 1161 1187 - static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio) 1162 + static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, 1163 + int proto, gfp_t prio) 1188 1164 { 1189 1165 struct sock *sk; 1190 1166 struct l2cap_chan *chan; ··· 1230 1204 sock->state = SS_UNCONNECTED; 1231 1205 1232 1206 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM && 1233 - sock->type != SOCK_DGRAM && sock->type != SOCK_RAW) 1207 + sock->type != SOCK_DGRAM && sock->type != SOCK_RAW) 1234 1208 return -ESOCKTNOSUPPORT; 1235 1209 1236 1210 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW)) ··· 1287 1261 goto error; 1288 1262 } 1289 1263 1290 - err = bt_procfs_init(THIS_MODULE, &init_net, "l2cap", &l2cap_sk_list, NULL); 1264 + err = bt_procfs_init(THIS_MODULE, &init_net, "l2cap", &l2cap_sk_list, 1265 + NULL); 1291 1266 if (err < 0) { 1292 1267 BT_ERR("Failed to create L2CAP proc file"); 1293 1268 bt_sock_unregister(BTPROTO_L2CAP);
-14
net/bluetooth/lib.c
··· 41 41 } 42 42 EXPORT_SYMBOL(baswap); 43 43 44 - char *batostr(bdaddr_t *ba) 45 - { 46 - static char str[2][18]; 47 - static int i = 1; 48 - 49 - i ^= 1; 50 - sprintf(str[i], "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 51 - ba->b[5], ba->b[4], ba->b[3], 52 - ba->b[2], ba->b[1], ba->b[0]); 53 - 54 - return str[i]; 55 - } 56 - EXPORT_SYMBOL(batostr); 57 - 58 44 /* Bluetooth error codes to Unix errno mapping */ 59 45 int bt_to_errno(__u16 code) 60 46 {
+3 -2
net/bluetooth/mgmt.c
··· 3125 3125 struct pending_cmd *cmd; 3126 3126 int err; 3127 3127 3128 + mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp, 3129 + hdev); 3130 + 3128 3131 cmd = mgmt_pending_find(MGMT_OP_DISCONNECT, hdev); 3129 3132 if (!cmd) 3130 3133 return -ENOENT; ··· 3140 3137 3141 3138 mgmt_pending_remove(cmd); 3142 3139 3143 - mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp, 3144 - hdev); 3145 3140 return err; 3146 3141 } 3147 3142
+9 -10
net/bluetooth/rfcomm/core.c
··· 377 377 int err = 0; 378 378 u8 dlci; 379 379 380 - BT_DBG("dlc %p state %ld %s %s channel %d", 381 - d, d->state, batostr(src), batostr(dst), channel); 380 + BT_DBG("dlc %p state %ld %pMR -> %pMR channel %d", 381 + d, d->state, src, dst, channel); 382 382 383 383 if (channel < 1 || channel > 30) 384 384 return -EINVAL; ··· 676 676 struct socket *sock; 677 677 struct sock *sk; 678 678 679 - BT_DBG("%s %s", batostr(src), batostr(dst)); 679 + BT_DBG("%pMR -> %pMR", src, dst); 680 680 681 681 *err = rfcomm_l2sock_create(&sock); 682 682 if (*err < 0) ··· 709 709 710 710 bacpy(&addr.l2_bdaddr, dst); 711 711 addr.l2_family = AF_BLUETOOTH; 712 - addr.l2_psm = cpu_to_le16(RFCOMM_PSM); 712 + addr.l2_psm = __constant_cpu_to_le16(RFCOMM_PSM); 713 713 addr.l2_cid = 0; 714 714 *err = kernel_connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK); 715 715 if (*err == 0 || *err == -EINPROGRESS) ··· 1987 1987 /* Bind socket */ 1988 1988 bacpy(&addr.l2_bdaddr, ba); 1989 1989 addr.l2_family = AF_BLUETOOTH; 1990 - addr.l2_psm = cpu_to_le16(RFCOMM_PSM); 1990 + addr.l2_psm = __constant_cpu_to_le16(RFCOMM_PSM); 1991 1991 addr.l2_cid = 0; 1992 1992 err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr)); 1993 1993 if (err < 0) { ··· 2125 2125 list_for_each_entry(d, &s->dlcs, list) { 2126 2126 struct sock *sk = s->sock->sk; 2127 2127 2128 - seq_printf(f, "%s %s %ld %d %d %d %d\n", 2129 - batostr(&bt_sk(sk)->src), 2130 - batostr(&bt_sk(sk)->dst), 2131 - d->state, d->dlci, d->mtu, 2132 - d->rx_credits, d->tx_credits); 2128 + seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n", 2129 + &bt_sk(sk)->src, &bt_sk(sk)->dst, 2130 + d->state, d->dlci, d->mtu, 2131 + d->rx_credits, d->tx_credits); 2133 2132 } 2134 2133 } 2135 2134
+4 -5
net/bluetooth/rfcomm/sock.c
··· 334 334 struct sock *sk = sock->sk; 335 335 int err = 0; 336 336 337 - BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr)); 337 + BT_DBG("sk %p %pMR", sk, &sa->rc_bdaddr); 338 338 339 339 if (!addr || addr->sa_family != AF_BLUETOOTH) 340 340 return -EINVAL; ··· 975 975 read_lock(&rfcomm_sk_list.lock); 976 976 977 977 sk_for_each(sk, node, &rfcomm_sk_list.head) { 978 - seq_printf(f, "%s %s %d %d\n", 979 - batostr(&bt_sk(sk)->src), 980 - batostr(&bt_sk(sk)->dst), 981 - sk->sk_state, rfcomm_pi(sk)->channel); 978 + seq_printf(f, "%pMR %pMR %d %d\n", 979 + &bt_sk(sk)->src, &bt_sk(sk)->dst, 980 + sk->sk_state, rfcomm_pi(sk)->channel); 982 981 } 983 982 984 983 read_unlock(&rfcomm_sk_list.lock);
+3 -3
net/bluetooth/rfcomm/tty.c
··· 166 166 static ssize_t show_address(struct device *tty_dev, struct device_attribute *attr, char *buf) 167 167 { 168 168 struct rfcomm_dev *dev = dev_get_drvdata(tty_dev); 169 - return sprintf(buf, "%s\n", batostr(&dev->dst)); 169 + return sprintf(buf, "%pMR\n", &dev->dst); 170 170 } 171 171 172 172 static ssize_t show_channel(struct device *tty_dev, struct device_attribute *attr, char *buf) ··· 663 663 if (!dev) 664 664 return -ENODEV; 665 665 666 - BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst), 667 - dev->channel, dev->port.count); 666 + BT_DBG("dev %p dst %pMR channel %d opened %d", dev, &dev->dst, 667 + dev->channel, dev->port.count); 668 668 669 669 spin_lock_irqsave(&dev->port.lock, flags); 670 670 if (++dev->port.count > 1) {
+6 -6
net/bluetooth/sco.c
··· 172 172 struct hci_dev *hdev; 173 173 int err, type; 174 174 175 - BT_DBG("%s -> %s", batostr(src), batostr(dst)); 175 + BT_DBG("%pMR -> %pMR", src, dst); 176 176 177 177 hdev = hci_get_route(dst, src); 178 178 if (!hdev) ··· 460 460 struct sock *sk = sock->sk; 461 461 int err = 0; 462 462 463 - BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr)); 463 + BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr); 464 464 465 465 if (!addr || addr->sa_family != AF_BLUETOOTH) 466 466 return -EINVAL; ··· 893 893 struct hlist_node *node; 894 894 int lm = 0; 895 895 896 - BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr)); 896 + BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr); 897 897 898 898 /* Find listening sockets */ 899 899 read_lock(&sco_sk_list.lock); ··· 914 914 915 915 void sco_connect_cfm(struct hci_conn *hcon, __u8 status) 916 916 { 917 - BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status); 917 + BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status); 918 918 if (!status) { 919 919 struct sco_conn *conn; 920 920 ··· 959 959 read_lock(&sco_sk_list.lock); 960 960 961 961 sk_for_each(sk, node, &sco_sk_list.head) { 962 - seq_printf(f, "%s %s %d\n", batostr(&bt_sk(sk)->src), 963 - batostr(&bt_sk(sk)->dst), sk->sk_state); 962 + seq_printf(f, "%pMR %pMR %d\n", &bt_sk(sk)->src, 963 + &bt_sk(sk)->dst, sk->sk_state); 964 964 } 965 965 966 966 read_unlock(&sco_sk_list.lock);
+1 -1
net/bluetooth/smp.c
··· 165 165 166 166 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 167 167 lh->len = cpu_to_le16(sizeof(code) + dlen); 168 - lh->cid = cpu_to_le16(L2CAP_CID_SMP); 168 + lh->cid = __constant_cpu_to_le16(L2CAP_CID_SMP); 169 169 170 170 memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code)); 171 171