Back to home page

OSCL-LXR

 
 

    


0001 /*
0002    BlueZ - Bluetooth protocol stack for Linux
0003    Copyright (C) 2000-2001 Qualcomm Incorporated
0004 
0005    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
0006 
0007    This program is free software; you can redistribute it and/or modify
0008    it under the terms of the GNU General Public License version 2 as
0009    published by the Free Software Foundation;
0010 
0011    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
0012    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0013    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
0014    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
0015    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
0016    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
0017    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
0018    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
0019 
0020    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
0021    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
0022    SOFTWARE IS DISCLAIMED.
0023 */
0024 
0025 #ifndef __HCI_H
0026 #define __HCI_H
0027 
0028 #define HCI_MAX_ACL_SIZE    1024
0029 #define HCI_MAX_SCO_SIZE    255
0030 #define HCI_MAX_ISO_SIZE    251
0031 #define HCI_MAX_EVENT_SIZE  260
0032 #define HCI_MAX_FRAME_SIZE  (HCI_MAX_ACL_SIZE + 4)
0033 
0034 #define HCI_LINK_KEY_SIZE   16
0035 #define HCI_AMP_LINK_KEY_SIZE   (2 * HCI_LINK_KEY_SIZE)
0036 
0037 #define HCI_MAX_AMP_ASSOC_SIZE  672
0038 
0039 #define HCI_MAX_CPB_DATA_SIZE   252
0040 
0041 /* HCI dev events */
0042 #define HCI_DEV_REG         1
0043 #define HCI_DEV_UNREG           2
0044 #define HCI_DEV_UP          3
0045 #define HCI_DEV_DOWN            4
0046 #define HCI_DEV_SUSPEND         5
0047 #define HCI_DEV_RESUME          6
0048 #define HCI_DEV_OPEN            7
0049 #define HCI_DEV_CLOSE           8
0050 #define HCI_DEV_SETUP           9
0051 
0052 /* HCI notify events */
0053 #define HCI_NOTIFY_CONN_ADD     1
0054 #define HCI_NOTIFY_CONN_DEL     2
0055 #define HCI_NOTIFY_VOICE_SETTING    3
0056 #define HCI_NOTIFY_ENABLE_SCO_CVSD  4
0057 #define HCI_NOTIFY_ENABLE_SCO_TRANSP    5
0058 #define HCI_NOTIFY_DISABLE_SCO      6
0059 
0060 /* HCI bus types */
0061 #define HCI_VIRTUAL 0
0062 #define HCI_USB     1
0063 #define HCI_PCCARD  2
0064 #define HCI_UART    3
0065 #define HCI_RS232   4
0066 #define HCI_PCI     5
0067 #define HCI_SDIO    6
0068 #define HCI_SPI     7
0069 #define HCI_I2C     8
0070 #define HCI_SMD     9
0071 #define HCI_VIRTIO  10
0072 
0073 /* HCI controller types */
0074 #define HCI_PRIMARY 0x00
0075 #define HCI_AMP     0x01
0076 
0077 /* First BR/EDR Controller shall have ID = 0 */
0078 #define AMP_ID_BREDR    0x00
0079 
0080 /* AMP controller types */
0081 #define AMP_TYPE_BREDR  0x00
0082 #define AMP_TYPE_80211  0x01
0083 
0084 /* AMP controller status */
0085 #define AMP_STATUS_POWERED_DOWN         0x00
0086 #define AMP_STATUS_BLUETOOTH_ONLY       0x01
0087 #define AMP_STATUS_NO_CAPACITY          0x02
0088 #define AMP_STATUS_LOW_CAPACITY         0x03
0089 #define AMP_STATUS_MEDIUM_CAPACITY      0x04
0090 #define AMP_STATUS_HIGH_CAPACITY        0x05
0091 #define AMP_STATUS_FULL_CAPACITY        0x06
0092 
0093 /* HCI device quirks */
0094 enum {
0095     /* When this quirk is set, the HCI Reset command is send when
0096      * closing the transport instead of when opening it.
0097      *
0098      * This quirk must be set before hci_register_dev is called.
0099      */
0100     HCI_QUIRK_RESET_ON_CLOSE,
0101 
0102     /* When this quirk is set, the device is turned into a raw-only
0103      * device and it will stay in unconfigured state.
0104      *
0105      * This quirk must be set before hci_register_dev is called.
0106      */
0107     HCI_QUIRK_RAW_DEVICE,
0108 
0109     /* When this quirk is set, the buffer sizes reported by
0110      * HCI Read Buffer Size command are corrected if invalid.
0111      *
0112      * This quirk must be set before hci_register_dev is called.
0113      */
0114     HCI_QUIRK_FIXUP_BUFFER_SIZE,
0115 
0116     /* When this quirk is set, then a controller that does not
0117      * indicate support for Inquiry Result with RSSI is assumed to
0118      * support it anyway. Some early Bluetooth 1.2 controllers had
0119      * wrongly configured local features that will require forcing
0120      * them to enable this mode. Getting RSSI information with the
0121      * inquiry responses is preferred since it allows for a better
0122      * user experience.
0123      *
0124      * This quirk must be set before hci_register_dev is called.
0125      */
0126     HCI_QUIRK_FIXUP_INQUIRY_MODE,
0127 
0128     /* When this quirk is set, then the HCI Read Local Supported
0129      * Commands command is not supported. In general Bluetooth 1.2
0130      * and later controllers should support this command. However
0131      * some controllers indicate Bluetooth 1.2 support, but do
0132      * not support this command.
0133      *
0134      * This quirk must be set before hci_register_dev is called.
0135      */
0136     HCI_QUIRK_BROKEN_LOCAL_COMMANDS,
0137 
0138     /* When this quirk is set, then no stored link key handling
0139      * is performed. This is mainly due to the fact that the
0140      * HCI Delete Stored Link Key command is advertised, but
0141      * not supported.
0142      *
0143      * This quirk must be set before hci_register_dev is called.
0144      */
0145     HCI_QUIRK_BROKEN_STORED_LINK_KEY,
0146 
0147     /* When this quirk is set, an external configuration step
0148      * is required and will be indicated with the controller
0149      * configuration.
0150      *
0151      * This quirk can be set before hci_register_dev is called or
0152      * during the hdev->setup vendor callback.
0153      */
0154     HCI_QUIRK_EXTERNAL_CONFIG,
0155 
0156     /* When this quirk is set, the public Bluetooth address
0157      * initially reported by HCI Read BD Address command
0158      * is considered invalid. Controller configuration is
0159      * required before this device can be used.
0160      *
0161      * This quirk can be set before hci_register_dev is called or
0162      * during the hdev->setup vendor callback.
0163      */
0164     HCI_QUIRK_INVALID_BDADDR,
0165 
0166     /* When this quirk is set, the public Bluetooth address
0167      * initially reported by HCI Read BD Address command
0168      * is considered invalid. The public BD Address can be
0169      * specified in the fwnode property 'local-bd-address'.
0170      * If this property does not exist or is invalid controller
0171      * configuration is required before this device can be used.
0172      *
0173      * This quirk can be set before hci_register_dev is called or
0174      * during the hdev->setup vendor callback.
0175      */
0176     HCI_QUIRK_USE_BDADDR_PROPERTY,
0177 
0178     /* When this quirk is set, the duplicate filtering during
0179      * scanning is based on Bluetooth devices addresses. To allow
0180      * RSSI based updates, restart scanning if needed.
0181      *
0182      * This quirk can be set before hci_register_dev is called or
0183      * during the hdev->setup vendor callback.
0184      */
0185     HCI_QUIRK_STRICT_DUPLICATE_FILTER,
0186 
0187     /* When this quirk is set, LE scan and BR/EDR inquiry is done
0188      * simultaneously, otherwise it's interleaved.
0189      *
0190      * This quirk can be set before hci_register_dev is called or
0191      * during the hdev->setup vendor callback.
0192      */
0193     HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
0194 
0195     /* When this quirk is set, the enabling of diagnostic mode is
0196      * not persistent over HCI Reset. Every time the controller
0197      * is brought up it needs to be reprogrammed.
0198      *
0199      * This quirk can be set before hci_register_dev is called or
0200      * during the hdev->setup vendor callback.
0201      */
0202     HCI_QUIRK_NON_PERSISTENT_DIAG,
0203 
0204     /* When this quirk is set, setup() would be run after every
0205      * open() and not just after the first open().
0206      *
0207      * This quirk can be set before hci_register_dev is called or
0208      * during the hdev->setup vendor callback.
0209      *
0210      */
0211     HCI_QUIRK_NON_PERSISTENT_SETUP,
0212 
0213     /* When this quirk is set, wide band speech is supported by
0214      * the driver since no reliable mechanism exist to report
0215      * this from the hardware, a driver flag is use to convey
0216      * this support
0217      *
0218      * This quirk must be set before hci_register_dev is called.
0219      */
0220     HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED,
0221 
0222     /* When this quirk is set, the controller has validated that
0223      * LE states reported through the HCI_LE_READ_SUPPORTED_STATES are
0224      * valid.  This mechanism is necessary as many controllers have
0225      * been seen has having trouble initiating a connectable
0226      * advertisement despite the state combination being reported as
0227      * supported.
0228      */
0229     HCI_QUIRK_VALID_LE_STATES,
0230 
0231     /*
0232      * When this quirk is set, then the hci_suspend_notifier is not
0233      * registered. This is intended for devices which drop completely
0234      * from the bus on system-suspend and which will show up as a new
0235      * HCI after resume.
0236      */
0237     HCI_QUIRK_NO_SUSPEND_NOTIFIER,
0238 
0239     /*
0240      * When this quirk is set, LE tx power is not queried on startup
0241      * and the min/max tx power values default to HCI_TX_POWER_INVALID.
0242      *
0243      * This quirk can be set before hci_register_dev is called or
0244      * during the hdev->setup vendor callback.
0245      */
0246     HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER,
0247 
0248     /* When this quirk is set, HCI_OP_SET_EVENT_FLT requests with
0249      * HCI_FLT_CLEAR_ALL are ignored and event filtering is
0250      * completely avoided. A subset of the CSR controller
0251      * clones struggle with this and instantly lock up.
0252      *
0253      * Note that devices using this must (separately) disable
0254      * runtime suspend, because event filtering takes place there.
0255      */
0256     HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL,
0257 
0258     /*
0259      * When this quirk is set, disables the use of
0260      * HCI_OP_ENHANCED_SETUP_SYNC_CONN command to setup SCO connections.
0261      *
0262      * This quirk can be set before hci_register_dev is called or
0263      * during the hdev->setup vendor callback.
0264      */
0265     HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN,
0266 };
0267 
0268 /* HCI device flags */
0269 enum {
0270     HCI_UP,
0271     HCI_INIT,
0272     HCI_RUNNING,
0273 
0274     HCI_PSCAN,
0275     HCI_ISCAN,
0276     HCI_AUTH,
0277     HCI_ENCRYPT,
0278     HCI_INQUIRY,
0279 
0280     HCI_RAW,
0281 
0282     HCI_RESET,
0283 };
0284 
0285 /* HCI socket flags */
0286 enum {
0287     HCI_SOCK_TRUSTED,
0288     HCI_MGMT_INDEX_EVENTS,
0289     HCI_MGMT_UNCONF_INDEX_EVENTS,
0290     HCI_MGMT_EXT_INDEX_EVENTS,
0291     HCI_MGMT_EXT_INFO_EVENTS,
0292     HCI_MGMT_OPTION_EVENTS,
0293     HCI_MGMT_SETTING_EVENTS,
0294     HCI_MGMT_DEV_CLASS_EVENTS,
0295     HCI_MGMT_LOCAL_NAME_EVENTS,
0296     HCI_MGMT_OOB_DATA_EVENTS,
0297     HCI_MGMT_EXP_FEATURE_EVENTS,
0298 };
0299 
0300 /*
0301  * BR/EDR and/or LE controller flags: the flags defined here should represent
0302  * states from the controller.
0303  */
0304 enum {
0305     HCI_SETUP,
0306     HCI_CONFIG,
0307     HCI_AUTO_OFF,
0308     HCI_RFKILLED,
0309     HCI_MGMT,
0310     HCI_BONDABLE,
0311     HCI_SERVICE_CACHE,
0312     HCI_KEEP_DEBUG_KEYS,
0313     HCI_USE_DEBUG_KEYS,
0314     HCI_UNREGISTER,
0315     HCI_UNCONFIGURED,
0316     HCI_USER_CHANNEL,
0317     HCI_EXT_CONFIGURED,
0318     HCI_LE_ADV,
0319     HCI_LE_PER_ADV,
0320     HCI_LE_SCAN,
0321     HCI_SSP_ENABLED,
0322     HCI_SC_ENABLED,
0323     HCI_SC_ONLY,
0324     HCI_PRIVACY,
0325     HCI_LIMITED_PRIVACY,
0326     HCI_RPA_EXPIRED,
0327     HCI_RPA_RESOLVING,
0328     HCI_HS_ENABLED,
0329     HCI_LE_ENABLED,
0330     HCI_ADVERTISING,
0331     HCI_ADVERTISING_CONNECTABLE,
0332     HCI_CONNECTABLE,
0333     HCI_DISCOVERABLE,
0334     HCI_LIMITED_DISCOVERABLE,
0335     HCI_LINK_SECURITY,
0336     HCI_PERIODIC_INQ,
0337     HCI_FAST_CONNECTABLE,
0338     HCI_BREDR_ENABLED,
0339     HCI_LE_SCAN_INTERRUPTED,
0340     HCI_WIDEBAND_SPEECH_ENABLED,
0341     HCI_EVENT_FILTER_CONFIGURED,
0342     HCI_PA_SYNC,
0343 
0344     HCI_DUT_MODE,
0345     HCI_VENDOR_DIAG,
0346     HCI_FORCE_BREDR_SMP,
0347     HCI_FORCE_STATIC_ADDR,
0348     HCI_LL_RPA_RESOLUTION,
0349     HCI_ENABLE_LL_PRIVACY,
0350     HCI_CMD_PENDING,
0351     HCI_FORCE_NO_MITM,
0352     HCI_QUALITY_REPORT,
0353     HCI_OFFLOAD_CODECS_ENABLED,
0354     HCI_LE_SIMULTANEOUS_ROLES,
0355     HCI_CMD_DRAIN_WORKQUEUE,
0356 
0357     __HCI_NUM_FLAGS,
0358 };
0359 
0360 /* HCI timeouts */
0361 #define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000)  /* 2 seconds */
0362 #define HCI_PAIRING_TIMEOUT msecs_to_jiffies(60000) /* 60 seconds */
0363 #define HCI_INIT_TIMEOUT    msecs_to_jiffies(10000) /* 10 seconds */
0364 #define HCI_CMD_TIMEOUT     msecs_to_jiffies(2000)  /* 2 seconds */
0365 #define HCI_NCMD_TIMEOUT    msecs_to_jiffies(4000)  /* 4 seconds */
0366 #define HCI_ACL_TX_TIMEOUT  msecs_to_jiffies(45000) /* 45 seconds */
0367 #define HCI_AUTO_OFF_TIMEOUT    msecs_to_jiffies(2000)  /* 2 seconds */
0368 #define HCI_POWER_OFF_TIMEOUT   msecs_to_jiffies(5000)  /* 5 seconds */
0369 #define HCI_LE_CONN_TIMEOUT msecs_to_jiffies(20000) /* 20 seconds */
0370 #define HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(4000)  /* 4 seconds */
0371 
0372 /* HCI data types */
0373 #define HCI_COMMAND_PKT     0x01
0374 #define HCI_ACLDATA_PKT     0x02
0375 #define HCI_SCODATA_PKT     0x03
0376 #define HCI_EVENT_PKT       0x04
0377 #define HCI_ISODATA_PKT     0x05
0378 #define HCI_DIAG_PKT        0xf0
0379 #define HCI_VENDOR_PKT      0xff
0380 
0381 /* HCI packet types */
0382 #define HCI_DM1     0x0008
0383 #define HCI_DM3     0x0400
0384 #define HCI_DM5     0x4000
0385 #define HCI_DH1     0x0010
0386 #define HCI_DH3     0x0800
0387 #define HCI_DH5     0x8000
0388 
0389 /* HCI packet types inverted masks */
0390 #define HCI_2DH1    0x0002
0391 #define HCI_3DH1    0x0004
0392 #define HCI_2DH3    0x0100
0393 #define HCI_3DH3    0x0200
0394 #define HCI_2DH5    0x1000
0395 #define HCI_3DH5    0x2000
0396 
0397 #define HCI_HV1     0x0020
0398 #define HCI_HV2     0x0040
0399 #define HCI_HV3     0x0080
0400 
0401 #define SCO_PTYPE_MASK  (HCI_HV1 | HCI_HV2 | HCI_HV3)
0402 #define ACL_PTYPE_MASK  (~SCO_PTYPE_MASK)
0403 
0404 /* eSCO packet types */
0405 #define ESCO_HV1    0x0001
0406 #define ESCO_HV2    0x0002
0407 #define ESCO_HV3    0x0004
0408 #define ESCO_EV3    0x0008
0409 #define ESCO_EV4    0x0010
0410 #define ESCO_EV5    0x0020
0411 #define ESCO_2EV3   0x0040
0412 #define ESCO_3EV3   0x0080
0413 #define ESCO_2EV5   0x0100
0414 #define ESCO_3EV5   0x0200
0415 
0416 #define SCO_ESCO_MASK  (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
0417 #define EDR_ESCO_MASK  (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
0418 
0419 /* ACL flags */
0420 #define ACL_START_NO_FLUSH  0x00
0421 #define ACL_CONT        0x01
0422 #define ACL_START       0x02
0423 #define ACL_COMPLETE        0x03
0424 #define ACL_ACTIVE_BCAST    0x04
0425 #define ACL_PICO_BCAST      0x08
0426 
0427 /* ISO PB flags */
0428 #define ISO_START       0x00
0429 #define ISO_CONT        0x01
0430 #define ISO_SINGLE      0x02
0431 #define ISO_END         0x03
0432 
0433 /* ISO TS flags */
0434 #define ISO_TS          0x01
0435 
0436 /* Baseband links */
0437 #define SCO_LINK    0x00
0438 #define ACL_LINK    0x01
0439 #define ESCO_LINK   0x02
0440 /* Low Energy links do not have defined link type. Use invented one */
0441 #define LE_LINK     0x80
0442 #define AMP_LINK    0x81
0443 #define ISO_LINK    0x82
0444 #define INVALID_LINK    0xff
0445 
0446 /* LMP features */
0447 #define LMP_3SLOT   0x01
0448 #define LMP_5SLOT   0x02
0449 #define LMP_ENCRYPT 0x04
0450 #define LMP_SOFFSET 0x08
0451 #define LMP_TACCURACY   0x10
0452 #define LMP_RSWITCH 0x20
0453 #define LMP_HOLD    0x40
0454 #define LMP_SNIFF   0x80
0455 
0456 #define LMP_PARK    0x01
0457 #define LMP_RSSI    0x02
0458 #define LMP_QUALITY 0x04
0459 #define LMP_SCO     0x08
0460 #define LMP_HV2     0x10
0461 #define LMP_HV3     0x20
0462 #define LMP_ULAW    0x40
0463 #define LMP_ALAW    0x80
0464 
0465 #define LMP_CVSD    0x01
0466 #define LMP_PSCHEME 0x02
0467 #define LMP_PCONTROL    0x04
0468 #define LMP_TRANSPARENT 0x08
0469 
0470 #define LMP_EDR_2M      0x02
0471 #define LMP_EDR_3M      0x04
0472 #define LMP_RSSI_INQ    0x40
0473 #define LMP_ESCO    0x80
0474 
0475 #define LMP_EV4     0x01
0476 #define LMP_EV5     0x02
0477 #define LMP_NO_BREDR    0x20
0478 #define LMP_LE      0x40
0479 #define LMP_EDR_3SLOT   0x80
0480 
0481 #define LMP_EDR_5SLOT   0x01
0482 #define LMP_SNIFF_SUBR  0x02
0483 #define LMP_PAUSE_ENC   0x04
0484 #define LMP_EDR_ESCO_2M 0x20
0485 #define LMP_EDR_ESCO_3M 0x40
0486 #define LMP_EDR_3S_ESCO 0x80
0487 
0488 #define LMP_EXT_INQ 0x01
0489 #define LMP_SIMUL_LE_BR 0x02
0490 #define LMP_SIMPLE_PAIR 0x08
0491 #define LMP_ERR_DATA_REPORTING 0x20
0492 #define LMP_NO_FLUSH    0x40
0493 
0494 #define LMP_LSTO    0x01
0495 #define LMP_INQ_TX_PWR  0x02
0496 #define LMP_EXTFEATURES 0x80
0497 
0498 /* Extended LMP features */
0499 #define LMP_CPB_CENTRAL     0x01
0500 #define LMP_CPB_PERIPHERAL  0x02
0501 #define LMP_SYNC_TRAIN      0x04
0502 #define LMP_SYNC_SCAN       0x08
0503 
0504 #define LMP_SC      0x01
0505 #define LMP_PING    0x02
0506 
0507 /* Host features */
0508 #define LMP_HOST_SSP        0x01
0509 #define LMP_HOST_LE     0x02
0510 #define LMP_HOST_LE_BREDR   0x04
0511 #define LMP_HOST_SC     0x08
0512 
0513 /* LE features */
0514 #define HCI_LE_ENCRYPTION       0x01
0515 #define HCI_LE_CONN_PARAM_REQ_PROC  0x02
0516 #define HCI_LE_PERIPHERAL_FEATURES  0x08
0517 #define HCI_LE_PING         0x10
0518 #define HCI_LE_DATA_LEN_EXT     0x20
0519 #define HCI_LE_LL_PRIVACY       0x40
0520 #define HCI_LE_EXT_SCAN_POLICY      0x80
0521 #define HCI_LE_PHY_2M           0x01
0522 #define HCI_LE_PHY_CODED        0x08
0523 #define HCI_LE_EXT_ADV          0x10
0524 #define HCI_LE_PERIODIC_ADV     0x20
0525 #define HCI_LE_CHAN_SEL_ALG2        0x40
0526 #define HCI_LE_CIS_CENTRAL      0x10
0527 #define HCI_LE_CIS_PERIPHERAL       0x20
0528 #define HCI_LE_ISO_BROADCASTER      0x40
0529 
0530 /* Connection modes */
0531 #define HCI_CM_ACTIVE   0x0000
0532 #define HCI_CM_HOLD 0x0001
0533 #define HCI_CM_SNIFF    0x0002
0534 #define HCI_CM_PARK 0x0003
0535 
0536 /* Link policies */
0537 #define HCI_LP_RSWITCH  0x0001
0538 #define HCI_LP_HOLD 0x0002
0539 #define HCI_LP_SNIFF    0x0004
0540 #define HCI_LP_PARK 0x0008
0541 
0542 /* Link modes */
0543 #define HCI_LM_ACCEPT   0x8000
0544 #define HCI_LM_MASTER   0x0001
0545 #define HCI_LM_AUTH 0x0002
0546 #define HCI_LM_ENCRYPT  0x0004
0547 #define HCI_LM_TRUSTED  0x0008
0548 #define HCI_LM_RELIABLE 0x0010
0549 #define HCI_LM_SECURE   0x0020
0550 #define HCI_LM_FIPS 0x0040
0551 
0552 /* Authentication types */
0553 #define HCI_AT_NO_BONDING       0x00
0554 #define HCI_AT_NO_BONDING_MITM      0x01
0555 #define HCI_AT_DEDICATED_BONDING    0x02
0556 #define HCI_AT_DEDICATED_BONDING_MITM   0x03
0557 #define HCI_AT_GENERAL_BONDING      0x04
0558 #define HCI_AT_GENERAL_BONDING_MITM 0x05
0559 
0560 /* I/O capabilities */
0561 #define HCI_IO_DISPLAY_ONLY 0x00
0562 #define HCI_IO_DISPLAY_YESNO    0x01
0563 #define HCI_IO_KEYBOARD_ONLY    0x02
0564 #define HCI_IO_NO_INPUT_OUTPUT  0x03
0565 
0566 /* Link Key types */
0567 #define HCI_LK_COMBINATION      0x00
0568 #define HCI_LK_LOCAL_UNIT       0x01
0569 #define HCI_LK_REMOTE_UNIT      0x02
0570 #define HCI_LK_DEBUG_COMBINATION    0x03
0571 #define HCI_LK_UNAUTH_COMBINATION_P192  0x04
0572 #define HCI_LK_AUTH_COMBINATION_P192    0x05
0573 #define HCI_LK_CHANGED_COMBINATION  0x06
0574 #define HCI_LK_UNAUTH_COMBINATION_P256  0x07
0575 #define HCI_LK_AUTH_COMBINATION_P256    0x08
0576 
0577 /* ---- HCI Error Codes ---- */
0578 #define HCI_ERROR_UNKNOWN_CONN_ID   0x02
0579 #define HCI_ERROR_AUTH_FAILURE      0x05
0580 #define HCI_ERROR_PIN_OR_KEY_MISSING    0x06
0581 #define HCI_ERROR_MEMORY_EXCEEDED   0x07
0582 #define HCI_ERROR_CONNECTION_TIMEOUT    0x08
0583 #define HCI_ERROR_REJ_LIMITED_RESOURCES 0x0d
0584 #define HCI_ERROR_REJ_BAD_ADDR      0x0f
0585 #define HCI_ERROR_INVALID_PARAMETERS    0x12
0586 #define HCI_ERROR_REMOTE_USER_TERM  0x13
0587 #define HCI_ERROR_REMOTE_LOW_RESOURCES  0x14
0588 #define HCI_ERROR_REMOTE_POWER_OFF  0x15
0589 #define HCI_ERROR_LOCAL_HOST_TERM   0x16
0590 #define HCI_ERROR_PAIRING_NOT_ALLOWED   0x18
0591 #define HCI_ERROR_INVALID_LL_PARAMS 0x1e
0592 #define HCI_ERROR_UNSPECIFIED       0x1f
0593 #define HCI_ERROR_ADVERTISING_TIMEOUT   0x3c
0594 #define HCI_ERROR_CANCELLED_BY_HOST 0x44
0595 
0596 /* Flow control modes */
0597 #define HCI_FLOW_CTL_MODE_PACKET_BASED  0x00
0598 #define HCI_FLOW_CTL_MODE_BLOCK_BASED   0x01
0599 
0600 /* The core spec defines 127 as the "not available" value */
0601 #define HCI_TX_POWER_INVALID    127
0602 #define HCI_RSSI_INVALID    127
0603 
0604 #define HCI_ROLE_MASTER     0x00
0605 #define HCI_ROLE_SLAVE      0x01
0606 
0607 /* Extended Inquiry Response field types */
0608 #define EIR_FLAGS       0x01 /* flags */
0609 #define EIR_UUID16_SOME     0x02 /* 16-bit UUID, more available */
0610 #define EIR_UUID16_ALL      0x03 /* 16-bit UUID, all listed */
0611 #define EIR_UUID32_SOME     0x04 /* 32-bit UUID, more available */
0612 #define EIR_UUID32_ALL      0x05 /* 32-bit UUID, all listed */
0613 #define EIR_UUID128_SOME    0x06 /* 128-bit UUID, more available */
0614 #define EIR_UUID128_ALL     0x07 /* 128-bit UUID, all listed */
0615 #define EIR_NAME_SHORT      0x08 /* shortened local name */
0616 #define EIR_NAME_COMPLETE   0x09 /* complete local name */
0617 #define EIR_TX_POWER        0x0A /* transmit power level */
0618 #define EIR_CLASS_OF_DEV    0x0D /* Class of Device */
0619 #define EIR_SSP_HASH_C192   0x0E /* Simple Pairing Hash C-192 */
0620 #define EIR_SSP_RAND_R192   0x0F /* Simple Pairing Randomizer R-192 */
0621 #define EIR_DEVICE_ID       0x10 /* device ID */
0622 #define EIR_APPEARANCE      0x19 /* Device appearance */
0623 #define EIR_SERVICE_DATA    0x16 /* Service Data */
0624 #define EIR_LE_BDADDR       0x1B /* LE Bluetooth device address */
0625 #define EIR_LE_ROLE     0x1C /* LE role */
0626 #define EIR_SSP_HASH_C256   0x1D /* Simple Pairing Hash C-256 */
0627 #define EIR_SSP_RAND_R256   0x1E /* Simple Pairing Rand R-256 */
0628 #define EIR_LE_SC_CONFIRM   0x22 /* LE SC Confirmation Value */
0629 #define EIR_LE_SC_RANDOM    0x23 /* LE SC Random Value */
0630 
0631 /* Low Energy Advertising Flags */
0632 #define LE_AD_LIMITED       0x01 /* Limited Discoverable */
0633 #define LE_AD_GENERAL       0x02 /* General Discoverable */
0634 #define LE_AD_NO_BREDR      0x04 /* BR/EDR not supported */
0635 #define LE_AD_SIM_LE_BREDR_CTRL 0x08 /* Simultaneous LE & BR/EDR Controller */
0636 #define LE_AD_SIM_LE_BREDR_HOST 0x10 /* Simultaneous LE & BR/EDR Host */
0637 
0638 /* -----  HCI Commands ---- */
0639 #define HCI_OP_NOP          0x0000
0640 
0641 #define HCI_OP_INQUIRY          0x0401
0642 struct hci_cp_inquiry {
0643     __u8     lap[3];
0644     __u8     length;
0645     __u8     num_rsp;
0646 } __packed;
0647 
0648 #define HCI_OP_INQUIRY_CANCEL       0x0402
0649 
0650 #define HCI_OP_PERIODIC_INQ     0x0403
0651 
0652 #define HCI_OP_EXIT_PERIODIC_INQ    0x0404
0653 
0654 #define HCI_OP_CREATE_CONN      0x0405
0655 struct hci_cp_create_conn {
0656     bdaddr_t bdaddr;
0657     __le16   pkt_type;
0658     __u8     pscan_rep_mode;
0659     __u8     pscan_mode;
0660     __le16   clock_offset;
0661     __u8     role_switch;
0662 } __packed;
0663 
0664 #define HCI_OP_DISCONNECT       0x0406
0665 struct hci_cp_disconnect {
0666     __le16   handle;
0667     __u8     reason;
0668 } __packed;
0669 
0670 #define HCI_OP_ADD_SCO          0x0407
0671 struct hci_cp_add_sco {
0672     __le16   handle;
0673     __le16   pkt_type;
0674 } __packed;
0675 
0676 #define HCI_OP_CREATE_CONN_CANCEL   0x0408
0677 struct hci_cp_create_conn_cancel {
0678     bdaddr_t bdaddr;
0679 } __packed;
0680 
0681 #define HCI_OP_ACCEPT_CONN_REQ      0x0409
0682 struct hci_cp_accept_conn_req {
0683     bdaddr_t bdaddr;
0684     __u8     role;
0685 } __packed;
0686 
0687 #define HCI_OP_REJECT_CONN_REQ      0x040a
0688 struct hci_cp_reject_conn_req {
0689     bdaddr_t bdaddr;
0690     __u8     reason;
0691 } __packed;
0692 
0693 #define HCI_OP_LINK_KEY_REPLY       0x040b
0694 struct hci_cp_link_key_reply {
0695     bdaddr_t bdaddr;
0696     __u8     link_key[HCI_LINK_KEY_SIZE];
0697 } __packed;
0698 
0699 #define HCI_OP_LINK_KEY_NEG_REPLY   0x040c
0700 struct hci_cp_link_key_neg_reply {
0701     bdaddr_t bdaddr;
0702 } __packed;
0703 
0704 #define HCI_OP_PIN_CODE_REPLY       0x040d
0705 struct hci_cp_pin_code_reply {
0706     bdaddr_t bdaddr;
0707     __u8     pin_len;
0708     __u8     pin_code[16];
0709 } __packed;
0710 struct hci_rp_pin_code_reply {
0711     __u8     status;
0712     bdaddr_t bdaddr;
0713 } __packed;
0714 
0715 #define HCI_OP_PIN_CODE_NEG_REPLY   0x040e
0716 struct hci_cp_pin_code_neg_reply {
0717     bdaddr_t bdaddr;
0718 } __packed;
0719 struct hci_rp_pin_code_neg_reply {
0720     __u8     status;
0721     bdaddr_t bdaddr;
0722 } __packed;
0723 
0724 #define HCI_OP_CHANGE_CONN_PTYPE    0x040f
0725 struct hci_cp_change_conn_ptype {
0726     __le16   handle;
0727     __le16   pkt_type;
0728 } __packed;
0729 
0730 #define HCI_OP_AUTH_REQUESTED       0x0411
0731 struct hci_cp_auth_requested {
0732     __le16   handle;
0733 } __packed;
0734 
0735 #define HCI_OP_SET_CONN_ENCRYPT     0x0413
0736 struct hci_cp_set_conn_encrypt {
0737     __le16   handle;
0738     __u8     encrypt;
0739 } __packed;
0740 
0741 #define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415
0742 struct hci_cp_change_conn_link_key {
0743     __le16   handle;
0744 } __packed;
0745 
0746 #define HCI_OP_REMOTE_NAME_REQ      0x0419
0747 struct hci_cp_remote_name_req {
0748     bdaddr_t bdaddr;
0749     __u8     pscan_rep_mode;
0750     __u8     pscan_mode;
0751     __le16   clock_offset;
0752 } __packed;
0753 
0754 #define HCI_OP_REMOTE_NAME_REQ_CANCEL   0x041a
0755 struct hci_cp_remote_name_req_cancel {
0756     bdaddr_t bdaddr;
0757 } __packed;
0758 
0759 #define HCI_OP_READ_REMOTE_FEATURES 0x041b
0760 struct hci_cp_read_remote_features {
0761     __le16   handle;
0762 } __packed;
0763 
0764 #define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
0765 struct hci_cp_read_remote_ext_features {
0766     __le16   handle;
0767     __u8     page;
0768 } __packed;
0769 
0770 #define HCI_OP_READ_REMOTE_VERSION  0x041d
0771 struct hci_cp_read_remote_version {
0772     __le16   handle;
0773 } __packed;
0774 
0775 #define HCI_OP_READ_CLOCK_OFFSET    0x041f
0776 struct hci_cp_read_clock_offset {
0777     __le16   handle;
0778 } __packed;
0779 
0780 #define HCI_OP_SETUP_SYNC_CONN      0x0428
0781 struct hci_cp_setup_sync_conn {
0782     __le16   handle;
0783     __le32   tx_bandwidth;
0784     __le32   rx_bandwidth;
0785     __le16   max_latency;
0786     __le16   voice_setting;
0787     __u8     retrans_effort;
0788     __le16   pkt_type;
0789 } __packed;
0790 
0791 #define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429
0792 struct hci_cp_accept_sync_conn_req {
0793     bdaddr_t bdaddr;
0794     __le32   tx_bandwidth;
0795     __le32   rx_bandwidth;
0796     __le16   max_latency;
0797     __le16   content_format;
0798     __u8     retrans_effort;
0799     __le16   pkt_type;
0800 } __packed;
0801 
0802 #define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a
0803 struct hci_cp_reject_sync_conn_req {
0804     bdaddr_t bdaddr;
0805     __u8     reason;
0806 } __packed;
0807 
0808 #define HCI_OP_IO_CAPABILITY_REPLY  0x042b
0809 struct hci_cp_io_capability_reply {
0810     bdaddr_t bdaddr;
0811     __u8     capability;
0812     __u8     oob_data;
0813     __u8     authentication;
0814 } __packed;
0815 
0816 #define HCI_OP_USER_CONFIRM_REPLY       0x042c
0817 struct hci_cp_user_confirm_reply {
0818     bdaddr_t bdaddr;
0819 } __packed;
0820 struct hci_rp_user_confirm_reply {
0821     __u8     status;
0822     bdaddr_t bdaddr;
0823 } __packed;
0824 
0825 #define HCI_OP_USER_CONFIRM_NEG_REPLY   0x042d
0826 
0827 #define HCI_OP_USER_PASSKEY_REPLY       0x042e
0828 struct hci_cp_user_passkey_reply {
0829     bdaddr_t bdaddr;
0830     __le32  passkey;
0831 } __packed;
0832 
0833 #define HCI_OP_USER_PASSKEY_NEG_REPLY   0x042f
0834 
0835 #define HCI_OP_REMOTE_OOB_DATA_REPLY    0x0430
0836 struct hci_cp_remote_oob_data_reply {
0837     bdaddr_t bdaddr;
0838     __u8     hash[16];
0839     __u8     rand[16];
0840 } __packed;
0841 
0842 #define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY    0x0433
0843 struct hci_cp_remote_oob_data_neg_reply {
0844     bdaddr_t bdaddr;
0845 } __packed;
0846 
0847 #define HCI_OP_IO_CAPABILITY_NEG_REPLY  0x0434
0848 struct hci_cp_io_capability_neg_reply {
0849     bdaddr_t bdaddr;
0850     __u8     reason;
0851 } __packed;
0852 
0853 #define HCI_OP_CREATE_PHY_LINK      0x0435
0854 struct hci_cp_create_phy_link {
0855     __u8     phy_handle;
0856     __u8     key_len;
0857     __u8     key_type;
0858     __u8     key[HCI_AMP_LINK_KEY_SIZE];
0859 } __packed;
0860 
0861 #define HCI_OP_ACCEPT_PHY_LINK      0x0436
0862 struct hci_cp_accept_phy_link {
0863     __u8     phy_handle;
0864     __u8     key_len;
0865     __u8     key_type;
0866     __u8     key[HCI_AMP_LINK_KEY_SIZE];
0867 } __packed;
0868 
0869 #define HCI_OP_DISCONN_PHY_LINK     0x0437
0870 struct hci_cp_disconn_phy_link {
0871     __u8     phy_handle;
0872     __u8     reason;
0873 } __packed;
0874 
0875 struct ext_flow_spec {
0876     __u8       id;
0877     __u8       stype;
0878     __le16     msdu;
0879     __le32     sdu_itime;
0880     __le32     acc_lat;
0881     __le32     flush_to;
0882 } __packed;
0883 
0884 #define HCI_OP_CREATE_LOGICAL_LINK  0x0438
0885 #define HCI_OP_ACCEPT_LOGICAL_LINK  0x0439
0886 struct hci_cp_create_accept_logical_link {
0887     __u8                  phy_handle;
0888     struct ext_flow_spec  tx_flow_spec;
0889     struct ext_flow_spec  rx_flow_spec;
0890 } __packed;
0891 
0892 #define HCI_OP_DISCONN_LOGICAL_LINK 0x043a
0893 struct hci_cp_disconn_logical_link {
0894     __le16   log_handle;
0895 } __packed;
0896 
0897 #define HCI_OP_LOGICAL_LINK_CANCEL  0x043b
0898 struct hci_cp_logical_link_cancel {
0899     __u8     phy_handle;
0900     __u8     flow_spec_id;
0901 } __packed;
0902 
0903 #define HCI_OP_ENHANCED_SETUP_SYNC_CONN     0x043d
0904 struct hci_coding_format {
0905     __u8    id;
0906     __le16  cid;
0907     __le16  vid;
0908 } __packed;
0909 
0910 struct hci_cp_enhanced_setup_sync_conn {
0911     __le16   handle;
0912     __le32   tx_bandwidth;
0913     __le32   rx_bandwidth;
0914     struct   hci_coding_format tx_coding_format;
0915     struct   hci_coding_format rx_coding_format;
0916     __le16   tx_codec_frame_size;
0917     __le16   rx_codec_frame_size;
0918     __le32   in_bandwidth;
0919     __le32   out_bandwidth;
0920     struct   hci_coding_format in_coding_format;
0921     struct   hci_coding_format out_coding_format;
0922     __le16   in_coded_data_size;
0923     __le16   out_coded_data_size;
0924     __u8     in_pcm_data_format;
0925     __u8     out_pcm_data_format;
0926     __u8     in_pcm_sample_payload_msb_pos;
0927     __u8     out_pcm_sample_payload_msb_pos;
0928     __u8     in_data_path;
0929     __u8     out_data_path;
0930     __u8     in_transport_unit_size;
0931     __u8     out_transport_unit_size;
0932     __le16   max_latency;
0933     __le16   pkt_type;
0934     __u8     retrans_effort;
0935 } __packed;
0936 
0937 struct hci_rp_logical_link_cancel {
0938     __u8     status;
0939     __u8     phy_handle;
0940     __u8     flow_spec_id;
0941 } __packed;
0942 
0943 #define HCI_OP_SET_CPB          0x0441
0944 struct hci_cp_set_cpb {
0945     __u8    enable;
0946     __u8    lt_addr;
0947     __u8    lpo_allowed;
0948     __le16  packet_type;
0949     __le16  interval_min;
0950     __le16  interval_max;
0951     __le16  cpb_sv_tout;
0952 } __packed;
0953 struct hci_rp_set_cpb {
0954     __u8    status;
0955     __u8    lt_addr;
0956     __le16  interval;
0957 } __packed;
0958 
0959 #define HCI_OP_START_SYNC_TRAIN     0x0443
0960 
0961 #define HCI_OP_REMOTE_OOB_EXT_DATA_REPLY    0x0445
0962 struct hci_cp_remote_oob_ext_data_reply {
0963     bdaddr_t bdaddr;
0964     __u8     hash192[16];
0965     __u8     rand192[16];
0966     __u8     hash256[16];
0967     __u8     rand256[16];
0968 } __packed;
0969 
0970 #define HCI_OP_SNIFF_MODE       0x0803
0971 struct hci_cp_sniff_mode {
0972     __le16   handle;
0973     __le16   max_interval;
0974     __le16   min_interval;
0975     __le16   attempt;
0976     __le16   timeout;
0977 } __packed;
0978 
0979 #define HCI_OP_EXIT_SNIFF_MODE      0x0804
0980 struct hci_cp_exit_sniff_mode {
0981     __le16   handle;
0982 } __packed;
0983 
0984 #define HCI_OP_ROLE_DISCOVERY       0x0809
0985 struct hci_cp_role_discovery {
0986     __le16   handle;
0987 } __packed;
0988 struct hci_rp_role_discovery {
0989     __u8     status;
0990     __le16   handle;
0991     __u8     role;
0992 } __packed;
0993 
0994 #define HCI_OP_SWITCH_ROLE      0x080b
0995 struct hci_cp_switch_role {
0996     bdaddr_t bdaddr;
0997     __u8     role;
0998 } __packed;
0999 
1000 #define HCI_OP_READ_LINK_POLICY     0x080c
1001 struct hci_cp_read_link_policy {
1002     __le16   handle;
1003 } __packed;
1004 struct hci_rp_read_link_policy {
1005     __u8     status;
1006     __le16   handle;
1007     __le16   policy;
1008 } __packed;
1009 
1010 #define HCI_OP_WRITE_LINK_POLICY    0x080d
1011 struct hci_cp_write_link_policy {
1012     __le16   handle;
1013     __le16   policy;
1014 } __packed;
1015 struct hci_rp_write_link_policy {
1016     __u8     status;
1017     __le16   handle;
1018 } __packed;
1019 
1020 #define HCI_OP_READ_DEF_LINK_POLICY 0x080e
1021 struct hci_rp_read_def_link_policy {
1022     __u8     status;
1023     __le16   policy;
1024 } __packed;
1025 
1026 #define HCI_OP_WRITE_DEF_LINK_POLICY    0x080f
1027 struct hci_cp_write_def_link_policy {
1028     __le16   policy;
1029 } __packed;
1030 
1031 #define HCI_OP_SNIFF_SUBRATE        0x0811
1032 struct hci_cp_sniff_subrate {
1033     __le16   handle;
1034     __le16   max_latency;
1035     __le16   min_remote_timeout;
1036     __le16   min_local_timeout;
1037 } __packed;
1038 
1039 #define HCI_OP_SET_EVENT_MASK       0x0c01
1040 
1041 #define HCI_OP_RESET            0x0c03
1042 
1043 #define HCI_OP_SET_EVENT_FLT        0x0c05
1044 #define HCI_SET_EVENT_FLT_SIZE      9
1045 struct hci_cp_set_event_filter {
1046     __u8        flt_type;
1047     __u8        cond_type;
1048     struct {
1049         bdaddr_t bdaddr;
1050         __u8 auto_accept;
1051     } __packed  addr_conn_flt;
1052 } __packed;
1053 
1054 /* Filter types */
1055 #define HCI_FLT_CLEAR_ALL   0x00
1056 #define HCI_FLT_INQ_RESULT  0x01
1057 #define HCI_FLT_CONN_SETUP  0x02
1058 
1059 /* CONN_SETUP Condition types */
1060 #define HCI_CONN_SETUP_ALLOW_ALL    0x00
1061 #define HCI_CONN_SETUP_ALLOW_CLASS  0x01
1062 #define HCI_CONN_SETUP_ALLOW_BDADDR 0x02
1063 
1064 /* CONN_SETUP Conditions */
1065 #define HCI_CONN_SETUP_AUTO_OFF     0x01
1066 #define HCI_CONN_SETUP_AUTO_ON      0x02
1067 #define HCI_CONN_SETUP_AUTO_ON_WITH_RS  0x03
1068 
1069 #define HCI_OP_READ_STORED_LINK_KEY 0x0c0d
1070 struct hci_cp_read_stored_link_key {
1071     bdaddr_t bdaddr;
1072     __u8     read_all;
1073 } __packed;
1074 struct hci_rp_read_stored_link_key {
1075     __u8     status;
1076     __le16   max_keys;
1077     __le16   num_keys;
1078 } __packed;
1079 
1080 #define HCI_OP_DELETE_STORED_LINK_KEY   0x0c12
1081 struct hci_cp_delete_stored_link_key {
1082     bdaddr_t bdaddr;
1083     __u8     delete_all;
1084 } __packed;
1085 struct hci_rp_delete_stored_link_key {
1086     __u8     status;
1087     __le16   num_keys;
1088 } __packed;
1089 
1090 #define HCI_MAX_NAME_LENGTH     248
1091 
1092 #define HCI_OP_WRITE_LOCAL_NAME     0x0c13
1093 struct hci_cp_write_local_name {
1094     __u8     name[HCI_MAX_NAME_LENGTH];
1095 } __packed;
1096 
1097 #define HCI_OP_READ_LOCAL_NAME      0x0c14
1098 struct hci_rp_read_local_name {
1099     __u8     status;
1100     __u8     name[HCI_MAX_NAME_LENGTH];
1101 } __packed;
1102 
1103 #define HCI_OP_WRITE_CA_TIMEOUT     0x0c16
1104 
1105 #define HCI_OP_WRITE_PG_TIMEOUT     0x0c18
1106 
1107 #define HCI_OP_WRITE_SCAN_ENABLE    0x0c1a
1108     #define SCAN_DISABLED       0x00
1109     #define SCAN_INQUIRY        0x01
1110     #define SCAN_PAGE       0x02
1111 
1112 #define HCI_OP_READ_AUTH_ENABLE     0x0c1f
1113 
1114 #define HCI_OP_WRITE_AUTH_ENABLE    0x0c20
1115     #define AUTH_DISABLED       0x00
1116     #define AUTH_ENABLED        0x01
1117 
1118 #define HCI_OP_READ_ENCRYPT_MODE    0x0c21
1119 
1120 #define HCI_OP_WRITE_ENCRYPT_MODE   0x0c22
1121     #define ENCRYPT_DISABLED    0x00
1122     #define ENCRYPT_P2P     0x01
1123     #define ENCRYPT_BOTH        0x02
1124 
1125 #define HCI_OP_READ_CLASS_OF_DEV    0x0c23
1126 struct hci_rp_read_class_of_dev {
1127     __u8     status;
1128     __u8     dev_class[3];
1129 } __packed;
1130 
1131 #define HCI_OP_WRITE_CLASS_OF_DEV   0x0c24
1132 struct hci_cp_write_class_of_dev {
1133     __u8     dev_class[3];
1134 } __packed;
1135 
1136 #define HCI_OP_READ_VOICE_SETTING   0x0c25
1137 struct hci_rp_read_voice_setting {
1138     __u8     status;
1139     __le16   voice_setting;
1140 } __packed;
1141 
1142 #define HCI_OP_WRITE_VOICE_SETTING  0x0c26
1143 struct hci_cp_write_voice_setting {
1144     __le16   voice_setting;
1145 } __packed;
1146 
1147 #define HCI_OP_HOST_BUFFER_SIZE     0x0c33
1148 struct hci_cp_host_buffer_size {
1149     __le16   acl_mtu;
1150     __u8     sco_mtu;
1151     __le16   acl_max_pkt;
1152     __le16   sco_max_pkt;
1153 } __packed;
1154 
1155 #define HCI_OP_READ_NUM_SUPPORTED_IAC   0x0c38
1156 struct hci_rp_read_num_supported_iac {
1157     __u8    status;
1158     __u8    num_iac;
1159 } __packed;
1160 
1161 #define HCI_OP_READ_CURRENT_IAC_LAP 0x0c39
1162 
1163 #define HCI_OP_WRITE_CURRENT_IAC_LAP    0x0c3a
1164 struct hci_cp_write_current_iac_lap {
1165     __u8    num_iac;
1166     __u8    iac_lap[6];
1167 } __packed;
1168 
1169 #define HCI_OP_WRITE_INQUIRY_MODE   0x0c45
1170 
1171 #define HCI_MAX_EIR_LENGTH      240
1172 
1173 #define HCI_OP_WRITE_EIR        0x0c52
1174 struct hci_cp_write_eir {
1175     __u8    fec;
1176     __u8    data[HCI_MAX_EIR_LENGTH];
1177 } __packed;
1178 
1179 #define HCI_OP_READ_SSP_MODE        0x0c55
1180 struct hci_rp_read_ssp_mode {
1181     __u8     status;
1182     __u8     mode;
1183 } __packed;
1184 
1185 #define HCI_OP_WRITE_SSP_MODE       0x0c56
1186 struct hci_cp_write_ssp_mode {
1187     __u8     mode;
1188 } __packed;
1189 
1190 #define HCI_OP_READ_LOCAL_OOB_DATA      0x0c57
1191 struct hci_rp_read_local_oob_data {
1192     __u8     status;
1193     __u8     hash[16];
1194     __u8     rand[16];
1195 } __packed;
1196 
1197 #define HCI_OP_READ_INQ_RSP_TX_POWER    0x0c58
1198 struct hci_rp_read_inq_rsp_tx_power {
1199     __u8     status;
1200     __s8     tx_power;
1201 } __packed;
1202 
1203 #define HCI_OP_READ_DEF_ERR_DATA_REPORTING  0x0c5a
1204     #define ERR_DATA_REPORTING_DISABLED 0x00
1205     #define ERR_DATA_REPORTING_ENABLED  0x01
1206 struct hci_rp_read_def_err_data_reporting {
1207     __u8     status;
1208     __u8     err_data_reporting;
1209 } __packed;
1210 
1211 #define HCI_OP_WRITE_DEF_ERR_DATA_REPORTING 0x0c5b
1212 struct hci_cp_write_def_err_data_reporting {
1213     __u8     err_data_reporting;
1214 } __packed;
1215 
1216 #define HCI_OP_SET_EVENT_MASK_PAGE_2    0x0c63
1217 
1218 #define HCI_OP_READ_LOCATION_DATA   0x0c64
1219 
1220 #define HCI_OP_READ_FLOW_CONTROL_MODE   0x0c66
1221 struct hci_rp_read_flow_control_mode {
1222     __u8     status;
1223     __u8     mode;
1224 } __packed;
1225 
1226 #define HCI_OP_WRITE_LE_HOST_SUPPORTED  0x0c6d
1227 struct hci_cp_write_le_host_supported {
1228     __u8    le;
1229     __u8    simul;
1230 } __packed;
1231 
1232 #define HCI_OP_SET_RESERVED_LT_ADDR 0x0c74
1233 struct hci_cp_set_reserved_lt_addr {
1234     __u8    lt_addr;
1235 } __packed;
1236 struct hci_rp_set_reserved_lt_addr {
1237     __u8    status;
1238     __u8    lt_addr;
1239 } __packed;
1240 
1241 #define HCI_OP_DELETE_RESERVED_LT_ADDR  0x0c75
1242 struct hci_cp_delete_reserved_lt_addr {
1243     __u8    lt_addr;
1244 } __packed;
1245 struct hci_rp_delete_reserved_lt_addr {
1246     __u8    status;
1247     __u8    lt_addr;
1248 } __packed;
1249 
1250 #define HCI_OP_SET_CPB_DATA     0x0c76
1251 struct hci_cp_set_cpb_data {
1252     __u8    lt_addr;
1253     __u8    fragment;
1254     __u8    data_length;
1255     __u8    data[HCI_MAX_CPB_DATA_SIZE];
1256 } __packed;
1257 struct hci_rp_set_cpb_data {
1258     __u8    status;
1259     __u8    lt_addr;
1260 } __packed;
1261 
1262 #define HCI_OP_READ_SYNC_TRAIN_PARAMS   0x0c77
1263 
1264 #define HCI_OP_WRITE_SYNC_TRAIN_PARAMS  0x0c78
1265 struct hci_cp_write_sync_train_params {
1266     __le16  interval_min;
1267     __le16  interval_max;
1268     __le32  sync_train_tout;
1269     __u8    service_data;
1270 } __packed;
1271 struct hci_rp_write_sync_train_params {
1272     __u8    status;
1273     __le16  sync_train_int;
1274 } __packed;
1275 
1276 #define HCI_OP_READ_SC_SUPPORT      0x0c79
1277 struct hci_rp_read_sc_support {
1278     __u8    status;
1279     __u8    support;
1280 } __packed;
1281 
1282 #define HCI_OP_WRITE_SC_SUPPORT     0x0c7a
1283 struct hci_cp_write_sc_support {
1284     __u8    support;
1285 } __packed;
1286 
1287 #define HCI_OP_READ_AUTH_PAYLOAD_TO    0x0c7b
1288 struct hci_cp_read_auth_payload_to {
1289     __le16  handle;
1290 } __packed;
1291 struct hci_rp_read_auth_payload_to {
1292     __u8    status;
1293     __le16  handle;
1294     __le16  timeout;
1295 } __packed;
1296 
1297 #define HCI_OP_WRITE_AUTH_PAYLOAD_TO    0x0c7c
1298 struct hci_cp_write_auth_payload_to {
1299     __le16  handle;
1300     __le16  timeout;
1301 } __packed;
1302 struct hci_rp_write_auth_payload_to {
1303     __u8    status;
1304     __le16  handle;
1305 } __packed;
1306 
1307 #define HCI_OP_READ_LOCAL_OOB_EXT_DATA  0x0c7d
1308 struct hci_rp_read_local_oob_ext_data {
1309     __u8     status;
1310     __u8     hash192[16];
1311     __u8     rand192[16];
1312     __u8     hash256[16];
1313     __u8     rand256[16];
1314 } __packed;
1315 
1316 #define HCI_CONFIGURE_DATA_PATH 0x0c83
1317 struct hci_op_configure_data_path {
1318     __u8    direction;
1319     __u8    data_path_id;
1320     __u8    vnd_len;
1321     __u8    vnd_data[];
1322 } __packed;
1323 
1324 #define HCI_OP_READ_LOCAL_VERSION   0x1001
1325 struct hci_rp_read_local_version {
1326     __u8     status;
1327     __u8     hci_ver;
1328     __le16   hci_rev;
1329     __u8     lmp_ver;
1330     __le16   manufacturer;
1331     __le16   lmp_subver;
1332 } __packed;
1333 
1334 #define HCI_OP_READ_LOCAL_COMMANDS  0x1002
1335 struct hci_rp_read_local_commands {
1336     __u8     status;
1337     __u8     commands[64];
1338 } __packed;
1339 
1340 #define HCI_OP_READ_LOCAL_FEATURES  0x1003
1341 struct hci_rp_read_local_features {
1342     __u8     status;
1343     __u8     features[8];
1344 } __packed;
1345 
1346 #define HCI_OP_READ_LOCAL_EXT_FEATURES  0x1004
1347 struct hci_cp_read_local_ext_features {
1348     __u8     page;
1349 } __packed;
1350 struct hci_rp_read_local_ext_features {
1351     __u8     status;
1352     __u8     page;
1353     __u8     max_page;
1354     __u8     features[8];
1355 } __packed;
1356 
1357 #define HCI_OP_READ_BUFFER_SIZE     0x1005
1358 struct hci_rp_read_buffer_size {
1359     __u8     status;
1360     __le16   acl_mtu;
1361     __u8     sco_mtu;
1362     __le16   acl_max_pkt;
1363     __le16   sco_max_pkt;
1364 } __packed;
1365 
1366 #define HCI_OP_READ_BD_ADDR     0x1009
1367 struct hci_rp_read_bd_addr {
1368     __u8     status;
1369     bdaddr_t bdaddr;
1370 } __packed;
1371 
1372 #define HCI_OP_READ_DATA_BLOCK_SIZE 0x100a
1373 struct hci_rp_read_data_block_size {
1374     __u8     status;
1375     __le16   max_acl_len;
1376     __le16   block_len;
1377     __le16   num_blocks;
1378 } __packed;
1379 
1380 #define HCI_OP_READ_LOCAL_CODECS    0x100b
1381 struct hci_std_codecs {
1382     __u8    num;
1383     __u8    codec[];
1384 } __packed;
1385 
1386 struct hci_vnd_codec {
1387     /* company id */
1388     __le16  cid;
1389     /* vendor codec id */
1390     __le16  vid;
1391 } __packed;
1392 
1393 struct hci_vnd_codecs {
1394     __u8    num;
1395     struct hci_vnd_codec codec[];
1396 } __packed;
1397 
1398 struct hci_rp_read_local_supported_codecs {
1399     __u8    status;
1400     struct hci_std_codecs std_codecs;
1401     struct hci_vnd_codecs vnd_codecs;
1402 } __packed;
1403 
1404 #define HCI_OP_READ_LOCAL_PAIRING_OPTS  0x100c
1405 struct hci_rp_read_local_pairing_opts {
1406     __u8     status;
1407     __u8     pairing_opts;
1408     __u8     max_key_size;
1409 } __packed;
1410 
1411 #define HCI_OP_READ_LOCAL_CODECS_V2 0x100d
1412 struct hci_std_codec_v2 {
1413     __u8    id;
1414     __u8    transport;
1415 } __packed;
1416 
1417 struct hci_std_codecs_v2 {
1418     __u8    num;
1419     struct hci_std_codec_v2 codec[];
1420 } __packed;
1421 
1422 struct hci_vnd_codec_v2 {
1423     __u8    id;
1424     __le16  cid;
1425     __le16  vid;
1426     __u8    transport;
1427 } __packed;
1428 
1429 struct hci_vnd_codecs_v2 {
1430     __u8    num;
1431     struct hci_vnd_codec_v2 codec[];
1432 } __packed;
1433 
1434 struct hci_rp_read_local_supported_codecs_v2 {
1435     __u8    status;
1436     struct hci_std_codecs_v2 std_codecs;
1437     struct hci_vnd_codecs_v2 vendor_codecs;
1438 } __packed;
1439 
1440 #define HCI_OP_READ_LOCAL_CODEC_CAPS    0x100e
1441 struct hci_op_read_local_codec_caps {
1442     __u8    id;
1443     __le16  cid;
1444     __le16  vid;
1445     __u8    transport;
1446     __u8    direction;
1447 } __packed;
1448 
1449 struct hci_codec_caps {
1450     __u8    len;
1451     __u8    data[];
1452 } __packed;
1453 
1454 struct hci_rp_read_local_codec_caps {
1455     __u8    status;
1456     __u8    num_caps;
1457 } __packed;
1458 
1459 #define HCI_OP_READ_PAGE_SCAN_ACTIVITY  0x0c1b
1460 struct hci_rp_read_page_scan_activity {
1461     __u8     status;
1462     __le16   interval;
1463     __le16   window;
1464 } __packed;
1465 
1466 #define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
1467 struct hci_cp_write_page_scan_activity {
1468     __le16   interval;
1469     __le16   window;
1470 } __packed;
1471 
1472 #define HCI_OP_READ_TX_POWER        0x0c2d
1473 struct hci_cp_read_tx_power {
1474     __le16   handle;
1475     __u8     type;
1476 } __packed;
1477 struct hci_rp_read_tx_power {
1478     __u8     status;
1479     __le16   handle;
1480     __s8     tx_power;
1481 } __packed;
1482 
1483 #define HCI_OP_READ_PAGE_SCAN_TYPE  0x0c46
1484 struct hci_rp_read_page_scan_type {
1485     __u8     status;
1486     __u8     type;
1487 } __packed;
1488 
1489 #define HCI_OP_WRITE_PAGE_SCAN_TYPE 0x0c47
1490     #define PAGE_SCAN_TYPE_STANDARD     0x00
1491     #define PAGE_SCAN_TYPE_INTERLACED   0x01
1492 
1493 #define HCI_OP_READ_RSSI        0x1405
1494 struct hci_cp_read_rssi {
1495     __le16   handle;
1496 } __packed;
1497 struct hci_rp_read_rssi {
1498     __u8     status;
1499     __le16   handle;
1500     __s8     rssi;
1501 } __packed;
1502 
1503 #define HCI_OP_READ_CLOCK       0x1407
1504 struct hci_cp_read_clock {
1505     __le16   handle;
1506     __u8     which;
1507 } __packed;
1508 struct hci_rp_read_clock {
1509     __u8     status;
1510     __le16   handle;
1511     __le32   clock;
1512     __le16   accuracy;
1513 } __packed;
1514 
1515 #define HCI_OP_READ_ENC_KEY_SIZE    0x1408
1516 struct hci_cp_read_enc_key_size {
1517     __le16   handle;
1518 } __packed;
1519 struct hci_rp_read_enc_key_size {
1520     __u8     status;
1521     __le16   handle;
1522     __u8     key_size;
1523 } __packed;
1524 
1525 #define HCI_OP_READ_LOCAL_AMP_INFO  0x1409
1526 struct hci_rp_read_local_amp_info {
1527     __u8     status;
1528     __u8     amp_status;
1529     __le32   total_bw;
1530     __le32   max_bw;
1531     __le32   min_latency;
1532     __le32   max_pdu;
1533     __u8     amp_type;
1534     __le16   pal_cap;
1535     __le16   max_assoc_size;
1536     __le32   max_flush_to;
1537     __le32   be_flush_to;
1538 } __packed;
1539 
1540 #define HCI_OP_READ_LOCAL_AMP_ASSOC 0x140a
1541 struct hci_cp_read_local_amp_assoc {
1542     __u8     phy_handle;
1543     __le16   len_so_far;
1544     __le16   max_len;
1545 } __packed;
1546 struct hci_rp_read_local_amp_assoc {
1547     __u8     status;
1548     __u8     phy_handle;
1549     __le16   rem_len;
1550     __u8     frag[];
1551 } __packed;
1552 
1553 #define HCI_OP_WRITE_REMOTE_AMP_ASSOC   0x140b
1554 struct hci_cp_write_remote_amp_assoc {
1555     __u8     phy_handle;
1556     __le16   len_so_far;
1557     __le16   rem_len;
1558     __u8     frag[];
1559 } __packed;
1560 struct hci_rp_write_remote_amp_assoc {
1561     __u8     status;
1562     __u8     phy_handle;
1563 } __packed;
1564 
1565 #define HCI_OP_GET_MWS_TRANSPORT_CONFIG 0x140c
1566 
1567 #define HCI_OP_ENABLE_DUT_MODE      0x1803
1568 
1569 #define HCI_OP_WRITE_SSP_DEBUG_MODE 0x1804
1570 
1571 #define HCI_OP_LE_SET_EVENT_MASK    0x2001
1572 struct hci_cp_le_set_event_mask {
1573     __u8     mask[8];
1574 } __packed;
1575 
1576 #define HCI_OP_LE_READ_BUFFER_SIZE  0x2002
1577 struct hci_rp_le_read_buffer_size {
1578     __u8     status;
1579     __le16   le_mtu;
1580     __u8     le_max_pkt;
1581 } __packed;
1582 
1583 #define HCI_OP_LE_READ_LOCAL_FEATURES   0x2003
1584 struct hci_rp_le_read_local_features {
1585     __u8     status;
1586     __u8     features[8];
1587 } __packed;
1588 
1589 #define HCI_OP_LE_SET_RANDOM_ADDR   0x2005
1590 
1591 #define HCI_OP_LE_SET_ADV_PARAM     0x2006
1592 struct hci_cp_le_set_adv_param {
1593     __le16   min_interval;
1594     __le16   max_interval;
1595     __u8     type;
1596     __u8     own_address_type;
1597     __u8     direct_addr_type;
1598     bdaddr_t direct_addr;
1599     __u8     channel_map;
1600     __u8     filter_policy;
1601 } __packed;
1602 
1603 #define HCI_OP_LE_READ_ADV_TX_POWER 0x2007
1604 struct hci_rp_le_read_adv_tx_power {
1605     __u8    status;
1606     __s8    tx_power;
1607 } __packed;
1608 
1609 #define HCI_MAX_AD_LENGTH       31
1610 
1611 #define HCI_OP_LE_SET_ADV_DATA      0x2008
1612 struct hci_cp_le_set_adv_data {
1613     __u8    length;
1614     __u8    data[HCI_MAX_AD_LENGTH];
1615 } __packed;
1616 
1617 #define HCI_OP_LE_SET_SCAN_RSP_DATA 0x2009
1618 struct hci_cp_le_set_scan_rsp_data {
1619     __u8    length;
1620     __u8    data[HCI_MAX_AD_LENGTH];
1621 } __packed;
1622 
1623 #define HCI_OP_LE_SET_ADV_ENABLE    0x200a
1624 
1625 #define LE_SCAN_PASSIVE         0x00
1626 #define LE_SCAN_ACTIVE          0x01
1627 
1628 #define HCI_OP_LE_SET_SCAN_PARAM    0x200b
1629 struct hci_cp_le_set_scan_param {
1630     __u8    type;
1631     __le16  interval;
1632     __le16  window;
1633     __u8    own_address_type;
1634     __u8    filter_policy;
1635 } __packed;
1636 
1637 #define LE_SCAN_DISABLE         0x00
1638 #define LE_SCAN_ENABLE          0x01
1639 #define LE_SCAN_FILTER_DUP_DISABLE  0x00
1640 #define LE_SCAN_FILTER_DUP_ENABLE   0x01
1641 
1642 #define HCI_OP_LE_SET_SCAN_ENABLE   0x200c
1643 struct hci_cp_le_set_scan_enable {
1644     __u8     enable;
1645     __u8     filter_dup;
1646 } __packed;
1647 
1648 #define HCI_LE_USE_PEER_ADDR        0x00
1649 #define HCI_LE_USE_ACCEPT_LIST      0x01
1650 
1651 #define HCI_OP_LE_CREATE_CONN       0x200d
1652 struct hci_cp_le_create_conn {
1653     __le16   scan_interval;
1654     __le16   scan_window;
1655     __u8     filter_policy;
1656     __u8     peer_addr_type;
1657     bdaddr_t peer_addr;
1658     __u8     own_address_type;
1659     __le16   conn_interval_min;
1660     __le16   conn_interval_max;
1661     __le16   conn_latency;
1662     __le16   supervision_timeout;
1663     __le16   min_ce_len;
1664     __le16   max_ce_len;
1665 } __packed;
1666 
1667 #define HCI_OP_LE_CREATE_CONN_CANCEL    0x200e
1668 
1669 #define HCI_OP_LE_READ_ACCEPT_LIST_SIZE 0x200f
1670 struct hci_rp_le_read_accept_list_size {
1671     __u8    status;
1672     __u8    size;
1673 } __packed;
1674 
1675 #define HCI_OP_LE_CLEAR_ACCEPT_LIST 0x2010
1676 
1677 #define HCI_OP_LE_ADD_TO_ACCEPT_LIST    0x2011
1678 struct hci_cp_le_add_to_accept_list {
1679     __u8     bdaddr_type;
1680     bdaddr_t bdaddr;
1681 } __packed;
1682 
1683 #define HCI_OP_LE_DEL_FROM_ACCEPT_LIST  0x2012
1684 struct hci_cp_le_del_from_accept_list {
1685     __u8     bdaddr_type;
1686     bdaddr_t bdaddr;
1687 } __packed;
1688 
1689 #define HCI_OP_LE_CONN_UPDATE       0x2013
1690 struct hci_cp_le_conn_update {
1691     __le16   handle;
1692     __le16   conn_interval_min;
1693     __le16   conn_interval_max;
1694     __le16   conn_latency;
1695     __le16   supervision_timeout;
1696     __le16   min_ce_len;
1697     __le16   max_ce_len;
1698 } __packed;
1699 
1700 #define HCI_OP_LE_READ_REMOTE_FEATURES  0x2016
1701 struct hci_cp_le_read_remote_features {
1702     __le16   handle;
1703 } __packed;
1704 
1705 #define HCI_OP_LE_START_ENC     0x2019
1706 struct hci_cp_le_start_enc {
1707     __le16  handle;
1708     __le64  rand;
1709     __le16  ediv;
1710     __u8    ltk[16];
1711 } __packed;
1712 
1713 #define HCI_OP_LE_LTK_REPLY     0x201a
1714 struct hci_cp_le_ltk_reply {
1715     __le16  handle;
1716     __u8    ltk[16];
1717 } __packed;
1718 struct hci_rp_le_ltk_reply {
1719     __u8    status;
1720     __le16  handle;
1721 } __packed;
1722 
1723 #define HCI_OP_LE_LTK_NEG_REPLY     0x201b
1724 struct hci_cp_le_ltk_neg_reply {
1725     __le16  handle;
1726 } __packed;
1727 struct hci_rp_le_ltk_neg_reply {
1728     __u8    status;
1729     __le16  handle;
1730 } __packed;
1731 
1732 #define HCI_OP_LE_READ_SUPPORTED_STATES 0x201c
1733 struct hci_rp_le_read_supported_states {
1734     __u8    status;
1735     __u8    le_states[8];
1736 } __packed;
1737 
1738 #define HCI_OP_LE_CONN_PARAM_REQ_REPLY  0x2020
1739 struct hci_cp_le_conn_param_req_reply {
1740     __le16  handle;
1741     __le16  interval_min;
1742     __le16  interval_max;
1743     __le16  latency;
1744     __le16  timeout;
1745     __le16  min_ce_len;
1746     __le16  max_ce_len;
1747 } __packed;
1748 
1749 #define HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY  0x2021
1750 struct hci_cp_le_conn_param_req_neg_reply {
1751     __le16  handle;
1752     __u8    reason;
1753 } __packed;
1754 
1755 #define HCI_OP_LE_SET_DATA_LEN      0x2022
1756 struct hci_cp_le_set_data_len {
1757     __le16  handle;
1758     __le16  tx_len;
1759     __le16  tx_time;
1760 } __packed;
1761 struct hci_rp_le_set_data_len {
1762     __u8    status;
1763     __le16  handle;
1764 } __packed;
1765 
1766 #define HCI_OP_LE_READ_DEF_DATA_LEN 0x2023
1767 struct hci_rp_le_read_def_data_len {
1768     __u8    status;
1769     __le16  tx_len;
1770     __le16  tx_time;
1771 } __packed;
1772 
1773 #define HCI_OP_LE_WRITE_DEF_DATA_LEN    0x2024
1774 struct hci_cp_le_write_def_data_len {
1775     __le16  tx_len;
1776     __le16  tx_time;
1777 } __packed;
1778 
1779 #define HCI_OP_LE_ADD_TO_RESOLV_LIST    0x2027
1780 struct hci_cp_le_add_to_resolv_list {
1781     __u8     bdaddr_type;
1782     bdaddr_t bdaddr;
1783     __u8     peer_irk[16];
1784     __u8     local_irk[16];
1785 } __packed;
1786 
1787 #define HCI_OP_LE_DEL_FROM_RESOLV_LIST  0x2028
1788 struct hci_cp_le_del_from_resolv_list {
1789     __u8     bdaddr_type;
1790     bdaddr_t bdaddr;
1791 } __packed;
1792 
1793 #define HCI_OP_LE_CLEAR_RESOLV_LIST 0x2029
1794 
1795 #define HCI_OP_LE_READ_RESOLV_LIST_SIZE 0x202a
1796 struct hci_rp_le_read_resolv_list_size {
1797     __u8    status;
1798     __u8    size;
1799 } __packed;
1800 
1801 #define HCI_OP_LE_SET_ADDR_RESOLV_ENABLE 0x202d
1802 
1803 #define HCI_OP_LE_SET_RPA_TIMEOUT   0x202e
1804 
1805 #define HCI_OP_LE_READ_MAX_DATA_LEN 0x202f
1806 struct hci_rp_le_read_max_data_len {
1807     __u8    status;
1808     __le16  tx_len;
1809     __le16  tx_time;
1810     __le16  rx_len;
1811     __le16  rx_time;
1812 } __packed;
1813 
1814 #define HCI_OP_LE_SET_DEFAULT_PHY   0x2031
1815 struct hci_cp_le_set_default_phy {
1816     __u8    all_phys;
1817     __u8    tx_phys;
1818     __u8    rx_phys;
1819 } __packed;
1820 
1821 #define HCI_LE_SET_PHY_1M       0x01
1822 #define HCI_LE_SET_PHY_2M       0x02
1823 #define HCI_LE_SET_PHY_CODED        0x04
1824 
1825 #define HCI_OP_LE_SET_EXT_SCAN_PARAMS   0x2041
1826 struct hci_cp_le_set_ext_scan_params {
1827     __u8    own_addr_type;
1828     __u8    filter_policy;
1829     __u8    scanning_phys;
1830     __u8    data[];
1831 } __packed;
1832 
1833 #define LE_SCAN_PHY_1M      0x01
1834 #define LE_SCAN_PHY_2M      0x02
1835 #define LE_SCAN_PHY_CODED   0x04
1836 
1837 struct hci_cp_le_scan_phy_params {
1838     __u8    type;
1839     __le16  interval;
1840     __le16  window;
1841 } __packed;
1842 
1843 #define HCI_OP_LE_SET_EXT_SCAN_ENABLE   0x2042
1844 struct hci_cp_le_set_ext_scan_enable {
1845     __u8    enable;
1846     __u8    filter_dup;
1847     __le16  duration;
1848     __le16  period;
1849 } __packed;
1850 
1851 #define HCI_OP_LE_EXT_CREATE_CONN    0x2043
1852 struct hci_cp_le_ext_create_conn {
1853     __u8      filter_policy;
1854     __u8      own_addr_type;
1855     __u8      peer_addr_type;
1856     bdaddr_t  peer_addr;
1857     __u8      phys;
1858     __u8      data[];
1859 } __packed;
1860 
1861 struct hci_cp_le_ext_conn_param {
1862     __le16 scan_interval;
1863     __le16 scan_window;
1864     __le16 conn_interval_min;
1865     __le16 conn_interval_max;
1866     __le16 conn_latency;
1867     __le16 supervision_timeout;
1868     __le16 min_ce_len;
1869     __le16 max_ce_len;
1870 } __packed;
1871 
1872 #define HCI_OP_LE_PA_CREATE_SYNC    0x2044
1873 struct hci_cp_le_pa_create_sync {
1874     __u8      options;
1875     __u8      sid;
1876     __u8      addr_type;
1877     bdaddr_t  addr;
1878     __le16    skip;
1879     __le16    sync_timeout;
1880     __u8      sync_cte_type;
1881 } __packed;
1882 
1883 #define HCI_OP_LE_PA_TERM_SYNC      0x2046
1884 struct hci_cp_le_pa_term_sync {
1885     __le16    handle;
1886 } __packed;
1887 
1888 #define HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS   0x203b
1889 struct hci_rp_le_read_num_supported_adv_sets {
1890     __u8  status;
1891     __u8  num_of_sets;
1892 } __packed;
1893 
1894 #define HCI_OP_LE_SET_EXT_ADV_PARAMS        0x2036
1895 struct hci_cp_le_set_ext_adv_params {
1896     __u8      handle;
1897     __le16    evt_properties;
1898     __u8      min_interval[3];
1899     __u8      max_interval[3];
1900     __u8      channel_map;
1901     __u8      own_addr_type;
1902     __u8      peer_addr_type;
1903     bdaddr_t  peer_addr;
1904     __u8      filter_policy;
1905     __u8      tx_power;
1906     __u8      primary_phy;
1907     __u8      secondary_max_skip;
1908     __u8      secondary_phy;
1909     __u8      sid;
1910     __u8      notif_enable;
1911 } __packed;
1912 
1913 #define HCI_ADV_PHY_1M      0X01
1914 #define HCI_ADV_PHY_2M      0x02
1915 #define HCI_ADV_PHY_CODED   0x03
1916 
1917 struct hci_rp_le_set_ext_adv_params {
1918     __u8  status;
1919     __u8  tx_power;
1920 } __packed;
1921 
1922 struct hci_cp_ext_adv_set {
1923     __u8  handle;
1924     __le16 duration;
1925     __u8  max_events;
1926 } __packed;
1927 
1928 #define HCI_MAX_EXT_AD_LENGTH   251
1929 
1930 #define HCI_OP_LE_SET_EXT_ADV_DATA      0x2037
1931 struct hci_cp_le_set_ext_adv_data {
1932     __u8  handle;
1933     __u8  operation;
1934     __u8  frag_pref;
1935     __u8  length;
1936     __u8  data[];
1937 } __packed;
1938 
1939 #define HCI_OP_LE_SET_EXT_SCAN_RSP_DATA     0x2038
1940 struct hci_cp_le_set_ext_scan_rsp_data {
1941     __u8  handle;
1942     __u8  operation;
1943     __u8  frag_pref;
1944     __u8  length;
1945     __u8  data[];
1946 } __packed;
1947 
1948 #define HCI_OP_LE_SET_EXT_ADV_ENABLE        0x2039
1949 struct hci_cp_le_set_ext_adv_enable {
1950     __u8  enable;
1951     __u8  num_of_sets;
1952     __u8  data[];
1953 } __packed;
1954 
1955 #define HCI_OP_LE_SET_PER_ADV_PARAMS        0x203e
1956 struct hci_cp_le_set_per_adv_params {
1957     __u8      handle;
1958     __le16    min_interval;
1959     __le16    max_interval;
1960     __le16    periodic_properties;
1961 } __packed;
1962 
1963 #define HCI_MAX_PER_AD_LENGTH   252
1964 
1965 #define HCI_OP_LE_SET_PER_ADV_DATA      0x203f
1966 struct hci_cp_le_set_per_adv_data {
1967     __u8  handle;
1968     __u8  operation;
1969     __u8  length;
1970     __u8  data[];
1971 } __packed;
1972 
1973 #define HCI_OP_LE_SET_PER_ADV_ENABLE        0x2040
1974 struct hci_cp_le_set_per_adv_enable {
1975     __u8  enable;
1976     __u8  handle;
1977 } __packed;
1978 
1979 #define LE_SET_ADV_DATA_OP_COMPLETE 0x03
1980 
1981 #define LE_SET_ADV_DATA_NO_FRAG     0x01
1982 
1983 #define HCI_OP_LE_REMOVE_ADV_SET    0x203c
1984 
1985 #define HCI_OP_LE_CLEAR_ADV_SETS    0x203d
1986 
1987 #define HCI_OP_LE_SET_ADV_SET_RAND_ADDR 0x2035
1988 struct hci_cp_le_set_adv_set_rand_addr {
1989     __u8  handle;
1990     bdaddr_t  bdaddr;
1991 } __packed;
1992 
1993 #define HCI_OP_LE_READ_TRANSMIT_POWER   0x204b
1994 struct hci_rp_le_read_transmit_power {
1995     __u8  status;
1996     __s8  min_le_tx_power;
1997     __s8  max_le_tx_power;
1998 } __packed;
1999 
2000 #define HCI_NETWORK_PRIVACY     0x00
2001 #define HCI_DEVICE_PRIVACY      0x01
2002 
2003 #define HCI_OP_LE_SET_PRIVACY_MODE  0x204e
2004 struct hci_cp_le_set_privacy_mode {
2005     __u8  bdaddr_type;
2006     bdaddr_t  bdaddr;
2007     __u8  mode;
2008 } __packed;
2009 
2010 #define HCI_OP_LE_READ_BUFFER_SIZE_V2   0x2060
2011 struct hci_rp_le_read_buffer_size_v2 {
2012     __u8    status;
2013     __le16  acl_mtu;
2014     __u8    acl_max_pkt;
2015     __le16  iso_mtu;
2016     __u8    iso_max_pkt;
2017 } __packed;
2018 
2019 #define HCI_OP_LE_READ_ISO_TX_SYNC      0x2061
2020 struct hci_cp_le_read_iso_tx_sync {
2021     __le16  handle;
2022 } __packed;
2023 
2024 struct hci_rp_le_read_iso_tx_sync {
2025     __u8    status;
2026     __le16  handle;
2027     __le16  seq;
2028     __le32  imestamp;
2029     __u8    offset[3];
2030 } __packed;
2031 
2032 #define HCI_OP_LE_SET_CIG_PARAMS        0x2062
2033 struct hci_cis_params {
2034     __u8    cis_id;
2035     __le16  c_sdu;
2036     __le16  p_sdu;
2037     __u8    c_phy;
2038     __u8    p_phy;
2039     __u8    c_rtn;
2040     __u8    p_rtn;
2041 } __packed;
2042 
2043 struct hci_cp_le_set_cig_params {
2044     __u8    cig_id;
2045     __u8    c_interval[3];
2046     __u8    p_interval[3];
2047     __u8    sca;
2048     __u8    packing;
2049     __u8    framing;
2050     __le16  c_latency;
2051     __le16  p_latency;
2052     __u8    num_cis;
2053     struct hci_cis_params cis[];
2054 } __packed;
2055 
2056 struct hci_rp_le_set_cig_params {
2057     __u8    status;
2058     __u8    cig_id;
2059     __u8    num_handles;
2060     __le16  handle[];
2061 } __packed;
2062 
2063 #define HCI_OP_LE_CREATE_CIS            0x2064
2064 struct hci_cis {
2065     __le16  cis_handle;
2066     __le16  acl_handle;
2067 } __packed;
2068 
2069 struct hci_cp_le_create_cis {
2070     __u8    num_cis;
2071     struct hci_cis cis[];
2072 } __packed;
2073 
2074 #define HCI_OP_LE_REMOVE_CIG            0x2065
2075 struct hci_cp_le_remove_cig {
2076     __u8    cig_id;
2077 } __packed;
2078 
2079 #define HCI_OP_LE_ACCEPT_CIS            0x2066
2080 struct hci_cp_le_accept_cis {
2081     __le16  handle;
2082 } __packed;
2083 
2084 #define HCI_OP_LE_REJECT_CIS            0x2067
2085 struct hci_cp_le_reject_cis {
2086     __le16  handle;
2087     __u8    reason;
2088 } __packed;
2089 
2090 #define HCI_OP_LE_CREATE_BIG            0x2068
2091 struct hci_bis {
2092     __u8    sdu_interval[3];
2093     __le16  sdu;
2094     __le16  latency;
2095     __u8    rtn;
2096     __u8    phy;
2097     __u8    packing;
2098     __u8    framing;
2099     __u8    encryption;
2100     __u8    bcode[16];
2101 } __packed;
2102 
2103 struct hci_cp_le_create_big {
2104     __u8    handle;
2105     __u8    adv_handle;
2106     __u8    num_bis;
2107     struct hci_bis bis;
2108 } __packed;
2109 
2110 #define HCI_OP_LE_TERM_BIG          0x206a
2111 struct hci_cp_le_term_big {
2112     __u8    handle;
2113     __u8    reason;
2114 } __packed;
2115 
2116 #define HCI_OP_LE_BIG_CREATE_SYNC       0x206b
2117 struct hci_cp_le_big_create_sync {
2118     __u8    handle;
2119     __le16  sync_handle;
2120     __u8    encryption;
2121     __u8    bcode[16];
2122     __u8    mse;
2123     __le16  timeout;
2124     __u8    num_bis;
2125     __u8    bis[0];
2126 } __packed;
2127 
2128 #define HCI_OP_LE_BIG_TERM_SYNC         0x206c
2129 struct hci_cp_le_big_term_sync {
2130     __u8    handle;
2131 } __packed;
2132 
2133 #define HCI_OP_LE_SETUP_ISO_PATH        0x206e
2134 struct hci_cp_le_setup_iso_path {
2135     __le16  handle;
2136     __u8    direction;
2137     __u8    path;
2138     __u8    codec;
2139     __le16  codec_cid;
2140     __le16  codec_vid;
2141     __u8    delay[3];
2142     __u8    codec_cfg_len;
2143     __u8    codec_cfg[0];
2144 } __packed;
2145 
2146 struct hci_rp_le_setup_iso_path {
2147     __u8    status;
2148     __le16  handle;
2149 } __packed;
2150 
2151 #define HCI_OP_LE_SET_HOST_FEATURE      0x2074
2152 struct hci_cp_le_set_host_feature {
2153     __u8     bit_number;
2154     __u8     bit_value;
2155 } __packed;
2156 
2157 /* ---- HCI Events ---- */
2158 struct hci_ev_status {
2159     __u8    status;
2160 } __packed;
2161 
2162 #define HCI_EV_INQUIRY_COMPLETE     0x01
2163 
2164 #define HCI_EV_INQUIRY_RESULT       0x02
2165 struct inquiry_info {
2166     bdaddr_t bdaddr;
2167     __u8     pscan_rep_mode;
2168     __u8     pscan_period_mode;
2169     __u8     pscan_mode;
2170     __u8     dev_class[3];
2171     __le16   clock_offset;
2172 } __packed;
2173 
2174 struct hci_ev_inquiry_result {
2175     __u8    num;
2176     struct inquiry_info info[];
2177 };
2178 
2179 #define HCI_EV_CONN_COMPLETE        0x03
2180 struct hci_ev_conn_complete {
2181     __u8     status;
2182     __le16   handle;
2183     bdaddr_t bdaddr;
2184     __u8     link_type;
2185     __u8     encr_mode;
2186 } __packed;
2187 
2188 #define HCI_EV_CONN_REQUEST     0x04
2189 struct hci_ev_conn_request {
2190     bdaddr_t bdaddr;
2191     __u8     dev_class[3];
2192     __u8     link_type;
2193 } __packed;
2194 
2195 #define HCI_EV_DISCONN_COMPLETE     0x05
2196 struct hci_ev_disconn_complete {
2197     __u8     status;
2198     __le16   handle;
2199     __u8     reason;
2200 } __packed;
2201 
2202 #define HCI_EV_AUTH_COMPLETE        0x06
2203 struct hci_ev_auth_complete {
2204     __u8     status;
2205     __le16   handle;
2206 } __packed;
2207 
2208 #define HCI_EV_REMOTE_NAME      0x07
2209 struct hci_ev_remote_name {
2210     __u8     status;
2211     bdaddr_t bdaddr;
2212     __u8     name[HCI_MAX_NAME_LENGTH];
2213 } __packed;
2214 
2215 #define HCI_EV_ENCRYPT_CHANGE       0x08
2216 struct hci_ev_encrypt_change {
2217     __u8     status;
2218     __le16   handle;
2219     __u8     encrypt;
2220 } __packed;
2221 
2222 #define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
2223 struct hci_ev_change_link_key_complete {
2224     __u8     status;
2225     __le16   handle;
2226 } __packed;
2227 
2228 #define HCI_EV_REMOTE_FEATURES      0x0b
2229 struct hci_ev_remote_features {
2230     __u8     status;
2231     __le16   handle;
2232     __u8     features[8];
2233 } __packed;
2234 
2235 #define HCI_EV_REMOTE_VERSION       0x0c
2236 struct hci_ev_remote_version {
2237     __u8     status;
2238     __le16   handle;
2239     __u8     lmp_ver;
2240     __le16   manufacturer;
2241     __le16   lmp_subver;
2242 } __packed;
2243 
2244 #define HCI_EV_QOS_SETUP_COMPLETE   0x0d
2245 struct hci_qos {
2246     __u8     service_type;
2247     __u32    token_rate;
2248     __u32    peak_bandwidth;
2249     __u32    latency;
2250     __u32    delay_variation;
2251 } __packed;
2252 struct hci_ev_qos_setup_complete {
2253     __u8     status;
2254     __le16   handle;
2255     struct   hci_qos qos;
2256 } __packed;
2257 
2258 #define HCI_EV_CMD_COMPLETE     0x0e
2259 struct hci_ev_cmd_complete {
2260     __u8     ncmd;
2261     __le16   opcode;
2262 } __packed;
2263 
2264 #define HCI_EV_CMD_STATUS       0x0f
2265 struct hci_ev_cmd_status {
2266     __u8     status;
2267     __u8     ncmd;
2268     __le16   opcode;
2269 } __packed;
2270 
2271 #define HCI_EV_HARDWARE_ERROR       0x10
2272 struct hci_ev_hardware_error {
2273     __u8     code;
2274 } __packed;
2275 
2276 #define HCI_EV_ROLE_CHANGE      0x12
2277 struct hci_ev_role_change {
2278     __u8     status;
2279     bdaddr_t bdaddr;
2280     __u8     role;
2281 } __packed;
2282 
2283 #define HCI_EV_NUM_COMP_PKTS        0x13
2284 struct hci_comp_pkts_info {
2285     __le16   handle;
2286     __le16   count;
2287 } __packed;
2288 
2289 struct hci_ev_num_comp_pkts {
2290     __u8     num;
2291     struct hci_comp_pkts_info handles[];
2292 } __packed;
2293 
2294 #define HCI_EV_MODE_CHANGE      0x14
2295 struct hci_ev_mode_change {
2296     __u8     status;
2297     __le16   handle;
2298     __u8     mode;
2299     __le16   interval;
2300 } __packed;
2301 
2302 #define HCI_EV_PIN_CODE_REQ     0x16
2303 struct hci_ev_pin_code_req {
2304     bdaddr_t bdaddr;
2305 } __packed;
2306 
2307 #define HCI_EV_LINK_KEY_REQ     0x17
2308 struct hci_ev_link_key_req {
2309     bdaddr_t bdaddr;
2310 } __packed;
2311 
2312 #define HCI_EV_LINK_KEY_NOTIFY      0x18
2313 struct hci_ev_link_key_notify {
2314     bdaddr_t bdaddr;
2315     __u8     link_key[HCI_LINK_KEY_SIZE];
2316     __u8     key_type;
2317 } __packed;
2318 
2319 #define HCI_EV_CLOCK_OFFSET     0x1c
2320 struct hci_ev_clock_offset {
2321     __u8     status;
2322     __le16   handle;
2323     __le16   clock_offset;
2324 } __packed;
2325 
2326 #define HCI_EV_PKT_TYPE_CHANGE      0x1d
2327 struct hci_ev_pkt_type_change {
2328     __u8     status;
2329     __le16   handle;
2330     __le16   pkt_type;
2331 } __packed;
2332 
2333 #define HCI_EV_PSCAN_REP_MODE       0x20
2334 struct hci_ev_pscan_rep_mode {
2335     bdaddr_t bdaddr;
2336     __u8     pscan_rep_mode;
2337 } __packed;
2338 
2339 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
2340 struct inquiry_info_rssi {
2341     bdaddr_t bdaddr;
2342     __u8     pscan_rep_mode;
2343     __u8     pscan_period_mode;
2344     __u8     dev_class[3];
2345     __le16   clock_offset;
2346     __s8     rssi;
2347 } __packed;
2348 struct inquiry_info_rssi_pscan {
2349     bdaddr_t bdaddr;
2350     __u8     pscan_rep_mode;
2351     __u8     pscan_period_mode;
2352     __u8     pscan_mode;
2353     __u8     dev_class[3];
2354     __le16   clock_offset;
2355     __s8     rssi;
2356 } __packed;
2357 struct hci_ev_inquiry_result_rssi {
2358     __u8     num;
2359     __u8     data[];
2360 } __packed;
2361 
2362 #define HCI_EV_REMOTE_EXT_FEATURES  0x23
2363 struct hci_ev_remote_ext_features {
2364     __u8     status;
2365     __le16   handle;
2366     __u8     page;
2367     __u8     max_page;
2368     __u8     features[8];
2369 } __packed;
2370 
2371 #define HCI_EV_SYNC_CONN_COMPLETE   0x2c
2372 struct hci_ev_sync_conn_complete {
2373     __u8     status;
2374     __le16   handle;
2375     bdaddr_t bdaddr;
2376     __u8     link_type;
2377     __u8     tx_interval;
2378     __u8     retrans_window;
2379     __le16   rx_pkt_len;
2380     __le16   tx_pkt_len;
2381     __u8     air_mode;
2382 } __packed;
2383 
2384 #define HCI_EV_SYNC_CONN_CHANGED    0x2d
2385 struct hci_ev_sync_conn_changed {
2386     __u8     status;
2387     __le16   handle;
2388     __u8     tx_interval;
2389     __u8     retrans_window;
2390     __le16   rx_pkt_len;
2391     __le16   tx_pkt_len;
2392 } __packed;
2393 
2394 #define HCI_EV_SNIFF_SUBRATE        0x2e
2395 struct hci_ev_sniff_subrate {
2396     __u8     status;
2397     __le16   handle;
2398     __le16   max_tx_latency;
2399     __le16   max_rx_latency;
2400     __le16   max_remote_timeout;
2401     __le16   max_local_timeout;
2402 } __packed;
2403 
2404 #define HCI_EV_EXTENDED_INQUIRY_RESULT  0x2f
2405 struct extended_inquiry_info {
2406     bdaddr_t bdaddr;
2407     __u8     pscan_rep_mode;
2408     __u8     pscan_period_mode;
2409     __u8     dev_class[3];
2410     __le16   clock_offset;
2411     __s8     rssi;
2412     __u8     data[240];
2413 } __packed;
2414 
2415 struct hci_ev_ext_inquiry_result {
2416     __u8     num;
2417     struct extended_inquiry_info info[];
2418 } __packed;
2419 
2420 #define HCI_EV_KEY_REFRESH_COMPLETE 0x30
2421 struct hci_ev_key_refresh_complete {
2422     __u8    status;
2423     __le16  handle;
2424 } __packed;
2425 
2426 #define HCI_EV_IO_CAPA_REQUEST      0x31
2427 struct hci_ev_io_capa_request {
2428     bdaddr_t bdaddr;
2429 } __packed;
2430 
2431 #define HCI_EV_IO_CAPA_REPLY        0x32
2432 struct hci_ev_io_capa_reply {
2433     bdaddr_t bdaddr;
2434     __u8     capability;
2435     __u8     oob_data;
2436     __u8     authentication;
2437 } __packed;
2438 
2439 #define HCI_EV_USER_CONFIRM_REQUEST 0x33
2440 struct hci_ev_user_confirm_req {
2441     bdaddr_t    bdaddr;
2442     __le32      passkey;
2443 } __packed;
2444 
2445 #define HCI_EV_USER_PASSKEY_REQUEST 0x34
2446 struct hci_ev_user_passkey_req {
2447     bdaddr_t    bdaddr;
2448 } __packed;
2449 
2450 #define HCI_EV_REMOTE_OOB_DATA_REQUEST  0x35
2451 struct hci_ev_remote_oob_data_request {
2452     bdaddr_t bdaddr;
2453 } __packed;
2454 
2455 #define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
2456 struct hci_ev_simple_pair_complete {
2457     __u8     status;
2458     bdaddr_t bdaddr;
2459 } __packed;
2460 
2461 #define HCI_EV_USER_PASSKEY_NOTIFY  0x3b
2462 struct hci_ev_user_passkey_notify {
2463     bdaddr_t    bdaddr;
2464     __le32      passkey;
2465 } __packed;
2466 
2467 #define HCI_KEYPRESS_STARTED        0
2468 #define HCI_KEYPRESS_ENTERED        1
2469 #define HCI_KEYPRESS_ERASED     2
2470 #define HCI_KEYPRESS_CLEARED        3
2471 #define HCI_KEYPRESS_COMPLETED      4
2472 
2473 #define HCI_EV_KEYPRESS_NOTIFY      0x3c
2474 struct hci_ev_keypress_notify {
2475     bdaddr_t    bdaddr;
2476     __u8        type;
2477 } __packed;
2478 
2479 #define HCI_EV_REMOTE_HOST_FEATURES 0x3d
2480 struct hci_ev_remote_host_features {
2481     bdaddr_t bdaddr;
2482     __u8     features[8];
2483 } __packed;
2484 
2485 #define HCI_EV_LE_META          0x3e
2486 struct hci_ev_le_meta {
2487     __u8     subevent;
2488 } __packed;
2489 
2490 #define HCI_EV_PHY_LINK_COMPLETE    0x40
2491 struct hci_ev_phy_link_complete {
2492     __u8     status;
2493     __u8     phy_handle;
2494 } __packed;
2495 
2496 #define HCI_EV_CHANNEL_SELECTED     0x41
2497 struct hci_ev_channel_selected {
2498     __u8     phy_handle;
2499 } __packed;
2500 
2501 #define HCI_EV_DISCONN_PHY_LINK_COMPLETE    0x42
2502 struct hci_ev_disconn_phy_link_complete {
2503     __u8     status;
2504     __u8     phy_handle;
2505     __u8     reason;
2506 } __packed;
2507 
2508 #define HCI_EV_LOGICAL_LINK_COMPLETE        0x45
2509 struct hci_ev_logical_link_complete {
2510     __u8     status;
2511     __le16   handle;
2512     __u8     phy_handle;
2513     __u8     flow_spec_id;
2514 } __packed;
2515 
2516 #define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE    0x46
2517 struct hci_ev_disconn_logical_link_complete {
2518     __u8     status;
2519     __le16   handle;
2520     __u8     reason;
2521 } __packed;
2522 
2523 #define HCI_EV_NUM_COMP_BLOCKS      0x48
2524 struct hci_comp_blocks_info {
2525     __le16   handle;
2526     __le16   pkts;
2527     __le16   blocks;
2528 } __packed;
2529 
2530 struct hci_ev_num_comp_blocks {
2531     __le16   num_blocks;
2532     __u8     num_hndl;
2533     struct hci_comp_blocks_info handles[];
2534 } __packed;
2535 
2536 #define HCI_EV_SYNC_TRAIN_COMPLETE  0x4F
2537 struct hci_ev_sync_train_complete {
2538     __u8    status;
2539 } __packed;
2540 
2541 #define HCI_EV_PERIPHERAL_PAGE_RESP_TIMEOUT 0x54
2542 
2543 #define HCI_EV_LE_CONN_COMPLETE     0x01
2544 struct hci_ev_le_conn_complete {
2545     __u8     status;
2546     __le16   handle;
2547     __u8     role;
2548     __u8     bdaddr_type;
2549     bdaddr_t bdaddr;
2550     __le16   interval;
2551     __le16   latency;
2552     __le16   supervision_timeout;
2553     __u8     clk_accurancy;
2554 } __packed;
2555 
2556 /* Advertising report event types */
2557 #define LE_ADV_IND      0x00
2558 #define LE_ADV_DIRECT_IND   0x01
2559 #define LE_ADV_SCAN_IND     0x02
2560 #define LE_ADV_NONCONN_IND  0x03
2561 #define LE_ADV_SCAN_RSP     0x04
2562 #define LE_ADV_INVALID      0x05
2563 
2564 /* Legacy event types in extended adv report */
2565 #define LE_LEGACY_ADV_IND       0x0013
2566 #define LE_LEGACY_ADV_DIRECT_IND    0x0015
2567 #define LE_LEGACY_ADV_SCAN_IND      0x0012
2568 #define LE_LEGACY_NONCONN_IND       0x0010
2569 #define LE_LEGACY_SCAN_RSP_ADV      0x001b
2570 #define LE_LEGACY_SCAN_RSP_ADV_SCAN 0x001a
2571 
2572 /* Extended Advertising event types */
2573 #define LE_EXT_ADV_NON_CONN_IND     0x0000
2574 #define LE_EXT_ADV_CONN_IND     0x0001
2575 #define LE_EXT_ADV_SCAN_IND     0x0002
2576 #define LE_EXT_ADV_DIRECT_IND       0x0004
2577 #define LE_EXT_ADV_SCAN_RSP     0x0008
2578 #define LE_EXT_ADV_LEGACY_PDU       0x0010
2579 
2580 #define ADDR_LE_DEV_PUBLIC      0x00
2581 #define ADDR_LE_DEV_RANDOM      0x01
2582 #define ADDR_LE_DEV_PUBLIC_RESOLVED 0x02
2583 #define ADDR_LE_DEV_RANDOM_RESOLVED 0x03
2584 
2585 #define HCI_EV_LE_ADVERTISING_REPORT    0x02
2586 struct hci_ev_le_advertising_info {
2587     __u8     type;
2588     __u8     bdaddr_type;
2589     bdaddr_t bdaddr;
2590     __u8     length;
2591     __u8     data[];
2592 } __packed;
2593 
2594 struct hci_ev_le_advertising_report {
2595     __u8    num;
2596     struct hci_ev_le_advertising_info info[];
2597 } __packed;
2598 
2599 #define HCI_EV_LE_CONN_UPDATE_COMPLETE  0x03
2600 struct hci_ev_le_conn_update_complete {
2601     __u8     status;
2602     __le16   handle;
2603     __le16   interval;
2604     __le16   latency;
2605     __le16   supervision_timeout;
2606 } __packed;
2607 
2608 #define HCI_EV_LE_REMOTE_FEAT_COMPLETE  0x04
2609 struct hci_ev_le_remote_feat_complete {
2610     __u8     status;
2611     __le16   handle;
2612     __u8     features[8];
2613 } __packed;
2614 
2615 #define HCI_EV_LE_LTK_REQ       0x05
2616 struct hci_ev_le_ltk_req {
2617     __le16  handle;
2618     __le64  rand;
2619     __le16  ediv;
2620 } __packed;
2621 
2622 #define HCI_EV_LE_REMOTE_CONN_PARAM_REQ 0x06
2623 struct hci_ev_le_remote_conn_param_req {
2624     __le16 handle;
2625     __le16 interval_min;
2626     __le16 interval_max;
2627     __le16 latency;
2628     __le16 timeout;
2629 } __packed;
2630 
2631 #define HCI_EV_LE_DATA_LEN_CHANGE   0x07
2632 struct hci_ev_le_data_len_change {
2633     __le16  handle;
2634     __le16  tx_len;
2635     __le16  tx_time;
2636     __le16  rx_len;
2637     __le16  rx_time;
2638 } __packed;
2639 
2640 #define HCI_EV_LE_DIRECT_ADV_REPORT 0x0B
2641 struct hci_ev_le_direct_adv_info {
2642     __u8     type;
2643     __u8     bdaddr_type;
2644     bdaddr_t bdaddr;
2645     __u8     direct_addr_type;
2646     bdaddr_t direct_addr;
2647     __s8     rssi;
2648 } __packed;
2649 
2650 struct hci_ev_le_direct_adv_report {
2651     __u8     num;
2652     struct hci_ev_le_direct_adv_info info[];
2653 } __packed;
2654 
2655 #define HCI_EV_LE_PHY_UPDATE_COMPLETE   0x0c
2656 struct hci_ev_le_phy_update_complete {
2657     __u8  status;
2658     __le16 handle;
2659     __u8  tx_phy;
2660     __u8  rx_phy;
2661 } __packed;
2662 
2663 #define HCI_EV_LE_EXT_ADV_REPORT    0x0d
2664 struct hci_ev_le_ext_adv_info {
2665     __le16   type;
2666     __u8     bdaddr_type;
2667     bdaddr_t bdaddr;
2668     __u8     primary_phy;
2669     __u8     secondary_phy;
2670     __u8     sid;
2671     __u8     tx_power;
2672     __s8     rssi;
2673     __le16   interval;
2674     __u8     direct_addr_type;
2675     bdaddr_t direct_addr;
2676     __u8     length;
2677     __u8     data[];
2678 } __packed;
2679 
2680 struct hci_ev_le_ext_adv_report {
2681     __u8     num;
2682     struct hci_ev_le_ext_adv_info info[];
2683 } __packed;
2684 
2685 #define HCI_EV_LE_PA_SYNC_ESTABLISHED   0x0e
2686 struct hci_ev_le_pa_sync_established {
2687     __u8      status;
2688     __le16    handle;
2689     __u8      sid;
2690     __u8      bdaddr_type;
2691     bdaddr_t  bdaddr;
2692     __u8      phy;
2693     __le16    interval;
2694     __u8      clock_accuracy;
2695 } __packed;
2696 
2697 #define HCI_EV_LE_ENHANCED_CONN_COMPLETE    0x0a
2698 struct hci_ev_le_enh_conn_complete {
2699     __u8      status;
2700     __le16    handle;
2701     __u8      role;
2702     __u8      bdaddr_type;
2703     bdaddr_t  bdaddr;
2704     bdaddr_t  local_rpa;
2705     bdaddr_t  peer_rpa;
2706     __le16    interval;
2707     __le16    latency;
2708     __le16    supervision_timeout;
2709     __u8      clk_accurancy;
2710 } __packed;
2711 
2712 #define HCI_EV_LE_EXT_ADV_SET_TERM  0x12
2713 struct hci_evt_le_ext_adv_set_term {
2714     __u8    status;
2715     __u8    handle;
2716     __le16  conn_handle;
2717     __u8    num_evts;
2718 } __packed;
2719 
2720 #define HCI_EVT_LE_CIS_ESTABLISHED  0x19
2721 struct hci_evt_le_cis_established {
2722     __u8  status;
2723     __le16 handle;
2724     __u8  cig_sync_delay[3];
2725     __u8  cis_sync_delay[3];
2726     __u8  c_latency[3];
2727     __u8  p_latency[3];
2728     __u8  c_phy;
2729     __u8  p_phy;
2730     __u8  nse;
2731     __u8  c_bn;
2732     __u8  p_bn;
2733     __u8  c_ft;
2734     __u8  p_ft;
2735     __le16 c_mtu;
2736     __le16 p_mtu;
2737     __le16 interval;
2738 } __packed;
2739 
2740 #define HCI_EVT_LE_CIS_REQ      0x1a
2741 struct hci_evt_le_cis_req {
2742     __le16 acl_handle;
2743     __le16 cis_handle;
2744     __u8  cig_id;
2745     __u8  cis_id;
2746 } __packed;
2747 
2748 #define HCI_EVT_LE_CREATE_BIG_COMPLETE  0x1b
2749 struct hci_evt_le_create_big_complete {
2750     __u8    status;
2751     __u8    handle;
2752     __u8    sync_delay[3];
2753     __u8    transport_delay[3];
2754     __u8    phy;
2755     __u8    nse;
2756     __u8    bn;
2757     __u8    pto;
2758     __u8    irc;
2759     __le16  max_pdu;
2760     __le16  interval;
2761     __u8    num_bis;
2762     __le16  bis_handle[];
2763 } __packed;
2764 
2765 #define HCI_EVT_LE_BIG_SYNC_ESTABILISHED 0x1d
2766 struct hci_evt_le_big_sync_estabilished {
2767     __u8    status;
2768     __u8    handle;
2769     __u8    latency[3];
2770     __u8    nse;
2771     __u8    bn;
2772     __u8    pto;
2773     __u8    irc;
2774     __le16  max_pdu;
2775     __le16  interval;
2776     __u8    num_bis;
2777     __le16  bis[];
2778 } __packed;
2779 
2780 #define HCI_EVT_LE_BIG_INFO_ADV_REPORT  0x22
2781 struct hci_evt_le_big_info_adv_report {
2782     __le16  sync_handle;
2783     __u8    num_bis;
2784     __u8    nse;
2785     __le16  iso_interval;
2786     __u8    bn;
2787     __u8    pto;
2788     __u8    irc;
2789     __le16  max_pdu;
2790     __u8    sdu_interval[3];
2791     __le16  max_sdu;
2792     __u8    phy;
2793     __u8    framing;
2794     __u8    encryption;
2795 } __packed;
2796 
2797 #define HCI_EV_VENDOR           0xff
2798 
2799 /* Internal events generated by Bluetooth stack */
2800 #define HCI_EV_STACK_INTERNAL   0xfd
2801 struct hci_ev_stack_internal {
2802     __u16    type;
2803     __u8     data[];
2804 } __packed;
2805 
2806 #define HCI_EV_SI_DEVICE    0x01
2807 struct hci_ev_si_device {
2808     __u16    event;
2809     __u16    dev_id;
2810 } __packed;
2811 
2812 #define HCI_EV_SI_SECURITY  0x02
2813 struct hci_ev_si_security {
2814     __u16    event;
2815     __u16    proto;
2816     __u16    subproto;
2817     __u8     incoming;
2818 } __packed;
2819 
2820 /* ---- HCI Packet structures ---- */
2821 #define HCI_COMMAND_HDR_SIZE 3
2822 #define HCI_EVENT_HDR_SIZE   2
2823 #define HCI_ACL_HDR_SIZE     4
2824 #define HCI_SCO_HDR_SIZE     3
2825 #define HCI_ISO_HDR_SIZE     4
2826 
2827 struct hci_command_hdr {
2828     __le16  opcode;     /* OCF & OGF */
2829     __u8    plen;
2830 } __packed;
2831 
2832 struct hci_event_hdr {
2833     __u8    evt;
2834     __u8    plen;
2835 } __packed;
2836 
2837 struct hci_acl_hdr {
2838     __le16  handle;     /* Handle & Flags(PB, BC) */
2839     __le16  dlen;
2840 } __packed;
2841 
2842 struct hci_sco_hdr {
2843     __le16  handle;
2844     __u8    dlen;
2845 } __packed;
2846 
2847 struct hci_iso_hdr {
2848     __le16  handle;
2849     __le16  dlen;
2850     __u8    data[];
2851 } __packed;
2852 
2853 /* ISO data packet status flags */
2854 #define HCI_ISO_STATUS_VALID    0x00
2855 #define HCI_ISO_STATUS_INVALID  0x01
2856 #define HCI_ISO_STATUS_NOP  0x02
2857 
2858 #define HCI_ISO_DATA_HDR_SIZE   4
2859 struct hci_iso_data_hdr {
2860     __le16  sn;
2861     __le16  slen;
2862 };
2863 
2864 #define HCI_ISO_TS_DATA_HDR_SIZE 8
2865 struct hci_iso_ts_data_hdr {
2866     __le32  ts;
2867     __le16  sn;
2868     __le16  slen;
2869 };
2870 
2871 static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
2872 {
2873     return (struct hci_event_hdr *) skb->data;
2874 }
2875 
2876 static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
2877 {
2878     return (struct hci_acl_hdr *) skb->data;
2879 }
2880 
2881 static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
2882 {
2883     return (struct hci_sco_hdr *) skb->data;
2884 }
2885 
2886 /* Command opcode pack/unpack */
2887 #define hci_opcode_pack(ogf, ocf)   ((__u16) ((ocf & 0x03ff)|(ogf << 10)))
2888 #define hci_opcode_ogf(op)      (op >> 10)
2889 #define hci_opcode_ocf(op)      (op & 0x03ff)
2890 
2891 /* ACL handle and flags pack/unpack */
2892 #define hci_handle_pack(h, f)   ((__u16) ((h & 0x0fff)|(f << 12)))
2893 #define hci_handle(h)       (h & 0x0fff)
2894 #define hci_flags(h)        (h >> 12)
2895 
2896 /* ISO handle and flags pack/unpack */
2897 #define hci_iso_flags_pb(f)     (f & 0x0003)
2898 #define hci_iso_flags_ts(f)     ((f >> 2) & 0x0001)
2899 #define hci_iso_flags_pack(pb, ts)  ((pb & 0x03) | ((ts & 0x01) << 2))
2900 
2901 /* ISO data length and flags pack/unpack */
2902 #define hci_iso_data_len_pack(h, f) ((__u16) ((h) | ((f) << 14)))
2903 #define hci_iso_data_len(h)     ((h) & 0x3fff)
2904 #define hci_iso_data_flags(h)       ((h) >> 14)
2905 
2906 /* codec transport types */
2907 #define HCI_TRANSPORT_SCO_ESCO  0x01
2908 
2909 /* le24 support */
2910 static inline void hci_cpu_to_le24(__u32 val, __u8 dst[3])
2911 {
2912     dst[0] = val & 0xff;
2913     dst[1] = (val & 0xff00) >> 8;
2914     dst[2] = (val & 0xff0000) >> 16;
2915 }
2916 
2917 #endif /* __HCI_H */