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