Back to home page

OSCL-LXR

 
 

    


0001 /*
0002    BlueZ - Bluetooth protocol stack for Linux
0003 
0004    Copyright (C) 2010  Nokia Corporation
0005    Copyright (C) 2011-2012  Intel Corporation
0006 
0007    This program is free software; you can redistribute it and/or modify
0008    it under the terms of the GNU General Public License version 2 as
0009    published by the Free Software Foundation;
0010 
0011    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
0012    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0013    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
0014    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
0015    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
0016    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
0017    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
0018    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
0019 
0020    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
0021    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
0022    SOFTWARE IS DISCLAIMED.
0023 */
0024 
0025 #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 /* Reserve one extra byte for names in management messages so that they
0090  * are always guaranteed to be nul-terminated */
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;