aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/bluetooth/hci.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/bluetooth/hci.h')
-rw-r--r--include/net/bluetooth/hci.h193
1 files changed, 100 insertions, 93 deletions
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index ed3aea1605e8..bcbdd6d4e6dd 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -43,7 +43,7 @@
43#define HCI_NOTIFY_CONN_DEL 2 43#define HCI_NOTIFY_CONN_DEL 2
44#define HCI_NOTIFY_VOICE_SETTING 3 44#define HCI_NOTIFY_VOICE_SETTING 3
45 45
46/* HCI device types */ 46/* HCI bus types */
47#define HCI_VIRTUAL 0 47#define HCI_VIRTUAL 0
48#define HCI_USB 1 48#define HCI_USB 1
49#define HCI_PCCARD 2 49#define HCI_PCCARD 2
@@ -52,6 +52,10 @@
52#define HCI_PCI 5 52#define HCI_PCI 5
53#define HCI_SDIO 6 53#define HCI_SDIO 6
54 54
55/* HCI controller types */
56#define HCI_BREDR 0x00
57#define HCI_80211 0x01
58
55/* HCI device quirks */ 59/* HCI device quirks */
56enum { 60enum {
57 HCI_QUIRK_NO_RESET, 61 HCI_QUIRK_NO_RESET,
@@ -96,6 +100,9 @@ enum {
96#define HCISETACLMTU _IOW('H', 227, int) 100#define HCISETACLMTU _IOW('H', 227, int)
97#define HCISETSCOMTU _IOW('H', 228, int) 101#define HCISETSCOMTU _IOW('H', 228, int)
98 102
103#define HCIBLOCKADDR _IOW('H', 230, int)
104#define HCIUNBLOCKADDR _IOW('H', 231, int)
105
99#define HCIINQUIRY _IOR('H', 240, int) 106#define HCIINQUIRY _IOR('H', 240, int)
100 107
101/* HCI timeouts */ 108/* HCI timeouts */
@@ -223,7 +230,7 @@ struct hci_cp_inquiry {
223 __u8 lap[3]; 230 __u8 lap[3];
224 __u8 length; 231 __u8 length;
225 __u8 num_rsp; 232 __u8 num_rsp;
226} __attribute__ ((packed)); 233} __packed;
227 234
228#define HCI_OP_INQUIRY_CANCEL 0x0402 235#define HCI_OP_INQUIRY_CANCEL 0x0402
229 236
@@ -237,81 +244,81 @@ struct hci_cp_create_conn {
237 __u8 pscan_mode; 244 __u8 pscan_mode;
238 __le16 clock_offset; 245 __le16 clock_offset;
239 __u8 role_switch; 246 __u8 role_switch;
240} __attribute__ ((packed)); 247} __packed;
241 248
242#define HCI_OP_DISCONNECT 0x0406 249#define HCI_OP_DISCONNECT 0x0406
243struct hci_cp_disconnect { 250struct hci_cp_disconnect {
244 __le16 handle; 251 __le16 handle;
245 __u8 reason; 252 __u8 reason;
246} __attribute__ ((packed)); 253} __packed;
247 254
248#define HCI_OP_ADD_SCO 0x0407 255#define HCI_OP_ADD_SCO 0x0407
249struct hci_cp_add_sco { 256struct hci_cp_add_sco {
250 __le16 handle; 257 __le16 handle;
251 __le16 pkt_type; 258 __le16 pkt_type;
252} __attribute__ ((packed)); 259} __packed;
253 260
254#define HCI_OP_CREATE_CONN_CANCEL 0x0408 261#define HCI_OP_CREATE_CONN_CANCEL 0x0408
255struct hci_cp_create_conn_cancel { 262struct hci_cp_create_conn_cancel {
256 bdaddr_t bdaddr; 263 bdaddr_t bdaddr;
257} __attribute__ ((packed)); 264} __packed;
258 265
259#define HCI_OP_ACCEPT_CONN_REQ 0x0409 266#define HCI_OP_ACCEPT_CONN_REQ 0x0409
260struct hci_cp_accept_conn_req { 267struct hci_cp_accept_conn_req {
261 bdaddr_t bdaddr; 268 bdaddr_t bdaddr;
262 __u8 role; 269 __u8 role;
263} __attribute__ ((packed)); 270} __packed;
264 271
265#define HCI_OP_REJECT_CONN_REQ 0x040a 272#define HCI_OP_REJECT_CONN_REQ 0x040a
266struct hci_cp_reject_conn_req { 273struct hci_cp_reject_conn_req {
267 bdaddr_t bdaddr; 274 bdaddr_t bdaddr;
268 __u8 reason; 275 __u8 reason;
269} __attribute__ ((packed)); 276} __packed;
270 277
271#define HCI_OP_LINK_KEY_REPLY 0x040b 278#define HCI_OP_LINK_KEY_REPLY 0x040b
272struct hci_cp_link_key_reply { 279struct hci_cp_link_key_reply {
273 bdaddr_t bdaddr; 280 bdaddr_t bdaddr;
274 __u8 link_key[16]; 281 __u8 link_key[16];
275} __attribute__ ((packed)); 282} __packed;
276 283
277#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c 284#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c
278struct hci_cp_link_key_neg_reply { 285struct hci_cp_link_key_neg_reply {
279 bdaddr_t bdaddr; 286 bdaddr_t bdaddr;
280} __attribute__ ((packed)); 287} __packed;
281 288
282#define HCI_OP_PIN_CODE_REPLY 0x040d 289#define HCI_OP_PIN_CODE_REPLY 0x040d
283struct hci_cp_pin_code_reply { 290struct hci_cp_pin_code_reply {
284 bdaddr_t bdaddr; 291 bdaddr_t bdaddr;
285 __u8 pin_len; 292 __u8 pin_len;
286 __u8 pin_code[16]; 293 __u8 pin_code[16];
287} __attribute__ ((packed)); 294} __packed;
288 295
289#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e 296#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e
290struct hci_cp_pin_code_neg_reply { 297struct hci_cp_pin_code_neg_reply {
291 bdaddr_t bdaddr; 298 bdaddr_t bdaddr;
292} __attribute__ ((packed)); 299} __packed;
293 300
294#define HCI_OP_CHANGE_CONN_PTYPE 0x040f 301#define HCI_OP_CHANGE_CONN_PTYPE 0x040f
295struct hci_cp_change_conn_ptype { 302struct hci_cp_change_conn_ptype {
296 __le16 handle; 303 __le16 handle;
297 __le16 pkt_type; 304 __le16 pkt_type;
298} __attribute__ ((packed)); 305} __packed;
299 306
300#define HCI_OP_AUTH_REQUESTED 0x0411 307#define HCI_OP_AUTH_REQUESTED 0x0411
301struct hci_cp_auth_requested { 308struct hci_cp_auth_requested {
302 __le16 handle; 309 __le16 handle;
303} __attribute__ ((packed)); 310} __packed;
304 311
305#define HCI_OP_SET_CONN_ENCRYPT 0x0413 312#define HCI_OP_SET_CONN_ENCRYPT 0x0413
306struct hci_cp_set_conn_encrypt { 313struct hci_cp_set_conn_encrypt {
307 __le16 handle; 314 __le16 handle;
308 __u8 encrypt; 315 __u8 encrypt;
309} __attribute__ ((packed)); 316} __packed;
310 317
311#define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415 318#define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415
312struct hci_cp_change_conn_link_key { 319struct hci_cp_change_conn_link_key {
313 __le16 handle; 320 __le16 handle;
314} __attribute__ ((packed)); 321} __packed;
315 322
316#define HCI_OP_REMOTE_NAME_REQ 0x0419 323#define HCI_OP_REMOTE_NAME_REQ 0x0419
317struct hci_cp_remote_name_req { 324struct hci_cp_remote_name_req {
@@ -319,28 +326,28 @@ struct hci_cp_remote_name_req {
319 __u8 pscan_rep_mode; 326 __u8 pscan_rep_mode;
320 __u8 pscan_mode; 327 __u8 pscan_mode;
321 __le16 clock_offset; 328 __le16 clock_offset;
322} __attribute__ ((packed)); 329} __packed;
323 330
324#define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a 331#define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a
325struct hci_cp_remote_name_req_cancel { 332struct hci_cp_remote_name_req_cancel {
326 bdaddr_t bdaddr; 333 bdaddr_t bdaddr;
327} __attribute__ ((packed)); 334} __packed;
328 335
329#define HCI_OP_READ_REMOTE_FEATURES 0x041b 336#define HCI_OP_READ_REMOTE_FEATURES 0x041b
330struct hci_cp_read_remote_features { 337struct hci_cp_read_remote_features {
331 __le16 handle; 338 __le16 handle;
332} __attribute__ ((packed)); 339} __packed;
333 340
334#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c 341#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
335struct hci_cp_read_remote_ext_features { 342struct hci_cp_read_remote_ext_features {
336 __le16 handle; 343 __le16 handle;
337 __u8 page; 344 __u8 page;
338} __attribute__ ((packed)); 345} __packed;
339 346
340#define HCI_OP_READ_REMOTE_VERSION 0x041d 347#define HCI_OP_READ_REMOTE_VERSION 0x041d
341struct hci_cp_read_remote_version { 348struct hci_cp_read_remote_version {
342 __le16 handle; 349 __le16 handle;
343} __attribute__ ((packed)); 350} __packed;
344 351
345#define HCI_OP_SETUP_SYNC_CONN 0x0428 352#define HCI_OP_SETUP_SYNC_CONN 0x0428
346struct hci_cp_setup_sync_conn { 353struct hci_cp_setup_sync_conn {
@@ -351,7 +358,7 @@ struct hci_cp_setup_sync_conn {
351 __le16 voice_setting; 358 __le16 voice_setting;
352 __u8 retrans_effort; 359 __u8 retrans_effort;
353 __le16 pkt_type; 360 __le16 pkt_type;
354} __attribute__ ((packed)); 361} __packed;
355 362
356#define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429 363#define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429
357struct hci_cp_accept_sync_conn_req { 364struct hci_cp_accept_sync_conn_req {
@@ -362,13 +369,13 @@ struct hci_cp_accept_sync_conn_req {
362 __le16 content_format; 369 __le16 content_format;
363 __u8 retrans_effort; 370 __u8 retrans_effort;
364 __le16 pkt_type; 371 __le16 pkt_type;
365} __attribute__ ((packed)); 372} __packed;
366 373
367#define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a 374#define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a
368struct hci_cp_reject_sync_conn_req { 375struct hci_cp_reject_sync_conn_req {
369 bdaddr_t bdaddr; 376 bdaddr_t bdaddr;
370 __u8 reason; 377 __u8 reason;
371} __attribute__ ((packed)); 378} __packed;
372 379
373#define HCI_OP_SNIFF_MODE 0x0803 380#define HCI_OP_SNIFF_MODE 0x0803
374struct hci_cp_sniff_mode { 381struct hci_cp_sniff_mode {
@@ -377,59 +384,59 @@ struct hci_cp_sniff_mode {
377 __le16 min_interval; 384 __le16 min_interval;
378 __le16 attempt; 385 __le16 attempt;
379 __le16 timeout; 386 __le16 timeout;
380} __attribute__ ((packed)); 387} __packed;
381 388
382#define HCI_OP_EXIT_SNIFF_MODE 0x0804 389#define HCI_OP_EXIT_SNIFF_MODE 0x0804
383struct hci_cp_exit_sniff_mode { 390struct hci_cp_exit_sniff_mode {
384 __le16 handle; 391 __le16 handle;
385} __attribute__ ((packed)); 392} __packed;
386 393
387#define HCI_OP_ROLE_DISCOVERY 0x0809 394#define HCI_OP_ROLE_DISCOVERY 0x0809
388struct hci_cp_role_discovery { 395struct hci_cp_role_discovery {
389 __le16 handle; 396 __le16 handle;
390} __attribute__ ((packed)); 397} __packed;
391struct hci_rp_role_discovery { 398struct hci_rp_role_discovery {
392 __u8 status; 399 __u8 status;
393 __le16 handle; 400 __le16 handle;
394 __u8 role; 401 __u8 role;
395} __attribute__ ((packed)); 402} __packed;
396 403
397#define HCI_OP_SWITCH_ROLE 0x080b 404#define HCI_OP_SWITCH_ROLE 0x080b
398struct hci_cp_switch_role { 405struct hci_cp_switch_role {
399 bdaddr_t bdaddr; 406 bdaddr_t bdaddr;
400 __u8 role; 407 __u8 role;
401} __attribute__ ((packed)); 408} __packed;
402 409
403#define HCI_OP_READ_LINK_POLICY 0x080c 410#define HCI_OP_READ_LINK_POLICY 0x080c
404struct hci_cp_read_link_policy { 411struct hci_cp_read_link_policy {
405 __le16 handle; 412 __le16 handle;
406} __attribute__ ((packed)); 413} __packed;
407struct hci_rp_read_link_policy { 414struct hci_rp_read_link_policy {
408 __u8 status; 415 __u8 status;
409 __le16 handle; 416 __le16 handle;
410 __le16 policy; 417 __le16 policy;
411} __attribute__ ((packed)); 418} __packed;
412 419
413#define HCI_OP_WRITE_LINK_POLICY 0x080d 420#define HCI_OP_WRITE_LINK_POLICY 0x080d
414struct hci_cp_write_link_policy { 421struct hci_cp_write_link_policy {
415 __le16 handle; 422 __le16 handle;
416 __le16 policy; 423 __le16 policy;
417} __attribute__ ((packed)); 424} __packed;
418struct hci_rp_write_link_policy { 425struct hci_rp_write_link_policy {
419 __u8 status; 426 __u8 status;
420 __le16 handle; 427 __le16 handle;
421} __attribute__ ((packed)); 428} __packed;
422 429
423#define HCI_OP_READ_DEF_LINK_POLICY 0x080e 430#define HCI_OP_READ_DEF_LINK_POLICY 0x080e
424struct hci_rp_read_def_link_policy { 431struct hci_rp_read_def_link_policy {
425 __u8 status; 432 __u8 status;
426 __le16 policy; 433 __le16 policy;
427} __attribute__ ((packed)); 434} __packed;
428 435
429#define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f 436#define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f
430struct hci_cp_write_def_link_policy { 437struct hci_cp_write_def_link_policy {
431 __le16 policy; 438 __le16 policy;
432} __attribute__ ((packed)); 439} __packed;
433 440
434#define HCI_OP_SNIFF_SUBRATE 0x0811 441#define HCI_OP_SNIFF_SUBRATE 0x0811
435struct hci_cp_sniff_subrate { 442struct hci_cp_sniff_subrate {
@@ -437,12 +444,12 @@ struct hci_cp_sniff_subrate {
437 __le16 max_latency; 444 __le16 max_latency;
438 __le16 min_remote_timeout; 445 __le16 min_remote_timeout;
439 __le16 min_local_timeout; 446 __le16 min_local_timeout;
440} __attribute__ ((packed)); 447} __packed;
441 448
442#define HCI_OP_SET_EVENT_MASK 0x0c01 449#define HCI_OP_SET_EVENT_MASK 0x0c01
443struct hci_cp_set_event_mask { 450struct hci_cp_set_event_mask {
444 __u8 mask[8]; 451 __u8 mask[8];
445} __attribute__ ((packed)); 452} __packed;
446 453
447#define HCI_OP_RESET 0x0c03 454#define HCI_OP_RESET 0x0c03
448 455
@@ -451,7 +458,7 @@ struct hci_cp_set_event_flt {
451 __u8 flt_type; 458 __u8 flt_type;
452 __u8 cond_type; 459 __u8 cond_type;
453 __u8 condition[0]; 460 __u8 condition[0];
454} __attribute__ ((packed)); 461} __packed;
455 462
456/* Filter types */ 463/* Filter types */
457#define HCI_FLT_CLEAR_ALL 0x00 464#define HCI_FLT_CLEAR_ALL 0x00
@@ -470,13 +477,13 @@ struct hci_cp_set_event_flt {
470#define HCI_OP_WRITE_LOCAL_NAME 0x0c13 477#define HCI_OP_WRITE_LOCAL_NAME 0x0c13
471struct hci_cp_write_local_name { 478struct hci_cp_write_local_name {
472 __u8 name[248]; 479 __u8 name[248];
473} __attribute__ ((packed)); 480} __packed;
474 481
475#define HCI_OP_READ_LOCAL_NAME 0x0c14 482#define HCI_OP_READ_LOCAL_NAME 0x0c14
476struct hci_rp_read_local_name { 483struct hci_rp_read_local_name {
477 __u8 status; 484 __u8 status;
478 __u8 name[248]; 485 __u8 name[248];
479} __attribute__ ((packed)); 486} __packed;
480 487
481#define HCI_OP_WRITE_CA_TIMEOUT 0x0c16 488#define HCI_OP_WRITE_CA_TIMEOUT 0x0c16
482 489
@@ -504,23 +511,23 @@ struct hci_rp_read_local_name {
504struct hci_rp_read_class_of_dev { 511struct hci_rp_read_class_of_dev {
505 __u8 status; 512 __u8 status;
506 __u8 dev_class[3]; 513 __u8 dev_class[3];
507} __attribute__ ((packed)); 514} __packed;
508 515
509#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24 516#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24
510struct hci_cp_write_class_of_dev { 517struct hci_cp_write_class_of_dev {
511 __u8 dev_class[3]; 518 __u8 dev_class[3];
512} __attribute__ ((packed)); 519} __packed;
513 520
514#define HCI_OP_READ_VOICE_SETTING 0x0c25 521#define HCI_OP_READ_VOICE_SETTING 0x0c25
515struct hci_rp_read_voice_setting { 522struct hci_rp_read_voice_setting {
516 __u8 status; 523 __u8 status;
517 __le16 voice_setting; 524 __le16 voice_setting;
518} __attribute__ ((packed)); 525} __packed;
519 526
520#define HCI_OP_WRITE_VOICE_SETTING 0x0c26 527#define HCI_OP_WRITE_VOICE_SETTING 0x0c26
521struct hci_cp_write_voice_setting { 528struct hci_cp_write_voice_setting {
522 __le16 voice_setting; 529 __le16 voice_setting;
523} __attribute__ ((packed)); 530} __packed;
524 531
525#define HCI_OP_HOST_BUFFER_SIZE 0x0c33 532#define HCI_OP_HOST_BUFFER_SIZE 0x0c33
526struct hci_cp_host_buffer_size { 533struct hci_cp_host_buffer_size {
@@ -528,18 +535,18 @@ struct hci_cp_host_buffer_size {
528 __u8 sco_mtu; 535 __u8 sco_mtu;
529 __le16 acl_max_pkt; 536 __le16 acl_max_pkt;
530 __le16 sco_max_pkt; 537 __le16 sco_max_pkt;
531} __attribute__ ((packed)); 538} __packed;
532 539
533#define HCI_OP_READ_SSP_MODE 0x0c55 540#define HCI_OP_READ_SSP_MODE 0x0c55
534struct hci_rp_read_ssp_mode { 541struct hci_rp_read_ssp_mode {
535 __u8 status; 542 __u8 status;
536 __u8 mode; 543 __u8 mode;
537} __attribute__ ((packed)); 544} __packed;
538 545
539#define HCI_OP_WRITE_SSP_MODE 0x0c56 546#define HCI_OP_WRITE_SSP_MODE 0x0c56
540struct hci_cp_write_ssp_mode { 547struct hci_cp_write_ssp_mode {
541 __u8 mode; 548 __u8 mode;
542} __attribute__ ((packed)); 549} __packed;
543 550
544#define HCI_OP_READ_LOCAL_VERSION 0x1001 551#define HCI_OP_READ_LOCAL_VERSION 0x1001
545struct hci_rp_read_local_version { 552struct hci_rp_read_local_version {
@@ -549,19 +556,19 @@ struct hci_rp_read_local_version {
549 __u8 lmp_ver; 556 __u8 lmp_ver;
550 __le16 manufacturer; 557 __le16 manufacturer;
551 __le16 lmp_subver; 558 __le16 lmp_subver;
552} __attribute__ ((packed)); 559} __packed;
553 560
554#define HCI_OP_READ_LOCAL_COMMANDS 0x1002 561#define HCI_OP_READ_LOCAL_COMMANDS 0x1002
555struct hci_rp_read_local_commands { 562struct hci_rp_read_local_commands {
556 __u8 status; 563 __u8 status;
557 __u8 commands[64]; 564 __u8 commands[64];
558} __attribute__ ((packed)); 565} __packed;
559 566
560#define HCI_OP_READ_LOCAL_FEATURES 0x1003 567#define HCI_OP_READ_LOCAL_FEATURES 0x1003
561struct hci_rp_read_local_features { 568struct hci_rp_read_local_features {
562 __u8 status; 569 __u8 status;
563 __u8 features[8]; 570 __u8 features[8];
564} __attribute__ ((packed)); 571} __packed;
565 572
566#define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004 573#define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004
567struct hci_rp_read_local_ext_features { 574struct hci_rp_read_local_ext_features {
@@ -569,7 +576,7 @@ struct hci_rp_read_local_ext_features {
569 __u8 page; 576 __u8 page;
570 __u8 max_page; 577 __u8 max_page;
571 __u8 features[8]; 578 __u8 features[8];
572} __attribute__ ((packed)); 579} __packed;
573 580
574#define HCI_OP_READ_BUFFER_SIZE 0x1005 581#define HCI_OP_READ_BUFFER_SIZE 0x1005
575struct hci_rp_read_buffer_size { 582struct hci_rp_read_buffer_size {
@@ -578,13 +585,13 @@ struct hci_rp_read_buffer_size {
578 __u8 sco_mtu; 585 __u8 sco_mtu;
579 __le16 acl_max_pkt; 586 __le16 acl_max_pkt;
580 __le16 sco_max_pkt; 587 __le16 sco_max_pkt;
581} __attribute__ ((packed)); 588} __packed;
582 589
583#define HCI_OP_READ_BD_ADDR 0x1009 590#define HCI_OP_READ_BD_ADDR 0x1009
584struct hci_rp_read_bd_addr { 591struct hci_rp_read_bd_addr {
585 __u8 status; 592 __u8 status;
586 bdaddr_t bdaddr; 593 bdaddr_t bdaddr;
587} __attribute__ ((packed)); 594} __packed;
588 595
589/* ---- HCI Events ---- */ 596/* ---- HCI Events ---- */
590#define HCI_EV_INQUIRY_COMPLETE 0x01 597#define HCI_EV_INQUIRY_COMPLETE 0x01
@@ -597,7 +604,7 @@ struct inquiry_info {
597 __u8 pscan_mode; 604 __u8 pscan_mode;
598 __u8 dev_class[3]; 605 __u8 dev_class[3];
599 __le16 clock_offset; 606 __le16 clock_offset;
600} __attribute__ ((packed)); 607} __packed;
601 608
602#define HCI_EV_CONN_COMPLETE 0x03 609#define HCI_EV_CONN_COMPLETE 0x03
603struct hci_ev_conn_complete { 610struct hci_ev_conn_complete {
@@ -606,54 +613,54 @@ struct hci_ev_conn_complete {
606 bdaddr_t bdaddr; 613 bdaddr_t bdaddr;
607 __u8 link_type; 614 __u8 link_type;
608 __u8 encr_mode; 615 __u8 encr_mode;
609} __attribute__ ((packed)); 616} __packed;
610 617
611#define HCI_EV_CONN_REQUEST 0x04 618#define HCI_EV_CONN_REQUEST 0x04
612struct hci_ev_conn_request { 619struct hci_ev_conn_request {
613 bdaddr_t bdaddr; 620 bdaddr_t bdaddr;
614 __u8 dev_class[3]; 621 __u8 dev_class[3];
615 __u8 link_type; 622 __u8 link_type;
616} __attribute__ ((packed)); 623} __packed;
617 624
618#define HCI_EV_DISCONN_COMPLETE 0x05 625#define HCI_EV_DISCONN_COMPLETE 0x05
619struct hci_ev_disconn_complete { 626struct hci_ev_disconn_complete {
620 __u8 status; 627 __u8 status;
621 __le16 handle; 628 __le16 handle;
622 __u8 reason; 629 __u8 reason;
623} __attribute__ ((packed)); 630} __packed;
624 631
625#define HCI_EV_AUTH_COMPLETE 0x06 632#define HCI_EV_AUTH_COMPLETE 0x06
626struct hci_ev_auth_complete { 633struct hci_ev_auth_complete {
627 __u8 status; 634 __u8 status;
628 __le16 handle; 635 __le16 handle;
629} __attribute__ ((packed)); 636} __packed;
630 637
631#define HCI_EV_REMOTE_NAME 0x07 638#define HCI_EV_REMOTE_NAME 0x07
632struct hci_ev_remote_name { 639struct hci_ev_remote_name {
633 __u8 status; 640 __u8 status;
634 bdaddr_t bdaddr; 641 bdaddr_t bdaddr;
635 __u8 name[248]; 642 __u8 name[248];
636} __attribute__ ((packed)); 643} __packed;
637 644
638#define HCI_EV_ENCRYPT_CHANGE 0x08 645#define HCI_EV_ENCRYPT_CHANGE 0x08
639struct hci_ev_encrypt_change { 646struct hci_ev_encrypt_change {
640 __u8 status; 647 __u8 status;
641 __le16 handle; 648 __le16 handle;
642 __u8 encrypt; 649 __u8 encrypt;
643} __attribute__ ((packed)); 650} __packed;
644 651
645#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09 652#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
646struct hci_ev_change_link_key_complete { 653struct hci_ev_change_link_key_complete {
647 __u8 status; 654 __u8 status;
648 __le16 handle; 655 __le16 handle;
649} __attribute__ ((packed)); 656} __packed;
650 657
651#define HCI_EV_REMOTE_FEATURES 0x0b 658#define HCI_EV_REMOTE_FEATURES 0x0b
652struct hci_ev_remote_features { 659struct hci_ev_remote_features {
653 __u8 status; 660 __u8 status;
654 __le16 handle; 661 __le16 handle;
655 __u8 features[8]; 662 __u8 features[8];
656} __attribute__ ((packed)); 663} __packed;
657 664
658#define HCI_EV_REMOTE_VERSION 0x0c 665#define HCI_EV_REMOTE_VERSION 0x0c
659struct hci_ev_remote_version { 666struct hci_ev_remote_version {
@@ -662,7 +669,7 @@ struct hci_ev_remote_version {
662 __u8 lmp_ver; 669 __u8 lmp_ver;
663 __le16 manufacturer; 670 __le16 manufacturer;
664 __le16 lmp_subver; 671 __le16 lmp_subver;
665} __attribute__ ((packed)); 672} __packed;
666 673
667#define HCI_EV_QOS_SETUP_COMPLETE 0x0d 674#define HCI_EV_QOS_SETUP_COMPLETE 0x0d
668struct hci_qos { 675struct hci_qos {
@@ -671,38 +678,38 @@ struct hci_qos {
671 __u32 peak_bandwidth; 678 __u32 peak_bandwidth;
672 __u32 latency; 679 __u32 latency;
673 __u32 delay_variation; 680 __u32 delay_variation;
674} __attribute__ ((packed)); 681} __packed;
675struct hci_ev_qos_setup_complete { 682struct hci_ev_qos_setup_complete {
676 __u8 status; 683 __u8 status;
677 __le16 handle; 684 __le16 handle;
678 struct hci_qos qos; 685 struct hci_qos qos;
679} __attribute__ ((packed)); 686} __packed;
680 687
681#define HCI_EV_CMD_COMPLETE 0x0e 688#define HCI_EV_CMD_COMPLETE 0x0e
682struct hci_ev_cmd_complete { 689struct hci_ev_cmd_complete {
683 __u8 ncmd; 690 __u8 ncmd;
684 __le16 opcode; 691 __le16 opcode;
685} __attribute__ ((packed)); 692} __packed;
686 693
687#define HCI_EV_CMD_STATUS 0x0f 694#define HCI_EV_CMD_STATUS 0x0f
688struct hci_ev_cmd_status { 695struct hci_ev_cmd_status {
689 __u8 status; 696 __u8 status;
690 __u8 ncmd; 697 __u8 ncmd;
691 __le16 opcode; 698 __le16 opcode;
692} __attribute__ ((packed)); 699} __packed;
693 700
694#define HCI_EV_ROLE_CHANGE 0x12 701#define HCI_EV_ROLE_CHANGE 0x12
695struct hci_ev_role_change { 702struct hci_ev_role_change {
696 __u8 status; 703 __u8 status;
697 bdaddr_t bdaddr; 704 bdaddr_t bdaddr;
698 __u8 role; 705 __u8 role;
699} __attribute__ ((packed)); 706} __packed;
700 707
701#define HCI_EV_NUM_COMP_PKTS 0x13 708#define HCI_EV_NUM_COMP_PKTS 0x13
702struct hci_ev_num_comp_pkts { 709struct hci_ev_num_comp_pkts {
703 __u8 num_hndl; 710 __u8 num_hndl;
704 /* variable length part */ 711 /* variable length part */
705} __attribute__ ((packed)); 712} __packed;
706 713
707#define HCI_EV_MODE_CHANGE 0x14 714#define HCI_EV_MODE_CHANGE 0x14
708struct hci_ev_mode_change { 715struct hci_ev_mode_change {
@@ -710,44 +717,44 @@ struct hci_ev_mode_change {
710 __le16 handle; 717 __le16 handle;
711 __u8 mode; 718 __u8 mode;
712 __le16 interval; 719 __le16 interval;
713} __attribute__ ((packed)); 720} __packed;
714 721
715#define HCI_EV_PIN_CODE_REQ 0x16 722#define HCI_EV_PIN_CODE_REQ 0x16
716struct hci_ev_pin_code_req { 723struct hci_ev_pin_code_req {
717 bdaddr_t bdaddr; 724 bdaddr_t bdaddr;
718} __attribute__ ((packed)); 725} __packed;
719 726
720#define HCI_EV_LINK_KEY_REQ 0x17 727#define HCI_EV_LINK_KEY_REQ 0x17
721struct hci_ev_link_key_req { 728struct hci_ev_link_key_req {
722 bdaddr_t bdaddr; 729 bdaddr_t bdaddr;
723} __attribute__ ((packed)); 730} __packed;
724 731
725#define HCI_EV_LINK_KEY_NOTIFY 0x18 732#define HCI_EV_LINK_KEY_NOTIFY 0x18
726struct hci_ev_link_key_notify { 733struct hci_ev_link_key_notify {
727 bdaddr_t bdaddr; 734 bdaddr_t bdaddr;
728 __u8 link_key[16]; 735 __u8 link_key[16];
729 __u8 key_type; 736 __u8 key_type;
730} __attribute__ ((packed)); 737} __packed;
731 738
732#define HCI_EV_CLOCK_OFFSET 0x1c 739#define HCI_EV_CLOCK_OFFSET 0x1c
733struct hci_ev_clock_offset { 740struct hci_ev_clock_offset {
734 __u8 status; 741 __u8 status;
735 __le16 handle; 742 __le16 handle;
736 __le16 clock_offset; 743 __le16 clock_offset;
737} __attribute__ ((packed)); 744} __packed;
738 745
739#define HCI_EV_PKT_TYPE_CHANGE 0x1d 746#define HCI_EV_PKT_TYPE_CHANGE 0x1d
740struct hci_ev_pkt_type_change { 747struct hci_ev_pkt_type_change {
741 __u8 status; 748 __u8 status;
742 __le16 handle; 749 __le16 handle;
743 __le16 pkt_type; 750 __le16 pkt_type;
744} __attribute__ ((packed)); 751} __packed;
745 752
746#define HCI_EV_PSCAN_REP_MODE 0x20 753#define HCI_EV_PSCAN_REP_MODE 0x20
747struct hci_ev_pscan_rep_mode { 754struct hci_ev_pscan_rep_mode {
748 bdaddr_t bdaddr; 755 bdaddr_t bdaddr;
749 __u8 pscan_rep_mode; 756 __u8 pscan_rep_mode;
750} __attribute__ ((packed)); 757} __packed;
751 758
752#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 759#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
753struct inquiry_info_with_rssi { 760struct inquiry_info_with_rssi {
@@ -757,7 +764,7 @@ struct inquiry_info_with_rssi {
757 __u8 dev_class[3]; 764 __u8 dev_class[3];
758 __le16 clock_offset; 765 __le16 clock_offset;
759 __s8 rssi; 766 __s8 rssi;
760} __attribute__ ((packed)); 767} __packed;
761struct inquiry_info_with_rssi_and_pscan_mode { 768struct inquiry_info_with_rssi_and_pscan_mode {
762 bdaddr_t bdaddr; 769 bdaddr_t bdaddr;
763 __u8 pscan_rep_mode; 770 __u8 pscan_rep_mode;
@@ -766,7 +773,7 @@ struct inquiry_info_with_rssi_and_pscan_mode {
766 __u8 dev_class[3]; 773 __u8 dev_class[3];
767 __le16 clock_offset; 774 __le16 clock_offset;
768 __s8 rssi; 775 __s8 rssi;
769} __attribute__ ((packed)); 776} __packed;
770 777
771#define HCI_EV_REMOTE_EXT_FEATURES 0x23 778#define HCI_EV_REMOTE_EXT_FEATURES 0x23
772struct hci_ev_remote_ext_features { 779struct hci_ev_remote_ext_features {
@@ -775,7 +782,7 @@ struct hci_ev_remote_ext_features {
775 __u8 page; 782 __u8 page;
776 __u8 max_page; 783 __u8 max_page;
777 __u8 features[8]; 784 __u8 features[8];
778} __attribute__ ((packed)); 785} __packed;
779 786
780#define HCI_EV_SYNC_CONN_COMPLETE 0x2c 787#define HCI_EV_SYNC_CONN_COMPLETE 0x2c
781struct hci_ev_sync_conn_complete { 788struct hci_ev_sync_conn_complete {
@@ -788,7 +795,7 @@ struct hci_ev_sync_conn_complete {
788 __le16 rx_pkt_len; 795 __le16 rx_pkt_len;
789 __le16 tx_pkt_len; 796 __le16 tx_pkt_len;
790 __u8 air_mode; 797 __u8 air_mode;
791} __attribute__ ((packed)); 798} __packed;
792 799
793#define HCI_EV_SYNC_CONN_CHANGED 0x2d 800#define HCI_EV_SYNC_CONN_CHANGED 0x2d
794struct hci_ev_sync_conn_changed { 801struct hci_ev_sync_conn_changed {
@@ -798,7 +805,7 @@ struct hci_ev_sync_conn_changed {
798 __u8 retrans_window; 805 __u8 retrans_window;
799 __le16 rx_pkt_len; 806 __le16 rx_pkt_len;
800 __le16 tx_pkt_len; 807 __le16 tx_pkt_len;
801} __attribute__ ((packed)); 808} __packed;
802 809
803#define HCI_EV_SNIFF_SUBRATE 0x2e 810#define HCI_EV_SNIFF_SUBRATE 0x2e
804struct hci_ev_sniff_subrate { 811struct hci_ev_sniff_subrate {
@@ -808,7 +815,7 @@ struct hci_ev_sniff_subrate {
808 __le16 max_rx_latency; 815 __le16 max_rx_latency;
809 __le16 max_remote_timeout; 816 __le16 max_remote_timeout;
810 __le16 max_local_timeout; 817 __le16 max_local_timeout;
811} __attribute__ ((packed)); 818} __packed;
812 819
813#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f 820#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f
814struct extended_inquiry_info { 821struct extended_inquiry_info {
@@ -819,37 +826,37 @@ struct extended_inquiry_info {
819 __le16 clock_offset; 826 __le16 clock_offset;
820 __s8 rssi; 827 __s8 rssi;
821 __u8 data[240]; 828 __u8 data[240];
822} __attribute__ ((packed)); 829} __packed;
823 830
824#define HCI_EV_IO_CAPA_REQUEST 0x31 831#define HCI_EV_IO_CAPA_REQUEST 0x31
825struct hci_ev_io_capa_request { 832struct hci_ev_io_capa_request {
826 bdaddr_t bdaddr; 833 bdaddr_t bdaddr;
827} __attribute__ ((packed)); 834} __packed;
828 835
829#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36 836#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
830struct hci_ev_simple_pair_complete { 837struct hci_ev_simple_pair_complete {
831 __u8 status; 838 __u8 status;
832 bdaddr_t bdaddr; 839 bdaddr_t bdaddr;
833} __attribute__ ((packed)); 840} __packed;
834 841
835#define HCI_EV_REMOTE_HOST_FEATURES 0x3d 842#define HCI_EV_REMOTE_HOST_FEATURES 0x3d
836struct hci_ev_remote_host_features { 843struct hci_ev_remote_host_features {
837 bdaddr_t bdaddr; 844 bdaddr_t bdaddr;
838 __u8 features[8]; 845 __u8 features[8];
839} __attribute__ ((packed)); 846} __packed;
840 847
841/* Internal events generated by Bluetooth stack */ 848/* Internal events generated by Bluetooth stack */
842#define HCI_EV_STACK_INTERNAL 0xfd 849#define HCI_EV_STACK_INTERNAL 0xfd
843struct hci_ev_stack_internal { 850struct hci_ev_stack_internal {
844 __u16 type; 851 __u16 type;
845 __u8 data[0]; 852 __u8 data[0];
846} __attribute__ ((packed)); 853} __packed;
847 854
848#define HCI_EV_SI_DEVICE 0x01 855#define HCI_EV_SI_DEVICE 0x01
849struct hci_ev_si_device { 856struct hci_ev_si_device {
850 __u16 event; 857 __u16 event;
851 __u16 dev_id; 858 __u16 dev_id;
852} __attribute__ ((packed)); 859} __packed;
853 860
854#define HCI_EV_SI_SECURITY 0x02 861#define HCI_EV_SI_SECURITY 0x02
855struct hci_ev_si_security { 862struct hci_ev_si_security {
@@ -857,7 +864,7 @@ struct hci_ev_si_security {
857 __u16 proto; 864 __u16 proto;
858 __u16 subproto; 865 __u16 subproto;
859 __u8 incoming; 866 __u8 incoming;
860} __attribute__ ((packed)); 867} __packed;
861 868
862/* ---- HCI Packet structures ---- */ 869/* ---- HCI Packet structures ---- */
863#define HCI_COMMAND_HDR_SIZE 3 870#define HCI_COMMAND_HDR_SIZE 3
@@ -868,22 +875,22 @@ struct hci_ev_si_security {
868struct hci_command_hdr { 875struct hci_command_hdr {
869 __le16 opcode; /* OCF & OGF */ 876 __le16 opcode; /* OCF & OGF */
870 __u8 plen; 877 __u8 plen;
871} __attribute__ ((packed)); 878} __packed;
872 879
873struct hci_event_hdr { 880struct hci_event_hdr {
874 __u8 evt; 881 __u8 evt;
875 __u8 plen; 882 __u8 plen;
876} __attribute__ ((packed)); 883} __packed;
877 884
878struct hci_acl_hdr { 885struct hci_acl_hdr {
879 __le16 handle; /* Handle & Flags(PB, BC) */ 886 __le16 handle; /* Handle & Flags(PB, BC) */
880 __le16 dlen; 887 __le16 dlen;
881} __attribute__ ((packed)); 888} __packed;
882 889
883struct hci_sco_hdr { 890struct hci_sco_hdr {
884 __le16 handle; 891 __le16 handle;
885 __u8 dlen; 892 __u8 dlen;
886} __attribute__ ((packed)); 893} __packed;
887 894
888#ifdef __KERNEL__ 895#ifdef __KERNEL__
889#include <linux/skbuff.h> 896#include <linux/skbuff.h>