linux/include/net/bluetooth/hci.h
<<
>>
Prefs
   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 */
  60enum {
  61        HCI_QUIRK_NO_RESET,
  62        HCI_QUIRK_RAW_DEVICE,
  63        HCI_QUIRK_FIXUP_BUFFER_SIZE
  64};
  65
  66/* HCI device flags */
  67enum {
  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        HCI_SERVICE_CACHE,
  85        HCI_LINK_KEYS,
  86        HCI_DEBUG_KEYS,
  87
  88        HCI_RESET,
  89};
  90
  91/* HCI ioctl defines */
  92#define HCIDEVUP        _IOW('H', 201, int)
  93#define HCIDEVDOWN      _IOW('H', 202, int)
  94#define HCIDEVRESET     _IOW('H', 203, int)
  95#define HCIDEVRESTAT    _IOW('H', 204, int)
  96
  97#define HCIGETDEVLIST   _IOR('H', 210, int)
  98#define HCIGETDEVINFO   _IOR('H', 211, int)
  99#define HCIGETCONNLIST  _IOR('H', 212, int)
 100#define HCIGETCONNINFO  _IOR('H', 213, int)
 101#define HCIGETAUTHINFO  _IOR('H', 215, int)
 102
 103#define HCISETRAW       _IOW('H', 220, int)
 104#define HCISETSCAN      _IOW('H', 221, int)
 105#define HCISETAUTH      _IOW('H', 222, int)
 106#define HCISETENCRYPT   _IOW('H', 223, int)
 107#define HCISETPTYPE     _IOW('H', 224, int)
 108#define HCISETLINKPOL   _IOW('H', 225, int)
 109#define HCISETLINKMODE  _IOW('H', 226, int)
 110#define HCISETACLMTU    _IOW('H', 227, int)
 111#define HCISETSCOMTU    _IOW('H', 228, int)
 112
 113#define HCIBLOCKADDR    _IOW('H', 230, int)
 114#define HCIUNBLOCKADDR  _IOW('H', 231, int)
 115
 116#define HCIINQUIRY      _IOR('H', 240, int)
 117
 118/* HCI timeouts */
 119#define HCI_CONNECT_TIMEOUT     (40000) /* 40 seconds */
 120#define HCI_DISCONN_TIMEOUT     (2000)  /* 2 seconds */
 121#define HCI_PAIRING_TIMEOUT     (60000) /* 60 seconds */
 122#define HCI_IDLE_TIMEOUT        (6000)  /* 6 seconds */
 123#define HCI_INIT_TIMEOUT        (10000) /* 10 seconds */
 124#define HCI_CMD_TIMEOUT         (1000)  /* 1 seconds */
 125
 126/* HCI data types */
 127#define HCI_COMMAND_PKT         0x01
 128#define HCI_ACLDATA_PKT         0x02
 129#define HCI_SCODATA_PKT         0x03
 130#define HCI_EVENT_PKT           0x04
 131#define HCI_VENDOR_PKT          0xff
 132
 133/* HCI packet types */
 134#define HCI_DM1         0x0008
 135#define HCI_DM3         0x0400
 136#define HCI_DM5         0x4000
 137#define HCI_DH1         0x0010
 138#define HCI_DH3         0x0800
 139#define HCI_DH5         0x8000
 140
 141#define HCI_HV1         0x0020
 142#define HCI_HV2         0x0040
 143#define HCI_HV3         0x0080
 144
 145#define SCO_PTYPE_MASK  (HCI_HV1 | HCI_HV2 | HCI_HV3)
 146#define ACL_PTYPE_MASK  (~SCO_PTYPE_MASK)
 147
 148/* eSCO packet types */
 149#define ESCO_HV1        0x0001
 150#define ESCO_HV2        0x0002
 151#define ESCO_HV3        0x0004
 152#define ESCO_EV3        0x0008
 153#define ESCO_EV4        0x0010
 154#define ESCO_EV5        0x0020
 155#define ESCO_2EV3       0x0040
 156#define ESCO_3EV3       0x0080
 157#define ESCO_2EV5       0x0100
 158#define ESCO_3EV5       0x0200
 159
 160#define SCO_ESCO_MASK  (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
 161#define EDR_ESCO_MASK  (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
 162
 163/* ACL flags */
 164#define ACL_START_NO_FLUSH      0x00
 165#define ACL_CONT                0x01
 166#define ACL_START               0x02
 167#define ACL_ACTIVE_BCAST        0x04
 168#define ACL_PICO_BCAST          0x08
 169
 170/* Baseband links */
 171#define SCO_LINK        0x00
 172#define ACL_LINK        0x01
 173#define ESCO_LINK       0x02
 174/* Low Energy links do not have defined link type. Use invented one */
 175#define LE_LINK         0x80
 176
 177/* LMP features */
 178#define LMP_3SLOT       0x01
 179#define LMP_5SLOT       0x02
 180#define LMP_ENCRYPT     0x04
 181#define LMP_SOFFSET     0x08
 182#define LMP_TACCURACY   0x10
 183#define LMP_RSWITCH     0x20
 184#define LMP_HOLD        0x40
 185#define LMP_SNIFF       0x80
 186
 187#define LMP_PARK        0x01
 188#define LMP_RSSI        0x02
 189#define LMP_QUALITY     0x04
 190#define LMP_SCO         0x08
 191#define LMP_HV2         0x10
 192#define LMP_HV3         0x20
 193#define LMP_ULAW        0x40
 194#define LMP_ALAW        0x80
 195
 196#define LMP_CVSD        0x01
 197#define LMP_PSCHEME     0x02
 198#define LMP_PCONTROL    0x04
 199
 200#define LMP_RSSI_INQ    0x40
 201#define LMP_ESCO        0x80
 202
 203#define LMP_EV4         0x01
 204#define LMP_EV5         0x02
 205#define LMP_LE          0x40
 206
 207#define LMP_SNIFF_SUBR  0x02
 208#define LMP_PAUSE_ENC   0x04
 209#define LMP_EDR_ESCO_2M 0x20
 210#define LMP_EDR_ESCO_3M 0x40
 211#define LMP_EDR_3S_ESCO 0x80
 212
 213#define LMP_EXT_INQ     0x01
 214#define LMP_SIMUL_LE_BR 0x02
 215#define LMP_SIMPLE_PAIR 0x08
 216#define LMP_NO_FLUSH    0x40
 217
 218#define LMP_LSTO        0x01
 219#define LMP_INQ_TX_PWR  0x02
 220#define LMP_EXTFEATURES 0x80
 221
 222/* Extended LMP features */
 223#define LMP_HOST_LE     0x02
 224
 225/* Connection modes */
 226#define HCI_CM_ACTIVE   0x0000
 227#define HCI_CM_HOLD     0x0001
 228#define HCI_CM_SNIFF    0x0002
 229#define HCI_CM_PARK     0x0003
 230
 231/* Link policies */
 232#define HCI_LP_RSWITCH  0x0001
 233#define HCI_LP_HOLD     0x0002
 234#define HCI_LP_SNIFF    0x0004
 235#define HCI_LP_PARK     0x0008
 236
 237/* Link modes */
 238#define HCI_LM_ACCEPT   0x8000
 239#define HCI_LM_MASTER   0x0001
 240#define HCI_LM_AUTH     0x0002
 241#define HCI_LM_ENCRYPT  0x0004
 242#define HCI_LM_TRUSTED  0x0008
 243#define HCI_LM_RELIABLE 0x0010
 244#define HCI_LM_SECURE   0x0020
 245
 246/* Authentication types */
 247#define HCI_AT_NO_BONDING               0x00
 248#define HCI_AT_NO_BONDING_MITM          0x01
 249#define HCI_AT_DEDICATED_BONDING        0x02
 250#define HCI_AT_DEDICATED_BONDING_MITM   0x03
 251#define HCI_AT_GENERAL_BONDING          0x04
 252#define HCI_AT_GENERAL_BONDING_MITM     0x05
 253
 254/* Link Key types */
 255#define HCI_LK_COMBINATION              0x00
 256#define HCI_LK_LOCAL_UNIT               0x01
 257#define HCI_LK_REMOTE_UNIT              0x02
 258#define HCI_LK_DEBUG_COMBINATION        0x03
 259#define HCI_LK_UNAUTH_COMBINATION       0x04
 260#define HCI_LK_AUTH_COMBINATION         0x05
 261#define HCI_LK_CHANGED_COMBINATION      0x06
 262/* The spec doesn't define types for SMP keys */
 263#define HCI_LK_SMP_LTK                  0x81
 264#define HCI_LK_SMP_IRK                  0x82
 265#define HCI_LK_SMP_CSRK                 0x83
 266
 267/* -----  HCI Commands ---- */
 268#define HCI_OP_NOP                      0x0000
 269
 270#define HCI_OP_INQUIRY                  0x0401
 271struct hci_cp_inquiry {
 272        __u8     lap[3];
 273        __u8     length;
 274        __u8     num_rsp;
 275} __packed;
 276
 277#define HCI_OP_INQUIRY_CANCEL           0x0402
 278
 279#define HCI_OP_EXIT_PERIODIC_INQ        0x0404
 280
 281#define HCI_OP_CREATE_CONN              0x0405
 282struct hci_cp_create_conn {
 283        bdaddr_t bdaddr;
 284        __le16   pkt_type;
 285        __u8     pscan_rep_mode;
 286        __u8     pscan_mode;
 287        __le16   clock_offset;
 288        __u8     role_switch;
 289} __packed;
 290
 291#define HCI_OP_DISCONNECT               0x0406
 292struct hci_cp_disconnect {
 293        __le16   handle;
 294        __u8     reason;
 295} __packed;
 296
 297#define HCI_OP_ADD_SCO                  0x0407
 298struct hci_cp_add_sco {
 299        __le16   handle;
 300        __le16   pkt_type;
 301} __packed;
 302
 303#define HCI_OP_CREATE_CONN_CANCEL       0x0408
 304struct hci_cp_create_conn_cancel {
 305        bdaddr_t bdaddr;
 306} __packed;
 307
 308#define HCI_OP_ACCEPT_CONN_REQ          0x0409
 309struct hci_cp_accept_conn_req {
 310        bdaddr_t bdaddr;
 311        __u8     role;
 312} __packed;
 313
 314#define HCI_OP_REJECT_CONN_REQ          0x040a
 315struct hci_cp_reject_conn_req {
 316        bdaddr_t bdaddr;
 317        __u8     reason;
 318} __packed;
 319
 320#define HCI_OP_LINK_KEY_REPLY           0x040b
 321struct hci_cp_link_key_reply {
 322        bdaddr_t bdaddr;
 323        __u8     link_key[16];
 324} __packed;
 325
 326#define HCI_OP_LINK_KEY_NEG_REPLY       0x040c
 327struct hci_cp_link_key_neg_reply {
 328        bdaddr_t bdaddr;
 329} __packed;
 330
 331#define HCI_OP_PIN_CODE_REPLY           0x040d
 332struct hci_cp_pin_code_reply {
 333        bdaddr_t bdaddr;
 334        __u8     pin_len;
 335        __u8     pin_code[16];
 336} __packed;
 337struct hci_rp_pin_code_reply {
 338        __u8     status;
 339        bdaddr_t bdaddr;
 340} __packed;
 341
 342#define HCI_OP_PIN_CODE_NEG_REPLY       0x040e
 343struct hci_cp_pin_code_neg_reply {
 344        bdaddr_t bdaddr;
 345} __packed;
 346struct hci_rp_pin_code_neg_reply {
 347        __u8     status;
 348        bdaddr_t bdaddr;
 349} __packed;
 350
 351#define HCI_OP_CHANGE_CONN_PTYPE        0x040f
 352struct hci_cp_change_conn_ptype {
 353        __le16   handle;
 354        __le16   pkt_type;
 355} __packed;
 356
 357#define HCI_OP_AUTH_REQUESTED           0x0411
 358struct hci_cp_auth_requested {
 359        __le16   handle;
 360} __packed;
 361
 362#define HCI_OP_SET_CONN_ENCRYPT         0x0413
 363struct hci_cp_set_conn_encrypt {
 364        __le16   handle;
 365        __u8     encrypt;
 366} __packed;
 367
 368#define HCI_OP_CHANGE_CONN_LINK_KEY     0x0415
 369struct hci_cp_change_conn_link_key {
 370        __le16   handle;
 371} __packed;
 372
 373#define HCI_OP_REMOTE_NAME_REQ          0x0419
 374struct hci_cp_remote_name_req {
 375        bdaddr_t bdaddr;
 376        __u8     pscan_rep_mode;
 377        __u8     pscan_mode;
 378        __le16   clock_offset;
 379} __packed;
 380
 381#define HCI_OP_REMOTE_NAME_REQ_CANCEL   0x041a
 382struct hci_cp_remote_name_req_cancel {
 383        bdaddr_t bdaddr;
 384} __packed;
 385
 386#define HCI_OP_READ_REMOTE_FEATURES     0x041b
 387struct hci_cp_read_remote_features {
 388        __le16   handle;
 389} __packed;
 390
 391#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
 392struct hci_cp_read_remote_ext_features {
 393        __le16   handle;
 394        __u8     page;
 395} __packed;
 396
 397#define HCI_OP_READ_REMOTE_VERSION      0x041d
 398struct hci_cp_read_remote_version {
 399        __le16   handle;
 400} __packed;
 401
 402#define HCI_OP_SETUP_SYNC_CONN          0x0428
 403struct hci_cp_setup_sync_conn {
 404        __le16   handle;
 405        __le32   tx_bandwidth;
 406        __le32   rx_bandwidth;
 407        __le16   max_latency;
 408        __le16   voice_setting;
 409        __u8     retrans_effort;
 410        __le16   pkt_type;
 411} __packed;
 412
 413#define HCI_OP_ACCEPT_SYNC_CONN_REQ     0x0429
 414struct hci_cp_accept_sync_conn_req {
 415        bdaddr_t bdaddr;
 416        __le32   tx_bandwidth;
 417        __le32   rx_bandwidth;
 418        __le16   max_latency;
 419        __le16   content_format;
 420        __u8     retrans_effort;
 421        __le16   pkt_type;
 422} __packed;
 423
 424#define HCI_OP_REJECT_SYNC_CONN_REQ     0x042a
 425struct hci_cp_reject_sync_conn_req {
 426        bdaddr_t bdaddr;
 427        __u8     reason;
 428} __packed;
 429
 430#define HCI_OP_IO_CAPABILITY_REPLY      0x042b
 431struct hci_cp_io_capability_reply {
 432        bdaddr_t bdaddr;
 433        __u8     capability;
 434        __u8     oob_data;
 435        __u8     authentication;
 436} __packed;
 437
 438#define HCI_OP_USER_CONFIRM_REPLY               0x042c
 439struct hci_cp_user_confirm_reply {
 440        bdaddr_t bdaddr;
 441} __packed;
 442struct hci_rp_user_confirm_reply {
 443        __u8     status;
 444        bdaddr_t bdaddr;
 445} __packed;
 446
 447#define HCI_OP_USER_CONFIRM_NEG_REPLY   0x042d
 448
 449#define HCI_OP_REMOTE_OOB_DATA_REPLY    0x0430
 450struct hci_cp_remote_oob_data_reply {
 451        bdaddr_t bdaddr;
 452        __u8     hash[16];
 453        __u8     randomizer[16];
 454} __packed;
 455
 456#define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY        0x0433
 457struct hci_cp_remote_oob_data_neg_reply {
 458        bdaddr_t bdaddr;
 459} __packed;
 460
 461#define HCI_OP_IO_CAPABILITY_NEG_REPLY  0x0434
 462struct hci_cp_io_capability_neg_reply {
 463        bdaddr_t bdaddr;
 464        __u8     reason;
 465} __packed;
 466
 467#define HCI_OP_SNIFF_MODE               0x0803
 468struct hci_cp_sniff_mode {
 469        __le16   handle;
 470        __le16   max_interval;
 471        __le16   min_interval;
 472        __le16   attempt;
 473        __le16   timeout;
 474} __packed;
 475
 476#define HCI_OP_EXIT_SNIFF_MODE          0x0804
 477struct hci_cp_exit_sniff_mode {
 478        __le16   handle;
 479} __packed;
 480
 481#define HCI_OP_ROLE_DISCOVERY           0x0809
 482struct hci_cp_role_discovery {
 483        __le16   handle;
 484} __packed;
 485struct hci_rp_role_discovery {
 486        __u8     status;
 487        __le16   handle;
 488        __u8     role;
 489} __packed;
 490
 491#define HCI_OP_SWITCH_ROLE              0x080b
 492struct hci_cp_switch_role {
 493        bdaddr_t bdaddr;
 494        __u8     role;
 495} __packed;
 496
 497#define HCI_OP_READ_LINK_POLICY         0x080c
 498struct hci_cp_read_link_policy {
 499        __le16   handle;
 500} __packed;
 501struct hci_rp_read_link_policy {
 502        __u8     status;
 503        __le16   handle;
 504        __le16   policy;
 505} __packed;
 506
 507#define HCI_OP_WRITE_LINK_POLICY        0x080d
 508struct hci_cp_write_link_policy {
 509        __le16   handle;
 510        __le16   policy;
 511} __packed;
 512struct hci_rp_write_link_policy {
 513        __u8     status;
 514        __le16   handle;
 515} __packed;
 516
 517#define HCI_OP_READ_DEF_LINK_POLICY     0x080e
 518struct hci_rp_read_def_link_policy {
 519        __u8     status;
 520        __le16   policy;
 521} __packed;
 522
 523#define HCI_OP_WRITE_DEF_LINK_POLICY    0x080f
 524struct hci_cp_write_def_link_policy {
 525        __le16   policy;
 526} __packed;
 527
 528#define HCI_OP_SNIFF_SUBRATE            0x0811
 529struct hci_cp_sniff_subrate {
 530        __le16   handle;
 531        __le16   max_latency;
 532        __le16   min_remote_timeout;
 533        __le16   min_local_timeout;
 534} __packed;
 535
 536#define HCI_OP_SET_EVENT_MASK           0x0c01
 537struct hci_cp_set_event_mask {
 538        __u8     mask[8];
 539} __packed;
 540
 541#define HCI_OP_RESET                    0x0c03
 542
 543#define HCI_OP_SET_EVENT_FLT            0x0c05
 544struct hci_cp_set_event_flt {
 545        __u8     flt_type;
 546        __u8     cond_type;
 547        __u8     condition[0];
 548} __packed;
 549
 550/* Filter types */
 551#define HCI_FLT_CLEAR_ALL       0x00
 552#define HCI_FLT_INQ_RESULT      0x01
 553#define HCI_FLT_CONN_SETUP      0x02
 554
 555/* CONN_SETUP Condition types */
 556#define HCI_CONN_SETUP_ALLOW_ALL        0x00
 557#define HCI_CONN_SETUP_ALLOW_CLASS      0x01
 558#define HCI_CONN_SETUP_ALLOW_BDADDR     0x02
 559
 560/* CONN_SETUP Conditions */
 561#define HCI_CONN_SETUP_AUTO_OFF 0x01
 562#define HCI_CONN_SETUP_AUTO_ON  0x02
 563
 564#define HCI_OP_DELETE_STORED_LINK_KEY   0x0c12
 565struct hci_cp_delete_stored_link_key {
 566        bdaddr_t bdaddr;
 567        __u8     delete_all;
 568} __packed;
 569
 570#define HCI_MAX_NAME_LENGTH             248
 571
 572#define HCI_OP_WRITE_LOCAL_NAME         0x0c13
 573struct hci_cp_write_local_name {
 574        __u8     name[HCI_MAX_NAME_LENGTH];
 575} __packed;
 576
 577#define HCI_OP_READ_LOCAL_NAME          0x0c14
 578struct hci_rp_read_local_name {
 579        __u8     status;
 580        __u8     name[HCI_MAX_NAME_LENGTH];
 581} __packed;
 582
 583#define HCI_OP_WRITE_CA_TIMEOUT         0x0c16
 584
 585#define HCI_OP_WRITE_PG_TIMEOUT         0x0c18
 586
 587#define HCI_OP_WRITE_SCAN_ENABLE        0x0c1a
 588        #define SCAN_DISABLED           0x00
 589        #define SCAN_INQUIRY            0x01
 590        #define SCAN_PAGE               0x02
 591
 592#define HCI_OP_READ_AUTH_ENABLE         0x0c1f
 593
 594#define HCI_OP_WRITE_AUTH_ENABLE        0x0c20
 595        #define AUTH_DISABLED           0x00
 596        #define AUTH_ENABLED            0x01
 597
 598#define HCI_OP_READ_ENCRYPT_MODE        0x0c21
 599
 600#define HCI_OP_WRITE_ENCRYPT_MODE       0x0c22
 601        #define ENCRYPT_DISABLED        0x00
 602        #define ENCRYPT_P2P             0x01
 603        #define ENCRYPT_BOTH            0x02
 604
 605#define HCI_OP_READ_CLASS_OF_DEV        0x0c23
 606struct hci_rp_read_class_of_dev {
 607        __u8     status;
 608        __u8     dev_class[3];
 609} __packed;
 610
 611#define HCI_OP_WRITE_CLASS_OF_DEV       0x0c24
 612struct hci_cp_write_class_of_dev {
 613        __u8     dev_class[3];
 614} __packed;
 615
 616#define HCI_OP_READ_VOICE_SETTING       0x0c25
 617struct hci_rp_read_voice_setting {
 618        __u8     status;
 619        __le16   voice_setting;
 620} __packed;
 621
 622#define HCI_OP_WRITE_VOICE_SETTING      0x0c26
 623struct hci_cp_write_voice_setting {
 624        __le16   voice_setting;
 625} __packed;
 626
 627#define HCI_OP_HOST_BUFFER_SIZE         0x0c33
 628struct hci_cp_host_buffer_size {
 629        __le16   acl_mtu;
 630        __u8     sco_mtu;
 631        __le16   acl_max_pkt;
 632        __le16   sco_max_pkt;
 633} __packed;
 634
 635#define HCI_OP_WRITE_INQUIRY_MODE       0x0c45
 636
 637#define HCI_MAX_EIR_LENGTH              240
 638
 639#define HCI_OP_WRITE_EIR                0x0c52
 640struct hci_cp_write_eir {
 641        uint8_t         fec;
 642        uint8_t         data[HCI_MAX_EIR_LENGTH];
 643} __packed;
 644
 645#define HCI_OP_READ_SSP_MODE            0x0c55
 646struct hci_rp_read_ssp_mode {
 647        __u8     status;
 648        __u8     mode;
 649} __packed;
 650
 651#define HCI_OP_WRITE_SSP_MODE           0x0c56
 652struct hci_cp_write_ssp_mode {
 653        __u8     mode;
 654} __packed;
 655
 656#define HCI_OP_READ_LOCAL_OOB_DATA              0x0c57
 657struct hci_rp_read_local_oob_data {
 658        __u8     status;
 659        __u8     hash[16];
 660        __u8     randomizer[16];
 661} __packed;
 662
 663#define HCI_OP_READ_INQ_RSP_TX_POWER    0x0c58
 664
 665#define HCI_OP_WRITE_LE_HOST_SUPPORTED  0x0c6d
 666struct hci_cp_write_le_host_supported {
 667        __u8 le;
 668        __u8 simul;
 669} __packed;
 670
 671#define HCI_OP_READ_LOCAL_VERSION       0x1001
 672struct hci_rp_read_local_version {
 673        __u8     status;
 674        __u8     hci_ver;
 675        __le16   hci_rev;
 676        __u8     lmp_ver;
 677        __le16   manufacturer;
 678        __le16   lmp_subver;
 679} __packed;
 680
 681#define HCI_OP_READ_LOCAL_COMMANDS      0x1002
 682struct hci_rp_read_local_commands {
 683        __u8     status;
 684        __u8     commands[64];
 685} __packed;
 686
 687#define HCI_OP_READ_LOCAL_FEATURES      0x1003
 688struct hci_rp_read_local_features {
 689        __u8     status;
 690        __u8     features[8];
 691} __packed;
 692
 693#define HCI_OP_READ_LOCAL_EXT_FEATURES  0x1004
 694struct hci_cp_read_local_ext_features {
 695        __u8     page;
 696} __packed;
 697struct hci_rp_read_local_ext_features {
 698        __u8     status;
 699        __u8     page;
 700        __u8     max_page;
 701        __u8     features[8];
 702} __packed;
 703
 704#define HCI_OP_READ_BUFFER_SIZE         0x1005
 705struct hci_rp_read_buffer_size {
 706        __u8     status;
 707        __le16   acl_mtu;
 708        __u8     sco_mtu;
 709        __le16   acl_max_pkt;
 710        __le16   sco_max_pkt;
 711} __packed;
 712
 713#define HCI_OP_READ_BD_ADDR             0x1009
 714struct hci_rp_read_bd_addr {
 715        __u8     status;
 716        bdaddr_t bdaddr;
 717} __packed;
 718
 719#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
 720struct hci_cp_write_page_scan_activity {
 721        __le16   interval;
 722        __le16   window;
 723} __packed;
 724
 725#define HCI_OP_WRITE_PAGE_SCAN_TYPE     0x0c47
 726        #define PAGE_SCAN_TYPE_STANDARD         0x00
 727        #define PAGE_SCAN_TYPE_INTERLACED       0x01
 728
 729#define HCI_OP_LE_SET_EVENT_MASK        0x2001
 730struct hci_cp_le_set_event_mask {
 731        __u8     mask[8];
 732} __packed;
 733
 734#define HCI_OP_LE_READ_BUFFER_SIZE      0x2002
 735struct hci_rp_le_read_buffer_size {
 736        __u8     status;
 737        __le16   le_mtu;
 738        __u8     le_max_pkt;
 739} __packed;
 740
 741#define HCI_OP_LE_SET_SCAN_ENABLE       0x200c
 742struct hci_cp_le_set_scan_enable {
 743        __u8     enable;
 744        __u8     filter_dup;
 745} __packed;
 746
 747#define HCI_OP_LE_CREATE_CONN           0x200d
 748struct hci_cp_le_create_conn {
 749        __le16   scan_interval;
 750        __le16   scan_window;
 751        __u8     filter_policy;
 752        __u8     peer_addr_type;
 753        bdaddr_t peer_addr;
 754        __u8     own_address_type;
 755        __le16   conn_interval_min;
 756        __le16   conn_interval_max;
 757        __le16   conn_latency;
 758        __le16   supervision_timeout;
 759        __le16   min_ce_len;
 760        __le16   max_ce_len;
 761} __packed;
 762
 763#define HCI_OP_LE_CREATE_CONN_CANCEL    0x200e
 764
 765#define HCI_OP_LE_CONN_UPDATE           0x2013
 766struct hci_cp_le_conn_update {
 767        __le16   handle;
 768        __le16   conn_interval_min;
 769        __le16   conn_interval_max;
 770        __le16   conn_latency;
 771        __le16   supervision_timeout;
 772        __le16   min_ce_len;
 773        __le16   max_ce_len;
 774} __packed;
 775
 776#define HCI_OP_LE_START_ENC             0x2019
 777struct hci_cp_le_start_enc {
 778        __le16  handle;
 779        __u8    rand[8];
 780        __le16  ediv;
 781        __u8    ltk[16];
 782} __packed;
 783
 784#define HCI_OP_LE_LTK_REPLY             0x201a
 785struct hci_cp_le_ltk_reply {
 786        __le16  handle;
 787        __u8    ltk[16];
 788} __packed;
 789struct hci_rp_le_ltk_reply {
 790        __u8    status;
 791        __le16  handle;
 792} __packed;
 793
 794#define HCI_OP_LE_LTK_NEG_REPLY         0x201b
 795struct hci_cp_le_ltk_neg_reply {
 796        __le16  handle;
 797} __packed;
 798struct hci_rp_le_ltk_neg_reply {
 799        __u8    status;
 800        __le16  handle;
 801} __packed;
 802
 803/* ---- HCI Events ---- */
 804#define HCI_EV_INQUIRY_COMPLETE         0x01
 805
 806#define HCI_EV_INQUIRY_RESULT           0x02
 807struct inquiry_info {
 808        bdaddr_t bdaddr;
 809        __u8     pscan_rep_mode;
 810        __u8     pscan_period_mode;
 811        __u8     pscan_mode;
 812        __u8     dev_class[3];
 813        __le16   clock_offset;
 814} __packed;
 815
 816#define HCI_EV_CONN_COMPLETE            0x03
 817struct hci_ev_conn_complete {
 818        __u8     status;
 819        __le16   handle;
 820        bdaddr_t bdaddr;
 821        __u8     link_type;
 822        __u8     encr_mode;
 823} __packed;
 824
 825#define HCI_EV_CONN_REQUEST             0x04
 826struct hci_ev_conn_request {
 827        bdaddr_t bdaddr;
 828        __u8     dev_class[3];
 829        __u8     link_type;
 830} __packed;
 831
 832#define HCI_EV_DISCONN_COMPLETE         0x05
 833struct hci_ev_disconn_complete {
 834        __u8     status;
 835        __le16   handle;
 836        __u8     reason;
 837} __packed;
 838
 839#define HCI_EV_AUTH_COMPLETE            0x06
 840struct hci_ev_auth_complete {
 841        __u8     status;
 842        __le16   handle;
 843} __packed;
 844
 845#define HCI_EV_REMOTE_NAME              0x07
 846struct hci_ev_remote_name {
 847        __u8     status;
 848        bdaddr_t bdaddr;
 849        __u8     name[HCI_MAX_NAME_LENGTH];
 850} __packed;
 851
 852#define HCI_EV_ENCRYPT_CHANGE           0x08
 853struct hci_ev_encrypt_change {
 854        __u8     status;
 855        __le16   handle;
 856        __u8     encrypt;
 857} __packed;
 858
 859#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
 860struct hci_ev_change_link_key_complete {
 861        __u8     status;
 862        __le16   handle;
 863} __packed;
 864
 865#define HCI_EV_REMOTE_FEATURES          0x0b
 866struct hci_ev_remote_features {
 867        __u8     status;
 868        __le16   handle;
 869        __u8     features[8];
 870} __packed;
 871
 872#define HCI_EV_REMOTE_VERSION           0x0c
 873struct hci_ev_remote_version {
 874        __u8     status;
 875        __le16   handle;
 876        __u8     lmp_ver;
 877        __le16   manufacturer;
 878        __le16   lmp_subver;
 879} __packed;
 880
 881#define HCI_EV_QOS_SETUP_COMPLETE       0x0d
 882struct hci_qos {
 883        __u8     service_type;
 884        __u32    token_rate;
 885        __u32    peak_bandwidth;
 886        __u32    latency;
 887        __u32    delay_variation;
 888} __packed;
 889struct hci_ev_qos_setup_complete {
 890        __u8     status;
 891        __le16   handle;
 892        struct   hci_qos qos;
 893} __packed;
 894
 895#define HCI_EV_CMD_COMPLETE             0x0e
 896struct hci_ev_cmd_complete {
 897        __u8     ncmd;
 898        __le16   opcode;
 899} __packed;
 900
 901#define HCI_EV_CMD_STATUS               0x0f
 902struct hci_ev_cmd_status {
 903        __u8     status;
 904        __u8     ncmd;
 905        __le16   opcode;
 906} __packed;
 907
 908#define HCI_EV_ROLE_CHANGE              0x12
 909struct hci_ev_role_change {
 910        __u8     status;
 911        bdaddr_t bdaddr;
 912        __u8     role;
 913} __packed;
 914
 915#define HCI_EV_NUM_COMP_PKTS            0x13
 916struct hci_ev_num_comp_pkts {
 917        __u8     num_hndl;
 918        /* variable length part */
 919} __packed;
 920
 921#define HCI_EV_MODE_CHANGE              0x14
 922struct hci_ev_mode_change {
 923        __u8     status;
 924        __le16   handle;
 925        __u8     mode;
 926        __le16   interval;
 927} __packed;
 928
 929#define HCI_EV_PIN_CODE_REQ             0x16
 930struct hci_ev_pin_code_req {
 931        bdaddr_t bdaddr;
 932} __packed;
 933
 934#define HCI_EV_LINK_KEY_REQ             0x17
 935struct hci_ev_link_key_req {
 936        bdaddr_t bdaddr;
 937} __packed;
 938
 939#define HCI_EV_LINK_KEY_NOTIFY          0x18
 940struct hci_ev_link_key_notify {
 941        bdaddr_t bdaddr;
 942        __u8     link_key[16];
 943        __u8     key_type;
 944} __packed;
 945
 946#define HCI_EV_CLOCK_OFFSET             0x1c
 947struct hci_ev_clock_offset {
 948        __u8     status;
 949        __le16   handle;
 950        __le16   clock_offset;
 951} __packed;
 952
 953#define HCI_EV_PKT_TYPE_CHANGE          0x1d
 954struct hci_ev_pkt_type_change {
 955        __u8     status;
 956        __le16   handle;
 957        __le16   pkt_type;
 958} __packed;
 959
 960#define HCI_EV_PSCAN_REP_MODE           0x20
 961struct hci_ev_pscan_rep_mode {
 962        bdaddr_t bdaddr;
 963        __u8     pscan_rep_mode;
 964} __packed;
 965
 966#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
 967struct inquiry_info_with_rssi {
 968        bdaddr_t bdaddr;
 969        __u8     pscan_rep_mode;
 970        __u8     pscan_period_mode;
 971        __u8     dev_class[3];
 972        __le16   clock_offset;
 973        __s8     rssi;
 974} __packed;
 975struct inquiry_info_with_rssi_and_pscan_mode {
 976        bdaddr_t bdaddr;
 977        __u8     pscan_rep_mode;
 978        __u8     pscan_period_mode;
 979        __u8     pscan_mode;
 980        __u8     dev_class[3];
 981        __le16   clock_offset;
 982        __s8     rssi;
 983} __packed;
 984
 985#define HCI_EV_REMOTE_EXT_FEATURES      0x23
 986struct hci_ev_remote_ext_features {
 987        __u8     status;
 988        __le16   handle;
 989        __u8     page;
 990        __u8     max_page;
 991        __u8     features[8];
 992} __packed;
 993
 994#define HCI_EV_SYNC_CONN_COMPLETE       0x2c
 995struct hci_ev_sync_conn_complete {
 996        __u8     status;
 997        __le16   handle;
 998        bdaddr_t bdaddr;
 999        __u8     link_type;
1000        __u8     tx_interval;
1001        __u8     retrans_window;
1002        __le16   rx_pkt_len;
1003        __le16   tx_pkt_len;
1004        __u8     air_mode;
1005} __packed;
1006
1007#define HCI_EV_SYNC_CONN_CHANGED        0x2d
1008struct hci_ev_sync_conn_changed {
1009        __u8     status;
1010        __le16   handle;
1011        __u8     tx_interval;
1012        __u8     retrans_window;
1013        __le16   rx_pkt_len;
1014        __le16   tx_pkt_len;
1015} __packed;
1016
1017#define HCI_EV_SNIFF_SUBRATE            0x2e
1018struct hci_ev_sniff_subrate {
1019        __u8     status;
1020        __le16   handle;
1021        __le16   max_tx_latency;
1022        __le16   max_rx_latency;
1023        __le16   max_remote_timeout;
1024        __le16   max_local_timeout;
1025} __packed;
1026
1027#define HCI_EV_EXTENDED_INQUIRY_RESULT  0x2f
1028struct extended_inquiry_info {
1029        bdaddr_t bdaddr;
1030        __u8     pscan_rep_mode;
1031        __u8     pscan_period_mode;
1032        __u8     dev_class[3];
1033        __le16   clock_offset;
1034        __s8     rssi;
1035        __u8     data[240];
1036} __packed;
1037
1038#define HCI_EV_IO_CAPA_REQUEST          0x31
1039struct hci_ev_io_capa_request {
1040        bdaddr_t bdaddr;
1041} __packed;
1042
1043#define HCI_EV_IO_CAPA_REPLY            0x32
1044struct hci_ev_io_capa_reply {
1045        bdaddr_t bdaddr;
1046        __u8     capability;
1047        __u8     oob_data;
1048        __u8     authentication;
1049} __packed;
1050
1051#define HCI_EV_USER_CONFIRM_REQUEST     0x33
1052struct hci_ev_user_confirm_req {
1053        bdaddr_t        bdaddr;
1054        __le32          passkey;
1055} __packed;
1056
1057#define HCI_EV_REMOTE_OOB_DATA_REQUEST  0x35
1058struct hci_ev_remote_oob_data_request {
1059        bdaddr_t bdaddr;
1060} __packed;
1061
1062#define HCI_EV_SIMPLE_PAIR_COMPLETE     0x36
1063struct hci_ev_simple_pair_complete {
1064        __u8     status;
1065        bdaddr_t bdaddr;
1066} __packed;
1067
1068#define HCI_EV_REMOTE_HOST_FEATURES     0x3d
1069struct hci_ev_remote_host_features {
1070        bdaddr_t bdaddr;
1071        __u8     features[8];
1072} __packed;
1073
1074#define HCI_EV_LE_META                  0x3e
1075struct hci_ev_le_meta {
1076        __u8     subevent;
1077} __packed;
1078
1079/* Low energy meta events */
1080#define HCI_EV_LE_CONN_COMPLETE         0x01
1081struct hci_ev_le_conn_complete {
1082        __u8     status;
1083        __le16   handle;
1084        __u8     role;
1085        __u8     bdaddr_type;
1086        bdaddr_t bdaddr;
1087        __le16   interval;
1088        __le16   latency;
1089        __le16   supervision_timeout;
1090        __u8     clk_accurancy;
1091} __packed;
1092
1093#define HCI_EV_LE_LTK_REQ               0x05
1094struct hci_ev_le_ltk_req {
1095        __le16  handle;
1096        __u8    random[8];
1097        __le16  ediv;
1098} __packed;
1099
1100/* Advertising report event types */
1101#define ADV_IND         0x00
1102#define ADV_DIRECT_IND  0x01
1103#define ADV_SCAN_IND    0x02
1104#define ADV_NONCONN_IND 0x03
1105#define ADV_SCAN_RSP    0x04
1106
1107#define ADDR_LE_DEV_PUBLIC      0x00
1108#define ADDR_LE_DEV_RANDOM      0x01
1109
1110#define HCI_EV_LE_ADVERTISING_REPORT    0x02
1111struct hci_ev_le_advertising_info {
1112        __u8     evt_type;
1113        __u8     bdaddr_type;
1114        bdaddr_t bdaddr;
1115        __u8     length;
1116        __u8     data[0];
1117} __packed;
1118
1119/* Internal events generated by Bluetooth stack */
1120#define HCI_EV_STACK_INTERNAL   0xfd
1121struct hci_ev_stack_internal {
1122        __u16    type;
1123        __u8     data[0];
1124} __packed;
1125
1126#define HCI_EV_SI_DEVICE        0x01
1127struct hci_ev_si_device {
1128        __u16    event;
1129        __u16    dev_id;
1130} __packed;
1131
1132#define HCI_EV_SI_SECURITY      0x02
1133struct hci_ev_si_security {
1134        __u16    event;
1135        __u16    proto;
1136        __u16    subproto;
1137        __u8     incoming;
1138} __packed;
1139
1140/* ---- HCI Packet structures ---- */
1141#define HCI_COMMAND_HDR_SIZE 3
1142#define HCI_EVENT_HDR_SIZE   2
1143#define HCI_ACL_HDR_SIZE     4
1144#define HCI_SCO_HDR_SIZE     3
1145
1146struct hci_command_hdr {
1147        __le16  opcode;         /* OCF & OGF */
1148        __u8    plen;
1149} __packed;
1150
1151struct hci_event_hdr {
1152        __u8    evt;
1153        __u8    plen;
1154} __packed;
1155
1156struct hci_acl_hdr {
1157        __le16  handle;         /* Handle & Flags(PB, BC) */
1158        __le16  dlen;
1159} __packed;
1160
1161struct hci_sco_hdr {
1162        __le16  handle;
1163        __u8    dlen;
1164} __packed;
1165
1166#include <linux/skbuff.h>
1167static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1168{
1169        return (struct hci_event_hdr *) skb->data;
1170}
1171
1172static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1173{
1174        return (struct hci_acl_hdr *) skb->data;
1175}
1176
1177static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1178{
1179        return (struct hci_sco_hdr *) skb->data;
1180}
1181
1182/* Command opcode pack/unpack */
1183#define hci_opcode_pack(ogf, ocf)       (__u16) ((ocf & 0x03ff)|(ogf << 10))
1184#define hci_opcode_ogf(op)              (op >> 10)
1185#define hci_opcode_ocf(op)              (op & 0x03ff)
1186
1187/* ACL handle and flags pack/unpack */
1188#define hci_handle_pack(h, f)   (__u16) ((h & 0x0fff)|(f << 12))
1189#define hci_handle(h)           (h & 0x0fff)
1190#define hci_flags(h)            (h >> 12)
1191
1192/* ---- HCI Sockets ---- */
1193
1194/* Socket options */
1195#define HCI_DATA_DIR    1
1196#define HCI_FILTER      2
1197#define HCI_TIME_STAMP  3
1198
1199/* CMSG flags */
1200#define HCI_CMSG_DIR    0x0001
1201#define HCI_CMSG_TSTAMP 0x0002
1202
1203struct sockaddr_hci {
1204        sa_family_t    hci_family;
1205        unsigned short hci_dev;
1206        unsigned short hci_channel;
1207};
1208#define HCI_DEV_NONE    0xffff
1209
1210#define HCI_CHANNEL_RAW         0
1211#define HCI_CHANNEL_CONTROL     1
1212
1213struct hci_filter {
1214        unsigned long type_mask;
1215        unsigned long event_mask[2];
1216        __le16 opcode;
1217};
1218
1219struct hci_ufilter {
1220        __u32  type_mask;
1221        __u32  event_mask[2];
1222        __le16 opcode;
1223};
1224
1225#define HCI_FLT_TYPE_BITS       31
1226#define HCI_FLT_EVENT_BITS      63
1227#define HCI_FLT_OGF_BITS        63
1228#define HCI_FLT_OCF_BITS        127
1229
1230/* ---- HCI Ioctl requests structures ---- */
1231struct hci_dev_stats {
1232        __u32 err_rx;
1233        __u32 err_tx;
1234        __u32 cmd_tx;
1235        __u32 evt_rx;
1236        __u32 acl_tx;
1237        __u32 acl_rx;
1238        __u32 sco_tx;
1239        __u32 sco_rx;
1240        __u32 byte_rx;
1241        __u32 byte_tx;
1242};
1243
1244struct hci_dev_info {
1245        __u16 dev_id;
1246        char  name[8];
1247
1248        bdaddr_t bdaddr;
1249
1250        __u32 flags;
1251        __u8  type;
1252
1253        __u8  features[8];
1254
1255        __u32 pkt_type;
1256        __u32 link_policy;
1257        __u32 link_mode;
1258
1259        __u16 acl_mtu;
1260        __u16 acl_pkts;
1261        __u16 sco_mtu;
1262        __u16 sco_pkts;
1263
1264        struct hci_dev_stats stat;
1265};
1266
1267struct hci_conn_info {
1268        __u16    handle;
1269        bdaddr_t bdaddr;
1270        __u8     type;
1271        __u8     out;
1272        __u16    state;
1273        __u32    link_mode;
1274};
1275
1276struct hci_dev_req {
1277        __u16  dev_id;
1278        __u32  dev_opt;
1279};
1280
1281struct hci_dev_list_req {
1282        __u16  dev_num;
1283        struct hci_dev_req dev_req[0];  /* hci_dev_req structures */
1284};
1285
1286struct hci_conn_list_req {
1287        __u16  dev_id;
1288        __u16  conn_num;
1289        struct hci_conn_info conn_info[0];
1290};
1291
1292struct hci_conn_info_req {
1293        bdaddr_t bdaddr;
1294        __u8     type;
1295        struct   hci_conn_info conn_info[0];
1296};
1297
1298struct hci_auth_info_req {
1299        bdaddr_t bdaddr;
1300        __u8     type;
1301};
1302
1303struct hci_inquiry_req {
1304        __u16 dev_id;
1305        __u16 flags;
1306        __u8  lap[3];
1307        __u8  length;
1308        __u8  num_rsp;
1309};
1310#define IREQ_CACHE_FLUSH 0x0001
1311
1312#endif /* __HCI_H */
1313