0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
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
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
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
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
0074 #define HCI_PRIMARY 0x00
0075 #define HCI_AMP 0x01
0076
0077
0078 #define AMP_ID_BREDR 0x00
0079
0080
0081 #define AMP_TYPE_BREDR 0x00
0082 #define AMP_TYPE_80211 0x01
0083
0084
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
0094 enum {
0095
0096
0097
0098
0099
0100 HCI_QUIRK_RESET_ON_CLOSE,
0101
0102
0103
0104
0105
0106
0107 HCI_QUIRK_RAW_DEVICE,
0108
0109
0110
0111
0112
0113
0114 HCI_QUIRK_FIXUP_BUFFER_SIZE,
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 HCI_QUIRK_FIXUP_INQUIRY_MODE,
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136 HCI_QUIRK_BROKEN_LOCAL_COMMANDS,
0137
0138
0139
0140
0141
0142
0143
0144
0145 HCI_QUIRK_BROKEN_STORED_LINK_KEY,
0146
0147
0148
0149
0150
0151
0152
0153
0154 HCI_QUIRK_EXTERNAL_CONFIG,
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 HCI_QUIRK_INVALID_BDADDR,
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176 HCI_QUIRK_USE_BDADDR_PROPERTY,
0177
0178
0179
0180
0181
0182
0183
0184
0185 HCI_QUIRK_STRICT_DUPLICATE_FILTER,
0186
0187
0188
0189
0190
0191
0192
0193 HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
0194
0195
0196
0197
0198
0199
0200
0201
0202 HCI_QUIRK_NON_PERSISTENT_DIAG,
0203
0204
0205
0206
0207
0208
0209
0210
0211 HCI_QUIRK_NON_PERSISTENT_SETUP,
0212
0213
0214
0215
0216
0217
0218
0219
0220 HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED,
0221
0222
0223
0224
0225
0226
0227
0228
0229 HCI_QUIRK_VALID_LE_STATES,
0230
0231
0232
0233
0234
0235
0236
0237 HCI_QUIRK_NO_SUSPEND_NOTIFIER,
0238
0239
0240
0241
0242
0243
0244
0245
0246 HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER,
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256 HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL,
0257
0258
0259
0260
0261
0262
0263
0264
0265 HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN,
0266 };
0267
0268
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
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
0302
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
0361 #define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000)
0362 #define HCI_PAIRING_TIMEOUT msecs_to_jiffies(60000)
0363 #define HCI_INIT_TIMEOUT msecs_to_jiffies(10000)
0364 #define HCI_CMD_TIMEOUT msecs_to_jiffies(2000)
0365 #define HCI_NCMD_TIMEOUT msecs_to_jiffies(4000)
0366 #define HCI_ACL_TX_TIMEOUT msecs_to_jiffies(45000)
0367 #define HCI_AUTO_OFF_TIMEOUT msecs_to_jiffies(2000)
0368 #define HCI_POWER_OFF_TIMEOUT msecs_to_jiffies(5000)
0369 #define HCI_LE_CONN_TIMEOUT msecs_to_jiffies(20000)
0370 #define HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(4000)
0371
0372
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
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
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
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
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
0428 #define ISO_START 0x00
0429 #define ISO_CONT 0x01
0430 #define ISO_SINGLE 0x02
0431 #define ISO_END 0x03
0432
0433
0434 #define ISO_TS 0x01
0435
0436
0437 #define SCO_LINK 0x00
0438 #define ACL_LINK 0x01
0439 #define ESCO_LINK 0x02
0440
0441 #define LE_LINK 0x80
0442 #define AMP_LINK 0x81
0443 #define ISO_LINK 0x82
0444 #define INVALID_LINK 0xff
0445
0446
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
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
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
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
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
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
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
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
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
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
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
0597 #define HCI_FLOW_CTL_MODE_PACKET_BASED 0x00
0598 #define HCI_FLOW_CTL_MODE_BLOCK_BASED 0x01
0599
0600
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
0608 #define EIR_FLAGS 0x01
0609 #define EIR_UUID16_SOME 0x02
0610 #define EIR_UUID16_ALL 0x03
0611 #define EIR_UUID32_SOME 0x04
0612 #define EIR_UUID32_ALL 0x05
0613 #define EIR_UUID128_SOME 0x06
0614 #define EIR_UUID128_ALL 0x07
0615 #define EIR_NAME_SHORT 0x08
0616 #define EIR_NAME_COMPLETE 0x09
0617 #define EIR_TX_POWER 0x0A
0618 #define EIR_CLASS_OF_DEV 0x0D
0619 #define EIR_SSP_HASH_C192 0x0E
0620 #define EIR_SSP_RAND_R192 0x0F
0621 #define EIR_DEVICE_ID 0x10
0622 #define EIR_APPEARANCE 0x19
0623 #define EIR_SERVICE_DATA 0x16
0624 #define EIR_LE_BDADDR 0x1B
0625 #define EIR_LE_ROLE 0x1C
0626 #define EIR_SSP_HASH_C256 0x1D
0627 #define EIR_SSP_RAND_R256 0x1E
0628 #define EIR_LE_SC_CONFIRM 0x22
0629 #define EIR_LE_SC_RANDOM 0x23
0630
0631
0632 #define LE_AD_LIMITED 0x01
0633 #define LE_AD_GENERAL 0x02
0634 #define LE_AD_NO_BREDR 0x04
0635 #define LE_AD_SIM_LE_BREDR_CTRL 0x08
0636 #define LE_AD_SIM_LE_BREDR_HOST 0x10
0637
0638
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
1055 #define HCI_FLT_CLEAR_ALL 0x00
1056 #define HCI_FLT_INQ_RESULT 0x01
1057 #define HCI_FLT_CONN_SETUP 0x02
1058
1059
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
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
1388 __le16 cid;
1389
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
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
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
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
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
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
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;
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;
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
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
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
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
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
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
2907 #define HCI_TRANSPORT_SCO_ESCO 0x01
2908
2909
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