1 /* 2 BlueZ - Bluetooth protocol stack for Linux 3 Copyright (C) 2000-2001 Qualcomm Incorporated 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 5 Copyright (C) 2010 Google Inc. 6 7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License version 2 as 11 published by the Free Software Foundation; 12 13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 14 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 16 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 17 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 18 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 24 SOFTWARE IS DISCLAIMED. 25 */ 26 27 #ifndef __L2CAP_H 28 #define __L2CAP_H 29 30 #include <asm/unaligned.h> 31 32 /* L2CAP defaults */ 33 #define L2CAP_DEFAULT_MTU 672 34 #define L2CAP_DEFAULT_MIN_MTU 48 35 #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF 36 #define L2CAP_EFS_DEFAULT_FLUSH_TO 0xFFFFFFFF 37 #define L2CAP_DEFAULT_TX_WINDOW 63 38 #define L2CAP_DEFAULT_EXT_WINDOW 0x3FFF 39 #define L2CAP_DEFAULT_MAX_TX 3 40 #define L2CAP_DEFAULT_RETRANS_TO 2000 /* 2 seconds */ 41 #define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */ 42 #define L2CAP_DEFAULT_MAX_PDU_SIZE 1492 /* Sized for AMP packet */ 43 #define L2CAP_DEFAULT_ACK_TO 200 44 #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF 45 #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF 46 #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF 47 #define L2CAP_BREDR_MAX_PAYLOAD 1019 /* 3-DH5 packet */ 48 #define L2CAP_LE_MIN_MTU 23 49 50 #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100) 51 #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000) 52 #define L2CAP_ENC_TIMEOUT msecs_to_jiffies(5000) 53 #define L2CAP_CONN_TIMEOUT msecs_to_jiffies(40000) 54 #define L2CAP_INFO_TIMEOUT msecs_to_jiffies(4000) 55 #define L2CAP_MOVE_TIMEOUT msecs_to_jiffies(4000) 56 #define L2CAP_MOVE_ERTX_TIMEOUT msecs_to_jiffies(60000) 57 58 #define L2CAP_A2MP_DEFAULT_MTU 670 59 60 /* L2CAP socket address */ 61 struct sockaddr_l2 { 62 sa_family_t l2_family; 63 __le16 l2_psm; 64 bdaddr_t l2_bdaddr; 65 __le16 l2_cid; 66 __u8 l2_bdaddr_type; 67 }; 68 69 /* L2CAP socket options */ 70 #define L2CAP_OPTIONS 0x01 71 struct l2cap_options { 72 __u16 omtu; 73 __u16 imtu; 74 __u16 flush_to; 75 __u8 mode; 76 __u8 fcs; 77 __u8 max_tx; 78 __u16 txwin_size; 79 }; 80 81 #define L2CAP_CONNINFO 0x02 82 struct l2cap_conninfo { 83 __u16 hci_handle; 84 __u8 dev_class[3]; 85 }; 86 87 #define L2CAP_LM 0x03 88 #define L2CAP_LM_MASTER 0x0001 89 #define L2CAP_LM_AUTH 0x0002 90 #define L2CAP_LM_ENCRYPT 0x0004 91 #define L2CAP_LM_TRUSTED 0x0008 92 #define L2CAP_LM_RELIABLE 0x0010 93 #define L2CAP_LM_SECURE 0x0020 94 #define L2CAP_LM_FIPS 0x0040 95 96 /* L2CAP command codes */ 97 #define L2CAP_COMMAND_REJ 0x01 98 #define L2CAP_CONN_REQ 0x02 99 #define L2CAP_CONN_RSP 0x03 100 #define L2CAP_CONF_REQ 0x04 101 #define L2CAP_CONF_RSP 0x05 102 #define L2CAP_DISCONN_REQ 0x06 103 #define L2CAP_DISCONN_RSP 0x07 104 #define L2CAP_ECHO_REQ 0x08 105 #define L2CAP_ECHO_RSP 0x09 106 #define L2CAP_INFO_REQ 0x0a 107 #define L2CAP_INFO_RSP 0x0b 108 #define L2CAP_CREATE_CHAN_REQ 0x0c 109 #define L2CAP_CREATE_CHAN_RSP 0x0d 110 #define L2CAP_MOVE_CHAN_REQ 0x0e 111 #define L2CAP_MOVE_CHAN_RSP 0x0f 112 #define L2CAP_MOVE_CHAN_CFM 0x10 113 #define L2CAP_MOVE_CHAN_CFM_RSP 0x11 114 #define L2CAP_CONN_PARAM_UPDATE_REQ 0x12 115 #define L2CAP_CONN_PARAM_UPDATE_RSP 0x13 116 #define L2CAP_LE_CONN_REQ 0x14 117 #define L2CAP_LE_CONN_RSP 0x15 118 #define L2CAP_LE_CREDITS 0x16 119 120 /* L2CAP extended feature mask */ 121 #define L2CAP_FEAT_FLOWCTL 0x00000001 122 #define L2CAP_FEAT_RETRANS 0x00000002 123 #define L2CAP_FEAT_BIDIR_QOS 0x00000004 124 #define L2CAP_FEAT_ERTM 0x00000008 125 #define L2CAP_FEAT_STREAMING 0x00000010 126 #define L2CAP_FEAT_FCS 0x00000020 127 #define L2CAP_FEAT_EXT_FLOW 0x00000040 128 #define L2CAP_FEAT_FIXED_CHAN 0x00000080 129 #define L2CAP_FEAT_EXT_WINDOW 0x00000100 130 #define L2CAP_FEAT_UCD 0x00000200 131 132 /* L2CAP checksum option */ 133 #define L2CAP_FCS_NONE 0x00 134 #define L2CAP_FCS_CRC16 0x01 135 136 /* L2CAP fixed channels */ 137 #define L2CAP_FC_SIG_BREDR 0x02 138 #define L2CAP_FC_CONNLESS 0x04 139 #define L2CAP_FC_A2MP 0x08 140 #define L2CAP_FC_ATT 0x10 141 #define L2CAP_FC_SIG_LE 0x20 142 #define L2CAP_FC_SMP_LE 0x40 143 144 /* L2CAP Control Field bit masks */ 145 #define L2CAP_CTRL_SAR 0xC000 146 #define L2CAP_CTRL_REQSEQ 0x3F00 147 #define L2CAP_CTRL_TXSEQ 0x007E 148 #define L2CAP_CTRL_SUPERVISE 0x000C 149 150 #define L2CAP_CTRL_RETRANS 0x0080 151 #define L2CAP_CTRL_FINAL 0x0080 152 #define L2CAP_CTRL_POLL 0x0010 153 #define L2CAP_CTRL_FRAME_TYPE 0x0001 /* I- or S-Frame */ 154 155 #define L2CAP_CTRL_TXSEQ_SHIFT 1 156 #define L2CAP_CTRL_SUPER_SHIFT 2 157 #define L2CAP_CTRL_POLL_SHIFT 4 158 #define L2CAP_CTRL_FINAL_SHIFT 7 159 #define L2CAP_CTRL_REQSEQ_SHIFT 8 160 #define L2CAP_CTRL_SAR_SHIFT 14 161 162 /* L2CAP Extended Control Field bit mask */ 163 #define L2CAP_EXT_CTRL_TXSEQ 0xFFFC0000 164 #define L2CAP_EXT_CTRL_SAR 0x00030000 165 #define L2CAP_EXT_CTRL_SUPERVISE 0x00030000 166 #define L2CAP_EXT_CTRL_REQSEQ 0x0000FFFC 167 168 #define L2CAP_EXT_CTRL_POLL 0x00040000 169 #define L2CAP_EXT_CTRL_FINAL 0x00000002 170 #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 /* I- or S-Frame */ 171 172 #define L2CAP_EXT_CTRL_FINAL_SHIFT 1 173 #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2 174 #define L2CAP_EXT_CTRL_SAR_SHIFT 16 175 #define L2CAP_EXT_CTRL_SUPER_SHIFT 16 176 #define L2CAP_EXT_CTRL_POLL_SHIFT 18 177 #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18 178 179 /* L2CAP Supervisory Function */ 180 #define L2CAP_SUPER_RR 0x00 181 #define L2CAP_SUPER_REJ 0x01 182 #define L2CAP_SUPER_RNR 0x02 183 #define L2CAP_SUPER_SREJ 0x03 184 185 /* L2CAP Segmentation and Reassembly */ 186 #define L2CAP_SAR_UNSEGMENTED 0x00 187 #define L2CAP_SAR_START 0x01 188 #define L2CAP_SAR_END 0x02 189 #define L2CAP_SAR_CONTINUE 0x03 190 191 /* L2CAP Command rej. reasons */ 192 #define L2CAP_REJ_NOT_UNDERSTOOD 0x0000 193 #define L2CAP_REJ_MTU_EXCEEDED 0x0001 194 #define L2CAP_REJ_INVALID_CID 0x0002 195 196 /* L2CAP structures */ 197 struct l2cap_hdr { 198 __le16 len; 199 __le16 cid; 200 } __packed; 201 #define L2CAP_HDR_SIZE 4 202 #define L2CAP_ENH_HDR_SIZE 6 203 #define L2CAP_EXT_HDR_SIZE 8 204 205 #define L2CAP_FCS_SIZE 2 206 #define L2CAP_SDULEN_SIZE 2 207 #define L2CAP_PSMLEN_SIZE 2 208 #define L2CAP_ENH_CTRL_SIZE 2 209 #define L2CAP_EXT_CTRL_SIZE 4 210 211 struct l2cap_cmd_hdr { 212 __u8 code; 213 __u8 ident; 214 __le16 len; 215 } __packed; 216 #define L2CAP_CMD_HDR_SIZE 4 217 218 struct l2cap_cmd_rej_unk { 219 __le16 reason; 220 } __packed; 221 222 struct l2cap_cmd_rej_mtu { 223 __le16 reason; 224 __le16 max_mtu; 225 } __packed; 226 227 struct l2cap_cmd_rej_cid { 228 __le16 reason; 229 __le16 scid; 230 __le16 dcid; 231 } __packed; 232 233 struct l2cap_conn_req { 234 __le16 psm; 235 __le16 scid; 236 } __packed; 237 238 struct l2cap_conn_rsp { 239 __le16 dcid; 240 __le16 scid; 241 __le16 result; 242 __le16 status; 243 } __packed; 244 245 /* protocol/service multiplexer (PSM) */ 246 #define L2CAP_PSM_SDP 0x0001 247 #define L2CAP_PSM_RFCOMM 0x0003 248 #define L2CAP_PSM_3DSP 0x0021 249 250 /* channel identifier */ 251 #define L2CAP_CID_SIGNALING 0x0001 252 #define L2CAP_CID_CONN_LESS 0x0002 253 #define L2CAP_CID_A2MP 0x0003 254 #define L2CAP_CID_ATT 0x0004 255 #define L2CAP_CID_LE_SIGNALING 0x0005 256 #define L2CAP_CID_SMP 0x0006 257 #define L2CAP_CID_DYN_START 0x0040 258 #define L2CAP_CID_DYN_END 0xffff 259 #define L2CAP_CID_LE_DYN_END 0x007f 260 261 /* connect/create channel results */ 262 #define L2CAP_CR_SUCCESS 0x0000 263 #define L2CAP_CR_PEND 0x0001 264 #define L2CAP_CR_BAD_PSM 0x0002 265 #define L2CAP_CR_SEC_BLOCK 0x0003 266 #define L2CAP_CR_NO_MEM 0x0004 267 #define L2CAP_CR_BAD_AMP 0x0005 268 #define L2CAP_CR_AUTHENTICATION 0x0005 269 #define L2CAP_CR_AUTHORIZATION 0x0006 270 #define L2CAP_CR_BAD_KEY_SIZE 0x0007 271 #define L2CAP_CR_ENCRYPTION 0x0008 272 273 /* connect/create channel status */ 274 #define L2CAP_CS_NO_INFO 0x0000 275 #define L2CAP_CS_AUTHEN_PEND 0x0001 276 #define L2CAP_CS_AUTHOR_PEND 0x0002 277 278 struct l2cap_conf_req { 279 __le16 dcid; 280 __le16 flags; 281 __u8 data[0]; 282 } __packed; 283 284 struct l2cap_conf_rsp { 285 __le16 scid; 286 __le16 flags; 287 __le16 result; 288 __u8 data[0]; 289 } __packed; 290 291 #define L2CAP_CONF_SUCCESS 0x0000 292 #define L2CAP_CONF_UNACCEPT 0x0001 293 #define L2CAP_CONF_REJECT 0x0002 294 #define L2CAP_CONF_UNKNOWN 0x0003 295 #define L2CAP_CONF_PENDING 0x0004 296 #define L2CAP_CONF_EFS_REJECT 0x0005 297 298 /* configuration req/rsp continuation flag */ 299 #define L2CAP_CONF_FLAG_CONTINUATION 0x0001 300 301 struct l2cap_conf_opt { 302 __u8 type; 303 __u8 len; 304 __u8 val[0]; 305 } __packed; 306 #define L2CAP_CONF_OPT_SIZE 2 307 308 #define L2CAP_CONF_HINT 0x80 309 #define L2CAP_CONF_MASK 0x7f 310 311 #define L2CAP_CONF_MTU 0x01 312 #define L2CAP_CONF_FLUSH_TO 0x02 313 #define L2CAP_CONF_QOS 0x03 314 #define L2CAP_CONF_RFC 0x04 315 #define L2CAP_CONF_FCS 0x05 316 #define L2CAP_CONF_EFS 0x06 317 #define L2CAP_CONF_EWS 0x07 318 319 #define L2CAP_CONF_MAX_SIZE 22 320 321 struct l2cap_conf_rfc { 322 __u8 mode; 323 __u8 txwin_size; 324 __u8 max_transmit; 325 __le16 retrans_timeout; 326 __le16 monitor_timeout; 327 __le16 max_pdu_size; 328 } __packed; 329 330 #define L2CAP_MODE_BASIC 0x00 331 #define L2CAP_MODE_RETRANS 0x01 332 #define L2CAP_MODE_FLOWCTL 0x02 333 #define L2CAP_MODE_ERTM 0x03 334 #define L2CAP_MODE_STREAMING 0x04 335 336 /* Unlike the above this one doesn't actually map to anything that would 337 * ever be sent over the air. Therefore, use a value that's unlikely to 338 * ever be used in the BR/EDR configuration phase. 339 */ 340 #define L2CAP_MODE_LE_FLOWCTL 0x80 341 342 struct l2cap_conf_efs { 343 __u8 id; 344 __u8 stype; 345 __le16 msdu; 346 __le32 sdu_itime; 347 __le32 acc_lat; 348 __le32 flush_to; 349 } __packed; 350 351 #define L2CAP_SERV_NOTRAFIC 0x00 352 #define L2CAP_SERV_BESTEFFORT 0x01 353 #define L2CAP_SERV_GUARANTEED 0x02 354 355 #define L2CAP_BESTEFFORT_ID 0x01 356 357 struct l2cap_disconn_req { 358 __le16 dcid; 359 __le16 scid; 360 } __packed; 361 362 struct l2cap_disconn_rsp { 363 __le16 dcid; 364 __le16 scid; 365 } __packed; 366 367 struct l2cap_info_req { 368 __le16 type; 369 } __packed; 370 371 struct l2cap_info_rsp { 372 __le16 type; 373 __le16 result; 374 __u8 data[0]; 375 } __packed; 376 377 struct l2cap_create_chan_req { 378 __le16 psm; 379 __le16 scid; 380 __u8 amp_id; 381 } __packed; 382 383 struct l2cap_create_chan_rsp { 384 __le16 dcid; 385 __le16 scid; 386 __le16 result; 387 __le16 status; 388 } __packed; 389 390 struct l2cap_move_chan_req { 391 __le16 icid; 392 __u8 dest_amp_id; 393 } __packed; 394 395 struct l2cap_move_chan_rsp { 396 __le16 icid; 397 __le16 result; 398 } __packed; 399 400 #define L2CAP_MR_SUCCESS 0x0000 401 #define L2CAP_MR_PEND 0x0001 402 #define L2CAP_MR_BAD_ID 0x0002 403 #define L2CAP_MR_SAME_ID 0x0003 404 #define L2CAP_MR_NOT_SUPP 0x0004 405 #define L2CAP_MR_COLLISION 0x0005 406 #define L2CAP_MR_NOT_ALLOWED 0x0006 407 408 struct l2cap_move_chan_cfm { 409 __le16 icid; 410 __le16 result; 411 } __packed; 412 413 #define L2CAP_MC_CONFIRMED 0x0000 414 #define L2CAP_MC_UNCONFIRMED 0x0001 415 416 struct l2cap_move_chan_cfm_rsp { 417 __le16 icid; 418 } __packed; 419 420 /* info type */ 421 #define L2CAP_IT_CL_MTU 0x0001 422 #define L2CAP_IT_FEAT_MASK 0x0002 423 #define L2CAP_IT_FIXED_CHAN 0x0003 424 425 /* info result */ 426 #define L2CAP_IR_SUCCESS 0x0000 427 #define L2CAP_IR_NOTSUPP 0x0001 428 429 struct l2cap_conn_param_update_req { 430 __le16 min; 431 __le16 max; 432 __le16 latency; 433 __le16 to_multiplier; 434 } __packed; 435 436 struct l2cap_conn_param_update_rsp { 437 __le16 result; 438 } __packed; 439 440 /* Connection Parameters result */ 441 #define L2CAP_CONN_PARAM_ACCEPTED 0x0000 442 #define L2CAP_CONN_PARAM_REJECTED 0x0001 443 444 #define L2CAP_LE_MAX_CREDITS 10 445 #define L2CAP_LE_DEFAULT_MPS 230 446 447 struct l2cap_le_conn_req { 448 __le16 psm; 449 __le16 scid; 450 __le16 mtu; 451 __le16 mps; 452 __le16 credits; 453 } __packed; 454 455 struct l2cap_le_conn_rsp { 456 __le16 dcid; 457 __le16 mtu; 458 __le16 mps; 459 __le16 credits; 460 __le16 result; 461 } __packed; 462 463 struct l2cap_le_credits { 464 __le16 cid; 465 __le16 credits; 466 } __packed; 467 468 /* ----- L2CAP channels and connections ----- */ 469 struct l2cap_seq_list { 470 __u16 head; 471 __u16 tail; 472 __u16 mask; 473 __u16 *list; 474 }; 475 476 #define L2CAP_SEQ_LIST_CLEAR 0xFFFF 477 #define L2CAP_SEQ_LIST_TAIL 0x8000 478 479 struct l2cap_chan { 480 struct l2cap_conn *conn; 481 struct hci_conn *hs_hcon; 482 struct hci_chan *hs_hchan; 483 struct kref kref; 484 485 __u8 state; 486 487 bdaddr_t dst; 488 __u8 dst_type; 489 bdaddr_t src; 490 __u8 src_type; 491 __le16 psm; 492 __le16 sport; 493 __u16 dcid; 494 __u16 scid; 495 496 __u16 imtu; 497 __u16 omtu; 498 __u16 flush_to; 499 __u8 mode; 500 __u8 chan_type; 501 __u8 chan_policy; 502 503 __u8 sec_level; 504 505 __u8 ident; 506 507 __u8 conf_req[64]; 508 __u8 conf_len; 509 __u8 num_conf_req; 510 __u8 num_conf_rsp; 511 512 __u8 fcs; 513 514 __u16 tx_win; 515 __u16 tx_win_max; 516 __u16 ack_win; 517 __u8 max_tx; 518 __u16 retrans_timeout; 519 __u16 monitor_timeout; 520 __u16 mps; 521 522 __u16 tx_credits; 523 __u16 rx_credits; 524 525 __u8 tx_state; 526 __u8 rx_state; 527 528 unsigned long conf_state; 529 unsigned long conn_state; 530 unsigned long flags; 531 532 __u8 remote_amp_id; 533 __u8 local_amp_id; 534 __u8 move_id; 535 __u8 move_state; 536 __u8 move_role; 537 538 __u16 next_tx_seq; 539 __u16 expected_ack_seq; 540 __u16 expected_tx_seq; 541 __u16 buffer_seq; 542 __u16 srej_save_reqseq; 543 __u16 last_acked_seq; 544 __u16 frames_sent; 545 __u16 unacked_frames; 546 __u8 retry_count; 547 __u16 sdu_len; 548 struct sk_buff *sdu; 549 struct sk_buff *sdu_last_frag; 550 551 __u16 remote_tx_win; 552 __u8 remote_max_tx; 553 __u16 remote_mps; 554 555 __u8 local_id; 556 __u8 local_stype; 557 __u16 local_msdu; 558 __u32 local_sdu_itime; 559 __u32 local_acc_lat; 560 __u32 local_flush_to; 561 562 __u8 remote_id; 563 __u8 remote_stype; 564 __u16 remote_msdu; 565 __u32 remote_sdu_itime; 566 __u32 remote_acc_lat; 567 __u32 remote_flush_to; 568 569 struct delayed_work chan_timer; 570 struct delayed_work retrans_timer; 571 struct delayed_work monitor_timer; 572 struct delayed_work ack_timer; 573 574 struct sk_buff *tx_send_head; 575 struct sk_buff_head tx_q; 576 struct sk_buff_head srej_q; 577 struct l2cap_seq_list srej_list; 578 struct l2cap_seq_list retrans_list; 579 580 struct list_head list; 581 struct list_head global_l; 582 583 void *data; 584 const struct l2cap_ops *ops; 585 struct mutex lock; 586 }; 587 588 struct l2cap_ops { 589 char *name; 590 591 struct l2cap_chan *(*new_connection) (struct l2cap_chan *chan); 592 int (*recv) (struct l2cap_chan * chan, 593 struct sk_buff *skb); 594 void (*teardown) (struct l2cap_chan *chan, int err); 595 void (*close) (struct l2cap_chan *chan); 596 void (*state_change) (struct l2cap_chan *chan, 597 int state, int err); 598 void (*ready) (struct l2cap_chan *chan); 599 void (*defer) (struct l2cap_chan *chan); 600 void (*resume) (struct l2cap_chan *chan); 601 void (*suspend) (struct l2cap_chan *chan); 602 void (*set_shutdown) (struct l2cap_chan *chan); 603 long (*get_sndtimeo) (struct l2cap_chan *chan); 604 struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, 605 unsigned long hdr_len, 606 unsigned long len, int nb); 607 int (*memcpy_fromiovec) (struct l2cap_chan *chan, 608 unsigned char *kdata, 609 struct iovec *iov, 610 int len); 611 }; 612 613 struct l2cap_conn { 614 struct hci_conn *hcon; 615 struct hci_chan *hchan; 616 617 unsigned int mtu; 618 619 __u32 feat_mask; 620 __u8 fixed_chan_mask; 621 bool hs_enabled; 622 623 __u8 info_state; 624 __u8 info_ident; 625 626 struct delayed_work info_timer; 627 628 struct sk_buff *rx_skb; 629 __u32 rx_len; 630 __u8 tx_ident; 631 struct mutex ident_lock; 632 633 struct sk_buff_head pending_rx; 634 struct work_struct pending_rx_work; 635 636 __u8 disc_reason; 637 638 struct delayed_work security_timer; 639 struct smp_chan *smp_chan; 640 641 struct list_head chan_l; 642 struct mutex chan_lock; 643 struct kref ref; 644 struct list_head users; 645 }; 646 647 struct l2cap_user { 648 struct list_head list; 649 int (*probe) (struct l2cap_conn *conn, struct l2cap_user *user); 650 void (*remove) (struct l2cap_conn *conn, struct l2cap_user *user); 651 }; 652 653 #define L2CAP_INFO_CL_MTU_REQ_SENT 0x01 654 #define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x04 655 #define L2CAP_INFO_FEAT_MASK_REQ_DONE 0x08 656 657 #define L2CAP_CHAN_RAW 1 658 #define L2CAP_CHAN_CONN_LESS 2 659 #define L2CAP_CHAN_CONN_ORIENTED 3 660 #define L2CAP_CHAN_FIXED 4 661 662 /* ----- L2CAP socket info ----- */ 663 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) 664 665 struct l2cap_pinfo { 666 struct bt_sock bt; 667 struct l2cap_chan *chan; 668 struct sk_buff *rx_busy_skb; 669 }; 670 671 enum { 672 CONF_REQ_SENT, 673 CONF_INPUT_DONE, 674 CONF_OUTPUT_DONE, 675 CONF_MTU_DONE, 676 CONF_MODE_DONE, 677 CONF_CONNECT_PEND, 678 CONF_RECV_NO_FCS, 679 CONF_STATE2_DEVICE, 680 CONF_EWS_RECV, 681 CONF_LOC_CONF_PEND, 682 CONF_REM_CONF_PEND, 683 CONF_NOT_COMPLETE, 684 }; 685 686 #define L2CAP_CONF_MAX_CONF_REQ 2 687 #define L2CAP_CONF_MAX_CONF_RSP 2 688 689 enum { 690 CONN_SREJ_SENT, 691 CONN_WAIT_F, 692 CONN_SREJ_ACT, 693 CONN_SEND_PBIT, 694 CONN_REMOTE_BUSY, 695 CONN_LOCAL_BUSY, 696 CONN_REJ_ACT, 697 CONN_SEND_FBIT, 698 CONN_RNR_SENT, 699 }; 700 701 /* Definitions for flags in l2cap_chan */ 702 enum { 703 FLAG_ROLE_SWITCH, 704 FLAG_FORCE_ACTIVE, 705 FLAG_FORCE_RELIABLE, 706 FLAG_FLUSHABLE, 707 FLAG_EXT_CTRL, 708 FLAG_EFS_ENABLE, 709 FLAG_DEFER_SETUP, 710 FLAG_LE_CONN_REQ_SENT, 711 }; 712 713 enum { 714 L2CAP_TX_STATE_XMIT, 715 L2CAP_TX_STATE_WAIT_F, 716 }; 717 718 enum { 719 L2CAP_RX_STATE_RECV, 720 L2CAP_RX_STATE_SREJ_SENT, 721 L2CAP_RX_STATE_MOVE, 722 L2CAP_RX_STATE_WAIT_P, 723 L2CAP_RX_STATE_WAIT_F, 724 }; 725 726 enum { 727 L2CAP_TXSEQ_EXPECTED, 728 L2CAP_TXSEQ_EXPECTED_SREJ, 729 L2CAP_TXSEQ_UNEXPECTED, 730 L2CAP_TXSEQ_UNEXPECTED_SREJ, 731 L2CAP_TXSEQ_DUPLICATE, 732 L2CAP_TXSEQ_DUPLICATE_SREJ, 733 L2CAP_TXSEQ_INVALID, 734 L2CAP_TXSEQ_INVALID_IGNORE, 735 }; 736 737 enum { 738 L2CAP_EV_DATA_REQUEST, 739 L2CAP_EV_LOCAL_BUSY_DETECTED, 740 L2CAP_EV_LOCAL_BUSY_CLEAR, 741 L2CAP_EV_RECV_REQSEQ_AND_FBIT, 742 L2CAP_EV_RECV_FBIT, 743 L2CAP_EV_RETRANS_TO, 744 L2CAP_EV_MONITOR_TO, 745 L2CAP_EV_EXPLICIT_POLL, 746 L2CAP_EV_RECV_IFRAME, 747 L2CAP_EV_RECV_RR, 748 L2CAP_EV_RECV_REJ, 749 L2CAP_EV_RECV_RNR, 750 L2CAP_EV_RECV_SREJ, 751 L2CAP_EV_RECV_FRAME, 752 }; 753 754 enum { 755 L2CAP_MOVE_ROLE_NONE, 756 L2CAP_MOVE_ROLE_INITIATOR, 757 L2CAP_MOVE_ROLE_RESPONDER, 758 }; 759 760 enum { 761 L2CAP_MOVE_STABLE, 762 L2CAP_MOVE_WAIT_REQ, 763 L2CAP_MOVE_WAIT_RSP, 764 L2CAP_MOVE_WAIT_RSP_SUCCESS, 765 L2CAP_MOVE_WAIT_CONFIRM, 766 L2CAP_MOVE_WAIT_CONFIRM_RSP, 767 L2CAP_MOVE_WAIT_LOGICAL_COMP, 768 L2CAP_MOVE_WAIT_LOGICAL_CFM, 769 L2CAP_MOVE_WAIT_LOCAL_BUSY, 770 L2CAP_MOVE_WAIT_PREPARE, 771 }; 772 773 void l2cap_chan_hold(struct l2cap_chan *c); 774 void l2cap_chan_put(struct l2cap_chan *c); 775 776 static inline void l2cap_chan_lock(struct l2cap_chan *chan) 777 { 778 mutex_lock(&chan->lock); 779 } 780 781 static inline void l2cap_chan_unlock(struct l2cap_chan *chan) 782 { 783 mutex_unlock(&chan->lock); 784 } 785 786 static inline void l2cap_set_timer(struct l2cap_chan *chan, 787 struct delayed_work *work, long timeout) 788 { 789 BT_DBG("chan %p state %s timeout %ld", chan, 790 state_to_string(chan->state), timeout); 791 792 /* If delayed work cancelled do not hold(chan) 793 since it is already done with previous set_timer */ 794 if (!cancel_delayed_work(work)) 795 l2cap_chan_hold(chan); 796 797 schedule_delayed_work(work, timeout); 798 } 799 800 static inline bool l2cap_clear_timer(struct l2cap_chan *chan, 801 struct delayed_work *work) 802 { 803 bool ret; 804 805 /* put(chan) if delayed work cancelled otherwise it 806 is done in delayed work function */ 807 ret = cancel_delayed_work(work); 808 if (ret) 809 l2cap_chan_put(chan); 810 811 return ret; 812 } 813 814 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t)) 815 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer) 816 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer) 817 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer) 818 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \ 819 msecs_to_jiffies(L2CAP_DEFAULT_ACK_TO)); 820 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer) 821 822 static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2) 823 { 824 if (seq1 >= seq2) 825 return seq1 - seq2; 826 else 827 return chan->tx_win_max + 1 - seq2 + seq1; 828 } 829 830 static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq) 831 { 832 return (seq + 1) % (chan->tx_win_max + 1); 833 } 834 835 static inline struct l2cap_chan *l2cap_chan_no_new_connection(struct l2cap_chan *chan) 836 { 837 return NULL; 838 } 839 840 static inline void l2cap_chan_no_teardown(struct l2cap_chan *chan, int err) 841 { 842 } 843 844 static inline void l2cap_chan_no_ready(struct l2cap_chan *chan) 845 { 846 } 847 848 static inline void l2cap_chan_no_defer(struct l2cap_chan *chan) 849 { 850 } 851 852 static inline void l2cap_chan_no_resume(struct l2cap_chan *chan) 853 { 854 } 855 856 static inline void l2cap_chan_no_set_shutdown(struct l2cap_chan *chan) 857 { 858 } 859 860 static inline long l2cap_chan_no_get_sndtimeo(struct l2cap_chan *chan) 861 { 862 return 0; 863 } 864 865 static inline int l2cap_chan_no_memcpy_fromiovec(struct l2cap_chan *chan, 866 unsigned char *kdata, 867 struct iovec *iov, 868 int len) 869 { 870 /* Following is safe since for compiler definitions of kvec and 871 * iovec are identical, yielding the same in-core layout and alignment 872 */ 873 struct kvec *vec = (struct kvec *)iov; 874 875 while (len > 0) { 876 if (vec->iov_len) { 877 int copy = min_t(unsigned int, len, vec->iov_len); 878 memcpy(kdata, vec->iov_base, copy); 879 len -= copy; 880 kdata += copy; 881 vec->iov_base += copy; 882 vec->iov_len -= copy; 883 } 884 vec++; 885 } 886 887 return 0; 888 } 889 890 extern bool disable_ertm; 891 892 int l2cap_init_sockets(void); 893 void l2cap_cleanup_sockets(void); 894 bool l2cap_is_socket(struct socket *sock); 895 896 void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan); 897 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan); 898 899 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm); 900 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid); 901 902 struct l2cap_chan *l2cap_chan_create(void); 903 void l2cap_chan_close(struct l2cap_chan *chan, int reason); 904 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, 905 bdaddr_t *dst, u8 dst_type); 906 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len); 907 void l2cap_chan_busy(struct l2cap_chan *chan, int busy); 908 int l2cap_chan_check_security(struct l2cap_chan *chan, bool initiator); 909 void l2cap_chan_set_defaults(struct l2cap_chan *chan); 910 int l2cap_ertm_init(struct l2cap_chan *chan); 911 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan); 912 void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan); 913 void l2cap_chan_del(struct l2cap_chan *chan, int err); 914 void l2cap_conn_update_id_addr(struct hci_conn *hcon); 915 void l2cap_send_conn_req(struct l2cap_chan *chan); 916 void l2cap_move_start(struct l2cap_chan *chan); 917 void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan, 918 u8 status); 919 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result); 920 921 void l2cap_conn_get(struct l2cap_conn *conn); 922 void l2cap_conn_put(struct l2cap_conn *conn); 923 924 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user); 925 void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user); 926 927 #endif /* __L2CAP_H */ 928