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