Upgrade bluez5_37 :Merge the code from private
[platform/upstream/bluez.git] / lib / mgmt.h
1 /*
2  *  BlueZ - Bluetooth protocol stack for Linux
3  *
4  *  Copyright (C) 2010  Nokia Corporation
5  *  Copyright (C) 2010  Marcel Holtmann <marcel@holtmann.org>
6  *
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21  *
22  */
23
24 #ifndef __packed
25 #define __packed __attribute__((packed))
26 #endif
27
28 #define MGMT_INDEX_NONE                 0xFFFF
29
30 #define MGMT_STATUS_SUCCESS             0x00
31 #define MGMT_STATUS_UNKNOWN_COMMAND     0x01
32 #define MGMT_STATUS_NOT_CONNECTED       0x02
33 #define MGMT_STATUS_FAILED              0x03
34 #define MGMT_STATUS_CONNECT_FAILED      0x04
35 #define MGMT_STATUS_AUTH_FAILED         0x05
36 #define MGMT_STATUS_NOT_PAIRED          0x06
37 #define MGMT_STATUS_NO_RESOURCES        0x07
38 #define MGMT_STATUS_TIMEOUT             0x08
39 #define MGMT_STATUS_ALREADY_CONNECTED   0x09
40 #define MGMT_STATUS_BUSY                0x0a
41 #define MGMT_STATUS_REJECTED            0x0b
42 #define MGMT_STATUS_NOT_SUPPORTED       0x0c
43 #define MGMT_STATUS_INVALID_PARAMS      0x0d
44 #define MGMT_STATUS_DISCONNECTED        0x0e
45 #define MGMT_STATUS_NOT_POWERED         0x0f
46 #define MGMT_STATUS_CANCELLED           0x10
47 #define MGMT_STATUS_INVALID_INDEX       0x11
48 #define MGMT_STATUS_RFKILLED            0x12
49 #define MGMT_STATUS_ALREADY_PAIRED      0x13
50 #define MGMT_STATUS_PERMISSION_DENIED   0x14
51
52 struct mgmt_hdr {
53         uint16_t opcode;
54         uint16_t index;
55         uint16_t len;
56 } __packed;
57 #define MGMT_HDR_SIZE   6
58
59 struct mgmt_addr_info {
60         bdaddr_t bdaddr;
61         uint8_t type;
62 } __packed;
63
64 #define MGMT_OP_READ_VERSION            0x0001
65 struct mgmt_rp_read_version {
66         uint8_t version;
67         uint16_t revision;
68 } __packed;
69
70 #define MGMT_OP_READ_COMMANDS           0x0002
71 struct mgmt_rp_read_commands {
72         uint16_t num_commands;
73         uint16_t num_events;
74         uint16_t opcodes[0];
75 } __packed;
76
77 #define MGMT_OP_READ_INDEX_LIST         0x0003
78 struct mgmt_rp_read_index_list {
79         uint16_t num_controllers;
80         uint16_t index[0];
81 } __packed;
82
83 /* Reserve one extra byte for names in management messages so that they
84  * are always guaranteed to be nul-terminated */
85 #define MGMT_MAX_NAME_LENGTH            (248 + 1)
86 #define MGMT_MAX_SHORT_NAME_LENGTH      (10 + 1)
87
88 #define MGMT_SETTING_POWERED            0x00000001
89 #define MGMT_SETTING_CONNECTABLE        0x00000002
90 #define MGMT_SETTING_FAST_CONNECTABLE   0x00000004
91 #define MGMT_SETTING_DISCOVERABLE       0x00000008
92 #define MGMT_SETTING_BONDABLE           0x00000010
93 #define MGMT_SETTING_LINK_SECURITY      0x00000020
94 #define MGMT_SETTING_SSP                0x00000040
95 #define MGMT_SETTING_BREDR              0x00000080
96 #define MGMT_SETTING_HS                 0x00000100
97 #define MGMT_SETTING_LE                 0x00000200
98 #define MGMT_SETTING_ADVERTISING        0x00000400
99 #define MGMT_SETTING_SECURE_CONN        0x00000800
100 #define MGMT_SETTING_DEBUG_KEYS         0x00001000
101 #define MGMT_SETTING_PRIVACY            0x00002000
102 #define MGMT_SETTING_CONFIGURATION      0x00004000
103 #define MGMT_SETTING_STATIC_ADDRESS     0x00008000
104
105 #define MGMT_OP_READ_INFO               0x0004
106 struct mgmt_rp_read_info {
107         bdaddr_t bdaddr;
108         uint8_t version;
109         uint16_t manufacturer;
110         uint32_t supported_settings;
111         uint32_t current_settings;
112         uint8_t dev_class[3];
113         uint8_t name[MGMT_MAX_NAME_LENGTH];
114         uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
115 } __packed;
116
117 struct mgmt_mode {
118         uint8_t val;
119 } __packed;
120
121 struct mgmt_cod {
122         uint8_t val[3];
123 } __packed;
124
125 #define MGMT_OP_SET_POWERED             0x0005
126
127 #define MGMT_OP_SET_DISCOVERABLE        0x0006
128 struct mgmt_cp_set_discoverable {
129         uint8_t val;
130         uint16_t timeout;
131 } __packed;
132
133 #define MGMT_OP_SET_CONNECTABLE         0x0007
134
135 #define MGMT_OP_SET_FAST_CONNECTABLE    0x0008
136
137 #define MGMT_OP_SET_BONDABLE            0x0009
138
139 #define MGMT_OP_SET_LINK_SECURITY       0x000A
140
141 #define MGMT_OP_SET_SSP                 0x000B
142
143 #define MGMT_OP_SET_HS                  0x000C
144
145 #define MGMT_OP_SET_LE                  0x000D
146
147 #define MGMT_OP_SET_DEV_CLASS           0x000E
148 struct mgmt_cp_set_dev_class {
149         uint8_t major;
150         uint8_t minor;
151 } __packed;
152
153 #define MGMT_OP_SET_LOCAL_NAME          0x000F
154 struct mgmt_cp_set_local_name {
155         uint8_t name[MGMT_MAX_NAME_LENGTH];
156         uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
157 } __packed;
158
159 #define MGMT_OP_ADD_UUID                0x0010
160 struct mgmt_cp_add_uuid {
161         uint8_t uuid[16];
162         uint8_t svc_hint;
163 } __packed;
164
165 #define MGMT_OP_REMOVE_UUID             0x0011
166 struct mgmt_cp_remove_uuid {
167         uint8_t uuid[16];
168 } __packed;
169
170 struct mgmt_link_key_info {
171         struct mgmt_addr_info addr;
172         uint8_t type;
173         uint8_t val[16];
174         uint8_t pin_len;
175 } __packed;
176
177 #define MGMT_OP_LOAD_LINK_KEYS          0x0012
178 struct mgmt_cp_load_link_keys {
179         uint8_t debug_keys;
180         uint16_t key_count;
181         struct mgmt_link_key_info keys[0];
182 } __packed;
183
184 struct mgmt_ltk_info {
185         struct mgmt_addr_info addr;
186         uint8_t type;
187         uint8_t master;
188         uint8_t enc_size;
189         uint16_t ediv;
190         uint64_t rand;
191         uint8_t val[16];
192 } __packed;
193
194 #define MGMT_OP_LOAD_LONG_TERM_KEYS     0x0013
195 struct mgmt_cp_load_long_term_keys {
196         uint16_t key_count;
197         struct mgmt_ltk_info keys[0];
198 } __packed;
199
200 #define MGMT_OP_DISCONNECT              0x0014
201 struct mgmt_cp_disconnect {
202         struct mgmt_addr_info addr;
203 } __packed;
204 struct mgmt_rp_disconnect {
205         struct mgmt_addr_info addr;
206 } __packed;
207
208 #define MGMT_OP_GET_CONNECTIONS         0x0015
209 struct mgmt_rp_get_connections {
210         uint16_t conn_count;
211         struct mgmt_addr_info addr[0];
212 } __packed;
213
214 #define MGMT_OP_PIN_CODE_REPLY          0x0016
215 struct mgmt_cp_pin_code_reply {
216         struct mgmt_addr_info addr;
217         uint8_t pin_len;
218         uint8_t pin_code[16];
219 } __packed;
220
221 #define MGMT_OP_PIN_CODE_NEG_REPLY      0x0017
222 struct mgmt_cp_pin_code_neg_reply {
223         struct mgmt_addr_info addr;
224 } __packed;
225
226 #define MGMT_OP_SET_IO_CAPABILITY       0x0018
227 struct mgmt_cp_set_io_capability {
228         uint8_t io_capability;
229 } __packed;
230
231 #define MGMT_OP_PAIR_DEVICE             0x0019
232 struct mgmt_cp_pair_device {
233         struct mgmt_addr_info addr;
234         uint8_t io_cap;
235 } __packed;
236 struct mgmt_rp_pair_device {
237         struct mgmt_addr_info addr;
238 } __packed;
239
240 #define MGMT_OP_CANCEL_PAIR_DEVICE      0x001A
241
242 #define MGMT_OP_UNPAIR_DEVICE           0x001B
243 struct mgmt_cp_unpair_device {
244         struct mgmt_addr_info addr;
245         uint8_t disconnect;
246 } __packed;
247 struct mgmt_rp_unpair_device {
248         struct mgmt_addr_info addr;
249 } __packed;
250
251 #define MGMT_OP_USER_CONFIRM_REPLY      0x001C
252 struct mgmt_cp_user_confirm_reply {
253         struct mgmt_addr_info addr;
254 } __packed;
255 struct mgmt_rp_user_confirm_reply {
256         struct mgmt_addr_info addr;
257 } __packed;
258
259 #define MGMT_OP_USER_CONFIRM_NEG_REPLY  0x001D
260
261 #define MGMT_OP_USER_PASSKEY_REPLY      0x001E
262 struct mgmt_cp_user_passkey_reply {
263         struct mgmt_addr_info addr;
264         uint32_t passkey;
265 } __packed;
266 struct mgmt_rp_user_passkey_reply {
267         struct mgmt_addr_info addr;
268 } __packed;
269
270 #define MGMT_OP_USER_PASSKEY_NEG_REPLY  0x001F
271 struct mgmt_cp_user_passkey_neg_reply {
272         struct mgmt_addr_info addr;
273 } __packed;
274
275 #define MGMT_OP_READ_LOCAL_OOB_DATA     0x0020
276 struct mgmt_rp_read_local_oob_data {
277         uint8_t hash192[16];
278         uint8_t rand192[16];
279         uint8_t hash256[16];
280         uint8_t rand256[16];
281 } __packed;
282
283 #define MGMT_OP_ADD_REMOTE_OOB_DATA     0x0021
284 struct mgmt_cp_add_remote_oob_data {
285         struct mgmt_addr_info addr;
286         uint8_t hash192[16];
287         uint8_t rand192[16];
288         uint8_t hash256[16];
289         uint8_t rand256[16];
290 } __packed;
291
292 #define MGMT_OP_REMOVE_REMOTE_OOB_DATA  0x0022
293 struct mgmt_cp_remove_remote_oob_data {
294         struct mgmt_addr_info addr;
295 } __packed;
296
297 #define MGMT_OP_START_DISCOVERY         0x0023
298 struct mgmt_cp_start_discovery {
299         uint8_t type;
300 } __packed;
301
302 #define MGMT_OP_STOP_DISCOVERY          0x0024
303 struct mgmt_cp_stop_discovery {
304         uint8_t type;
305 } __packed;
306
307 #define MGMT_OP_CONFIRM_NAME            0x0025
308 struct mgmt_cp_confirm_name {
309         struct mgmt_addr_info addr;
310         uint8_t name_known;
311 } __packed;
312 struct mgmt_rp_confirm_name {
313         struct mgmt_addr_info addr;
314 } __packed;
315
316 #define MGMT_OP_BLOCK_DEVICE            0x0026
317 struct mgmt_cp_block_device {
318         struct mgmt_addr_info addr;
319 } __packed;
320
321 #define MGMT_OP_UNBLOCK_DEVICE          0x0027
322 struct mgmt_cp_unblock_device {
323         struct mgmt_addr_info addr;
324 } __packed;
325
326 #define MGMT_OP_SET_DEVICE_ID           0x0028
327 struct mgmt_cp_set_device_id {
328         uint16_t source;
329         uint16_t vendor;
330         uint16_t product;
331         uint16_t version;
332 } __packed;
333
334 #define MGMT_OP_SET_ADVERTISING         0x0029
335
336 #define MGMT_OP_SET_BREDR               0x002A
337
338 #define MGMT_OP_SET_STATIC_ADDRESS      0x002B
339 struct mgmt_cp_set_static_address {
340         bdaddr_t bdaddr;
341 } __packed;
342
343 #define MGMT_OP_SET_SCAN_PARAMS         0x002C
344 struct mgmt_cp_set_scan_params {
345         uint16_t interval;
346         uint16_t window;
347 } __packed;
348
349 #define MGMT_OP_SET_SECURE_CONN         0x002D
350
351 #define MGMT_OP_SET_DEBUG_KEYS          0x002E
352
353 struct mgmt_irk_info {
354         struct mgmt_addr_info addr;
355         uint8_t val[16];
356 } __packed;
357
358 #define MGMT_OP_SET_PRIVACY             0x002F
359 struct mgmt_cp_set_privacy {
360         uint8_t privacy;
361         uint8_t irk[16];
362 } __packed;
363
364 #define MGMT_OP_LOAD_IRKS               0x0030
365 struct mgmt_cp_load_irks {
366         uint16_t irk_count;
367         struct mgmt_irk_info irks[0];
368 } __packed;
369
370 #define MGMT_OP_GET_CONN_INFO           0x0031
371 struct mgmt_cp_get_conn_info {
372         struct mgmt_addr_info addr;
373 } __packed;
374 struct mgmt_rp_get_conn_info {
375         struct mgmt_addr_info addr;
376         int8_t rssi;
377         int8_t tx_power;
378         int8_t max_tx_power;
379 } __packed;
380
381 #define MGMT_OP_GET_CLOCK_INFO          0x0032
382 struct mgmt_cp_get_clock_info {
383         struct mgmt_addr_info addr;
384 } __packed;
385 struct mgmt_rp_get_clock_info {
386         struct mgmt_addr_info addr;
387         uint32_t  local_clock;
388         uint32_t  piconet_clock;
389         uint16_t  accuracy;
390 } __packed;
391
392 #define MGMT_OP_ADD_DEVICE              0x0033
393 struct mgmt_cp_add_device {
394         struct mgmt_addr_info addr;
395         uint8_t action;
396 } __packed;
397 struct mgmt_rp_add_device {
398         struct mgmt_addr_info addr;
399 } __packed;
400
401 #define MGMT_OP_REMOVE_DEVICE           0x0034
402 struct mgmt_cp_remove_device {
403         struct mgmt_addr_info addr;
404 } __packed;
405 struct mgmt_rp_remove_device {
406         struct mgmt_addr_info addr;
407 } __packed;
408
409 struct mgmt_conn_param {
410         struct mgmt_addr_info addr;
411         uint16_t min_interval;
412         uint16_t max_interval;
413         uint16_t latency;
414         uint16_t timeout;
415 } __packed;
416
417 #define MGMT_OP_LOAD_CONN_PARAM         0x0035
418 struct mgmt_cp_load_conn_param {
419         uint16_t param_count;
420         struct mgmt_conn_param params[0];
421 } __packed;
422
423 #define MGMT_OP_READ_UNCONF_INDEX_LIST  0x0036
424 struct mgmt_rp_read_unconf_index_list {
425         uint16_t num_controllers;
426         uint16_t index[0];
427 } __packed;
428
429 #define MGMT_OPTION_EXTERNAL_CONFIG     0x00000001
430 #define MGMT_OPTION_PUBLIC_ADDRESS      0x00000002
431
432 #define MGMT_OP_READ_CONFIG_INFO        0x0037
433 struct mgmt_rp_read_config_info {
434         uint16_t manufacturer;
435         uint32_t supported_options;
436         uint32_t missing_options;
437 } __packed;
438
439 #define MGMT_OP_SET_EXTERNAL_CONFIG     0x0038
440 struct mgmt_cp_set_external_config {
441         uint8_t config;
442 } __packed;
443
444 #define MGMT_OP_SET_PUBLIC_ADDRESS      0x0039
445 struct mgmt_cp_set_public_address {
446         bdaddr_t bdaddr;
447 } __packed;
448
449 #define MGMT_OP_START_SERVICE_DISCOVERY         0x003A
450 struct mgmt_cp_start_service_discovery {
451         uint8_t type;
452         int8_t rssi;
453         uint16_t uuid_count;
454         uint8_t uuids[0][16];
455 } __packed;
456
457 #define MGMT_OP_READ_LOCAL_OOB_EXT_DATA 0x003B
458 struct mgmt_cp_read_local_oob_ext_data {
459         uint8_t  type;
460 } __packed;
461 struct mgmt_rp_read_local_oob_ext_data {
462         uint8_t  type;
463         uint16_t eir_len;
464         uint8_t  eir[0];
465 } __packed;
466
467 #define MGMT_OP_READ_EXT_INDEX_LIST     0x003C
468 struct mgmt_rp_read_ext_index_list {
469         uint16_t num_controllers;
470         struct {
471                 uint16_t index;
472                 uint8_t type;
473                 uint8_t bus;
474         } entry[0];
475 } __packed;
476
477 #define MGMT_OP_READ_ADV_FEATURES       0x003D
478 struct mgmt_rp_read_adv_features {
479         uint32_t supported_flags;
480         uint8_t  max_adv_data_len;
481         uint8_t  max_scan_rsp_len;
482         uint8_t  max_instances;
483         uint8_t  num_instances;
484         uint8_t  instance[0];
485 } __packed;
486
487 #define MGMT_OP_ADD_ADVERTISING         0x003E
488 struct mgmt_cp_add_advertising {
489         uint8_t  instance;
490         uint32_t flags;
491         uint16_t duration;
492         uint16_t timeout;
493         uint8_t  adv_data_len;
494         uint8_t  scan_rsp_len;
495         uint8_t  data[0];
496 } __packed;
497 struct mgmt_rp_add_advertising {
498         uint8_t instance;
499 } __packed;
500
501 #define MGMT_ADV_FLAG_CONNECTABLE       (1 << 0)
502 #define MGMT_ADV_FLAG_DISCOV            (1 << 1)
503 #define MGMT_ADV_FLAG_LIMITED_DISCOV    (1 << 2)
504 #define MGMT_ADV_FLAG_MANAGED_FLAGS     (1 << 3)
505 #define MGMT_ADV_FLAG_TX_POWER          (1 << 4)
506 #define MGMT_ADV_FLAG_APPEARANCE        (1 << 5)
507 #define MGMT_ADV_FLAG_LOCAL_NAME        (1 << 6)
508
509 #define MGMT_OP_REMOVE_ADVERTISING      0x003F
510 struct mgmt_cp_remove_advertising {
511         uint8_t instance;
512 } __packed;
513 #define MGMT_REMOVE_ADVERTISING_SIZE    1
514 struct mgmt_rp_remove_advertising {
515         uint8_t instance;
516 } __packed;
517
518 #define MGMT_OP_GET_ADV_SIZE_INFO       0x0040
519 struct mgmt_cp_get_adv_size_info {
520         uint8_t  instance;
521         uint32_t flags;
522 } __packed;
523 #define MGMT_GET_ADV_SIZE_INFO_SIZE     5
524 struct mgmt_rp_get_adv_size_info {
525         uint8_t  instance;
526         uint32_t flags;
527         uint8_t  max_adv_data_len;
528         uint8_t  max_scan_rsp_len;
529 } __packed;
530
531 #define MGMT_OP_START_LIMITED_DISCOVERY 0x0041
532
533 #define MGMT_EV_CMD_COMPLETE            0x0001
534 struct mgmt_ev_cmd_complete {
535         uint16_t opcode;
536         uint8_t status;
537         uint8_t data[0];
538 } __packed;
539
540 #define MGMT_EV_CMD_STATUS              0x0002
541 struct mgmt_ev_cmd_status {
542         uint16_t opcode;
543         uint8_t status;
544 } __packed;
545
546 #define MGMT_EV_CONTROLLER_ERROR        0x0003
547 struct mgmt_ev_controller_error {
548         uint8_t error_code;
549 } __packed;
550
551 #define MGMT_EV_INDEX_ADDED             0x0004
552
553 #define MGMT_EV_INDEX_REMOVED           0x0005
554
555 #define MGMT_EV_NEW_SETTINGS            0x0006
556
557 #define MGMT_EV_CLASS_OF_DEV_CHANGED    0x0007
558 struct mgmt_ev_class_of_dev_changed {
559         uint8_t dev_class[3];
560 } __packed;
561
562 #define MGMT_EV_LOCAL_NAME_CHANGED      0x0008
563 struct mgmt_ev_local_name_changed {
564         uint8_t name[MGMT_MAX_NAME_LENGTH];
565         uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
566 } __packed;
567
568 #define MGMT_EV_NEW_LINK_KEY            0x0009
569 struct mgmt_ev_new_link_key {
570         uint8_t store_hint;
571         struct mgmt_link_key_info key;
572 } __packed;
573
574 #define MGMT_EV_NEW_LONG_TERM_KEY       0x000A
575 struct mgmt_ev_new_long_term_key {
576         uint8_t store_hint;
577         struct mgmt_ltk_info key;
578 } __packed;
579
580 #define MGMT_EV_DEVICE_CONNECTED        0x000B
581 struct mgmt_ev_device_connected {
582         struct mgmt_addr_info addr;
583         uint32_t flags;
584         uint16_t eir_len;
585         uint8_t eir[0];
586 } __packed;
587
588 #define MGMT_DEV_DISCONN_UNKNOWN        0x00
589 #define MGMT_DEV_DISCONN_TIMEOUT        0x01
590 #define MGMT_DEV_DISCONN_LOCAL_HOST     0x02
591 #define MGMT_DEV_DISCONN_REMOTE         0x03
592
593 #define MGMT_EV_DEVICE_DISCONNECTED     0x000C
594 struct mgmt_ev_device_disconnected {
595         struct mgmt_addr_info addr;
596         uint8_t reason;
597 } __packed;
598
599 #define MGMT_EV_CONNECT_FAILED          0x000D
600 struct mgmt_ev_connect_failed {
601         struct mgmt_addr_info addr;
602         uint8_t status;
603 } __packed;
604
605 #define MGMT_EV_PIN_CODE_REQUEST        0x000E
606 struct mgmt_ev_pin_code_request {
607         struct mgmt_addr_info addr;
608         uint8_t secure;
609 } __packed;
610
611 #define MGMT_EV_USER_CONFIRM_REQUEST    0x000F
612 struct mgmt_ev_user_confirm_request {
613         struct mgmt_addr_info addr;
614         uint8_t confirm_hint;
615         uint32_t value;
616 } __packed;
617
618 #define MGMT_EV_USER_PASSKEY_REQUEST    0x0010
619 struct mgmt_ev_user_passkey_request {
620         struct mgmt_addr_info addr;
621 } __packed;
622
623 #define MGMT_EV_AUTH_FAILED             0x0011
624 struct mgmt_ev_auth_failed {
625         struct mgmt_addr_info addr;
626         uint8_t status;
627 } __packed;
628
629 #define MGMT_DEV_FOUND_CONFIRM_NAME     0x01
630 #define MGMT_DEV_FOUND_LEGACY_PAIRING   0x02
631 #define MGMT_DEV_FOUND_NOT_CONNECTABLE  0x04
632
633 #define MGMT_EV_DEVICE_FOUND            0x0012
634 struct mgmt_ev_device_found {
635         struct mgmt_addr_info addr;
636         int8_t rssi;
637         uint32_t flags;
638         uint16_t eir_len;
639         uint8_t eir[0];
640 } __packed;
641
642 #define MGMT_EV_DISCOVERING             0x0013
643 struct mgmt_ev_discovering {
644         uint8_t type;
645         uint8_t discovering;
646 } __packed;
647
648 #define MGMT_EV_DEVICE_BLOCKED          0x0014
649 struct mgmt_ev_device_blocked {
650         struct mgmt_addr_info addr;
651 } __packed;
652
653 #define MGMT_EV_DEVICE_UNBLOCKED        0x0015
654 struct mgmt_ev_device_unblocked {
655         struct mgmt_addr_info addr;
656 } __packed;
657
658 #define MGMT_EV_DEVICE_UNPAIRED         0x0016
659 struct mgmt_ev_device_unpaired {
660         struct mgmt_addr_info addr;
661 } __packed;
662
663 #define MGMT_EV_PASSKEY_NOTIFY          0x0017
664 struct mgmt_ev_passkey_notify {
665         struct mgmt_addr_info addr;
666         uint32_t passkey;
667         uint8_t entered;
668 } __packed;
669
670 #define MGMT_EV_NEW_IRK                 0x0018
671 struct mgmt_ev_new_irk {
672         uint8_t  store_hint;
673         bdaddr_t rpa;
674         struct mgmt_irk_info key;
675 } __packed;
676
677 struct mgmt_csrk_info {
678         struct mgmt_addr_info addr;
679         uint8_t type;
680         uint8_t val[16];
681 } __packed;
682
683 #define MGMT_EV_NEW_CSRK                0x0019
684 struct mgmt_ev_new_csrk {
685         uint8_t store_hint;
686         struct mgmt_csrk_info key;
687 } __packed;
688
689 #define MGMT_EV_DEVICE_ADDED            0x001a
690 struct mgmt_ev_device_added {
691         struct mgmt_addr_info addr;
692         uint8_t action;
693 } __packed;
694
695 #define MGMT_EV_DEVICE_REMOVED          0x001b
696 struct mgmt_ev_device_removed {
697         struct mgmt_addr_info addr;
698 } __packed;
699
700 #define MGMT_EV_NEW_CONN_PARAM          0x001c
701 struct mgmt_ev_new_conn_param {
702         struct mgmt_addr_info addr;
703         uint8_t store_hint;
704         uint16_t min_interval;
705         uint16_t max_interval;
706         uint16_t latency;
707         uint16_t timeout;
708 } __packed;
709
710 #define MGMT_EV_UNCONF_INDEX_ADDED      0x001d
711
712 #define MGMT_EV_UNCONF_INDEX_REMOVED    0x001e
713
714 #define MGMT_EV_NEW_CONFIG_OPTIONS      0x001f
715
716 #define MGMT_EV_EXT_INDEX_ADDED         0x0020
717 struct mgmt_ev_ext_index_added {
718         uint8_t type;
719         uint8_t bus;
720 } __packed;
721
722 #define MGMT_EV_EXT_INDEX_REMOVED       0x0021
723 struct mgmt_ev_ext_index_removed {
724         uint8_t type;
725         uint8_t bus;
726 } __packed;
727
728 #define MGMT_EV_LOCAL_OOB_DATA_UPDATED  0x0022
729 struct mgmt_ev_local_oob_data_updated {
730         uint8_t  type;
731         uint16_t eir_len;
732         uint8_t  eir[0];
733 } __packed;
734
735 #define MGMT_EV_ADVERTISING_ADDED       0x0023
736 struct mgmt_ev_advertising_added {
737         uint8_t instance;
738 } __packed;
739
740 #define MGMT_EV_ADVERTISING_REMOVED     0x0024
741 struct mgmt_ev_advertising_removed {
742         uint8_t instance;
743 } __packed;
744
745 static const char *mgmt_op[] = {
746         "<0x0000>",
747         "Read Version",
748         "Read Commands",
749         "Read Index List",
750         "Read Controller Info",
751         "Set Powered",
752         "Set Discoverable",
753         "Set Connectable",
754         "Set Fast Connectable",                 /* 0x0008 */
755         "Set Bondable",
756         "Set Link Security",
757         "Set Secure Simple Pairing",
758         "Set High Speed",
759         "Set Low Energy",
760         "Set Dev Class",
761         "Set Local Name",
762         "Add UUID",                                     /* 0x0010 */
763         "Remove UUID",
764         "Load Link Keys",
765         "Load Long Term Keys",
766         "Disconnect",
767         "Get Connections",
768         "PIN Code Reply",
769         "PIN Code Neg Reply",
770         "Set IO Capability",                            /* 0x0018 */
771         "Pair Device",
772         "Cancel Pair Device",
773         "Unpair Device",
774         "User Confirm Reply",
775         "User Confirm Neg Reply",
776         "User Passkey Reply",
777         "User Passkey Neg Reply",
778         "Read Local OOB Data",                          /* 0x0020 */
779         "Add Remote OOB Data",
780         "Remove Remove OOB Data",
781         "Start Discovery",
782         "Stop Discovery",
783         "Confirm Name",
784         "Block Device",
785         "Unblock Device",
786         "Set Device ID",                                /* 0x0028 */
787         "Set Advertising",
788         "Set BR/EDR",
789         "Set Static Address",
790         "Set Scan Parameters",
791         "Set Secure Connections",
792         "Set Debug Keys",
793         "Set Privacy",
794         "Load Identity Resolving Keys",                 /* 0x0030 */
795         "Get Connection Information",
796         "Get Clock Information",
797         "Add Device",
798         "Remove Device",
799         "Load Connection Parameters",
800         "Read Unconfigured Index List",
801         "Read Controller Configuration Information",
802         "Set External Configuration",                   /* 0x0038 */
803         "Set Public Address",
804         "Start Service Discovery",
805         "Read Local Out Of Band Extended Data",
806         "Read Extended Controller Index List",
807         "Read Advertising Features",
808         "Add Advertising",
809         "Remove Advertising",
810         "Get Advertising Size Information",             /* 0x0040 */
811         "Start Limited Discovery",
812 };
813
814 static const char *mgmt_ev[] = {
815         "<0x0000>",
816         "Command Complete",
817         "Command Status",
818         "Controller Error",
819         "Index Added",
820         "Index Removed",
821         "New Settings",
822         "Class of Device Changed",
823         "Local Name Changed",                           /* 0x0008 */
824         "New Link Key",
825         "New Long Term Key",
826         "Device Connected",
827         "Device Disconnected",
828         "Connect Failed",
829         "PIN Code Request",
830         "User Confirm Request",
831         "User Passkey Request",                         /* 0x0010 */
832         "Authentication Failed",
833         "Device Found",
834         "Discovering",
835         "Device Blocked",
836         "Device Unblocked",
837         "Device Unpaired",
838         "Passkey Notify",
839         "New Identity Resolving Key",                   /* 0x0018 */
840         "New Signature Resolving Key",
841         "Device Added",
842         "Device Removed",
843         "New Connection Parameter",
844         "Unconfigured Index Added",
845         "Unconfigured Index Removed",
846         "New Configuration Options",
847         "Extended Index Added",                         /* 0x0020 */
848         "Extended Index Removed",
849         "Local Out Of Band Extended Data Updated",
850         "Advertising Added",
851         "Advertising Removed",
852 };
853
854 static const char *mgmt_status[] = {
855         "Success",
856         "Unknown Command",
857         "Not Connected",
858         "Failed",
859         "Connect Failed",
860         "Authentication Failed",
861         "Not Paired",
862         "No Resources",
863         "Timeout",
864         "Already Connected",
865         "Busy",
866         "Rejected",
867         "Not Supported",
868         "Invalid Parameters",
869         "Disconnected",
870         "Not Powered",
871         "Cancelled",
872         "Invalid Index",
873         "Blocked through rfkill",
874         "Already Paired",
875         "Permission Denied",
876 };
877
878 #ifdef __TIZEN_PATCH__
879
880 #define TIZEN_OP_CODE_BASE      0xff00
881 #define TIZEN_EV_BASE           0xff00
882
883 #define MGMT_MAX_ADVERTISING_LENGTH             31
884
885 #define MGMT_MAX_MANUFACTURER_DATA_LENGTH       31
886
887 #define MGMT_IRK_SIZE                           16
888
889 #define MGMT_OP_SET_ADVERTISING_PARAMS          (TIZEN_OP_CODE_BASE + 0x01)
890 struct mgmt_cp_set_advertising_params {
891         uint16_t interval_min;
892         uint16_t interval_max;
893         uint8_t filter_policy;
894         uint8_t type;
895 } __packed;
896
897 #define MGMT_OP_SET_ADVERTISING_DATA            (TIZEN_OP_CODE_BASE + 0x02)
898 struct mgmt_cp_set_advertising_data {
899         uint8_t data[MGMT_MAX_ADVERTISING_LENGTH];
900 } __packed;
901
902 #define MGMT_OP_SET_SCAN_RSP_DATA               (TIZEN_OP_CODE_BASE + 0x03)
903 struct mgmt_cp_set_scan_rsp_data {
904         uint8_t data[MGMT_MAX_ADVERTISING_LENGTH];
905 } __packed;
906
907 #define MGMT_OP_ADD_DEV_WHITE_LIST              (TIZEN_OP_CODE_BASE + 0x04)
908 struct mgmt_cp_add_dev_white_list {
909         uint8_t bdaddr_type;
910         bdaddr_t bdaddr;
911 } __packed;
912
913 #define MGMT_OP_REMOVE_DEV_FROM_WHITE_LIST      (TIZEN_OP_CODE_BASE + 0x05)
914 struct mgmt_cp_remove_dev_white_list {
915         uint8_t bdaddr_type;
916         bdaddr_t bdaddr;
917 } __packed;
918
919 #define MGMT_OP_CLEAR_DEV_WHITE_LIST            (TIZEN_OP_CODE_BASE + 0x06)
920
921 /* BEGIN TIZEN_Bluetooth :: RSSI monitoring   */
922 #define MGMT_OP_SET_RSSI_ENABLE                 (TIZEN_OP_CODE_BASE + 0x07)
923 struct mgmt_cp_set_enable_rssi {
924         int8_t     low_th;
925         int8_t     in_range_th;
926         int8_t     high_th;
927         bdaddr_t   bdaddr;
928         int8_t link_type;
929 } __packed;
930
931 struct mgmt_cc_rsp_enable_rssi {
932         uint8_t status;
933         uint8_t le_ext_opcode;
934         bdaddr_t bt_address;
935         int8_t link_type;
936 } __packed;
937
938 #define MGMT_OP_GET_RAW_RSSI                    (TIZEN_OP_CODE_BASE + 0x08)
939 struct mgmt_cp_get_raw_rssi {
940         bdaddr_t bt_address;
941         uint8_t  link_type;
942 } __packed;
943 struct mgmt_cc_rp_get_raw_rssi {
944         uint8_t    status;
945         int8_t     rssi_dbm;
946         uint8_t    link_type;
947         bdaddr_t   bt_address;
948 } __packed;
949
950 #define MGMT_OP_SET_RSSI_DISABLE                (TIZEN_OP_CODE_BASE + 0x09)
951 struct mgmt_cp_disable_rssi {
952         bdaddr_t   bdaddr;
953         int8_t link_type;
954 } __packed;
955 struct mgmt_cc_rp_disable_rssi {
956         uint8_t status;
957         uint8_t le_ext_opcode;
958         bdaddr_t bt_address;
959         int8_t link_type;
960 } __packed;
961 /* END TIZEN_Bluetooth :: RSSI monitoring */
962
963 #define MGMT_OP_START_LE_DISCOVERY              (TIZEN_OP_CODE_BASE + 0x0a)
964 struct mgmt_cp_start_le_discovery {
965         uint8_t type;
966 } __packed;
967
968 #define MGMT_OP_STOP_LE_DISCOVERY               (TIZEN_OP_CODE_BASE + 0x0b)
969 struct mgmt_cp_stop_le_discovery {
970         uint8_t type;
971 } __packed;
972
973 /* BEGIN TIZEN_Bluetooth :: LE auto connection */
974 #define MGMT_OP_DISABLE_LE_AUTO_CONNECT         (TIZEN_OP_CODE_BASE + 0x0c)
975 /* END TIZEN_Bluetooth */
976
977 #define MGMT_OP_LE_CONN_UPDATE                  (TIZEN_OP_CODE_BASE + 0x0d)
978 struct mgmt_cp_le_conn_update {
979         uint16_t interval_min;
980         uint16_t interval_max;
981         uint16_t latency;
982         uint16_t supervision_time_out;
983         bdaddr_t bdaddr;
984 } __packed;
985
986 #define MGMT_OP_SET_MANUFACTURER_DATA           (TIZEN_OP_CODE_BASE + 0x0e)
987 struct mgmt_cp_set_manufacturer_data {
988         uint8_t data[MGMT_MAX_MANUFACTURER_DATA_LENGTH];
989 } __packed;
990
991 #define MGMT_OP_LE_SET_SCAN_PARAMS              (TIZEN_OP_CODE_BASE + 0x0f)
992 struct mgmt_cp_le_set_scan_params {
993         uint8_t type;   /* le scan type */
994         uint16_t interval;
995         uint16_t window;
996 } __packed;
997
998 #define MGMT_SCO_ROLE_HANDSFREE                 0x00
999 #define MGMT_SCO_ROLE_AUDIO_GATEWAY             0x01
1000 #define MGMT_OP_SET_VOICE_SETTING               (TIZEN_OP_CODE_BASE + 0x10)
1001 struct mgmt_cp_set_voice_setting {
1002         bdaddr_t bdaddr;
1003         uint8_t  sco_role;
1004         uint16_t voice_setting;
1005 } __packed;
1006
1007 #define MGMT_OP_GET_ADV_TX_POWER                (TIZEN_OP_CODE_BASE + 0x11)
1008 struct mgmt_rp_get_adv_tx_power {
1009         int8_t adv_tx_power;
1010 } __packed;
1011
1012 #define MGMT_OP_ENABLE_6LOWPAN          (TIZEN_OP_CODE_BASE + 0x12)
1013 struct mgmt_cp_enable_6lowpan {
1014         uint8_t enable_6lowpan;
1015 } __packed;
1016
1017 #define MGMT_OP_CONNECT_6LOWPAN (TIZEN_OP_CODE_BASE + 0x13)
1018 struct mgmt_cp_connect_6lowpan {
1019         struct mgmt_addr_info addr;
1020 } __packed;
1021
1022 #define MGMT_OP_DISCONNECT_6LOWPAN      (TIZEN_OP_CODE_BASE + 0x14)
1023 struct mgmt_cp_disconnect_6lowpan {
1024         struct mgmt_addr_info addr;
1025 } __packed;
1026
1027 #define MGMT_OP_LE_READ_MAXIMUM_DATA_LENGTH     (TIZEN_OP_CODE_BASE + 0x15)
1028 struct mgmt_rp_le_read_maximum_data_length {
1029         uint8_t status;
1030         uint16_t max_tx_octets;
1031         uint16_t max_tx_time;
1032         uint16_t max_rx_octets;
1033         uint16_t max_rx_time;
1034 } __packed;
1035
1036 #define MGMT_OP_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH     (TIZEN_OP_CODE_BASE + 0x16)
1037 struct mgmt_cp_le_write_host_suggested_data_length {
1038         uint16_t def_tx_octets;
1039         uint16_t def_tx_time;
1040 } __packed;
1041
1042 #define MGMT_OP_LE_READ_HOST_SUGGESTED_DATA_LENGTH      (TIZEN_OP_CODE_BASE + 0x17)
1043 struct mgmt_rp_le_read_host_suggested_data_length {
1044         uint8_t status;
1045         uint16_t def_tx_octets;
1046         uint16_t def_tx_time;
1047 } __packed;
1048
1049 #define MGMT_OP_LE_SET_DATA_LENGTH      (TIZEN_OP_CODE_BASE + 0x18)
1050 struct mgmt_cp_le_set_data_length {
1051         bdaddr_t bdaddr;
1052         uint16_t max_tx_octets;
1053         uint16_t max_tx_time;
1054 } __packed;
1055 #define MGMT_LE_SET_DATA_LENGTH_SIZE     10
1056
1057 #define MGMT_OP_SET_DEV_RPA_RES_SUPPORT (TIZEN_OP_CODE_BASE + 0x19)
1058 struct mgmt_cp_set_dev_rpa_res_support {
1059         struct mgmt_addr_info addr;
1060         uint8_t res_support;
1061 } __packed;
1062
1063 /*  Currently there is no support in kernel for below MGMT cmd opcodes. */
1064 #if 0 // Not defined in kernel
1065 #define MGMT_OP_READ_RSSI                       (TIZEN_OP_CODE_BASE + 0x11)
1066 struct mgmt_cp_read_rssi {
1067         bdaddr_t bdaddr;
1068 } __packed;
1069 struct mgmt_rp_read_rssi {
1070         uint8_t status;
1071         bdaddr_t bdaddr;
1072         int8_t rssi;
1073 } __packed;
1074
1075 #define MGMT_OP_L2CAP_CONN_PARAM_UPDATE         (TIZEN_OP_CODE_BASE + 0x12)
1076 struct mgmt_cp_l2cap_conn_param_update {
1077         bdaddr_t bdaddr;
1078         uint16_t interval_min;
1079         uint16_t interval_max;
1080         uint16_t latency;
1081         uint16_t supervision_time_out;
1082 } __packed;
1083
1084 #define MGMT_OP_WRITE_SEC_CONN_HOST_SUPPORT     (TIZEN_OP_CODE_BASE + 0x13)
1085 #define MGMT_WRITE_SEC_CONN_HOST_SUPPORT_SIZE 1
1086 struct mgmt_cp_write_sec_conn_host_support {
1087         uint8_t secure_connection_host_support;
1088 } __packed;
1089 struct mgmt_rp_write_sec_conn_host_support {
1090         uint8_t status;
1091 } __packed;
1092
1093 #define MGMT_OP_READ_SEC_CONN_HOST_SUPPORT      (TIZEN_OP_CODE_BASE + 0x14)
1094 struct mgmt_rp_read_sec_conn_host_support {
1095         uint8_t status;
1096         uint8_t sec_conn_host_support;
1097 } __packed;
1098
1099 #define MGMT_OP_WRITE_AUTH_PAYLOAD_TIMEOUT      (TIZEN_OP_CODE_BASE + 0x15)
1100 struct mgmt_cp_write_auth_payload_timeout {
1101         bdaddr_t bdaddr;
1102         uint16_t auth_payload_timeout;
1103 } __packed;
1104 struct mgmt_rp_write_auth_payload_timeout {
1105         uint8_t status;
1106 } __packed;
1107
1108 #define MGMT_OP_READ_AUTH_PAYLOAD_TIMEOUT       (TIZEN_OP_CODE_BASE + 0x16)
1109 struct mgmt_cp_read_auth_payload_timeout    {
1110         bdaddr_t bdaddr;
1111 } __packed;
1112 struct mgmt_rp_read_auth_payload_timeout {
1113         uint8_t status;
1114         uint16_t auth_payload_timeout;
1115 } __packed;
1116 #endif
1117
1118
1119 /* BEGIN TIZEN_Bluetooth :: name update changes */
1120 #define MGMT_EV_DEVICE_NAME_UPDATE              (TIZEN_EV_BASE + 0x01)
1121 struct mgmt_ev_device_name_update {
1122         struct mgmt_addr_info addr;
1123         uint16_t eir_len;
1124         uint8_t eir[0];
1125 } __packed;
1126 /* END TIZEN_Bluetooth :: name update changes */
1127
1128 /* BEGIN TIZEN_Bluetooth :: Add handling of hardware error event   */
1129 #define MGMT_EV_HARDWARE_ERROR                  (TIZEN_EV_BASE + 0x02)
1130 struct mgmt_ev_hardware_error{
1131         uint8_t error_code;
1132 } __packed;
1133 /* END TIZEN_Bluetooth */
1134
1135 /* BEGIN TIZEN_Bluetooth :: HCI TX Timeout Error   */
1136 #define MGMT_EV_TX_TIMEOUT_ERROR                (TIZEN_EV_BASE + 0x03)
1137 /* END TIZEN_Bluetooth */
1138
1139 /* BEGIN TIZEN_Bluetooth :: Add handling of RSSI Events   */
1140 #define MGMT_EV_RSSI_ALERT                      (TIZEN_EV_BASE + 0x04)
1141 struct mgmt_ev_vendor_specific_rssi_alert {
1142         bdaddr_t bdaddr;
1143         int8_t     link_type;
1144         int8_t     alert_type;
1145         int8_t     rssi_dbm;
1146 } __packed;
1147
1148 #define MGMT_EV_RAW_RSSI                        (TIZEN_EV_BASE + 0x05)
1149
1150 #define MGMT_EV_RSSI_ENABLED                    (TIZEN_EV_BASE + 0x06)
1151
1152 #define MGMT_EV_RSSI_DISABLED                   (TIZEN_EV_BASE + 0x07)
1153 /* END TIZEN_Bluetooth :: Handling of RSSI Events */
1154
1155 /* BEGIN TIZEN_Bluetooth :: Add LE connection update Events   */
1156 #define MGMT_EV_CONN_UPDATED                    (TIZEN_EV_BASE + 0x08)
1157 struct mgmt_ev_conn_updated {
1158         struct  mgmt_addr_info addr;
1159         uint16_t        conn_interval;
1160         uint16_t        conn_latency;
1161         uint16_t        supervision_timeout;
1162 } __packed;
1163
1164 #define MGMT_EV_CONN_UPDATE_FAILED              (TIZEN_EV_BASE + 0x09)
1165 struct mgmt_ev_conn_update_failed {
1166         struct  mgmt_addr_info addr;
1167         uint8_t status;
1168 } __packed;
1169 /* END TIZEN_Bluetooth :: Add LE connection update Events */
1170
1171 #define MGMT_EV_LE_DEVICE_FOUND                 (TIZEN_EV_BASE + 0x0a)
1172 struct mgmt_ev_le_device_found {
1173         struct mgmt_addr_info addr;
1174         int8_t rssi;
1175         uint32_t flags;
1176         int8_t adv_type;
1177         uint16_t eir_len;
1178         uint8_t eir[0];
1179 } __packed;
1180
1181 #define MGMT_EV_MULTI_ADV_STATE_CHANGED                 (TIZEN_EV_BASE + 0x0b)
1182 struct mgmt_ev_vendor_specific_multi_adv_state_changed {
1183         uint8_t adv_instance;
1184         uint8_t state_change_reason;
1185         int16_t connection_handle;
1186 } __packed;
1187
1188 #define MGMT_EV_6LOWPAN_CONN_STATE_CHANGED              (TIZEN_EV_BASE + 0x0c)
1189 struct mgmt_ev_6lowpan_conn_state_changed {
1190         struct  mgmt_addr_info addr;
1191         uint8_t connected;
1192 } __packed;
1193
1194
1195 #define MGMT_EV_LE_DATA_LENGTH_CHANGED          (TIZEN_EV_BASE + 0x0d)
1196 struct mgmt_ev_le_data_length_changed {
1197         struct  mgmt_addr_info addr;
1198         int16_t max_tx_octets;
1199         int16_t max_tx_time;
1200         int16_t max_rx_octets;
1201         int16_t max_rx_time;
1202 } __packed;
1203
1204 /*  Currently there is no support in kernel for below MGMT events. */
1205 #if 0 // Not defined in kernel
1206 #define MGMT_EV_NEW_LOCAL_IRK                   (TIZEN_EV_BASE + 0x0b)
1207 struct mgmt_ev_new_local_irk {
1208         uint8_t    irk[16];
1209 } __packed;
1210 #endif
1211
1212 static const char *mgmt_tizen_op[] = {
1213         "<0x0000>",
1214         "Set Advertising Parameters",
1215         "Set Advertising Data",
1216         "Set Scan Response Data",
1217         "Add Device White List",
1218         "Remove Device White List",
1219         "Clear Device White List",
1220         "Set RSSI Enable",
1221         "Get Raw RSSI",
1222         "Set RSSI Disable",
1223         "Start LE Discovery",
1224         "Stop LE Discovery",
1225         "Disable LE Auto Connect",
1226         "LE Connection Update",
1227         "Set Manufacturer Data",
1228         "LE Set Scan Parameters",
1229         "Set Voice Setting",
1230         "Get Adv Tx Power",
1231 #ifdef __TIZEN_PATCH__
1232         "Connect BT 6LOWPAN",
1233         "Disconnect BT 6LOWPAN"
1234 #endif
1235 };
1236
1237 static const char *mgmt_tizen_ev[] = {
1238         "<0x0000>",
1239         "Device Name Update",
1240         "Hardware Error",
1241         "Tx TimeOut Error",
1242         "RSSI Alert",
1243         "Raw RSSI",
1244         "RSSI Enabled",
1245         "RSSI Disabled",
1246         "LE Connection Updated",
1247         "LE Connection Update Failed",
1248         "LE Device Found",
1249         "Multi Adv State Change",
1250 };
1251 #endif /* End of __TIZEN_PATCH__ */
1252
1253 #ifndef NELEM
1254 #define NELEM(x) (sizeof(x) / sizeof((x)[0]))
1255 #endif
1256
1257 static inline const char *mgmt_opstr(uint16_t op)
1258 {
1259 #ifdef __TIZEN_PATCH__
1260         if (op >= NELEM(mgmt_op)) {
1261                 uint16_t tizen_op = op - TIZEN_OP_CODE_BASE;
1262
1263                 if (tizen_op > 0 &&
1264                     tizen_op < NELEM(mgmt_tizen_op))
1265                         return mgmt_tizen_op[tizen_op];
1266
1267                 return "<unknown opcode>";
1268         }
1269 #else
1270         if (op >= NELEM(mgmt_op))
1271                 return "<unknown opcode>";
1272 #endif
1273
1274         return mgmt_op[op];
1275 }
1276
1277 static inline const char *mgmt_evstr(uint16_t ev)
1278 {
1279 #ifdef __TIZEN_PATCH__
1280         if (ev >= NELEM(mgmt_ev)) {
1281                 uint16_t tizen_ev = ev - TIZEN_EV_BASE;
1282
1283                 if (tizen_ev > 0 &&
1284                     tizen_ev < NELEM(mgmt_tizen_ev))
1285                         return mgmt_tizen_ev[tizen_ev];
1286
1287                 return "<unknown event>";
1288         }
1289 #else
1290         if (ev >= NELEM(mgmt_ev))
1291                 return "<unknown event>";
1292 #endif
1293
1294         return mgmt_ev[ev];
1295 }
1296
1297 static inline const char *mgmt_errstr(uint8_t status)
1298 {
1299         if (status >= NELEM(mgmt_status))
1300                 return "<unknown status>";
1301         return mgmt_status[status];
1302 }