1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun BlueZ - Bluetooth protocol stack for Linux 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun Copyright (C) 2010 Nokia Corporation 5*4882a593Smuzhiyun Copyright (C) 2011-2012 Intel Corporation 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun This program is free software; you can redistribute it and/or modify 8*4882a593Smuzhiyun it under the terms of the GNU General Public License version 2 as 9*4882a593Smuzhiyun published by the Free Software Foundation; 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 12*4882a593Smuzhiyun OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13*4882a593Smuzhiyun FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 14*4882a593Smuzhiyun IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 15*4882a593Smuzhiyun CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 16*4882a593Smuzhiyun WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17*4882a593Smuzhiyun ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18*4882a593Smuzhiyun OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 21*4882a593Smuzhiyun COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 22*4882a593Smuzhiyun SOFTWARE IS DISCLAIMED. 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define MGMT_INDEX_NONE 0xFFFF 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define MGMT_STATUS_SUCCESS 0x00 28*4882a593Smuzhiyun #define MGMT_STATUS_UNKNOWN_COMMAND 0x01 29*4882a593Smuzhiyun #define MGMT_STATUS_NOT_CONNECTED 0x02 30*4882a593Smuzhiyun #define MGMT_STATUS_FAILED 0x03 31*4882a593Smuzhiyun #define MGMT_STATUS_CONNECT_FAILED 0x04 32*4882a593Smuzhiyun #define MGMT_STATUS_AUTH_FAILED 0x05 33*4882a593Smuzhiyun #define MGMT_STATUS_NOT_PAIRED 0x06 34*4882a593Smuzhiyun #define MGMT_STATUS_NO_RESOURCES 0x07 35*4882a593Smuzhiyun #define MGMT_STATUS_TIMEOUT 0x08 36*4882a593Smuzhiyun #define MGMT_STATUS_ALREADY_CONNECTED 0x09 37*4882a593Smuzhiyun #define MGMT_STATUS_BUSY 0x0a 38*4882a593Smuzhiyun #define MGMT_STATUS_REJECTED 0x0b 39*4882a593Smuzhiyun #define MGMT_STATUS_NOT_SUPPORTED 0x0c 40*4882a593Smuzhiyun #define MGMT_STATUS_INVALID_PARAMS 0x0d 41*4882a593Smuzhiyun #define MGMT_STATUS_DISCONNECTED 0x0e 42*4882a593Smuzhiyun #define MGMT_STATUS_NOT_POWERED 0x0f 43*4882a593Smuzhiyun #define MGMT_STATUS_CANCELLED 0x10 44*4882a593Smuzhiyun #define MGMT_STATUS_INVALID_INDEX 0x11 45*4882a593Smuzhiyun #define MGMT_STATUS_RFKILLED 0x12 46*4882a593Smuzhiyun #define MGMT_STATUS_ALREADY_PAIRED 0x13 47*4882a593Smuzhiyun #define MGMT_STATUS_PERMISSION_DENIED 0x14 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun struct mgmt_hdr { 50*4882a593Smuzhiyun __le16 opcode; 51*4882a593Smuzhiyun __le16 index; 52*4882a593Smuzhiyun __le16 len; 53*4882a593Smuzhiyun } __packed; 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun struct mgmt_tlv { 56*4882a593Smuzhiyun __le16 type; 57*4882a593Smuzhiyun __u8 length; 58*4882a593Smuzhiyun __u8 value[]; 59*4882a593Smuzhiyun } __packed; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun struct mgmt_addr_info { 62*4882a593Smuzhiyun bdaddr_t bdaddr; 63*4882a593Smuzhiyun __u8 type; 64*4882a593Smuzhiyun } __packed; 65*4882a593Smuzhiyun #define MGMT_ADDR_INFO_SIZE 7 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #define MGMT_OP_READ_VERSION 0x0001 68*4882a593Smuzhiyun #define MGMT_READ_VERSION_SIZE 0 69*4882a593Smuzhiyun struct mgmt_rp_read_version { 70*4882a593Smuzhiyun __u8 version; 71*4882a593Smuzhiyun __le16 revision; 72*4882a593Smuzhiyun } __packed; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun #define MGMT_OP_READ_COMMANDS 0x0002 75*4882a593Smuzhiyun #define MGMT_READ_COMMANDS_SIZE 0 76*4882a593Smuzhiyun struct mgmt_rp_read_commands { 77*4882a593Smuzhiyun __le16 num_commands; 78*4882a593Smuzhiyun __le16 num_events; 79*4882a593Smuzhiyun __le16 opcodes[]; 80*4882a593Smuzhiyun } __packed; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define MGMT_OP_READ_INDEX_LIST 0x0003 83*4882a593Smuzhiyun #define MGMT_READ_INDEX_LIST_SIZE 0 84*4882a593Smuzhiyun struct mgmt_rp_read_index_list { 85*4882a593Smuzhiyun __le16 num_controllers; 86*4882a593Smuzhiyun __le16 index[]; 87*4882a593Smuzhiyun } __packed; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* Reserve one extra byte for names in management messages so that they 90*4882a593Smuzhiyun * are always guaranteed to be nul-terminated */ 91*4882a593Smuzhiyun #define MGMT_MAX_NAME_LENGTH (HCI_MAX_NAME_LENGTH + 1) 92*4882a593Smuzhiyun #define MGMT_MAX_SHORT_NAME_LENGTH (HCI_MAX_SHORT_NAME_LENGTH + 1) 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #define MGMT_SETTING_POWERED 0x00000001 95*4882a593Smuzhiyun #define MGMT_SETTING_CONNECTABLE 0x00000002 96*4882a593Smuzhiyun #define MGMT_SETTING_FAST_CONNECTABLE 0x00000004 97*4882a593Smuzhiyun #define MGMT_SETTING_DISCOVERABLE 0x00000008 98*4882a593Smuzhiyun #define MGMT_SETTING_BONDABLE 0x00000010 99*4882a593Smuzhiyun #define MGMT_SETTING_LINK_SECURITY 0x00000020 100*4882a593Smuzhiyun #define MGMT_SETTING_SSP 0x00000040 101*4882a593Smuzhiyun #define MGMT_SETTING_BREDR 0x00000080 102*4882a593Smuzhiyun #define MGMT_SETTING_HS 0x00000100 103*4882a593Smuzhiyun #define MGMT_SETTING_LE 0x00000200 104*4882a593Smuzhiyun #define MGMT_SETTING_ADVERTISING 0x00000400 105*4882a593Smuzhiyun #define MGMT_SETTING_SECURE_CONN 0x00000800 106*4882a593Smuzhiyun #define MGMT_SETTING_DEBUG_KEYS 0x00001000 107*4882a593Smuzhiyun #define MGMT_SETTING_PRIVACY 0x00002000 108*4882a593Smuzhiyun #define MGMT_SETTING_CONFIGURATION 0x00004000 109*4882a593Smuzhiyun #define MGMT_SETTING_STATIC_ADDRESS 0x00008000 110*4882a593Smuzhiyun #define MGMT_SETTING_PHY_CONFIGURATION 0x00010000 111*4882a593Smuzhiyun #define MGMT_SETTING_WIDEBAND_SPEECH 0x00020000 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun #define MGMT_OP_READ_INFO 0x0004 114*4882a593Smuzhiyun #define MGMT_READ_INFO_SIZE 0 115*4882a593Smuzhiyun struct mgmt_rp_read_info { 116*4882a593Smuzhiyun bdaddr_t bdaddr; 117*4882a593Smuzhiyun __u8 version; 118*4882a593Smuzhiyun __le16 manufacturer; 119*4882a593Smuzhiyun __le32 supported_settings; 120*4882a593Smuzhiyun __le32 current_settings; 121*4882a593Smuzhiyun __u8 dev_class[3]; 122*4882a593Smuzhiyun __u8 name[MGMT_MAX_NAME_LENGTH]; 123*4882a593Smuzhiyun __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH]; 124*4882a593Smuzhiyun } __packed; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun struct mgmt_mode { 127*4882a593Smuzhiyun __u8 val; 128*4882a593Smuzhiyun } __packed; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #define MGMT_SETTING_SIZE 1 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun #define MGMT_OP_SET_POWERED 0x0005 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun #define MGMT_OP_SET_DISCOVERABLE 0x0006 135*4882a593Smuzhiyun struct mgmt_cp_set_discoverable { 136*4882a593Smuzhiyun __u8 val; 137*4882a593Smuzhiyun __le16 timeout; 138*4882a593Smuzhiyun } __packed; 139*4882a593Smuzhiyun #define MGMT_SET_DISCOVERABLE_SIZE 3 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun #define MGMT_OP_SET_CONNECTABLE 0x0007 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun #define MGMT_OP_SET_FAST_CONNECTABLE 0x0008 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun #define MGMT_OP_SET_BONDABLE 0x0009 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun #define MGMT_OP_SET_LINK_SECURITY 0x000A 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun #define MGMT_OP_SET_SSP 0x000B 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #define MGMT_OP_SET_HS 0x000C 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun #define MGMT_OP_SET_LE 0x000D 154*4882a593Smuzhiyun #define MGMT_OP_SET_DEV_CLASS 0x000E 155*4882a593Smuzhiyun struct mgmt_cp_set_dev_class { 156*4882a593Smuzhiyun __u8 major; 157*4882a593Smuzhiyun __u8 minor; 158*4882a593Smuzhiyun } __packed; 159*4882a593Smuzhiyun #define MGMT_SET_DEV_CLASS_SIZE 2 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun #define MGMT_OP_SET_LOCAL_NAME 0x000F 162*4882a593Smuzhiyun struct mgmt_cp_set_local_name { 163*4882a593Smuzhiyun __u8 name[MGMT_MAX_NAME_LENGTH]; 164*4882a593Smuzhiyun __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH]; 165*4882a593Smuzhiyun } __packed; 166*4882a593Smuzhiyun #define MGMT_SET_LOCAL_NAME_SIZE 260 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun #define MGMT_OP_ADD_UUID 0x0010 169*4882a593Smuzhiyun struct mgmt_cp_add_uuid { 170*4882a593Smuzhiyun __u8 uuid[16]; 171*4882a593Smuzhiyun __u8 svc_hint; 172*4882a593Smuzhiyun } __packed; 173*4882a593Smuzhiyun #define MGMT_ADD_UUID_SIZE 17 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun #define MGMT_OP_REMOVE_UUID 0x0011 176*4882a593Smuzhiyun struct mgmt_cp_remove_uuid { 177*4882a593Smuzhiyun __u8 uuid[16]; 178*4882a593Smuzhiyun } __packed; 179*4882a593Smuzhiyun #define MGMT_REMOVE_UUID_SIZE 16 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun struct mgmt_link_key_info { 182*4882a593Smuzhiyun struct mgmt_addr_info addr; 183*4882a593Smuzhiyun __u8 type; 184*4882a593Smuzhiyun __u8 val[16]; 185*4882a593Smuzhiyun __u8 pin_len; 186*4882a593Smuzhiyun } __packed; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun #define MGMT_OP_LOAD_LINK_KEYS 0x0012 189*4882a593Smuzhiyun struct mgmt_cp_load_link_keys { 190*4882a593Smuzhiyun __u8 debug_keys; 191*4882a593Smuzhiyun __le16 key_count; 192*4882a593Smuzhiyun struct mgmt_link_key_info keys[]; 193*4882a593Smuzhiyun } __packed; 194*4882a593Smuzhiyun #define MGMT_LOAD_LINK_KEYS_SIZE 3 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun #define MGMT_LTK_UNAUTHENTICATED 0x00 197*4882a593Smuzhiyun #define MGMT_LTK_AUTHENTICATED 0x01 198*4882a593Smuzhiyun #define MGMT_LTK_P256_UNAUTH 0x02 199*4882a593Smuzhiyun #define MGMT_LTK_P256_AUTH 0x03 200*4882a593Smuzhiyun #define MGMT_LTK_P256_DEBUG 0x04 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun struct mgmt_ltk_info { 203*4882a593Smuzhiyun struct mgmt_addr_info addr; 204*4882a593Smuzhiyun __u8 type; 205*4882a593Smuzhiyun __u8 master; 206*4882a593Smuzhiyun __u8 enc_size; 207*4882a593Smuzhiyun __le16 ediv; 208*4882a593Smuzhiyun __le64 rand; 209*4882a593Smuzhiyun __u8 val[16]; 210*4882a593Smuzhiyun } __packed; 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun #define MGMT_OP_LOAD_LONG_TERM_KEYS 0x0013 213*4882a593Smuzhiyun struct mgmt_cp_load_long_term_keys { 214*4882a593Smuzhiyun __le16 key_count; 215*4882a593Smuzhiyun struct mgmt_ltk_info keys[]; 216*4882a593Smuzhiyun } __packed; 217*4882a593Smuzhiyun #define MGMT_LOAD_LONG_TERM_KEYS_SIZE 2 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun #define MGMT_OP_DISCONNECT 0x0014 220*4882a593Smuzhiyun struct mgmt_cp_disconnect { 221*4882a593Smuzhiyun struct mgmt_addr_info addr; 222*4882a593Smuzhiyun } __packed; 223*4882a593Smuzhiyun #define MGMT_DISCONNECT_SIZE MGMT_ADDR_INFO_SIZE 224*4882a593Smuzhiyun struct mgmt_rp_disconnect { 225*4882a593Smuzhiyun struct mgmt_addr_info addr; 226*4882a593Smuzhiyun } __packed; 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun #define MGMT_OP_GET_CONNECTIONS 0x0015 229*4882a593Smuzhiyun #define MGMT_GET_CONNECTIONS_SIZE 0 230*4882a593Smuzhiyun struct mgmt_rp_get_connections { 231*4882a593Smuzhiyun __le16 conn_count; 232*4882a593Smuzhiyun struct mgmt_addr_info addr[]; 233*4882a593Smuzhiyun } __packed; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun #define MGMT_OP_PIN_CODE_REPLY 0x0016 236*4882a593Smuzhiyun struct mgmt_cp_pin_code_reply { 237*4882a593Smuzhiyun struct mgmt_addr_info addr; 238*4882a593Smuzhiyun __u8 pin_len; 239*4882a593Smuzhiyun __u8 pin_code[16]; 240*4882a593Smuzhiyun } __packed; 241*4882a593Smuzhiyun #define MGMT_PIN_CODE_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 17) 242*4882a593Smuzhiyun struct mgmt_rp_pin_code_reply { 243*4882a593Smuzhiyun struct mgmt_addr_info addr; 244*4882a593Smuzhiyun } __packed; 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun #define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017 247*4882a593Smuzhiyun struct mgmt_cp_pin_code_neg_reply { 248*4882a593Smuzhiyun struct mgmt_addr_info addr; 249*4882a593Smuzhiyun } __packed; 250*4882a593Smuzhiyun #define MGMT_PIN_CODE_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun #define MGMT_OP_SET_IO_CAPABILITY 0x0018 253*4882a593Smuzhiyun struct mgmt_cp_set_io_capability { 254*4882a593Smuzhiyun __u8 io_capability; 255*4882a593Smuzhiyun } __packed; 256*4882a593Smuzhiyun #define MGMT_SET_IO_CAPABILITY_SIZE 1 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #define MGMT_OP_PAIR_DEVICE 0x0019 259*4882a593Smuzhiyun struct mgmt_cp_pair_device { 260*4882a593Smuzhiyun struct mgmt_addr_info addr; 261*4882a593Smuzhiyun __u8 io_cap; 262*4882a593Smuzhiyun } __packed; 263*4882a593Smuzhiyun #define MGMT_PAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1) 264*4882a593Smuzhiyun struct mgmt_rp_pair_device { 265*4882a593Smuzhiyun struct mgmt_addr_info addr; 266*4882a593Smuzhiyun } __packed; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun #define MGMT_OP_CANCEL_PAIR_DEVICE 0x001A 269*4882a593Smuzhiyun #define MGMT_CANCEL_PAIR_DEVICE_SIZE MGMT_ADDR_INFO_SIZE 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun #define MGMT_OP_UNPAIR_DEVICE 0x001B 272*4882a593Smuzhiyun struct mgmt_cp_unpair_device { 273*4882a593Smuzhiyun struct mgmt_addr_info addr; 274*4882a593Smuzhiyun __u8 disconnect; 275*4882a593Smuzhiyun } __packed; 276*4882a593Smuzhiyun #define MGMT_UNPAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1) 277*4882a593Smuzhiyun struct mgmt_rp_unpair_device { 278*4882a593Smuzhiyun struct mgmt_addr_info addr; 279*4882a593Smuzhiyun }; 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun #define MGMT_OP_USER_CONFIRM_REPLY 0x001C 282*4882a593Smuzhiyun struct mgmt_cp_user_confirm_reply { 283*4882a593Smuzhiyun struct mgmt_addr_info addr; 284*4882a593Smuzhiyun } __packed; 285*4882a593Smuzhiyun #define MGMT_USER_CONFIRM_REPLY_SIZE MGMT_ADDR_INFO_SIZE 286*4882a593Smuzhiyun struct mgmt_rp_user_confirm_reply { 287*4882a593Smuzhiyun struct mgmt_addr_info addr; 288*4882a593Smuzhiyun } __packed; 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun #define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D 291*4882a593Smuzhiyun struct mgmt_cp_user_confirm_neg_reply { 292*4882a593Smuzhiyun struct mgmt_addr_info addr; 293*4882a593Smuzhiyun } __packed; 294*4882a593Smuzhiyun #define MGMT_USER_CONFIRM_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun #define MGMT_OP_USER_PASSKEY_REPLY 0x001E 297*4882a593Smuzhiyun struct mgmt_cp_user_passkey_reply { 298*4882a593Smuzhiyun struct mgmt_addr_info addr; 299*4882a593Smuzhiyun __le32 passkey; 300*4882a593Smuzhiyun } __packed; 301*4882a593Smuzhiyun #define MGMT_USER_PASSKEY_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 4) 302*4882a593Smuzhiyun struct mgmt_rp_user_passkey_reply { 303*4882a593Smuzhiyun struct mgmt_addr_info addr; 304*4882a593Smuzhiyun } __packed; 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun #define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F 307*4882a593Smuzhiyun struct mgmt_cp_user_passkey_neg_reply { 308*4882a593Smuzhiyun struct mgmt_addr_info addr; 309*4882a593Smuzhiyun } __packed; 310*4882a593Smuzhiyun #define MGMT_USER_PASSKEY_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun #define MGMT_OP_READ_LOCAL_OOB_DATA 0x0020 313*4882a593Smuzhiyun #define MGMT_READ_LOCAL_OOB_DATA_SIZE 0 314*4882a593Smuzhiyun struct mgmt_rp_read_local_oob_data { 315*4882a593Smuzhiyun __u8 hash192[16]; 316*4882a593Smuzhiyun __u8 rand192[16]; 317*4882a593Smuzhiyun __u8 hash256[16]; 318*4882a593Smuzhiyun __u8 rand256[16]; 319*4882a593Smuzhiyun } __packed; 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun #define MGMT_OP_ADD_REMOTE_OOB_DATA 0x0021 322*4882a593Smuzhiyun struct mgmt_cp_add_remote_oob_data { 323*4882a593Smuzhiyun struct mgmt_addr_info addr; 324*4882a593Smuzhiyun __u8 hash[16]; 325*4882a593Smuzhiyun __u8 rand[16]; 326*4882a593Smuzhiyun } __packed; 327*4882a593Smuzhiyun #define MGMT_ADD_REMOTE_OOB_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 32) 328*4882a593Smuzhiyun struct mgmt_cp_add_remote_oob_ext_data { 329*4882a593Smuzhiyun struct mgmt_addr_info addr; 330*4882a593Smuzhiyun __u8 hash192[16]; 331*4882a593Smuzhiyun __u8 rand192[16]; 332*4882a593Smuzhiyun __u8 hash256[16]; 333*4882a593Smuzhiyun __u8 rand256[16]; 334*4882a593Smuzhiyun } __packed; 335*4882a593Smuzhiyun #define MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 64) 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun #define MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0022 338*4882a593Smuzhiyun struct mgmt_cp_remove_remote_oob_data { 339*4882a593Smuzhiyun struct mgmt_addr_info addr; 340*4882a593Smuzhiyun } __packed; 341*4882a593Smuzhiyun #define MGMT_REMOVE_REMOTE_OOB_DATA_SIZE MGMT_ADDR_INFO_SIZE 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun #define MGMT_OP_START_DISCOVERY 0x0023 344*4882a593Smuzhiyun struct mgmt_cp_start_discovery { 345*4882a593Smuzhiyun __u8 type; 346*4882a593Smuzhiyun } __packed; 347*4882a593Smuzhiyun #define MGMT_START_DISCOVERY_SIZE 1 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun #define MGMT_OP_STOP_DISCOVERY 0x0024 350*4882a593Smuzhiyun struct mgmt_cp_stop_discovery { 351*4882a593Smuzhiyun __u8 type; 352*4882a593Smuzhiyun } __packed; 353*4882a593Smuzhiyun #define MGMT_STOP_DISCOVERY_SIZE 1 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun #define MGMT_OP_CONFIRM_NAME 0x0025 356*4882a593Smuzhiyun struct mgmt_cp_confirm_name { 357*4882a593Smuzhiyun struct mgmt_addr_info addr; 358*4882a593Smuzhiyun __u8 name_known; 359*4882a593Smuzhiyun } __packed; 360*4882a593Smuzhiyun #define MGMT_CONFIRM_NAME_SIZE (MGMT_ADDR_INFO_SIZE + 1) 361*4882a593Smuzhiyun struct mgmt_rp_confirm_name { 362*4882a593Smuzhiyun struct mgmt_addr_info addr; 363*4882a593Smuzhiyun } __packed; 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun #define MGMT_OP_BLOCK_DEVICE 0x0026 366*4882a593Smuzhiyun struct mgmt_cp_block_device { 367*4882a593Smuzhiyun struct mgmt_addr_info addr; 368*4882a593Smuzhiyun } __packed; 369*4882a593Smuzhiyun #define MGMT_BLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun #define MGMT_OP_UNBLOCK_DEVICE 0x0027 372*4882a593Smuzhiyun struct mgmt_cp_unblock_device { 373*4882a593Smuzhiyun struct mgmt_addr_info addr; 374*4882a593Smuzhiyun } __packed; 375*4882a593Smuzhiyun #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun #define MGMT_OP_SET_DEVICE_ID 0x0028 378*4882a593Smuzhiyun struct mgmt_cp_set_device_id { 379*4882a593Smuzhiyun __le16 source; 380*4882a593Smuzhiyun __le16 vendor; 381*4882a593Smuzhiyun __le16 product; 382*4882a593Smuzhiyun __le16 version; 383*4882a593Smuzhiyun } __packed; 384*4882a593Smuzhiyun #define MGMT_SET_DEVICE_ID_SIZE 8 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun #define MGMT_OP_SET_ADVERTISING 0x0029 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun #define MGMT_OP_SET_BREDR 0x002A 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun #define MGMT_OP_SET_STATIC_ADDRESS 0x002B 391*4882a593Smuzhiyun struct mgmt_cp_set_static_address { 392*4882a593Smuzhiyun bdaddr_t bdaddr; 393*4882a593Smuzhiyun } __packed; 394*4882a593Smuzhiyun #define MGMT_SET_STATIC_ADDRESS_SIZE 6 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun #define MGMT_OP_SET_SCAN_PARAMS 0x002C 397*4882a593Smuzhiyun struct mgmt_cp_set_scan_params { 398*4882a593Smuzhiyun __le16 interval; 399*4882a593Smuzhiyun __le16 window; 400*4882a593Smuzhiyun } __packed; 401*4882a593Smuzhiyun #define MGMT_SET_SCAN_PARAMS_SIZE 4 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun #define MGMT_OP_SET_SECURE_CONN 0x002D 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun #define MGMT_OP_SET_DEBUG_KEYS 0x002E 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun #define MGMT_OP_SET_PRIVACY 0x002F 408*4882a593Smuzhiyun struct mgmt_cp_set_privacy { 409*4882a593Smuzhiyun __u8 privacy; 410*4882a593Smuzhiyun __u8 irk[16]; 411*4882a593Smuzhiyun } __packed; 412*4882a593Smuzhiyun #define MGMT_SET_PRIVACY_SIZE 17 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun struct mgmt_irk_info { 415*4882a593Smuzhiyun struct mgmt_addr_info addr; 416*4882a593Smuzhiyun __u8 val[16]; 417*4882a593Smuzhiyun } __packed; 418*4882a593Smuzhiyun 419*4882a593Smuzhiyun #define MGMT_OP_LOAD_IRKS 0x0030 420*4882a593Smuzhiyun struct mgmt_cp_load_irks { 421*4882a593Smuzhiyun __le16 irk_count; 422*4882a593Smuzhiyun struct mgmt_irk_info irks[]; 423*4882a593Smuzhiyun } __packed; 424*4882a593Smuzhiyun #define MGMT_LOAD_IRKS_SIZE 2 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun #define MGMT_OP_GET_CONN_INFO 0x0031 427*4882a593Smuzhiyun struct mgmt_cp_get_conn_info { 428*4882a593Smuzhiyun struct mgmt_addr_info addr; 429*4882a593Smuzhiyun } __packed; 430*4882a593Smuzhiyun #define MGMT_GET_CONN_INFO_SIZE MGMT_ADDR_INFO_SIZE 431*4882a593Smuzhiyun struct mgmt_rp_get_conn_info { 432*4882a593Smuzhiyun struct mgmt_addr_info addr; 433*4882a593Smuzhiyun __s8 rssi; 434*4882a593Smuzhiyun __s8 tx_power; 435*4882a593Smuzhiyun __s8 max_tx_power; 436*4882a593Smuzhiyun } __packed; 437*4882a593Smuzhiyun 438*4882a593Smuzhiyun #define MGMT_OP_GET_CLOCK_INFO 0x0032 439*4882a593Smuzhiyun struct mgmt_cp_get_clock_info { 440*4882a593Smuzhiyun struct mgmt_addr_info addr; 441*4882a593Smuzhiyun } __packed; 442*4882a593Smuzhiyun #define MGMT_GET_CLOCK_INFO_SIZE MGMT_ADDR_INFO_SIZE 443*4882a593Smuzhiyun struct mgmt_rp_get_clock_info { 444*4882a593Smuzhiyun struct mgmt_addr_info addr; 445*4882a593Smuzhiyun __le32 local_clock; 446*4882a593Smuzhiyun __le32 piconet_clock; 447*4882a593Smuzhiyun __le16 accuracy; 448*4882a593Smuzhiyun } __packed; 449*4882a593Smuzhiyun 450*4882a593Smuzhiyun #define MGMT_OP_ADD_DEVICE 0x0033 451*4882a593Smuzhiyun struct mgmt_cp_add_device { 452*4882a593Smuzhiyun struct mgmt_addr_info addr; 453*4882a593Smuzhiyun __u8 action; 454*4882a593Smuzhiyun } __packed; 455*4882a593Smuzhiyun #define MGMT_ADD_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1) 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun #define MGMT_OP_REMOVE_DEVICE 0x0034 458*4882a593Smuzhiyun struct mgmt_cp_remove_device { 459*4882a593Smuzhiyun struct mgmt_addr_info addr; 460*4882a593Smuzhiyun } __packed; 461*4882a593Smuzhiyun #define MGMT_REMOVE_DEVICE_SIZE MGMT_ADDR_INFO_SIZE 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun struct mgmt_conn_param { 464*4882a593Smuzhiyun struct mgmt_addr_info addr; 465*4882a593Smuzhiyun __le16 min_interval; 466*4882a593Smuzhiyun __le16 max_interval; 467*4882a593Smuzhiyun __le16 latency; 468*4882a593Smuzhiyun __le16 timeout; 469*4882a593Smuzhiyun } __packed; 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun #define MGMT_OP_LOAD_CONN_PARAM 0x0035 472*4882a593Smuzhiyun struct mgmt_cp_load_conn_param { 473*4882a593Smuzhiyun __le16 param_count; 474*4882a593Smuzhiyun struct mgmt_conn_param params[]; 475*4882a593Smuzhiyun } __packed; 476*4882a593Smuzhiyun #define MGMT_LOAD_CONN_PARAM_SIZE 2 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun #define MGMT_OP_READ_UNCONF_INDEX_LIST 0x0036 479*4882a593Smuzhiyun #define MGMT_READ_UNCONF_INDEX_LIST_SIZE 0 480*4882a593Smuzhiyun struct mgmt_rp_read_unconf_index_list { 481*4882a593Smuzhiyun __le16 num_controllers; 482*4882a593Smuzhiyun __le16 index[]; 483*4882a593Smuzhiyun } __packed; 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun #define MGMT_OPTION_EXTERNAL_CONFIG 0x00000001 486*4882a593Smuzhiyun #define MGMT_OPTION_PUBLIC_ADDRESS 0x00000002 487*4882a593Smuzhiyun 488*4882a593Smuzhiyun #define MGMT_OP_READ_CONFIG_INFO 0x0037 489*4882a593Smuzhiyun #define MGMT_READ_CONFIG_INFO_SIZE 0 490*4882a593Smuzhiyun struct mgmt_rp_read_config_info { 491*4882a593Smuzhiyun __le16 manufacturer; 492*4882a593Smuzhiyun __le32 supported_options; 493*4882a593Smuzhiyun __le32 missing_options; 494*4882a593Smuzhiyun } __packed; 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun #define MGMT_OP_SET_EXTERNAL_CONFIG 0x0038 497*4882a593Smuzhiyun struct mgmt_cp_set_external_config { 498*4882a593Smuzhiyun __u8 config; 499*4882a593Smuzhiyun } __packed; 500*4882a593Smuzhiyun #define MGMT_SET_EXTERNAL_CONFIG_SIZE 1 501*4882a593Smuzhiyun 502*4882a593Smuzhiyun #define MGMT_OP_SET_PUBLIC_ADDRESS 0x0039 503*4882a593Smuzhiyun struct mgmt_cp_set_public_address { 504*4882a593Smuzhiyun bdaddr_t bdaddr; 505*4882a593Smuzhiyun } __packed; 506*4882a593Smuzhiyun #define MGMT_SET_PUBLIC_ADDRESS_SIZE 6 507*4882a593Smuzhiyun 508*4882a593Smuzhiyun #define MGMT_OP_START_SERVICE_DISCOVERY 0x003A 509*4882a593Smuzhiyun struct mgmt_cp_start_service_discovery { 510*4882a593Smuzhiyun __u8 type; 511*4882a593Smuzhiyun __s8 rssi; 512*4882a593Smuzhiyun __le16 uuid_count; 513*4882a593Smuzhiyun __u8 uuids[][16]; 514*4882a593Smuzhiyun } __packed; 515*4882a593Smuzhiyun #define MGMT_START_SERVICE_DISCOVERY_SIZE 4 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun #define MGMT_OP_READ_LOCAL_OOB_EXT_DATA 0x003B 518*4882a593Smuzhiyun struct mgmt_cp_read_local_oob_ext_data { 519*4882a593Smuzhiyun __u8 type; 520*4882a593Smuzhiyun } __packed; 521*4882a593Smuzhiyun #define MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE 1 522*4882a593Smuzhiyun struct mgmt_rp_read_local_oob_ext_data { 523*4882a593Smuzhiyun __u8 type; 524*4882a593Smuzhiyun __le16 eir_len; 525*4882a593Smuzhiyun __u8 eir[]; 526*4882a593Smuzhiyun } __packed; 527*4882a593Smuzhiyun 528*4882a593Smuzhiyun #define MGMT_OP_READ_EXT_INDEX_LIST 0x003C 529*4882a593Smuzhiyun #define MGMT_READ_EXT_INDEX_LIST_SIZE 0 530*4882a593Smuzhiyun struct mgmt_rp_read_ext_index_list { 531*4882a593Smuzhiyun __le16 num_controllers; 532*4882a593Smuzhiyun struct { 533*4882a593Smuzhiyun __le16 index; 534*4882a593Smuzhiyun __u8 type; 535*4882a593Smuzhiyun __u8 bus; 536*4882a593Smuzhiyun } entry[]; 537*4882a593Smuzhiyun } __packed; 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun #define MGMT_OP_READ_ADV_FEATURES 0x0003D 540*4882a593Smuzhiyun #define MGMT_READ_ADV_FEATURES_SIZE 0 541*4882a593Smuzhiyun struct mgmt_rp_read_adv_features { 542*4882a593Smuzhiyun __le32 supported_flags; 543*4882a593Smuzhiyun __u8 max_adv_data_len; 544*4882a593Smuzhiyun __u8 max_scan_rsp_len; 545*4882a593Smuzhiyun __u8 max_instances; 546*4882a593Smuzhiyun __u8 num_instances; 547*4882a593Smuzhiyun __u8 instance[]; 548*4882a593Smuzhiyun } __packed; 549*4882a593Smuzhiyun 550*4882a593Smuzhiyun #define MGMT_OP_ADD_ADVERTISING 0x003E 551*4882a593Smuzhiyun struct mgmt_cp_add_advertising { 552*4882a593Smuzhiyun __u8 instance; 553*4882a593Smuzhiyun __le32 flags; 554*4882a593Smuzhiyun __le16 duration; 555*4882a593Smuzhiyun __le16 timeout; 556*4882a593Smuzhiyun __u8 adv_data_len; 557*4882a593Smuzhiyun __u8 scan_rsp_len; 558*4882a593Smuzhiyun __u8 data[]; 559*4882a593Smuzhiyun } __packed; 560*4882a593Smuzhiyun #define MGMT_ADD_ADVERTISING_SIZE 11 561*4882a593Smuzhiyun struct mgmt_rp_add_advertising { 562*4882a593Smuzhiyun __u8 instance; 563*4882a593Smuzhiyun } __packed; 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun #define MGMT_ADV_FLAG_CONNECTABLE BIT(0) 566*4882a593Smuzhiyun #define MGMT_ADV_FLAG_DISCOV BIT(1) 567*4882a593Smuzhiyun #define MGMT_ADV_FLAG_LIMITED_DISCOV BIT(2) 568*4882a593Smuzhiyun #define MGMT_ADV_FLAG_MANAGED_FLAGS BIT(3) 569*4882a593Smuzhiyun #define MGMT_ADV_FLAG_TX_POWER BIT(4) 570*4882a593Smuzhiyun #define MGMT_ADV_FLAG_APPEARANCE BIT(5) 571*4882a593Smuzhiyun #define MGMT_ADV_FLAG_LOCAL_NAME BIT(6) 572*4882a593Smuzhiyun #define MGMT_ADV_FLAG_SEC_1M BIT(7) 573*4882a593Smuzhiyun #define MGMT_ADV_FLAG_SEC_2M BIT(8) 574*4882a593Smuzhiyun #define MGMT_ADV_FLAG_SEC_CODED BIT(9) 575*4882a593Smuzhiyun #define MGMT_ADV_FLAG_CAN_SET_TX_POWER BIT(10) 576*4882a593Smuzhiyun #define MGMT_ADV_FLAG_HW_OFFLOAD BIT(11) 577*4882a593Smuzhiyun 578*4882a593Smuzhiyun #define MGMT_ADV_FLAG_SEC_MASK (MGMT_ADV_FLAG_SEC_1M | MGMT_ADV_FLAG_SEC_2M | \ 579*4882a593Smuzhiyun MGMT_ADV_FLAG_SEC_CODED) 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun #define MGMT_OP_REMOVE_ADVERTISING 0x003F 582*4882a593Smuzhiyun struct mgmt_cp_remove_advertising { 583*4882a593Smuzhiyun __u8 instance; 584*4882a593Smuzhiyun } __packed; 585*4882a593Smuzhiyun #define MGMT_REMOVE_ADVERTISING_SIZE 1 586*4882a593Smuzhiyun struct mgmt_rp_remove_advertising { 587*4882a593Smuzhiyun __u8 instance; 588*4882a593Smuzhiyun } __packed; 589*4882a593Smuzhiyun 590*4882a593Smuzhiyun #define MGMT_OP_GET_ADV_SIZE_INFO 0x0040 591*4882a593Smuzhiyun struct mgmt_cp_get_adv_size_info { 592*4882a593Smuzhiyun __u8 instance; 593*4882a593Smuzhiyun __le32 flags; 594*4882a593Smuzhiyun } __packed; 595*4882a593Smuzhiyun #define MGMT_GET_ADV_SIZE_INFO_SIZE 5 596*4882a593Smuzhiyun struct mgmt_rp_get_adv_size_info { 597*4882a593Smuzhiyun __u8 instance; 598*4882a593Smuzhiyun __le32 flags; 599*4882a593Smuzhiyun __u8 max_adv_data_len; 600*4882a593Smuzhiyun __u8 max_scan_rsp_len; 601*4882a593Smuzhiyun } __packed; 602*4882a593Smuzhiyun 603*4882a593Smuzhiyun #define MGMT_OP_START_LIMITED_DISCOVERY 0x0041 604*4882a593Smuzhiyun 605*4882a593Smuzhiyun #define MGMT_OP_READ_EXT_INFO 0x0042 606*4882a593Smuzhiyun #define MGMT_READ_EXT_INFO_SIZE 0 607*4882a593Smuzhiyun struct mgmt_rp_read_ext_info { 608*4882a593Smuzhiyun bdaddr_t bdaddr; 609*4882a593Smuzhiyun __u8 version; 610*4882a593Smuzhiyun __le16 manufacturer; 611*4882a593Smuzhiyun __le32 supported_settings; 612*4882a593Smuzhiyun __le32 current_settings; 613*4882a593Smuzhiyun __le16 eir_len; 614*4882a593Smuzhiyun __u8 eir[]; 615*4882a593Smuzhiyun } __packed; 616*4882a593Smuzhiyun 617*4882a593Smuzhiyun #define MGMT_OP_SET_APPEARANCE 0x0043 618*4882a593Smuzhiyun struct mgmt_cp_set_appearance { 619*4882a593Smuzhiyun __le16 appearance; 620*4882a593Smuzhiyun } __packed; 621*4882a593Smuzhiyun #define MGMT_SET_APPEARANCE_SIZE 2 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun #define MGMT_OP_GET_PHY_CONFIGURATION 0x0044 624*4882a593Smuzhiyun struct mgmt_rp_get_phy_confguration { 625*4882a593Smuzhiyun __le32 supported_phys; 626*4882a593Smuzhiyun __le32 configurable_phys; 627*4882a593Smuzhiyun __le32 selected_phys; 628*4882a593Smuzhiyun } __packed; 629*4882a593Smuzhiyun #define MGMT_GET_PHY_CONFIGURATION_SIZE 0 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun #define MGMT_PHY_BR_1M_1SLOT 0x00000001 632*4882a593Smuzhiyun #define MGMT_PHY_BR_1M_3SLOT 0x00000002 633*4882a593Smuzhiyun #define MGMT_PHY_BR_1M_5SLOT 0x00000004 634*4882a593Smuzhiyun #define MGMT_PHY_EDR_2M_1SLOT 0x00000008 635*4882a593Smuzhiyun #define MGMT_PHY_EDR_2M_3SLOT 0x00000010 636*4882a593Smuzhiyun #define MGMT_PHY_EDR_2M_5SLOT 0x00000020 637*4882a593Smuzhiyun #define MGMT_PHY_EDR_3M_1SLOT 0x00000040 638*4882a593Smuzhiyun #define MGMT_PHY_EDR_3M_3SLOT 0x00000080 639*4882a593Smuzhiyun #define MGMT_PHY_EDR_3M_5SLOT 0x00000100 640*4882a593Smuzhiyun #define MGMT_PHY_LE_1M_TX 0x00000200 641*4882a593Smuzhiyun #define MGMT_PHY_LE_1M_RX 0x00000400 642*4882a593Smuzhiyun #define MGMT_PHY_LE_2M_TX 0x00000800 643*4882a593Smuzhiyun #define MGMT_PHY_LE_2M_RX 0x00001000 644*4882a593Smuzhiyun #define MGMT_PHY_LE_CODED_TX 0x00002000 645*4882a593Smuzhiyun #define MGMT_PHY_LE_CODED_RX 0x00004000 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun #define MGMT_PHY_BREDR_MASK (MGMT_PHY_BR_1M_1SLOT | MGMT_PHY_BR_1M_3SLOT | \ 648*4882a593Smuzhiyun MGMT_PHY_BR_1M_5SLOT | MGMT_PHY_EDR_2M_1SLOT | \ 649*4882a593Smuzhiyun MGMT_PHY_EDR_2M_3SLOT | MGMT_PHY_EDR_2M_5SLOT | \ 650*4882a593Smuzhiyun MGMT_PHY_EDR_3M_1SLOT | MGMT_PHY_EDR_3M_3SLOT | \ 651*4882a593Smuzhiyun MGMT_PHY_EDR_3M_5SLOT) 652*4882a593Smuzhiyun #define MGMT_PHY_LE_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_1M_RX | \ 653*4882a593Smuzhiyun MGMT_PHY_LE_2M_TX | MGMT_PHY_LE_2M_RX | \ 654*4882a593Smuzhiyun MGMT_PHY_LE_CODED_TX | MGMT_PHY_LE_CODED_RX) 655*4882a593Smuzhiyun #define MGMT_PHY_LE_TX_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_2M_TX | \ 656*4882a593Smuzhiyun MGMT_PHY_LE_CODED_TX) 657*4882a593Smuzhiyun #define MGMT_PHY_LE_RX_MASK (MGMT_PHY_LE_1M_RX | MGMT_PHY_LE_2M_RX | \ 658*4882a593Smuzhiyun MGMT_PHY_LE_CODED_RX) 659*4882a593Smuzhiyun 660*4882a593Smuzhiyun #define MGMT_OP_SET_PHY_CONFIGURATION 0x0045 661*4882a593Smuzhiyun struct mgmt_cp_set_phy_confguration { 662*4882a593Smuzhiyun __le32 selected_phys; 663*4882a593Smuzhiyun } __packed; 664*4882a593Smuzhiyun #define MGMT_SET_PHY_CONFIGURATION_SIZE 4 665*4882a593Smuzhiyun 666*4882a593Smuzhiyun #define MGMT_OP_SET_BLOCKED_KEYS 0x0046 667*4882a593Smuzhiyun 668*4882a593Smuzhiyun #define HCI_BLOCKED_KEY_TYPE_LINKKEY 0x00 669*4882a593Smuzhiyun #define HCI_BLOCKED_KEY_TYPE_LTK 0x01 670*4882a593Smuzhiyun #define HCI_BLOCKED_KEY_TYPE_IRK 0x02 671*4882a593Smuzhiyun 672*4882a593Smuzhiyun struct mgmt_blocked_key_info { 673*4882a593Smuzhiyun __u8 type; 674*4882a593Smuzhiyun __u8 val[16]; 675*4882a593Smuzhiyun } __packed; 676*4882a593Smuzhiyun 677*4882a593Smuzhiyun struct mgmt_cp_set_blocked_keys { 678*4882a593Smuzhiyun __le16 key_count; 679*4882a593Smuzhiyun struct mgmt_blocked_key_info keys[]; 680*4882a593Smuzhiyun } __packed; 681*4882a593Smuzhiyun #define MGMT_OP_SET_BLOCKED_KEYS_SIZE 2 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun #define MGMT_OP_SET_WIDEBAND_SPEECH 0x0047 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun #define MGMT_OP_READ_SECURITY_INFO 0x0048 686*4882a593Smuzhiyun #define MGMT_READ_SECURITY_INFO_SIZE 0 687*4882a593Smuzhiyun struct mgmt_rp_read_security_info { 688*4882a593Smuzhiyun __le16 sec_len; 689*4882a593Smuzhiyun __u8 sec[]; 690*4882a593Smuzhiyun } __packed; 691*4882a593Smuzhiyun 692*4882a593Smuzhiyun #define MGMT_OP_READ_EXP_FEATURES_INFO 0x0049 693*4882a593Smuzhiyun #define MGMT_READ_EXP_FEATURES_INFO_SIZE 0 694*4882a593Smuzhiyun struct mgmt_rp_read_exp_features_info { 695*4882a593Smuzhiyun __le16 feature_count; 696*4882a593Smuzhiyun struct { 697*4882a593Smuzhiyun __u8 uuid[16]; 698*4882a593Smuzhiyun __le32 flags; 699*4882a593Smuzhiyun } features[]; 700*4882a593Smuzhiyun } __packed; 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun #define MGMT_OP_SET_EXP_FEATURE 0x004a 703*4882a593Smuzhiyun struct mgmt_cp_set_exp_feature { 704*4882a593Smuzhiyun __u8 uuid[16]; 705*4882a593Smuzhiyun __u8 param[]; 706*4882a593Smuzhiyun } __packed; 707*4882a593Smuzhiyun #define MGMT_SET_EXP_FEATURE_SIZE 16 708*4882a593Smuzhiyun struct mgmt_rp_set_exp_feature { 709*4882a593Smuzhiyun __u8 uuid[16]; 710*4882a593Smuzhiyun __le32 flags; 711*4882a593Smuzhiyun } __packed; 712*4882a593Smuzhiyun 713*4882a593Smuzhiyun #define MGMT_OP_READ_DEF_SYSTEM_CONFIG 0x004b 714*4882a593Smuzhiyun #define MGMT_READ_DEF_SYSTEM_CONFIG_SIZE 0 715*4882a593Smuzhiyun 716*4882a593Smuzhiyun #define MGMT_OP_SET_DEF_SYSTEM_CONFIG 0x004c 717*4882a593Smuzhiyun #define MGMT_SET_DEF_SYSTEM_CONFIG_SIZE 0 718*4882a593Smuzhiyun 719*4882a593Smuzhiyun #define MGMT_OP_READ_DEF_RUNTIME_CONFIG 0x004d 720*4882a593Smuzhiyun #define MGMT_READ_DEF_RUNTIME_CONFIG_SIZE 0 721*4882a593Smuzhiyun 722*4882a593Smuzhiyun #define MGMT_OP_SET_DEF_RUNTIME_CONFIG 0x004e 723*4882a593Smuzhiyun #define MGMT_SET_DEF_RUNTIME_CONFIG_SIZE 0 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun #define MGMT_OP_GET_DEVICE_FLAGS 0x004F 726*4882a593Smuzhiyun #define MGMT_GET_DEVICE_FLAGS_SIZE 7 727*4882a593Smuzhiyun struct mgmt_cp_get_device_flags { 728*4882a593Smuzhiyun struct mgmt_addr_info addr; 729*4882a593Smuzhiyun } __packed; 730*4882a593Smuzhiyun struct mgmt_rp_get_device_flags { 731*4882a593Smuzhiyun struct mgmt_addr_info addr; 732*4882a593Smuzhiyun __le32 supported_flags; 733*4882a593Smuzhiyun __le32 current_flags; 734*4882a593Smuzhiyun } __packed; 735*4882a593Smuzhiyun 736*4882a593Smuzhiyun #define MGMT_OP_SET_DEVICE_FLAGS 0x0050 737*4882a593Smuzhiyun #define MGMT_SET_DEVICE_FLAGS_SIZE 11 738*4882a593Smuzhiyun struct mgmt_cp_set_device_flags { 739*4882a593Smuzhiyun struct mgmt_addr_info addr; 740*4882a593Smuzhiyun __le32 current_flags; 741*4882a593Smuzhiyun } __packed; 742*4882a593Smuzhiyun struct mgmt_rp_set_device_flags { 743*4882a593Smuzhiyun struct mgmt_addr_info addr; 744*4882a593Smuzhiyun } __packed; 745*4882a593Smuzhiyun 746*4882a593Smuzhiyun #define MGMT_ADV_MONITOR_FEATURE_MASK_OR_PATTERNS BIT(0) 747*4882a593Smuzhiyun 748*4882a593Smuzhiyun #define MGMT_OP_READ_ADV_MONITOR_FEATURES 0x0051 749*4882a593Smuzhiyun #define MGMT_READ_ADV_MONITOR_FEATURES_SIZE 0 750*4882a593Smuzhiyun struct mgmt_rp_read_adv_monitor_features { 751*4882a593Smuzhiyun __le32 supported_features; 752*4882a593Smuzhiyun __le32 enabled_features; 753*4882a593Smuzhiyun __le16 max_num_handles; 754*4882a593Smuzhiyun __u8 max_num_patterns; 755*4882a593Smuzhiyun __le16 num_handles; 756*4882a593Smuzhiyun __le16 handles[]; 757*4882a593Smuzhiyun } __packed; 758*4882a593Smuzhiyun 759*4882a593Smuzhiyun struct mgmt_adv_pattern { 760*4882a593Smuzhiyun __u8 ad_type; 761*4882a593Smuzhiyun __u8 offset; 762*4882a593Smuzhiyun __u8 length; 763*4882a593Smuzhiyun __u8 value[31]; 764*4882a593Smuzhiyun } __packed; 765*4882a593Smuzhiyun 766*4882a593Smuzhiyun #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR 0x0052 767*4882a593Smuzhiyun struct mgmt_cp_add_adv_patterns_monitor { 768*4882a593Smuzhiyun __u8 pattern_count; 769*4882a593Smuzhiyun struct mgmt_adv_pattern patterns[]; 770*4882a593Smuzhiyun } __packed; 771*4882a593Smuzhiyun #define MGMT_ADD_ADV_PATTERNS_MONITOR_SIZE 1 772*4882a593Smuzhiyun struct mgmt_rp_add_adv_patterns_monitor { 773*4882a593Smuzhiyun __le16 monitor_handle; 774*4882a593Smuzhiyun } __packed; 775*4882a593Smuzhiyun 776*4882a593Smuzhiyun #define MGMT_OP_REMOVE_ADV_MONITOR 0x0053 777*4882a593Smuzhiyun struct mgmt_cp_remove_adv_monitor { 778*4882a593Smuzhiyun __le16 monitor_handle; 779*4882a593Smuzhiyun } __packed; 780*4882a593Smuzhiyun #define MGMT_REMOVE_ADV_MONITOR_SIZE 2 781*4882a593Smuzhiyun struct mgmt_rp_remove_adv_monitor { 782*4882a593Smuzhiyun __le16 monitor_handle; 783*4882a593Smuzhiyun } __packed; 784*4882a593Smuzhiyun 785*4882a593Smuzhiyun #define MGMT_EV_CMD_COMPLETE 0x0001 786*4882a593Smuzhiyun struct mgmt_ev_cmd_complete { 787*4882a593Smuzhiyun __le16 opcode; 788*4882a593Smuzhiyun __u8 status; 789*4882a593Smuzhiyun __u8 data[]; 790*4882a593Smuzhiyun } __packed; 791*4882a593Smuzhiyun 792*4882a593Smuzhiyun #define MGMT_EV_CMD_STATUS 0x0002 793*4882a593Smuzhiyun struct mgmt_ev_cmd_status { 794*4882a593Smuzhiyun __le16 opcode; 795*4882a593Smuzhiyun __u8 status; 796*4882a593Smuzhiyun } __packed; 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun #define MGMT_EV_CONTROLLER_ERROR 0x0003 799*4882a593Smuzhiyun struct mgmt_ev_controller_error { 800*4882a593Smuzhiyun __u8 error_code; 801*4882a593Smuzhiyun } __packed; 802*4882a593Smuzhiyun 803*4882a593Smuzhiyun #define MGMT_EV_INDEX_ADDED 0x0004 804*4882a593Smuzhiyun 805*4882a593Smuzhiyun #define MGMT_EV_INDEX_REMOVED 0x0005 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun #define MGMT_EV_NEW_SETTINGS 0x0006 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun #define MGMT_EV_CLASS_OF_DEV_CHANGED 0x0007 810*4882a593Smuzhiyun struct mgmt_ev_class_of_dev_changed { 811*4882a593Smuzhiyun __u8 dev_class[3]; 812*4882a593Smuzhiyun }; 813*4882a593Smuzhiyun 814*4882a593Smuzhiyun #define MGMT_EV_LOCAL_NAME_CHANGED 0x0008 815*4882a593Smuzhiyun struct mgmt_ev_local_name_changed { 816*4882a593Smuzhiyun __u8 name[MGMT_MAX_NAME_LENGTH]; 817*4882a593Smuzhiyun __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH]; 818*4882a593Smuzhiyun } __packed; 819*4882a593Smuzhiyun 820*4882a593Smuzhiyun #define MGMT_EV_NEW_LINK_KEY 0x0009 821*4882a593Smuzhiyun struct mgmt_ev_new_link_key { 822*4882a593Smuzhiyun __u8 store_hint; 823*4882a593Smuzhiyun struct mgmt_link_key_info key; 824*4882a593Smuzhiyun } __packed; 825*4882a593Smuzhiyun 826*4882a593Smuzhiyun #define MGMT_EV_NEW_LONG_TERM_KEY 0x000A 827*4882a593Smuzhiyun struct mgmt_ev_new_long_term_key { 828*4882a593Smuzhiyun __u8 store_hint; 829*4882a593Smuzhiyun struct mgmt_ltk_info key; 830*4882a593Smuzhiyun } __packed; 831*4882a593Smuzhiyun 832*4882a593Smuzhiyun #define MGMT_EV_DEVICE_CONNECTED 0x000B 833*4882a593Smuzhiyun struct mgmt_ev_device_connected { 834*4882a593Smuzhiyun struct mgmt_addr_info addr; 835*4882a593Smuzhiyun __le32 flags; 836*4882a593Smuzhiyun __le16 eir_len; 837*4882a593Smuzhiyun __u8 eir[]; 838*4882a593Smuzhiyun } __packed; 839*4882a593Smuzhiyun 840*4882a593Smuzhiyun #define MGMT_DEV_DISCONN_UNKNOWN 0x00 841*4882a593Smuzhiyun #define MGMT_DEV_DISCONN_TIMEOUT 0x01 842*4882a593Smuzhiyun #define MGMT_DEV_DISCONN_LOCAL_HOST 0x02 843*4882a593Smuzhiyun #define MGMT_DEV_DISCONN_REMOTE 0x03 844*4882a593Smuzhiyun #define MGMT_DEV_DISCONN_AUTH_FAILURE 0x04 845*4882a593Smuzhiyun #define MGMT_DEV_DISCONN_LOCAL_HOST_SUSPEND 0x05 846*4882a593Smuzhiyun 847*4882a593Smuzhiyun #define MGMT_EV_DEVICE_DISCONNECTED 0x000C 848*4882a593Smuzhiyun struct mgmt_ev_device_disconnected { 849*4882a593Smuzhiyun struct mgmt_addr_info addr; 850*4882a593Smuzhiyun __u8 reason; 851*4882a593Smuzhiyun } __packed; 852*4882a593Smuzhiyun 853*4882a593Smuzhiyun #define MGMT_EV_CONNECT_FAILED 0x000D 854*4882a593Smuzhiyun struct mgmt_ev_connect_failed { 855*4882a593Smuzhiyun struct mgmt_addr_info addr; 856*4882a593Smuzhiyun __u8 status; 857*4882a593Smuzhiyun } __packed; 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun #define MGMT_EV_PIN_CODE_REQUEST 0x000E 860*4882a593Smuzhiyun struct mgmt_ev_pin_code_request { 861*4882a593Smuzhiyun struct mgmt_addr_info addr; 862*4882a593Smuzhiyun __u8 secure; 863*4882a593Smuzhiyun } __packed; 864*4882a593Smuzhiyun 865*4882a593Smuzhiyun #define MGMT_EV_USER_CONFIRM_REQUEST 0x000F 866*4882a593Smuzhiyun struct mgmt_ev_user_confirm_request { 867*4882a593Smuzhiyun struct mgmt_addr_info addr; 868*4882a593Smuzhiyun __u8 confirm_hint; 869*4882a593Smuzhiyun __le32 value; 870*4882a593Smuzhiyun } __packed; 871*4882a593Smuzhiyun 872*4882a593Smuzhiyun #define MGMT_EV_USER_PASSKEY_REQUEST 0x0010 873*4882a593Smuzhiyun struct mgmt_ev_user_passkey_request { 874*4882a593Smuzhiyun struct mgmt_addr_info addr; 875*4882a593Smuzhiyun } __packed; 876*4882a593Smuzhiyun 877*4882a593Smuzhiyun #define MGMT_EV_AUTH_FAILED 0x0011 878*4882a593Smuzhiyun struct mgmt_ev_auth_failed { 879*4882a593Smuzhiyun struct mgmt_addr_info addr; 880*4882a593Smuzhiyun __u8 status; 881*4882a593Smuzhiyun } __packed; 882*4882a593Smuzhiyun 883*4882a593Smuzhiyun #define MGMT_DEV_FOUND_CONFIRM_NAME 0x01 884*4882a593Smuzhiyun #define MGMT_DEV_FOUND_LEGACY_PAIRING 0x02 885*4882a593Smuzhiyun #define MGMT_DEV_FOUND_NOT_CONNECTABLE 0x04 886*4882a593Smuzhiyun 887*4882a593Smuzhiyun #define MGMT_EV_DEVICE_FOUND 0x0012 888*4882a593Smuzhiyun struct mgmt_ev_device_found { 889*4882a593Smuzhiyun struct mgmt_addr_info addr; 890*4882a593Smuzhiyun __s8 rssi; 891*4882a593Smuzhiyun __le32 flags; 892*4882a593Smuzhiyun __le16 eir_len; 893*4882a593Smuzhiyun __u8 eir[]; 894*4882a593Smuzhiyun } __packed; 895*4882a593Smuzhiyun 896*4882a593Smuzhiyun #define MGMT_EV_DISCOVERING 0x0013 897*4882a593Smuzhiyun struct mgmt_ev_discovering { 898*4882a593Smuzhiyun __u8 type; 899*4882a593Smuzhiyun __u8 discovering; 900*4882a593Smuzhiyun } __packed; 901*4882a593Smuzhiyun 902*4882a593Smuzhiyun #define MGMT_EV_DEVICE_BLOCKED 0x0014 903*4882a593Smuzhiyun struct mgmt_ev_device_blocked { 904*4882a593Smuzhiyun struct mgmt_addr_info addr; 905*4882a593Smuzhiyun } __packed; 906*4882a593Smuzhiyun 907*4882a593Smuzhiyun #define MGMT_EV_DEVICE_UNBLOCKED 0x0015 908*4882a593Smuzhiyun struct mgmt_ev_device_unblocked { 909*4882a593Smuzhiyun struct mgmt_addr_info addr; 910*4882a593Smuzhiyun } __packed; 911*4882a593Smuzhiyun 912*4882a593Smuzhiyun #define MGMT_EV_DEVICE_UNPAIRED 0x0016 913*4882a593Smuzhiyun struct mgmt_ev_device_unpaired { 914*4882a593Smuzhiyun struct mgmt_addr_info addr; 915*4882a593Smuzhiyun } __packed; 916*4882a593Smuzhiyun 917*4882a593Smuzhiyun #define MGMT_EV_PASSKEY_NOTIFY 0x0017 918*4882a593Smuzhiyun struct mgmt_ev_passkey_notify { 919*4882a593Smuzhiyun struct mgmt_addr_info addr; 920*4882a593Smuzhiyun __le32 passkey; 921*4882a593Smuzhiyun __u8 entered; 922*4882a593Smuzhiyun } __packed; 923*4882a593Smuzhiyun 924*4882a593Smuzhiyun #define MGMT_EV_NEW_IRK 0x0018 925*4882a593Smuzhiyun struct mgmt_ev_new_irk { 926*4882a593Smuzhiyun __u8 store_hint; 927*4882a593Smuzhiyun bdaddr_t rpa; 928*4882a593Smuzhiyun struct mgmt_irk_info irk; 929*4882a593Smuzhiyun } __packed; 930*4882a593Smuzhiyun 931*4882a593Smuzhiyun #define MGMT_CSRK_LOCAL_UNAUTHENTICATED 0x00 932*4882a593Smuzhiyun #define MGMT_CSRK_REMOTE_UNAUTHENTICATED 0x01 933*4882a593Smuzhiyun #define MGMT_CSRK_LOCAL_AUTHENTICATED 0x02 934*4882a593Smuzhiyun #define MGMT_CSRK_REMOTE_AUTHENTICATED 0x03 935*4882a593Smuzhiyun 936*4882a593Smuzhiyun struct mgmt_csrk_info { 937*4882a593Smuzhiyun struct mgmt_addr_info addr; 938*4882a593Smuzhiyun __u8 type; 939*4882a593Smuzhiyun __u8 val[16]; 940*4882a593Smuzhiyun } __packed; 941*4882a593Smuzhiyun 942*4882a593Smuzhiyun #define MGMT_EV_NEW_CSRK 0x0019 943*4882a593Smuzhiyun struct mgmt_ev_new_csrk { 944*4882a593Smuzhiyun __u8 store_hint; 945*4882a593Smuzhiyun struct mgmt_csrk_info key; 946*4882a593Smuzhiyun } __packed; 947*4882a593Smuzhiyun 948*4882a593Smuzhiyun #define MGMT_EV_DEVICE_ADDED 0x001a 949*4882a593Smuzhiyun struct mgmt_ev_device_added { 950*4882a593Smuzhiyun struct mgmt_addr_info addr; 951*4882a593Smuzhiyun __u8 action; 952*4882a593Smuzhiyun } __packed; 953*4882a593Smuzhiyun 954*4882a593Smuzhiyun #define MGMT_EV_DEVICE_REMOVED 0x001b 955*4882a593Smuzhiyun struct mgmt_ev_device_removed { 956*4882a593Smuzhiyun struct mgmt_addr_info addr; 957*4882a593Smuzhiyun } __packed; 958*4882a593Smuzhiyun 959*4882a593Smuzhiyun #define MGMT_EV_NEW_CONN_PARAM 0x001c 960*4882a593Smuzhiyun struct mgmt_ev_new_conn_param { 961*4882a593Smuzhiyun struct mgmt_addr_info addr; 962*4882a593Smuzhiyun __u8 store_hint; 963*4882a593Smuzhiyun __le16 min_interval; 964*4882a593Smuzhiyun __le16 max_interval; 965*4882a593Smuzhiyun __le16 latency; 966*4882a593Smuzhiyun __le16 timeout; 967*4882a593Smuzhiyun } __packed; 968*4882a593Smuzhiyun 969*4882a593Smuzhiyun #define MGMT_EV_UNCONF_INDEX_ADDED 0x001d 970*4882a593Smuzhiyun 971*4882a593Smuzhiyun #define MGMT_EV_UNCONF_INDEX_REMOVED 0x001e 972*4882a593Smuzhiyun 973*4882a593Smuzhiyun #define MGMT_EV_NEW_CONFIG_OPTIONS 0x001f 974*4882a593Smuzhiyun 975*4882a593Smuzhiyun struct mgmt_ev_ext_index { 976*4882a593Smuzhiyun __u8 type; 977*4882a593Smuzhiyun __u8 bus; 978*4882a593Smuzhiyun } __packed; 979*4882a593Smuzhiyun 980*4882a593Smuzhiyun #define MGMT_EV_EXT_INDEX_ADDED 0x0020 981*4882a593Smuzhiyun 982*4882a593Smuzhiyun #define MGMT_EV_EXT_INDEX_REMOVED 0x0021 983*4882a593Smuzhiyun 984*4882a593Smuzhiyun #define MGMT_EV_LOCAL_OOB_DATA_UPDATED 0x0022 985*4882a593Smuzhiyun struct mgmt_ev_local_oob_data_updated { 986*4882a593Smuzhiyun __u8 type; 987*4882a593Smuzhiyun __le16 eir_len; 988*4882a593Smuzhiyun __u8 eir[]; 989*4882a593Smuzhiyun } __packed; 990*4882a593Smuzhiyun 991*4882a593Smuzhiyun #define MGMT_EV_ADVERTISING_ADDED 0x0023 992*4882a593Smuzhiyun struct mgmt_ev_advertising_added { 993*4882a593Smuzhiyun __u8 instance; 994*4882a593Smuzhiyun } __packed; 995*4882a593Smuzhiyun 996*4882a593Smuzhiyun #define MGMT_EV_ADVERTISING_REMOVED 0x0024 997*4882a593Smuzhiyun struct mgmt_ev_advertising_removed { 998*4882a593Smuzhiyun __u8 instance; 999*4882a593Smuzhiyun } __packed; 1000*4882a593Smuzhiyun 1001*4882a593Smuzhiyun #define MGMT_EV_EXT_INFO_CHANGED 0x0025 1002*4882a593Smuzhiyun struct mgmt_ev_ext_info_changed { 1003*4882a593Smuzhiyun __le16 eir_len; 1004*4882a593Smuzhiyun __u8 eir[]; 1005*4882a593Smuzhiyun } __packed; 1006*4882a593Smuzhiyun 1007*4882a593Smuzhiyun #define MGMT_EV_PHY_CONFIGURATION_CHANGED 0x0026 1008*4882a593Smuzhiyun struct mgmt_ev_phy_configuration_changed { 1009*4882a593Smuzhiyun __le32 selected_phys; 1010*4882a593Smuzhiyun } __packed; 1011*4882a593Smuzhiyun 1012*4882a593Smuzhiyun #define MGMT_EV_EXP_FEATURE_CHANGED 0x0027 1013*4882a593Smuzhiyun struct mgmt_ev_exp_feature_changed { 1014*4882a593Smuzhiyun __u8 uuid[16]; 1015*4882a593Smuzhiyun __le32 flags; 1016*4882a593Smuzhiyun } __packed; 1017*4882a593Smuzhiyun 1018*4882a593Smuzhiyun #define MGMT_EV_DEVICE_FLAGS_CHANGED 0x002a 1019*4882a593Smuzhiyun struct mgmt_ev_device_flags_changed { 1020*4882a593Smuzhiyun struct mgmt_addr_info addr; 1021*4882a593Smuzhiyun __le32 supported_flags; 1022*4882a593Smuzhiyun __le32 current_flags; 1023*4882a593Smuzhiyun } __packed; 1024*4882a593Smuzhiyun 1025*4882a593Smuzhiyun #define MGMT_EV_ADV_MONITOR_ADDED 0x002b 1026*4882a593Smuzhiyun struct mgmt_ev_adv_monitor_added { 1027*4882a593Smuzhiyun __le16 monitor_handle; 1028*4882a593Smuzhiyun } __packed; 1029*4882a593Smuzhiyun 1030*4882a593Smuzhiyun #define MGMT_EV_ADV_MONITOR_REMOVED 0x002c 1031*4882a593Smuzhiyun struct mgmt_ev_adv_monitor_removed { 1032*4882a593Smuzhiyun __le16 monitor_handle; 1033*4882a593Smuzhiyun } __packed; 1034*4882a593Smuzhiyun 1035*4882a593Smuzhiyun #define MGMT_EV_CONTROLLER_SUSPEND 0x002d 1036*4882a593Smuzhiyun struct mgmt_ev_controller_suspend { 1037*4882a593Smuzhiyun __u8 suspend_state; 1038*4882a593Smuzhiyun } __packed; 1039*4882a593Smuzhiyun 1040*4882a593Smuzhiyun #define MGMT_EV_CONTROLLER_RESUME 0x002e 1041*4882a593Smuzhiyun struct mgmt_ev_controller_resume { 1042*4882a593Smuzhiyun __u8 wake_reason; 1043*4882a593Smuzhiyun struct mgmt_addr_info addr; 1044*4882a593Smuzhiyun } __packed; 1045*4882a593Smuzhiyun 1046*4882a593Smuzhiyun #define MGMT_WAKE_REASON_NON_BT_WAKE 0x0 1047*4882a593Smuzhiyun #define MGMT_WAKE_REASON_UNEXPECTED 0x1 1048*4882a593Smuzhiyun #define MGMT_WAKE_REASON_REMOTE_WAKE 0x2 1049