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 #define MGMT_INDEX_NONE 0xFFFF
0026
0027 #define MGMT_STATUS_SUCCESS 0x00
0028 #define MGMT_STATUS_UNKNOWN_COMMAND 0x01
0029 #define MGMT_STATUS_NOT_CONNECTED 0x02
0030 #define MGMT_STATUS_FAILED 0x03
0031 #define MGMT_STATUS_CONNECT_FAILED 0x04
0032 #define MGMT_STATUS_AUTH_FAILED 0x05
0033 #define MGMT_STATUS_NOT_PAIRED 0x06
0034 #define MGMT_STATUS_NO_RESOURCES 0x07
0035 #define MGMT_STATUS_TIMEOUT 0x08
0036 #define MGMT_STATUS_ALREADY_CONNECTED 0x09
0037 #define MGMT_STATUS_BUSY 0x0a
0038 #define MGMT_STATUS_REJECTED 0x0b
0039 #define MGMT_STATUS_NOT_SUPPORTED 0x0c
0040 #define MGMT_STATUS_INVALID_PARAMS 0x0d
0041 #define MGMT_STATUS_DISCONNECTED 0x0e
0042 #define MGMT_STATUS_NOT_POWERED 0x0f
0043 #define MGMT_STATUS_CANCELLED 0x10
0044 #define MGMT_STATUS_INVALID_INDEX 0x11
0045 #define MGMT_STATUS_RFKILLED 0x12
0046 #define MGMT_STATUS_ALREADY_PAIRED 0x13
0047 #define MGMT_STATUS_PERMISSION_DENIED 0x14
0048
0049 struct mgmt_hdr {
0050 __le16 opcode;
0051 __le16 index;
0052 __le16 len;
0053 } __packed;
0054
0055 struct mgmt_tlv {
0056 __le16 type;
0057 __u8 length;
0058 __u8 value[];
0059 } __packed;
0060
0061 struct mgmt_addr_info {
0062 bdaddr_t bdaddr;
0063 __u8 type;
0064 } __packed;
0065 #define MGMT_ADDR_INFO_SIZE 7
0066
0067 #define MGMT_OP_READ_VERSION 0x0001
0068 #define MGMT_READ_VERSION_SIZE 0
0069 struct mgmt_rp_read_version {
0070 __u8 version;
0071 __le16 revision;
0072 } __packed;
0073
0074 #define MGMT_OP_READ_COMMANDS 0x0002
0075 #define MGMT_READ_COMMANDS_SIZE 0
0076 struct mgmt_rp_read_commands {
0077 __le16 num_commands;
0078 __le16 num_events;
0079 __le16 opcodes[];
0080 } __packed;
0081
0082 #define MGMT_OP_READ_INDEX_LIST 0x0003
0083 #define MGMT_READ_INDEX_LIST_SIZE 0
0084 struct mgmt_rp_read_index_list {
0085 __le16 num_controllers;
0086 __le16 index[];
0087 } __packed;
0088
0089
0090
0091 #define MGMT_MAX_NAME_LENGTH (HCI_MAX_NAME_LENGTH + 1)
0092 #define MGMT_MAX_SHORT_NAME_LENGTH (HCI_MAX_SHORT_NAME_LENGTH + 1)
0093
0094 #define MGMT_SETTING_POWERED 0x00000001
0095 #define MGMT_SETTING_CONNECTABLE 0x00000002
0096 #define MGMT_SETTING_FAST_CONNECTABLE 0x00000004
0097 #define MGMT_SETTING_DISCOVERABLE 0x00000008
0098 #define MGMT_SETTING_BONDABLE 0x00000010
0099 #define MGMT_SETTING_LINK_SECURITY 0x00000020
0100 #define MGMT_SETTING_SSP 0x00000040
0101 #define MGMT_SETTING_BREDR 0x00000080
0102 #define MGMT_SETTING_HS 0x00000100
0103 #define MGMT_SETTING_LE 0x00000200
0104 #define MGMT_SETTING_ADVERTISING 0x00000400
0105 #define MGMT_SETTING_SECURE_CONN 0x00000800
0106 #define MGMT_SETTING_DEBUG_KEYS 0x00001000
0107 #define MGMT_SETTING_PRIVACY 0x00002000
0108 #define MGMT_SETTING_CONFIGURATION 0x00004000
0109 #define MGMT_SETTING_STATIC_ADDRESS 0x00008000
0110 #define MGMT_SETTING_PHY_CONFIGURATION 0x00010000
0111 #define MGMT_SETTING_WIDEBAND_SPEECH 0x00020000
0112
0113 #define MGMT_OP_READ_INFO 0x0004
0114 #define MGMT_READ_INFO_SIZE 0
0115 struct mgmt_rp_read_info {
0116 bdaddr_t bdaddr;
0117 __u8 version;
0118 __le16 manufacturer;
0119 __le32 supported_settings;
0120 __le32 current_settings;
0121 __u8 dev_class[3];
0122 __u8 name[MGMT_MAX_NAME_LENGTH];
0123 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
0124 } __packed;
0125
0126 struct mgmt_mode {
0127 __u8 val;
0128 } __packed;
0129
0130 #define MGMT_SETTING_SIZE 1
0131
0132 #define MGMT_OP_SET_POWERED 0x0005
0133
0134 #define MGMT_OP_SET_DISCOVERABLE 0x0006
0135 struct mgmt_cp_set_discoverable {
0136 __u8 val;
0137 __le16 timeout;
0138 } __packed;
0139 #define MGMT_SET_DISCOVERABLE_SIZE 3
0140
0141 #define MGMT_OP_SET_CONNECTABLE 0x0007
0142
0143 #define MGMT_OP_SET_FAST_CONNECTABLE 0x0008
0144
0145 #define MGMT_OP_SET_BONDABLE 0x0009
0146
0147 #define MGMT_OP_SET_LINK_SECURITY 0x000A
0148
0149 #define MGMT_OP_SET_SSP 0x000B
0150
0151 #define MGMT_OP_SET_HS 0x000C
0152
0153 #define MGMT_OP_SET_LE 0x000D
0154 #define MGMT_OP_SET_DEV_CLASS 0x000E
0155 struct mgmt_cp_set_dev_class {
0156 __u8 major;
0157 __u8 minor;
0158 } __packed;
0159 #define MGMT_SET_DEV_CLASS_SIZE 2
0160
0161 #define MGMT_OP_SET_LOCAL_NAME 0x000F
0162 struct mgmt_cp_set_local_name {
0163 __u8 name[MGMT_MAX_NAME_LENGTH];
0164 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
0165 } __packed;
0166 #define MGMT_SET_LOCAL_NAME_SIZE 260
0167
0168 #define MGMT_OP_ADD_UUID 0x0010
0169 struct mgmt_cp_add_uuid {
0170 __u8 uuid[16];
0171 __u8 svc_hint;
0172 } __packed;
0173 #define MGMT_ADD_UUID_SIZE 17
0174
0175 #define MGMT_OP_REMOVE_UUID 0x0011
0176 struct mgmt_cp_remove_uuid {
0177 __u8 uuid[16];
0178 } __packed;
0179 #define MGMT_REMOVE_UUID_SIZE 16
0180
0181 struct mgmt_link_key_info {
0182 struct mgmt_addr_info addr;
0183 __u8 type;
0184 __u8 val[16];
0185 __u8 pin_len;
0186 } __packed;
0187
0188 #define MGMT_OP_LOAD_LINK_KEYS 0x0012
0189 struct mgmt_cp_load_link_keys {
0190 __u8 debug_keys;
0191 __le16 key_count;
0192 struct mgmt_link_key_info keys[];
0193 } __packed;
0194 #define MGMT_LOAD_LINK_KEYS_SIZE 3
0195
0196 #define MGMT_LTK_UNAUTHENTICATED 0x00
0197 #define MGMT_LTK_AUTHENTICATED 0x01
0198 #define MGMT_LTK_P256_UNAUTH 0x02
0199 #define MGMT_LTK_P256_AUTH 0x03
0200 #define MGMT_LTK_P256_DEBUG 0x04
0201
0202 struct mgmt_ltk_info {
0203 struct mgmt_addr_info addr;
0204 __u8 type;
0205 __u8 initiator;
0206 __u8 enc_size;
0207 __le16 ediv;
0208 __le64 rand;
0209 __u8 val[16];
0210 } __packed;
0211
0212 #define MGMT_OP_LOAD_LONG_TERM_KEYS 0x0013
0213 struct mgmt_cp_load_long_term_keys {
0214 __le16 key_count;
0215 struct mgmt_ltk_info keys[];
0216 } __packed;
0217 #define MGMT_LOAD_LONG_TERM_KEYS_SIZE 2
0218
0219 #define MGMT_OP_DISCONNECT 0x0014
0220 struct mgmt_cp_disconnect {
0221 struct mgmt_addr_info addr;
0222 } __packed;
0223 #define MGMT_DISCONNECT_SIZE MGMT_ADDR_INFO_SIZE
0224 struct mgmt_rp_disconnect {
0225 struct mgmt_addr_info addr;
0226 } __packed;
0227
0228 #define MGMT_OP_GET_CONNECTIONS 0x0015
0229 #define MGMT_GET_CONNECTIONS_SIZE 0
0230 struct mgmt_rp_get_connections {
0231 __le16 conn_count;
0232 struct mgmt_addr_info addr[];
0233 } __packed;
0234
0235 #define MGMT_OP_PIN_CODE_REPLY 0x0016
0236 struct mgmt_cp_pin_code_reply {
0237 struct mgmt_addr_info addr;
0238 __u8 pin_len;
0239 __u8 pin_code[16];
0240 } __packed;
0241 #define MGMT_PIN_CODE_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 17)
0242 struct mgmt_rp_pin_code_reply {
0243 struct mgmt_addr_info addr;
0244 } __packed;
0245
0246 #define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017
0247 struct mgmt_cp_pin_code_neg_reply {
0248 struct mgmt_addr_info addr;
0249 } __packed;
0250 #define MGMT_PIN_CODE_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE
0251
0252 #define MGMT_OP_SET_IO_CAPABILITY 0x0018
0253 struct mgmt_cp_set_io_capability {
0254 __u8 io_capability;
0255 } __packed;
0256 #define MGMT_SET_IO_CAPABILITY_SIZE 1
0257
0258 #define MGMT_OP_PAIR_DEVICE 0x0019
0259 struct mgmt_cp_pair_device {
0260 struct mgmt_addr_info addr;
0261 __u8 io_cap;
0262 } __packed;
0263 #define MGMT_PAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1)
0264 struct mgmt_rp_pair_device {
0265 struct mgmt_addr_info addr;
0266 } __packed;
0267
0268 #define MGMT_OP_CANCEL_PAIR_DEVICE 0x001A
0269 #define MGMT_CANCEL_PAIR_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
0270
0271 #define MGMT_OP_UNPAIR_DEVICE 0x001B
0272 struct mgmt_cp_unpair_device {
0273 struct mgmt_addr_info addr;
0274 __u8 disconnect;
0275 } __packed;
0276 #define MGMT_UNPAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1)
0277 struct mgmt_rp_unpair_device {
0278 struct mgmt_addr_info addr;
0279 };
0280
0281 #define MGMT_OP_USER_CONFIRM_REPLY 0x001C
0282 struct mgmt_cp_user_confirm_reply {
0283 struct mgmt_addr_info addr;
0284 } __packed;
0285 #define MGMT_USER_CONFIRM_REPLY_SIZE MGMT_ADDR_INFO_SIZE
0286 struct mgmt_rp_user_confirm_reply {
0287 struct mgmt_addr_info addr;
0288 } __packed;
0289
0290 #define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D
0291 struct mgmt_cp_user_confirm_neg_reply {
0292 struct mgmt_addr_info addr;
0293 } __packed;
0294 #define MGMT_USER_CONFIRM_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE
0295
0296 #define MGMT_OP_USER_PASSKEY_REPLY 0x001E
0297 struct mgmt_cp_user_passkey_reply {
0298 struct mgmt_addr_info addr;
0299 __le32 passkey;
0300 } __packed;
0301 #define MGMT_USER_PASSKEY_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 4)
0302 struct mgmt_rp_user_passkey_reply {
0303 struct mgmt_addr_info addr;
0304 } __packed;
0305
0306 #define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F
0307 struct mgmt_cp_user_passkey_neg_reply {
0308 struct mgmt_addr_info addr;
0309 } __packed;
0310 #define MGMT_USER_PASSKEY_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE
0311
0312 #define MGMT_OP_READ_LOCAL_OOB_DATA 0x0020
0313 #define MGMT_READ_LOCAL_OOB_DATA_SIZE 0
0314 struct mgmt_rp_read_local_oob_data {
0315 __u8 hash192[16];
0316 __u8 rand192[16];
0317 __u8 hash256[16];
0318 __u8 rand256[16];
0319 } __packed;
0320
0321 #define MGMT_OP_ADD_REMOTE_OOB_DATA 0x0021
0322 struct mgmt_cp_add_remote_oob_data {
0323 struct mgmt_addr_info addr;
0324 __u8 hash[16];
0325 __u8 rand[16];
0326 } __packed;
0327 #define MGMT_ADD_REMOTE_OOB_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 32)
0328 struct mgmt_cp_add_remote_oob_ext_data {
0329 struct mgmt_addr_info addr;
0330 __u8 hash192[16];
0331 __u8 rand192[16];
0332 __u8 hash256[16];
0333 __u8 rand256[16];
0334 } __packed;
0335 #define MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 64)
0336
0337 #define MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0022
0338 struct mgmt_cp_remove_remote_oob_data {
0339 struct mgmt_addr_info addr;
0340 } __packed;
0341 #define MGMT_REMOVE_REMOTE_OOB_DATA_SIZE MGMT_ADDR_INFO_SIZE
0342
0343 #define MGMT_OP_START_DISCOVERY 0x0023
0344 struct mgmt_cp_start_discovery {
0345 __u8 type;
0346 } __packed;
0347 #define MGMT_START_DISCOVERY_SIZE 1
0348
0349 #define MGMT_OP_STOP_DISCOVERY 0x0024
0350 struct mgmt_cp_stop_discovery {
0351 __u8 type;
0352 } __packed;
0353 #define MGMT_STOP_DISCOVERY_SIZE 1
0354
0355 #define MGMT_OP_CONFIRM_NAME 0x0025
0356 struct mgmt_cp_confirm_name {
0357 struct mgmt_addr_info addr;
0358 __u8 name_known;
0359 } __packed;
0360 #define MGMT_CONFIRM_NAME_SIZE (MGMT_ADDR_INFO_SIZE + 1)
0361 struct mgmt_rp_confirm_name {
0362 struct mgmt_addr_info addr;
0363 } __packed;
0364
0365 #define MGMT_OP_BLOCK_DEVICE 0x0026
0366 struct mgmt_cp_block_device {
0367 struct mgmt_addr_info addr;
0368 } __packed;
0369 #define MGMT_BLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
0370
0371 #define MGMT_OP_UNBLOCK_DEVICE 0x0027
0372 struct mgmt_cp_unblock_device {
0373 struct mgmt_addr_info addr;
0374 } __packed;
0375 #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
0376
0377 #define MGMT_OP_SET_DEVICE_ID 0x0028
0378 struct mgmt_cp_set_device_id {
0379 __le16 source;
0380 __le16 vendor;
0381 __le16 product;
0382 __le16 version;
0383 } __packed;
0384 #define MGMT_SET_DEVICE_ID_SIZE 8
0385
0386 #define MGMT_OP_SET_ADVERTISING 0x0029
0387
0388 #define MGMT_OP_SET_BREDR 0x002A
0389
0390 #define MGMT_OP_SET_STATIC_ADDRESS 0x002B
0391 struct mgmt_cp_set_static_address {
0392 bdaddr_t bdaddr;
0393 } __packed;
0394 #define MGMT_SET_STATIC_ADDRESS_SIZE 6
0395
0396 #define MGMT_OP_SET_SCAN_PARAMS 0x002C
0397 struct mgmt_cp_set_scan_params {
0398 __le16 interval;
0399 __le16 window;
0400 } __packed;
0401 #define MGMT_SET_SCAN_PARAMS_SIZE 4
0402
0403 #define MGMT_OP_SET_SECURE_CONN 0x002D
0404
0405 #define MGMT_OP_SET_DEBUG_KEYS 0x002E
0406
0407 #define MGMT_OP_SET_PRIVACY 0x002F
0408 struct mgmt_cp_set_privacy {
0409 __u8 privacy;
0410 __u8 irk[16];
0411 } __packed;
0412 #define MGMT_SET_PRIVACY_SIZE 17
0413
0414 struct mgmt_irk_info {
0415 struct mgmt_addr_info addr;
0416 __u8 val[16];
0417 } __packed;
0418
0419 #define MGMT_OP_LOAD_IRKS 0x0030
0420 struct mgmt_cp_load_irks {
0421 __le16 irk_count;
0422 struct mgmt_irk_info irks[];
0423 } __packed;
0424 #define MGMT_LOAD_IRKS_SIZE 2
0425
0426 #define MGMT_OP_GET_CONN_INFO 0x0031
0427 struct mgmt_cp_get_conn_info {
0428 struct mgmt_addr_info addr;
0429 } __packed;
0430 #define MGMT_GET_CONN_INFO_SIZE MGMT_ADDR_INFO_SIZE
0431 struct mgmt_rp_get_conn_info {
0432 struct mgmt_addr_info addr;
0433 __s8 rssi;
0434 __s8 tx_power;
0435 __s8 max_tx_power;
0436 } __packed;
0437
0438 #define MGMT_OP_GET_CLOCK_INFO 0x0032
0439 struct mgmt_cp_get_clock_info {
0440 struct mgmt_addr_info addr;
0441 } __packed;
0442 #define MGMT_GET_CLOCK_INFO_SIZE MGMT_ADDR_INFO_SIZE
0443 struct mgmt_rp_get_clock_info {
0444 struct mgmt_addr_info addr;
0445 __le32 local_clock;
0446 __le32 piconet_clock;
0447 __le16 accuracy;
0448 } __packed;
0449
0450 #define MGMT_OP_ADD_DEVICE 0x0033
0451 struct mgmt_cp_add_device {
0452 struct mgmt_addr_info addr;
0453 __u8 action;
0454 } __packed;
0455 #define MGMT_ADD_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1)
0456
0457 #define MGMT_OP_REMOVE_DEVICE 0x0034
0458 struct mgmt_cp_remove_device {
0459 struct mgmt_addr_info addr;
0460 } __packed;
0461 #define MGMT_REMOVE_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
0462
0463 struct mgmt_conn_param {
0464 struct mgmt_addr_info addr;
0465 __le16 min_interval;
0466 __le16 max_interval;
0467 __le16 latency;
0468 __le16 timeout;
0469 } __packed;
0470
0471 #define MGMT_OP_LOAD_CONN_PARAM 0x0035
0472 struct mgmt_cp_load_conn_param {
0473 __le16 param_count;
0474 struct mgmt_conn_param params[];
0475 } __packed;
0476 #define MGMT_LOAD_CONN_PARAM_SIZE 2
0477
0478 #define MGMT_OP_READ_UNCONF_INDEX_LIST 0x0036
0479 #define MGMT_READ_UNCONF_INDEX_LIST_SIZE 0
0480 struct mgmt_rp_read_unconf_index_list {
0481 __le16 num_controllers;
0482 __le16 index[];
0483 } __packed;
0484
0485 #define MGMT_OPTION_EXTERNAL_CONFIG 0x00000001
0486 #define MGMT_OPTION_PUBLIC_ADDRESS 0x00000002
0487
0488 #define MGMT_OP_READ_CONFIG_INFO 0x0037
0489 #define MGMT_READ_CONFIG_INFO_SIZE 0
0490 struct mgmt_rp_read_config_info {
0491 __le16 manufacturer;
0492 __le32 supported_options;
0493 __le32 missing_options;
0494 } __packed;
0495
0496 #define MGMT_OP_SET_EXTERNAL_CONFIG 0x0038
0497 struct mgmt_cp_set_external_config {
0498 __u8 config;
0499 } __packed;
0500 #define MGMT_SET_EXTERNAL_CONFIG_SIZE 1
0501
0502 #define MGMT_OP_SET_PUBLIC_ADDRESS 0x0039
0503 struct mgmt_cp_set_public_address {
0504 bdaddr_t bdaddr;
0505 } __packed;
0506 #define MGMT_SET_PUBLIC_ADDRESS_SIZE 6
0507
0508 #define MGMT_OP_START_SERVICE_DISCOVERY 0x003A
0509 struct mgmt_cp_start_service_discovery {
0510 __u8 type;
0511 __s8 rssi;
0512 __le16 uuid_count;
0513 __u8 uuids[][16];
0514 } __packed;
0515 #define MGMT_START_SERVICE_DISCOVERY_SIZE 4
0516
0517 #define MGMT_OP_READ_LOCAL_OOB_EXT_DATA 0x003B
0518 struct mgmt_cp_read_local_oob_ext_data {
0519 __u8 type;
0520 } __packed;
0521 #define MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE 1
0522 struct mgmt_rp_read_local_oob_ext_data {
0523 __u8 type;
0524 __le16 eir_len;
0525 __u8 eir[];
0526 } __packed;
0527
0528 #define MGMT_OP_READ_EXT_INDEX_LIST 0x003C
0529 #define MGMT_READ_EXT_INDEX_LIST_SIZE 0
0530 struct mgmt_rp_read_ext_index_list {
0531 __le16 num_controllers;
0532 struct {
0533 __le16 index;
0534 __u8 type;
0535 __u8 bus;
0536 } entry[];
0537 } __packed;
0538
0539 #define MGMT_OP_READ_ADV_FEATURES 0x0003D
0540 #define MGMT_READ_ADV_FEATURES_SIZE 0
0541 struct mgmt_rp_read_adv_features {
0542 __le32 supported_flags;
0543 __u8 max_adv_data_len;
0544 __u8 max_scan_rsp_len;
0545 __u8 max_instances;
0546 __u8 num_instances;
0547 __u8 instance[];
0548 } __packed;
0549
0550 #define MGMT_OP_ADD_ADVERTISING 0x003E
0551 struct mgmt_cp_add_advertising {
0552 __u8 instance;
0553 __le32 flags;
0554 __le16 duration;
0555 __le16 timeout;
0556 __u8 adv_data_len;
0557 __u8 scan_rsp_len;
0558 __u8 data[];
0559 } __packed;
0560 #define MGMT_ADD_ADVERTISING_SIZE 11
0561 struct mgmt_rp_add_advertising {
0562 __u8 instance;
0563 } __packed;
0564
0565 #define MGMT_ADV_FLAG_CONNECTABLE BIT(0)
0566 #define MGMT_ADV_FLAG_DISCOV BIT(1)
0567 #define MGMT_ADV_FLAG_LIMITED_DISCOV BIT(2)
0568 #define MGMT_ADV_FLAG_MANAGED_FLAGS BIT(3)
0569 #define MGMT_ADV_FLAG_TX_POWER BIT(4)
0570 #define MGMT_ADV_FLAG_APPEARANCE BIT(5)
0571 #define MGMT_ADV_FLAG_LOCAL_NAME BIT(6)
0572 #define MGMT_ADV_FLAG_SEC_1M BIT(7)
0573 #define MGMT_ADV_FLAG_SEC_2M BIT(8)
0574 #define MGMT_ADV_FLAG_SEC_CODED BIT(9)
0575 #define MGMT_ADV_FLAG_CAN_SET_TX_POWER BIT(10)
0576 #define MGMT_ADV_FLAG_HW_OFFLOAD BIT(11)
0577 #define MGMT_ADV_PARAM_DURATION BIT(12)
0578 #define MGMT_ADV_PARAM_TIMEOUT BIT(13)
0579 #define MGMT_ADV_PARAM_INTERVALS BIT(14)
0580 #define MGMT_ADV_PARAM_TX_POWER BIT(15)
0581 #define MGMT_ADV_PARAM_SCAN_RSP BIT(16)
0582
0583 #define MGMT_ADV_FLAG_SEC_MASK (MGMT_ADV_FLAG_SEC_1M | MGMT_ADV_FLAG_SEC_2M | \
0584 MGMT_ADV_FLAG_SEC_CODED)
0585
0586 #define MGMT_OP_REMOVE_ADVERTISING 0x003F
0587 struct mgmt_cp_remove_advertising {
0588 __u8 instance;
0589 } __packed;
0590 #define MGMT_REMOVE_ADVERTISING_SIZE 1
0591 struct mgmt_rp_remove_advertising {
0592 __u8 instance;
0593 } __packed;
0594
0595 #define MGMT_OP_GET_ADV_SIZE_INFO 0x0040
0596 struct mgmt_cp_get_adv_size_info {
0597 __u8 instance;
0598 __le32 flags;
0599 } __packed;
0600 #define MGMT_GET_ADV_SIZE_INFO_SIZE 5
0601 struct mgmt_rp_get_adv_size_info {
0602 __u8 instance;
0603 __le32 flags;
0604 __u8 max_adv_data_len;
0605 __u8 max_scan_rsp_len;
0606 } __packed;
0607
0608 #define MGMT_OP_START_LIMITED_DISCOVERY 0x0041
0609
0610 #define MGMT_OP_READ_EXT_INFO 0x0042
0611 #define MGMT_READ_EXT_INFO_SIZE 0
0612 struct mgmt_rp_read_ext_info {
0613 bdaddr_t bdaddr;
0614 __u8 version;
0615 __le16 manufacturer;
0616 __le32 supported_settings;
0617 __le32 current_settings;
0618 __le16 eir_len;
0619 __u8 eir[];
0620 } __packed;
0621
0622 #define MGMT_OP_SET_APPEARANCE 0x0043
0623 struct mgmt_cp_set_appearance {
0624 __le16 appearance;
0625 } __packed;
0626 #define MGMT_SET_APPEARANCE_SIZE 2
0627
0628 #define MGMT_OP_GET_PHY_CONFIGURATION 0x0044
0629 struct mgmt_rp_get_phy_configuration {
0630 __le32 supported_phys;
0631 __le32 configurable_phys;
0632 __le32 selected_phys;
0633 } __packed;
0634 #define MGMT_GET_PHY_CONFIGURATION_SIZE 0
0635
0636 #define MGMT_PHY_BR_1M_1SLOT 0x00000001
0637 #define MGMT_PHY_BR_1M_3SLOT 0x00000002
0638 #define MGMT_PHY_BR_1M_5SLOT 0x00000004
0639 #define MGMT_PHY_EDR_2M_1SLOT 0x00000008
0640 #define MGMT_PHY_EDR_2M_3SLOT 0x00000010
0641 #define MGMT_PHY_EDR_2M_5SLOT 0x00000020
0642 #define MGMT_PHY_EDR_3M_1SLOT 0x00000040
0643 #define MGMT_PHY_EDR_3M_3SLOT 0x00000080
0644 #define MGMT_PHY_EDR_3M_5SLOT 0x00000100
0645 #define MGMT_PHY_LE_1M_TX 0x00000200
0646 #define MGMT_PHY_LE_1M_RX 0x00000400
0647 #define MGMT_PHY_LE_2M_TX 0x00000800
0648 #define MGMT_PHY_LE_2M_RX 0x00001000
0649 #define MGMT_PHY_LE_CODED_TX 0x00002000
0650 #define MGMT_PHY_LE_CODED_RX 0x00004000
0651
0652 #define MGMT_PHY_BREDR_MASK (MGMT_PHY_BR_1M_1SLOT | MGMT_PHY_BR_1M_3SLOT | \
0653 MGMT_PHY_BR_1M_5SLOT | MGMT_PHY_EDR_2M_1SLOT | \
0654 MGMT_PHY_EDR_2M_3SLOT | MGMT_PHY_EDR_2M_5SLOT | \
0655 MGMT_PHY_EDR_3M_1SLOT | MGMT_PHY_EDR_3M_3SLOT | \
0656 MGMT_PHY_EDR_3M_5SLOT)
0657 #define MGMT_PHY_LE_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_1M_RX | \
0658 MGMT_PHY_LE_2M_TX | MGMT_PHY_LE_2M_RX | \
0659 MGMT_PHY_LE_CODED_TX | MGMT_PHY_LE_CODED_RX)
0660 #define MGMT_PHY_LE_TX_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_2M_TX | \
0661 MGMT_PHY_LE_CODED_TX)
0662 #define MGMT_PHY_LE_RX_MASK (MGMT_PHY_LE_1M_RX | MGMT_PHY_LE_2M_RX | \
0663 MGMT_PHY_LE_CODED_RX)
0664
0665 #define MGMT_OP_SET_PHY_CONFIGURATION 0x0045
0666 struct mgmt_cp_set_phy_configuration {
0667 __le32 selected_phys;
0668 } __packed;
0669 #define MGMT_SET_PHY_CONFIGURATION_SIZE 4
0670
0671 #define MGMT_OP_SET_BLOCKED_KEYS 0x0046
0672
0673 #define HCI_BLOCKED_KEY_TYPE_LINKKEY 0x00
0674 #define HCI_BLOCKED_KEY_TYPE_LTK 0x01
0675 #define HCI_BLOCKED_KEY_TYPE_IRK 0x02
0676
0677 struct mgmt_blocked_key_info {
0678 __u8 type;
0679 __u8 val[16];
0680 } __packed;
0681
0682 struct mgmt_cp_set_blocked_keys {
0683 __le16 key_count;
0684 struct mgmt_blocked_key_info keys[];
0685 } __packed;
0686 #define MGMT_OP_SET_BLOCKED_KEYS_SIZE 2
0687
0688 #define MGMT_OP_SET_WIDEBAND_SPEECH 0x0047
0689
0690 #define MGMT_CAP_SEC_FLAGS 0x01
0691 #define MGMT_CAP_MAX_ENC_KEY_SIZE 0x02
0692 #define MGMT_CAP_SMP_MAX_ENC_KEY_SIZE 0x03
0693 #define MGMT_CAP_LE_TX_PWR 0x04
0694
0695 #define MGMT_OP_READ_CONTROLLER_CAP 0x0048
0696 #define MGMT_READ_CONTROLLER_CAP_SIZE 0
0697 struct mgmt_rp_read_controller_cap {
0698 __le16 cap_len;
0699 __u8 cap[];
0700 } __packed;
0701
0702 #define MGMT_OP_READ_EXP_FEATURES_INFO 0x0049
0703 #define MGMT_READ_EXP_FEATURES_INFO_SIZE 0
0704 struct mgmt_rp_read_exp_features_info {
0705 __le16 feature_count;
0706 struct {
0707 __u8 uuid[16];
0708 __le32 flags;
0709 } features[];
0710 } __packed;
0711
0712 #define MGMT_OP_SET_EXP_FEATURE 0x004a
0713 struct mgmt_cp_set_exp_feature {
0714 __u8 uuid[16];
0715 __u8 param[];
0716 } __packed;
0717 #define MGMT_SET_EXP_FEATURE_SIZE 16
0718 struct mgmt_rp_set_exp_feature {
0719 __u8 uuid[16];
0720 __le32 flags;
0721 } __packed;
0722
0723 #define MGMT_OP_READ_DEF_SYSTEM_CONFIG 0x004b
0724 #define MGMT_READ_DEF_SYSTEM_CONFIG_SIZE 0
0725
0726 #define MGMT_OP_SET_DEF_SYSTEM_CONFIG 0x004c
0727 #define MGMT_SET_DEF_SYSTEM_CONFIG_SIZE 0
0728
0729 #define MGMT_OP_READ_DEF_RUNTIME_CONFIG 0x004d
0730 #define MGMT_READ_DEF_RUNTIME_CONFIG_SIZE 0
0731
0732 #define MGMT_OP_SET_DEF_RUNTIME_CONFIG 0x004e
0733 #define MGMT_SET_DEF_RUNTIME_CONFIG_SIZE 0
0734
0735 #define MGMT_OP_GET_DEVICE_FLAGS 0x004F
0736 #define MGMT_GET_DEVICE_FLAGS_SIZE 7
0737 struct mgmt_cp_get_device_flags {
0738 struct mgmt_addr_info addr;
0739 } __packed;
0740 struct mgmt_rp_get_device_flags {
0741 struct mgmt_addr_info addr;
0742 __le32 supported_flags;
0743 __le32 current_flags;
0744 } __packed;
0745
0746 #define MGMT_OP_SET_DEVICE_FLAGS 0x0050
0747 #define MGMT_SET_DEVICE_FLAGS_SIZE 11
0748 struct mgmt_cp_set_device_flags {
0749 struct mgmt_addr_info addr;
0750 __le32 current_flags;
0751 } __packed;
0752 struct mgmt_rp_set_device_flags {
0753 struct mgmt_addr_info addr;
0754 } __packed;
0755
0756 #define MGMT_ADV_MONITOR_FEATURE_MASK_OR_PATTERNS BIT(0)
0757
0758 #define MGMT_OP_READ_ADV_MONITOR_FEATURES 0x0051
0759 #define MGMT_READ_ADV_MONITOR_FEATURES_SIZE 0
0760 struct mgmt_rp_read_adv_monitor_features {
0761 __le32 supported_features;
0762 __le32 enabled_features;
0763 __le16 max_num_handles;
0764 __u8 max_num_patterns;
0765 __le16 num_handles;
0766 __le16 handles[];
0767 } __packed;
0768
0769 struct mgmt_adv_pattern {
0770 __u8 ad_type;
0771 __u8 offset;
0772 __u8 length;
0773 __u8 value[31];
0774 } __packed;
0775
0776 #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR 0x0052
0777 struct mgmt_cp_add_adv_patterns_monitor {
0778 __u8 pattern_count;
0779 struct mgmt_adv_pattern patterns[];
0780 } __packed;
0781 #define MGMT_ADD_ADV_PATTERNS_MONITOR_SIZE 1
0782 struct mgmt_rp_add_adv_patterns_monitor {
0783 __le16 monitor_handle;
0784 } __packed;
0785
0786 #define MGMT_OP_REMOVE_ADV_MONITOR 0x0053
0787 struct mgmt_cp_remove_adv_monitor {
0788 __le16 monitor_handle;
0789 } __packed;
0790 #define MGMT_REMOVE_ADV_MONITOR_SIZE 2
0791 struct mgmt_rp_remove_adv_monitor {
0792 __le16 monitor_handle;
0793 } __packed;
0794
0795 #define MGMT_OP_ADD_EXT_ADV_PARAMS 0x0054
0796 struct mgmt_cp_add_ext_adv_params {
0797 __u8 instance;
0798 __le32 flags;
0799 __le16 duration;
0800 __le16 timeout;
0801 __le32 min_interval;
0802 __le32 max_interval;
0803 __s8 tx_power;
0804 } __packed;
0805 #define MGMT_ADD_EXT_ADV_PARAMS_MIN_SIZE 18
0806 struct mgmt_rp_add_ext_adv_params {
0807 __u8 instance;
0808 __s8 tx_power;
0809 __u8 max_adv_data_len;
0810 __u8 max_scan_rsp_len;
0811 } __packed;
0812
0813 #define MGMT_OP_ADD_EXT_ADV_DATA 0x0055
0814 struct mgmt_cp_add_ext_adv_data {
0815 __u8 instance;
0816 __u8 adv_data_len;
0817 __u8 scan_rsp_len;
0818 __u8 data[];
0819 } __packed;
0820 #define MGMT_ADD_EXT_ADV_DATA_SIZE 3
0821 struct mgmt_rp_add_ext_adv_data {
0822 __u8 instance;
0823 } __packed;
0824
0825 struct mgmt_adv_rssi_thresholds {
0826 __s8 high_threshold;
0827 __le16 high_threshold_timeout;
0828 __s8 low_threshold;
0829 __le16 low_threshold_timeout;
0830 __u8 sampling_period;
0831 } __packed;
0832
0833 #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR_RSSI 0x0056
0834 struct mgmt_cp_add_adv_patterns_monitor_rssi {
0835 struct mgmt_adv_rssi_thresholds rssi;
0836 __u8 pattern_count;
0837 struct mgmt_adv_pattern patterns[];
0838 } __packed;
0839 #define MGMT_ADD_ADV_PATTERNS_MONITOR_RSSI_SIZE 8
0840
0841 #define MGMT_EV_CMD_COMPLETE 0x0001
0842 struct mgmt_ev_cmd_complete {
0843 __le16 opcode;
0844 __u8 status;
0845 __u8 data[];
0846 } __packed;
0847
0848 #define MGMT_EV_CMD_STATUS 0x0002
0849 struct mgmt_ev_cmd_status {
0850 __le16 opcode;
0851 __u8 status;
0852 } __packed;
0853
0854 #define MGMT_EV_CONTROLLER_ERROR 0x0003
0855 struct mgmt_ev_controller_error {
0856 __u8 error_code;
0857 } __packed;
0858
0859 #define MGMT_EV_INDEX_ADDED 0x0004
0860
0861 #define MGMT_EV_INDEX_REMOVED 0x0005
0862
0863 #define MGMT_EV_NEW_SETTINGS 0x0006
0864
0865 #define MGMT_EV_CLASS_OF_DEV_CHANGED 0x0007
0866 struct mgmt_ev_class_of_dev_changed {
0867 __u8 dev_class[3];
0868 };
0869
0870 #define MGMT_EV_LOCAL_NAME_CHANGED 0x0008
0871 struct mgmt_ev_local_name_changed {
0872 __u8 name[MGMT_MAX_NAME_LENGTH];
0873 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
0874 } __packed;
0875
0876 #define MGMT_EV_NEW_LINK_KEY 0x0009
0877 struct mgmt_ev_new_link_key {
0878 __u8 store_hint;
0879 struct mgmt_link_key_info key;
0880 } __packed;
0881
0882 #define MGMT_EV_NEW_LONG_TERM_KEY 0x000A
0883 struct mgmt_ev_new_long_term_key {
0884 __u8 store_hint;
0885 struct mgmt_ltk_info key;
0886 } __packed;
0887
0888 #define MGMT_EV_DEVICE_CONNECTED 0x000B
0889 struct mgmt_ev_device_connected {
0890 struct mgmt_addr_info addr;
0891 __le32 flags;
0892 __le16 eir_len;
0893 __u8 eir[];
0894 } __packed;
0895
0896 #define MGMT_DEV_DISCONN_UNKNOWN 0x00
0897 #define MGMT_DEV_DISCONN_TIMEOUT 0x01
0898 #define MGMT_DEV_DISCONN_LOCAL_HOST 0x02
0899 #define MGMT_DEV_DISCONN_REMOTE 0x03
0900 #define MGMT_DEV_DISCONN_AUTH_FAILURE 0x04
0901 #define MGMT_DEV_DISCONN_LOCAL_HOST_SUSPEND 0x05
0902
0903 #define MGMT_EV_DEVICE_DISCONNECTED 0x000C
0904 struct mgmt_ev_device_disconnected {
0905 struct mgmt_addr_info addr;
0906 __u8 reason;
0907 } __packed;
0908
0909 #define MGMT_EV_CONNECT_FAILED 0x000D
0910 struct mgmt_ev_connect_failed {
0911 struct mgmt_addr_info addr;
0912 __u8 status;
0913 } __packed;
0914
0915 #define MGMT_EV_PIN_CODE_REQUEST 0x000E
0916 struct mgmt_ev_pin_code_request {
0917 struct mgmt_addr_info addr;
0918 __u8 secure;
0919 } __packed;
0920
0921 #define MGMT_EV_USER_CONFIRM_REQUEST 0x000F
0922 struct mgmt_ev_user_confirm_request {
0923 struct mgmt_addr_info addr;
0924 __u8 confirm_hint;
0925 __le32 value;
0926 } __packed;
0927
0928 #define MGMT_EV_USER_PASSKEY_REQUEST 0x0010
0929 struct mgmt_ev_user_passkey_request {
0930 struct mgmt_addr_info addr;
0931 } __packed;
0932
0933 #define MGMT_EV_AUTH_FAILED 0x0011
0934 struct mgmt_ev_auth_failed {
0935 struct mgmt_addr_info addr;
0936 __u8 status;
0937 } __packed;
0938
0939 #define MGMT_DEV_FOUND_CONFIRM_NAME 0x01
0940 #define MGMT_DEV_FOUND_LEGACY_PAIRING 0x02
0941 #define MGMT_DEV_FOUND_NOT_CONNECTABLE 0x04
0942 #define MGMT_DEV_FOUND_INITIATED_CONN 0x08
0943 #define MGMT_DEV_FOUND_NAME_REQUEST_FAILED 0x10
0944
0945 #define MGMT_EV_DEVICE_FOUND 0x0012
0946 struct mgmt_ev_device_found {
0947 struct mgmt_addr_info addr;
0948 __s8 rssi;
0949 __le32 flags;
0950 __le16 eir_len;
0951 __u8 eir[];
0952 } __packed;
0953
0954 #define MGMT_EV_DISCOVERING 0x0013
0955 struct mgmt_ev_discovering {
0956 __u8 type;
0957 __u8 discovering;
0958 } __packed;
0959
0960 #define MGMT_EV_DEVICE_BLOCKED 0x0014
0961 struct mgmt_ev_device_blocked {
0962 struct mgmt_addr_info addr;
0963 } __packed;
0964
0965 #define MGMT_EV_DEVICE_UNBLOCKED 0x0015
0966 struct mgmt_ev_device_unblocked {
0967 struct mgmt_addr_info addr;
0968 } __packed;
0969
0970 #define MGMT_EV_DEVICE_UNPAIRED 0x0016
0971 struct mgmt_ev_device_unpaired {
0972 struct mgmt_addr_info addr;
0973 } __packed;
0974
0975 #define MGMT_EV_PASSKEY_NOTIFY 0x0017
0976 struct mgmt_ev_passkey_notify {
0977 struct mgmt_addr_info addr;
0978 __le32 passkey;
0979 __u8 entered;
0980 } __packed;
0981
0982 #define MGMT_EV_NEW_IRK 0x0018
0983 struct mgmt_ev_new_irk {
0984 __u8 store_hint;
0985 bdaddr_t rpa;
0986 struct mgmt_irk_info irk;
0987 } __packed;
0988
0989 #define MGMT_CSRK_LOCAL_UNAUTHENTICATED 0x00
0990 #define MGMT_CSRK_REMOTE_UNAUTHENTICATED 0x01
0991 #define MGMT_CSRK_LOCAL_AUTHENTICATED 0x02
0992 #define MGMT_CSRK_REMOTE_AUTHENTICATED 0x03
0993
0994 struct mgmt_csrk_info {
0995 struct mgmt_addr_info addr;
0996 __u8 type;
0997 __u8 val[16];
0998 } __packed;
0999
1000 #define MGMT_EV_NEW_CSRK 0x0019
1001 struct mgmt_ev_new_csrk {
1002 __u8 store_hint;
1003 struct mgmt_csrk_info key;
1004 } __packed;
1005
1006 #define MGMT_EV_DEVICE_ADDED 0x001a
1007 struct mgmt_ev_device_added {
1008 struct mgmt_addr_info addr;
1009 __u8 action;
1010 } __packed;
1011
1012 #define MGMT_EV_DEVICE_REMOVED 0x001b
1013 struct mgmt_ev_device_removed {
1014 struct mgmt_addr_info addr;
1015 } __packed;
1016
1017 #define MGMT_EV_NEW_CONN_PARAM 0x001c
1018 struct mgmt_ev_new_conn_param {
1019 struct mgmt_addr_info addr;
1020 __u8 store_hint;
1021 __le16 min_interval;
1022 __le16 max_interval;
1023 __le16 latency;
1024 __le16 timeout;
1025 } __packed;
1026
1027 #define MGMT_EV_UNCONF_INDEX_ADDED 0x001d
1028
1029 #define MGMT_EV_UNCONF_INDEX_REMOVED 0x001e
1030
1031 #define MGMT_EV_NEW_CONFIG_OPTIONS 0x001f
1032
1033 struct mgmt_ev_ext_index {
1034 __u8 type;
1035 __u8 bus;
1036 } __packed;
1037
1038 #define MGMT_EV_EXT_INDEX_ADDED 0x0020
1039
1040 #define MGMT_EV_EXT_INDEX_REMOVED 0x0021
1041
1042 #define MGMT_EV_LOCAL_OOB_DATA_UPDATED 0x0022
1043 struct mgmt_ev_local_oob_data_updated {
1044 __u8 type;
1045 __le16 eir_len;
1046 __u8 eir[];
1047 } __packed;
1048
1049 #define MGMT_EV_ADVERTISING_ADDED 0x0023
1050 struct mgmt_ev_advertising_added {
1051 __u8 instance;
1052 } __packed;
1053
1054 #define MGMT_EV_ADVERTISING_REMOVED 0x0024
1055 struct mgmt_ev_advertising_removed {
1056 __u8 instance;
1057 } __packed;
1058
1059 #define MGMT_EV_EXT_INFO_CHANGED 0x0025
1060 struct mgmt_ev_ext_info_changed {
1061 __le16 eir_len;
1062 __u8 eir[];
1063 } __packed;
1064
1065 #define MGMT_EV_PHY_CONFIGURATION_CHANGED 0x0026
1066 struct mgmt_ev_phy_configuration_changed {
1067 __le32 selected_phys;
1068 } __packed;
1069
1070 #define MGMT_EV_EXP_FEATURE_CHANGED 0x0027
1071 struct mgmt_ev_exp_feature_changed {
1072 __u8 uuid[16];
1073 __le32 flags;
1074 } __packed;
1075
1076 #define MGMT_EV_DEVICE_FLAGS_CHANGED 0x002a
1077 struct mgmt_ev_device_flags_changed {
1078 struct mgmt_addr_info addr;
1079 __le32 supported_flags;
1080 __le32 current_flags;
1081 } __packed;
1082
1083 #define MGMT_EV_ADV_MONITOR_ADDED 0x002b
1084 struct mgmt_ev_adv_monitor_added {
1085 __le16 monitor_handle;
1086 } __packed;
1087
1088 #define MGMT_EV_ADV_MONITOR_REMOVED 0x002c
1089 struct mgmt_ev_adv_monitor_removed {
1090 __le16 monitor_handle;
1091 } __packed;
1092
1093 #define MGMT_EV_CONTROLLER_SUSPEND 0x002d
1094 struct mgmt_ev_controller_suspend {
1095 __u8 suspend_state;
1096 } __packed;
1097
1098 #define MGMT_EV_CONTROLLER_RESUME 0x002e
1099 struct mgmt_ev_controller_resume {
1100 __u8 wake_reason;
1101 struct mgmt_addr_info addr;
1102 } __packed;
1103
1104 #define MGMT_WAKE_REASON_NON_BT_WAKE 0x0
1105 #define MGMT_WAKE_REASON_UNEXPECTED 0x1
1106 #define MGMT_WAKE_REASON_REMOTE_WAKE 0x2
1107
1108 #define MGMT_EV_ADV_MONITOR_DEVICE_FOUND 0x002f
1109 struct mgmt_ev_adv_monitor_device_found {
1110 __le16 monitor_handle;
1111 struct mgmt_addr_info addr;
1112 __s8 rssi;
1113 __le32 flags;
1114 __le16 eir_len;
1115 __u8 eir[];
1116 } __packed;
1117
1118 #define MGMT_EV_ADV_MONITOR_DEVICE_LOST 0x0030
1119 struct mgmt_ev_adv_monitor_device_lost {
1120 __le16 monitor_handle;
1121 struct mgmt_addr_info addr;
1122 } __packed;