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#define HCI_LINK_KEY_SIZE       16
  34#define HCI_AMP_LINK_KEY_SIZE   (2 * HCI_LINK_KEY_SIZE)
  35
  36#define HCI_MAX_AMP_ASSOC_SIZE  672
  37
  38/* HCI dev events */
  39#define HCI_DEV_REG                     1
  40#define HCI_DEV_UNREG                   2
  41#define HCI_DEV_UP                      3
  42#define HCI_DEV_DOWN                    4
  43#define HCI_DEV_SUSPEND                 5
  44#define HCI_DEV_RESUME                  6
  45
  46/* HCI notify events */
  47#define HCI_NOTIFY_CONN_ADD             1
  48#define HCI_NOTIFY_CONN_DEL             2
  49#define HCI_NOTIFY_VOICE_SETTING        3
  50
  51/* HCI bus types */
  52#define HCI_VIRTUAL     0
  53#define HCI_USB         1
  54#define HCI_PCCARD      2
  55#define HCI_UART        3
  56#define HCI_RS232       4
  57#define HCI_PCI         5
  58#define HCI_SDIO        6
  59
  60/* HCI controller types */
  61#define HCI_BREDR       0x00
  62#define HCI_AMP         0x01
  63
  64/* First BR/EDR Controller shall have ID = 0 */
  65#define HCI_BREDR_ID    0
  66
  67/* AMP controller status */
  68#define AMP_CTRL_POWERED_DOWN                   0x00
  69#define AMP_CTRL_BLUETOOTH_ONLY                 0x01
  70#define AMP_CTRL_NO_CAPACITY                    0x02
  71#define AMP_CTRL_LOW_CAPACITY                   0x03
  72#define AMP_CTRL_MEDIUM_CAPACITY                0x04
  73#define AMP_CTRL_HIGH_CAPACITY                  0x05
  74#define AMP_CTRL_FULL_CAPACITY                  0x06
  75
  76/* HCI device quirks */
  77enum {
  78        HCI_QUIRK_RESET_ON_CLOSE,
  79        HCI_QUIRK_RAW_DEVICE,
  80        HCI_QUIRK_FIXUP_BUFFER_SIZE
  81};
  82
  83/* HCI device flags */
  84enum {
  85        HCI_UP,
  86        HCI_INIT,
  87        HCI_RUNNING,
  88
  89        HCI_PSCAN,
  90        HCI_ISCAN,
  91        HCI_AUTH,
  92        HCI_ENCRYPT,
  93        HCI_INQUIRY,
  94
  95        HCI_RAW,
  96
  97        HCI_RESET,
  98};
  99
 100/*
 101 * BR/EDR and/or LE controller flags: the flags defined here should represent
 102 * states from the controller.
 103 */
 104enum {
 105        HCI_SETUP,
 106        HCI_AUTO_OFF,
 107        HCI_MGMT,
 108        HCI_PAIRABLE,
 109        HCI_SERVICE_CACHE,
 110        HCI_LINK_KEYS,
 111        HCI_DEBUG_KEYS,
 112        HCI_UNREGISTER,
 113
 114        HCI_LE_SCAN,
 115        HCI_SSP_ENABLED,
 116        HCI_HS_ENABLED,
 117        HCI_LE_ENABLED,
 118        HCI_LE_PERIPHERAL,
 119        HCI_CONNECTABLE,
 120        HCI_DISCOVERABLE,
 121        HCI_LINK_SECURITY,
 122        HCI_PENDING_CLASS,
 123        HCI_PERIODIC_INQ,
 124};
 125
 126/* HCI ioctl defines */
 127#define HCIDEVUP        _IOW('H', 201, int)
 128#define HCIDEVDOWN      _IOW('H', 202, int)
 129#define HCIDEVRESET     _IOW('H', 203, int)
 130#define HCIDEVRESTAT    _IOW('H', 204, int)
 131
 132#define HCIGETDEVLIST   _IOR('H', 210, int)
 133#define HCIGETDEVINFO   _IOR('H', 211, int)
 134#define HCIGETCONNLIST  _IOR('H', 212, int)
 135#define HCIGETCONNINFO  _IOR('H', 213, int)
 136#define HCIGETAUTHINFO  _IOR('H', 215, int)
 137
 138#define HCISETRAW       _IOW('H', 220, int)
 139#define HCISETSCAN      _IOW('H', 221, int)
 140#define HCISETAUTH      _IOW('H', 222, int)
 141#define HCISETENCRYPT   _IOW('H', 223, int)
 142#define HCISETPTYPE     _IOW('H', 224, int)
 143#define HCISETLINKPOL   _IOW('H', 225, int)
 144#define HCISETLINKMODE  _IOW('H', 226, int)
 145#define HCISETACLMTU    _IOW('H', 227, int)
 146#define HCISETSCOMTU    _IOW('H', 228, int)
 147
 148#define HCIBLOCKADDR    _IOW('H', 230, int)
 149#define HCIUNBLOCKADDR  _IOW('H', 231, int)
 150
 151#define HCIINQUIRY      _IOR('H', 240, int)
 152
 153/* HCI timeouts */
 154#define HCI_DISCONN_TIMEOUT     msecs_to_jiffies(2000)  /* 2 seconds */
 155#define HCI_PAIRING_TIMEOUT     msecs_to_jiffies(60000) /* 60 seconds */
 156#define HCI_INIT_TIMEOUT        msecs_to_jiffies(10000) /* 10 seconds */
 157#define HCI_CMD_TIMEOUT         msecs_to_jiffies(2000)  /* 2 seconds */
 158#define HCI_ACL_TX_TIMEOUT      msecs_to_jiffies(45000) /* 45 seconds */
 159#define HCI_AUTO_OFF_TIMEOUT    msecs_to_jiffies(2000)  /* 2 seconds */
 160
 161/* HCI data types */
 162#define HCI_COMMAND_PKT         0x01
 163#define HCI_ACLDATA_PKT         0x02
 164#define HCI_SCODATA_PKT         0x03
 165#define HCI_EVENT_PKT           0x04
 166#define HCI_VENDOR_PKT          0xff
 167
 168/* HCI packet types */
 169#define HCI_DM1         0x0008
 170#define HCI_DM3         0x0400
 171#define HCI_DM5         0x4000
 172#define HCI_DH1         0x0010
 173#define HCI_DH3         0x0800
 174#define HCI_DH5         0x8000
 175
 176#define HCI_HV1         0x0020
 177#define HCI_HV2         0x0040
 178#define HCI_HV3         0x0080
 179
 180#define SCO_PTYPE_MASK  (HCI_HV1 | HCI_HV2 | HCI_HV3)
 181#define ACL_PTYPE_MASK  (~SCO_PTYPE_MASK)
 182
 183/* eSCO packet types */
 184#define ESCO_HV1        0x0001
 185#define ESCO_HV2        0x0002
 186#define ESCO_HV3        0x0004
 187#define ESCO_EV3        0x0008
 188#define ESCO_EV4        0x0010
 189#define ESCO_EV5        0x0020
 190#define ESCO_2EV3       0x0040
 191#define ESCO_3EV3       0x0080
 192#define ESCO_2EV5       0x0100
 193#define ESCO_3EV5       0x0200
 194
 195#define SCO_ESCO_MASK  (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
 196#define EDR_ESCO_MASK  (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
 197
 198/* ACL flags */
 199#define ACL_START_NO_FLUSH      0x00
 200#define ACL_CONT                0x01
 201#define ACL_START               0x02
 202#define ACL_COMPLETE            0x03
 203#define ACL_ACTIVE_BCAST        0x04
 204#define ACL_PICO_BCAST          0x08
 205
 206/* Baseband links */
 207#define SCO_LINK        0x00
 208#define ACL_LINK        0x01
 209#define ESCO_LINK       0x02
 210/* Low Energy links do not have defined link type. Use invented one */
 211#define LE_LINK         0x80
 212#define AMP_LINK        0x81
 213
 214/* LMP features */
 215#define LMP_3SLOT       0x01
 216#define LMP_5SLOT       0x02
 217#define LMP_ENCRYPT     0x04
 218#define LMP_SOFFSET     0x08
 219#define LMP_TACCURACY   0x10
 220#define LMP_RSWITCH     0x20
 221#define LMP_HOLD        0x40
 222#define LMP_SNIFF       0x80
 223
 224#define LMP_PARK        0x01
 225#define LMP_RSSI        0x02
 226#define LMP_QUALITY     0x04
 227#define LMP_SCO         0x08
 228#define LMP_HV2         0x10
 229#define LMP_HV3         0x20
 230#define LMP_ULAW        0x40
 231#define LMP_ALAW        0x80
 232
 233#define LMP_CVSD        0x01
 234#define LMP_PSCHEME     0x02
 235#define LMP_PCONTROL    0x04
 236
 237#define LMP_RSSI_INQ    0x40
 238#define LMP_ESCO        0x80
 239
 240#define LMP_EV4         0x01
 241#define LMP_EV5         0x02
 242#define LMP_NO_BREDR    0x20
 243#define LMP_LE          0x40
 244
 245#define LMP_SNIFF_SUBR  0x02
 246#define LMP_PAUSE_ENC   0x04
 247#define LMP_EDR_ESCO_2M 0x20
 248#define LMP_EDR_ESCO_3M 0x40
 249#define LMP_EDR_3S_ESCO 0x80
 250
 251#define LMP_EXT_INQ     0x01
 252#define LMP_SIMUL_LE_BR 0x02
 253#define LMP_SIMPLE_PAIR 0x08
 254#define LMP_NO_FLUSH    0x40
 255
 256#define LMP_LSTO        0x01
 257#define LMP_INQ_TX_PWR  0x02
 258#define LMP_EXTFEATURES 0x80
 259
 260/* Extended LMP features */
 261#define LMP_HOST_SSP            0x01
 262#define LMP_HOST_LE             0x02
 263#define LMP_HOST_LE_BREDR       0x04
 264
 265/* Connection modes */
 266#define HCI_CM_ACTIVE   0x0000
 267#define HCI_CM_HOLD     0x0001
 268#define HCI_CM_SNIFF    0x0002
 269#define HCI_CM_PARK     0x0003
 270
 271/* Link policies */
 272#define HCI_LP_RSWITCH  0x0001
 273#define HCI_LP_HOLD     0x0002
 274#define HCI_LP_SNIFF    0x0004
 275#define HCI_LP_PARK     0x0008
 276
 277/* Link modes */
 278#define HCI_LM_ACCEPT   0x8000
 279#define HCI_LM_MASTER   0x0001
 280#define HCI_LM_AUTH     0x0002
 281#define HCI_LM_ENCRYPT  0x0004
 282#define HCI_LM_TRUSTED  0x0008
 283#define HCI_LM_RELIABLE 0x0010
 284#define HCI_LM_SECURE   0x0020
 285
 286/* Authentication types */
 287#define HCI_AT_NO_BONDING               0x00
 288#define HCI_AT_NO_BONDING_MITM          0x01
 289#define HCI_AT_DEDICATED_BONDING        0x02
 290#define HCI_AT_DEDICATED_BONDING_MITM   0x03
 291#define HCI_AT_GENERAL_BONDING          0x04
 292#define HCI_AT_GENERAL_BONDING_MITM     0x05
 293
 294/* Link Key types */
 295#define HCI_LK_COMBINATION              0x00
 296#define HCI_LK_LOCAL_UNIT               0x01
 297#define HCI_LK_REMOTE_UNIT              0x02
 298#define HCI_LK_DEBUG_COMBINATION        0x03
 299#define HCI_LK_UNAUTH_COMBINATION       0x04
 300#define HCI_LK_AUTH_COMBINATION         0x05
 301#define HCI_LK_CHANGED_COMBINATION      0x06
 302/* The spec doesn't define types for SMP keys, the _MASTER suffix is implied */
 303#define HCI_SMP_STK                     0x80
 304#define HCI_SMP_STK_SLAVE               0x81
 305#define HCI_SMP_LTK                     0x82
 306#define HCI_SMP_LTK_SLAVE               0x83
 307
 308/* ---- HCI Error Codes ---- */
 309#define HCI_ERROR_AUTH_FAILURE          0x05
 310#define HCI_ERROR_CONNECTION_TIMEOUT    0x08
 311#define HCI_ERROR_REJ_BAD_ADDR          0x0f
 312#define HCI_ERROR_REMOTE_USER_TERM      0x13
 313#define HCI_ERROR_REMOTE_LOW_RESOURCES  0x14
 314#define HCI_ERROR_REMOTE_POWER_OFF      0x15
 315#define HCI_ERROR_LOCAL_HOST_TERM       0x16
 316#define HCI_ERROR_PAIRING_NOT_ALLOWED   0x18
 317
 318/* Flow control modes */
 319#define HCI_FLOW_CTL_MODE_PACKET_BASED  0x00
 320#define HCI_FLOW_CTL_MODE_BLOCK_BASED   0x01
 321
 322/* The core spec defines 127 as the "not available" value */
 323#define HCI_TX_POWER_INVALID    127
 324
 325/* Extended Inquiry Response field types */
 326#define EIR_FLAGS               0x01 /* flags */
 327#define EIR_UUID16_SOME         0x02 /* 16-bit UUID, more available */
 328#define EIR_UUID16_ALL          0x03 /* 16-bit UUID, all listed */
 329#define EIR_UUID32_SOME         0x04 /* 32-bit UUID, more available */
 330#define EIR_UUID32_ALL          0x05 /* 32-bit UUID, all listed */
 331#define EIR_UUID128_SOME        0x06 /* 128-bit UUID, more available */
 332#define EIR_UUID128_ALL         0x07 /* 128-bit UUID, all listed */
 333#define EIR_NAME_SHORT          0x08 /* shortened local name */
 334#define EIR_NAME_COMPLETE       0x09 /* complete local name */
 335#define EIR_TX_POWER            0x0A /* transmit power level */
 336#define EIR_CLASS_OF_DEV        0x0D /* Class of Device */
 337#define EIR_SSP_HASH_C          0x0E /* Simple Pairing Hash C */
 338#define EIR_SSP_RAND_R          0x0F /* Simple Pairing Randomizer R */
 339#define EIR_DEVICE_ID           0x10 /* device ID */
 340
 341/* Low Energy Advertising Flags */
 342#define LE_AD_LIMITED           0x01 /* Limited Discoverable */
 343#define LE_AD_GENERAL           0x02 /* General Discoverable */
 344#define LE_AD_NO_BREDR          0x04 /* BR/EDR not supported */
 345#define LE_AD_SIM_LE_BREDR_CTRL 0x08 /* Simultaneous LE & BR/EDR Controller */
 346#define LE_AD_SIM_LE_BREDR_HOST 0x10 /* Simultaneous LE & BR/EDR Host */
 347
 348/* -----  HCI Commands ---- */
 349#define HCI_OP_NOP                      0x0000
 350
 351#define HCI_OP_INQUIRY                  0x0401
 352struct hci_cp_inquiry {
 353        __u8     lap[3];
 354        __u8     length;
 355        __u8     num_rsp;
 356} __packed;
 357
 358#define HCI_OP_INQUIRY_CANCEL           0x0402
 359
 360#define HCI_OP_PERIODIC_INQ             0x0403
 361
 362#define HCI_OP_EXIT_PERIODIC_INQ        0x0404
 363
 364#define HCI_OP_CREATE_CONN              0x0405
 365struct hci_cp_create_conn {
 366        bdaddr_t bdaddr;
 367        __le16   pkt_type;
 368        __u8     pscan_rep_mode;
 369        __u8     pscan_mode;
 370        __le16   clock_offset;
 371        __u8     role_switch;
 372} __packed;
 373
 374#define HCI_OP_DISCONNECT               0x0406
 375struct hci_cp_disconnect {
 376        __le16   handle;
 377        __u8     reason;
 378} __packed;
 379
 380#define HCI_OP_ADD_SCO                  0x0407
 381struct hci_cp_add_sco {
 382        __le16   handle;
 383        __le16   pkt_type;
 384} __packed;
 385
 386#define HCI_OP_CREATE_CONN_CANCEL       0x0408
 387struct hci_cp_create_conn_cancel {
 388        bdaddr_t bdaddr;
 389} __packed;
 390
 391#define HCI_OP_ACCEPT_CONN_REQ          0x0409
 392struct hci_cp_accept_conn_req {
 393        bdaddr_t bdaddr;
 394        __u8     role;
 395} __packed;
 396
 397#define HCI_OP_REJECT_CONN_REQ          0x040a
 398struct hci_cp_reject_conn_req {
 399        bdaddr_t bdaddr;
 400        __u8     reason;
 401} __packed;
 402
 403#define HCI_OP_LINK_KEY_REPLY           0x040b
 404struct hci_cp_link_key_reply {
 405        bdaddr_t bdaddr;
 406        __u8     link_key[HCI_LINK_KEY_SIZE];
 407} __packed;
 408
 409#define HCI_OP_LINK_KEY_NEG_REPLY       0x040c
 410struct hci_cp_link_key_neg_reply {
 411        bdaddr_t bdaddr;
 412} __packed;
 413
 414#define HCI_OP_PIN_CODE_REPLY           0x040d
 415struct hci_cp_pin_code_reply {
 416        bdaddr_t bdaddr;
 417        __u8     pin_len;
 418        __u8     pin_code[16];
 419} __packed;
 420struct hci_rp_pin_code_reply {
 421        __u8     status;
 422        bdaddr_t bdaddr;
 423} __packed;
 424
 425#define HCI_OP_PIN_CODE_NEG_REPLY       0x040e
 426struct hci_cp_pin_code_neg_reply {
 427        bdaddr_t bdaddr;
 428} __packed;
 429struct hci_rp_pin_code_neg_reply {
 430        __u8     status;
 431        bdaddr_t bdaddr;
 432} __packed;
 433
 434#define HCI_OP_CHANGE_CONN_PTYPE        0x040f
 435struct hci_cp_change_conn_ptype {
 436        __le16   handle;
 437        __le16   pkt_type;
 438} __packed;
 439
 440#define HCI_OP_AUTH_REQUESTED           0x0411
 441struct hci_cp_auth_requested {
 442        __le16   handle;
 443} __packed;
 444
 445#define HCI_OP_SET_CONN_ENCRYPT         0x0413
 446struct hci_cp_set_conn_encrypt {
 447        __le16   handle;
 448        __u8     encrypt;
 449} __packed;
 450
 451#define HCI_OP_CHANGE_CONN_LINK_KEY     0x0415
 452struct hci_cp_change_conn_link_key {
 453        __le16   handle;
 454} __packed;
 455
 456#define HCI_OP_REMOTE_NAME_REQ          0x0419
 457struct hci_cp_remote_name_req {
 458        bdaddr_t bdaddr;
 459        __u8     pscan_rep_mode;
 460        __u8     pscan_mode;
 461        __le16   clock_offset;
 462} __packed;
 463
 464#define HCI_OP_REMOTE_NAME_REQ_CANCEL   0x041a
 465struct hci_cp_remote_name_req_cancel {
 466        bdaddr_t bdaddr;
 467} __packed;
 468
 469#define HCI_OP_READ_REMOTE_FEATURES     0x041b
 470struct hci_cp_read_remote_features {
 471        __le16   handle;
 472} __packed;
 473
 474#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
 475struct hci_cp_read_remote_ext_features {
 476        __le16   handle;
 477        __u8     page;
 478} __packed;
 479
 480#define HCI_OP_READ_REMOTE_VERSION      0x041d
 481struct hci_cp_read_remote_version {
 482        __le16   handle;
 483} __packed;
 484
 485#define HCI_OP_SETUP_SYNC_CONN          0x0428
 486struct hci_cp_setup_sync_conn {
 487        __le16   handle;
 488        __le32   tx_bandwidth;
 489        __le32   rx_bandwidth;
 490        __le16   max_latency;
 491        __le16   voice_setting;
 492        __u8     retrans_effort;
 493        __le16   pkt_type;
 494} __packed;
 495
 496#define HCI_OP_ACCEPT_SYNC_CONN_REQ     0x0429
 497struct hci_cp_accept_sync_conn_req {
 498        bdaddr_t bdaddr;
 499        __le32   tx_bandwidth;
 500        __le32   rx_bandwidth;
 501        __le16   max_latency;
 502        __le16   content_format;
 503        __u8     retrans_effort;
 504        __le16   pkt_type;
 505} __packed;
 506
 507#define HCI_OP_REJECT_SYNC_CONN_REQ     0x042a
 508struct hci_cp_reject_sync_conn_req {
 509        bdaddr_t bdaddr;
 510        __u8     reason;
 511} __packed;
 512
 513#define HCI_OP_IO_CAPABILITY_REPLY      0x042b
 514struct hci_cp_io_capability_reply {
 515        bdaddr_t bdaddr;
 516        __u8     capability;
 517        __u8     oob_data;
 518        __u8     authentication;
 519} __packed;
 520
 521#define HCI_OP_USER_CONFIRM_REPLY               0x042c
 522struct hci_cp_user_confirm_reply {
 523        bdaddr_t bdaddr;
 524} __packed;
 525struct hci_rp_user_confirm_reply {
 526        __u8     status;
 527        bdaddr_t bdaddr;
 528} __packed;
 529
 530#define HCI_OP_USER_CONFIRM_NEG_REPLY   0x042d
 531
 532#define HCI_OP_USER_PASSKEY_REPLY               0x042e
 533struct hci_cp_user_passkey_reply {
 534        bdaddr_t bdaddr;
 535        __le32  passkey;
 536} __packed;
 537
 538#define HCI_OP_USER_PASSKEY_NEG_REPLY   0x042f
 539
 540#define HCI_OP_REMOTE_OOB_DATA_REPLY    0x0430
 541struct hci_cp_remote_oob_data_reply {
 542        bdaddr_t bdaddr;
 543        __u8     hash[16];
 544        __u8     randomizer[16];
 545} __packed;
 546
 547#define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY        0x0433
 548struct hci_cp_remote_oob_data_neg_reply {
 549        bdaddr_t bdaddr;
 550} __packed;
 551
 552#define HCI_OP_IO_CAPABILITY_NEG_REPLY  0x0434
 553struct hci_cp_io_capability_neg_reply {
 554        bdaddr_t bdaddr;
 555        __u8     reason;
 556} __packed;
 557
 558#define HCI_OP_CREATE_PHY_LINK          0x0435
 559struct hci_cp_create_phy_link {
 560        __u8     phy_handle;
 561        __u8     key_len;
 562        __u8     key_type;
 563        __u8     key[HCI_AMP_LINK_KEY_SIZE];
 564} __packed;
 565
 566#define HCI_OP_ACCEPT_PHY_LINK          0x0436
 567struct hci_cp_accept_phy_link {
 568        __u8     phy_handle;
 569        __u8     key_len;
 570        __u8     key_type;
 571        __u8     key[HCI_AMP_LINK_KEY_SIZE];
 572} __packed;
 573
 574#define HCI_OP_DISCONN_PHY_LINK         0x0437
 575struct hci_cp_disconn_phy_link {
 576        __u8     phy_handle;
 577        __u8     reason;
 578} __packed;
 579
 580struct ext_flow_spec {
 581        __u8       id;
 582        __u8       stype;
 583        __le16     msdu;
 584        __le32     sdu_itime;
 585        __le32     acc_lat;
 586        __le32     flush_to;
 587} __packed;
 588
 589#define HCI_OP_CREATE_LOGICAL_LINK      0x0438
 590#define HCI_OP_ACCEPT_LOGICAL_LINK      0x0439
 591struct hci_cp_create_accept_logical_link {
 592        __u8                  phy_handle;
 593        struct ext_flow_spec  tx_flow_spec;
 594        struct ext_flow_spec  rx_flow_spec;
 595} __packed;
 596
 597#define HCI_OP_DISCONN_LOGICAL_LINK     0x043a
 598struct hci_cp_disconn_logical_link {
 599        __le16   log_handle;
 600} __packed;
 601
 602#define HCI_OP_LOGICAL_LINK_CANCEL      0x043b
 603struct hci_cp_logical_link_cancel {
 604        __u8     phy_handle;
 605        __u8     flow_spec_id;
 606} __packed;
 607
 608struct hci_rp_logical_link_cancel {
 609        __u8     status;
 610        __u8     phy_handle;
 611        __u8     flow_spec_id;
 612} __packed;
 613
 614#define HCI_OP_SNIFF_MODE               0x0803
 615struct hci_cp_sniff_mode {
 616        __le16   handle;
 617        __le16   max_interval;
 618        __le16   min_interval;
 619        __le16   attempt;
 620        __le16   timeout;
 621} __packed;
 622
 623#define HCI_OP_EXIT_SNIFF_MODE          0x0804
 624struct hci_cp_exit_sniff_mode {
 625        __le16   handle;
 626} __packed;
 627
 628#define HCI_OP_ROLE_DISCOVERY           0x0809
 629struct hci_cp_role_discovery {
 630        __le16   handle;
 631} __packed;
 632struct hci_rp_role_discovery {
 633        __u8     status;
 634        __le16   handle;
 635        __u8     role;
 636} __packed;
 637
 638#define HCI_OP_SWITCH_ROLE              0x080b
 639struct hci_cp_switch_role {
 640        bdaddr_t bdaddr;
 641        __u8     role;
 642} __packed;
 643
 644#define HCI_OP_READ_LINK_POLICY         0x080c
 645struct hci_cp_read_link_policy {
 646        __le16   handle;
 647} __packed;
 648struct hci_rp_read_link_policy {
 649        __u8     status;
 650        __le16   handle;
 651        __le16   policy;
 652} __packed;
 653
 654#define HCI_OP_WRITE_LINK_POLICY        0x080d
 655struct hci_cp_write_link_policy {
 656        __le16   handle;
 657        __le16   policy;
 658} __packed;
 659struct hci_rp_write_link_policy {
 660        __u8     status;
 661        __le16   handle;
 662} __packed;
 663
 664#define HCI_OP_READ_DEF_LINK_POLICY     0x080e
 665struct hci_rp_read_def_link_policy {
 666        __u8     status;
 667        __le16   policy;
 668} __packed;
 669
 670#define HCI_OP_WRITE_DEF_LINK_POLICY    0x080f
 671struct hci_cp_write_def_link_policy {
 672        __le16   policy;
 673} __packed;
 674
 675#define HCI_OP_SNIFF_SUBRATE            0x0811
 676struct hci_cp_sniff_subrate {
 677        __le16   handle;
 678        __le16   max_latency;
 679        __le16   min_remote_timeout;
 680        __le16   min_local_timeout;
 681} __packed;
 682
 683#define HCI_OP_SET_EVENT_MASK           0x0c01
 684struct hci_cp_set_event_mask {
 685        __u8     mask[8];
 686} __packed;
 687
 688#define HCI_OP_RESET                    0x0c03
 689
 690#define HCI_OP_SET_EVENT_FLT            0x0c05
 691struct hci_cp_set_event_flt {
 692        __u8     flt_type;
 693        __u8     cond_type;
 694        __u8     condition[0];
 695} __packed;
 696
 697/* Filter types */
 698#define HCI_FLT_CLEAR_ALL       0x00
 699#define HCI_FLT_INQ_RESULT      0x01
 700#define HCI_FLT_CONN_SETUP      0x02
 701
 702/* CONN_SETUP Condition types */
 703#define HCI_CONN_SETUP_ALLOW_ALL        0x00
 704#define HCI_CONN_SETUP_ALLOW_CLASS      0x01
 705#define HCI_CONN_SETUP_ALLOW_BDADDR     0x02
 706
 707/* CONN_SETUP Conditions */
 708#define HCI_CONN_SETUP_AUTO_OFF 0x01
 709#define HCI_CONN_SETUP_AUTO_ON  0x02
 710
 711#define HCI_OP_DELETE_STORED_LINK_KEY   0x0c12
 712struct hci_cp_delete_stored_link_key {
 713        bdaddr_t bdaddr;
 714        __u8     delete_all;
 715} __packed;
 716
 717#define HCI_MAX_NAME_LENGTH             248
 718
 719#define HCI_OP_WRITE_LOCAL_NAME         0x0c13
 720struct hci_cp_write_local_name {
 721        __u8     name[HCI_MAX_NAME_LENGTH];
 722} __packed;
 723
 724#define HCI_OP_READ_LOCAL_NAME          0x0c14
 725struct hci_rp_read_local_name {
 726        __u8     status;
 727        __u8     name[HCI_MAX_NAME_LENGTH];
 728} __packed;
 729
 730#define HCI_OP_WRITE_CA_TIMEOUT         0x0c16
 731
 732#define HCI_OP_WRITE_PG_TIMEOUT         0x0c18
 733
 734#define HCI_OP_WRITE_SCAN_ENABLE        0x0c1a
 735        #define SCAN_DISABLED           0x00
 736        #define SCAN_INQUIRY            0x01
 737        #define SCAN_PAGE               0x02
 738
 739#define HCI_OP_READ_AUTH_ENABLE         0x0c1f
 740
 741#define HCI_OP_WRITE_AUTH_ENABLE        0x0c20
 742        #define AUTH_DISABLED           0x00
 743        #define AUTH_ENABLED            0x01
 744
 745#define HCI_OP_READ_ENCRYPT_MODE        0x0c21
 746
 747#define HCI_OP_WRITE_ENCRYPT_MODE       0x0c22
 748        #define ENCRYPT_DISABLED        0x00
 749        #define ENCRYPT_P2P             0x01
 750        #define ENCRYPT_BOTH            0x02
 751
 752#define HCI_OP_READ_CLASS_OF_DEV        0x0c23
 753struct hci_rp_read_class_of_dev {
 754        __u8     status;
 755        __u8     dev_class[3];
 756} __packed;
 757
 758#define HCI_OP_WRITE_CLASS_OF_DEV       0x0c24
 759struct hci_cp_write_class_of_dev {
 760        __u8     dev_class[3];
 761} __packed;
 762
 763#define HCI_OP_READ_VOICE_SETTING       0x0c25
 764struct hci_rp_read_voice_setting {
 765        __u8     status;
 766        __le16   voice_setting;
 767} __packed;
 768
 769#define HCI_OP_WRITE_VOICE_SETTING      0x0c26
 770struct hci_cp_write_voice_setting {
 771        __le16   voice_setting;
 772} __packed;
 773
 774#define HCI_OP_HOST_BUFFER_SIZE         0x0c33
 775struct hci_cp_host_buffer_size {
 776        __le16   acl_mtu;
 777        __u8     sco_mtu;
 778        __le16   acl_max_pkt;
 779        __le16   sco_max_pkt;
 780} __packed;
 781
 782#define HCI_OP_WRITE_INQUIRY_MODE       0x0c45
 783
 784#define HCI_MAX_EIR_LENGTH              240
 785
 786#define HCI_OP_WRITE_EIR                0x0c52
 787struct hci_cp_write_eir {
 788        __u8    fec;
 789        __u8    data[HCI_MAX_EIR_LENGTH];
 790} __packed;
 791
 792#define HCI_OP_READ_SSP_MODE            0x0c55
 793struct hci_rp_read_ssp_mode {
 794        __u8     status;
 795        __u8     mode;
 796} __packed;
 797
 798#define HCI_OP_WRITE_SSP_MODE           0x0c56
 799struct hci_cp_write_ssp_mode {
 800        __u8     mode;
 801} __packed;
 802
 803#define HCI_OP_READ_LOCAL_OOB_DATA              0x0c57
 804struct hci_rp_read_local_oob_data {
 805        __u8     status;
 806        __u8     hash[16];
 807        __u8     randomizer[16];
 808} __packed;
 809
 810#define HCI_OP_READ_INQ_RSP_TX_POWER    0x0c58
 811struct hci_rp_read_inq_rsp_tx_power {
 812        __u8     status;
 813        __s8     tx_power;
 814} __packed;
 815
 816#define HCI_OP_READ_FLOW_CONTROL_MODE   0x0c66
 817struct hci_rp_read_flow_control_mode {
 818        __u8     status;
 819        __u8     mode;
 820} __packed;
 821
 822#define HCI_OP_WRITE_LE_HOST_SUPPORTED  0x0c6d
 823struct hci_cp_write_le_host_supported {
 824        __u8    le;
 825        __u8    simul;
 826} __packed;
 827
 828#define HCI_OP_READ_LOCAL_VERSION       0x1001
 829struct hci_rp_read_local_version {
 830        __u8     status;
 831        __u8     hci_ver;
 832        __le16   hci_rev;
 833        __u8     lmp_ver;
 834        __le16   manufacturer;
 835        __le16   lmp_subver;
 836} __packed;
 837
 838#define HCI_OP_READ_LOCAL_COMMANDS      0x1002
 839struct hci_rp_read_local_commands {
 840        __u8     status;
 841        __u8     commands[64];
 842} __packed;
 843
 844#define HCI_OP_READ_LOCAL_FEATURES      0x1003
 845struct hci_rp_read_local_features {
 846        __u8     status;
 847        __u8     features[8];
 848} __packed;
 849
 850#define HCI_OP_READ_LOCAL_EXT_FEATURES  0x1004
 851struct hci_cp_read_local_ext_features {
 852        __u8     page;
 853} __packed;
 854struct hci_rp_read_local_ext_features {
 855        __u8     status;
 856        __u8     page;
 857        __u8     max_page;
 858        __u8     features[8];
 859} __packed;
 860
 861#define HCI_OP_READ_BUFFER_SIZE         0x1005
 862struct hci_rp_read_buffer_size {
 863        __u8     status;
 864        __le16   acl_mtu;
 865        __u8     sco_mtu;
 866        __le16   acl_max_pkt;
 867        __le16   sco_max_pkt;
 868} __packed;
 869
 870#define HCI_OP_READ_BD_ADDR             0x1009
 871struct hci_rp_read_bd_addr {
 872        __u8     status;
 873        bdaddr_t bdaddr;
 874} __packed;
 875
 876#define HCI_OP_READ_DATA_BLOCK_SIZE     0x100a
 877struct hci_rp_read_data_block_size {
 878        __u8     status;
 879        __le16   max_acl_len;
 880        __le16   block_len;
 881        __le16   num_blocks;
 882} __packed;
 883
 884#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
 885struct hci_cp_write_page_scan_activity {
 886        __le16   interval;
 887        __le16   window;
 888} __packed;
 889
 890#define HCI_OP_WRITE_PAGE_SCAN_TYPE     0x0c47
 891        #define PAGE_SCAN_TYPE_STANDARD         0x00
 892        #define PAGE_SCAN_TYPE_INTERLACED       0x01
 893
 894#define HCI_OP_READ_LOCAL_AMP_INFO      0x1409
 895struct hci_rp_read_local_amp_info {
 896        __u8     status;
 897        __u8     amp_status;
 898        __le32   total_bw;
 899        __le32   max_bw;
 900        __le32   min_latency;
 901        __le32   max_pdu;
 902        __u8     amp_type;
 903        __le16   pal_cap;
 904        __le16   max_assoc_size;
 905        __le32   max_flush_to;
 906        __le32   be_flush_to;
 907} __packed;
 908
 909#define HCI_OP_READ_LOCAL_AMP_ASSOC     0x140a
 910struct hci_cp_read_local_amp_assoc {
 911        __u8     phy_handle;
 912        __le16   len_so_far;
 913        __le16   max_len;
 914} __packed;
 915struct hci_rp_read_local_amp_assoc {
 916        __u8     status;
 917        __u8     phy_handle;
 918        __le16   rem_len;
 919        __u8     frag[0];
 920} __packed;
 921
 922#define HCI_OP_WRITE_REMOTE_AMP_ASSOC   0x140b
 923struct hci_cp_write_remote_amp_assoc {
 924        __u8     phy_handle;
 925        __le16   len_so_far;
 926        __le16   rem_len;
 927        __u8     frag[0];
 928} __packed;
 929struct hci_rp_write_remote_amp_assoc {
 930        __u8     status;
 931        __u8     phy_handle;
 932} __packed;
 933
 934#define HCI_OP_LE_SET_EVENT_MASK        0x2001
 935struct hci_cp_le_set_event_mask {
 936        __u8     mask[8];
 937} __packed;
 938
 939#define HCI_OP_LE_READ_BUFFER_SIZE      0x2002
 940struct hci_rp_le_read_buffer_size {
 941        __u8     status;
 942        __le16   le_mtu;
 943        __u8     le_max_pkt;
 944} __packed;
 945
 946#define HCI_OP_LE_READ_LOCAL_FEATURES   0x2003
 947struct hci_rp_le_read_local_features {
 948        __u8     status;
 949        __u8     features[8];
 950} __packed;
 951
 952#define HCI_OP_LE_READ_ADV_TX_POWER     0x2007
 953struct hci_rp_le_read_adv_tx_power {
 954        __u8    status;
 955        __s8    tx_power;
 956} __packed;
 957
 958#define HCI_MAX_AD_LENGTH               31
 959
 960#define HCI_OP_LE_SET_ADV_DATA          0x2008
 961struct hci_cp_le_set_adv_data {
 962        __u8    length;
 963        __u8    data[HCI_MAX_AD_LENGTH];
 964} __packed;
 965
 966#define HCI_OP_LE_SET_ADV_ENABLE        0x200a
 967
 968#define HCI_OP_LE_SET_SCAN_PARAM        0x200b
 969struct hci_cp_le_set_scan_param {
 970        __u8    type;
 971        __le16  interval;
 972        __le16  window;
 973        __u8    own_address_type;
 974        __u8    filter_policy;
 975} __packed;
 976
 977#define LE_SCANNING_DISABLED            0x00
 978#define LE_SCANNING_ENABLED             0x01
 979
 980#define HCI_OP_LE_SET_SCAN_ENABLE       0x200c
 981struct hci_cp_le_set_scan_enable {
 982        __u8     enable;
 983        __u8     filter_dup;
 984} __packed;
 985
 986#define HCI_OP_LE_CREATE_CONN           0x200d
 987struct hci_cp_le_create_conn {
 988        __le16   scan_interval;
 989        __le16   scan_window;
 990        __u8     filter_policy;
 991        __u8     peer_addr_type;
 992        bdaddr_t peer_addr;
 993        __u8     own_address_type;
 994        __le16   conn_interval_min;
 995        __le16   conn_interval_max;
 996        __le16   conn_latency;
 997        __le16   supervision_timeout;
 998        __le16   min_ce_len;
 999        __le16   max_ce_len;
1000} __packed;
1001
1002#define HCI_OP_LE_CREATE_CONN_CANCEL    0x200e
1003
1004#define HCI_OP_LE_READ_WHITE_LIST_SIZE  0x200f
1005struct hci_rp_le_read_white_list_size {
1006        __u8    status;
1007        __u8    size;
1008} __packed;
1009
1010#define HCI_OP_LE_CONN_UPDATE           0x2013
1011struct hci_cp_le_conn_update {
1012        __le16   handle;
1013        __le16   conn_interval_min;
1014        __le16   conn_interval_max;
1015        __le16   conn_latency;
1016        __le16   supervision_timeout;
1017        __le16   min_ce_len;
1018        __le16   max_ce_len;
1019} __packed;
1020
1021#define HCI_OP_LE_START_ENC             0x2019
1022struct hci_cp_le_start_enc {
1023        __le16  handle;
1024        __u8    rand[8];
1025        __le16  ediv;
1026        __u8    ltk[16];
1027} __packed;
1028
1029#define HCI_OP_LE_LTK_REPLY             0x201a
1030struct hci_cp_le_ltk_reply {
1031        __le16  handle;
1032        __u8    ltk[16];
1033} __packed;
1034struct hci_rp_le_ltk_reply {
1035        __u8    status;
1036        __le16  handle;
1037} __packed;
1038
1039#define HCI_OP_LE_LTK_NEG_REPLY         0x201b
1040struct hci_cp_le_ltk_neg_reply {
1041        __le16  handle;
1042} __packed;
1043struct hci_rp_le_ltk_neg_reply {
1044        __u8    status;
1045        __le16  handle;
1046} __packed;
1047
1048#define HCI_OP_LE_READ_SUPPORTED_STATES 0x201c
1049struct hci_rp_le_read_supported_states {
1050        __u8    status;
1051        __u8    le_states[8];
1052} __packed;
1053
1054/* ---- HCI Events ---- */
1055#define HCI_EV_INQUIRY_COMPLETE         0x01
1056
1057#define HCI_EV_INQUIRY_RESULT           0x02
1058struct inquiry_info {
1059        bdaddr_t bdaddr;
1060        __u8     pscan_rep_mode;
1061        __u8     pscan_period_mode;
1062        __u8     pscan_mode;
1063        __u8     dev_class[3];
1064        __le16   clock_offset;
1065} __packed;
1066
1067#define HCI_EV_CONN_COMPLETE            0x03
1068struct hci_ev_conn_complete {
1069        __u8     status;
1070        __le16   handle;
1071        bdaddr_t bdaddr;
1072        __u8     link_type;
1073        __u8     encr_mode;
1074} __packed;
1075
1076#define HCI_EV_CONN_REQUEST             0x04
1077struct hci_ev_conn_request {
1078        bdaddr_t bdaddr;
1079        __u8     dev_class[3];
1080        __u8     link_type;
1081} __packed;
1082
1083#define HCI_EV_DISCONN_COMPLETE         0x05
1084struct hci_ev_disconn_complete {
1085        __u8     status;
1086        __le16   handle;
1087        __u8     reason;
1088} __packed;
1089
1090#define HCI_EV_AUTH_COMPLETE            0x06
1091struct hci_ev_auth_complete {
1092        __u8     status;
1093        __le16   handle;
1094} __packed;
1095
1096#define HCI_EV_REMOTE_NAME              0x07
1097struct hci_ev_remote_name {
1098        __u8     status;
1099        bdaddr_t bdaddr;
1100        __u8     name[HCI_MAX_NAME_LENGTH];
1101} __packed;
1102
1103#define HCI_EV_ENCRYPT_CHANGE           0x08
1104struct hci_ev_encrypt_change {
1105        __u8     status;
1106        __le16   handle;
1107        __u8     encrypt;
1108} __packed;
1109
1110#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
1111struct hci_ev_change_link_key_complete {
1112        __u8     status;
1113        __le16   handle;
1114} __packed;
1115
1116#define HCI_EV_REMOTE_FEATURES          0x0b
1117struct hci_ev_remote_features {
1118        __u8     status;
1119        __le16   handle;
1120        __u8     features[8];
1121} __packed;
1122
1123#define HCI_EV_REMOTE_VERSION           0x0c
1124struct hci_ev_remote_version {
1125        __u8     status;
1126        __le16   handle;
1127        __u8     lmp_ver;
1128        __le16   manufacturer;
1129        __le16   lmp_subver;
1130} __packed;
1131
1132#define HCI_EV_QOS_SETUP_COMPLETE       0x0d
1133struct hci_qos {
1134        __u8     service_type;
1135        __u32    token_rate;
1136        __u32    peak_bandwidth;
1137        __u32    latency;
1138        __u32    delay_variation;
1139} __packed;
1140struct hci_ev_qos_setup_complete {
1141        __u8     status;
1142        __le16   handle;
1143        struct   hci_qos qos;
1144} __packed;
1145
1146#define HCI_EV_CMD_COMPLETE             0x0e
1147struct hci_ev_cmd_complete {
1148        __u8     ncmd;
1149        __le16   opcode;
1150} __packed;
1151
1152#define HCI_EV_CMD_STATUS               0x0f
1153struct hci_ev_cmd_status {
1154        __u8     status;
1155        __u8     ncmd;
1156        __le16   opcode;
1157} __packed;
1158
1159#define HCI_EV_ROLE_CHANGE              0x12
1160struct hci_ev_role_change {
1161        __u8     status;
1162        bdaddr_t bdaddr;
1163        __u8     role;
1164} __packed;
1165
1166#define HCI_EV_NUM_COMP_PKTS            0x13
1167struct hci_comp_pkts_info {
1168        __le16   handle;
1169        __le16   count;
1170} __packed;
1171
1172struct hci_ev_num_comp_pkts {
1173        __u8     num_hndl;
1174        struct hci_comp_pkts_info handles[0];
1175} __packed;
1176
1177#define HCI_EV_MODE_CHANGE              0x14
1178struct hci_ev_mode_change {
1179        __u8     status;
1180        __le16   handle;
1181        __u8     mode;
1182        __le16   interval;
1183} __packed;
1184
1185#define HCI_EV_PIN_CODE_REQ             0x16
1186struct hci_ev_pin_code_req {
1187        bdaddr_t bdaddr;
1188} __packed;
1189
1190#define HCI_EV_LINK_KEY_REQ             0x17
1191struct hci_ev_link_key_req {
1192        bdaddr_t bdaddr;
1193} __packed;
1194
1195#define HCI_EV_LINK_KEY_NOTIFY          0x18
1196struct hci_ev_link_key_notify {
1197        bdaddr_t bdaddr;
1198        __u8     link_key[HCI_LINK_KEY_SIZE];
1199        __u8     key_type;
1200} __packed;
1201
1202#define HCI_EV_CLOCK_OFFSET             0x1c
1203struct hci_ev_clock_offset {
1204        __u8     status;
1205        __le16   handle;
1206        __le16   clock_offset;
1207} __packed;
1208
1209#define HCI_EV_PKT_TYPE_CHANGE          0x1d
1210struct hci_ev_pkt_type_change {
1211        __u8     status;
1212        __le16   handle;
1213        __le16   pkt_type;
1214} __packed;
1215
1216#define HCI_EV_PSCAN_REP_MODE           0x20
1217struct hci_ev_pscan_rep_mode {
1218        bdaddr_t bdaddr;
1219        __u8     pscan_rep_mode;
1220} __packed;
1221
1222#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
1223struct inquiry_info_with_rssi {
1224        bdaddr_t bdaddr;
1225        __u8     pscan_rep_mode;
1226        __u8     pscan_period_mode;
1227        __u8     dev_class[3];
1228        __le16   clock_offset;
1229        __s8     rssi;
1230} __packed;
1231struct inquiry_info_with_rssi_and_pscan_mode {
1232        bdaddr_t bdaddr;
1233        __u8     pscan_rep_mode;
1234        __u8     pscan_period_mode;
1235        __u8     pscan_mode;
1236        __u8     dev_class[3];
1237        __le16   clock_offset;
1238        __s8     rssi;
1239} __packed;
1240
1241#define HCI_EV_REMOTE_EXT_FEATURES      0x23
1242struct hci_ev_remote_ext_features {
1243        __u8     status;
1244        __le16   handle;
1245        __u8     page;
1246        __u8     max_page;
1247        __u8     features[8];
1248} __packed;
1249
1250#define HCI_EV_SYNC_CONN_COMPLETE       0x2c
1251struct hci_ev_sync_conn_complete {
1252        __u8     status;
1253        __le16   handle;
1254        bdaddr_t bdaddr;
1255        __u8     link_type;
1256        __u8     tx_interval;
1257        __u8     retrans_window;
1258        __le16   rx_pkt_len;
1259        __le16   tx_pkt_len;
1260        __u8     air_mode;
1261} __packed;
1262
1263#define HCI_EV_SYNC_CONN_CHANGED        0x2d
1264struct hci_ev_sync_conn_changed {
1265        __u8     status;
1266        __le16   handle;
1267        __u8     tx_interval;
1268        __u8     retrans_window;
1269        __le16   rx_pkt_len;
1270        __le16   tx_pkt_len;
1271} __packed;
1272
1273#define HCI_EV_SNIFF_SUBRATE            0x2e
1274struct hci_ev_sniff_subrate {
1275        __u8     status;
1276        __le16   handle;
1277        __le16   max_tx_latency;
1278        __le16   max_rx_latency;
1279        __le16   max_remote_timeout;
1280        __le16   max_local_timeout;
1281} __packed;
1282
1283#define HCI_EV_EXTENDED_INQUIRY_RESULT  0x2f
1284struct extended_inquiry_info {
1285        bdaddr_t bdaddr;
1286        __u8     pscan_rep_mode;
1287        __u8     pscan_period_mode;
1288        __u8     dev_class[3];
1289        __le16   clock_offset;
1290        __s8     rssi;
1291        __u8     data[240];
1292} __packed;
1293
1294#define HCI_EV_KEY_REFRESH_COMPLETE     0x30
1295struct hci_ev_key_refresh_complete {
1296        __u8    status;
1297        __le16  handle;
1298} __packed;
1299
1300#define HCI_EV_IO_CAPA_REQUEST          0x31
1301struct hci_ev_io_capa_request {
1302        bdaddr_t bdaddr;
1303} __packed;
1304
1305#define HCI_EV_IO_CAPA_REPLY            0x32
1306struct hci_ev_io_capa_reply {
1307        bdaddr_t bdaddr;
1308        __u8     capability;
1309        __u8     oob_data;
1310        __u8     authentication;
1311} __packed;
1312
1313#define HCI_EV_USER_CONFIRM_REQUEST     0x33
1314struct hci_ev_user_confirm_req {
1315        bdaddr_t        bdaddr;
1316        __le32          passkey;
1317} __packed;
1318
1319#define HCI_EV_USER_PASSKEY_REQUEST     0x34
1320struct hci_ev_user_passkey_req {
1321        bdaddr_t        bdaddr;
1322} __packed;
1323
1324#define HCI_EV_REMOTE_OOB_DATA_REQUEST  0x35
1325struct hci_ev_remote_oob_data_request {
1326        bdaddr_t bdaddr;
1327} __packed;
1328
1329#define HCI_EV_SIMPLE_PAIR_COMPLETE     0x36
1330struct hci_ev_simple_pair_complete {
1331        __u8     status;
1332        bdaddr_t bdaddr;
1333} __packed;
1334
1335#define HCI_EV_USER_PASSKEY_NOTIFY      0x3b
1336struct hci_ev_user_passkey_notify {
1337        bdaddr_t        bdaddr;
1338        __le32          passkey;
1339} __packed;
1340
1341#define HCI_KEYPRESS_STARTED            0
1342#define HCI_KEYPRESS_ENTERED            1
1343#define HCI_KEYPRESS_ERASED             2
1344#define HCI_KEYPRESS_CLEARED            3
1345#define HCI_KEYPRESS_COMPLETED          4
1346
1347#define HCI_EV_KEYPRESS_NOTIFY          0x3c
1348struct hci_ev_keypress_notify {
1349        bdaddr_t        bdaddr;
1350        __u8            type;
1351} __packed;
1352
1353#define HCI_EV_REMOTE_HOST_FEATURES     0x3d
1354struct hci_ev_remote_host_features {
1355        bdaddr_t bdaddr;
1356        __u8     features[8];
1357} __packed;
1358
1359#define HCI_EV_LE_META                  0x3e
1360struct hci_ev_le_meta {
1361        __u8     subevent;
1362} __packed;
1363
1364#define HCI_EV_PHY_LINK_COMPLETE        0x40
1365struct hci_ev_phy_link_complete {
1366        __u8     status;
1367        __u8     phy_handle;
1368} __packed;
1369
1370#define HCI_EV_CHANNEL_SELECTED         0x41
1371struct hci_ev_channel_selected {
1372        __u8     phy_handle;
1373} __packed;
1374
1375#define HCI_EV_DISCONN_PHY_LINK_COMPLETE        0x42
1376struct hci_ev_disconn_phy_link_complete {
1377        __u8     status;
1378        __u8     phy_handle;
1379        __u8     reason;
1380} __packed;
1381
1382#define HCI_EV_LOGICAL_LINK_COMPLETE            0x45
1383struct hci_ev_logical_link_complete {
1384        __u8     status;
1385        __le16   handle;
1386        __u8     phy_handle;
1387        __u8     flow_spec_id;
1388} __packed;
1389
1390#define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE    0x46
1391struct hci_ev_disconn_logical_link_complete {
1392        __u8     status;
1393        __le16   handle;
1394        __u8     reason;
1395} __packed;
1396
1397#define HCI_EV_NUM_COMP_BLOCKS          0x48
1398struct hci_comp_blocks_info {
1399        __le16   handle;
1400        __le16   pkts;
1401        __le16   blocks;
1402} __packed;
1403
1404struct hci_ev_num_comp_blocks {
1405        __le16   num_blocks;
1406        __u8     num_hndl;
1407        struct hci_comp_blocks_info handles[0];
1408} __packed;
1409
1410/* Low energy meta events */
1411#define LE_CONN_ROLE_MASTER     0x00
1412
1413#define HCI_EV_LE_CONN_COMPLETE         0x01
1414struct hci_ev_le_conn_complete {
1415        __u8     status;
1416        __le16   handle;
1417        __u8     role;
1418        __u8     bdaddr_type;
1419        bdaddr_t bdaddr;
1420        __le16   interval;
1421        __le16   latency;
1422        __le16   supervision_timeout;
1423        __u8     clk_accurancy;
1424} __packed;
1425
1426#define HCI_EV_LE_LTK_REQ               0x05
1427struct hci_ev_le_ltk_req {
1428        __le16  handle;
1429        __u8    random[8];
1430        __le16  ediv;
1431} __packed;
1432
1433/* Advertising report event types */
1434#define ADV_IND         0x00
1435#define ADV_DIRECT_IND  0x01
1436#define ADV_SCAN_IND    0x02
1437#define ADV_NONCONN_IND 0x03
1438#define ADV_SCAN_RSP    0x04
1439
1440#define ADDR_LE_DEV_PUBLIC      0x00
1441#define ADDR_LE_DEV_RANDOM      0x01
1442
1443#define HCI_EV_LE_ADVERTISING_REPORT    0x02
1444struct hci_ev_le_advertising_info {
1445        __u8     evt_type;
1446        __u8     bdaddr_type;
1447        bdaddr_t bdaddr;
1448        __u8     length;
1449        __u8     data[0];
1450} __packed;
1451
1452/* Internal events generated by Bluetooth stack */
1453#define HCI_EV_STACK_INTERNAL   0xfd
1454struct hci_ev_stack_internal {
1455        __u16    type;
1456        __u8     data[0];
1457} __packed;
1458
1459#define HCI_EV_SI_DEVICE        0x01
1460struct hci_ev_si_device {
1461        __u16    event;
1462        __u16    dev_id;
1463} __packed;
1464
1465#define HCI_EV_SI_SECURITY      0x02
1466struct hci_ev_si_security {
1467        __u16    event;
1468        __u16    proto;
1469        __u16    subproto;
1470        __u8     incoming;
1471} __packed;
1472
1473/* ---- HCI Packet structures ---- */
1474#define HCI_COMMAND_HDR_SIZE 3
1475#define HCI_EVENT_HDR_SIZE   2
1476#define HCI_ACL_HDR_SIZE     4
1477#define HCI_SCO_HDR_SIZE     3
1478
1479struct hci_command_hdr {
1480        __le16  opcode;         /* OCF & OGF */
1481        __u8    plen;
1482} __packed;
1483
1484struct hci_event_hdr {
1485        __u8    evt;
1486        __u8    plen;
1487} __packed;
1488
1489struct hci_acl_hdr {
1490        __le16  handle;         /* Handle & Flags(PB, BC) */
1491        __le16  dlen;
1492} __packed;
1493
1494struct hci_sco_hdr {
1495        __le16  handle;
1496        __u8    dlen;
1497} __packed;
1498
1499static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1500{
1501        return (struct hci_event_hdr *) skb->data;
1502}
1503
1504static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1505{
1506        return (struct hci_acl_hdr *) skb->data;
1507}
1508
1509static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1510{
1511        return (struct hci_sco_hdr *) skb->data;
1512}
1513
1514/* Command opcode pack/unpack */
1515#define hci_opcode_pack(ogf, ocf)       ((__u16) ((ocf & 0x03ff)|(ogf << 10)))
1516#define hci_opcode_ogf(op)              (op >> 10)
1517#define hci_opcode_ocf(op)              (op & 0x03ff)
1518
1519/* ACL handle and flags pack/unpack */
1520#define hci_handle_pack(h, f)   ((__u16) ((h & 0x0fff)|(f << 12)))
1521#define hci_handle(h)           (h & 0x0fff)
1522#define hci_flags(h)            (h >> 12)
1523
1524/* ---- HCI Sockets ---- */
1525
1526/* Socket options */
1527#define HCI_DATA_DIR    1
1528#define HCI_FILTER      2
1529#define HCI_TIME_STAMP  3
1530
1531/* CMSG flags */
1532#define HCI_CMSG_DIR    0x0001
1533#define HCI_CMSG_TSTAMP 0x0002
1534
1535struct sockaddr_hci {
1536        sa_family_t    hci_family;
1537        unsigned short hci_dev;
1538        unsigned short hci_channel;
1539};
1540#define HCI_DEV_NONE    0xffff
1541
1542#define HCI_CHANNEL_RAW         0
1543#define HCI_CHANNEL_MONITOR     2
1544#define HCI_CHANNEL_CONTROL     3
1545
1546struct hci_filter {
1547        unsigned long type_mask;
1548        unsigned long event_mask[2];
1549        __le16 opcode;
1550};
1551
1552struct hci_ufilter {
1553        __u32  type_mask;
1554        __u32  event_mask[2];
1555        __le16 opcode;
1556};
1557
1558#define HCI_FLT_TYPE_BITS       31
1559#define HCI_FLT_EVENT_BITS      63
1560#define HCI_FLT_OGF_BITS        63
1561#define HCI_FLT_OCF_BITS        127
1562
1563/* ---- HCI Ioctl requests structures ---- */
1564struct hci_dev_stats {
1565        __u32 err_rx;
1566        __u32 err_tx;
1567        __u32 cmd_tx;
1568        __u32 evt_rx;
1569        __u32 acl_tx;
1570        __u32 acl_rx;
1571        __u32 sco_tx;
1572        __u32 sco_rx;
1573        __u32 byte_rx;
1574        __u32 byte_tx;
1575};
1576
1577struct hci_dev_info {
1578        __u16 dev_id;
1579        char  name[8];
1580
1581        bdaddr_t bdaddr;
1582
1583        __u32 flags;
1584        __u8  type;
1585
1586        __u8  features[8];
1587
1588        __u32 pkt_type;
1589        __u32 link_policy;
1590        __u32 link_mode;
1591
1592        __u16 acl_mtu;
1593        __u16 acl_pkts;
1594        __u16 sco_mtu;
1595        __u16 sco_pkts;
1596
1597        struct hci_dev_stats stat;
1598};
1599
1600struct hci_conn_info {
1601        __u16    handle;
1602        bdaddr_t bdaddr;
1603        __u8     type;
1604        __u8     out;
1605        __u16    state;
1606        __u32    link_mode;
1607};
1608
1609struct hci_dev_req {
1610        __u16  dev_id;
1611        __u32  dev_opt;
1612};
1613
1614struct hci_dev_list_req {
1615        __u16  dev_num;
1616        struct hci_dev_req dev_req[0];  /* hci_dev_req structures */
1617};
1618
1619struct hci_conn_list_req {
1620        __u16  dev_id;
1621        __u16  conn_num;
1622        struct hci_conn_info conn_info[0];
1623};
1624
1625struct hci_conn_info_req {
1626        bdaddr_t bdaddr;
1627        __u8     type;
1628        struct   hci_conn_info conn_info[0];
1629};
1630
1631struct hci_auth_info_req {
1632        bdaddr_t bdaddr;
1633        __u8     type;
1634};
1635
1636struct hci_inquiry_req {
1637        __u16 dev_id;
1638        __u16 flags;
1639        __u8  lap[3];
1640        __u8  length;
1641        __u8  num_rsp;
1642};
1643#define IREQ_CACHE_FLUSH 0x0001
1644
1645extern bool enable_hs;
1646
1647#endif /* __HCI_H */
1648