mgmt: Add NAME_REQUEST_FAILED flag for device_found event
[platform/upstream/bluez.git] / lib / mgmt.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *  BlueZ - Bluetooth protocol stack for Linux
4  *
5  *  Copyright (C) 2010  Nokia Corporation
6  *  Copyright (C) 2010  Marcel Holtmann <marcel@holtmann.org>
7  *
8  *
9  */
10
11 #ifndef __packed
12 #define __packed __attribute__((packed))
13 #endif
14
15 #define MGMT_INDEX_NONE                 0xFFFF
16
17 #define MGMT_STATUS_SUCCESS             0x00
18 #define MGMT_STATUS_UNKNOWN_COMMAND     0x01
19 #define MGMT_STATUS_NOT_CONNECTED       0x02
20 #define MGMT_STATUS_FAILED              0x03
21 #define MGMT_STATUS_CONNECT_FAILED      0x04
22 #define MGMT_STATUS_AUTH_FAILED         0x05
23 #define MGMT_STATUS_NOT_PAIRED          0x06
24 #define MGMT_STATUS_NO_RESOURCES        0x07
25 #define MGMT_STATUS_TIMEOUT             0x08
26 #define MGMT_STATUS_ALREADY_CONNECTED   0x09
27 #define MGMT_STATUS_BUSY                0x0a
28 #define MGMT_STATUS_REJECTED            0x0b
29 #define MGMT_STATUS_NOT_SUPPORTED       0x0c
30 #define MGMT_STATUS_INVALID_PARAMS      0x0d
31 #define MGMT_STATUS_DISCONNECTED        0x0e
32 #define MGMT_STATUS_NOT_POWERED         0x0f
33 #define MGMT_STATUS_CANCELLED           0x10
34 #define MGMT_STATUS_INVALID_INDEX       0x11
35 #define MGMT_STATUS_RFKILLED            0x12
36 #define MGMT_STATUS_ALREADY_PAIRED      0x13
37 #define MGMT_STATUS_PERMISSION_DENIED   0x14
38
39 struct mgmt_hdr {
40         uint16_t opcode;
41         uint16_t index;
42         uint16_t len;
43 } __packed;
44 #define MGMT_HDR_SIZE   6
45
46 struct mgmt_tlv {
47         uint16_t type;
48         uint8_t  length;
49         uint8_t  value[];
50 } __packed;
51
52 struct mgmt_addr_info {
53         bdaddr_t bdaddr;
54         uint8_t type;
55 } __packed;
56
57 #define MGMT_OP_READ_VERSION            0x0001
58 struct mgmt_rp_read_version {
59         uint8_t version;
60         uint16_t revision;
61 } __packed;
62
63 #define MGMT_OP_READ_COMMANDS           0x0002
64 struct mgmt_rp_read_commands {
65         uint16_t num_commands;
66         uint16_t num_events;
67         uint16_t opcodes[0];
68 } __packed;
69
70 #define MGMT_OP_READ_INDEX_LIST         0x0003
71 struct mgmt_rp_read_index_list {
72         uint16_t num_controllers;
73         uint16_t index[0];
74 } __packed;
75
76 /* Reserve one extra byte for names in management messages so that they
77  * are always guaranteed to be nul-terminated */
78 #define MGMT_MAX_NAME_LENGTH            (248 + 1)
79 #define MGMT_MAX_SHORT_NAME_LENGTH      (10 + 1)
80
81 #define MGMT_SETTING_POWERED            0x00000001
82 #define MGMT_SETTING_CONNECTABLE        0x00000002
83 #define MGMT_SETTING_FAST_CONNECTABLE   0x00000004
84 #define MGMT_SETTING_DISCOVERABLE       0x00000008
85 #define MGMT_SETTING_BONDABLE           0x00000010
86 #define MGMT_SETTING_LINK_SECURITY      0x00000020
87 #define MGMT_SETTING_SSP                0x00000040
88 #define MGMT_SETTING_BREDR              0x00000080
89 #define MGMT_SETTING_HS                 0x00000100
90 #define MGMT_SETTING_LE                 0x00000200
91 #define MGMT_SETTING_ADVERTISING        0x00000400
92 #define MGMT_SETTING_SECURE_CONN        0x00000800
93 #define MGMT_SETTING_DEBUG_KEYS         0x00001000
94 #define MGMT_SETTING_PRIVACY            0x00002000
95 #define MGMT_SETTING_CONFIGURATION      0x00004000
96 #define MGMT_SETTING_STATIC_ADDRESS     0x00008000
97 #define MGMT_SETTING_PHY_CONFIGURATION  0x00010000
98 #define MGMT_SETTING_WIDEBAND_SPEECH    0x00020000
99
100 #define MGMT_OP_READ_INFO               0x0004
101 struct mgmt_rp_read_info {
102         bdaddr_t bdaddr;
103         uint8_t version;
104         uint16_t manufacturer;
105         uint32_t supported_settings;
106         uint32_t current_settings;
107         uint8_t dev_class[3];
108         uint8_t name[MGMT_MAX_NAME_LENGTH];
109         uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
110 } __packed;
111
112 struct mgmt_mode {
113         uint8_t val;
114 } __packed;
115
116 struct mgmt_cod {
117         uint8_t val[3];
118 } __packed;
119
120 #define MGMT_OP_SET_POWERED             0x0005
121
122 #define MGMT_OP_SET_DISCOVERABLE        0x0006
123 struct mgmt_cp_set_discoverable {
124         uint8_t val;
125         uint16_t timeout;
126 } __packed;
127
128 #define MGMT_OP_SET_CONNECTABLE         0x0007
129
130 #define MGMT_OP_SET_FAST_CONNECTABLE    0x0008
131
132 #define MGMT_OP_SET_BONDABLE            0x0009
133
134 #define MGMT_OP_SET_LINK_SECURITY       0x000A
135
136 #define MGMT_OP_SET_SSP                 0x000B
137
138 #define MGMT_OP_SET_HS                  0x000C
139
140 #define MGMT_OP_SET_LE                  0x000D
141
142 #define MGMT_OP_SET_DEV_CLASS           0x000E
143 struct mgmt_cp_set_dev_class {
144         uint8_t major;
145         uint8_t minor;
146 } __packed;
147
148 #define MGMT_OP_SET_LOCAL_NAME          0x000F
149 struct mgmt_cp_set_local_name {
150         uint8_t name[MGMT_MAX_NAME_LENGTH];
151         uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
152 } __packed;
153
154 #define MGMT_OP_ADD_UUID                0x0010
155 struct mgmt_cp_add_uuid {
156         uint8_t uuid[16];
157         uint8_t svc_hint;
158 } __packed;
159
160 #define MGMT_OP_REMOVE_UUID             0x0011
161 struct mgmt_cp_remove_uuid {
162         uint8_t uuid[16];
163 } __packed;
164
165 struct mgmt_link_key_info {
166         struct mgmt_addr_info addr;
167         uint8_t type;
168         uint8_t val[16];
169         uint8_t pin_len;
170 } __packed;
171
172 #define MGMT_OP_LOAD_LINK_KEYS          0x0012
173 struct mgmt_cp_load_link_keys {
174         uint8_t debug_keys;
175         uint16_t key_count;
176         struct mgmt_link_key_info keys[0];
177 } __packed;
178
179 struct mgmt_ltk_info {
180         struct mgmt_addr_info addr;
181         uint8_t type;
182         uint8_t central;
183         uint8_t enc_size;
184         uint16_t ediv;
185         uint64_t rand;
186         uint8_t val[16];
187 } __packed;
188
189 #define MGMT_OP_LOAD_LONG_TERM_KEYS     0x0013
190 struct mgmt_cp_load_long_term_keys {
191         uint16_t key_count;
192         struct mgmt_ltk_info keys[0];
193 } __packed;
194
195 #define MGMT_OP_DISCONNECT              0x0014
196 struct mgmt_cp_disconnect {
197         struct mgmt_addr_info addr;
198 } __packed;
199 struct mgmt_rp_disconnect {
200         struct mgmt_addr_info addr;
201 } __packed;
202
203 #define MGMT_OP_GET_CONNECTIONS         0x0015
204 struct mgmt_rp_get_connections {
205         uint16_t conn_count;
206         struct mgmt_addr_info addr[0];
207 } __packed;
208
209 #define MGMT_OP_PIN_CODE_REPLY          0x0016
210 struct mgmt_cp_pin_code_reply {
211         struct mgmt_addr_info addr;
212         uint8_t pin_len;
213         uint8_t pin_code[16];
214 } __packed;
215
216 #define MGMT_OP_PIN_CODE_NEG_REPLY      0x0017
217 struct mgmt_cp_pin_code_neg_reply {
218         struct mgmt_addr_info addr;
219 } __packed;
220
221 #define MGMT_OP_SET_IO_CAPABILITY       0x0018
222 struct mgmt_cp_set_io_capability {
223         uint8_t io_capability;
224 } __packed;
225
226 #define MGMT_OP_PAIR_DEVICE             0x0019
227 struct mgmt_cp_pair_device {
228         struct mgmt_addr_info addr;
229         uint8_t io_cap;
230 } __packed;
231 struct mgmt_rp_pair_device {
232         struct mgmt_addr_info addr;
233 } __packed;
234
235 #define MGMT_OP_CANCEL_PAIR_DEVICE      0x001A
236
237 #define MGMT_OP_UNPAIR_DEVICE           0x001B
238 struct mgmt_cp_unpair_device {
239         struct mgmt_addr_info addr;
240         uint8_t disconnect;
241 } __packed;
242 struct mgmt_rp_unpair_device {
243         struct mgmt_addr_info addr;
244 } __packed;
245
246 #define MGMT_OP_USER_CONFIRM_REPLY      0x001C
247 struct mgmt_cp_user_confirm_reply {
248         struct mgmt_addr_info addr;
249 } __packed;
250 struct mgmt_rp_user_confirm_reply {
251         struct mgmt_addr_info addr;
252 } __packed;
253
254 #define MGMT_OP_USER_CONFIRM_NEG_REPLY  0x001D
255
256 #define MGMT_OP_USER_PASSKEY_REPLY      0x001E
257 struct mgmt_cp_user_passkey_reply {
258         struct mgmt_addr_info addr;
259         uint32_t passkey;
260 } __packed;
261 struct mgmt_rp_user_passkey_reply {
262         struct mgmt_addr_info addr;
263 } __packed;
264
265 #define MGMT_OP_USER_PASSKEY_NEG_REPLY  0x001F
266 struct mgmt_cp_user_passkey_neg_reply {
267         struct mgmt_addr_info addr;
268 } __packed;
269
270 #define MGMT_OP_READ_LOCAL_OOB_DATA     0x0020
271 struct mgmt_rp_read_local_oob_data {
272         uint8_t hash192[16];
273         uint8_t rand192[16];
274         uint8_t hash256[16];
275         uint8_t rand256[16];
276 } __packed;
277
278 #define MGMT_OP_ADD_REMOTE_OOB_DATA     0x0021
279 struct mgmt_cp_add_remote_oob_data {
280         struct mgmt_addr_info addr;
281         uint8_t hash192[16];
282         uint8_t rand192[16];
283         uint8_t hash256[16];
284         uint8_t rand256[16];
285 } __packed;
286
287 #define MGMT_OP_REMOVE_REMOTE_OOB_DATA  0x0022
288 struct mgmt_cp_remove_remote_oob_data {
289         struct mgmt_addr_info addr;
290 } __packed;
291
292 #define MGMT_OP_START_DISCOVERY         0x0023
293 struct mgmt_cp_start_discovery {
294         uint8_t type;
295 } __packed;
296
297 #define MGMT_OP_STOP_DISCOVERY          0x0024
298 struct mgmt_cp_stop_discovery {
299         uint8_t type;
300 } __packed;
301
302 #define MGMT_OP_CONFIRM_NAME            0x0025
303 struct mgmt_cp_confirm_name {
304         struct mgmt_addr_info addr;
305         uint8_t name_known;
306 } __packed;
307 struct mgmt_rp_confirm_name {
308         struct mgmt_addr_info addr;
309 } __packed;
310
311 #define MGMT_OP_BLOCK_DEVICE            0x0026
312 struct mgmt_cp_block_device {
313         struct mgmt_addr_info addr;
314 } __packed;
315
316 #define MGMT_OP_UNBLOCK_DEVICE          0x0027
317 struct mgmt_cp_unblock_device {
318         struct mgmt_addr_info addr;
319 } __packed;
320
321 #define MGMT_OP_SET_DEVICE_ID           0x0028
322 struct mgmt_cp_set_device_id {
323         uint16_t source;
324         uint16_t vendor;
325         uint16_t product;
326         uint16_t version;
327 } __packed;
328
329 #define MGMT_OP_SET_ADVERTISING         0x0029
330
331 #define MGMT_OP_SET_BREDR               0x002A
332
333 #define MGMT_OP_SET_STATIC_ADDRESS      0x002B
334 struct mgmt_cp_set_static_address {
335         bdaddr_t bdaddr;
336 } __packed;
337
338 #define MGMT_OP_SET_SCAN_PARAMS         0x002C
339 struct mgmt_cp_set_scan_params {
340         uint16_t interval;
341         uint16_t window;
342 } __packed;
343
344 #define MGMT_OP_SET_SECURE_CONN         0x002D
345
346 #define MGMT_OP_SET_DEBUG_KEYS          0x002E
347
348 struct mgmt_irk_info {
349         struct mgmt_addr_info addr;
350         uint8_t val[16];
351 } __packed;
352
353 #define MGMT_OP_SET_PRIVACY             0x002F
354 struct mgmt_cp_set_privacy {
355         uint8_t privacy;
356         uint8_t irk[16];
357 } __packed;
358
359 #define MGMT_OP_LOAD_IRKS               0x0030
360 struct mgmt_cp_load_irks {
361         uint16_t irk_count;
362         struct mgmt_irk_info irks[0];
363 } __packed;
364
365 #define MGMT_OP_GET_CONN_INFO           0x0031
366 struct mgmt_cp_get_conn_info {
367         struct mgmt_addr_info addr;
368 } __packed;
369 struct mgmt_rp_get_conn_info {
370         struct mgmt_addr_info addr;
371         int8_t rssi;
372         int8_t tx_power;
373         int8_t max_tx_power;
374 } __packed;
375
376 #define MGMT_OP_GET_CLOCK_INFO          0x0032
377 struct mgmt_cp_get_clock_info {
378         struct mgmt_addr_info addr;
379 } __packed;
380 struct mgmt_rp_get_clock_info {
381         struct mgmt_addr_info addr;
382         uint32_t  local_clock;
383         uint32_t  piconet_clock;
384         uint16_t  accuracy;
385 } __packed;
386
387 #define MGMT_OP_ADD_DEVICE              0x0033
388 struct mgmt_cp_add_device {
389         struct mgmt_addr_info addr;
390         uint8_t action;
391 } __packed;
392 struct mgmt_rp_add_device {
393         struct mgmt_addr_info addr;
394 } __packed;
395
396 #define MGMT_OP_REMOVE_DEVICE           0x0034
397 struct mgmt_cp_remove_device {
398         struct mgmt_addr_info addr;
399 } __packed;
400 struct mgmt_rp_remove_device {
401         struct mgmt_addr_info addr;
402 } __packed;
403
404 struct mgmt_conn_param {
405         struct mgmt_addr_info addr;
406         uint16_t min_interval;
407         uint16_t max_interval;
408         uint16_t latency;
409         uint16_t timeout;
410 } __packed;
411
412 #define MGMT_OP_LOAD_CONN_PARAM         0x0035
413 struct mgmt_cp_load_conn_param {
414         uint16_t param_count;
415         struct mgmt_conn_param params[0];
416 } __packed;
417
418 #define MGMT_OP_READ_UNCONF_INDEX_LIST  0x0036
419 struct mgmt_rp_read_unconf_index_list {
420         uint16_t num_controllers;
421         uint16_t index[0];
422 } __packed;
423
424 #define MGMT_OPTION_EXTERNAL_CONFIG     0x00000001
425 #define MGMT_OPTION_PUBLIC_ADDRESS      0x00000002
426
427 #define MGMT_OP_READ_CONFIG_INFO        0x0037
428 struct mgmt_rp_read_config_info {
429         uint16_t manufacturer;
430         uint32_t supported_options;
431         uint32_t missing_options;
432 } __packed;
433
434 #define MGMT_OP_SET_EXTERNAL_CONFIG     0x0038
435 struct mgmt_cp_set_external_config {
436         uint8_t config;
437 } __packed;
438
439 #define MGMT_OP_SET_PUBLIC_ADDRESS      0x0039
440 struct mgmt_cp_set_public_address {
441         bdaddr_t bdaddr;
442 } __packed;
443
444 #define MGMT_OP_START_SERVICE_DISCOVERY         0x003A
445 struct mgmt_cp_start_service_discovery {
446         uint8_t type;
447         int8_t rssi;
448         uint16_t uuid_count;
449         uint8_t uuids[0][16];
450 } __packed;
451
452 #define MGMT_OP_READ_LOCAL_OOB_EXT_DATA 0x003B
453 struct mgmt_cp_read_local_oob_ext_data {
454         uint8_t  type;
455 } __packed;
456 struct mgmt_rp_read_local_oob_ext_data {
457         uint8_t  type;
458         uint16_t eir_len;
459         uint8_t  eir[0];
460 } __packed;
461
462 #define MGMT_OP_READ_EXT_INDEX_LIST     0x003C
463 struct mgmt_rp_read_ext_index_list {
464         uint16_t num_controllers;
465         struct {
466                 uint16_t index;
467                 uint8_t type;
468                 uint8_t bus;
469         } entry[0];
470 } __packed;
471
472 #define MGMT_OP_READ_ADV_FEATURES       0x003D
473 struct mgmt_rp_read_adv_features {
474         uint32_t supported_flags;
475         uint8_t  max_adv_data_len;
476         uint8_t  max_scan_rsp_len;
477         uint8_t  max_instances;
478         uint8_t  num_instances;
479         uint8_t  instance[0];
480 } __packed;
481
482 #define MGMT_OP_ADD_ADVERTISING         0x003E
483 struct mgmt_cp_add_advertising {
484         uint8_t  instance;
485         uint32_t flags;
486         uint16_t duration;
487         uint16_t timeout;
488         uint8_t  adv_data_len;
489         uint8_t  scan_rsp_len;
490         uint8_t  data[0];
491 } __packed;
492 struct mgmt_rp_add_advertising {
493         uint8_t instance;
494 } __packed;
495
496 #define MGMT_ADV_FLAG_CONNECTABLE       (1 << 0)
497 #define MGMT_ADV_FLAG_DISCOV            (1 << 1)
498 #define MGMT_ADV_FLAG_LIMITED_DISCOV    (1 << 2)
499 #define MGMT_ADV_FLAG_MANAGED_FLAGS     (1 << 3)
500 #define MGMT_ADV_FLAG_TX_POWER          (1 << 4)
501 #define MGMT_ADV_FLAG_APPEARANCE        (1 << 5)
502 #define MGMT_ADV_FLAG_LOCAL_NAME        (1 << 6)
503 #define MGMT_ADV_FLAG_SEC_1M            (1 << 7)
504 #define MGMT_ADV_FLAG_SEC_2M            (1 << 8)
505 #define MGMT_ADV_FLAG_SEC_CODED         (1 << 9)
506 #define MGMT_ADV_FLAG_CAN_SET_TX_POWER  (1 << 10)
507 #define MGMT_ADV_FLAG_HW_OFFLOAD        (1 << 11)
508 #define MGMT_ADV_PARAM_DURATION         (1 << 12)
509 #define MGMT_ADV_PARAM_TIMEOUT          (1 << 13)
510 #define MGMT_ADV_PARAM_INTERVALS        (1 << 14)
511 #define MGMT_ADV_PARAM_TX_POWER         (1 << 15)
512 #define MGMT_ADV_PARAM_SCAN_RSP         (1 << 16)
513
514 #define MGMT_OP_REMOVE_ADVERTISING      0x003F
515 struct mgmt_cp_remove_advertising {
516         uint8_t instance;
517 } __packed;
518 #define MGMT_REMOVE_ADVERTISING_SIZE    1
519 struct mgmt_rp_remove_advertising {
520         uint8_t instance;
521 } __packed;
522
523 #define MGMT_OP_GET_ADV_SIZE_INFO       0x0040
524 struct mgmt_cp_get_adv_size_info {
525         uint8_t  instance;
526         uint32_t flags;
527 } __packed;
528 #define MGMT_GET_ADV_SIZE_INFO_SIZE     5
529 struct mgmt_rp_get_adv_size_info {
530         uint8_t  instance;
531         uint32_t flags;
532         uint8_t  max_adv_data_len;
533         uint8_t  max_scan_rsp_len;
534 } __packed;
535
536 #define MGMT_OP_START_LIMITED_DISCOVERY 0x0041
537
538 #define MGMT_OP_READ_EXT_INFO           0x0042
539 struct mgmt_rp_read_ext_info {
540         bdaddr_t bdaddr;
541         uint8_t version;
542         uint16_t manufacturer;
543         uint32_t supported_settings;
544         uint32_t current_settings;
545         uint16_t eir_len;
546         uint8_t  eir[0];
547 } __packed;
548
549 #define MGMT_OP_SET_APPEARANCE          0x0043
550 struct mgmt_cp_set_appearance {
551         uint16_t appearance;
552 } __packed;
553
554 #define MGMT_OP_GET_PHY_CONFIGURATION   0x0044
555 struct mgmt_rp_get_phy_confguration {
556         uint32_t supported_phys;
557         uint32_t configurable_phys;
558         uint32_t selected_phys;
559 } __packed;
560
561 #define MGMT_PHY_BR_1M_1SLOT    0x00000001
562 #define MGMT_PHY_BR_1M_3SLOT    0x00000002
563 #define MGMT_PHY_BR_1M_5SLOT    0x00000004
564 #define MGMT_PHY_EDR_2M_1SLOT   0x00000008
565 #define MGMT_PHY_EDR_2M_3SLOT   0x00000010
566 #define MGMT_PHY_EDR_2M_5SLOT   0x00000020
567 #define MGMT_PHY_EDR_3M_1SLOT   0x00000040
568 #define MGMT_PHY_EDR_3M_3SLOT   0x00000080
569 #define MGMT_PHY_EDR_3M_5SLOT   0x00000100
570 #define MGMT_PHY_LE_1M_TX       0x00000200
571 #define MGMT_PHY_LE_1M_RX       0x00000400
572 #define MGMT_PHY_LE_2M_TX       0x00000800
573 #define MGMT_PHY_LE_2M_RX       0x00001000
574 #define MGMT_PHY_LE_CODED_TX    0x00002000
575 #define MGMT_PHY_LE_CODED_RX    0x00004000
576
577 #define MGMT_PHY_BREDR_MASK (MGMT_PHY_BR_1M_1SLOT | MGMT_PHY_BR_1M_3SLOT | \
578                              MGMT_PHY_BR_1M_5SLOT | MGMT_PHY_EDR_2M_1SLOT | \
579                              MGMT_PHY_EDR_2M_3SLOT | MGMT_PHY_EDR_2M_5SLOT | \
580                              MGMT_PHY_EDR_3M_1SLOT | MGMT_PHY_EDR_3M_3SLOT | \
581                              MGMT_PHY_EDR_3M_5SLOT)
582 #define MGMT_PHY_LE_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_1M_RX | \
583                           MGMT_PHY_LE_2M_TX | MGMT_PHY_LE_2M_RX | \
584                           MGMT_PHY_LE_CODED_TX | MGMT_PHY_LE_CODED_RX)
585 #define MGMT_PHY_LE_TX_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_2M_TX | \
586                              MGMT_PHY_LE_CODED_TX)
587 #define MGMT_PHY_LE_RX_MASK (MGMT_PHY_LE_1M_RX | MGMT_PHY_LE_2M_RX | \
588                              MGMT_PHY_LE_CODED_RX)
589
590 #define MGMT_OP_SET_PHY_CONFIGURATION   0x0045
591 struct mgmt_cp_set_phy_confguration {
592         uint32_t        default_phys;
593         uint32_t        configurable_phys;
594         uint32_t        selected_phys;
595 } __packed;
596
597 #define MGMT_OP_SET_BLOCKED_KEYS        0x0046
598
599 #define MGMT_OP_SET_WIDEBAND_SPEECH     0x0047
600
601 #define HCI_BLOCKED_KEY_TYPE_LINKKEY    0x00
602 #define HCI_BLOCKED_KEY_TYPE_LTK        0x01
603 #define HCI_BLOCKED_KEY_TYPE_IRK        0x02
604
605 struct mgmt_blocked_key_info {
606         uint8_t type;
607         uint8_t val[16];
608 } __packed;
609
610 struct mgmt_cp_set_blocked_keys {
611         uint16_t key_count;
612         struct mgmt_blocked_key_info keys[0];
613 } __packed;
614
615 #define MGMT_CAP_SEC_FLAGS              0x01
616 #define MGMT_CAP_MAX_ENC_KEY_SIZE       0x02
617 #define MGMT_CAP_SMP_MAX_ENC_KEY_SIZE   0x03
618 #define MGMT_CAP_LE_TX_PWR              0x04
619
620 #define MGMT_OP_READ_CONTROLLER_CAP     0x0048
621 #define MGMT_READ_CONTROLLER_CAP_SIZE   0
622 struct mgmt_rp_read_controller_cap {
623         uint16_t cap_len;
624         uint8_t cap[0];
625 } __packed;
626
627 #define MGMT_OP_READ_EXP_FEATURES_INFO  0x0049
628 struct mgmt_rp_read_exp_features_info {
629         uint16_t feature_count;
630         struct {
631                 uint8_t  uuid[16];
632                 uint32_t flags;
633         } features[];
634 } __packed;
635
636 #define MGMT_OP_SET_EXP_FEATURE         0x004a
637 struct mgmt_cp_set_exp_feature {
638         uint8_t  uuid[16];
639         uint8_t  action;
640 } __packed;
641 #define MGMT_SET_EXP_FEATURE_SIZE       17
642 struct mgmt_rp_set_exp_feature {
643         uint8_t  uuid[16];
644         uint32_t flags;
645 } __packed;
646
647 #define MGMT_OP_READ_DEF_SYSTEM_CONFIG  0x004b
648 struct mgmt_rp_read_default_system_config {
649         uint8_t parameters[0]; /* mgmt_tlv */
650 } __packed;
651
652 #define MGMT_OP_SET_DEF_SYSTEM_CONFIG   0x004c
653 struct mgmt_cp_set_default_system_config {
654         uint8_t parameters[0]; /* mgmt_tlv */
655 } __packed;
656
657 #define MGMT_OP_READ_DEF_RUNTIME_CONFIG 0x004d
658 struct mgmt_rp_read_default_runtime_config {
659         uint8_t parameters[0]; /* mgmt_tlv */
660 } __packed;
661
662 #define MGMT_OP_SET_DEF_RUNTIME_CONFIG  0x004e
663 struct mgmt_cp_set_default_runtime_config {
664         uint8_t parameters[0]; /* mgmt_tlv */
665 } __packed;
666
667 #define MGMT_OP_GET_DEVICE_FLAGS        0x004F
668 #define MGMT_GET_DEVICE_FLAGS_SIZE      7
669 struct mgmt_cp_get_device_flags {
670         struct mgmt_addr_info addr;
671 } __packed;
672 struct mgmt_rp_get_device_flags {
673         struct mgmt_addr_info addr;
674         uint32_t supported_flags;
675         uint32_t current_flags;
676 } __packed;
677
678 #define DEVICE_FLAG_REMOTE_WAKEUP       BIT(0)
679 #define DEVICE_FLAG_DEVICE_PRIVACY      BIT(1)
680
681 #define MGMT_OP_SET_DEVICE_FLAGS        0x0050
682 #define MGMT_SET_DEVICE_FLAGS_SIZE      11
683 struct mgmt_cp_set_device_flags {
684         struct mgmt_addr_info addr;
685         uint32_t current_flags;
686 } __packed;
687 struct mgmt_rp_set_device_flags {
688         struct mgmt_addr_info addr;
689 } __packed;
690
691 #define MGMT_ADV_MONITOR_FEATURE_MASK_OR_PATTERNS       (1 << 0)
692
693 #define MGMT_OP_READ_ADV_MONITOR_FEATURES       0x0051
694 struct mgmt_rp_read_adv_monitor_features {
695         uint32_t supported_features;
696         uint32_t enabled_features;
697         uint16_t max_num_handles;
698         uint8_t max_num_patterns;
699         uint16_t num_handles;
700         uint16_t handles[0];
701 }  __packed;
702
703 struct mgmt_adv_pattern {
704         uint8_t ad_type;
705         uint8_t offset;
706         uint8_t length;
707         uint8_t value[31];
708 } __packed;
709
710 #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR        0x0052
711 struct mgmt_cp_add_adv_monitor {
712         uint8_t pattern_count;
713         struct mgmt_adv_pattern patterns[0];
714 } __packed;
715 struct mgmt_rp_add_adv_patterns_monitor {
716         uint16_t monitor_handle;
717 } __packed;
718
719 #define MGMT_OP_REMOVE_ADV_MONITOR              0x0053
720 struct mgmt_cp_remove_adv_monitor {
721         uint16_t monitor_handle;
722 } __packed;
723 struct mgmt_rp_remove_adv_monitor {
724         uint16_t monitor_handle;
725 } __packed;
726
727 #define MGMT_OP_ADD_EXT_ADV_PARAMS              0x0054
728 struct mgmt_cp_add_ext_adv_params {
729         uint8_t         instance;
730         uint32_t        flags;
731         uint16_t        duration;
732         uint16_t        timeout;
733         uint32_t        min_interval;
734         uint32_t        max_interval;
735         int8_t          tx_power;
736 } __packed;
737 struct mgmt_rp_add_ext_adv_params {
738         uint8_t instance;
739         int8_t  tx_power;
740         uint8_t max_adv_data_len;
741         uint8_t max_scan_rsp_len;
742 } __packed;
743
744 #define MGMT_OP_ADD_EXT_ADV_DATA                0x0055
745 struct mgmt_cp_add_ext_adv_data {
746         uint8_t instance;
747         uint8_t adv_data_len;
748         uint8_t scan_rsp_len;
749         uint8_t data[0];
750 } __packed;
751 struct mgmt_rp_add_ext_adv_data {
752         uint8_t instance;
753 } __packed;
754
755 struct mgmt_adv_rssi_thresholds {
756         int8_t   high_threshold;
757         uint16_t high_threshold_timeout;
758         int8_t   low_threshold;
759         uint16_t low_threshold_timeout;
760         uint8_t  sampling_period;
761 } __packed;
762
763 #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR_RSSI   0x0056
764 struct mgmt_cp_add_adv_patterns_monitor_rssi {
765         struct mgmt_adv_rssi_thresholds rssi;
766         uint8_t pattern_count;
767         struct mgmt_adv_pattern patterns[0];
768 } __packed;
769
770 #define MGMT_EV_CMD_COMPLETE            0x0001
771 struct mgmt_ev_cmd_complete {
772         uint16_t opcode;
773         uint8_t status;
774         uint8_t data[0];
775 } __packed;
776
777 #define MGMT_EV_CMD_STATUS              0x0002
778 struct mgmt_ev_cmd_status {
779         uint16_t opcode;
780         uint8_t status;
781 } __packed;
782
783 #define MGMT_EV_CONTROLLER_ERROR        0x0003
784 struct mgmt_ev_controller_error {
785         uint8_t error_code;
786 } __packed;
787
788 #define MGMT_EV_INDEX_ADDED             0x0004
789
790 #define MGMT_EV_INDEX_REMOVED           0x0005
791
792 #define MGMT_EV_NEW_SETTINGS            0x0006
793
794 #define MGMT_EV_CLASS_OF_DEV_CHANGED    0x0007
795 struct mgmt_ev_class_of_dev_changed {
796         uint8_t dev_class[3];
797 } __packed;
798
799 #define MGMT_EV_LOCAL_NAME_CHANGED      0x0008
800 struct mgmt_ev_local_name_changed {
801         uint8_t name[MGMT_MAX_NAME_LENGTH];
802         uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
803 } __packed;
804
805 #define MGMT_EV_NEW_LINK_KEY            0x0009
806 struct mgmt_ev_new_link_key {
807         uint8_t store_hint;
808         struct mgmt_link_key_info key;
809 } __packed;
810
811 #define MGMT_EV_NEW_LONG_TERM_KEY       0x000A
812 struct mgmt_ev_new_long_term_key {
813         uint8_t store_hint;
814         struct mgmt_ltk_info key;
815 } __packed;
816
817 #define MGMT_EV_DEVICE_CONNECTED        0x000B
818 struct mgmt_ev_device_connected {
819         struct mgmt_addr_info addr;
820         uint32_t flags;
821         uint16_t eir_len;
822         uint8_t eir[0];
823 } __packed;
824
825 #define MGMT_DEV_DISCONN_UNKNOWN        0x00
826 #define MGMT_DEV_DISCONN_TIMEOUT        0x01
827 #define MGMT_DEV_DISCONN_LOCAL_HOST     0x02
828 #define MGMT_DEV_DISCONN_REMOTE         0x03
829 #define MGMT_DEV_DISCONN_LOCAL_HOST_SUSPEND     0x05
830
831 #define MGMT_EV_DEVICE_DISCONNECTED     0x000C
832 struct mgmt_ev_device_disconnected {
833         struct mgmt_addr_info addr;
834         uint8_t reason;
835 } __packed;
836
837 #define MGMT_EV_CONNECT_FAILED          0x000D
838 struct mgmt_ev_connect_failed {
839         struct mgmt_addr_info addr;
840         uint8_t status;
841 } __packed;
842
843 #define MGMT_EV_PIN_CODE_REQUEST        0x000E
844 struct mgmt_ev_pin_code_request {
845         struct mgmt_addr_info addr;
846         uint8_t secure;
847 } __packed;
848
849 #define MGMT_EV_USER_CONFIRM_REQUEST    0x000F
850 struct mgmt_ev_user_confirm_request {
851         struct mgmt_addr_info addr;
852         uint8_t confirm_hint;
853         uint32_t value;
854 } __packed;
855
856 #define MGMT_EV_USER_PASSKEY_REQUEST    0x0010
857 struct mgmt_ev_user_passkey_request {
858         struct mgmt_addr_info addr;
859 } __packed;
860
861 #define MGMT_EV_AUTH_FAILED             0x0011
862 struct mgmt_ev_auth_failed {
863         struct mgmt_addr_info addr;
864         uint8_t status;
865 } __packed;
866
867 #define MGMT_DEV_FOUND_CONFIRM_NAME             0x01
868 #define MGMT_DEV_FOUND_LEGACY_PAIRING           0x02
869 #define MGMT_DEV_FOUND_NOT_CONNECTABLE          0x04
870 #define MGMT_DEV_FOUND_NAME_REQUEST_FAILED      0x10
871
872 #define MGMT_EV_DEVICE_FOUND            0x0012
873 struct mgmt_ev_device_found {
874         struct mgmt_addr_info addr;
875         int8_t rssi;
876         uint32_t flags;
877         uint16_t eir_len;
878         uint8_t eir[0];
879 } __packed;
880
881 #define MGMT_EV_DISCOVERING             0x0013
882 struct mgmt_ev_discovering {
883         uint8_t type;
884         uint8_t discovering;
885 } __packed;
886
887 #define MGMT_EV_DEVICE_BLOCKED          0x0014
888 struct mgmt_ev_device_blocked {
889         struct mgmt_addr_info addr;
890 } __packed;
891
892 #define MGMT_EV_DEVICE_UNBLOCKED        0x0015
893 struct mgmt_ev_device_unblocked {
894         struct mgmt_addr_info addr;
895 } __packed;
896
897 #define MGMT_EV_DEVICE_UNPAIRED         0x0016
898 struct mgmt_ev_device_unpaired {
899         struct mgmt_addr_info addr;
900 } __packed;
901
902 #define MGMT_EV_PASSKEY_NOTIFY          0x0017
903 struct mgmt_ev_passkey_notify {
904         struct mgmt_addr_info addr;
905         uint32_t passkey;
906         uint8_t entered;
907 } __packed;
908
909 #define MGMT_EV_NEW_IRK                 0x0018
910 struct mgmt_ev_new_irk {
911         uint8_t  store_hint;
912         bdaddr_t rpa;
913         struct mgmt_irk_info key;
914 } __packed;
915
916 struct mgmt_csrk_info {
917         struct mgmt_addr_info addr;
918         uint8_t type;
919         uint8_t val[16];
920 } __packed;
921
922 #define MGMT_EV_NEW_CSRK                0x0019
923 struct mgmt_ev_new_csrk {
924         uint8_t store_hint;
925         struct mgmt_csrk_info key;
926 } __packed;
927
928 #define MGMT_EV_DEVICE_ADDED            0x001a
929 struct mgmt_ev_device_added {
930         struct mgmt_addr_info addr;
931         uint8_t action;
932 } __packed;
933
934 #define MGMT_EV_DEVICE_REMOVED          0x001b
935 struct mgmt_ev_device_removed {
936         struct mgmt_addr_info addr;
937 } __packed;
938
939 #define MGMT_EV_NEW_CONN_PARAM          0x001c
940 struct mgmt_ev_new_conn_param {
941         struct mgmt_addr_info addr;
942         uint8_t store_hint;
943         uint16_t min_interval;
944         uint16_t max_interval;
945         uint16_t latency;
946         uint16_t timeout;
947 } __packed;
948
949 #define MGMT_EV_UNCONF_INDEX_ADDED      0x001d
950
951 #define MGMT_EV_UNCONF_INDEX_REMOVED    0x001e
952
953 #define MGMT_EV_NEW_CONFIG_OPTIONS      0x001f
954
955 #define MGMT_EV_EXT_INDEX_ADDED         0x0020
956 struct mgmt_ev_ext_index_added {
957         uint8_t type;
958         uint8_t bus;
959 } __packed;
960
961 #define MGMT_EV_EXT_INDEX_REMOVED       0x0021
962 struct mgmt_ev_ext_index_removed {
963         uint8_t type;
964         uint8_t bus;
965 } __packed;
966
967 #define MGMT_EV_LOCAL_OOB_DATA_UPDATED  0x0022
968 struct mgmt_ev_local_oob_data_updated {
969         uint8_t  type;
970         uint16_t eir_len;
971         uint8_t  eir[0];
972 } __packed;
973
974 #define MGMT_EV_ADVERTISING_ADDED       0x0023
975 struct mgmt_ev_advertising_added {
976         uint8_t instance;
977 } __packed;
978
979 #define MGMT_EV_ADVERTISING_REMOVED     0x0024
980 struct mgmt_ev_advertising_removed {
981         uint8_t instance;
982 } __packed;
983
984 #define MGMT_EV_EXT_INFO_CHANGED        0x0025
985 struct mgmt_ev_ext_info_changed {
986         uint16_t eir_len;
987         uint8_t  eir[0];
988 } __packed;
989
990 #define MGMT_EV_PHY_CONFIGURATION_CHANGED       0x0026
991 struct mgmt_ev_phy_configuration_changed {
992         uint16_t        selected_phys;
993 } __packed;
994
995 #define MGMT_EV_EXP_FEATURE_CHANGE      0x0027
996 struct mgmt_ev_exp_feature_changed {
997         uint8_t  uuid[16];
998         uint32_t flags;
999 } __packed;
1000
1001 #define MGMT_EV_DEVICE_FLAGS_CHANGED            0x002a
1002 struct mgmt_ev_device_flags_changed {
1003         struct mgmt_addr_info addr;
1004         uint32_t supported_flags;
1005         uint32_t current_flags;
1006 } __packed;
1007
1008 #define MGMT_EV_ADV_MONITOR_ADDED       0x002b
1009 struct mgmt_ev_adv_monitor_added {
1010         uint16_t monitor_handle;
1011 }  __packed;
1012
1013 #define MGMT_EV_ADV_MONITOR_REMOVED     0x002c
1014 struct mgmt_ev_adv_monitor_removed {
1015         uint16_t monitor_handle;
1016 }  __packed;
1017
1018 #define MGMT_EV_CONTROLLER_SUSPEND              0x002d
1019 struct mgmt_ev_controller_suspend {
1020         uint8_t suspend_state;
1021 } __packed;
1022
1023 #define MGMT_EV_CONTROLLER_RESUME               0x002e
1024 struct mgmt_ev_controller_resume {
1025         struct mgmt_addr_info addr;
1026         uint8_t wake_reason;
1027 } __packed;
1028
1029 #define MGMT_EV_ADV_MONITOR_DEVICE_FOUND        0x002f
1030 struct mgmt_ev_adv_monitor_device_found {
1031         uint16_t monitor_handle;
1032         struct mgmt_addr_info addr;
1033         int8_t rssi;
1034         uint32_t flags;
1035         uint16_t ad_data_len;
1036         uint8_t ad_data[0];
1037 } __packed;
1038
1039 #define MGMT_EV_ADV_MONITOR_DEVICE_LOST         0x0030
1040 struct mgmt_ev_adv_monitor_device_lost {
1041         uint16_t monitor_handle;
1042         struct mgmt_addr_info addr;
1043 } __packed;
1044
1045 static const char *mgmt_op[] = {
1046         "<0x0000>",
1047         "Read Version",
1048         "Read Commands",
1049         "Read Index List",
1050         "Read Controller Info",
1051         "Set Powered",
1052         "Set Discoverable",
1053         "Set Connectable",
1054         "Set Fast Connectable",                 /* 0x0008 */
1055         "Set Bondable",
1056         "Set Link Security",
1057         "Set Secure Simple Pairing",
1058         "Set High Speed",
1059         "Set Low Energy",
1060         "Set Dev Class",
1061         "Set Local Name",
1062         "Add UUID",                                     /* 0x0010 */
1063         "Remove UUID",
1064         "Load Link Keys",
1065         "Load Long Term Keys",
1066         "Disconnect",
1067         "Get Connections",
1068         "PIN Code Reply",
1069         "PIN Code Neg Reply",
1070         "Set IO Capability",                            /* 0x0018 */
1071         "Pair Device",
1072         "Cancel Pair Device",
1073         "Unpair Device",
1074         "User Confirm Reply",
1075         "User Confirm Neg Reply",
1076         "User Passkey Reply",
1077         "User Passkey Neg Reply",
1078         "Read Local OOB Data",                          /* 0x0020 */
1079         "Add Remote OOB Data",
1080         "Remove Remove OOB Data",
1081         "Start Discovery",
1082         "Stop Discovery",
1083         "Confirm Name",
1084         "Block Device",
1085         "Unblock Device",
1086         "Set Device ID",                                /* 0x0028 */
1087         "Set Advertising",
1088         "Set BR/EDR",
1089         "Set Static Address",
1090         "Set Scan Parameters",
1091         "Set Secure Connections",
1092         "Set Debug Keys",
1093         "Set Privacy",
1094         "Load Identity Resolving Keys",                 /* 0x0030 */
1095         "Get Connection Information",
1096         "Get Clock Information",
1097         "Add Device",
1098         "Remove Device",
1099         "Load Connection Parameters",
1100         "Read Unconfigured Index List",
1101         "Read Controller Configuration Information",
1102         "Set External Configuration",                   /* 0x0038 */
1103         "Set Public Address",
1104         "Start Service Discovery",
1105         "Read Local Out Of Band Extended Data",
1106         "Read Extended Controller Index List",
1107         "Read Advertising Features",
1108         "Add Advertising",
1109         "Remove Advertising",
1110         "Get Advertising Size Information",             /* 0x0040 */
1111         "Start Limited Discovery",
1112         "Read Extended Controller Information",
1113         "Set Appearance",
1114         "Get PHY Configuration",
1115         "Set PHY Configuration",
1116         "Set Blocked Keys",
1117         "Set Wideband Speech",
1118         "Read Controller Capabilities Information",     /* 0x0048 */
1119         "Read Experimental Features Information",
1120         "Set Experimental Feature",
1121         "Read Default System Configuration",
1122         "Set Default System Configuration",
1123         "Read Default Runtime Configuration",
1124         "Set Default Runtime Configuration",
1125         "Get Device Flags",
1126         "Set Device Flags",                             /* 0x0050 */
1127         "Read Advertisement Monitor Features",
1128         "Add Advertisement Patterns Monitor",
1129         "Remove Advertisement Monitor",
1130         "Add Extended Advertisement Parameters",        /* 0x0054 */
1131         "Add Extended Advertisement Data",
1132         "Add Advertisement Patterns Monitor RSSI",
1133 };
1134
1135 static const char *mgmt_ev[] = {
1136         "<0x0000>",
1137         "Command Complete",
1138         "Command Status",
1139         "Controller Error",
1140         "Index Added",
1141         "Index Removed",
1142         "New Settings",
1143         "Class of Device Changed",
1144         "Local Name Changed",                           /* 0x0008 */
1145         "New Link Key",
1146         "New Long Term Key",
1147         "Device Connected",
1148         "Device Disconnected",
1149         "Connect Failed",
1150         "PIN Code Request",
1151         "User Confirm Request",
1152         "User Passkey Request",                         /* 0x0010 */
1153         "Authentication Failed",
1154         "Device Found",
1155         "Discovering",
1156         "Device Blocked",
1157         "Device Unblocked",
1158         "Device Unpaired",
1159         "Passkey Notify",
1160         "New Identity Resolving Key",                   /* 0x0018 */
1161         "New Signature Resolving Key",
1162         "Device Added",
1163         "Device Removed",
1164         "New Connection Parameter",
1165         "Unconfigured Index Added",
1166         "Unconfigured Index Removed",
1167         "New Configuration Options",
1168         "Extended Index Added",                         /* 0x0020 */
1169         "Extended Index Removed",
1170         "Local Out Of Band Extended Data Updated",
1171         "Advertising Added",
1172         "Advertising Removed",
1173         "Extended Controller Information Changed",
1174         "PHY Configuration Changed",
1175         "Experimental Feature Changed",
1176         "Default System Configuration Changed",         /* 0x0028 */
1177         "Default Runtime Configuration Changed",
1178         "Device Flags Changed",
1179         "Advertisement Monitor Added",                  /* 0x002b */
1180         "Advertisement Monitor Removed",
1181         "Controller Suspend",
1182         "Controller Resume",
1183         "Advertisement Monitor Device Found",           /* 0x002f */
1184         "Advertisement Monitor Device Lost",
1185 };
1186
1187 static const char *mgmt_status[] = {
1188         "Success",
1189         "Unknown Command",
1190         "Not Connected",
1191         "Failed",
1192         "Connect Failed",
1193         "Authentication Failed",
1194         "Not Paired",
1195         "No Resources",
1196         "Timeout",
1197         "Already Connected",
1198         "Busy",
1199         "Rejected",
1200         "Not Supported",
1201         "Invalid Parameters",
1202         "Disconnected",
1203         "Not Powered",
1204         "Cancelled",
1205         "Invalid Index",
1206         "Blocked through rfkill",
1207         "Already Paired",
1208         "Permission Denied",
1209         "Connection Not Established",
1210 };
1211
1212 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1213
1214 #define TIZEN_OP_CODE_BASE      0xff00
1215 #define TIZEN_EV_BASE           0xff00
1216
1217 #define MGMT_MAX_ADVERTISING_LENGTH             31
1218
1219 #define MGMT_MAX_EIR_MANUFACTURER_DATA_LENGTH   100
1220
1221 #define MGMT_IRK_SIZE                           16
1222
1223 #define MGMT_OP_SET_ADVERTISING_PARAMS          (TIZEN_OP_CODE_BASE + 0x01)
1224 struct mgmt_cp_set_advertising_params {
1225         uint16_t interval_min;
1226         uint16_t interval_max;
1227         uint8_t filter_policy;
1228         uint8_t type;
1229 } __packed;
1230
1231 #define MGMT_OP_SET_ADVERTISING_DATA            (TIZEN_OP_CODE_BASE + 0x02)
1232 struct mgmt_cp_set_advertising_data {
1233         uint8_t data[MGMT_MAX_ADVERTISING_LENGTH];
1234 } __packed;
1235
1236 #define MGMT_OP_SET_SCAN_RSP_DATA               (TIZEN_OP_CODE_BASE + 0x03)
1237 struct mgmt_cp_set_scan_rsp_data {
1238         uint8_t data[MGMT_MAX_ADVERTISING_LENGTH];
1239 } __packed;
1240
1241 #define MGMT_OP_ADD_DEV_WHITE_LIST              (TIZEN_OP_CODE_BASE + 0x04)
1242 struct mgmt_cp_add_dev_white_list {
1243         uint8_t bdaddr_type;
1244         bdaddr_t bdaddr;
1245 } __packed;
1246
1247 #define MGMT_OP_REMOVE_DEV_FROM_WHITE_LIST      (TIZEN_OP_CODE_BASE + 0x05)
1248 struct mgmt_cp_remove_dev_white_list {
1249         uint8_t bdaddr_type;
1250         bdaddr_t bdaddr;
1251 } __packed;
1252
1253 #define MGMT_OP_CLEAR_DEV_WHITE_LIST            (TIZEN_OP_CODE_BASE + 0x06)
1254
1255 /* BEGIN TIZEN_Bluetooth :: RSSI monitoring   */
1256 #define MGMT_OP_SET_RSSI_ENABLE                 (TIZEN_OP_CODE_BASE + 0x07)
1257 struct mgmt_cp_set_enable_rssi {
1258         int8_t     low_th;
1259         int8_t     in_range_th;
1260         int8_t     high_th;
1261         bdaddr_t   bdaddr;
1262         int8_t link_type;
1263 } __packed;
1264
1265 struct mgmt_cc_rsp_enable_rssi {
1266         uint8_t status;
1267         uint8_t le_ext_opcode;
1268         bdaddr_t bt_address;
1269         int8_t link_type;
1270 } __packed;
1271
1272 #define MGMT_OP_GET_RAW_RSSI                    (TIZEN_OP_CODE_BASE + 0x08)
1273 struct mgmt_cp_get_raw_rssi {
1274         bdaddr_t bt_address;
1275         uint8_t  link_type;
1276 } __packed;
1277 struct mgmt_cc_rp_get_raw_rssi {
1278         uint8_t    status;
1279         int8_t     rssi_dbm;
1280         uint8_t    link_type;
1281         bdaddr_t   bt_address;
1282 } __packed;
1283
1284 #define MGMT_OP_SET_RSSI_DISABLE                (TIZEN_OP_CODE_BASE + 0x09)
1285 struct mgmt_cp_disable_rssi {
1286         bdaddr_t   bdaddr;
1287         int8_t link_type;
1288 } __packed;
1289 struct mgmt_cc_rp_disable_rssi {
1290         uint8_t status;
1291         uint8_t le_ext_opcode;
1292         bdaddr_t bt_address;
1293         int8_t link_type;
1294 } __packed;
1295 /* END TIZEN_Bluetooth :: RSSI monitoring */
1296
1297 #define MGMT_OP_START_LE_DISCOVERY              (TIZEN_OP_CODE_BASE + 0x0a)
1298 struct mgmt_cp_start_le_discovery {
1299         uint8_t type;
1300 } __packed;
1301
1302 #define MGMT_OP_STOP_LE_DISCOVERY               (TIZEN_OP_CODE_BASE + 0x0b)
1303 struct mgmt_cp_stop_le_discovery {
1304         uint8_t type;
1305 } __packed;
1306
1307 #define MGMT_OP_LE_CONN_UPDATE                  (TIZEN_OP_CODE_BASE + 0x0d)
1308 struct mgmt_cp_le_conn_update {
1309         uint16_t interval_min;
1310         uint16_t interval_max;
1311         uint16_t latency;
1312         uint16_t supervision_time_out;
1313         bdaddr_t bdaddr;
1314 } __packed;
1315
1316 #define MGMT_OP_SET_MANUFACTURER_DATA           (TIZEN_OP_CODE_BASE + 0x0e)
1317 struct mgmt_cp_set_manufacturer_data {
1318         uint8_t data[MGMT_MAX_EIR_MANUFACTURER_DATA_LENGTH];
1319 } __packed;
1320
1321 #define MGMT_OP_LE_SET_SCAN_PARAMS              (TIZEN_OP_CODE_BASE + 0x0f)
1322 struct mgmt_cp_le_set_scan_params {
1323         uint8_t type;   /* le scan type */
1324         uint16_t interval;
1325         uint16_t window;
1326 } __packed;
1327
1328 #define MGMT_SCO_ROLE_HANDSFREE                 0x00
1329 #define MGMT_SCO_ROLE_AUDIO_GATEWAY             0x01
1330 #define MGMT_OP_SET_VOICE_SETTING               (TIZEN_OP_CODE_BASE + 0x10)
1331 struct mgmt_cp_set_voice_setting {
1332         bdaddr_t bdaddr;
1333         uint8_t  sco_role;
1334         uint16_t voice_setting;
1335 } __packed;
1336
1337 #define MGMT_OP_GET_ADV_TX_POWER                (TIZEN_OP_CODE_BASE + 0x11)
1338 struct mgmt_rp_get_adv_tx_power {
1339         int8_t adv_tx_power;
1340 } __packed;
1341
1342 #define MGMT_OP_ENABLE_6LOWPAN          (TIZEN_OP_CODE_BASE + 0x12)
1343 struct mgmt_cp_enable_6lowpan {
1344         uint8_t enable_6lowpan;
1345 } __packed;
1346
1347 #define MGMT_OP_CONNECT_6LOWPAN (TIZEN_OP_CODE_BASE + 0x13)
1348 struct mgmt_cp_connect_6lowpan {
1349         struct mgmt_addr_info addr;
1350 } __packed;
1351
1352 #define MGMT_OP_DISCONNECT_6LOWPAN      (TIZEN_OP_CODE_BASE + 0x14)
1353 struct mgmt_cp_disconnect_6lowpan {
1354         struct mgmt_addr_info addr;
1355 } __packed;
1356
1357 #define MGMT_OP_LE_READ_MAXIMUM_DATA_LENGTH     (TIZEN_OP_CODE_BASE + 0x15)
1358 struct mgmt_rp_le_read_maximum_data_length {
1359         uint8_t status;
1360         uint16_t max_tx_octets;
1361         uint16_t max_tx_time;
1362         uint16_t max_rx_octets;
1363         uint16_t max_rx_time;
1364 } __packed;
1365
1366 #define MGMT_OP_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH     (TIZEN_OP_CODE_BASE + 0x16)
1367 struct mgmt_cp_le_write_host_suggested_data_length {
1368         uint16_t def_tx_octets;
1369         uint16_t def_tx_time;
1370 } __packed;
1371
1372 #define MGMT_OP_LE_READ_HOST_SUGGESTED_DATA_LENGTH      (TIZEN_OP_CODE_BASE + 0x17)
1373 struct mgmt_rp_le_read_host_suggested_data_length {
1374         uint8_t status;
1375         uint16_t def_tx_octets;
1376         uint16_t def_tx_time;
1377 } __packed;
1378
1379 #define MGMT_OP_LE_SET_DATA_LENGTH      (TIZEN_OP_CODE_BASE + 0x18)
1380 struct mgmt_cp_le_set_data_length {
1381         bdaddr_t bdaddr;
1382         uint16_t max_tx_octets;
1383         uint16_t max_tx_time;
1384 } __packed;
1385 #define MGMT_LE_SET_DATA_LENGTH_SIZE     10
1386
1387 #define MGMT_OP_SET_IRK                 (TIZEN_OP_CODE_BASE + 0x19)
1388 struct mgmt_cp_set_irk {
1389         uint8_t irk[16];
1390 } __packed;
1391
1392 #define MGMT_OP_SET_DEV_RPA_RES_SUPPORT (TIZEN_OP_CODE_BASE + 0x1a)
1393 struct mgmt_cp_set_dev_rpa_res_support {
1394         struct mgmt_addr_info addr;
1395         uint8_t res_support;
1396 } __packed;
1397
1398 #define MGMT_OP_SET_STREAMING_MODE      (TIZEN_OP_CODE_BASE + 0x1b)
1399 struct mgmt_cp_set_streaming_mode {
1400         uint8_t streaming_mode;
1401         bdaddr_t bdaddr;
1402 } __packed;
1403
1404 #define MGMT_OP_GET_LE_BATCHING_BUFFER  (TIZEN_OP_CODE_BASE + 0x1f)
1405
1406 struct mgmt_rp_get_le_batching_buffer {
1407         uint8_t status;
1408         uint32_t buffer;
1409 } __packed;
1410
1411 #define MGMT_OP_SET_LE_BATCHING_PARAM   (TIZEN_OP_CODE_BASE + 0x20)
1412 struct mgmt_cp_set_le_batching_param {
1413         bdaddr_t        bdaddr;
1414         uint16_t        pkt_th;
1415         uint16_t        timeout;
1416 } __packed;
1417
1418 struct mgmt_rp_set_le_batching_param {
1419         uint8_t status;
1420 } __packed;
1421
1422 #define MGMT_OP_SET_LE_BATCHING_ENABLE  (TIZEN_OP_CODE_BASE + 0x21)
1423 struct mgmt_cp_set_le_batching_enable {
1424         bdaddr_t        bdaddr;
1425         uint8_t enable;
1426 } __packed;
1427
1428 struct mgmt_rp_set_le_batching_enable {
1429         uint8_t status;
1430 } __packed;
1431
1432 /* BEGIN TIZEN_Bluetooth :: name update changes */
1433 #define MGMT_EV_DEVICE_NAME_UPDATE              (TIZEN_EV_BASE + 0x01)
1434 struct mgmt_ev_device_name_update {
1435         struct mgmt_addr_info addr;
1436         uint16_t eir_len;
1437         uint8_t eir[0];
1438 } __packed;
1439 /* END TIZEN_Bluetooth :: name update changes */
1440
1441 /* BEGIN TIZEN_Bluetooth :: Add handling of hardware error event   */
1442 #define MGMT_EV_HARDWARE_ERROR                  (TIZEN_EV_BASE + 0x02)
1443 struct mgmt_ev_hardware_error{
1444         uint8_t error_code;
1445 } __packed;
1446 /* END TIZEN_Bluetooth */
1447
1448 /* BEGIN TIZEN_Bluetooth :: HCI TX Timeout Error   */
1449 #define MGMT_EV_TX_TIMEOUT_ERROR                (TIZEN_EV_BASE + 0x03)
1450 /* END TIZEN_Bluetooth */
1451
1452 /* BEGIN TIZEN_Bluetooth :: Add handling of RSSI Events   */
1453 #define MGMT_EV_RSSI_ALERT                      (TIZEN_EV_BASE + 0x04)
1454 struct mgmt_ev_vendor_specific_rssi_alert {
1455         bdaddr_t bdaddr;
1456         int8_t     link_type;
1457         int8_t     alert_type;
1458         int8_t     rssi_dbm;
1459 } __packed;
1460
1461 #define MGMT_EV_RAW_RSSI                        (TIZEN_EV_BASE + 0x05)
1462
1463 #define MGMT_EV_RSSI_ENABLED                    (TIZEN_EV_BASE + 0x06)
1464
1465 #define MGMT_EV_RSSI_DISABLED                   (TIZEN_EV_BASE + 0x07)
1466 /* END TIZEN_Bluetooth :: Handling of RSSI Events */
1467
1468 /* BEGIN TIZEN_Bluetooth :: Add LE connection update Events   */
1469 #define MGMT_EV_CONN_UPDATED                    (TIZEN_EV_BASE + 0x08)
1470 struct mgmt_ev_conn_updated {
1471         struct  mgmt_addr_info addr;
1472         uint16_t        conn_interval;
1473         uint16_t        conn_latency;
1474         uint16_t        supervision_timeout;
1475 } __packed;
1476
1477 #define MGMT_EV_CONN_UPDATE_FAILED              (TIZEN_EV_BASE + 0x09)
1478 struct mgmt_ev_conn_update_failed {
1479         struct  mgmt_addr_info addr;
1480         uint8_t status;
1481 } __packed;
1482 /* END TIZEN_Bluetooth :: Add LE connection update Events */
1483
1484 #define MGMT_EV_LE_DEVICE_FOUND                 (TIZEN_EV_BASE + 0x0a)
1485 struct mgmt_ev_le_device_found {
1486         struct mgmt_addr_info addr;
1487         int8_t rssi;
1488         uint32_t flags;
1489         int8_t adv_type;
1490         uint16_t eir_len;
1491         uint8_t eir[0];
1492 } __packed;
1493
1494 #define MGMT_EV_MULTI_ADV_STATE_CHANGED                 (TIZEN_EV_BASE + 0x0b)
1495 struct mgmt_ev_vendor_specific_multi_adv_state_changed {
1496         uint8_t adv_instance;
1497         uint8_t state_change_reason;
1498         int16_t connection_handle;
1499 } __packed;
1500
1501 #define MGMT_EV_6LOWPAN_CONN_STATE_CHANGED              (TIZEN_EV_BASE + 0x0c)
1502 struct mgmt_ev_6lowpan_conn_state_changed {
1503         struct  mgmt_addr_info addr;
1504         uint8_t connected;
1505         uint8_t ifname[16];
1506 } __packed;
1507
1508
1509 #define MGMT_EV_LE_DATA_LENGTH_CHANGED          (TIZEN_EV_BASE + 0x0d)
1510 struct mgmt_ev_le_data_length_changed {
1511         struct  mgmt_addr_info addr;
1512         int16_t max_tx_octets;
1513         int16_t max_tx_time;
1514         int16_t max_rx_octets;
1515         int16_t max_rx_time;
1516 } __packed;
1517
1518 #define MGMT_EV_RPA_CHANGED                     (TIZEN_EV_BASE + 0x0f)
1519 struct mgmt_ev_rpa_changed {
1520         bdaddr_t bdaddr;
1521 } __packed;
1522
1523 static const char *mgmt_tizen_op[] = {
1524         "<0x0000>",
1525         "Set Advertising Parameters",
1526         "Set Advertising Data",
1527         "Set Scan Response Data",
1528         "Add Device White List",
1529         "Remove Device White List",
1530         "Clear Device White List",
1531         "Set RSSI Enable",
1532         "Get Raw RSSI",
1533         "Set RSSI Disable",
1534         "Start LE Discovery",
1535         "Stop LE Discovery",
1536         "Disable LE Auto Connect",
1537         "LE Connection Update",
1538         "Set Manufacturer Data",
1539         "LE Set Scan Parameters",
1540         "Set Voice Setting",
1541         "Get Adv Tx Power",
1542 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1543         "Enable BT 6LOWPAN",
1544         "Connect BT 6LOWPAN",
1545         "Disconnect BT 6LOWPAN"
1546 #endif
1547 };
1548
1549 static const char *mgmt_tizen_ev[] = {
1550         "<0x0000>",
1551         "Device Name Update",
1552         "Hardware Error",
1553         "Tx TimeOut Error",
1554         "RSSI Alert",
1555         "Raw RSSI",
1556         "RSSI Enabled",
1557         "RSSI Disabled",
1558         "LE Connection Updated",
1559         "LE Connection Update Failed",
1560         "LE Device Found",
1561         "Multi Adv State Change",
1562 };
1563 #endif /* End of TIZEN_FEATURE_BLUEZ_MODIFY */
1564
1565 #ifndef NELEM
1566 #define NELEM(x) (sizeof(x) / sizeof((x)[0]))
1567 #endif
1568
1569 static inline const char *mgmt_opstr(uint16_t op)
1570 {
1571 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1572         if (op >= NELEM(mgmt_op)) {
1573                 uint16_t tizen_op = op - TIZEN_OP_CODE_BASE;
1574
1575                 if (tizen_op > 0 &&
1576                     tizen_op < NELEM(mgmt_tizen_op))
1577                         return mgmt_tizen_op[tizen_op];
1578
1579                 return "<unknown opcode>";
1580         }
1581 #else
1582         if (op >= NELEM(mgmt_op))
1583                 return "<unknown opcode>";
1584 #endif
1585
1586         return mgmt_op[op];
1587 }
1588
1589 static inline const char *mgmt_evstr(uint16_t ev)
1590 {
1591 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1592         if (ev >= NELEM(mgmt_ev)) {
1593                 uint16_t tizen_ev = ev - TIZEN_EV_BASE;
1594
1595                 if (tizen_ev > 0 &&
1596                     tizen_ev < NELEM(mgmt_tizen_ev))
1597                         return mgmt_tizen_ev[tizen_ev];
1598
1599                 return "<unknown event>";
1600         }
1601 #else
1602         if (ev >= NELEM(mgmt_ev))
1603                 return "<unknown event>";
1604 #endif
1605
1606         return mgmt_ev[ev];
1607 }
1608
1609 static inline const char *mgmt_errstr(uint8_t status)
1610 {
1611         if (status >= NELEM(mgmt_status))
1612                 return "<unknown status>";
1613         return mgmt_status[status];
1614 }