1 /* 2 BlueZ - Bluetooth protocol stack for Linux 3 Copyright (C) 2000-2001 Qualcomm Incorporated 4 5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License version 2 as 9 published by the Free Software Foundation; 10 11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19 20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 22 SOFTWARE IS DISCLAIMED. 23 */ 24 25 #ifndef __HCI_H 26 #define __HCI_H 27 28 #define HCI_MAX_ACL_SIZE 1024 29 #define HCI_MAX_SCO_SIZE 255 30 #define HCI_MAX_EVENT_SIZE 260 31 #define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4) 32 33 /* HCI dev events */ 34 #define HCI_DEV_REG 1 35 #define HCI_DEV_UNREG 2 36 #define HCI_DEV_UP 3 37 #define HCI_DEV_DOWN 4 38 #define HCI_DEV_SUSPEND 5 39 #define HCI_DEV_RESUME 6 40 41 /* HCI notify events */ 42 #define HCI_NOTIFY_CONN_ADD 1 43 #define HCI_NOTIFY_CONN_DEL 2 44 #define HCI_NOTIFY_VOICE_SETTING 3 45 46 /* HCI bus types */ 47 #define HCI_VIRTUAL 0 48 #define HCI_USB 1 49 #define HCI_PCCARD 2 50 #define HCI_UART 3 51 #define HCI_RS232 4 52 #define HCI_PCI 5 53 #define HCI_SDIO 6 54 55 /* HCI controller types */ 56 #define HCI_BREDR 0x00 57 #define HCI_AMP 0x01 58 59 /* HCI device quirks */ 60 enum { 61 HCI_QUIRK_NO_RESET, 62 HCI_QUIRK_RAW_DEVICE, 63 HCI_QUIRK_FIXUP_BUFFER_SIZE 64 }; 65 66 /* HCI device flags */ 67 enum { 68 HCI_UP, 69 HCI_INIT, 70 HCI_RUNNING, 71 72 HCI_PSCAN, 73 HCI_ISCAN, 74 HCI_AUTH, 75 HCI_ENCRYPT, 76 HCI_INQUIRY, 77 78 HCI_RAW, 79 80 HCI_SETUP, 81 HCI_AUTO_OFF, 82 HCI_MGMT, 83 HCI_PAIRABLE, 84 }; 85 86 /* HCI ioctl defines */ 87 #define HCIDEVUP _IOW('H', 201, int) 88 #define HCIDEVDOWN _IOW('H', 202, int) 89 #define HCIDEVRESET _IOW('H', 203, int) 90 #define HCIDEVRESTAT _IOW('H', 204, int) 91 92 #define HCIGETDEVLIST _IOR('H', 210, int) 93 #define HCIGETDEVINFO _IOR('H', 211, int) 94 #define HCIGETCONNLIST _IOR('H', 212, int) 95 #define HCIGETCONNINFO _IOR('H', 213, int) 96 #define HCIGETAUTHINFO _IOR('H', 215, int) 97 98 #define HCISETRAW _IOW('H', 220, int) 99 #define HCISETSCAN _IOW('H', 221, int) 100 #define HCISETAUTH _IOW('H', 222, int) 101 #define HCISETENCRYPT _IOW('H', 223, int) 102 #define HCISETPTYPE _IOW('H', 224, int) 103 #define HCISETLINKPOL _IOW('H', 225, int) 104 #define HCISETLINKMODE _IOW('H', 226, int) 105 #define HCISETACLMTU _IOW('H', 227, int) 106 #define HCISETSCOMTU _IOW('H', 228, int) 107 108 #define HCIBLOCKADDR _IOW('H', 230, int) 109 #define HCIUNBLOCKADDR _IOW('H', 231, int) 110 111 #define HCIINQUIRY _IOR('H', 240, int) 112 113 /* HCI timeouts */ 114 #define HCI_CONNECT_TIMEOUT (40000) /* 40 seconds */ 115 #define HCI_DISCONN_TIMEOUT (2000) /* 2 seconds */ 116 #define HCI_PAIRING_TIMEOUT (60000) /* 60 seconds */ 117 #define HCI_IDLE_TIMEOUT (6000) /* 6 seconds */ 118 #define HCI_INIT_TIMEOUT (10000) /* 10 seconds */ 119 120 /* HCI data types */ 121 #define HCI_COMMAND_PKT 0x01 122 #define HCI_ACLDATA_PKT 0x02 123 #define HCI_SCODATA_PKT 0x03 124 #define HCI_EVENT_PKT 0x04 125 #define HCI_VENDOR_PKT 0xff 126 127 /* HCI packet types */ 128 #define HCI_DM1 0x0008 129 #define HCI_DM3 0x0400 130 #define HCI_DM5 0x4000 131 #define HCI_DH1 0x0010 132 #define HCI_DH3 0x0800 133 #define HCI_DH5 0x8000 134 135 #define HCI_HV1 0x0020 136 #define HCI_HV2 0x0040 137 #define HCI_HV3 0x0080 138 139 #define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3) 140 #define ACL_PTYPE_MASK (~SCO_PTYPE_MASK) 141 142 /* eSCO packet types */ 143 #define ESCO_HV1 0x0001 144 #define ESCO_HV2 0x0002 145 #define ESCO_HV3 0x0004 146 #define ESCO_EV3 0x0008 147 #define ESCO_EV4 0x0010 148 #define ESCO_EV5 0x0020 149 #define ESCO_2EV3 0x0040 150 #define ESCO_3EV3 0x0080 151 #define ESCO_2EV5 0x0100 152 #define ESCO_3EV5 0x0200 153 154 #define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3) 155 #define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5) 156 157 /* ACL flags */ 158 #define ACL_START_NO_FLUSH 0x00 159 #define ACL_CONT 0x01 160 #define ACL_START 0x02 161 #define ACL_ACTIVE_BCAST 0x04 162 #define ACL_PICO_BCAST 0x08 163 164 /* Baseband links */ 165 #define SCO_LINK 0x00 166 #define ACL_LINK 0x01 167 #define ESCO_LINK 0x02 168 169 /* LMP features */ 170 #define LMP_3SLOT 0x01 171 #define LMP_5SLOT 0x02 172 #define LMP_ENCRYPT 0x04 173 #define LMP_SOFFSET 0x08 174 #define LMP_TACCURACY 0x10 175 #define LMP_RSWITCH 0x20 176 #define LMP_HOLD 0x40 177 #define LMP_SNIFF 0x80 178 179 #define LMP_PARK 0x01 180 #define LMP_RSSI 0x02 181 #define LMP_QUALITY 0x04 182 #define LMP_SCO 0x08 183 #define LMP_HV2 0x10 184 #define LMP_HV3 0x20 185 #define LMP_ULAW 0x40 186 #define LMP_ALAW 0x80 187 188 #define LMP_CVSD 0x01 189 #define LMP_PSCHEME 0x02 190 #define LMP_PCONTROL 0x04 191 192 #define LMP_ESCO 0x80 193 194 #define LMP_EV4 0x01 195 #define LMP_EV5 0x02 196 197 #define LMP_SNIFF_SUBR 0x02 198 #define LMP_EDR_ESCO_2M 0x20 199 #define LMP_EDR_ESCO_3M 0x40 200 #define LMP_EDR_3S_ESCO 0x80 201 202 #define LMP_SIMPLE_PAIR 0x08 203 #define LMP_NO_FLUSH 0x40 204 205 /* Connection modes */ 206 #define HCI_CM_ACTIVE 0x0000 207 #define HCI_CM_HOLD 0x0001 208 #define HCI_CM_SNIFF 0x0002 209 #define HCI_CM_PARK 0x0003 210 211 /* Link policies */ 212 #define HCI_LP_RSWITCH 0x0001 213 #define HCI_LP_HOLD 0x0002 214 #define HCI_LP_SNIFF 0x0004 215 #define HCI_LP_PARK 0x0008 216 217 /* Link modes */ 218 #define HCI_LM_ACCEPT 0x8000 219 #define HCI_LM_MASTER 0x0001 220 #define HCI_LM_AUTH 0x0002 221 #define HCI_LM_ENCRYPT 0x0004 222 #define HCI_LM_TRUSTED 0x0008 223 #define HCI_LM_RELIABLE 0x0010 224 #define HCI_LM_SECURE 0x0020 225 226 /* Authentication types */ 227 #define HCI_AT_NO_BONDING 0x00 228 #define HCI_AT_NO_BONDING_MITM 0x01 229 #define HCI_AT_DEDICATED_BONDING 0x02 230 #define HCI_AT_DEDICATED_BONDING_MITM 0x03 231 #define HCI_AT_GENERAL_BONDING 0x04 232 #define HCI_AT_GENERAL_BONDING_MITM 0x05 233 234 /* ----- HCI Commands ---- */ 235 #define HCI_OP_INQUIRY 0x0401 236 struct hci_cp_inquiry { 237 __u8 lap[3]; 238 __u8 length; 239 __u8 num_rsp; 240 } __packed; 241 242 #define HCI_OP_INQUIRY_CANCEL 0x0402 243 244 #define HCI_OP_EXIT_PERIODIC_INQ 0x0404 245 246 #define HCI_OP_CREATE_CONN 0x0405 247 struct hci_cp_create_conn { 248 bdaddr_t bdaddr; 249 __le16 pkt_type; 250 __u8 pscan_rep_mode; 251 __u8 pscan_mode; 252 __le16 clock_offset; 253 __u8 role_switch; 254 } __packed; 255 256 #define HCI_OP_DISCONNECT 0x0406 257 struct hci_cp_disconnect { 258 __le16 handle; 259 __u8 reason; 260 } __packed; 261 262 #define HCI_OP_ADD_SCO 0x0407 263 struct hci_cp_add_sco { 264 __le16 handle; 265 __le16 pkt_type; 266 } __packed; 267 268 #define HCI_OP_CREATE_CONN_CANCEL 0x0408 269 struct hci_cp_create_conn_cancel { 270 bdaddr_t bdaddr; 271 } __packed; 272 273 #define HCI_OP_ACCEPT_CONN_REQ 0x0409 274 struct hci_cp_accept_conn_req { 275 bdaddr_t bdaddr; 276 __u8 role; 277 } __packed; 278 279 #define HCI_OP_REJECT_CONN_REQ 0x040a 280 struct hci_cp_reject_conn_req { 281 bdaddr_t bdaddr; 282 __u8 reason; 283 } __packed; 284 285 #define HCI_OP_LINK_KEY_REPLY 0x040b 286 struct hci_cp_link_key_reply { 287 bdaddr_t bdaddr; 288 __u8 link_key[16]; 289 } __packed; 290 291 #define HCI_OP_LINK_KEY_NEG_REPLY 0x040c 292 struct hci_cp_link_key_neg_reply { 293 bdaddr_t bdaddr; 294 } __packed; 295 296 #define HCI_OP_PIN_CODE_REPLY 0x040d 297 struct hci_cp_pin_code_reply { 298 bdaddr_t bdaddr; 299 __u8 pin_len; 300 __u8 pin_code[16]; 301 } __packed; 302 303 #define HCI_OP_PIN_CODE_NEG_REPLY 0x040e 304 struct hci_cp_pin_code_neg_reply { 305 bdaddr_t bdaddr; 306 } __packed; 307 308 #define HCI_OP_CHANGE_CONN_PTYPE 0x040f 309 struct hci_cp_change_conn_ptype { 310 __le16 handle; 311 __le16 pkt_type; 312 } __packed; 313 314 #define HCI_OP_AUTH_REQUESTED 0x0411 315 struct hci_cp_auth_requested { 316 __le16 handle; 317 } __packed; 318 319 #define HCI_OP_SET_CONN_ENCRYPT 0x0413 320 struct hci_cp_set_conn_encrypt { 321 __le16 handle; 322 __u8 encrypt; 323 } __packed; 324 325 #define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415 326 struct hci_cp_change_conn_link_key { 327 __le16 handle; 328 } __packed; 329 330 #define HCI_OP_REMOTE_NAME_REQ 0x0419 331 struct hci_cp_remote_name_req { 332 bdaddr_t bdaddr; 333 __u8 pscan_rep_mode; 334 __u8 pscan_mode; 335 __le16 clock_offset; 336 } __packed; 337 338 #define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a 339 struct hci_cp_remote_name_req_cancel { 340 bdaddr_t bdaddr; 341 } __packed; 342 343 #define HCI_OP_READ_REMOTE_FEATURES 0x041b 344 struct hci_cp_read_remote_features { 345 __le16 handle; 346 } __packed; 347 348 #define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c 349 struct hci_cp_read_remote_ext_features { 350 __le16 handle; 351 __u8 page; 352 } __packed; 353 354 #define HCI_OP_READ_REMOTE_VERSION 0x041d 355 struct hci_cp_read_remote_version { 356 __le16 handle; 357 } __packed; 358 359 #define HCI_OP_SETUP_SYNC_CONN 0x0428 360 struct hci_cp_setup_sync_conn { 361 __le16 handle; 362 __le32 tx_bandwidth; 363 __le32 rx_bandwidth; 364 __le16 max_latency; 365 __le16 voice_setting; 366 __u8 retrans_effort; 367 __le16 pkt_type; 368 } __packed; 369 370 #define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429 371 struct hci_cp_accept_sync_conn_req { 372 bdaddr_t bdaddr; 373 __le32 tx_bandwidth; 374 __le32 rx_bandwidth; 375 __le16 max_latency; 376 __le16 content_format; 377 __u8 retrans_effort; 378 __le16 pkt_type; 379 } __packed; 380 381 #define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a 382 struct hci_cp_reject_sync_conn_req { 383 bdaddr_t bdaddr; 384 __u8 reason; 385 } __packed; 386 387 #define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434 388 struct hci_cp_io_capability_neg_reply { 389 bdaddr_t bdaddr; 390 __u8 reason; 391 } __packed; 392 393 #define HCI_OP_SNIFF_MODE 0x0803 394 struct hci_cp_sniff_mode { 395 __le16 handle; 396 __le16 max_interval; 397 __le16 min_interval; 398 __le16 attempt; 399 __le16 timeout; 400 } __packed; 401 402 #define HCI_OP_EXIT_SNIFF_MODE 0x0804 403 struct hci_cp_exit_sniff_mode { 404 __le16 handle; 405 } __packed; 406 407 #define HCI_OP_ROLE_DISCOVERY 0x0809 408 struct hci_cp_role_discovery { 409 __le16 handle; 410 } __packed; 411 struct hci_rp_role_discovery { 412 __u8 status; 413 __le16 handle; 414 __u8 role; 415 } __packed; 416 417 #define HCI_OP_SWITCH_ROLE 0x080b 418 struct hci_cp_switch_role { 419 bdaddr_t bdaddr; 420 __u8 role; 421 } __packed; 422 423 #define HCI_OP_READ_LINK_POLICY 0x080c 424 struct hci_cp_read_link_policy { 425 __le16 handle; 426 } __packed; 427 struct hci_rp_read_link_policy { 428 __u8 status; 429 __le16 handle; 430 __le16 policy; 431 } __packed; 432 433 #define HCI_OP_WRITE_LINK_POLICY 0x080d 434 struct hci_cp_write_link_policy { 435 __le16 handle; 436 __le16 policy; 437 } __packed; 438 struct hci_rp_write_link_policy { 439 __u8 status; 440 __le16 handle; 441 } __packed; 442 443 #define HCI_OP_READ_DEF_LINK_POLICY 0x080e 444 struct hci_rp_read_def_link_policy { 445 __u8 status; 446 __le16 policy; 447 } __packed; 448 449 #define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f 450 struct hci_cp_write_def_link_policy { 451 __le16 policy; 452 } __packed; 453 454 #define HCI_OP_SNIFF_SUBRATE 0x0811 455 struct hci_cp_sniff_subrate { 456 __le16 handle; 457 __le16 max_latency; 458 __le16 min_remote_timeout; 459 __le16 min_local_timeout; 460 } __packed; 461 462 #define HCI_OP_SET_EVENT_MASK 0x0c01 463 struct hci_cp_set_event_mask { 464 __u8 mask[8]; 465 } __packed; 466 467 #define HCI_OP_RESET 0x0c03 468 469 #define HCI_OP_SET_EVENT_FLT 0x0c05 470 struct hci_cp_set_event_flt { 471 __u8 flt_type; 472 __u8 cond_type; 473 __u8 condition[0]; 474 } __packed; 475 476 /* Filter types */ 477 #define HCI_FLT_CLEAR_ALL 0x00 478 #define HCI_FLT_INQ_RESULT 0x01 479 #define HCI_FLT_CONN_SETUP 0x02 480 481 /* CONN_SETUP Condition types */ 482 #define HCI_CONN_SETUP_ALLOW_ALL 0x00 483 #define HCI_CONN_SETUP_ALLOW_CLASS 0x01 484 #define HCI_CONN_SETUP_ALLOW_BDADDR 0x02 485 486 /* CONN_SETUP Conditions */ 487 #define HCI_CONN_SETUP_AUTO_OFF 0x01 488 #define HCI_CONN_SETUP_AUTO_ON 0x02 489 490 #define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12 491 struct hci_cp_delete_stored_link_key { 492 bdaddr_t bdaddr; 493 __u8 delete_all; 494 } __packed; 495 496 #define HCI_OP_WRITE_LOCAL_NAME 0x0c13 497 struct hci_cp_write_local_name { 498 __u8 name[248]; 499 } __packed; 500 501 #define HCI_OP_READ_LOCAL_NAME 0x0c14 502 struct hci_rp_read_local_name { 503 __u8 status; 504 __u8 name[248]; 505 } __packed; 506 507 #define HCI_OP_WRITE_CA_TIMEOUT 0x0c16 508 509 #define HCI_OP_WRITE_PG_TIMEOUT 0x0c18 510 511 #define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a 512 #define SCAN_DISABLED 0x00 513 #define SCAN_INQUIRY 0x01 514 #define SCAN_PAGE 0x02 515 516 #define HCI_OP_READ_AUTH_ENABLE 0x0c1f 517 518 #define HCI_OP_WRITE_AUTH_ENABLE 0x0c20 519 #define AUTH_DISABLED 0x00 520 #define AUTH_ENABLED 0x01 521 522 #define HCI_OP_READ_ENCRYPT_MODE 0x0c21 523 524 #define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22 525 #define ENCRYPT_DISABLED 0x00 526 #define ENCRYPT_P2P 0x01 527 #define ENCRYPT_BOTH 0x02 528 529 #define HCI_OP_READ_CLASS_OF_DEV 0x0c23 530 struct hci_rp_read_class_of_dev { 531 __u8 status; 532 __u8 dev_class[3]; 533 } __packed; 534 535 #define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24 536 struct hci_cp_write_class_of_dev { 537 __u8 dev_class[3]; 538 } __packed; 539 540 #define HCI_OP_READ_VOICE_SETTING 0x0c25 541 struct hci_rp_read_voice_setting { 542 __u8 status; 543 __le16 voice_setting; 544 } __packed; 545 546 #define HCI_OP_WRITE_VOICE_SETTING 0x0c26 547 struct hci_cp_write_voice_setting { 548 __le16 voice_setting; 549 } __packed; 550 551 #define HCI_OP_HOST_BUFFER_SIZE 0x0c33 552 struct hci_cp_host_buffer_size { 553 __le16 acl_mtu; 554 __u8 sco_mtu; 555 __le16 acl_max_pkt; 556 __le16 sco_max_pkt; 557 } __packed; 558 559 #define HCI_OP_READ_SSP_MODE 0x0c55 560 struct hci_rp_read_ssp_mode { 561 __u8 status; 562 __u8 mode; 563 } __packed; 564 565 #define HCI_OP_WRITE_SSP_MODE 0x0c56 566 struct hci_cp_write_ssp_mode { 567 __u8 mode; 568 } __packed; 569 570 #define HCI_OP_READ_LOCAL_VERSION 0x1001 571 struct hci_rp_read_local_version { 572 __u8 status; 573 __u8 hci_ver; 574 __le16 hci_rev; 575 __u8 lmp_ver; 576 __le16 manufacturer; 577 __le16 lmp_subver; 578 } __packed; 579 580 #define HCI_OP_READ_LOCAL_COMMANDS 0x1002 581 struct hci_rp_read_local_commands { 582 __u8 status; 583 __u8 commands[64]; 584 } __packed; 585 586 #define HCI_OP_READ_LOCAL_FEATURES 0x1003 587 struct hci_rp_read_local_features { 588 __u8 status; 589 __u8 features[8]; 590 } __packed; 591 592 #define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004 593 struct hci_rp_read_local_ext_features { 594 __u8 status; 595 __u8 page; 596 __u8 max_page; 597 __u8 features[8]; 598 } __packed; 599 600 #define HCI_OP_READ_BUFFER_SIZE 0x1005 601 struct hci_rp_read_buffer_size { 602 __u8 status; 603 __le16 acl_mtu; 604 __u8 sco_mtu; 605 __le16 acl_max_pkt; 606 __le16 sco_max_pkt; 607 } __packed; 608 609 #define HCI_OP_READ_BD_ADDR 0x1009 610 struct hci_rp_read_bd_addr { 611 __u8 status; 612 bdaddr_t bdaddr; 613 } __packed; 614 615 /* ---- HCI Events ---- */ 616 #define HCI_EV_INQUIRY_COMPLETE 0x01 617 618 #define HCI_EV_INQUIRY_RESULT 0x02 619 struct inquiry_info { 620 bdaddr_t bdaddr; 621 __u8 pscan_rep_mode; 622 __u8 pscan_period_mode; 623 __u8 pscan_mode; 624 __u8 dev_class[3]; 625 __le16 clock_offset; 626 } __packed; 627 628 #define HCI_EV_CONN_COMPLETE 0x03 629 struct hci_ev_conn_complete { 630 __u8 status; 631 __le16 handle; 632 bdaddr_t bdaddr; 633 __u8 link_type; 634 __u8 encr_mode; 635 } __packed; 636 637 #define HCI_EV_CONN_REQUEST 0x04 638 struct hci_ev_conn_request { 639 bdaddr_t bdaddr; 640 __u8 dev_class[3]; 641 __u8 link_type; 642 } __packed; 643 644 #define HCI_EV_DISCONN_COMPLETE 0x05 645 struct hci_ev_disconn_complete { 646 __u8 status; 647 __le16 handle; 648 __u8 reason; 649 } __packed; 650 651 #define HCI_EV_AUTH_COMPLETE 0x06 652 struct hci_ev_auth_complete { 653 __u8 status; 654 __le16 handle; 655 } __packed; 656 657 #define HCI_EV_REMOTE_NAME 0x07 658 struct hci_ev_remote_name { 659 __u8 status; 660 bdaddr_t bdaddr; 661 __u8 name[248]; 662 } __packed; 663 664 #define HCI_EV_ENCRYPT_CHANGE 0x08 665 struct hci_ev_encrypt_change { 666 __u8 status; 667 __le16 handle; 668 __u8 encrypt; 669 } __packed; 670 671 #define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09 672 struct hci_ev_change_link_key_complete { 673 __u8 status; 674 __le16 handle; 675 } __packed; 676 677 #define HCI_EV_REMOTE_FEATURES 0x0b 678 struct hci_ev_remote_features { 679 __u8 status; 680 __le16 handle; 681 __u8 features[8]; 682 } __packed; 683 684 #define HCI_EV_REMOTE_VERSION 0x0c 685 struct hci_ev_remote_version { 686 __u8 status; 687 __le16 handle; 688 __u8 lmp_ver; 689 __le16 manufacturer; 690 __le16 lmp_subver; 691 } __packed; 692 693 #define HCI_EV_QOS_SETUP_COMPLETE 0x0d 694 struct hci_qos { 695 __u8 service_type; 696 __u32 token_rate; 697 __u32 peak_bandwidth; 698 __u32 latency; 699 __u32 delay_variation; 700 } __packed; 701 struct hci_ev_qos_setup_complete { 702 __u8 status; 703 __le16 handle; 704 struct hci_qos qos; 705 } __packed; 706 707 #define HCI_EV_CMD_COMPLETE 0x0e 708 struct hci_ev_cmd_complete { 709 __u8 ncmd; 710 __le16 opcode; 711 } __packed; 712 713 #define HCI_EV_CMD_STATUS 0x0f 714 struct hci_ev_cmd_status { 715 __u8 status; 716 __u8 ncmd; 717 __le16 opcode; 718 } __packed; 719 720 #define HCI_EV_ROLE_CHANGE 0x12 721 struct hci_ev_role_change { 722 __u8 status; 723 bdaddr_t bdaddr; 724 __u8 role; 725 } __packed; 726 727 #define HCI_EV_NUM_COMP_PKTS 0x13 728 struct hci_ev_num_comp_pkts { 729 __u8 num_hndl; 730 /* variable length part */ 731 } __packed; 732 733 #define HCI_EV_MODE_CHANGE 0x14 734 struct hci_ev_mode_change { 735 __u8 status; 736 __le16 handle; 737 __u8 mode; 738 __le16 interval; 739 } __packed; 740 741 #define HCI_EV_PIN_CODE_REQ 0x16 742 struct hci_ev_pin_code_req { 743 bdaddr_t bdaddr; 744 } __packed; 745 746 #define HCI_EV_LINK_KEY_REQ 0x17 747 struct hci_ev_link_key_req { 748 bdaddr_t bdaddr; 749 } __packed; 750 751 #define HCI_EV_LINK_KEY_NOTIFY 0x18 752 struct hci_ev_link_key_notify { 753 bdaddr_t bdaddr; 754 __u8 link_key[16]; 755 __u8 key_type; 756 } __packed; 757 758 #define HCI_EV_CLOCK_OFFSET 0x1c 759 struct hci_ev_clock_offset { 760 __u8 status; 761 __le16 handle; 762 __le16 clock_offset; 763 } __packed; 764 765 #define HCI_EV_PKT_TYPE_CHANGE 0x1d 766 struct hci_ev_pkt_type_change { 767 __u8 status; 768 __le16 handle; 769 __le16 pkt_type; 770 } __packed; 771 772 #define HCI_EV_PSCAN_REP_MODE 0x20 773 struct hci_ev_pscan_rep_mode { 774 bdaddr_t bdaddr; 775 __u8 pscan_rep_mode; 776 } __packed; 777 778 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 779 struct inquiry_info_with_rssi { 780 bdaddr_t bdaddr; 781 __u8 pscan_rep_mode; 782 __u8 pscan_period_mode; 783 __u8 dev_class[3]; 784 __le16 clock_offset; 785 __s8 rssi; 786 } __packed; 787 struct inquiry_info_with_rssi_and_pscan_mode { 788 bdaddr_t bdaddr; 789 __u8 pscan_rep_mode; 790 __u8 pscan_period_mode; 791 __u8 pscan_mode; 792 __u8 dev_class[3]; 793 __le16 clock_offset; 794 __s8 rssi; 795 } __packed; 796 797 #define HCI_EV_REMOTE_EXT_FEATURES 0x23 798 struct hci_ev_remote_ext_features { 799 __u8 status; 800 __le16 handle; 801 __u8 page; 802 __u8 max_page; 803 __u8 features[8]; 804 } __packed; 805 806 #define HCI_EV_SYNC_CONN_COMPLETE 0x2c 807 struct hci_ev_sync_conn_complete { 808 __u8 status; 809 __le16 handle; 810 bdaddr_t bdaddr; 811 __u8 link_type; 812 __u8 tx_interval; 813 __u8 retrans_window; 814 __le16 rx_pkt_len; 815 __le16 tx_pkt_len; 816 __u8 air_mode; 817 } __packed; 818 819 #define HCI_EV_SYNC_CONN_CHANGED 0x2d 820 struct hci_ev_sync_conn_changed { 821 __u8 status; 822 __le16 handle; 823 __u8 tx_interval; 824 __u8 retrans_window; 825 __le16 rx_pkt_len; 826 __le16 tx_pkt_len; 827 } __packed; 828 829 #define HCI_EV_SNIFF_SUBRATE 0x2e 830 struct hci_ev_sniff_subrate { 831 __u8 status; 832 __le16 handle; 833 __le16 max_tx_latency; 834 __le16 max_rx_latency; 835 __le16 max_remote_timeout; 836 __le16 max_local_timeout; 837 } __packed; 838 839 #define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f 840 struct extended_inquiry_info { 841 bdaddr_t bdaddr; 842 __u8 pscan_rep_mode; 843 __u8 pscan_period_mode; 844 __u8 dev_class[3]; 845 __le16 clock_offset; 846 __s8 rssi; 847 __u8 data[240]; 848 } __packed; 849 850 #define HCI_EV_IO_CAPA_REQUEST 0x31 851 struct hci_ev_io_capa_request { 852 bdaddr_t bdaddr; 853 } __packed; 854 855 #define HCI_EV_IO_CAPA_REPLY 0x32 856 struct hci_ev_io_capa_reply { 857 bdaddr_t bdaddr; 858 __u8 capability; 859 __u8 oob_data; 860 __u8 authentication; 861 } __packed; 862 863 #define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36 864 struct hci_ev_simple_pair_complete { 865 __u8 status; 866 bdaddr_t bdaddr; 867 } __packed; 868 869 #define HCI_EV_REMOTE_HOST_FEATURES 0x3d 870 struct hci_ev_remote_host_features { 871 bdaddr_t bdaddr; 872 __u8 features[8]; 873 } __packed; 874 875 /* Internal events generated by Bluetooth stack */ 876 #define HCI_EV_STACK_INTERNAL 0xfd 877 struct hci_ev_stack_internal { 878 __u16 type; 879 __u8 data[0]; 880 } __packed; 881 882 #define HCI_EV_SI_DEVICE 0x01 883 struct hci_ev_si_device { 884 __u16 event; 885 __u16 dev_id; 886 } __packed; 887 888 #define HCI_EV_SI_SECURITY 0x02 889 struct hci_ev_si_security { 890 __u16 event; 891 __u16 proto; 892 __u16 subproto; 893 __u8 incoming; 894 } __packed; 895 896 /* ---- HCI Packet structures ---- */ 897 #define HCI_COMMAND_HDR_SIZE 3 898 #define HCI_EVENT_HDR_SIZE 2 899 #define HCI_ACL_HDR_SIZE 4 900 #define HCI_SCO_HDR_SIZE 3 901 902 struct hci_command_hdr { 903 __le16 opcode; /* OCF & OGF */ 904 __u8 plen; 905 } __packed; 906 907 struct hci_event_hdr { 908 __u8 evt; 909 __u8 plen; 910 } __packed; 911 912 struct hci_acl_hdr { 913 __le16 handle; /* Handle & Flags(PB, BC) */ 914 __le16 dlen; 915 } __packed; 916 917 struct hci_sco_hdr { 918 __le16 handle; 919 __u8 dlen; 920 } __packed; 921 922 #ifdef __KERNEL__ 923 #include <linux/skbuff.h> 924 static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb) 925 { 926 return (struct hci_event_hdr *) skb->data; 927 } 928 929 static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb) 930 { 931 return (struct hci_acl_hdr *) skb->data; 932 } 933 934 static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb) 935 { 936 return (struct hci_sco_hdr *) skb->data; 937 } 938 #endif 939 940 /* Command opcode pack/unpack */ 941 #define hci_opcode_pack(ogf, ocf) (__u16) ((ocf & 0x03ff)|(ogf << 10)) 942 #define hci_opcode_ogf(op) (op >> 10) 943 #define hci_opcode_ocf(op) (op & 0x03ff) 944 945 /* ACL handle and flags pack/unpack */ 946 #define hci_handle_pack(h, f) (__u16) ((h & 0x0fff)|(f << 12)) 947 #define hci_handle(h) (h & 0x0fff) 948 #define hci_flags(h) (h >> 12) 949 950 /* ---- HCI Sockets ---- */ 951 952 /* Socket options */ 953 #define HCI_DATA_DIR 1 954 #define HCI_FILTER 2 955 #define HCI_TIME_STAMP 3 956 957 /* CMSG flags */ 958 #define HCI_CMSG_DIR 0x0001 959 #define HCI_CMSG_TSTAMP 0x0002 960 961 struct sockaddr_hci { 962 sa_family_t hci_family; 963 unsigned short hci_dev; 964 unsigned short hci_channel; 965 }; 966 #define HCI_DEV_NONE 0xffff 967 968 #define HCI_CHANNEL_RAW 0 969 #define HCI_CHANNEL_CONTROL 1 970 971 struct hci_filter { 972 unsigned long type_mask; 973 unsigned long event_mask[2]; 974 __le16 opcode; 975 }; 976 977 struct hci_ufilter { 978 __u32 type_mask; 979 __u32 event_mask[2]; 980 __le16 opcode; 981 }; 982 983 #define HCI_FLT_TYPE_BITS 31 984 #define HCI_FLT_EVENT_BITS 63 985 #define HCI_FLT_OGF_BITS 63 986 #define HCI_FLT_OCF_BITS 127 987 988 /* ---- HCI Ioctl requests structures ---- */ 989 struct hci_dev_stats { 990 __u32 err_rx; 991 __u32 err_tx; 992 __u32 cmd_tx; 993 __u32 evt_rx; 994 __u32 acl_tx; 995 __u32 acl_rx; 996 __u32 sco_tx; 997 __u32 sco_rx; 998 __u32 byte_rx; 999 __u32 byte_tx; 1000 }; 1001 1002 struct hci_dev_info { 1003 __u16 dev_id; 1004 char name[8]; 1005 1006 bdaddr_t bdaddr; 1007 1008 __u32 flags; 1009 __u8 type; 1010 1011 __u8 features[8]; 1012 1013 __u32 pkt_type; 1014 __u32 link_policy; 1015 __u32 link_mode; 1016 1017 __u16 acl_mtu; 1018 __u16 acl_pkts; 1019 __u16 sco_mtu; 1020 __u16 sco_pkts; 1021 1022 struct hci_dev_stats stat; 1023 }; 1024 1025 struct hci_conn_info { 1026 __u16 handle; 1027 bdaddr_t bdaddr; 1028 __u8 type; 1029 __u8 out; 1030 __u16 state; 1031 __u32 link_mode; 1032 }; 1033 1034 struct hci_dev_req { 1035 __u16 dev_id; 1036 __u32 dev_opt; 1037 }; 1038 1039 struct hci_dev_list_req { 1040 __u16 dev_num; 1041 struct hci_dev_req dev_req[0]; /* hci_dev_req structures */ 1042 }; 1043 1044 struct hci_conn_list_req { 1045 __u16 dev_id; 1046 __u16 conn_num; 1047 struct hci_conn_info conn_info[0]; 1048 }; 1049 1050 struct hci_conn_info_req { 1051 bdaddr_t bdaddr; 1052 __u8 type; 1053 struct hci_conn_info conn_info[0]; 1054 }; 1055 1056 struct hci_auth_info_req { 1057 bdaddr_t bdaddr; 1058 __u8 type; 1059 }; 1060 1061 struct hci_inquiry_req { 1062 __u16 dev_id; 1063 __u16 flags; 1064 __u8 lap[3]; 1065 __u8 length; 1066 __u8 num_rsp; 1067 }; 1068 #define IREQ_CACHE_FLUSH 0x0001 1069 1070 #endif /* __HCI_H */ 1071