[Bluetooth] Initiate authentication during connection establishment
[pandora-kernel.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 /* HCI dev events */
34 #define HCI_DEV_REG                     1
35 #define HCI_DEV_UNREG                   2
36 #define HCI_DEV_UP                      3
37 #define HCI_DEV_DOWN                    4
38 #define HCI_DEV_SUSPEND                 5
39 #define HCI_DEV_RESUME                  6
40
41 /* HCI notify events */
42 #define HCI_NOTIFY_CONN_ADD             1
43 #define HCI_NOTIFY_CONN_DEL             2
44 #define HCI_NOTIFY_VOICE_SETTING        3
45
46 /* HCI device types */
47 #define HCI_VIRTUAL     0
48 #define HCI_USB         1
49 #define HCI_PCCARD      2
50 #define HCI_UART        3
51 #define HCI_RS232       4
52 #define HCI_PCI         5
53 #define HCI_SDIO        6
54
55 /* HCI device quirks */
56 enum {
57         HCI_QUIRK_RESET_ON_INIT,
58         HCI_QUIRK_RAW_DEVICE,
59         HCI_QUIRK_FIXUP_BUFFER_SIZE
60 };
61
62 /* HCI device flags */
63 enum {
64         HCI_UP,
65         HCI_INIT,
66         HCI_RUNNING,
67
68         HCI_PSCAN,
69         HCI_ISCAN,
70         HCI_AUTH,
71         HCI_ENCRYPT,
72         HCI_INQUIRY,
73
74         HCI_RAW,
75
76         HCI_SECMGR
77 };
78
79 /* HCI ioctl defines */
80 #define HCIDEVUP        _IOW('H', 201, int)
81 #define HCIDEVDOWN      _IOW('H', 202, int)
82 #define HCIDEVRESET     _IOW('H', 203, int)
83 #define HCIDEVRESTAT    _IOW('H', 204, int)
84
85 #define HCIGETDEVLIST   _IOR('H', 210, int)
86 #define HCIGETDEVINFO   _IOR('H', 211, int)
87 #define HCIGETCONNLIST  _IOR('H', 212, int)
88 #define HCIGETCONNINFO  _IOR('H', 213, int)
89
90 #define HCISETRAW       _IOW('H', 220, int)
91 #define HCISETSCAN      _IOW('H', 221, int)
92 #define HCISETAUTH      _IOW('H', 222, int)
93 #define HCISETENCRYPT   _IOW('H', 223, int)
94 #define HCISETPTYPE     _IOW('H', 224, int)
95 #define HCISETLINKPOL   _IOW('H', 225, int)
96 #define HCISETLINKMODE  _IOW('H', 226, int)
97 #define HCISETACLMTU    _IOW('H', 227, int)
98 #define HCISETSCOMTU    _IOW('H', 228, int)
99
100 #define HCISETSECMGR    _IOW('H', 230, int)
101
102 #define HCIINQUIRY      _IOR('H', 240, int)
103
104 /* HCI timeouts */
105 #define HCI_CONNECT_TIMEOUT     (40000) /* 40 seconds */
106 #define HCI_DISCONN_TIMEOUT     (2000)  /* 2 seconds */
107 #define HCI_IDLE_TIMEOUT        (6000)  /* 6 seconds */
108 #define HCI_INIT_TIMEOUT        (10000) /* 10 seconds */
109
110 /* HCI data types */
111 #define HCI_COMMAND_PKT         0x01
112 #define HCI_ACLDATA_PKT         0x02
113 #define HCI_SCODATA_PKT         0x03
114 #define HCI_EVENT_PKT           0x04
115 #define HCI_VENDOR_PKT          0xff
116
117 /* HCI packet types */
118 #define HCI_DM1         0x0008
119 #define HCI_DM3         0x0400
120 #define HCI_DM5         0x4000
121 #define HCI_DH1         0x0010
122 #define HCI_DH3         0x0800
123 #define HCI_DH5         0x8000
124
125 #define HCI_HV1         0x0020
126 #define HCI_HV2         0x0040
127 #define HCI_HV3         0x0080
128
129 #define SCO_PTYPE_MASK  (HCI_HV1 | HCI_HV2 | HCI_HV3)
130 #define ACL_PTYPE_MASK  (~SCO_PTYPE_MASK)
131
132 /* eSCO packet types */
133 #define ESCO_HV1        0x0001
134 #define ESCO_HV2        0x0002
135 #define ESCO_HV3        0x0004
136 #define ESCO_EV3        0x0008
137 #define ESCO_EV4        0x0010
138 #define ESCO_EV5        0x0020
139
140 #define SCO_ESCO_MASK  (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
141
142 /* ACL flags */
143 #define ACL_CONT                0x01
144 #define ACL_START               0x02
145 #define ACL_ACTIVE_BCAST        0x04
146 #define ACL_PICO_BCAST          0x08
147
148 /* Baseband links */
149 #define SCO_LINK        0x00
150 #define ACL_LINK        0x01
151 #define ESCO_LINK       0x02
152
153 /* LMP features */
154 #define LMP_3SLOT       0x01
155 #define LMP_5SLOT       0x02
156 #define LMP_ENCRYPT     0x04
157 #define LMP_SOFFSET     0x08
158 #define LMP_TACCURACY   0x10
159 #define LMP_RSWITCH     0x20
160 #define LMP_HOLD        0x40
161 #define LMP_SNIFF       0x80
162
163 #define LMP_PARK        0x01
164 #define LMP_RSSI        0x02
165 #define LMP_QUALITY     0x04
166 #define LMP_SCO         0x08
167 #define LMP_HV2         0x10
168 #define LMP_HV3         0x20
169 #define LMP_ULAW        0x40
170 #define LMP_ALAW        0x80
171
172 #define LMP_CVSD        0x01
173 #define LMP_PSCHEME     0x02
174 #define LMP_PCONTROL    0x04
175
176 #define LMP_ESCO        0x80
177
178 #define LMP_EV4         0x01
179 #define LMP_EV5         0x02
180
181 #define LMP_SNIFF_SUBR  0x02
182
183 #define LMP_SIMPLE_PAIR 0x08
184
185 /* Connection modes */
186 #define HCI_CM_ACTIVE   0x0000
187 #define HCI_CM_HOLD     0x0001
188 #define HCI_CM_SNIFF    0x0002
189 #define HCI_CM_PARK     0x0003
190
191 /* Link policies */
192 #define HCI_LP_RSWITCH  0x0001
193 #define HCI_LP_HOLD     0x0002
194 #define HCI_LP_SNIFF    0x0004
195 #define HCI_LP_PARK     0x0008
196
197 /* Link modes */
198 #define HCI_LM_ACCEPT   0x8000
199 #define HCI_LM_MASTER   0x0001
200 #define HCI_LM_AUTH     0x0002
201 #define HCI_LM_ENCRYPT  0x0004
202 #define HCI_LM_TRUSTED  0x0008
203 #define HCI_LM_RELIABLE 0x0010
204 #define HCI_LM_SECURE   0x0020
205
206 /* -----  HCI Commands ---- */
207 #define HCI_OP_INQUIRY                  0x0401
208 struct hci_cp_inquiry {
209         __u8     lap[3];
210         __u8     length;
211         __u8     num_rsp;
212 } __attribute__ ((packed));
213
214 #define HCI_OP_INQUIRY_CANCEL           0x0402
215
216 #define HCI_OP_EXIT_PERIODIC_INQ        0x0404
217
218 #define HCI_OP_CREATE_CONN              0x0405
219 struct hci_cp_create_conn {
220         bdaddr_t bdaddr;
221         __le16   pkt_type;
222         __u8     pscan_rep_mode;
223         __u8     pscan_mode;
224         __le16   clock_offset;
225         __u8     role_switch;
226 } __attribute__ ((packed));
227
228 #define HCI_OP_DISCONNECT               0x0406
229 struct hci_cp_disconnect {
230         __le16   handle;
231         __u8     reason;
232 } __attribute__ ((packed));
233
234 #define HCI_OP_ADD_SCO                  0x0407
235 struct hci_cp_add_sco {
236         __le16   handle;
237         __le16   pkt_type;
238 } __attribute__ ((packed));
239
240 #define HCI_OP_CREATE_CONN_CANCEL       0x0408
241 struct hci_cp_create_conn_cancel {
242         bdaddr_t bdaddr;
243 } __attribute__ ((packed));
244
245 #define HCI_OP_ACCEPT_CONN_REQ          0x0409
246 struct hci_cp_accept_conn_req {
247         bdaddr_t bdaddr;
248         __u8     role;
249 } __attribute__ ((packed));
250
251 #define HCI_OP_REJECT_CONN_REQ          0x040a
252 struct hci_cp_reject_conn_req {
253         bdaddr_t bdaddr;
254         __u8     reason;
255 } __attribute__ ((packed));
256
257 #define HCI_OP_LINK_KEY_REPLY           0x040b
258 struct hci_cp_link_key_reply {
259         bdaddr_t bdaddr;
260         __u8     link_key[16];
261 } __attribute__ ((packed));
262
263 #define HCI_OP_LINK_KEY_NEG_REPLY       0x040c
264 struct hci_cp_link_key_neg_reply {
265         bdaddr_t bdaddr;
266 } __attribute__ ((packed));
267
268 #define HCI_OP_PIN_CODE_REPLY           0x040d
269 struct hci_cp_pin_code_reply {
270         bdaddr_t bdaddr;
271         __u8     pin_len;
272         __u8     pin_code[16];
273 } __attribute__ ((packed));
274
275 #define HCI_OP_PIN_CODE_NEG_REPLY       0x040e
276 struct hci_cp_pin_code_neg_reply {
277         bdaddr_t bdaddr;
278 } __attribute__ ((packed));
279
280 #define HCI_OP_CHANGE_CONN_PTYPE        0x040f
281 struct hci_cp_change_conn_ptype {
282         __le16   handle;
283         __le16   pkt_type;
284 } __attribute__ ((packed));
285
286 #define HCI_OP_AUTH_REQUESTED           0x0411
287 struct hci_cp_auth_requested {
288         __le16   handle;
289 } __attribute__ ((packed));
290
291 #define HCI_OP_SET_CONN_ENCRYPT         0x0413
292 struct hci_cp_set_conn_encrypt {
293         __le16   handle;
294         __u8     encrypt;
295 } __attribute__ ((packed));
296
297 #define HCI_OP_CHANGE_CONN_LINK_KEY     0x0415
298 struct hci_cp_change_conn_link_key {
299         __le16   handle;
300 } __attribute__ ((packed));
301
302 #define HCI_OP_REMOTE_NAME_REQ          0x0419
303 struct hci_cp_remote_name_req {
304         bdaddr_t bdaddr;
305         __u8     pscan_rep_mode;
306         __u8     pscan_mode;
307         __le16   clock_offset;
308 } __attribute__ ((packed));
309
310 #define HCI_OP_REMOTE_NAME_REQ_CANCEL   0x041a
311 struct hci_cp_remote_name_req_cancel {
312         bdaddr_t bdaddr;
313 } __attribute__ ((packed));
314
315 #define HCI_OP_READ_REMOTE_FEATURES     0x041b
316 struct hci_cp_read_remote_features {
317         __le16   handle;
318 } __attribute__ ((packed));
319
320 #define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
321 struct hci_cp_read_remote_ext_features {
322         __le16   handle;
323         __u8     page;
324 } __attribute__ ((packed));
325
326 #define HCI_OP_READ_REMOTE_VERSION      0x041d
327 struct hci_cp_read_remote_version {
328         __le16   handle;
329 } __attribute__ ((packed));
330
331 #define HCI_OP_SETUP_SYNC_CONN          0x0428
332 struct hci_cp_setup_sync_conn {
333         __le16   handle;
334         __le32   tx_bandwidth;
335         __le32   rx_bandwidth;
336         __le16   max_latency;
337         __le16   voice_setting;
338         __u8     retrans_effort;
339         __le16   pkt_type;
340 } __attribute__ ((packed));
341
342 #define HCI_OP_ACCEPT_SYNC_CONN_REQ     0x0429
343 struct hci_cp_accept_sync_conn_req {
344         bdaddr_t bdaddr;
345         __le32   tx_bandwidth;
346         __le32   rx_bandwidth;
347         __le16   max_latency;
348         __le16   content_format;
349         __u8     retrans_effort;
350         __le16   pkt_type;
351 } __attribute__ ((packed));
352
353 #define HCI_OP_REJECT_SYNC_CONN_REQ     0x042a
354 struct hci_cp_reject_sync_conn_req {
355         bdaddr_t bdaddr;
356         __u8     reason;
357 } __attribute__ ((packed));
358
359 #define HCI_OP_SNIFF_MODE               0x0803
360 struct hci_cp_sniff_mode {
361         __le16   handle;
362         __le16   max_interval;
363         __le16   min_interval;
364         __le16   attempt;
365         __le16   timeout;
366 } __attribute__ ((packed));
367
368 #define HCI_OP_EXIT_SNIFF_MODE          0x0804
369 struct hci_cp_exit_sniff_mode {
370         __le16   handle;
371 } __attribute__ ((packed));
372
373 #define HCI_OP_ROLE_DISCOVERY           0x0809
374 struct hci_cp_role_discovery {
375         __le16   handle;
376 } __attribute__ ((packed));
377 struct hci_rp_role_discovery {
378         __u8     status;
379         __le16   handle;
380         __u8     role;
381 } __attribute__ ((packed));
382
383 #define HCI_OP_SWITCH_ROLE              0x080b
384 struct hci_cp_switch_role {
385         bdaddr_t bdaddr;
386         __u8     role;
387 } __attribute__ ((packed));
388
389 #define HCI_OP_READ_LINK_POLICY         0x080c
390 struct hci_cp_read_link_policy {
391         __le16   handle;
392 } __attribute__ ((packed));
393 struct hci_rp_read_link_policy {
394         __u8     status;
395         __le16   handle;
396         __le16   policy;
397 } __attribute__ ((packed));
398
399 #define HCI_OP_WRITE_LINK_POLICY        0x080d
400 struct hci_cp_write_link_policy {
401         __le16   handle;
402         __le16   policy;
403 } __attribute__ ((packed));
404 struct hci_rp_write_link_policy {
405         __u8     status;
406         __le16   handle;
407 } __attribute__ ((packed));
408
409 #define HCI_OP_READ_DEF_LINK_POLICY     0x080e
410 struct hci_rp_read_def_link_policy {
411         __u8     status;
412         __le16   policy;
413 } __attribute__ ((packed));
414
415 #define HCI_OP_WRITE_DEF_LINK_POLICY    0x080f
416 struct hci_cp_write_def_link_policy {
417         __le16   policy;
418 } __attribute__ ((packed));
419
420 #define HCI_OP_SNIFF_SUBRATE            0x0811
421 struct hci_cp_sniff_subrate {
422         __le16   handle;
423         __le16   max_latency;
424         __le16   min_remote_timeout;
425         __le16   min_local_timeout;
426 } __attribute__ ((packed));
427
428 #define HCI_OP_SET_EVENT_MASK           0x0c01
429 struct hci_cp_set_event_mask {
430         __u8     mask[8];
431 } __attribute__ ((packed));
432
433 #define HCI_OP_RESET                    0x0c03
434
435 #define HCI_OP_SET_EVENT_FLT            0x0c05
436 struct hci_cp_set_event_flt {
437         __u8     flt_type;
438         __u8     cond_type;
439         __u8     condition[0];
440 } __attribute__ ((packed));
441
442 /* Filter types */
443 #define HCI_FLT_CLEAR_ALL       0x00
444 #define HCI_FLT_INQ_RESULT      0x01
445 #define HCI_FLT_CONN_SETUP      0x02
446
447 /* CONN_SETUP Condition types */
448 #define HCI_CONN_SETUP_ALLOW_ALL        0x00
449 #define HCI_CONN_SETUP_ALLOW_CLASS      0x01
450 #define HCI_CONN_SETUP_ALLOW_BDADDR     0x02
451
452 /* CONN_SETUP Conditions */
453 #define HCI_CONN_SETUP_AUTO_OFF 0x01
454 #define HCI_CONN_SETUP_AUTO_ON  0x02
455
456 #define HCI_OP_WRITE_LOCAL_NAME         0x0c13
457 struct hci_cp_write_local_name {
458         __u8     name[248];
459 } __attribute__ ((packed));
460
461 #define HCI_OP_READ_LOCAL_NAME          0x0c14
462 struct hci_rp_read_local_name {
463         __u8     status;
464         __u8     name[248];
465 } __attribute__ ((packed));
466
467 #define HCI_OP_WRITE_CA_TIMEOUT         0x0c16
468
469 #define HCI_OP_WRITE_PG_TIMEOUT         0x0c18
470
471 #define HCI_OP_WRITE_SCAN_ENABLE        0x0c1a
472         #define SCAN_DISABLED           0x00
473         #define SCAN_INQUIRY            0x01
474         #define SCAN_PAGE               0x02
475
476 #define HCI_OP_READ_AUTH_ENABLE         0x0c1f
477
478 #define HCI_OP_WRITE_AUTH_ENABLE        0x0c20
479         #define AUTH_DISABLED           0x00
480         #define AUTH_ENABLED            0x01
481
482 #define HCI_OP_READ_ENCRYPT_MODE        0x0c21
483
484 #define HCI_OP_WRITE_ENCRYPT_MODE       0x0c22
485         #define ENCRYPT_DISABLED        0x00
486         #define ENCRYPT_P2P             0x01
487         #define ENCRYPT_BOTH            0x02
488
489 #define HCI_OP_READ_CLASS_OF_DEV        0x0c23
490 struct hci_rp_read_class_of_dev {
491         __u8     status;
492         __u8     dev_class[3];
493 } __attribute__ ((packed));
494
495 #define HCI_OP_WRITE_CLASS_OF_DEV       0x0c24
496 struct hci_cp_write_class_of_dev {
497         __u8     dev_class[3];
498 } __attribute__ ((packed));
499
500 #define HCI_OP_READ_VOICE_SETTING       0x0c25
501 struct hci_rp_read_voice_setting {
502         __u8     status;
503         __le16   voice_setting;
504 } __attribute__ ((packed));
505
506 #define HCI_OP_WRITE_VOICE_SETTING      0x0c26
507 struct hci_cp_write_voice_setting {
508         __le16   voice_setting;
509 } __attribute__ ((packed));
510
511 #define HCI_OP_HOST_BUFFER_SIZE         0x0c33
512 struct hci_cp_host_buffer_size {
513         __le16   acl_mtu;
514         __u8     sco_mtu;
515         __le16   acl_max_pkt;
516         __le16   sco_max_pkt;
517 } __attribute__ ((packed));
518
519 #define HCI_OP_READ_SSP_MODE            0x0c55
520 struct hci_rp_read_ssp_mode {
521         __u8     status;
522         __u8     mode;
523 } __attribute__ ((packed));
524
525 #define HCI_OP_WRITE_SSP_MODE           0x0c56
526 struct hci_cp_write_ssp_mode {
527         __u8     mode;
528 } __attribute__ ((packed));
529
530 #define HCI_OP_READ_LOCAL_VERSION       0x1001
531 struct hci_rp_read_local_version {
532         __u8     status;
533         __u8     hci_ver;
534         __le16   hci_rev;
535         __u8     lmp_ver;
536         __le16   manufacturer;
537         __le16   lmp_subver;
538 } __attribute__ ((packed));
539
540 #define HCI_OP_READ_LOCAL_COMMANDS      0x1002
541 struct hci_rp_read_local_commands {
542         __u8     status;
543         __u8     commands[64];
544 } __attribute__ ((packed));
545
546 #define HCI_OP_READ_LOCAL_FEATURES      0x1003
547 struct hci_rp_read_local_features {
548         __u8     status;
549         __u8     features[8];
550 } __attribute__ ((packed));
551
552 #define HCI_OP_READ_LOCAL_EXT_FEATURES  0x1004
553 struct hci_rp_read_local_ext_features {
554         __u8     status;
555         __u8     page;
556         __u8     max_page;
557         __u8     features[8];
558 } __attribute__ ((packed));
559
560 #define HCI_OP_READ_BUFFER_SIZE         0x1005
561 struct hci_rp_read_buffer_size {
562         __u8     status;
563         __le16   acl_mtu;
564         __u8     sco_mtu;
565         __le16   acl_max_pkt;
566         __le16   sco_max_pkt;
567 } __attribute__ ((packed));
568
569 #define HCI_OP_READ_BD_ADDR             0x1009
570 struct hci_rp_read_bd_addr {
571         __u8     status;
572         bdaddr_t bdaddr;
573 } __attribute__ ((packed));
574
575 /* ---- HCI Events ---- */
576 #define HCI_EV_INQUIRY_COMPLETE         0x01
577
578 #define HCI_EV_INQUIRY_RESULT           0x02
579 struct inquiry_info {
580         bdaddr_t bdaddr;
581         __u8     pscan_rep_mode;
582         __u8     pscan_period_mode;
583         __u8     pscan_mode;
584         __u8     dev_class[3];
585         __le16   clock_offset;
586 } __attribute__ ((packed));
587
588 #define HCI_EV_CONN_COMPLETE            0x03
589 struct hci_ev_conn_complete {
590         __u8     status;
591         __le16   handle;
592         bdaddr_t bdaddr;
593         __u8     link_type;
594         __u8     encr_mode;
595 } __attribute__ ((packed));
596
597 #define HCI_EV_CONN_REQUEST             0x04
598 struct hci_ev_conn_request {
599         bdaddr_t bdaddr;
600         __u8     dev_class[3];
601         __u8     link_type;
602 } __attribute__ ((packed));
603
604 #define HCI_EV_DISCONN_COMPLETE         0x05
605 struct hci_ev_disconn_complete {
606         __u8     status;
607         __le16   handle;
608         __u8     reason;
609 } __attribute__ ((packed));
610
611 #define HCI_EV_AUTH_COMPLETE            0x06
612 struct hci_ev_auth_complete {
613         __u8     status;
614         __le16   handle;
615 } __attribute__ ((packed));
616
617 #define HCI_EV_REMOTE_NAME              0x07
618 struct hci_ev_remote_name {
619         __u8     status;
620         bdaddr_t bdaddr;
621         __u8     name[248];
622 } __attribute__ ((packed));
623
624 #define HCI_EV_ENCRYPT_CHANGE           0x08
625 struct hci_ev_encrypt_change {
626         __u8     status;
627         __le16   handle;
628         __u8     encrypt;
629 } __attribute__ ((packed));
630
631 #define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
632 struct hci_ev_change_link_key_complete {
633         __u8     status;
634         __le16   handle;
635 } __attribute__ ((packed));
636
637 #define HCI_EV_REMOTE_FEATURES          0x0b
638 struct hci_ev_remote_features {
639         __u8     status;
640         __le16   handle;
641         __u8     features[8];
642 } __attribute__ ((packed));
643
644 #define HCI_EV_REMOTE_VERSION           0x0c
645 struct hci_ev_remote_version {
646         __u8     status;
647         __le16   handle;
648         __u8     lmp_ver;
649         __le16   manufacturer;
650         __le16   lmp_subver;
651 } __attribute__ ((packed));
652
653 #define HCI_EV_QOS_SETUP_COMPLETE       0x0d
654 struct hci_qos {
655         __u8     service_type;
656         __u32    token_rate;
657         __u32    peak_bandwidth;
658         __u32    latency;
659         __u32    delay_variation;
660 } __attribute__ ((packed));
661 struct hci_ev_qos_setup_complete {
662         __u8     status;
663         __le16   handle;
664         struct   hci_qos qos;
665 } __attribute__ ((packed));
666
667 #define HCI_EV_CMD_COMPLETE             0x0e
668 struct hci_ev_cmd_complete {
669         __u8     ncmd;
670         __le16   opcode;
671 } __attribute__ ((packed));
672
673 #define HCI_EV_CMD_STATUS               0x0f
674 struct hci_ev_cmd_status {
675         __u8     status;
676         __u8     ncmd;
677         __le16   opcode;
678 } __attribute__ ((packed));
679
680 #define HCI_EV_ROLE_CHANGE              0x12
681 struct hci_ev_role_change {
682         __u8     status;
683         bdaddr_t bdaddr;
684         __u8     role;
685 } __attribute__ ((packed));
686
687 #define HCI_EV_NUM_COMP_PKTS            0x13
688 struct hci_ev_num_comp_pkts {
689         __u8     num_hndl;
690         /* variable length part */
691 } __attribute__ ((packed));
692
693 #define HCI_EV_MODE_CHANGE              0x14
694 struct hci_ev_mode_change {
695         __u8     status;
696         __le16   handle;
697         __u8     mode;
698         __le16   interval;
699 } __attribute__ ((packed));
700
701 #define HCI_EV_PIN_CODE_REQ             0x16
702 struct hci_ev_pin_code_req {
703         bdaddr_t bdaddr;
704 } __attribute__ ((packed));
705
706 #define HCI_EV_LINK_KEY_REQ             0x17
707 struct hci_ev_link_key_req {
708         bdaddr_t bdaddr;
709 } __attribute__ ((packed));
710
711 #define HCI_EV_LINK_KEY_NOTIFY          0x18
712 struct hci_ev_link_key_notify {
713         bdaddr_t bdaddr;
714         __u8     link_key[16];
715         __u8     key_type;
716 } __attribute__ ((packed));
717
718 #define HCI_EV_CLOCK_OFFSET             0x1c
719 struct hci_ev_clock_offset {
720         __u8     status;
721         __le16   handle;
722         __le16   clock_offset;
723 } __attribute__ ((packed));
724
725 #define HCI_EV_PKT_TYPE_CHANGE          0x1d
726 struct hci_ev_pkt_type_change {
727         __u8     status;
728         __le16   handle;
729         __le16   pkt_type;
730 } __attribute__ ((packed));
731
732 #define HCI_EV_PSCAN_REP_MODE           0x20
733 struct hci_ev_pscan_rep_mode {
734         bdaddr_t bdaddr;
735         __u8     pscan_rep_mode;
736 } __attribute__ ((packed));
737
738 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
739 struct inquiry_info_with_rssi {
740         bdaddr_t bdaddr;
741         __u8     pscan_rep_mode;
742         __u8     pscan_period_mode;
743         __u8     dev_class[3];
744         __le16   clock_offset;
745         __s8     rssi;
746 } __attribute__ ((packed));
747 struct inquiry_info_with_rssi_and_pscan_mode {
748         bdaddr_t bdaddr;
749         __u8     pscan_rep_mode;
750         __u8     pscan_period_mode;
751         __u8     pscan_mode;
752         __u8     dev_class[3];
753         __le16   clock_offset;
754         __s8     rssi;
755 } __attribute__ ((packed));
756
757 #define HCI_EV_REMOTE_EXT_FEATURES      0x23
758 struct hci_ev_remote_ext_features {
759         __u8     status;
760         __le16   handle;
761         __u8     page;
762         __u8     max_page;
763         __u8     features[8];
764 } __attribute__ ((packed));
765
766 #define HCI_EV_SYNC_CONN_COMPLETE       0x2c
767 struct hci_ev_sync_conn_complete {
768         __u8     status;
769         __le16   handle;
770         bdaddr_t bdaddr;
771         __u8     link_type;
772         __u8     tx_interval;
773         __u8     retrans_window;
774         __le16   rx_pkt_len;
775         __le16   tx_pkt_len;
776         __u8     air_mode;
777 } __attribute__ ((packed));
778
779 #define HCI_EV_SYNC_CONN_CHANGED        0x2d
780 struct hci_ev_sync_conn_changed {
781         __u8     status;
782         __le16   handle;
783         __u8     tx_interval;
784         __u8     retrans_window;
785         __le16   rx_pkt_len;
786         __le16   tx_pkt_len;
787 } __attribute__ ((packed));
788
789 #define HCI_EV_SNIFF_SUBRATE            0x2e
790 struct hci_ev_sniff_subrate {
791         __u8     status;
792         __le16   handle;
793         __le16   max_tx_latency;
794         __le16   max_rx_latency;
795         __le16   max_remote_timeout;
796         __le16   max_local_timeout;
797 } __attribute__ ((packed));
798
799 #define HCI_EV_EXTENDED_INQUIRY_RESULT  0x2f
800 struct extended_inquiry_info {
801         bdaddr_t bdaddr;
802         __u8     pscan_rep_mode;
803         __u8     pscan_period_mode;
804         __u8     dev_class[3];
805         __le16   clock_offset;
806         __s8     rssi;
807         __u8     data[240];
808 } __attribute__ ((packed));
809
810 #define HCI_EV_IO_CAPA_REQUEST          0x31
811 struct hci_ev_io_capa_request {
812         bdaddr_t bdaddr;
813 } __attribute__ ((packed));
814
815 #define HCI_EV_SIMPLE_PAIR_COMPLETE     0x36
816 struct hci_ev_simple_pair_complete {
817         __u8     status;
818         bdaddr_t bdaddr;
819 } __attribute__ ((packed));
820
821 #define HCI_EV_REMOTE_HOST_FEATURES     0x3d
822 struct hci_ev_remote_host_features {
823         bdaddr_t bdaddr;
824         __u8     features[8];
825 } __attribute__ ((packed));
826
827 /* Internal events generated by Bluetooth stack */
828 #define HCI_EV_STACK_INTERNAL   0xfd
829 struct hci_ev_stack_internal {
830         __u16    type;
831         __u8     data[0];
832 } __attribute__ ((packed));
833
834 #define HCI_EV_SI_DEVICE        0x01
835 struct hci_ev_si_device {
836         __u16    event;
837         __u16    dev_id;
838 } __attribute__ ((packed));
839
840 #define HCI_EV_SI_SECURITY      0x02
841 struct hci_ev_si_security {
842         __u16    event;
843         __u16    proto;
844         __u16    subproto;
845         __u8     incoming;
846 } __attribute__ ((packed));
847
848 /* ---- HCI Packet structures ---- */
849 #define HCI_COMMAND_HDR_SIZE 3
850 #define HCI_EVENT_HDR_SIZE   2
851 #define HCI_ACL_HDR_SIZE     4
852 #define HCI_SCO_HDR_SIZE     3
853
854 struct hci_command_hdr {
855         __le16  opcode;         /* OCF & OGF */
856         __u8    plen;
857 } __attribute__ ((packed));
858
859 struct hci_event_hdr {
860         __u8    evt;
861         __u8    plen;
862 } __attribute__ ((packed));
863
864 struct hci_acl_hdr {
865         __le16  handle;         /* Handle & Flags(PB, BC) */
866         __le16  dlen;
867 } __attribute__ ((packed));
868
869 struct hci_sco_hdr {
870         __le16  handle;
871         __u8    dlen;
872 } __attribute__ ((packed));
873
874 #ifdef __KERNEL__
875 #include <linux/skbuff.h>
876 static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
877 {
878         return (struct hci_event_hdr *) skb->data;
879 }
880
881 static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
882 {
883         return (struct hci_acl_hdr *) skb->data;
884 }
885
886 static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
887 {
888         return (struct hci_sco_hdr *) skb->data;
889 }
890 #endif
891
892 /* Command opcode pack/unpack */
893 #define hci_opcode_pack(ogf, ocf)       (__u16) ((ocf & 0x03ff)|(ogf << 10))
894 #define hci_opcode_ogf(op)              (op >> 10)
895 #define hci_opcode_ocf(op)              (op & 0x03ff)
896
897 /* ACL handle and flags pack/unpack */
898 #define hci_handle_pack(h, f)   (__u16) ((h & 0x0fff)|(f << 12))
899 #define hci_handle(h)           (h & 0x0fff)
900 #define hci_flags(h)            (h >> 12)
901
902 /* ---- HCI Sockets ---- */
903
904 /* Socket options */
905 #define HCI_DATA_DIR    1
906 #define HCI_FILTER      2
907 #define HCI_TIME_STAMP  3
908
909 /* CMSG flags */
910 #define HCI_CMSG_DIR    0x0001
911 #define HCI_CMSG_TSTAMP 0x0002
912
913 struct sockaddr_hci {
914         sa_family_t    hci_family;
915         unsigned short hci_dev;
916 };
917 #define HCI_DEV_NONE    0xffff
918
919 struct hci_filter {
920         unsigned long type_mask;
921         unsigned long event_mask[2];
922         __le16 opcode;
923 };
924
925 struct hci_ufilter {
926         __u32  type_mask;
927         __u32  event_mask[2];
928         __le16 opcode;
929 };
930
931 #define HCI_FLT_TYPE_BITS       31
932 #define HCI_FLT_EVENT_BITS      63
933 #define HCI_FLT_OGF_BITS        63
934 #define HCI_FLT_OCF_BITS        127
935
936 /* ---- HCI Ioctl requests structures ---- */
937 struct hci_dev_stats {
938         __u32 err_rx;
939         __u32 err_tx;
940         __u32 cmd_tx;
941         __u32 evt_rx;
942         __u32 acl_tx;
943         __u32 acl_rx;
944         __u32 sco_tx;
945         __u32 sco_rx;
946         __u32 byte_rx;
947         __u32 byte_tx;
948 };
949
950 struct hci_dev_info {
951         __u16 dev_id;
952         char  name[8];
953
954         bdaddr_t bdaddr;
955
956         __u32 flags;
957         __u8  type;
958
959         __u8  features[8];
960
961         __u32 pkt_type;
962         __u32 link_policy;
963         __u32 link_mode;
964
965         __u16 acl_mtu;
966         __u16 acl_pkts;
967         __u16 sco_mtu;
968         __u16 sco_pkts;
969
970         struct hci_dev_stats stat;
971 };
972
973 struct hci_conn_info {
974         __u16    handle;
975         bdaddr_t bdaddr;
976         __u8     type;
977         __u8     out;
978         __u16    state;
979         __u32    link_mode;
980 };
981
982 struct hci_dev_req {
983         __u16  dev_id;
984         __u32  dev_opt;
985 };
986
987 struct hci_dev_list_req {
988         __u16  dev_num;
989         struct hci_dev_req dev_req[0];  /* hci_dev_req structures */
990 };
991
992 struct hci_conn_list_req {
993         __u16  dev_id;
994         __u16  conn_num;
995         struct hci_conn_info conn_info[0];
996 };
997
998 struct hci_conn_info_req {
999         bdaddr_t bdaddr;
1000         __u8     type;
1001         struct   hci_conn_info conn_info[0];
1002 };
1003
1004 struct hci_inquiry_req {
1005         __u16 dev_id;
1006         __u16 flags;
1007         __u8  lap[3];
1008         __u8  length;
1009         __u8  num_rsp;
1010 };
1011 #define IREQ_CACHE_FLUSH 0x0001
1012
1013 #endif /* __HCI_H */