Bluetooth: Introduce force_bredr_smp debugfs option for testing
[deliverable/linux.git] / include / net / bluetooth / hci.h
1 /*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
10
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
23 */
24
25 #ifndef __HCI_H
26 #define __HCI_H
27
28 #define HCI_MAX_ACL_SIZE 1024
29 #define HCI_MAX_SCO_SIZE 255
30 #define HCI_MAX_EVENT_SIZE 260
31 #define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
32
33 #define HCI_LINK_KEY_SIZE 16
34 #define HCI_AMP_LINK_KEY_SIZE (2 * HCI_LINK_KEY_SIZE)
35
36 #define HCI_MAX_AMP_ASSOC_SIZE 672
37
38 #define HCI_MAX_CSB_DATA_SIZE 252
39
40 /* HCI dev events */
41 #define HCI_DEV_REG 1
42 #define HCI_DEV_UNREG 2
43 #define HCI_DEV_UP 3
44 #define HCI_DEV_DOWN 4
45 #define HCI_DEV_SUSPEND 5
46 #define HCI_DEV_RESUME 6
47
48 /* HCI notify events */
49 #define HCI_NOTIFY_CONN_ADD 1
50 #define HCI_NOTIFY_CONN_DEL 2
51 #define HCI_NOTIFY_VOICE_SETTING 3
52
53 /* HCI bus types */
54 #define HCI_VIRTUAL 0
55 #define HCI_USB 1
56 #define HCI_PCCARD 2
57 #define HCI_UART 3
58 #define HCI_RS232 4
59 #define HCI_PCI 5
60 #define HCI_SDIO 6
61
62 /* HCI controller types */
63 #define HCI_BREDR 0x00
64 #define HCI_AMP 0x01
65
66 /* First BR/EDR Controller shall have ID = 0 */
67 #define AMP_ID_BREDR 0x00
68
69 /* AMP controller types */
70 #define AMP_TYPE_BREDR 0x00
71 #define AMP_TYPE_80211 0x01
72
73 /* AMP controller status */
74 #define AMP_STATUS_POWERED_DOWN 0x00
75 #define AMP_STATUS_BLUETOOTH_ONLY 0x01
76 #define AMP_STATUS_NO_CAPACITY 0x02
77 #define AMP_STATUS_LOW_CAPACITY 0x03
78 #define AMP_STATUS_MEDIUM_CAPACITY 0x04
79 #define AMP_STATUS_HIGH_CAPACITY 0x05
80 #define AMP_STATUS_FULL_CAPACITY 0x06
81
82 /* HCI device quirks */
83 enum {
84 /* When this quirk is set, the HCI Reset command is send when
85 * closing the transport instead of when opening it.
86 *
87 * This quirk must be set before hci_register_dev is called.
88 */
89 HCI_QUIRK_RESET_ON_CLOSE,
90
91 /* When this quirk is set, the device is turned into a raw-only
92 * device and it will stay in unconfigured state.
93 *
94 * This quirk must be set before hci_register_dev is called.
95 */
96 HCI_QUIRK_RAW_DEVICE,
97
98 /* When this quirk is set, the buffer sizes reported by
99 * HCI Read Buffer Size command are corrected if invalid.
100 *
101 * This quirk must be set before hci_register_dev is called.
102 */
103 HCI_QUIRK_FIXUP_BUFFER_SIZE,
104
105 /* When this quirk is set, then the HCI Read Local Supported
106 * Commands command is not supported. In general Bluetooth 1.2
107 * and later controllers should support this command. However
108 * some controllers indicate Bluetooth 1.2 support, but do
109 * not support this command.
110 *
111 * This quirk must be set before hci_register_dev is called.
112 */
113 HCI_QUIRK_BROKEN_LOCAL_COMMANDS,
114
115 /* When this quirk is set, then no stored link key handling
116 * is performed. This is mainly due to the fact that the
117 * HCI Delete Stored Link Key command is advertised, but
118 * not supported.
119 *
120 * This quirk must be set before hci_register_dev is called.
121 */
122 HCI_QUIRK_BROKEN_STORED_LINK_KEY,
123
124 /* When this quirk is set, an external configuration step
125 * is required and will be indicated with the controller
126 * configuation.
127 *
128 * This quirk can be set before hci_register_dev is called or
129 * during the hdev->setup vendor callback.
130 */
131 HCI_QUIRK_EXTERNAL_CONFIG,
132
133 /* When this quirk is set, the public Bluetooth address
134 * initially reported by HCI Read BD Address command
135 * is considered invalid. Controller configuration is
136 * required before this device can be used.
137 *
138 * This quirk can be set before hci_register_dev is called or
139 * during the hdev->setup vendor callback.
140 */
141 HCI_QUIRK_INVALID_BDADDR,
142
143 /* When this quirk is set, the duplicate filtering during
144 * scanning is based on Bluetooth devices addresses. To allow
145 * RSSI based updates, restart scanning if needed.
146 *
147 * This quirk can be set before hci_register_dev is called or
148 * during the hdev->setup vendor callback.
149 */
150 HCI_QUIRK_STRICT_DUPLICATE_FILTER,
151 };
152
153 /* HCI device flags */
154 enum {
155 HCI_UP,
156 HCI_INIT,
157 HCI_RUNNING,
158
159 HCI_PSCAN,
160 HCI_ISCAN,
161 HCI_AUTH,
162 HCI_ENCRYPT,
163 HCI_INQUIRY,
164
165 HCI_RAW,
166
167 HCI_RESET,
168 };
169
170 /* BR/EDR and/or LE controller flags: the flags defined here should represent
171 * states configured via debugfs for debugging and testing purposes only.
172 */
173 enum {
174 HCI_DUT_MODE,
175 HCI_FORCE_SC,
176 HCI_FORCE_LESC,
177 HCI_FORCE_BREDR_SMP,
178 HCI_FORCE_STATIC_ADDR,
179 };
180
181 /*
182 * BR/EDR and/or LE controller flags: the flags defined here should represent
183 * states from the controller.
184 */
185 enum {
186 HCI_SETUP,
187 HCI_CONFIG,
188 HCI_AUTO_OFF,
189 HCI_RFKILLED,
190 HCI_MGMT,
191 HCI_BONDABLE,
192 HCI_SERVICE_CACHE,
193 HCI_KEEP_DEBUG_KEYS,
194 HCI_USE_DEBUG_KEYS,
195 HCI_UNREGISTER,
196 HCI_UNCONFIGURED,
197 HCI_USER_CHANNEL,
198 HCI_EXT_CONFIGURED,
199 HCI_LE_ADV,
200 HCI_LE_SCAN,
201 HCI_SSP_ENABLED,
202 HCI_SC_ENABLED,
203 HCI_SC_ONLY,
204 HCI_PRIVACY,
205 HCI_RPA_EXPIRED,
206 HCI_RPA_RESOLVING,
207 HCI_HS_ENABLED,
208 HCI_LE_ENABLED,
209 HCI_ADVERTISING,
210 HCI_CONNECTABLE,
211 HCI_DISCOVERABLE,
212 HCI_LIMITED_DISCOVERABLE,
213 HCI_LINK_SECURITY,
214 HCI_PERIODIC_INQ,
215 HCI_FAST_CONNECTABLE,
216 HCI_BREDR_ENABLED,
217 HCI_LE_SCAN_INTERRUPTED,
218 };
219
220 /* A mask for the flags that are supposed to remain when a reset happens
221 * or the HCI device is closed.
222 */
223 #define HCI_PERSISTENT_MASK (BIT(HCI_LE_SCAN) | BIT(HCI_PERIODIC_INQ) | \
224 BIT(HCI_FAST_CONNECTABLE) | BIT(HCI_LE_ADV))
225
226 /* HCI timeouts */
227 #define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */
228 #define HCI_PAIRING_TIMEOUT msecs_to_jiffies(60000) /* 60 seconds */
229 #define HCI_INIT_TIMEOUT msecs_to_jiffies(10000) /* 10 seconds */
230 #define HCI_CMD_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */
231 #define HCI_ACL_TX_TIMEOUT msecs_to_jiffies(45000) /* 45 seconds */
232 #define HCI_AUTO_OFF_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */
233 #define HCI_POWER_OFF_TIMEOUT msecs_to_jiffies(5000) /* 5 seconds */
234 #define HCI_LE_CONN_TIMEOUT msecs_to_jiffies(20000) /* 20 seconds */
235 #define HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */
236
237 /* HCI data types */
238 #define HCI_COMMAND_PKT 0x01
239 #define HCI_ACLDATA_PKT 0x02
240 #define HCI_SCODATA_PKT 0x03
241 #define HCI_EVENT_PKT 0x04
242 #define HCI_VENDOR_PKT 0xff
243
244 /* HCI packet types */
245 #define HCI_DM1 0x0008
246 #define HCI_DM3 0x0400
247 #define HCI_DM5 0x4000
248 #define HCI_DH1 0x0010
249 #define HCI_DH3 0x0800
250 #define HCI_DH5 0x8000
251
252 #define HCI_HV1 0x0020
253 #define HCI_HV2 0x0040
254 #define HCI_HV3 0x0080
255
256 #define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
257 #define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
258
259 /* eSCO packet types */
260 #define ESCO_HV1 0x0001
261 #define ESCO_HV2 0x0002
262 #define ESCO_HV3 0x0004
263 #define ESCO_EV3 0x0008
264 #define ESCO_EV4 0x0010
265 #define ESCO_EV5 0x0020
266 #define ESCO_2EV3 0x0040
267 #define ESCO_3EV3 0x0080
268 #define ESCO_2EV5 0x0100
269 #define ESCO_3EV5 0x0200
270
271 #define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
272 #define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
273
274 /* ACL flags */
275 #define ACL_START_NO_FLUSH 0x00
276 #define ACL_CONT 0x01
277 #define ACL_START 0x02
278 #define ACL_COMPLETE 0x03
279 #define ACL_ACTIVE_BCAST 0x04
280 #define ACL_PICO_BCAST 0x08
281
282 /* Baseband links */
283 #define SCO_LINK 0x00
284 #define ACL_LINK 0x01
285 #define ESCO_LINK 0x02
286 /* Low Energy links do not have defined link type. Use invented one */
287 #define LE_LINK 0x80
288 #define AMP_LINK 0x81
289 #define INVALID_LINK 0xff
290
291 /* LMP features */
292 #define LMP_3SLOT 0x01
293 #define LMP_5SLOT 0x02
294 #define LMP_ENCRYPT 0x04
295 #define LMP_SOFFSET 0x08
296 #define LMP_TACCURACY 0x10
297 #define LMP_RSWITCH 0x20
298 #define LMP_HOLD 0x40
299 #define LMP_SNIFF 0x80
300
301 #define LMP_PARK 0x01
302 #define LMP_RSSI 0x02
303 #define LMP_QUALITY 0x04
304 #define LMP_SCO 0x08
305 #define LMP_HV2 0x10
306 #define LMP_HV3 0x20
307 #define LMP_ULAW 0x40
308 #define LMP_ALAW 0x80
309
310 #define LMP_CVSD 0x01
311 #define LMP_PSCHEME 0x02
312 #define LMP_PCONTROL 0x04
313 #define LMP_TRANSPARENT 0x08
314
315 #define LMP_RSSI_INQ 0x40
316 #define LMP_ESCO 0x80
317
318 #define LMP_EV4 0x01
319 #define LMP_EV5 0x02
320 #define LMP_NO_BREDR 0x20
321 #define LMP_LE 0x40
322
323 #define LMP_SNIFF_SUBR 0x02
324 #define LMP_PAUSE_ENC 0x04
325 #define LMP_EDR_ESCO_2M 0x20
326 #define LMP_EDR_ESCO_3M 0x40
327 #define LMP_EDR_3S_ESCO 0x80
328
329 #define LMP_EXT_INQ 0x01
330 #define LMP_SIMUL_LE_BR 0x02
331 #define LMP_SIMPLE_PAIR 0x08
332 #define LMP_NO_FLUSH 0x40
333
334 #define LMP_LSTO 0x01
335 #define LMP_INQ_TX_PWR 0x02
336 #define LMP_EXTFEATURES 0x80
337
338 /* Extended LMP features */
339 #define LMP_CSB_MASTER 0x01
340 #define LMP_CSB_SLAVE 0x02
341 #define LMP_SYNC_TRAIN 0x04
342 #define LMP_SYNC_SCAN 0x08
343
344 #define LMP_SC 0x01
345 #define LMP_PING 0x02
346
347 /* Host features */
348 #define LMP_HOST_SSP 0x01
349 #define LMP_HOST_LE 0x02
350 #define LMP_HOST_LE_BREDR 0x04
351 #define LMP_HOST_SC 0x08
352
353 /* LE features */
354 #define HCI_LE_ENCRYPTION 0x01
355 #define HCI_LE_CONN_PARAM_REQ_PROC 0x02
356 #define HCI_LE_PING 0x10
357 #define HCI_LE_DATA_LEN_EXT 0x20
358 #define HCI_LE_EXT_SCAN_POLICY 0x80
359
360 /* Connection modes */
361 #define HCI_CM_ACTIVE 0x0000
362 #define HCI_CM_HOLD 0x0001
363 #define HCI_CM_SNIFF 0x0002
364 #define HCI_CM_PARK 0x0003
365
366 /* Link policies */
367 #define HCI_LP_RSWITCH 0x0001
368 #define HCI_LP_HOLD 0x0002
369 #define HCI_LP_SNIFF 0x0004
370 #define HCI_LP_PARK 0x0008
371
372 /* Link modes */
373 #define HCI_LM_ACCEPT 0x8000
374 #define HCI_LM_MASTER 0x0001
375 #define HCI_LM_AUTH 0x0002
376 #define HCI_LM_ENCRYPT 0x0004
377 #define HCI_LM_TRUSTED 0x0008
378 #define HCI_LM_RELIABLE 0x0010
379 #define HCI_LM_SECURE 0x0020
380 #define HCI_LM_FIPS 0x0040
381
382 /* Authentication types */
383 #define HCI_AT_NO_BONDING 0x00
384 #define HCI_AT_NO_BONDING_MITM 0x01
385 #define HCI_AT_DEDICATED_BONDING 0x02
386 #define HCI_AT_DEDICATED_BONDING_MITM 0x03
387 #define HCI_AT_GENERAL_BONDING 0x04
388 #define HCI_AT_GENERAL_BONDING_MITM 0x05
389
390 /* I/O capabilities */
391 #define HCI_IO_DISPLAY_ONLY 0x00
392 #define HCI_IO_DISPLAY_YESNO 0x01
393 #define HCI_IO_KEYBOARD_ONLY 0x02
394 #define HCI_IO_NO_INPUT_OUTPUT 0x03
395
396 /* Link Key types */
397 #define HCI_LK_COMBINATION 0x00
398 #define HCI_LK_LOCAL_UNIT 0x01
399 #define HCI_LK_REMOTE_UNIT 0x02
400 #define HCI_LK_DEBUG_COMBINATION 0x03
401 #define HCI_LK_UNAUTH_COMBINATION_P192 0x04
402 #define HCI_LK_AUTH_COMBINATION_P192 0x05
403 #define HCI_LK_CHANGED_COMBINATION 0x06
404 #define HCI_LK_UNAUTH_COMBINATION_P256 0x07
405 #define HCI_LK_AUTH_COMBINATION_P256 0x08
406
407 /* ---- HCI Error Codes ---- */
408 #define HCI_ERROR_UNKNOWN_CONN_ID 0x02
409 #define HCI_ERROR_AUTH_FAILURE 0x05
410 #define HCI_ERROR_MEMORY_EXCEEDED 0x07
411 #define HCI_ERROR_CONNECTION_TIMEOUT 0x08
412 #define HCI_ERROR_REJ_LIMITED_RESOURCES 0x0d
413 #define HCI_ERROR_REJ_BAD_ADDR 0x0f
414 #define HCI_ERROR_REMOTE_USER_TERM 0x13
415 #define HCI_ERROR_REMOTE_LOW_RESOURCES 0x14
416 #define HCI_ERROR_REMOTE_POWER_OFF 0x15
417 #define HCI_ERROR_LOCAL_HOST_TERM 0x16
418 #define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18
419 #define HCI_ERROR_INVALID_LL_PARAMS 0x1E
420 #define HCI_ERROR_ADVERTISING_TIMEOUT 0x3c
421
422 /* Flow control modes */
423 #define HCI_FLOW_CTL_MODE_PACKET_BASED 0x00
424 #define HCI_FLOW_CTL_MODE_BLOCK_BASED 0x01
425
426 /* The core spec defines 127 as the "not available" value */
427 #define HCI_TX_POWER_INVALID 127
428 #define HCI_RSSI_INVALID 127
429
430 #define HCI_ROLE_MASTER 0x00
431 #define HCI_ROLE_SLAVE 0x01
432
433 /* Extended Inquiry Response field types */
434 #define EIR_FLAGS 0x01 /* flags */
435 #define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */
436 #define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */
437 #define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */
438 #define EIR_UUID32_ALL 0x05 /* 32-bit UUID, all listed */
439 #define EIR_UUID128_SOME 0x06 /* 128-bit UUID, more available */
440 #define EIR_UUID128_ALL 0x07 /* 128-bit UUID, all listed */
441 #define EIR_NAME_SHORT 0x08 /* shortened local name */
442 #define EIR_NAME_COMPLETE 0x09 /* complete local name */
443 #define EIR_TX_POWER 0x0A /* transmit power level */
444 #define EIR_CLASS_OF_DEV 0x0D /* Class of Device */
445 #define EIR_SSP_HASH_C 0x0E /* Simple Pairing Hash C */
446 #define EIR_SSP_RAND_R 0x0F /* Simple Pairing Randomizer R */
447 #define EIR_DEVICE_ID 0x10 /* device ID */
448
449 /* Low Energy Advertising Flags */
450 #define LE_AD_LIMITED 0x01 /* Limited Discoverable */
451 #define LE_AD_GENERAL 0x02 /* General Discoverable */
452 #define LE_AD_NO_BREDR 0x04 /* BR/EDR not supported */
453 #define LE_AD_SIM_LE_BREDR_CTRL 0x08 /* Simultaneous LE & BR/EDR Controller */
454 #define LE_AD_SIM_LE_BREDR_HOST 0x10 /* Simultaneous LE & BR/EDR Host */
455
456 /* ----- HCI Commands ---- */
457 #define HCI_OP_NOP 0x0000
458
459 #define HCI_OP_INQUIRY 0x0401
460 struct hci_cp_inquiry {
461 __u8 lap[3];
462 __u8 length;
463 __u8 num_rsp;
464 } __packed;
465
466 #define HCI_OP_INQUIRY_CANCEL 0x0402
467
468 #define HCI_OP_PERIODIC_INQ 0x0403
469
470 #define HCI_OP_EXIT_PERIODIC_INQ 0x0404
471
472 #define HCI_OP_CREATE_CONN 0x0405
473 struct hci_cp_create_conn {
474 bdaddr_t bdaddr;
475 __le16 pkt_type;
476 __u8 pscan_rep_mode;
477 __u8 pscan_mode;
478 __le16 clock_offset;
479 __u8 role_switch;
480 } __packed;
481
482 #define HCI_OP_DISCONNECT 0x0406
483 struct hci_cp_disconnect {
484 __le16 handle;
485 __u8 reason;
486 } __packed;
487
488 #define HCI_OP_ADD_SCO 0x0407
489 struct hci_cp_add_sco {
490 __le16 handle;
491 __le16 pkt_type;
492 } __packed;
493
494 #define HCI_OP_CREATE_CONN_CANCEL 0x0408
495 struct hci_cp_create_conn_cancel {
496 bdaddr_t bdaddr;
497 } __packed;
498
499 #define HCI_OP_ACCEPT_CONN_REQ 0x0409
500 struct hci_cp_accept_conn_req {
501 bdaddr_t bdaddr;
502 __u8 role;
503 } __packed;
504
505 #define HCI_OP_REJECT_CONN_REQ 0x040a
506 struct hci_cp_reject_conn_req {
507 bdaddr_t bdaddr;
508 __u8 reason;
509 } __packed;
510
511 #define HCI_OP_LINK_KEY_REPLY 0x040b
512 struct hci_cp_link_key_reply {
513 bdaddr_t bdaddr;
514 __u8 link_key[HCI_LINK_KEY_SIZE];
515 } __packed;
516
517 #define HCI_OP_LINK_KEY_NEG_REPLY 0x040c
518 struct hci_cp_link_key_neg_reply {
519 bdaddr_t bdaddr;
520 } __packed;
521
522 #define HCI_OP_PIN_CODE_REPLY 0x040d
523 struct hci_cp_pin_code_reply {
524 bdaddr_t bdaddr;
525 __u8 pin_len;
526 __u8 pin_code[16];
527 } __packed;
528 struct hci_rp_pin_code_reply {
529 __u8 status;
530 bdaddr_t bdaddr;
531 } __packed;
532
533 #define HCI_OP_PIN_CODE_NEG_REPLY 0x040e
534 struct hci_cp_pin_code_neg_reply {
535 bdaddr_t bdaddr;
536 } __packed;
537 struct hci_rp_pin_code_neg_reply {
538 __u8 status;
539 bdaddr_t bdaddr;
540 } __packed;
541
542 #define HCI_OP_CHANGE_CONN_PTYPE 0x040f
543 struct hci_cp_change_conn_ptype {
544 __le16 handle;
545 __le16 pkt_type;
546 } __packed;
547
548 #define HCI_OP_AUTH_REQUESTED 0x0411
549 struct hci_cp_auth_requested {
550 __le16 handle;
551 } __packed;
552
553 #define HCI_OP_SET_CONN_ENCRYPT 0x0413
554 struct hci_cp_set_conn_encrypt {
555 __le16 handle;
556 __u8 encrypt;
557 } __packed;
558
559 #define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415
560 struct hci_cp_change_conn_link_key {
561 __le16 handle;
562 } __packed;
563
564 #define HCI_OP_REMOTE_NAME_REQ 0x0419
565 struct hci_cp_remote_name_req {
566 bdaddr_t bdaddr;
567 __u8 pscan_rep_mode;
568 __u8 pscan_mode;
569 __le16 clock_offset;
570 } __packed;
571
572 #define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a
573 struct hci_cp_remote_name_req_cancel {
574 bdaddr_t bdaddr;
575 } __packed;
576
577 #define HCI_OP_READ_REMOTE_FEATURES 0x041b
578 struct hci_cp_read_remote_features {
579 __le16 handle;
580 } __packed;
581
582 #define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
583 struct hci_cp_read_remote_ext_features {
584 __le16 handle;
585 __u8 page;
586 } __packed;
587
588 #define HCI_OP_READ_REMOTE_VERSION 0x041d
589 struct hci_cp_read_remote_version {
590 __le16 handle;
591 } __packed;
592
593 #define HCI_OP_READ_CLOCK_OFFSET 0x041f
594 struct hci_cp_read_clock_offset {
595 __le16 handle;
596 } __packed;
597
598 #define HCI_OP_SETUP_SYNC_CONN 0x0428
599 struct hci_cp_setup_sync_conn {
600 __le16 handle;
601 __le32 tx_bandwidth;
602 __le32 rx_bandwidth;
603 __le16 max_latency;
604 __le16 voice_setting;
605 __u8 retrans_effort;
606 __le16 pkt_type;
607 } __packed;
608
609 #define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429
610 struct hci_cp_accept_sync_conn_req {
611 bdaddr_t bdaddr;
612 __le32 tx_bandwidth;
613 __le32 rx_bandwidth;
614 __le16 max_latency;
615 __le16 content_format;
616 __u8 retrans_effort;
617 __le16 pkt_type;
618 } __packed;
619
620 #define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a
621 struct hci_cp_reject_sync_conn_req {
622 bdaddr_t bdaddr;
623 __u8 reason;
624 } __packed;
625
626 #define HCI_OP_IO_CAPABILITY_REPLY 0x042b
627 struct hci_cp_io_capability_reply {
628 bdaddr_t bdaddr;
629 __u8 capability;
630 __u8 oob_data;
631 __u8 authentication;
632 } __packed;
633
634 #define HCI_OP_USER_CONFIRM_REPLY 0x042c
635 struct hci_cp_user_confirm_reply {
636 bdaddr_t bdaddr;
637 } __packed;
638 struct hci_rp_user_confirm_reply {
639 __u8 status;
640 bdaddr_t bdaddr;
641 } __packed;
642
643 #define HCI_OP_USER_CONFIRM_NEG_REPLY 0x042d
644
645 #define HCI_OP_USER_PASSKEY_REPLY 0x042e
646 struct hci_cp_user_passkey_reply {
647 bdaddr_t bdaddr;
648 __le32 passkey;
649 } __packed;
650
651 #define HCI_OP_USER_PASSKEY_NEG_REPLY 0x042f
652
653 #define HCI_OP_REMOTE_OOB_DATA_REPLY 0x0430
654 struct hci_cp_remote_oob_data_reply {
655 bdaddr_t bdaddr;
656 __u8 hash[16];
657 __u8 rand[16];
658 } __packed;
659
660 #define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY 0x0433
661 struct hci_cp_remote_oob_data_neg_reply {
662 bdaddr_t bdaddr;
663 } __packed;
664
665 #define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434
666 struct hci_cp_io_capability_neg_reply {
667 bdaddr_t bdaddr;
668 __u8 reason;
669 } __packed;
670
671 #define HCI_OP_CREATE_PHY_LINK 0x0435
672 struct hci_cp_create_phy_link {
673 __u8 phy_handle;
674 __u8 key_len;
675 __u8 key_type;
676 __u8 key[HCI_AMP_LINK_KEY_SIZE];
677 } __packed;
678
679 #define HCI_OP_ACCEPT_PHY_LINK 0x0436
680 struct hci_cp_accept_phy_link {
681 __u8 phy_handle;
682 __u8 key_len;
683 __u8 key_type;
684 __u8 key[HCI_AMP_LINK_KEY_SIZE];
685 } __packed;
686
687 #define HCI_OP_DISCONN_PHY_LINK 0x0437
688 struct hci_cp_disconn_phy_link {
689 __u8 phy_handle;
690 __u8 reason;
691 } __packed;
692
693 struct ext_flow_spec {
694 __u8 id;
695 __u8 stype;
696 __le16 msdu;
697 __le32 sdu_itime;
698 __le32 acc_lat;
699 __le32 flush_to;
700 } __packed;
701
702 #define HCI_OP_CREATE_LOGICAL_LINK 0x0438
703 #define HCI_OP_ACCEPT_LOGICAL_LINK 0x0439
704 struct hci_cp_create_accept_logical_link {
705 __u8 phy_handle;
706 struct ext_flow_spec tx_flow_spec;
707 struct ext_flow_spec rx_flow_spec;
708 } __packed;
709
710 #define HCI_OP_DISCONN_LOGICAL_LINK 0x043a
711 struct hci_cp_disconn_logical_link {
712 __le16 log_handle;
713 } __packed;
714
715 #define HCI_OP_LOGICAL_LINK_CANCEL 0x043b
716 struct hci_cp_logical_link_cancel {
717 __u8 phy_handle;
718 __u8 flow_spec_id;
719 } __packed;
720
721 struct hci_rp_logical_link_cancel {
722 __u8 status;
723 __u8 phy_handle;
724 __u8 flow_spec_id;
725 } __packed;
726
727 #define HCI_OP_SET_CSB 0x0441
728 struct hci_cp_set_csb {
729 __u8 enable;
730 __u8 lt_addr;
731 __u8 lpo_allowed;
732 __le16 packet_type;
733 __le16 interval_min;
734 __le16 interval_max;
735 __le16 csb_sv_tout;
736 } __packed;
737 struct hci_rp_set_csb {
738 __u8 status;
739 __u8 lt_addr;
740 __le16 interval;
741 } __packed;
742
743 #define HCI_OP_START_SYNC_TRAIN 0x0443
744
745 #define HCI_OP_REMOTE_OOB_EXT_DATA_REPLY 0x0445
746 struct hci_cp_remote_oob_ext_data_reply {
747 bdaddr_t bdaddr;
748 __u8 hash192[16];
749 __u8 rand192[16];
750 __u8 hash256[16];
751 __u8 rand256[16];
752 } __packed;
753
754 #define HCI_OP_SNIFF_MODE 0x0803
755 struct hci_cp_sniff_mode {
756 __le16 handle;
757 __le16 max_interval;
758 __le16 min_interval;
759 __le16 attempt;
760 __le16 timeout;
761 } __packed;
762
763 #define HCI_OP_EXIT_SNIFF_MODE 0x0804
764 struct hci_cp_exit_sniff_mode {
765 __le16 handle;
766 } __packed;
767
768 #define HCI_OP_ROLE_DISCOVERY 0x0809
769 struct hci_cp_role_discovery {
770 __le16 handle;
771 } __packed;
772 struct hci_rp_role_discovery {
773 __u8 status;
774 __le16 handle;
775 __u8 role;
776 } __packed;
777
778 #define HCI_OP_SWITCH_ROLE 0x080b
779 struct hci_cp_switch_role {
780 bdaddr_t bdaddr;
781 __u8 role;
782 } __packed;
783
784 #define HCI_OP_READ_LINK_POLICY 0x080c
785 struct hci_cp_read_link_policy {
786 __le16 handle;
787 } __packed;
788 struct hci_rp_read_link_policy {
789 __u8 status;
790 __le16 handle;
791 __le16 policy;
792 } __packed;
793
794 #define HCI_OP_WRITE_LINK_POLICY 0x080d
795 struct hci_cp_write_link_policy {
796 __le16 handle;
797 __le16 policy;
798 } __packed;
799 struct hci_rp_write_link_policy {
800 __u8 status;
801 __le16 handle;
802 } __packed;
803
804 #define HCI_OP_READ_DEF_LINK_POLICY 0x080e
805 struct hci_rp_read_def_link_policy {
806 __u8 status;
807 __le16 policy;
808 } __packed;
809
810 #define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f
811 struct hci_cp_write_def_link_policy {
812 __le16 policy;
813 } __packed;
814
815 #define HCI_OP_SNIFF_SUBRATE 0x0811
816 struct hci_cp_sniff_subrate {
817 __le16 handle;
818 __le16 max_latency;
819 __le16 min_remote_timeout;
820 __le16 min_local_timeout;
821 } __packed;
822
823 #define HCI_OP_SET_EVENT_MASK 0x0c01
824
825 #define HCI_OP_RESET 0x0c03
826
827 #define HCI_OP_SET_EVENT_FLT 0x0c05
828 struct hci_cp_set_event_flt {
829 __u8 flt_type;
830 __u8 cond_type;
831 __u8 condition[0];
832 } __packed;
833
834 /* Filter types */
835 #define HCI_FLT_CLEAR_ALL 0x00
836 #define HCI_FLT_INQ_RESULT 0x01
837 #define HCI_FLT_CONN_SETUP 0x02
838
839 /* CONN_SETUP Condition types */
840 #define HCI_CONN_SETUP_ALLOW_ALL 0x00
841 #define HCI_CONN_SETUP_ALLOW_CLASS 0x01
842 #define HCI_CONN_SETUP_ALLOW_BDADDR 0x02
843
844 /* CONN_SETUP Conditions */
845 #define HCI_CONN_SETUP_AUTO_OFF 0x01
846 #define HCI_CONN_SETUP_AUTO_ON 0x02
847
848 #define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12
849 struct hci_cp_delete_stored_link_key {
850 bdaddr_t bdaddr;
851 __u8 delete_all;
852 } __packed;
853
854 #define HCI_MAX_NAME_LENGTH 248
855
856 #define HCI_OP_WRITE_LOCAL_NAME 0x0c13
857 struct hci_cp_write_local_name {
858 __u8 name[HCI_MAX_NAME_LENGTH];
859 } __packed;
860
861 #define HCI_OP_READ_LOCAL_NAME 0x0c14
862 struct hci_rp_read_local_name {
863 __u8 status;
864 __u8 name[HCI_MAX_NAME_LENGTH];
865 } __packed;
866
867 #define HCI_OP_WRITE_CA_TIMEOUT 0x0c16
868
869 #define HCI_OP_WRITE_PG_TIMEOUT 0x0c18
870
871 #define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a
872 #define SCAN_DISABLED 0x00
873 #define SCAN_INQUIRY 0x01
874 #define SCAN_PAGE 0x02
875
876 #define HCI_OP_READ_AUTH_ENABLE 0x0c1f
877
878 #define HCI_OP_WRITE_AUTH_ENABLE 0x0c20
879 #define AUTH_DISABLED 0x00
880 #define AUTH_ENABLED 0x01
881
882 #define HCI_OP_READ_ENCRYPT_MODE 0x0c21
883
884 #define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22
885 #define ENCRYPT_DISABLED 0x00
886 #define ENCRYPT_P2P 0x01
887 #define ENCRYPT_BOTH 0x02
888
889 #define HCI_OP_READ_CLASS_OF_DEV 0x0c23
890 struct hci_rp_read_class_of_dev {
891 __u8 status;
892 __u8 dev_class[3];
893 } __packed;
894
895 #define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24
896 struct hci_cp_write_class_of_dev {
897 __u8 dev_class[3];
898 } __packed;
899
900 #define HCI_OP_READ_VOICE_SETTING 0x0c25
901 struct hci_rp_read_voice_setting {
902 __u8 status;
903 __le16 voice_setting;
904 } __packed;
905
906 #define HCI_OP_WRITE_VOICE_SETTING 0x0c26
907 struct hci_cp_write_voice_setting {
908 __le16 voice_setting;
909 } __packed;
910
911 #define HCI_OP_HOST_BUFFER_SIZE 0x0c33
912 struct hci_cp_host_buffer_size {
913 __le16 acl_mtu;
914 __u8 sco_mtu;
915 __le16 acl_max_pkt;
916 __le16 sco_max_pkt;
917 } __packed;
918
919 #define HCI_OP_READ_NUM_SUPPORTED_IAC 0x0c38
920 struct hci_rp_read_num_supported_iac {
921 __u8 status;
922 __u8 num_iac;
923 } __packed;
924
925 #define HCI_OP_READ_CURRENT_IAC_LAP 0x0c39
926
927 #define HCI_OP_WRITE_CURRENT_IAC_LAP 0x0c3a
928 struct hci_cp_write_current_iac_lap {
929 __u8 num_iac;
930 __u8 iac_lap[6];
931 } __packed;
932
933 #define HCI_OP_WRITE_INQUIRY_MODE 0x0c45
934
935 #define HCI_MAX_EIR_LENGTH 240
936
937 #define HCI_OP_WRITE_EIR 0x0c52
938 struct hci_cp_write_eir {
939 __u8 fec;
940 __u8 data[HCI_MAX_EIR_LENGTH];
941 } __packed;
942
943 #define HCI_OP_READ_SSP_MODE 0x0c55
944 struct hci_rp_read_ssp_mode {
945 __u8 status;
946 __u8 mode;
947 } __packed;
948
949 #define HCI_OP_WRITE_SSP_MODE 0x0c56
950 struct hci_cp_write_ssp_mode {
951 __u8 mode;
952 } __packed;
953
954 #define HCI_OP_READ_LOCAL_OOB_DATA 0x0c57
955 struct hci_rp_read_local_oob_data {
956 __u8 status;
957 __u8 hash[16];
958 __u8 rand[16];
959 } __packed;
960
961 #define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58
962 struct hci_rp_read_inq_rsp_tx_power {
963 __u8 status;
964 __s8 tx_power;
965 } __packed;
966
967 #define HCI_OP_SET_EVENT_MASK_PAGE_2 0x0c63
968
969 #define HCI_OP_READ_LOCATION_DATA 0x0c64
970
971 #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66
972 struct hci_rp_read_flow_control_mode {
973 __u8 status;
974 __u8 mode;
975 } __packed;
976
977 #define HCI_OP_WRITE_LE_HOST_SUPPORTED 0x0c6d
978 struct hci_cp_write_le_host_supported {
979 __u8 le;
980 __u8 simul;
981 } __packed;
982
983 #define HCI_OP_SET_RESERVED_LT_ADDR 0x0c74
984 struct hci_cp_set_reserved_lt_addr {
985 __u8 lt_addr;
986 } __packed;
987 struct hci_rp_set_reserved_lt_addr {
988 __u8 status;
989 __u8 lt_addr;
990 } __packed;
991
992 #define HCI_OP_DELETE_RESERVED_LT_ADDR 0x0c75
993 struct hci_cp_delete_reserved_lt_addr {
994 __u8 lt_addr;
995 } __packed;
996 struct hci_rp_delete_reserved_lt_addr {
997 __u8 status;
998 __u8 lt_addr;
999 } __packed;
1000
1001 #define HCI_OP_SET_CSB_DATA 0x0c76
1002 struct hci_cp_set_csb_data {
1003 __u8 lt_addr;
1004 __u8 fragment;
1005 __u8 data_length;
1006 __u8 data[HCI_MAX_CSB_DATA_SIZE];
1007 } __packed;
1008 struct hci_rp_set_csb_data {
1009 __u8 status;
1010 __u8 lt_addr;
1011 } __packed;
1012
1013 #define HCI_OP_READ_SYNC_TRAIN_PARAMS 0x0c77
1014
1015 #define HCI_OP_WRITE_SYNC_TRAIN_PARAMS 0x0c78
1016 struct hci_cp_write_sync_train_params {
1017 __le16 interval_min;
1018 __le16 interval_max;
1019 __le32 sync_train_tout;
1020 __u8 service_data;
1021 } __packed;
1022 struct hci_rp_write_sync_train_params {
1023 __u8 status;
1024 __le16 sync_train_int;
1025 } __packed;
1026
1027 #define HCI_OP_READ_SC_SUPPORT 0x0c79
1028 struct hci_rp_read_sc_support {
1029 __u8 status;
1030 __u8 support;
1031 } __packed;
1032
1033 #define HCI_OP_WRITE_SC_SUPPORT 0x0c7a
1034 struct hci_cp_write_sc_support {
1035 __u8 support;
1036 } __packed;
1037
1038 #define HCI_OP_READ_LOCAL_OOB_EXT_DATA 0x0c7d
1039 struct hci_rp_read_local_oob_ext_data {
1040 __u8 status;
1041 __u8 hash192[16];
1042 __u8 rand192[16];
1043 __u8 hash256[16];
1044 __u8 rand256[16];
1045 } __packed;
1046
1047 #define HCI_OP_READ_LOCAL_VERSION 0x1001
1048 struct hci_rp_read_local_version {
1049 __u8 status;
1050 __u8 hci_ver;
1051 __le16 hci_rev;
1052 __u8 lmp_ver;
1053 __le16 manufacturer;
1054 __le16 lmp_subver;
1055 } __packed;
1056
1057 #define HCI_OP_READ_LOCAL_COMMANDS 0x1002
1058 struct hci_rp_read_local_commands {
1059 __u8 status;
1060 __u8 commands[64];
1061 } __packed;
1062
1063 #define HCI_OP_READ_LOCAL_FEATURES 0x1003
1064 struct hci_rp_read_local_features {
1065 __u8 status;
1066 __u8 features[8];
1067 } __packed;
1068
1069 #define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004
1070 struct hci_cp_read_local_ext_features {
1071 __u8 page;
1072 } __packed;
1073 struct hci_rp_read_local_ext_features {
1074 __u8 status;
1075 __u8 page;
1076 __u8 max_page;
1077 __u8 features[8];
1078 } __packed;
1079
1080 #define HCI_OP_READ_BUFFER_SIZE 0x1005
1081 struct hci_rp_read_buffer_size {
1082 __u8 status;
1083 __le16 acl_mtu;
1084 __u8 sco_mtu;
1085 __le16 acl_max_pkt;
1086 __le16 sco_max_pkt;
1087 } __packed;
1088
1089 #define HCI_OP_READ_BD_ADDR 0x1009
1090 struct hci_rp_read_bd_addr {
1091 __u8 status;
1092 bdaddr_t bdaddr;
1093 } __packed;
1094
1095 #define HCI_OP_READ_DATA_BLOCK_SIZE 0x100a
1096 struct hci_rp_read_data_block_size {
1097 __u8 status;
1098 __le16 max_acl_len;
1099 __le16 block_len;
1100 __le16 num_blocks;
1101 } __packed;
1102
1103 #define HCI_OP_READ_LOCAL_CODECS 0x100b
1104
1105 #define HCI_OP_READ_PAGE_SCAN_ACTIVITY 0x0c1b
1106 struct hci_rp_read_page_scan_activity {
1107 __u8 status;
1108 __le16 interval;
1109 __le16 window;
1110 } __packed;
1111
1112 #define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
1113 struct hci_cp_write_page_scan_activity {
1114 __le16 interval;
1115 __le16 window;
1116 } __packed;
1117
1118 #define HCI_OP_READ_TX_POWER 0x0c2d
1119 struct hci_cp_read_tx_power {
1120 __le16 handle;
1121 __u8 type;
1122 } __packed;
1123 struct hci_rp_read_tx_power {
1124 __u8 status;
1125 __le16 handle;
1126 __s8 tx_power;
1127 } __packed;
1128
1129 #define HCI_OP_READ_PAGE_SCAN_TYPE 0x0c46
1130 struct hci_rp_read_page_scan_type {
1131 __u8 status;
1132 __u8 type;
1133 } __packed;
1134
1135 #define HCI_OP_WRITE_PAGE_SCAN_TYPE 0x0c47
1136 #define PAGE_SCAN_TYPE_STANDARD 0x00
1137 #define PAGE_SCAN_TYPE_INTERLACED 0x01
1138
1139 #define HCI_OP_READ_RSSI 0x1405
1140 struct hci_cp_read_rssi {
1141 __le16 handle;
1142 } __packed;
1143 struct hci_rp_read_rssi {
1144 __u8 status;
1145 __le16 handle;
1146 __s8 rssi;
1147 } __packed;
1148
1149 #define HCI_OP_READ_CLOCK 0x1407
1150 struct hci_cp_read_clock {
1151 __le16 handle;
1152 __u8 which;
1153 } __packed;
1154 struct hci_rp_read_clock {
1155 __u8 status;
1156 __le16 handle;
1157 __le32 clock;
1158 __le16 accuracy;
1159 } __packed;
1160
1161 #define HCI_OP_READ_LOCAL_AMP_INFO 0x1409
1162 struct hci_rp_read_local_amp_info {
1163 __u8 status;
1164 __u8 amp_status;
1165 __le32 total_bw;
1166 __le32 max_bw;
1167 __le32 min_latency;
1168 __le32 max_pdu;
1169 __u8 amp_type;
1170 __le16 pal_cap;
1171 __le16 max_assoc_size;
1172 __le32 max_flush_to;
1173 __le32 be_flush_to;
1174 } __packed;
1175
1176 #define HCI_OP_READ_LOCAL_AMP_ASSOC 0x140a
1177 struct hci_cp_read_local_amp_assoc {
1178 __u8 phy_handle;
1179 __le16 len_so_far;
1180 __le16 max_len;
1181 } __packed;
1182 struct hci_rp_read_local_amp_assoc {
1183 __u8 status;
1184 __u8 phy_handle;
1185 __le16 rem_len;
1186 __u8 frag[0];
1187 } __packed;
1188
1189 #define HCI_OP_WRITE_REMOTE_AMP_ASSOC 0x140b
1190 struct hci_cp_write_remote_amp_assoc {
1191 __u8 phy_handle;
1192 __le16 len_so_far;
1193 __le16 rem_len;
1194 __u8 frag[0];
1195 } __packed;
1196 struct hci_rp_write_remote_amp_assoc {
1197 __u8 status;
1198 __u8 phy_handle;
1199 } __packed;
1200
1201 #define HCI_OP_GET_MWS_TRANSPORT_CONFIG 0x140c
1202
1203 #define HCI_OP_ENABLE_DUT_MODE 0x1803
1204
1205 #define HCI_OP_WRITE_SSP_DEBUG_MODE 0x1804
1206
1207 #define HCI_OP_LE_SET_EVENT_MASK 0x2001
1208 struct hci_cp_le_set_event_mask {
1209 __u8 mask[8];
1210 } __packed;
1211
1212 #define HCI_OP_LE_READ_BUFFER_SIZE 0x2002
1213 struct hci_rp_le_read_buffer_size {
1214 __u8 status;
1215 __le16 le_mtu;
1216 __u8 le_max_pkt;
1217 } __packed;
1218
1219 #define HCI_OP_LE_READ_LOCAL_FEATURES 0x2003
1220 struct hci_rp_le_read_local_features {
1221 __u8 status;
1222 __u8 features[8];
1223 } __packed;
1224
1225 #define HCI_OP_LE_SET_RANDOM_ADDR 0x2005
1226
1227 #define HCI_OP_LE_SET_ADV_PARAM 0x2006
1228 struct hci_cp_le_set_adv_param {
1229 __le16 min_interval;
1230 __le16 max_interval;
1231 __u8 type;
1232 __u8 own_address_type;
1233 __u8 direct_addr_type;
1234 bdaddr_t direct_addr;
1235 __u8 channel_map;
1236 __u8 filter_policy;
1237 } __packed;
1238
1239 #define HCI_OP_LE_READ_ADV_TX_POWER 0x2007
1240 struct hci_rp_le_read_adv_tx_power {
1241 __u8 status;
1242 __s8 tx_power;
1243 } __packed;
1244
1245 #define HCI_MAX_AD_LENGTH 31
1246
1247 #define HCI_OP_LE_SET_ADV_DATA 0x2008
1248 struct hci_cp_le_set_adv_data {
1249 __u8 length;
1250 __u8 data[HCI_MAX_AD_LENGTH];
1251 } __packed;
1252
1253 #define HCI_OP_LE_SET_SCAN_RSP_DATA 0x2009
1254 struct hci_cp_le_set_scan_rsp_data {
1255 __u8 length;
1256 __u8 data[HCI_MAX_AD_LENGTH];
1257 } __packed;
1258
1259 #define HCI_OP_LE_SET_ADV_ENABLE 0x200a
1260
1261 #define LE_SCAN_PASSIVE 0x00
1262 #define LE_SCAN_ACTIVE 0x01
1263
1264 #define HCI_OP_LE_SET_SCAN_PARAM 0x200b
1265 struct hci_cp_le_set_scan_param {
1266 __u8 type;
1267 __le16 interval;
1268 __le16 window;
1269 __u8 own_address_type;
1270 __u8 filter_policy;
1271 } __packed;
1272
1273 #define LE_SCAN_DISABLE 0x00
1274 #define LE_SCAN_ENABLE 0x01
1275 #define LE_SCAN_FILTER_DUP_DISABLE 0x00
1276 #define LE_SCAN_FILTER_DUP_ENABLE 0x01
1277
1278 #define HCI_OP_LE_SET_SCAN_ENABLE 0x200c
1279 struct hci_cp_le_set_scan_enable {
1280 __u8 enable;
1281 __u8 filter_dup;
1282 } __packed;
1283
1284 #define HCI_LE_USE_PEER_ADDR 0x00
1285 #define HCI_LE_USE_WHITELIST 0x01
1286
1287 #define HCI_OP_LE_CREATE_CONN 0x200d
1288 struct hci_cp_le_create_conn {
1289 __le16 scan_interval;
1290 __le16 scan_window;
1291 __u8 filter_policy;
1292 __u8 peer_addr_type;
1293 bdaddr_t peer_addr;
1294 __u8 own_address_type;
1295 __le16 conn_interval_min;
1296 __le16 conn_interval_max;
1297 __le16 conn_latency;
1298 __le16 supervision_timeout;
1299 __le16 min_ce_len;
1300 __le16 max_ce_len;
1301 } __packed;
1302
1303 #define HCI_OP_LE_CREATE_CONN_CANCEL 0x200e
1304
1305 #define HCI_OP_LE_READ_WHITE_LIST_SIZE 0x200f
1306 struct hci_rp_le_read_white_list_size {
1307 __u8 status;
1308 __u8 size;
1309 } __packed;
1310
1311 #define HCI_OP_LE_CLEAR_WHITE_LIST 0x2010
1312
1313 #define HCI_OP_LE_ADD_TO_WHITE_LIST 0x2011
1314 struct hci_cp_le_add_to_white_list {
1315 __u8 bdaddr_type;
1316 bdaddr_t bdaddr;
1317 } __packed;
1318
1319 #define HCI_OP_LE_DEL_FROM_WHITE_LIST 0x2012
1320 struct hci_cp_le_del_from_white_list {
1321 __u8 bdaddr_type;
1322 bdaddr_t bdaddr;
1323 } __packed;
1324
1325 #define HCI_OP_LE_CONN_UPDATE 0x2013
1326 struct hci_cp_le_conn_update {
1327 __le16 handle;
1328 __le16 conn_interval_min;
1329 __le16 conn_interval_max;
1330 __le16 conn_latency;
1331 __le16 supervision_timeout;
1332 __le16 min_ce_len;
1333 __le16 max_ce_len;
1334 } __packed;
1335
1336 #define HCI_OP_LE_START_ENC 0x2019
1337 struct hci_cp_le_start_enc {
1338 __le16 handle;
1339 __le64 rand;
1340 __le16 ediv;
1341 __u8 ltk[16];
1342 } __packed;
1343
1344 #define HCI_OP_LE_LTK_REPLY 0x201a
1345 struct hci_cp_le_ltk_reply {
1346 __le16 handle;
1347 __u8 ltk[16];
1348 } __packed;
1349 struct hci_rp_le_ltk_reply {
1350 __u8 status;
1351 __le16 handle;
1352 } __packed;
1353
1354 #define HCI_OP_LE_LTK_NEG_REPLY 0x201b
1355 struct hci_cp_le_ltk_neg_reply {
1356 __le16 handle;
1357 } __packed;
1358 struct hci_rp_le_ltk_neg_reply {
1359 __u8 status;
1360 __le16 handle;
1361 } __packed;
1362
1363 #define HCI_OP_LE_READ_SUPPORTED_STATES 0x201c
1364 struct hci_rp_le_read_supported_states {
1365 __u8 status;
1366 __u8 le_states[8];
1367 } __packed;
1368
1369 #define HCI_OP_LE_CONN_PARAM_REQ_REPLY 0x2020
1370 struct hci_cp_le_conn_param_req_reply {
1371 __le16 handle;
1372 __le16 interval_min;
1373 __le16 interval_max;
1374 __le16 latency;
1375 __le16 timeout;
1376 __le16 min_ce_len;
1377 __le16 max_ce_len;
1378 } __packed;
1379
1380 #define HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY 0x2021
1381 struct hci_cp_le_conn_param_req_neg_reply {
1382 __le16 handle;
1383 __u8 reason;
1384 } __packed;
1385
1386 #define HCI_OP_LE_SET_DATA_LEN 0x2022
1387 struct hci_cp_le_set_data_len {
1388 __le16 handle;
1389 __le16 tx_len;
1390 __le16 tx_time;
1391 } __packed;
1392 struct hci_rp_le_set_data_len {
1393 __u8 status;
1394 __le16 handle;
1395 } __packed;
1396
1397 #define HCI_OP_LE_READ_DEF_DATA_LEN 0x2023
1398 struct hci_rp_le_read_def_data_len {
1399 __u8 status;
1400 __le16 tx_len;
1401 __le16 tx_time;
1402 } __packed;
1403
1404 #define HCI_OP_LE_WRITE_DEF_DATA_LEN 0x2024
1405 struct hci_cp_le_write_def_data_len {
1406 __le16 tx_len;
1407 __le16 tx_time;
1408 } __packed;
1409
1410 #define HCI_OP_LE_READ_MAX_DATA_LEN 0x202f
1411 struct hci_rp_le_read_max_data_len {
1412 __u8 status;
1413 __le16 tx_len;
1414 __le16 tx_time;
1415 __le16 rx_len;
1416 __le16 rx_time;
1417 } __packed;
1418
1419 /* ---- HCI Events ---- */
1420 #define HCI_EV_INQUIRY_COMPLETE 0x01
1421
1422 #define HCI_EV_INQUIRY_RESULT 0x02
1423 struct inquiry_info {
1424 bdaddr_t bdaddr;
1425 __u8 pscan_rep_mode;
1426 __u8 pscan_period_mode;
1427 __u8 pscan_mode;
1428 __u8 dev_class[3];
1429 __le16 clock_offset;
1430 } __packed;
1431
1432 #define HCI_EV_CONN_COMPLETE 0x03
1433 struct hci_ev_conn_complete {
1434 __u8 status;
1435 __le16 handle;
1436 bdaddr_t bdaddr;
1437 __u8 link_type;
1438 __u8 encr_mode;
1439 } __packed;
1440
1441 #define HCI_EV_CONN_REQUEST 0x04
1442 struct hci_ev_conn_request {
1443 bdaddr_t bdaddr;
1444 __u8 dev_class[3];
1445 __u8 link_type;
1446 } __packed;
1447
1448 #define HCI_EV_DISCONN_COMPLETE 0x05
1449 struct hci_ev_disconn_complete {
1450 __u8 status;
1451 __le16 handle;
1452 __u8 reason;
1453 } __packed;
1454
1455 #define HCI_EV_AUTH_COMPLETE 0x06
1456 struct hci_ev_auth_complete {
1457 __u8 status;
1458 __le16 handle;
1459 } __packed;
1460
1461 #define HCI_EV_REMOTE_NAME 0x07
1462 struct hci_ev_remote_name {
1463 __u8 status;
1464 bdaddr_t bdaddr;
1465 __u8 name[HCI_MAX_NAME_LENGTH];
1466 } __packed;
1467
1468 #define HCI_EV_ENCRYPT_CHANGE 0x08
1469 struct hci_ev_encrypt_change {
1470 __u8 status;
1471 __le16 handle;
1472 __u8 encrypt;
1473 } __packed;
1474
1475 #define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
1476 struct hci_ev_change_link_key_complete {
1477 __u8 status;
1478 __le16 handle;
1479 } __packed;
1480
1481 #define HCI_EV_REMOTE_FEATURES 0x0b
1482 struct hci_ev_remote_features {
1483 __u8 status;
1484 __le16 handle;
1485 __u8 features[8];
1486 } __packed;
1487
1488 #define HCI_EV_REMOTE_VERSION 0x0c
1489 struct hci_ev_remote_version {
1490 __u8 status;
1491 __le16 handle;
1492 __u8 lmp_ver;
1493 __le16 manufacturer;
1494 __le16 lmp_subver;
1495 } __packed;
1496
1497 #define HCI_EV_QOS_SETUP_COMPLETE 0x0d
1498 struct hci_qos {
1499 __u8 service_type;
1500 __u32 token_rate;
1501 __u32 peak_bandwidth;
1502 __u32 latency;
1503 __u32 delay_variation;
1504 } __packed;
1505 struct hci_ev_qos_setup_complete {
1506 __u8 status;
1507 __le16 handle;
1508 struct hci_qos qos;
1509 } __packed;
1510
1511 #define HCI_EV_CMD_COMPLETE 0x0e
1512 struct hci_ev_cmd_complete {
1513 __u8 ncmd;
1514 __le16 opcode;
1515 } __packed;
1516
1517 #define HCI_EV_CMD_STATUS 0x0f
1518 struct hci_ev_cmd_status {
1519 __u8 status;
1520 __u8 ncmd;
1521 __le16 opcode;
1522 } __packed;
1523
1524 #define HCI_EV_HARDWARE_ERROR 0x10
1525 struct hci_ev_hardware_error {
1526 __u8 code;
1527 } __packed;
1528
1529 #define HCI_EV_ROLE_CHANGE 0x12
1530 struct hci_ev_role_change {
1531 __u8 status;
1532 bdaddr_t bdaddr;
1533 __u8 role;
1534 } __packed;
1535
1536 #define HCI_EV_NUM_COMP_PKTS 0x13
1537 struct hci_comp_pkts_info {
1538 __le16 handle;
1539 __le16 count;
1540 } __packed;
1541
1542 struct hci_ev_num_comp_pkts {
1543 __u8 num_hndl;
1544 struct hci_comp_pkts_info handles[0];
1545 } __packed;
1546
1547 #define HCI_EV_MODE_CHANGE 0x14
1548 struct hci_ev_mode_change {
1549 __u8 status;
1550 __le16 handle;
1551 __u8 mode;
1552 __le16 interval;
1553 } __packed;
1554
1555 #define HCI_EV_PIN_CODE_REQ 0x16
1556 struct hci_ev_pin_code_req {
1557 bdaddr_t bdaddr;
1558 } __packed;
1559
1560 #define HCI_EV_LINK_KEY_REQ 0x17
1561 struct hci_ev_link_key_req {
1562 bdaddr_t bdaddr;
1563 } __packed;
1564
1565 #define HCI_EV_LINK_KEY_NOTIFY 0x18
1566 struct hci_ev_link_key_notify {
1567 bdaddr_t bdaddr;
1568 __u8 link_key[HCI_LINK_KEY_SIZE];
1569 __u8 key_type;
1570 } __packed;
1571
1572 #define HCI_EV_CLOCK_OFFSET 0x1c
1573 struct hci_ev_clock_offset {
1574 __u8 status;
1575 __le16 handle;
1576 __le16 clock_offset;
1577 } __packed;
1578
1579 #define HCI_EV_PKT_TYPE_CHANGE 0x1d
1580 struct hci_ev_pkt_type_change {
1581 __u8 status;
1582 __le16 handle;
1583 __le16 pkt_type;
1584 } __packed;
1585
1586 #define HCI_EV_PSCAN_REP_MODE 0x20
1587 struct hci_ev_pscan_rep_mode {
1588 bdaddr_t bdaddr;
1589 __u8 pscan_rep_mode;
1590 } __packed;
1591
1592 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
1593 struct inquiry_info_with_rssi {
1594 bdaddr_t bdaddr;
1595 __u8 pscan_rep_mode;
1596 __u8 pscan_period_mode;
1597 __u8 dev_class[3];
1598 __le16 clock_offset;
1599 __s8 rssi;
1600 } __packed;
1601 struct inquiry_info_with_rssi_and_pscan_mode {
1602 bdaddr_t bdaddr;
1603 __u8 pscan_rep_mode;
1604 __u8 pscan_period_mode;
1605 __u8 pscan_mode;
1606 __u8 dev_class[3];
1607 __le16 clock_offset;
1608 __s8 rssi;
1609 } __packed;
1610
1611 #define HCI_EV_REMOTE_EXT_FEATURES 0x23
1612 struct hci_ev_remote_ext_features {
1613 __u8 status;
1614 __le16 handle;
1615 __u8 page;
1616 __u8 max_page;
1617 __u8 features[8];
1618 } __packed;
1619
1620 #define HCI_EV_SYNC_CONN_COMPLETE 0x2c
1621 struct hci_ev_sync_conn_complete {
1622 __u8 status;
1623 __le16 handle;
1624 bdaddr_t bdaddr;
1625 __u8 link_type;
1626 __u8 tx_interval;
1627 __u8 retrans_window;
1628 __le16 rx_pkt_len;
1629 __le16 tx_pkt_len;
1630 __u8 air_mode;
1631 } __packed;
1632
1633 #define HCI_EV_SYNC_CONN_CHANGED 0x2d
1634 struct hci_ev_sync_conn_changed {
1635 __u8 status;
1636 __le16 handle;
1637 __u8 tx_interval;
1638 __u8 retrans_window;
1639 __le16 rx_pkt_len;
1640 __le16 tx_pkt_len;
1641 } __packed;
1642
1643 #define HCI_EV_SNIFF_SUBRATE 0x2e
1644 struct hci_ev_sniff_subrate {
1645 __u8 status;
1646 __le16 handle;
1647 __le16 max_tx_latency;
1648 __le16 max_rx_latency;
1649 __le16 max_remote_timeout;
1650 __le16 max_local_timeout;
1651 } __packed;
1652
1653 #define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f
1654 struct extended_inquiry_info {
1655 bdaddr_t bdaddr;
1656 __u8 pscan_rep_mode;
1657 __u8 pscan_period_mode;
1658 __u8 dev_class[3];
1659 __le16 clock_offset;
1660 __s8 rssi;
1661 __u8 data[240];
1662 } __packed;
1663
1664 #define HCI_EV_KEY_REFRESH_COMPLETE 0x30
1665 struct hci_ev_key_refresh_complete {
1666 __u8 status;
1667 __le16 handle;
1668 } __packed;
1669
1670 #define HCI_EV_IO_CAPA_REQUEST 0x31
1671 struct hci_ev_io_capa_request {
1672 bdaddr_t bdaddr;
1673 } __packed;
1674
1675 #define HCI_EV_IO_CAPA_REPLY 0x32
1676 struct hci_ev_io_capa_reply {
1677 bdaddr_t bdaddr;
1678 __u8 capability;
1679 __u8 oob_data;
1680 __u8 authentication;
1681 } __packed;
1682
1683 #define HCI_EV_USER_CONFIRM_REQUEST 0x33
1684 struct hci_ev_user_confirm_req {
1685 bdaddr_t bdaddr;
1686 __le32 passkey;
1687 } __packed;
1688
1689 #define HCI_EV_USER_PASSKEY_REQUEST 0x34
1690 struct hci_ev_user_passkey_req {
1691 bdaddr_t bdaddr;
1692 } __packed;
1693
1694 #define HCI_EV_REMOTE_OOB_DATA_REQUEST 0x35
1695 struct hci_ev_remote_oob_data_request {
1696 bdaddr_t bdaddr;
1697 } __packed;
1698
1699 #define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
1700 struct hci_ev_simple_pair_complete {
1701 __u8 status;
1702 bdaddr_t bdaddr;
1703 } __packed;
1704
1705 #define HCI_EV_USER_PASSKEY_NOTIFY 0x3b
1706 struct hci_ev_user_passkey_notify {
1707 bdaddr_t bdaddr;
1708 __le32 passkey;
1709 } __packed;
1710
1711 #define HCI_KEYPRESS_STARTED 0
1712 #define HCI_KEYPRESS_ENTERED 1
1713 #define HCI_KEYPRESS_ERASED 2
1714 #define HCI_KEYPRESS_CLEARED 3
1715 #define HCI_KEYPRESS_COMPLETED 4
1716
1717 #define HCI_EV_KEYPRESS_NOTIFY 0x3c
1718 struct hci_ev_keypress_notify {
1719 bdaddr_t bdaddr;
1720 __u8 type;
1721 } __packed;
1722
1723 #define HCI_EV_REMOTE_HOST_FEATURES 0x3d
1724 struct hci_ev_remote_host_features {
1725 bdaddr_t bdaddr;
1726 __u8 features[8];
1727 } __packed;
1728
1729 #define HCI_EV_LE_META 0x3e
1730 struct hci_ev_le_meta {
1731 __u8 subevent;
1732 } __packed;
1733
1734 #define HCI_EV_PHY_LINK_COMPLETE 0x40
1735 struct hci_ev_phy_link_complete {
1736 __u8 status;
1737 __u8 phy_handle;
1738 } __packed;
1739
1740 #define HCI_EV_CHANNEL_SELECTED 0x41
1741 struct hci_ev_channel_selected {
1742 __u8 phy_handle;
1743 } __packed;
1744
1745 #define HCI_EV_DISCONN_PHY_LINK_COMPLETE 0x42
1746 struct hci_ev_disconn_phy_link_complete {
1747 __u8 status;
1748 __u8 phy_handle;
1749 __u8 reason;
1750 } __packed;
1751
1752 #define HCI_EV_LOGICAL_LINK_COMPLETE 0x45
1753 struct hci_ev_logical_link_complete {
1754 __u8 status;
1755 __le16 handle;
1756 __u8 phy_handle;
1757 __u8 flow_spec_id;
1758 } __packed;
1759
1760 #define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE 0x46
1761 struct hci_ev_disconn_logical_link_complete {
1762 __u8 status;
1763 __le16 handle;
1764 __u8 reason;
1765 } __packed;
1766
1767 #define HCI_EV_NUM_COMP_BLOCKS 0x48
1768 struct hci_comp_blocks_info {
1769 __le16 handle;
1770 __le16 pkts;
1771 __le16 blocks;
1772 } __packed;
1773
1774 struct hci_ev_num_comp_blocks {
1775 __le16 num_blocks;
1776 __u8 num_hndl;
1777 struct hci_comp_blocks_info handles[0];
1778 } __packed;
1779
1780 #define HCI_EV_SYNC_TRAIN_COMPLETE 0x4F
1781 struct hci_ev_sync_train_complete {
1782 __u8 status;
1783 } __packed;
1784
1785 #define HCI_EV_SLAVE_PAGE_RESP_TIMEOUT 0x54
1786
1787 #define HCI_EV_LE_CONN_COMPLETE 0x01
1788 struct hci_ev_le_conn_complete {
1789 __u8 status;
1790 __le16 handle;
1791 __u8 role;
1792 __u8 bdaddr_type;
1793 bdaddr_t bdaddr;
1794 __le16 interval;
1795 __le16 latency;
1796 __le16 supervision_timeout;
1797 __u8 clk_accurancy;
1798 } __packed;
1799
1800 /* Advertising report event types */
1801 #define LE_ADV_IND 0x00
1802 #define LE_ADV_DIRECT_IND 0x01
1803 #define LE_ADV_SCAN_IND 0x02
1804 #define LE_ADV_NONCONN_IND 0x03
1805 #define LE_ADV_SCAN_RSP 0x04
1806
1807 #define ADDR_LE_DEV_PUBLIC 0x00
1808 #define ADDR_LE_DEV_RANDOM 0x01
1809
1810 #define HCI_EV_LE_ADVERTISING_REPORT 0x02
1811 struct hci_ev_le_advertising_info {
1812 __u8 evt_type;
1813 __u8 bdaddr_type;
1814 bdaddr_t bdaddr;
1815 __u8 length;
1816 __u8 data[0];
1817 } __packed;
1818
1819 #define HCI_EV_LE_CONN_UPDATE_COMPLETE 0x03
1820 struct hci_ev_le_conn_update_complete {
1821 __u8 status;
1822 __le16 handle;
1823 __le16 interval;
1824 __le16 latency;
1825 __le16 supervision_timeout;
1826 } __packed;
1827
1828 #define HCI_EV_LE_LTK_REQ 0x05
1829 struct hci_ev_le_ltk_req {
1830 __le16 handle;
1831 __le64 rand;
1832 __le16 ediv;
1833 } __packed;
1834
1835 #define HCI_EV_LE_REMOTE_CONN_PARAM_REQ 0x06
1836 struct hci_ev_le_remote_conn_param_req {
1837 __le16 handle;
1838 __le16 interval_min;
1839 __le16 interval_max;
1840 __le16 latency;
1841 __le16 timeout;
1842 } __packed;
1843
1844 #define HCI_EV_LE_DATA_LEN_CHANGE 0x07
1845 struct hci_ev_le_data_len_change {
1846 __le16 handle;
1847 __le16 tx_len;
1848 __le16 tx_time;
1849 __le16 rx_len;
1850 __le16 rx_time;
1851 } __packed;
1852
1853 #define HCI_EV_LE_DIRECT_ADV_REPORT 0x0B
1854 struct hci_ev_le_direct_adv_info {
1855 __u8 evt_type;
1856 __u8 bdaddr_type;
1857 bdaddr_t bdaddr;
1858 __u8 direct_addr_type;
1859 bdaddr_t direct_addr;
1860 __s8 rssi;
1861 } __packed;
1862
1863 /* Internal events generated by Bluetooth stack */
1864 #define HCI_EV_STACK_INTERNAL 0xfd
1865 struct hci_ev_stack_internal {
1866 __u16 type;
1867 __u8 data[0];
1868 } __packed;
1869
1870 #define HCI_EV_SI_DEVICE 0x01
1871 struct hci_ev_si_device {
1872 __u16 event;
1873 __u16 dev_id;
1874 } __packed;
1875
1876 #define HCI_EV_SI_SECURITY 0x02
1877 struct hci_ev_si_security {
1878 __u16 event;
1879 __u16 proto;
1880 __u16 subproto;
1881 __u8 incoming;
1882 } __packed;
1883
1884 /* ---- HCI Packet structures ---- */
1885 #define HCI_COMMAND_HDR_SIZE 3
1886 #define HCI_EVENT_HDR_SIZE 2
1887 #define HCI_ACL_HDR_SIZE 4
1888 #define HCI_SCO_HDR_SIZE 3
1889
1890 struct hci_command_hdr {
1891 __le16 opcode; /* OCF & OGF */
1892 __u8 plen;
1893 } __packed;
1894
1895 struct hci_event_hdr {
1896 __u8 evt;
1897 __u8 plen;
1898 } __packed;
1899
1900 struct hci_acl_hdr {
1901 __le16 handle; /* Handle & Flags(PB, BC) */
1902 __le16 dlen;
1903 } __packed;
1904
1905 struct hci_sco_hdr {
1906 __le16 handle;
1907 __u8 dlen;
1908 } __packed;
1909
1910 static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1911 {
1912 return (struct hci_event_hdr *) skb->data;
1913 }
1914
1915 static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1916 {
1917 return (struct hci_acl_hdr *) skb->data;
1918 }
1919
1920 static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1921 {
1922 return (struct hci_sco_hdr *) skb->data;
1923 }
1924
1925 /* Command opcode pack/unpack */
1926 #define hci_opcode_pack(ogf, ocf) ((__u16) ((ocf & 0x03ff)|(ogf << 10)))
1927 #define hci_opcode_ogf(op) (op >> 10)
1928 #define hci_opcode_ocf(op) (op & 0x03ff)
1929
1930 /* ACL handle and flags pack/unpack */
1931 #define hci_handle_pack(h, f) ((__u16) ((h & 0x0fff)|(f << 12)))
1932 #define hci_handle(h) (h & 0x0fff)
1933 #define hci_flags(h) (h >> 12)
1934
1935 #endif /* __HCI_H */
This page took 0.100765 seconds and 5 git commands to generate.