11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds BlueZ - Bluetooth protocol stack for Linux 31da177e4SLinus Torvalds Copyright (C) 2000-2001 Qualcomm Incorporated 41da177e4SLinus Torvalds 51da177e4SLinus Torvalds Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 61da177e4SLinus Torvalds 71da177e4SLinus Torvalds This program is free software; you can redistribute it and/or modify 81da177e4SLinus Torvalds it under the terms of the GNU General Public License version 2 as 91da177e4SLinus Torvalds published by the Free Software Foundation; 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 121da177e4SLinus Torvalds OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 131da177e4SLinus Torvalds FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 141da177e4SLinus Torvalds IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 151da177e4SLinus Torvalds CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 161da177e4SLinus Torvalds WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 171da177e4SLinus Torvalds ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 181da177e4SLinus Torvalds OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 191da177e4SLinus Torvalds 201da177e4SLinus Torvalds ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 211da177e4SLinus Torvalds COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 221da177e4SLinus Torvalds SOFTWARE IS DISCLAIMED. 231da177e4SLinus Torvalds */ 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds #ifndef __HCI_H 261da177e4SLinus Torvalds #define __HCI_H 271da177e4SLinus Torvalds 281da177e4SLinus Torvalds #define HCI_MAX_ACL_SIZE 1024 291da177e4SLinus Torvalds #define HCI_MAX_SCO_SIZE 255 301da177e4SLinus Torvalds #define HCI_MAX_EVENT_SIZE 260 311da177e4SLinus Torvalds #define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4) 321da177e4SLinus Torvalds 339b3b4460SAndrei Emeltchenko #define HCI_LINK_KEY_SIZE 16 34523e93cdSAndrei Emeltchenko #define HCI_AMP_LINK_KEY_SIZE (2 * HCI_LINK_KEY_SIZE) 359b3b4460SAndrei Emeltchenko 36903e4541SAndrei Emeltchenko #define HCI_MAX_AMP_ASSOC_SIZE 672 37903e4541SAndrei Emeltchenko 381da177e4SLinus Torvalds /* HCI dev events */ 391da177e4SLinus Torvalds #define HCI_DEV_REG 1 401da177e4SLinus Torvalds #define HCI_DEV_UNREG 2 411da177e4SLinus Torvalds #define HCI_DEV_UP 3 421da177e4SLinus Torvalds #define HCI_DEV_DOWN 4 431da177e4SLinus Torvalds #define HCI_DEV_SUSPEND 5 441da177e4SLinus Torvalds #define HCI_DEV_RESUME 6 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds /* HCI notify events */ 471da177e4SLinus Torvalds #define HCI_NOTIFY_CONN_ADD 1 481da177e4SLinus Torvalds #define HCI_NOTIFY_CONN_DEL 2 491da177e4SLinus Torvalds #define HCI_NOTIFY_VOICE_SETTING 3 501da177e4SLinus Torvalds 51c13854ceSMarcel Holtmann /* HCI bus types */ 520ac53939SMarcel Holtmann #define HCI_VIRTUAL 0 531da177e4SLinus Torvalds #define HCI_USB 1 541da177e4SLinus Torvalds #define HCI_PCCARD 2 551da177e4SLinus Torvalds #define HCI_UART 3 561da177e4SLinus Torvalds #define HCI_RS232 4 571da177e4SLinus Torvalds #define HCI_PCI 5 580ac53939SMarcel Holtmann #define HCI_SDIO 6 591da177e4SLinus Torvalds 60943da25dSMarcel Holtmann /* HCI controller types */ 61943da25dSMarcel Holtmann #define HCI_BREDR 0x00 628f1e1742SDavid Vrabel #define HCI_AMP 0x01 63943da25dSMarcel Holtmann 648598d064SAndrei Emeltchenko /* First BR/EDR Controller shall have ID = 0 */ 658598d064SAndrei Emeltchenko #define HCI_BREDR_ID 0 668598d064SAndrei Emeltchenko 67ab846ec4SAndrei Emeltchenko /* AMP controller status */ 68ab846ec4SAndrei Emeltchenko #define AMP_CTRL_POWERED_DOWN 0x00 69ab846ec4SAndrei Emeltchenko #define AMP_CTRL_BLUETOOTH_ONLY 0x01 70ab846ec4SAndrei Emeltchenko #define AMP_CTRL_NO_CAPACITY 0x02 71ab846ec4SAndrei Emeltchenko #define AMP_CTRL_LOW_CAPACITY 0x03 72ab846ec4SAndrei Emeltchenko #define AMP_CTRL_MEDIUM_CAPACITY 0x04 73ab846ec4SAndrei Emeltchenko #define AMP_CTRL_HIGH_CAPACITY 0x05 74ab846ec4SAndrei Emeltchenko #define AMP_CTRL_FULL_CAPACITY 0x06 75ab846ec4SAndrei Emeltchenko 761da177e4SLinus Torvalds /* HCI device quirks */ 771da177e4SLinus Torvalds enum { 78a6c511c6SSzymon Janc HCI_QUIRK_RESET_ON_CLOSE, 79da1f5198SMarcel Holtmann HCI_QUIRK_RAW_DEVICE, 80da1f5198SMarcel Holtmann HCI_QUIRK_FIXUP_BUFFER_SIZE 811da177e4SLinus Torvalds }; 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds /* HCI device flags */ 841da177e4SLinus Torvalds enum { 851da177e4SLinus Torvalds HCI_UP, 861da177e4SLinus Torvalds HCI_INIT, 871da177e4SLinus Torvalds HCI_RUNNING, 881da177e4SLinus Torvalds 891da177e4SLinus Torvalds HCI_PSCAN, 901da177e4SLinus Torvalds HCI_ISCAN, 911da177e4SLinus Torvalds HCI_AUTH, 921da177e4SLinus Torvalds HCI_ENCRYPT, 931da177e4SLinus Torvalds HCI_INQUIRY, 941da177e4SLinus Torvalds 951da177e4SLinus Torvalds HCI_RAW, 96ab81cbf9SJohan Hedberg 9710572132SGustavo F. Padovan HCI_RESET, 981da177e4SLinus Torvalds }; 991da177e4SLinus Torvalds 100d23264a8SAndre Guedes /* 101d23264a8SAndre Guedes * BR/EDR and/or LE controller flags: the flags defined here should represent 102d23264a8SAndre Guedes * states from the controller. 103d23264a8SAndre Guedes */ 104d23264a8SAndre Guedes enum { 105a8b2d5c2SJohan Hedberg HCI_SETUP, 106a8b2d5c2SJohan Hedberg HCI_AUTO_OFF, 107a8b2d5c2SJohan Hedberg HCI_MGMT, 108a8b2d5c2SJohan Hedberg HCI_PAIRABLE, 109a8b2d5c2SJohan Hedberg HCI_SERVICE_CACHE, 110a8b2d5c2SJohan Hedberg HCI_LINK_KEYS, 111a8b2d5c2SJohan Hedberg HCI_DEBUG_KEYS, 11294324962SJohan Hovold HCI_UNREGISTER, 113a8b2d5c2SJohan Hedberg 114d23264a8SAndre Guedes HCI_LE_SCAN, 11584bde9d6SJohan Hedberg HCI_SSP_ENABLED, 1166d80dfd0SJohan Hedberg HCI_HS_ENABLED, 11706199cf8SJohan Hedberg HCI_LE_ENABLED, 11833f8f526SJohan Hedberg HCI_LE_PERIPHERAL, 1195e5282bbSJohan Hedberg HCI_CONNECTABLE, 1205e5282bbSJohan Hedberg HCI_DISCOVERABLE, 12147990ea0SJohan Hedberg HCI_LINK_SECURITY, 12221693c15SAndre Guedes HCI_PERIODIC_INQ, 123d23264a8SAndre Guedes }; 124d23264a8SAndre Guedes 125*2cc6fb00SJohan Hedberg /* A mask for the flags that are supposed to remain when a reset happens 126*2cc6fb00SJohan Hedberg * or the HCI device is closed. 127*2cc6fb00SJohan Hedberg */ 128*2cc6fb00SJohan Hedberg #define HCI_PERSISTENT_MASK (BIT(HCI_LE_SCAN) | BIT(HCI_PERIODIC_INQ)) 129*2cc6fb00SJohan Hedberg 1301da177e4SLinus Torvalds /* HCI ioctl defines */ 1311da177e4SLinus Torvalds #define HCIDEVUP _IOW('H', 201, int) 1321da177e4SLinus Torvalds #define HCIDEVDOWN _IOW('H', 202, int) 1331da177e4SLinus Torvalds #define HCIDEVRESET _IOW('H', 203, int) 1341da177e4SLinus Torvalds #define HCIDEVRESTAT _IOW('H', 204, int) 1351da177e4SLinus Torvalds 1361da177e4SLinus Torvalds #define HCIGETDEVLIST _IOR('H', 210, int) 1371da177e4SLinus Torvalds #define HCIGETDEVINFO _IOR('H', 211, int) 1381da177e4SLinus Torvalds #define HCIGETCONNLIST _IOR('H', 212, int) 1391da177e4SLinus Torvalds #define HCIGETCONNINFO _IOR('H', 213, int) 14040be492fSMarcel Holtmann #define HCIGETAUTHINFO _IOR('H', 215, int) 1411da177e4SLinus Torvalds 1421da177e4SLinus Torvalds #define HCISETRAW _IOW('H', 220, int) 1431da177e4SLinus Torvalds #define HCISETSCAN _IOW('H', 221, int) 1441da177e4SLinus Torvalds #define HCISETAUTH _IOW('H', 222, int) 1451da177e4SLinus Torvalds #define HCISETENCRYPT _IOW('H', 223, int) 1461da177e4SLinus Torvalds #define HCISETPTYPE _IOW('H', 224, int) 1471da177e4SLinus Torvalds #define HCISETLINKPOL _IOW('H', 225, int) 1481da177e4SLinus Torvalds #define HCISETLINKMODE _IOW('H', 226, int) 1491da177e4SLinus Torvalds #define HCISETACLMTU _IOW('H', 227, int) 1501da177e4SLinus Torvalds #define HCISETSCOMTU _IOW('H', 228, int) 1511da177e4SLinus Torvalds 152f0358568SJohan Hedberg #define HCIBLOCKADDR _IOW('H', 230, int) 153f0358568SJohan Hedberg #define HCIUNBLOCKADDR _IOW('H', 231, int) 154f0358568SJohan Hedberg 1551da177e4SLinus Torvalds #define HCIINQUIRY _IOR('H', 240, int) 1561da177e4SLinus Torvalds 1571da177e4SLinus Torvalds /* HCI timeouts */ 1585f246e89SAndrei Emeltchenko #define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */ 1595f246e89SAndrei Emeltchenko #define HCI_PAIRING_TIMEOUT msecs_to_jiffies(60000) /* 60 seconds */ 1605f246e89SAndrei Emeltchenko #define HCI_INIT_TIMEOUT msecs_to_jiffies(10000) /* 10 seconds */ 161d1244adcSSzymon Janc #define HCI_CMD_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */ 1625f246e89SAndrei Emeltchenko #define HCI_ACL_TX_TIMEOUT msecs_to_jiffies(45000) /* 45 seconds */ 1639345d40cSAndrei Emeltchenko #define HCI_AUTO_OFF_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */ 1641da177e4SLinus Torvalds 1655b7f9909SMarcel Holtmann /* HCI data types */ 1661da177e4SLinus Torvalds #define HCI_COMMAND_PKT 0x01 1671da177e4SLinus Torvalds #define HCI_ACLDATA_PKT 0x02 1681da177e4SLinus Torvalds #define HCI_SCODATA_PKT 0x03 1691da177e4SLinus Torvalds #define HCI_EVENT_PKT 0x04 1701da177e4SLinus Torvalds #define HCI_VENDOR_PKT 0xff 1711da177e4SLinus Torvalds 1725b7f9909SMarcel Holtmann /* HCI packet types */ 1731da177e4SLinus Torvalds #define HCI_DM1 0x0008 1741da177e4SLinus Torvalds #define HCI_DM3 0x0400 1751da177e4SLinus Torvalds #define HCI_DM5 0x4000 1761da177e4SLinus Torvalds #define HCI_DH1 0x0010 1771da177e4SLinus Torvalds #define HCI_DH3 0x0800 1781da177e4SLinus Torvalds #define HCI_DH5 0x8000 1791da177e4SLinus Torvalds 1801da177e4SLinus Torvalds #define HCI_HV1 0x0020 1811da177e4SLinus Torvalds #define HCI_HV2 0x0040 1821da177e4SLinus Torvalds #define HCI_HV3 0x0080 1831da177e4SLinus Torvalds 1841da177e4SLinus Torvalds #define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3) 1851da177e4SLinus Torvalds #define ACL_PTYPE_MASK (~SCO_PTYPE_MASK) 1861da177e4SLinus Torvalds 1875b7f9909SMarcel Holtmann /* eSCO packet types */ 1885b7f9909SMarcel Holtmann #define ESCO_HV1 0x0001 1895b7f9909SMarcel Holtmann #define ESCO_HV2 0x0002 1905b7f9909SMarcel Holtmann #define ESCO_HV3 0x0004 1915b7f9909SMarcel Holtmann #define ESCO_EV3 0x0008 1925b7f9909SMarcel Holtmann #define ESCO_EV4 0x0010 1935b7f9909SMarcel Holtmann #define ESCO_EV5 0x0020 194efc7688bSMarcel Holtmann #define ESCO_2EV3 0x0040 195efc7688bSMarcel Holtmann #define ESCO_3EV3 0x0080 196efc7688bSMarcel Holtmann #define ESCO_2EV5 0x0100 197efc7688bSMarcel Holtmann #define ESCO_3EV5 0x0200 1985b7f9909SMarcel Holtmann 199a8746417SMarcel Holtmann #define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3) 200efc7688bSMarcel Holtmann #define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5) 201a8746417SMarcel Holtmann 2021da177e4SLinus Torvalds /* ACL flags */ 203e702112fSAndrei Emeltchenko #define ACL_START_NO_FLUSH 0x00 2041da177e4SLinus Torvalds #define ACL_CONT 0x01 2051da177e4SLinus Torvalds #define ACL_START 0x02 206d73a0988SAndrei Emeltchenko #define ACL_COMPLETE 0x03 2071da177e4SLinus Torvalds #define ACL_ACTIVE_BCAST 0x04 2081da177e4SLinus Torvalds #define ACL_PICO_BCAST 0x08 2091da177e4SLinus Torvalds 2101da177e4SLinus Torvalds /* Baseband links */ 2111da177e4SLinus Torvalds #define SCO_LINK 0x00 2121da177e4SLinus Torvalds #define ACL_LINK 0x01 2135b7f9909SMarcel Holtmann #define ESCO_LINK 0x02 214fcd89c09SVille Tervo /* Low Energy links do not have defined link type. Use invented one */ 215fcd89c09SVille Tervo #define LE_LINK 0x80 2163161ae1cSAndrei Emeltchenko #define AMP_LINK 0x81 2171da177e4SLinus Torvalds 2181da177e4SLinus Torvalds /* LMP features */ 2191da177e4SLinus Torvalds #define LMP_3SLOT 0x01 2201da177e4SLinus Torvalds #define LMP_5SLOT 0x02 2211da177e4SLinus Torvalds #define LMP_ENCRYPT 0x04 2221da177e4SLinus Torvalds #define LMP_SOFFSET 0x08 2231da177e4SLinus Torvalds #define LMP_TACCURACY 0x10 2241da177e4SLinus Torvalds #define LMP_RSWITCH 0x20 2251da177e4SLinus Torvalds #define LMP_HOLD 0x40 22604837f64SMarcel Holtmann #define LMP_SNIFF 0x80 2271da177e4SLinus Torvalds 2281da177e4SLinus Torvalds #define LMP_PARK 0x01 2291da177e4SLinus Torvalds #define LMP_RSSI 0x02 2301da177e4SLinus Torvalds #define LMP_QUALITY 0x04 2311da177e4SLinus Torvalds #define LMP_SCO 0x08 2321da177e4SLinus Torvalds #define LMP_HV2 0x10 2331da177e4SLinus Torvalds #define LMP_HV3 0x20 2341da177e4SLinus Torvalds #define LMP_ULAW 0x40 2351da177e4SLinus Torvalds #define LMP_ALAW 0x80 2361da177e4SLinus Torvalds 2371da177e4SLinus Torvalds #define LMP_CVSD 0x01 2381da177e4SLinus Torvalds #define LMP_PSCHEME 0x02 2391da177e4SLinus Torvalds #define LMP_PCONTROL 0x04 2401da177e4SLinus Torvalds 241d5859e22SJohan Hedberg #define LMP_RSSI_INQ 0x40 2425b7f9909SMarcel Holtmann #define LMP_ESCO 0x80 2435b7f9909SMarcel Holtmann 2445b7f9909SMarcel Holtmann #define LMP_EV4 0x01 2455b7f9909SMarcel Holtmann #define LMP_EV5 0x02 24669ab39eaSJohan Hedberg #define LMP_NO_BREDR 0x20 247d5859e22SJohan Hedberg #define LMP_LE 0x40 2485b7f9909SMarcel Holtmann 24904837f64SMarcel Holtmann #define LMP_SNIFF_SUBR 0x02 250d5859e22SJohan Hedberg #define LMP_PAUSE_ENC 0x04 251efc7688bSMarcel Holtmann #define LMP_EDR_ESCO_2M 0x20 252efc7688bSMarcel Holtmann #define LMP_EDR_ESCO_3M 0x40 253efc7688bSMarcel Holtmann #define LMP_EDR_3S_ESCO 0x80 25404837f64SMarcel Holtmann 255d5859e22SJohan Hedberg #define LMP_EXT_INQ 0x01 256e6100a25SAndre Guedes #define LMP_SIMUL_LE_BR 0x02 257769be974SMarcel Holtmann #define LMP_SIMPLE_PAIR 0x08 258e702112fSAndrei Emeltchenko #define LMP_NO_FLUSH 0x40 259769be974SMarcel Holtmann 260d5859e22SJohan Hedberg #define LMP_LSTO 0x01 261d5859e22SJohan Hedberg #define LMP_INQ_TX_PWR 0x02 262971e3a4bSAndre Guedes #define LMP_EXTFEATURES 0x80 263d5859e22SJohan Hedberg 264eead27daSAndre Guedes /* Extended LMP features */ 265cc2c04ecSJohan Hedberg #define LMP_HOST_SSP 0x01 266eead27daSAndre Guedes #define LMP_HOST_LE 0x02 267cc2c04ecSJohan Hedberg #define LMP_HOST_LE_BREDR 0x04 268eead27daSAndre Guedes 26904837f64SMarcel Holtmann /* Connection modes */ 27004837f64SMarcel Holtmann #define HCI_CM_ACTIVE 0x0000 27104837f64SMarcel Holtmann #define HCI_CM_HOLD 0x0001 27204837f64SMarcel Holtmann #define HCI_CM_SNIFF 0x0002 27304837f64SMarcel Holtmann #define HCI_CM_PARK 0x0003 27404837f64SMarcel Holtmann 2751da177e4SLinus Torvalds /* Link policies */ 2761da177e4SLinus Torvalds #define HCI_LP_RSWITCH 0x0001 2771da177e4SLinus Torvalds #define HCI_LP_HOLD 0x0002 2781da177e4SLinus Torvalds #define HCI_LP_SNIFF 0x0004 2791da177e4SLinus Torvalds #define HCI_LP_PARK 0x0008 2801da177e4SLinus Torvalds 28104837f64SMarcel Holtmann /* Link modes */ 2821da177e4SLinus Torvalds #define HCI_LM_ACCEPT 0x8000 2831da177e4SLinus Torvalds #define HCI_LM_MASTER 0x0001 2841da177e4SLinus Torvalds #define HCI_LM_AUTH 0x0002 2851da177e4SLinus Torvalds #define HCI_LM_ENCRYPT 0x0004 2861da177e4SLinus Torvalds #define HCI_LM_TRUSTED 0x0008 2871da177e4SLinus Torvalds #define HCI_LM_RELIABLE 0x0010 2881da177e4SLinus Torvalds #define HCI_LM_SECURE 0x0020 2891da177e4SLinus Torvalds 29040be492fSMarcel Holtmann /* Authentication types */ 29140be492fSMarcel Holtmann #define HCI_AT_NO_BONDING 0x00 29240be492fSMarcel Holtmann #define HCI_AT_NO_BONDING_MITM 0x01 29340be492fSMarcel Holtmann #define HCI_AT_DEDICATED_BONDING 0x02 29440be492fSMarcel Holtmann #define HCI_AT_DEDICATED_BONDING_MITM 0x03 29540be492fSMarcel Holtmann #define HCI_AT_GENERAL_BONDING 0x04 29640be492fSMarcel Holtmann #define HCI_AT_GENERAL_BONDING_MITM 0x05 29740be492fSMarcel Holtmann 298b6020ba0SWaldemar Rymarkiewicz /* Link Key types */ 299b6020ba0SWaldemar Rymarkiewicz #define HCI_LK_COMBINATION 0x00 300b6020ba0SWaldemar Rymarkiewicz #define HCI_LK_LOCAL_UNIT 0x01 301b6020ba0SWaldemar Rymarkiewicz #define HCI_LK_REMOTE_UNIT 0x02 302b6020ba0SWaldemar Rymarkiewicz #define HCI_LK_DEBUG_COMBINATION 0x03 303b6020ba0SWaldemar Rymarkiewicz #define HCI_LK_UNAUTH_COMBINATION 0x04 304b6020ba0SWaldemar Rymarkiewicz #define HCI_LK_AUTH_COMBINATION 0x05 305b6020ba0SWaldemar Rymarkiewicz #define HCI_LK_CHANGED_COMBINATION 0x06 306b899efafSVinicius Costa Gomes /* The spec doesn't define types for SMP keys, the _MASTER suffix is implied */ 307b899efafSVinicius Costa Gomes #define HCI_SMP_STK 0x80 308b899efafSVinicius Costa Gomes #define HCI_SMP_STK_SLAVE 0x81 309b899efafSVinicius Costa Gomes #define HCI_SMP_LTK 0x82 310b899efafSVinicius Costa Gomes #define HCI_SMP_LTK_SLAVE 0x83 311b6020ba0SWaldemar Rymarkiewicz 3129f5a0d7bSAndrei Emeltchenko /* ---- HCI Error Codes ---- */ 3139f5a0d7bSAndrei Emeltchenko #define HCI_ERROR_AUTH_FAILURE 0x05 314cdcba7c6SMikel Astiz #define HCI_ERROR_CONNECTION_TIMEOUT 0x08 3159f5a0d7bSAndrei Emeltchenko #define HCI_ERROR_REJ_BAD_ADDR 0x0f 3169f5a0d7bSAndrei Emeltchenko #define HCI_ERROR_REMOTE_USER_TERM 0x13 317cdcba7c6SMikel Astiz #define HCI_ERROR_REMOTE_LOW_RESOURCES 0x14 318cdcba7c6SMikel Astiz #define HCI_ERROR_REMOTE_POWER_OFF 0x15 3199f5a0d7bSAndrei Emeltchenko #define HCI_ERROR_LOCAL_HOST_TERM 0x16 3209f5a0d7bSAndrei Emeltchenko #define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18 3219f5a0d7bSAndrei Emeltchenko 3222455a3eaSAndrei Emeltchenko /* Flow control modes */ 3232455a3eaSAndrei Emeltchenko #define HCI_FLOW_CTL_MODE_PACKET_BASED 0x00 3242455a3eaSAndrei Emeltchenko #define HCI_FLOW_CTL_MODE_BLOCK_BASED 0x01 3252455a3eaSAndrei Emeltchenko 326bbaf444aSJohan Hedberg /* The core spec defines 127 as the "not available" value */ 327bbaf444aSJohan Hedberg #define HCI_TX_POWER_INVALID 127 328bbaf444aSJohan Hedberg 32932748db0SJohan Hedberg /* Extended Inquiry Response field types */ 33032748db0SJohan Hedberg #define EIR_FLAGS 0x01 /* flags */ 33132748db0SJohan Hedberg #define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */ 33232748db0SJohan Hedberg #define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */ 33332748db0SJohan Hedberg #define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */ 33432748db0SJohan Hedberg #define EIR_UUID32_ALL 0x05 /* 32-bit UUID, all listed */ 33532748db0SJohan Hedberg #define EIR_UUID128_SOME 0x06 /* 128-bit UUID, more available */ 33632748db0SJohan Hedberg #define EIR_UUID128_ALL 0x07 /* 128-bit UUID, all listed */ 33732748db0SJohan Hedberg #define EIR_NAME_SHORT 0x08 /* shortened local name */ 33832748db0SJohan Hedberg #define EIR_NAME_COMPLETE 0x09 /* complete local name */ 33932748db0SJohan Hedberg #define EIR_TX_POWER 0x0A /* transmit power level */ 3409ec9fc8aSJohan Hedberg #define EIR_CLASS_OF_DEV 0x0D /* Class of Device */ 3419ec9fc8aSJohan Hedberg #define EIR_SSP_HASH_C 0x0E /* Simple Pairing Hash C */ 3429ec9fc8aSJohan Hedberg #define EIR_SSP_RAND_R 0x0F /* Simple Pairing Randomizer R */ 34332748db0SJohan Hedberg #define EIR_DEVICE_ID 0x10 /* device ID */ 34432748db0SJohan Hedberg 3453f0f524bSJohan Hedberg /* Low Energy Advertising Flags */ 3463f0f524bSJohan Hedberg #define LE_AD_LIMITED 0x01 /* Limited Discoverable */ 3473f0f524bSJohan Hedberg #define LE_AD_GENERAL 0x02 /* General Discoverable */ 3483f0f524bSJohan Hedberg #define LE_AD_NO_BREDR 0x04 /* BR/EDR not supported */ 3493f0f524bSJohan Hedberg #define LE_AD_SIM_LE_BREDR_CTRL 0x08 /* Simultaneous LE & BR/EDR Controller */ 3503f0f524bSJohan Hedberg #define LE_AD_SIM_LE_BREDR_HOST 0x10 /* Simultaneous LE & BR/EDR Host */ 3513f0f524bSJohan Hedberg 3521da177e4SLinus Torvalds /* ----- HCI Commands ---- */ 3536bd32326SVille Tervo #define HCI_OP_NOP 0x0000 3546bd32326SVille Tervo 355a9de9248SMarcel Holtmann #define HCI_OP_INQUIRY 0x0401 356a9de9248SMarcel Holtmann struct hci_cp_inquiry { 357a9de9248SMarcel Holtmann __u8 lap[3]; 358a9de9248SMarcel Holtmann __u8 length; 359a9de9248SMarcel Holtmann __u8 num_rsp; 36066c853ccSGustavo F. Padovan } __packed; 3611da177e4SLinus Torvalds 362a9de9248SMarcel Holtmann #define HCI_OP_INQUIRY_CANCEL 0x0402 363a9de9248SMarcel Holtmann 36479d6e068SAndre Guedes #define HCI_OP_PERIODIC_INQ 0x0403 36579d6e068SAndre Guedes 366a9de9248SMarcel Holtmann #define HCI_OP_EXIT_PERIODIC_INQ 0x0404 367a9de9248SMarcel Holtmann 368a9de9248SMarcel Holtmann #define HCI_OP_CREATE_CONN 0x0405 369a9de9248SMarcel Holtmann struct hci_cp_create_conn { 370a9de9248SMarcel Holtmann bdaddr_t bdaddr; 371a9de9248SMarcel Holtmann __le16 pkt_type; 372a9de9248SMarcel Holtmann __u8 pscan_rep_mode; 373a9de9248SMarcel Holtmann __u8 pscan_mode; 374a9de9248SMarcel Holtmann __le16 clock_offset; 375a9de9248SMarcel Holtmann __u8 role_switch; 37666c853ccSGustavo F. Padovan } __packed; 3771da177e4SLinus Torvalds 378a9de9248SMarcel Holtmann #define HCI_OP_DISCONNECT 0x0406 379a9de9248SMarcel Holtmann struct hci_cp_disconnect { 380a9de9248SMarcel Holtmann __le16 handle; 381a9de9248SMarcel Holtmann __u8 reason; 38266c853ccSGustavo F. Padovan } __packed; 3831da177e4SLinus Torvalds 384a9de9248SMarcel Holtmann #define HCI_OP_ADD_SCO 0x0407 385a9de9248SMarcel Holtmann struct hci_cp_add_sco { 386a9de9248SMarcel Holtmann __le16 handle; 387a9de9248SMarcel Holtmann __le16 pkt_type; 38866c853ccSGustavo F. Padovan } __packed; 389a9de9248SMarcel Holtmann 390a9de9248SMarcel Holtmann #define HCI_OP_CREATE_CONN_CANCEL 0x0408 391a9de9248SMarcel Holtmann struct hci_cp_create_conn_cancel { 3921da177e4SLinus Torvalds bdaddr_t bdaddr; 39366c853ccSGustavo F. Padovan } __packed; 3941da177e4SLinus Torvalds 395a9de9248SMarcel Holtmann #define HCI_OP_ACCEPT_CONN_REQ 0x0409 396a9de9248SMarcel Holtmann struct hci_cp_accept_conn_req { 397a9de9248SMarcel Holtmann bdaddr_t bdaddr; 398a9de9248SMarcel Holtmann __u8 role; 39966c853ccSGustavo F. Padovan } __packed; 4001da177e4SLinus Torvalds 401a9de9248SMarcel Holtmann #define HCI_OP_REJECT_CONN_REQ 0x040a 402a9de9248SMarcel Holtmann struct hci_cp_reject_conn_req { 403a9de9248SMarcel Holtmann bdaddr_t bdaddr; 404a9de9248SMarcel Holtmann __u8 reason; 40566c853ccSGustavo F. Padovan } __packed; 4061da177e4SLinus Torvalds 407a9de9248SMarcel Holtmann #define HCI_OP_LINK_KEY_REPLY 0x040b 408a9de9248SMarcel Holtmann struct hci_cp_link_key_reply { 409a9de9248SMarcel Holtmann bdaddr_t bdaddr; 4109b3b4460SAndrei Emeltchenko __u8 link_key[HCI_LINK_KEY_SIZE]; 41166c853ccSGustavo F. Padovan } __packed; 4121da177e4SLinus Torvalds 413a9de9248SMarcel Holtmann #define HCI_OP_LINK_KEY_NEG_REPLY 0x040c 414a9de9248SMarcel Holtmann struct hci_cp_link_key_neg_reply { 415a9de9248SMarcel Holtmann bdaddr_t bdaddr; 41666c853ccSGustavo F. Padovan } __packed; 4171da177e4SLinus Torvalds 418a9de9248SMarcel Holtmann #define HCI_OP_PIN_CODE_REPLY 0x040d 419a9de9248SMarcel Holtmann struct hci_cp_pin_code_reply { 420a9de9248SMarcel Holtmann bdaddr_t bdaddr; 421a9de9248SMarcel Holtmann __u8 pin_len; 422a9de9248SMarcel Holtmann __u8 pin_code[16]; 42366c853ccSGustavo F. Padovan } __packed; 424980e1a53SJohan Hedberg struct hci_rp_pin_code_reply { 425980e1a53SJohan Hedberg __u8 status; 426980e1a53SJohan Hedberg bdaddr_t bdaddr; 427980e1a53SJohan Hedberg } __packed; 428a9de9248SMarcel Holtmann 429a9de9248SMarcel Holtmann #define HCI_OP_PIN_CODE_NEG_REPLY 0x040e 430a9de9248SMarcel Holtmann struct hci_cp_pin_code_neg_reply { 431a9de9248SMarcel Holtmann bdaddr_t bdaddr; 43266c853ccSGustavo F. Padovan } __packed; 433980e1a53SJohan Hedberg struct hci_rp_pin_code_neg_reply { 434980e1a53SJohan Hedberg __u8 status; 435980e1a53SJohan Hedberg bdaddr_t bdaddr; 436980e1a53SJohan Hedberg } __packed; 437a9de9248SMarcel Holtmann 438a9de9248SMarcel Holtmann #define HCI_OP_CHANGE_CONN_PTYPE 0x040f 439a9de9248SMarcel Holtmann struct hci_cp_change_conn_ptype { 440a9de9248SMarcel Holtmann __le16 handle; 441a9de9248SMarcel Holtmann __le16 pkt_type; 44266c853ccSGustavo F. Padovan } __packed; 443a9de9248SMarcel Holtmann 444a9de9248SMarcel Holtmann #define HCI_OP_AUTH_REQUESTED 0x0411 445a9de9248SMarcel Holtmann struct hci_cp_auth_requested { 446a9de9248SMarcel Holtmann __le16 handle; 44766c853ccSGustavo F. Padovan } __packed; 448a9de9248SMarcel Holtmann 449a9de9248SMarcel Holtmann #define HCI_OP_SET_CONN_ENCRYPT 0x0413 450a9de9248SMarcel Holtmann struct hci_cp_set_conn_encrypt { 451a9de9248SMarcel Holtmann __le16 handle; 452a9de9248SMarcel Holtmann __u8 encrypt; 45366c853ccSGustavo F. Padovan } __packed; 454a9de9248SMarcel Holtmann 455a9de9248SMarcel Holtmann #define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415 456a9de9248SMarcel Holtmann struct hci_cp_change_conn_link_key { 457a9de9248SMarcel Holtmann __le16 handle; 45866c853ccSGustavo F. Padovan } __packed; 459a9de9248SMarcel Holtmann 460a9de9248SMarcel Holtmann #define HCI_OP_REMOTE_NAME_REQ 0x0419 461a9de9248SMarcel Holtmann struct hci_cp_remote_name_req { 462a9de9248SMarcel Holtmann bdaddr_t bdaddr; 463a9de9248SMarcel Holtmann __u8 pscan_rep_mode; 464a9de9248SMarcel Holtmann __u8 pscan_mode; 465a9de9248SMarcel Holtmann __le16 clock_offset; 46666c853ccSGustavo F. Padovan } __packed; 467a9de9248SMarcel Holtmann 468a9de9248SMarcel Holtmann #define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a 469a9de9248SMarcel Holtmann struct hci_cp_remote_name_req_cancel { 470a9de9248SMarcel Holtmann bdaddr_t bdaddr; 47166c853ccSGustavo F. Padovan } __packed; 472a9de9248SMarcel Holtmann 473a9de9248SMarcel Holtmann #define HCI_OP_READ_REMOTE_FEATURES 0x041b 474a9de9248SMarcel Holtmann struct hci_cp_read_remote_features { 475a9de9248SMarcel Holtmann __le16 handle; 47666c853ccSGustavo F. Padovan } __packed; 477a9de9248SMarcel Holtmann 478a9de9248SMarcel Holtmann #define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c 479a9de9248SMarcel Holtmann struct hci_cp_read_remote_ext_features { 480a9de9248SMarcel Holtmann __le16 handle; 481a9de9248SMarcel Holtmann __u8 page; 48266c853ccSGustavo F. Padovan } __packed; 483a9de9248SMarcel Holtmann 484a9de9248SMarcel Holtmann #define HCI_OP_READ_REMOTE_VERSION 0x041d 485a9de9248SMarcel Holtmann struct hci_cp_read_remote_version { 486a9de9248SMarcel Holtmann __le16 handle; 48766c853ccSGustavo F. Padovan } __packed; 488a9de9248SMarcel Holtmann 489a9de9248SMarcel Holtmann #define HCI_OP_SETUP_SYNC_CONN 0x0428 490a9de9248SMarcel Holtmann struct hci_cp_setup_sync_conn { 491a9de9248SMarcel Holtmann __le16 handle; 492a9de9248SMarcel Holtmann __le32 tx_bandwidth; 493a9de9248SMarcel Holtmann __le32 rx_bandwidth; 494a9de9248SMarcel Holtmann __le16 max_latency; 495a9de9248SMarcel Holtmann __le16 voice_setting; 496a9de9248SMarcel Holtmann __u8 retrans_effort; 497a9de9248SMarcel Holtmann __le16 pkt_type; 49866c853ccSGustavo F. Padovan } __packed; 499a9de9248SMarcel Holtmann 500a9de9248SMarcel Holtmann #define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429 501a9de9248SMarcel Holtmann struct hci_cp_accept_sync_conn_req { 502a9de9248SMarcel Holtmann bdaddr_t bdaddr; 503a9de9248SMarcel Holtmann __le32 tx_bandwidth; 504a9de9248SMarcel Holtmann __le32 rx_bandwidth; 505a9de9248SMarcel Holtmann __le16 max_latency; 506a9de9248SMarcel Holtmann __le16 content_format; 507a9de9248SMarcel Holtmann __u8 retrans_effort; 508a9de9248SMarcel Holtmann __le16 pkt_type; 50966c853ccSGustavo F. Padovan } __packed; 510a9de9248SMarcel Holtmann 511a9de9248SMarcel Holtmann #define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a 512a9de9248SMarcel Holtmann struct hci_cp_reject_sync_conn_req { 513a9de9248SMarcel Holtmann bdaddr_t bdaddr; 514a9de9248SMarcel Holtmann __u8 reason; 51566c853ccSGustavo F. Padovan } __packed; 516a9de9248SMarcel Holtmann 51717fa4b9dSJohan Hedberg #define HCI_OP_IO_CAPABILITY_REPLY 0x042b 51817fa4b9dSJohan Hedberg struct hci_cp_io_capability_reply { 51917fa4b9dSJohan Hedberg bdaddr_t bdaddr; 52017fa4b9dSJohan Hedberg __u8 capability; 52117fa4b9dSJohan Hedberg __u8 oob_data; 52217fa4b9dSJohan Hedberg __u8 authentication; 52317fa4b9dSJohan Hedberg } __packed; 52417fa4b9dSJohan Hedberg 525a5c29683SJohan Hedberg #define HCI_OP_USER_CONFIRM_REPLY 0x042c 526a5c29683SJohan Hedberg struct hci_cp_user_confirm_reply { 527a5c29683SJohan Hedberg bdaddr_t bdaddr; 528a5c29683SJohan Hedberg } __packed; 529a5c29683SJohan Hedberg struct hci_rp_user_confirm_reply { 530a5c29683SJohan Hedberg __u8 status; 531a5c29683SJohan Hedberg bdaddr_t bdaddr; 532a5c29683SJohan Hedberg } __packed; 533a5c29683SJohan Hedberg 534a5c29683SJohan Hedberg #define HCI_OP_USER_CONFIRM_NEG_REPLY 0x042d 535a5c29683SJohan Hedberg 5369ad4019aSBrian Gix #define HCI_OP_USER_PASSKEY_REPLY 0x042e 5379ad4019aSBrian Gix struct hci_cp_user_passkey_reply { 5389ad4019aSBrian Gix bdaddr_t bdaddr; 5399ad4019aSBrian Gix __le32 passkey; 5409ad4019aSBrian Gix } __packed; 5419ad4019aSBrian Gix 5429ad4019aSBrian Gix #define HCI_OP_USER_PASSKEY_NEG_REPLY 0x042f 5439ad4019aSBrian Gix 5442763eda6SSzymon Janc #define HCI_OP_REMOTE_OOB_DATA_REPLY 0x0430 5452763eda6SSzymon Janc struct hci_cp_remote_oob_data_reply { 5462763eda6SSzymon Janc bdaddr_t bdaddr; 5472763eda6SSzymon Janc __u8 hash[16]; 5482763eda6SSzymon Janc __u8 randomizer[16]; 5492763eda6SSzymon Janc } __packed; 5502763eda6SSzymon Janc 5512763eda6SSzymon Janc #define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY 0x0433 5522763eda6SSzymon Janc struct hci_cp_remote_oob_data_neg_reply { 5532763eda6SSzymon Janc bdaddr_t bdaddr; 5542763eda6SSzymon Janc } __packed; 5552763eda6SSzymon Janc 55603b555e1SJohan Hedberg #define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434 55703b555e1SJohan Hedberg struct hci_cp_io_capability_neg_reply { 55803b555e1SJohan Hedberg bdaddr_t bdaddr; 55903b555e1SJohan Hedberg __u8 reason; 56003b555e1SJohan Hedberg } __packed; 56103b555e1SJohan Hedberg 562523e93cdSAndrei Emeltchenko #define HCI_OP_CREATE_PHY_LINK 0x0435 563523e93cdSAndrei Emeltchenko struct hci_cp_create_phy_link { 564523e93cdSAndrei Emeltchenko __u8 phy_handle; 565523e93cdSAndrei Emeltchenko __u8 key_len; 566523e93cdSAndrei Emeltchenko __u8 key_type; 567523e93cdSAndrei Emeltchenko __u8 key[HCI_AMP_LINK_KEY_SIZE]; 568523e93cdSAndrei Emeltchenko } __packed; 569523e93cdSAndrei Emeltchenko 570523e93cdSAndrei Emeltchenko #define HCI_OP_ACCEPT_PHY_LINK 0x0436 571523e93cdSAndrei Emeltchenko struct hci_cp_accept_phy_link { 572523e93cdSAndrei Emeltchenko __u8 phy_handle; 573523e93cdSAndrei Emeltchenko __u8 key_len; 574523e93cdSAndrei Emeltchenko __u8 key_type; 575523e93cdSAndrei Emeltchenko __u8 key[HCI_AMP_LINK_KEY_SIZE]; 576523e93cdSAndrei Emeltchenko } __packed; 577523e93cdSAndrei Emeltchenko 578523e93cdSAndrei Emeltchenko #define HCI_OP_DISCONN_PHY_LINK 0x0437 579523e93cdSAndrei Emeltchenko struct hci_cp_disconn_phy_link { 580523e93cdSAndrei Emeltchenko __u8 phy_handle; 581523e93cdSAndrei Emeltchenko __u8 reason; 582b078b564SAndrei Emeltchenko } __packed; 583b078b564SAndrei Emeltchenko 584b078b564SAndrei Emeltchenko struct ext_flow_spec { 585b078b564SAndrei Emeltchenko __u8 id; 586b078b564SAndrei Emeltchenko __u8 stype; 587b078b564SAndrei Emeltchenko __le16 msdu; 588b078b564SAndrei Emeltchenko __le32 sdu_itime; 589b078b564SAndrei Emeltchenko __le32 acc_lat; 590b078b564SAndrei Emeltchenko __le32 flush_to; 591b078b564SAndrei Emeltchenko } __packed; 592b078b564SAndrei Emeltchenko 593b078b564SAndrei Emeltchenko #define HCI_OP_CREATE_LOGICAL_LINK 0x0438 594b078b564SAndrei Emeltchenko #define HCI_OP_ACCEPT_LOGICAL_LINK 0x0439 595b078b564SAndrei Emeltchenko struct hci_cp_create_accept_logical_link { 596b078b564SAndrei Emeltchenko __u8 phy_handle; 597b078b564SAndrei Emeltchenko struct ext_flow_spec tx_flow_spec; 598b078b564SAndrei Emeltchenko struct ext_flow_spec rx_flow_spec; 599b078b564SAndrei Emeltchenko } __packed; 600b078b564SAndrei Emeltchenko 601b078b564SAndrei Emeltchenko #define HCI_OP_DISCONN_LOGICAL_LINK 0x043a 602b078b564SAndrei Emeltchenko struct hci_cp_disconn_logical_link { 603b078b564SAndrei Emeltchenko __le16 log_handle; 604b078b564SAndrei Emeltchenko } __packed; 605b078b564SAndrei Emeltchenko 606b078b564SAndrei Emeltchenko #define HCI_OP_LOGICAL_LINK_CANCEL 0x043b 607b078b564SAndrei Emeltchenko struct hci_cp_logical_link_cancel { 608b078b564SAndrei Emeltchenko __u8 phy_handle; 609b078b564SAndrei Emeltchenko __u8 flow_spec_id; 610b078b564SAndrei Emeltchenko } __packed; 611b078b564SAndrei Emeltchenko 612b078b564SAndrei Emeltchenko struct hci_rp_logical_link_cancel { 613b078b564SAndrei Emeltchenko __u8 status; 614b078b564SAndrei Emeltchenko __u8 phy_handle; 615b078b564SAndrei Emeltchenko __u8 flow_spec_id; 616523e93cdSAndrei Emeltchenko } __packed; 617523e93cdSAndrei Emeltchenko 618a9de9248SMarcel Holtmann #define HCI_OP_SNIFF_MODE 0x0803 619a9de9248SMarcel Holtmann struct hci_cp_sniff_mode { 620a9de9248SMarcel Holtmann __le16 handle; 621a9de9248SMarcel Holtmann __le16 max_interval; 622a9de9248SMarcel Holtmann __le16 min_interval; 623a9de9248SMarcel Holtmann __le16 attempt; 624a9de9248SMarcel Holtmann __le16 timeout; 62566c853ccSGustavo F. Padovan } __packed; 626a9de9248SMarcel Holtmann 627a9de9248SMarcel Holtmann #define HCI_OP_EXIT_SNIFF_MODE 0x0804 628a9de9248SMarcel Holtmann struct hci_cp_exit_sniff_mode { 629a9de9248SMarcel Holtmann __le16 handle; 63066c853ccSGustavo F. Padovan } __packed; 631a9de9248SMarcel Holtmann 632a9de9248SMarcel Holtmann #define HCI_OP_ROLE_DISCOVERY 0x0809 633a9de9248SMarcel Holtmann struct hci_cp_role_discovery { 634a9de9248SMarcel Holtmann __le16 handle; 63566c853ccSGustavo F. Padovan } __packed; 636a9de9248SMarcel Holtmann struct hci_rp_role_discovery { 637a9de9248SMarcel Holtmann __u8 status; 638a9de9248SMarcel Holtmann __le16 handle; 639a9de9248SMarcel Holtmann __u8 role; 64066c853ccSGustavo F. Padovan } __packed; 641a9de9248SMarcel Holtmann 642a9de9248SMarcel Holtmann #define HCI_OP_SWITCH_ROLE 0x080b 643a9de9248SMarcel Holtmann struct hci_cp_switch_role { 644a9de9248SMarcel Holtmann bdaddr_t bdaddr; 645a9de9248SMarcel Holtmann __u8 role; 64666c853ccSGustavo F. Padovan } __packed; 647a9de9248SMarcel Holtmann 648a9de9248SMarcel Holtmann #define HCI_OP_READ_LINK_POLICY 0x080c 649a9de9248SMarcel Holtmann struct hci_cp_read_link_policy { 650a9de9248SMarcel Holtmann __le16 handle; 65166c853ccSGustavo F. Padovan } __packed; 652a9de9248SMarcel Holtmann struct hci_rp_read_link_policy { 653a9de9248SMarcel Holtmann __u8 status; 654a9de9248SMarcel Holtmann __le16 handle; 655a9de9248SMarcel Holtmann __le16 policy; 65666c853ccSGustavo F. Padovan } __packed; 657a9de9248SMarcel Holtmann 658a9de9248SMarcel Holtmann #define HCI_OP_WRITE_LINK_POLICY 0x080d 659a9de9248SMarcel Holtmann struct hci_cp_write_link_policy { 660a9de9248SMarcel Holtmann __le16 handle; 661a9de9248SMarcel Holtmann __le16 policy; 66266c853ccSGustavo F. Padovan } __packed; 663a9de9248SMarcel Holtmann struct hci_rp_write_link_policy { 664a9de9248SMarcel Holtmann __u8 status; 665a9de9248SMarcel Holtmann __le16 handle; 66666c853ccSGustavo F. Padovan } __packed; 667a9de9248SMarcel Holtmann 668e4e8e37cSMarcel Holtmann #define HCI_OP_READ_DEF_LINK_POLICY 0x080e 669e4e8e37cSMarcel Holtmann struct hci_rp_read_def_link_policy { 670e4e8e37cSMarcel Holtmann __u8 status; 671e4e8e37cSMarcel Holtmann __le16 policy; 67266c853ccSGustavo F. Padovan } __packed; 673e4e8e37cSMarcel Holtmann 674e4e8e37cSMarcel Holtmann #define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f 675e4e8e37cSMarcel Holtmann struct hci_cp_write_def_link_policy { 676e4e8e37cSMarcel Holtmann __le16 policy; 67766c853ccSGustavo F. Padovan } __packed; 678e4e8e37cSMarcel Holtmann 679a9de9248SMarcel Holtmann #define HCI_OP_SNIFF_SUBRATE 0x0811 680a9de9248SMarcel Holtmann struct hci_cp_sniff_subrate { 681a9de9248SMarcel Holtmann __le16 handle; 682a9de9248SMarcel Holtmann __le16 max_latency; 683a9de9248SMarcel Holtmann __le16 min_remote_timeout; 684a9de9248SMarcel Holtmann __le16 min_local_timeout; 68566c853ccSGustavo F. Padovan } __packed; 686a9de9248SMarcel Holtmann 687a9de9248SMarcel Holtmann #define HCI_OP_SET_EVENT_MASK 0x0c01 688a9de9248SMarcel Holtmann struct hci_cp_set_event_mask { 689a9de9248SMarcel Holtmann __u8 mask[8]; 69066c853ccSGustavo F. Padovan } __packed; 691a9de9248SMarcel Holtmann 692a9de9248SMarcel Holtmann #define HCI_OP_RESET 0x0c03 693a9de9248SMarcel Holtmann 694a9de9248SMarcel Holtmann #define HCI_OP_SET_EVENT_FLT 0x0c05 6951da177e4SLinus Torvalds struct hci_cp_set_event_flt { 6961da177e4SLinus Torvalds __u8 flt_type; 6971da177e4SLinus Torvalds __u8 cond_type; 6981da177e4SLinus Torvalds __u8 condition[0]; 69966c853ccSGustavo F. Padovan } __packed; 7001da177e4SLinus Torvalds 7011da177e4SLinus Torvalds /* Filter types */ 7021da177e4SLinus Torvalds #define HCI_FLT_CLEAR_ALL 0x00 7031da177e4SLinus Torvalds #define HCI_FLT_INQ_RESULT 0x01 7041da177e4SLinus Torvalds #define HCI_FLT_CONN_SETUP 0x02 7051da177e4SLinus Torvalds 7061da177e4SLinus Torvalds /* CONN_SETUP Condition types */ 7071da177e4SLinus Torvalds #define HCI_CONN_SETUP_ALLOW_ALL 0x00 7081da177e4SLinus Torvalds #define HCI_CONN_SETUP_ALLOW_CLASS 0x01 7091da177e4SLinus Torvalds #define HCI_CONN_SETUP_ALLOW_BDADDR 0x02 7101da177e4SLinus Torvalds 7111da177e4SLinus Torvalds /* CONN_SETUP Conditions */ 7121da177e4SLinus Torvalds #define HCI_CONN_SETUP_AUTO_OFF 0x01 7131da177e4SLinus Torvalds #define HCI_CONN_SETUP_AUTO_ON 0x02 7141da177e4SLinus Torvalds 715b0916ea0SJohan Hedberg #define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12 716b0916ea0SJohan Hedberg struct hci_cp_delete_stored_link_key { 717b0916ea0SJohan Hedberg bdaddr_t bdaddr; 718b0916ea0SJohan Hedberg __u8 delete_all; 719b0916ea0SJohan Hedberg } __packed; 720b0916ea0SJohan Hedberg 7211f6c6378SJohan Hedberg #define HCI_MAX_NAME_LENGTH 248 7221f6c6378SJohan Hedberg 723a9de9248SMarcel Holtmann #define HCI_OP_WRITE_LOCAL_NAME 0x0c13 724a9de9248SMarcel Holtmann struct hci_cp_write_local_name { 7251f6c6378SJohan Hedberg __u8 name[HCI_MAX_NAME_LENGTH]; 72666c853ccSGustavo F. Padovan } __packed; 727a9de9248SMarcel Holtmann 728a9de9248SMarcel Holtmann #define HCI_OP_READ_LOCAL_NAME 0x0c14 729a9de9248SMarcel Holtmann struct hci_rp_read_local_name { 730a9de9248SMarcel Holtmann __u8 status; 7311f6c6378SJohan Hedberg __u8 name[HCI_MAX_NAME_LENGTH]; 73266c853ccSGustavo F. Padovan } __packed; 733a9de9248SMarcel Holtmann 734a9de9248SMarcel Holtmann #define HCI_OP_WRITE_CA_TIMEOUT 0x0c16 735a9de9248SMarcel Holtmann 736a9de9248SMarcel Holtmann #define HCI_OP_WRITE_PG_TIMEOUT 0x0c18 737a9de9248SMarcel Holtmann 738a9de9248SMarcel Holtmann #define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a 739a9de9248SMarcel Holtmann #define SCAN_DISABLED 0x00 740a9de9248SMarcel Holtmann #define SCAN_INQUIRY 0x01 741a9de9248SMarcel Holtmann #define SCAN_PAGE 0x02 742a9de9248SMarcel Holtmann 743a9de9248SMarcel Holtmann #define HCI_OP_READ_AUTH_ENABLE 0x0c1f 744a9de9248SMarcel Holtmann 745a9de9248SMarcel Holtmann #define HCI_OP_WRITE_AUTH_ENABLE 0x0c20 746a9de9248SMarcel Holtmann #define AUTH_DISABLED 0x00 747a9de9248SMarcel Holtmann #define AUTH_ENABLED 0x01 748a9de9248SMarcel Holtmann 749a9de9248SMarcel Holtmann #define HCI_OP_READ_ENCRYPT_MODE 0x0c21 750a9de9248SMarcel Holtmann 751a9de9248SMarcel Holtmann #define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22 752a9de9248SMarcel Holtmann #define ENCRYPT_DISABLED 0x00 753a9de9248SMarcel Holtmann #define ENCRYPT_P2P 0x01 754a9de9248SMarcel Holtmann #define ENCRYPT_BOTH 0x02 755a9de9248SMarcel Holtmann 756a9de9248SMarcel Holtmann #define HCI_OP_READ_CLASS_OF_DEV 0x0c23 757a9de9248SMarcel Holtmann struct hci_rp_read_class_of_dev { 7581da177e4SLinus Torvalds __u8 status; 7591da177e4SLinus Torvalds __u8 dev_class[3]; 76066c853ccSGustavo F. Padovan } __packed; 7611da177e4SLinus Torvalds 762a9de9248SMarcel Holtmann #define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24 763a9de9248SMarcel Holtmann struct hci_cp_write_class_of_dev { 7641da177e4SLinus Torvalds __u8 dev_class[3]; 76566c853ccSGustavo F. Padovan } __packed; 7661da177e4SLinus Torvalds 767a9de9248SMarcel Holtmann #define HCI_OP_READ_VOICE_SETTING 0x0c25 7681da177e4SLinus Torvalds struct hci_rp_read_voice_setting { 7691da177e4SLinus Torvalds __u8 status; 7701ebb9252SMarcel Holtmann __le16 voice_setting; 77166c853ccSGustavo F. Padovan } __packed; 7721da177e4SLinus Torvalds 773a9de9248SMarcel Holtmann #define HCI_OP_WRITE_VOICE_SETTING 0x0c26 7741da177e4SLinus Torvalds struct hci_cp_write_voice_setting { 7751ebb9252SMarcel Holtmann __le16 voice_setting; 77666c853ccSGustavo F. Padovan } __packed; 7771da177e4SLinus Torvalds 778a9de9248SMarcel Holtmann #define HCI_OP_HOST_BUFFER_SIZE 0x0c33 7791da177e4SLinus Torvalds struct hci_cp_host_buffer_size { 7801ebb9252SMarcel Holtmann __le16 acl_mtu; 7811da177e4SLinus Torvalds __u8 sco_mtu; 7821ebb9252SMarcel Holtmann __le16 acl_max_pkt; 7831ebb9252SMarcel Holtmann __le16 sco_max_pkt; 78466c853ccSGustavo F. Padovan } __packed; 7851da177e4SLinus Torvalds 786d5859e22SJohan Hedberg #define HCI_OP_WRITE_INQUIRY_MODE 0x0c45 787d5859e22SJohan Hedberg 78880a1e1dbSJohan Hedberg #define HCI_MAX_EIR_LENGTH 240 78980a1e1dbSJohan Hedberg 79080a1e1dbSJohan Hedberg #define HCI_OP_WRITE_EIR 0x0c52 79180a1e1dbSJohan Hedberg struct hci_cp_write_eir { 792816a11d5SJohan Hedberg __u8 fec; 793816a11d5SJohan Hedberg __u8 data[HCI_MAX_EIR_LENGTH]; 79480a1e1dbSJohan Hedberg } __packed; 79580a1e1dbSJohan Hedberg 796333140b5SMarcel Holtmann #define HCI_OP_READ_SSP_MODE 0x0c55 797333140b5SMarcel Holtmann struct hci_rp_read_ssp_mode { 798333140b5SMarcel Holtmann __u8 status; 799333140b5SMarcel Holtmann __u8 mode; 80066c853ccSGustavo F. Padovan } __packed; 801333140b5SMarcel Holtmann 802333140b5SMarcel Holtmann #define HCI_OP_WRITE_SSP_MODE 0x0c56 803333140b5SMarcel Holtmann struct hci_cp_write_ssp_mode { 804333140b5SMarcel Holtmann __u8 mode; 80566c853ccSGustavo F. Padovan } __packed; 806333140b5SMarcel Holtmann 807c35938b2SSzymon Janc #define HCI_OP_READ_LOCAL_OOB_DATA 0x0c57 808c35938b2SSzymon Janc struct hci_rp_read_local_oob_data { 809c35938b2SSzymon Janc __u8 status; 810c35938b2SSzymon Janc __u8 hash[16]; 811c35938b2SSzymon Janc __u8 randomizer[16]; 812c35938b2SSzymon Janc } __packed; 813c35938b2SSzymon Janc 814d5859e22SJohan Hedberg #define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58 81591c4e9b1SMarcel Holtmann struct hci_rp_read_inq_rsp_tx_power { 81691c4e9b1SMarcel Holtmann __u8 status; 81791c4e9b1SMarcel Holtmann __s8 tx_power; 81891c4e9b1SMarcel Holtmann } __packed; 819d5859e22SJohan Hedberg 8201e89cffbSAndrei Emeltchenko #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 8211e89cffbSAndrei Emeltchenko struct hci_rp_read_flow_control_mode { 8221e89cffbSAndrei Emeltchenko __u8 status; 8231e89cffbSAndrei Emeltchenko __u8 mode; 8241e89cffbSAndrei Emeltchenko } __packed; 8251e89cffbSAndrei Emeltchenko 826f9b49306SAndre Guedes #define HCI_OP_WRITE_LE_HOST_SUPPORTED 0x0c6d 827f9b49306SAndre Guedes struct hci_cp_write_le_host_supported { 828f9b49306SAndre Guedes __u8 le; 829f9b49306SAndre Guedes __u8 simul; 830f9b49306SAndre Guedes } __packed; 831f9b49306SAndre Guedes 832a9de9248SMarcel Holtmann #define HCI_OP_READ_LOCAL_VERSION 0x1001 833a9de9248SMarcel Holtmann struct hci_rp_read_local_version { 8341da177e4SLinus Torvalds __u8 status; 835a9de9248SMarcel Holtmann __u8 hci_ver; 836a9de9248SMarcel Holtmann __le16 hci_rev; 837a9de9248SMarcel Holtmann __u8 lmp_ver; 838a9de9248SMarcel Holtmann __le16 manufacturer; 839a9de9248SMarcel Holtmann __le16 lmp_subver; 84066c853ccSGustavo F. Padovan } __packed; 8411da177e4SLinus Torvalds 842a9de9248SMarcel Holtmann #define HCI_OP_READ_LOCAL_COMMANDS 0x1002 843a9de9248SMarcel Holtmann struct hci_rp_read_local_commands { 8441da177e4SLinus Torvalds __u8 status; 845a9de9248SMarcel Holtmann __u8 commands[64]; 84666c853ccSGustavo F. Padovan } __packed; 8471da177e4SLinus Torvalds 848a9de9248SMarcel Holtmann #define HCI_OP_READ_LOCAL_FEATURES 0x1003 849a9de9248SMarcel Holtmann struct hci_rp_read_local_features { 850a9de9248SMarcel Holtmann __u8 status; 851a9de9248SMarcel Holtmann __u8 features[8]; 85266c853ccSGustavo F. Padovan } __packed; 853a9de9248SMarcel Holtmann 854a9de9248SMarcel Holtmann #define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004 855971e3a4bSAndre Guedes struct hci_cp_read_local_ext_features { 856971e3a4bSAndre Guedes __u8 page; 857971e3a4bSAndre Guedes } __packed; 858a9de9248SMarcel Holtmann struct hci_rp_read_local_ext_features { 859a9de9248SMarcel Holtmann __u8 status; 860a9de9248SMarcel Holtmann __u8 page; 861a9de9248SMarcel Holtmann __u8 max_page; 862a9de9248SMarcel Holtmann __u8 features[8]; 86366c853ccSGustavo F. Padovan } __packed; 864a9de9248SMarcel Holtmann 865a9de9248SMarcel Holtmann #define HCI_OP_READ_BUFFER_SIZE 0x1005 866a9de9248SMarcel Holtmann struct hci_rp_read_buffer_size { 867a9de9248SMarcel Holtmann __u8 status; 868a9de9248SMarcel Holtmann __le16 acl_mtu; 869a9de9248SMarcel Holtmann __u8 sco_mtu; 870a9de9248SMarcel Holtmann __le16 acl_max_pkt; 871a9de9248SMarcel Holtmann __le16 sco_max_pkt; 87266c853ccSGustavo F. Padovan } __packed; 873a9de9248SMarcel Holtmann 874a9de9248SMarcel Holtmann #define HCI_OP_READ_BD_ADDR 0x1009 875a9de9248SMarcel Holtmann struct hci_rp_read_bd_addr { 876a9de9248SMarcel Holtmann __u8 status; 8771da177e4SLinus Torvalds bdaddr_t bdaddr; 87866c853ccSGustavo F. Padovan } __packed; 8791da177e4SLinus Torvalds 880350ee4cfSAndrei Emeltchenko #define HCI_OP_READ_DATA_BLOCK_SIZE 0x100a 881350ee4cfSAndrei Emeltchenko struct hci_rp_read_data_block_size { 882350ee4cfSAndrei Emeltchenko __u8 status; 883350ee4cfSAndrei Emeltchenko __le16 max_acl_len; 884350ee4cfSAndrei Emeltchenko __le16 block_len; 885350ee4cfSAndrei Emeltchenko __le16 num_blocks; 886350ee4cfSAndrei Emeltchenko } __packed; 887350ee4cfSAndrei Emeltchenko 888f6422ec6SAntti Julku #define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c 889f6422ec6SAntti Julku struct hci_cp_write_page_scan_activity { 890f6422ec6SAntti Julku __le16 interval; 891f6422ec6SAntti Julku __le16 window; 892f6422ec6SAntti Julku } __packed; 893f6422ec6SAntti Julku 894f6422ec6SAntti Julku #define HCI_OP_WRITE_PAGE_SCAN_TYPE 0x0c47 895f6422ec6SAntti Julku #define PAGE_SCAN_TYPE_STANDARD 0x00 896f6422ec6SAntti Julku #define PAGE_SCAN_TYPE_INTERLACED 0x01 897f6422ec6SAntti Julku 898928abaa7SAndrei Emeltchenko #define HCI_OP_READ_LOCAL_AMP_INFO 0x1409 899928abaa7SAndrei Emeltchenko struct hci_rp_read_local_amp_info { 900928abaa7SAndrei Emeltchenko __u8 status; 901928abaa7SAndrei Emeltchenko __u8 amp_status; 902928abaa7SAndrei Emeltchenko __le32 total_bw; 903928abaa7SAndrei Emeltchenko __le32 max_bw; 904928abaa7SAndrei Emeltchenko __le32 min_latency; 905928abaa7SAndrei Emeltchenko __le32 max_pdu; 906928abaa7SAndrei Emeltchenko __u8 amp_type; 907928abaa7SAndrei Emeltchenko __le16 pal_cap; 908928abaa7SAndrei Emeltchenko __le16 max_assoc_size; 909928abaa7SAndrei Emeltchenko __le32 max_flush_to; 910928abaa7SAndrei Emeltchenko __le32 be_flush_to; 911928abaa7SAndrei Emeltchenko } __packed; 912928abaa7SAndrei Emeltchenko 913523e93cdSAndrei Emeltchenko #define HCI_OP_READ_LOCAL_AMP_ASSOC 0x140a 914523e93cdSAndrei Emeltchenko struct hci_cp_read_local_amp_assoc { 915523e93cdSAndrei Emeltchenko __u8 phy_handle; 916523e93cdSAndrei Emeltchenko __le16 len_so_far; 917523e93cdSAndrei Emeltchenko __le16 max_len; 918523e93cdSAndrei Emeltchenko } __packed; 919523e93cdSAndrei Emeltchenko struct hci_rp_read_local_amp_assoc { 920523e93cdSAndrei Emeltchenko __u8 status; 921523e93cdSAndrei Emeltchenko __u8 phy_handle; 922523e93cdSAndrei Emeltchenko __le16 rem_len; 923523e93cdSAndrei Emeltchenko __u8 frag[0]; 924523e93cdSAndrei Emeltchenko } __packed; 925523e93cdSAndrei Emeltchenko 926523e93cdSAndrei Emeltchenko #define HCI_OP_WRITE_REMOTE_AMP_ASSOC 0x140b 927523e93cdSAndrei Emeltchenko struct hci_cp_write_remote_amp_assoc { 928523e93cdSAndrei Emeltchenko __u8 phy_handle; 929523e93cdSAndrei Emeltchenko __le16 len_so_far; 930523e93cdSAndrei Emeltchenko __le16 rem_len; 931523e93cdSAndrei Emeltchenko __u8 frag[0]; 932523e93cdSAndrei Emeltchenko } __packed; 933523e93cdSAndrei Emeltchenko struct hci_rp_write_remote_amp_assoc { 934523e93cdSAndrei Emeltchenko __u8 status; 935523e93cdSAndrei Emeltchenko __u8 phy_handle; 936523e93cdSAndrei Emeltchenko } __packed; 937523e93cdSAndrei Emeltchenko 93863185f64SVille Tervo #define HCI_OP_LE_SET_EVENT_MASK 0x2001 93963185f64SVille Tervo struct hci_cp_le_set_event_mask { 94063185f64SVille Tervo __u8 mask[8]; 94163185f64SVille Tervo } __packed; 94263185f64SVille Tervo 94363185f64SVille Tervo #define HCI_OP_LE_READ_BUFFER_SIZE 0x2002 94463185f64SVille Tervo struct hci_rp_le_read_buffer_size { 94563185f64SVille Tervo __u8 status; 94663185f64SVille Tervo __le16 le_mtu; 94763185f64SVille Tervo __u8 le_max_pkt; 94863185f64SVille Tervo } __packed; 94963185f64SVille Tervo 95060e77321SJohan Hedberg #define HCI_OP_LE_READ_LOCAL_FEATURES 0x2003 95160e77321SJohan Hedberg struct hci_rp_le_read_local_features { 95260e77321SJohan Hedberg __u8 status; 95360e77321SJohan Hedberg __u8 features[8]; 95460e77321SJohan Hedberg } __packed; 95560e77321SJohan Hedberg 9568fa19098SJohan Hedberg #define HCI_OP_LE_READ_ADV_TX_POWER 0x2007 9578fa19098SJohan Hedberg struct hci_rp_le_read_adv_tx_power { 9588fa19098SJohan Hedberg __u8 status; 9598fa19098SJohan Hedberg __s8 tx_power; 9608fa19098SJohan Hedberg } __packed; 9618fa19098SJohan Hedberg 9623f0f524bSJohan Hedberg #define HCI_MAX_AD_LENGTH 31 9633f0f524bSJohan Hedberg 9643f0f524bSJohan Hedberg #define HCI_OP_LE_SET_ADV_DATA 0x2008 9653f0f524bSJohan Hedberg struct hci_cp_le_set_adv_data { 9663f0f524bSJohan Hedberg __u8 length; 9673f0f524bSJohan Hedberg __u8 data[HCI_MAX_AD_LENGTH]; 9683f0f524bSJohan Hedberg } __packed; 9693f0f524bSJohan Hedberg 970c1d5dc4aSJohan Hedberg #define HCI_OP_LE_SET_ADV_ENABLE 0x200a 971c1d5dc4aSJohan Hedberg 97207f7fa5dSAndre Guedes #define HCI_OP_LE_SET_SCAN_PARAM 0x200b 97307f7fa5dSAndre Guedes struct hci_cp_le_set_scan_param { 97407f7fa5dSAndre Guedes __u8 type; 97507f7fa5dSAndre Guedes __le16 interval; 97607f7fa5dSAndre Guedes __le16 window; 97707f7fa5dSAndre Guedes __u8 own_address_type; 97807f7fa5dSAndre Guedes __u8 filter_policy; 97907f7fa5dSAndre Guedes } __packed; 98007f7fa5dSAndre Guedes 98168a8aea4SAndrei Emeltchenko #define LE_SCANNING_DISABLED 0x00 98268a8aea4SAndrei Emeltchenko #define LE_SCANNING_ENABLED 0x01 98368a8aea4SAndrei Emeltchenko 984eb9d91f5SAndre Guedes #define HCI_OP_LE_SET_SCAN_ENABLE 0x200c 985eb9d91f5SAndre Guedes struct hci_cp_le_set_scan_enable { 986eb9d91f5SAndre Guedes __u8 enable; 987eb9d91f5SAndre Guedes __u8 filter_dup; 988eb9d91f5SAndre Guedes } __packed; 989eb9d91f5SAndre Guedes 99063185f64SVille Tervo #define HCI_OP_LE_CREATE_CONN 0x200d 99163185f64SVille Tervo struct hci_cp_le_create_conn { 99263185f64SVille Tervo __le16 scan_interval; 99363185f64SVille Tervo __le16 scan_window; 99463185f64SVille Tervo __u8 filter_policy; 99563185f64SVille Tervo __u8 peer_addr_type; 99663185f64SVille Tervo bdaddr_t peer_addr; 99763185f64SVille Tervo __u8 own_address_type; 99863185f64SVille Tervo __le16 conn_interval_min; 99963185f64SVille Tervo __le16 conn_interval_max; 100063185f64SVille Tervo __le16 conn_latency; 100163185f64SVille Tervo __le16 supervision_timeout; 100263185f64SVille Tervo __le16 min_ce_len; 100363185f64SVille Tervo __le16 max_ce_len; 100463185f64SVille Tervo } __packed; 100563185f64SVille Tervo 100663185f64SVille Tervo #define HCI_OP_LE_CREATE_CONN_CANCEL 0x200e 100763185f64SVille Tervo 1008cf1d081fSJohan Hedberg #define HCI_OP_LE_READ_WHITE_LIST_SIZE 0x200f 1009cf1d081fSJohan Hedberg struct hci_rp_le_read_white_list_size { 1010cf1d081fSJohan Hedberg __u8 status; 1011cf1d081fSJohan Hedberg __u8 size; 1012cf1d081fSJohan Hedberg } __packed; 1013cf1d081fSJohan Hedberg 10142ce603ebSClaudio Takahasi #define HCI_OP_LE_CONN_UPDATE 0x2013 10152ce603ebSClaudio Takahasi struct hci_cp_le_conn_update { 10162ce603ebSClaudio Takahasi __le16 handle; 10172ce603ebSClaudio Takahasi __le16 conn_interval_min; 10182ce603ebSClaudio Takahasi __le16 conn_interval_max; 10192ce603ebSClaudio Takahasi __le16 conn_latency; 10202ce603ebSClaudio Takahasi __le16 supervision_timeout; 10212ce603ebSClaudio Takahasi __le16 min_ce_len; 10222ce603ebSClaudio Takahasi __le16 max_ce_len; 10232ce603ebSClaudio Takahasi } __packed; 10242ce603ebSClaudio Takahasi 1025a7a595f6SVinicius Costa Gomes #define HCI_OP_LE_START_ENC 0x2019 1026a7a595f6SVinicius Costa Gomes struct hci_cp_le_start_enc { 1027a7a595f6SVinicius Costa Gomes __le16 handle; 1028a7a595f6SVinicius Costa Gomes __u8 rand[8]; 1029a7a595f6SVinicius Costa Gomes __le16 ediv; 1030a7a595f6SVinicius Costa Gomes __u8 ltk[16]; 1031a7a595f6SVinicius Costa Gomes } __packed; 1032a7a595f6SVinicius Costa Gomes 1033a7a595f6SVinicius Costa Gomes #define HCI_OP_LE_LTK_REPLY 0x201a 1034a7a595f6SVinicius Costa Gomes struct hci_cp_le_ltk_reply { 1035a7a595f6SVinicius Costa Gomes __le16 handle; 1036a7a595f6SVinicius Costa Gomes __u8 ltk[16]; 1037a7a595f6SVinicius Costa Gomes } __packed; 1038a7a595f6SVinicius Costa Gomes struct hci_rp_le_ltk_reply { 1039a7a595f6SVinicius Costa Gomes __u8 status; 1040a7a595f6SVinicius Costa Gomes __le16 handle; 1041a7a595f6SVinicius Costa Gomes } __packed; 1042a7a595f6SVinicius Costa Gomes 1043a7a595f6SVinicius Costa Gomes #define HCI_OP_LE_LTK_NEG_REPLY 0x201b 1044a7a595f6SVinicius Costa Gomes struct hci_cp_le_ltk_neg_reply { 1045a7a595f6SVinicius Costa Gomes __le16 handle; 1046a7a595f6SVinicius Costa Gomes } __packed; 1047a7a595f6SVinicius Costa Gomes struct hci_rp_le_ltk_neg_reply { 1048a7a595f6SVinicius Costa Gomes __u8 status; 1049a7a595f6SVinicius Costa Gomes __le16 handle; 1050a7a595f6SVinicius Costa Gomes } __packed; 1051a7a595f6SVinicius Costa Gomes 10529b008c04SJohan Hedberg #define HCI_OP_LE_READ_SUPPORTED_STATES 0x201c 10539b008c04SJohan Hedberg struct hci_rp_le_read_supported_states { 10549b008c04SJohan Hedberg __u8 status; 10559b008c04SJohan Hedberg __u8 le_states[8]; 10569b008c04SJohan Hedberg } __packed; 10579b008c04SJohan Hedberg 10581da177e4SLinus Torvalds /* ---- HCI Events ---- */ 10591da177e4SLinus Torvalds #define HCI_EV_INQUIRY_COMPLETE 0x01 10601da177e4SLinus Torvalds 10611da177e4SLinus Torvalds #define HCI_EV_INQUIRY_RESULT 0x02 10621da177e4SLinus Torvalds struct inquiry_info { 10631da177e4SLinus Torvalds bdaddr_t bdaddr; 10641da177e4SLinus Torvalds __u8 pscan_rep_mode; 10651da177e4SLinus Torvalds __u8 pscan_period_mode; 10661da177e4SLinus Torvalds __u8 pscan_mode; 10671da177e4SLinus Torvalds __u8 dev_class[3]; 10681ebb9252SMarcel Holtmann __le16 clock_offset; 106966c853ccSGustavo F. Padovan } __packed; 10701da177e4SLinus Torvalds 10711da177e4SLinus Torvalds #define HCI_EV_CONN_COMPLETE 0x03 10721da177e4SLinus Torvalds struct hci_ev_conn_complete { 10731da177e4SLinus Torvalds __u8 status; 10741ebb9252SMarcel Holtmann __le16 handle; 10751da177e4SLinus Torvalds bdaddr_t bdaddr; 10761da177e4SLinus Torvalds __u8 link_type; 10771da177e4SLinus Torvalds __u8 encr_mode; 107866c853ccSGustavo F. Padovan } __packed; 10791da177e4SLinus Torvalds 10801da177e4SLinus Torvalds #define HCI_EV_CONN_REQUEST 0x04 10811da177e4SLinus Torvalds struct hci_ev_conn_request { 10821da177e4SLinus Torvalds bdaddr_t bdaddr; 10831da177e4SLinus Torvalds __u8 dev_class[3]; 10841da177e4SLinus Torvalds __u8 link_type; 108566c853ccSGustavo F. Padovan } __packed; 10861da177e4SLinus Torvalds 10871da177e4SLinus Torvalds #define HCI_EV_DISCONN_COMPLETE 0x05 10881da177e4SLinus Torvalds struct hci_ev_disconn_complete { 10891da177e4SLinus Torvalds __u8 status; 10901ebb9252SMarcel Holtmann __le16 handle; 10911da177e4SLinus Torvalds __u8 reason; 109266c853ccSGustavo F. Padovan } __packed; 10931da177e4SLinus Torvalds 10941da177e4SLinus Torvalds #define HCI_EV_AUTH_COMPLETE 0x06 10951da177e4SLinus Torvalds struct hci_ev_auth_complete { 10961da177e4SLinus Torvalds __u8 status; 10971ebb9252SMarcel Holtmann __le16 handle; 109866c853ccSGustavo F. Padovan } __packed; 10991da177e4SLinus Torvalds 1100a9de9248SMarcel Holtmann #define HCI_EV_REMOTE_NAME 0x07 1101a9de9248SMarcel Holtmann struct hci_ev_remote_name { 1102a9de9248SMarcel Holtmann __u8 status; 1103a9de9248SMarcel Holtmann bdaddr_t bdaddr; 11041f6c6378SJohan Hedberg __u8 name[HCI_MAX_NAME_LENGTH]; 110566c853ccSGustavo F. Padovan } __packed; 1106a9de9248SMarcel Holtmann 11071da177e4SLinus Torvalds #define HCI_EV_ENCRYPT_CHANGE 0x08 11081da177e4SLinus Torvalds struct hci_ev_encrypt_change { 11091da177e4SLinus Torvalds __u8 status; 11101ebb9252SMarcel Holtmann __le16 handle; 11111da177e4SLinus Torvalds __u8 encrypt; 111266c853ccSGustavo F. Padovan } __packed; 11131da177e4SLinus Torvalds 1114a9de9248SMarcel Holtmann #define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09 1115a9de9248SMarcel Holtmann struct hci_ev_change_link_key_complete { 11161da177e4SLinus Torvalds __u8 status; 11171ebb9252SMarcel Holtmann __le16 handle; 111866c853ccSGustavo F. Padovan } __packed; 11191da177e4SLinus Torvalds 1120a9de9248SMarcel Holtmann #define HCI_EV_REMOTE_FEATURES 0x0b 1121a9de9248SMarcel Holtmann struct hci_ev_remote_features { 1122a9de9248SMarcel Holtmann __u8 status; 1123a9de9248SMarcel Holtmann __le16 handle; 1124a9de9248SMarcel Holtmann __u8 features[8]; 112566c853ccSGustavo F. Padovan } __packed; 1126a9de9248SMarcel Holtmann 1127a9de9248SMarcel Holtmann #define HCI_EV_REMOTE_VERSION 0x0c 1128a9de9248SMarcel Holtmann struct hci_ev_remote_version { 1129a9de9248SMarcel Holtmann __u8 status; 1130a9de9248SMarcel Holtmann __le16 handle; 1131a9de9248SMarcel Holtmann __u8 lmp_ver; 1132a9de9248SMarcel Holtmann __le16 manufacturer; 1133a9de9248SMarcel Holtmann __le16 lmp_subver; 113466c853ccSGustavo F. Padovan } __packed; 1135a9de9248SMarcel Holtmann 1136a9de9248SMarcel Holtmann #define HCI_EV_QOS_SETUP_COMPLETE 0x0d 11371da177e4SLinus Torvalds struct hci_qos { 11381da177e4SLinus Torvalds __u8 service_type; 11391da177e4SLinus Torvalds __u32 token_rate; 11401da177e4SLinus Torvalds __u32 peak_bandwidth; 11411da177e4SLinus Torvalds __u32 latency; 11421da177e4SLinus Torvalds __u32 delay_variation; 114366c853ccSGustavo F. Padovan } __packed; 11441da177e4SLinus Torvalds struct hci_ev_qos_setup_complete { 11451da177e4SLinus Torvalds __u8 status; 11461ebb9252SMarcel Holtmann __le16 handle; 11471da177e4SLinus Torvalds struct hci_qos qos; 114866c853ccSGustavo F. Padovan } __packed; 11491da177e4SLinus Torvalds 1150a9de9248SMarcel Holtmann #define HCI_EV_CMD_COMPLETE 0x0e 11511da177e4SLinus Torvalds struct hci_ev_cmd_complete { 11521da177e4SLinus Torvalds __u8 ncmd; 11531ebb9252SMarcel Holtmann __le16 opcode; 115466c853ccSGustavo F. Padovan } __packed; 11551da177e4SLinus Torvalds 1156a9de9248SMarcel Holtmann #define HCI_EV_CMD_STATUS 0x0f 11571da177e4SLinus Torvalds struct hci_ev_cmd_status { 11581da177e4SLinus Torvalds __u8 status; 11591da177e4SLinus Torvalds __u8 ncmd; 11601ebb9252SMarcel Holtmann __le16 opcode; 116166c853ccSGustavo F. Padovan } __packed; 11621da177e4SLinus Torvalds 11631da177e4SLinus Torvalds #define HCI_EV_ROLE_CHANGE 0x12 11641da177e4SLinus Torvalds struct hci_ev_role_change { 11651da177e4SLinus Torvalds __u8 status; 11661da177e4SLinus Torvalds bdaddr_t bdaddr; 11671da177e4SLinus Torvalds __u8 role; 116866c853ccSGustavo F. Padovan } __packed; 11691da177e4SLinus Torvalds 1170a9de9248SMarcel Holtmann #define HCI_EV_NUM_COMP_PKTS 0x13 1171613a1c0cSAndrei Emeltchenko struct hci_comp_pkts_info { 1172613a1c0cSAndrei Emeltchenko __le16 handle; 1173613a1c0cSAndrei Emeltchenko __le16 count; 1174613a1c0cSAndrei Emeltchenko } __packed; 1175613a1c0cSAndrei Emeltchenko 1176a9de9248SMarcel Holtmann struct hci_ev_num_comp_pkts { 1177a9de9248SMarcel Holtmann __u8 num_hndl; 1178613a1c0cSAndrei Emeltchenko struct hci_comp_pkts_info handles[0]; 117966c853ccSGustavo F. Padovan } __packed; 1180a9de9248SMarcel Holtmann 11811da177e4SLinus Torvalds #define HCI_EV_MODE_CHANGE 0x14 11821da177e4SLinus Torvalds struct hci_ev_mode_change { 11831da177e4SLinus Torvalds __u8 status; 11841ebb9252SMarcel Holtmann __le16 handle; 11851da177e4SLinus Torvalds __u8 mode; 11861ebb9252SMarcel Holtmann __le16 interval; 118766c853ccSGustavo F. Padovan } __packed; 11881da177e4SLinus Torvalds 11891da177e4SLinus Torvalds #define HCI_EV_PIN_CODE_REQ 0x16 11901da177e4SLinus Torvalds struct hci_ev_pin_code_req { 11911da177e4SLinus Torvalds bdaddr_t bdaddr; 119266c853ccSGustavo F. Padovan } __packed; 11931da177e4SLinus Torvalds 11941da177e4SLinus Torvalds #define HCI_EV_LINK_KEY_REQ 0x17 11951da177e4SLinus Torvalds struct hci_ev_link_key_req { 11961da177e4SLinus Torvalds bdaddr_t bdaddr; 119766c853ccSGustavo F. Padovan } __packed; 11981da177e4SLinus Torvalds 11991da177e4SLinus Torvalds #define HCI_EV_LINK_KEY_NOTIFY 0x18 12001da177e4SLinus Torvalds struct hci_ev_link_key_notify { 12011da177e4SLinus Torvalds bdaddr_t bdaddr; 12029b3b4460SAndrei Emeltchenko __u8 link_key[HCI_LINK_KEY_SIZE]; 12031da177e4SLinus Torvalds __u8 key_type; 120466c853ccSGustavo F. Padovan } __packed; 12051da177e4SLinus Torvalds 1206a9de9248SMarcel Holtmann #define HCI_EV_CLOCK_OFFSET 0x1c 12071da177e4SLinus Torvalds struct hci_ev_clock_offset { 12081da177e4SLinus Torvalds __u8 status; 12091ebb9252SMarcel Holtmann __le16 handle; 12101ebb9252SMarcel Holtmann __le16 clock_offset; 121166c853ccSGustavo F. Padovan } __packed; 12121da177e4SLinus Torvalds 1213a8746417SMarcel Holtmann #define HCI_EV_PKT_TYPE_CHANGE 0x1d 1214a8746417SMarcel Holtmann struct hci_ev_pkt_type_change { 1215a8746417SMarcel Holtmann __u8 status; 1216a8746417SMarcel Holtmann __le16 handle; 1217a8746417SMarcel Holtmann __le16 pkt_type; 121866c853ccSGustavo F. Padovan } __packed; 1219a8746417SMarcel Holtmann 122085a1e930SMarcel Holtmann #define HCI_EV_PSCAN_REP_MODE 0x20 122185a1e930SMarcel Holtmann struct hci_ev_pscan_rep_mode { 122285a1e930SMarcel Holtmann bdaddr_t bdaddr; 122385a1e930SMarcel Holtmann __u8 pscan_rep_mode; 122466c853ccSGustavo F. Padovan } __packed; 122585a1e930SMarcel Holtmann 1226a9de9248SMarcel Holtmann #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 1227a9de9248SMarcel Holtmann struct inquiry_info_with_rssi { 1228a9de9248SMarcel Holtmann bdaddr_t bdaddr; 1229a9de9248SMarcel Holtmann __u8 pscan_rep_mode; 1230a9de9248SMarcel Holtmann __u8 pscan_period_mode; 1231a9de9248SMarcel Holtmann __u8 dev_class[3]; 1232a9de9248SMarcel Holtmann __le16 clock_offset; 1233a9de9248SMarcel Holtmann __s8 rssi; 123466c853ccSGustavo F. Padovan } __packed; 1235a9de9248SMarcel Holtmann struct inquiry_info_with_rssi_and_pscan_mode { 1236a9de9248SMarcel Holtmann bdaddr_t bdaddr; 1237a9de9248SMarcel Holtmann __u8 pscan_rep_mode; 1238a9de9248SMarcel Holtmann __u8 pscan_period_mode; 1239a9de9248SMarcel Holtmann __u8 pscan_mode; 1240a9de9248SMarcel Holtmann __u8 dev_class[3]; 1241a9de9248SMarcel Holtmann __le16 clock_offset; 1242a9de9248SMarcel Holtmann __s8 rssi; 124366c853ccSGustavo F. Padovan } __packed; 1244a9de9248SMarcel Holtmann 1245a9de9248SMarcel Holtmann #define HCI_EV_REMOTE_EXT_FEATURES 0x23 1246a9de9248SMarcel Holtmann struct hci_ev_remote_ext_features { 1247a9de9248SMarcel Holtmann __u8 status; 1248a9de9248SMarcel Holtmann __le16 handle; 1249a9de9248SMarcel Holtmann __u8 page; 1250a9de9248SMarcel Holtmann __u8 max_page; 1251a9de9248SMarcel Holtmann __u8 features[8]; 125266c853ccSGustavo F. Padovan } __packed; 1253a9de9248SMarcel Holtmann 1254a9de9248SMarcel Holtmann #define HCI_EV_SYNC_CONN_COMPLETE 0x2c 1255a9de9248SMarcel Holtmann struct hci_ev_sync_conn_complete { 1256a9de9248SMarcel Holtmann __u8 status; 1257a9de9248SMarcel Holtmann __le16 handle; 1258a9de9248SMarcel Holtmann bdaddr_t bdaddr; 1259a9de9248SMarcel Holtmann __u8 link_type; 1260a9de9248SMarcel Holtmann __u8 tx_interval; 1261a9de9248SMarcel Holtmann __u8 retrans_window; 1262a9de9248SMarcel Holtmann __le16 rx_pkt_len; 1263a9de9248SMarcel Holtmann __le16 tx_pkt_len; 1264a9de9248SMarcel Holtmann __u8 air_mode; 126566c853ccSGustavo F. Padovan } __packed; 1266a9de9248SMarcel Holtmann 1267a9de9248SMarcel Holtmann #define HCI_EV_SYNC_CONN_CHANGED 0x2d 1268a9de9248SMarcel Holtmann struct hci_ev_sync_conn_changed { 1269a9de9248SMarcel Holtmann __u8 status; 1270a9de9248SMarcel Holtmann __le16 handle; 1271a9de9248SMarcel Holtmann __u8 tx_interval; 1272a9de9248SMarcel Holtmann __u8 retrans_window; 1273a9de9248SMarcel Holtmann __le16 rx_pkt_len; 1274a9de9248SMarcel Holtmann __le16 tx_pkt_len; 127566c853ccSGustavo F. Padovan } __packed; 1276a9de9248SMarcel Holtmann 1277a9de9248SMarcel Holtmann #define HCI_EV_SNIFF_SUBRATE 0x2e 127804837f64SMarcel Holtmann struct hci_ev_sniff_subrate { 127904837f64SMarcel Holtmann __u8 status; 128004837f64SMarcel Holtmann __le16 handle; 128104837f64SMarcel Holtmann __le16 max_tx_latency; 128204837f64SMarcel Holtmann __le16 max_rx_latency; 128304837f64SMarcel Holtmann __le16 max_remote_timeout; 128404837f64SMarcel Holtmann __le16 max_local_timeout; 128566c853ccSGustavo F. Padovan } __packed; 128604837f64SMarcel Holtmann 1287a9de9248SMarcel Holtmann #define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f 1288a9de9248SMarcel Holtmann struct extended_inquiry_info { 1289a9de9248SMarcel Holtmann bdaddr_t bdaddr; 1290a9de9248SMarcel Holtmann __u8 pscan_rep_mode; 1291a9de9248SMarcel Holtmann __u8 pscan_period_mode; 1292a9de9248SMarcel Holtmann __u8 dev_class[3]; 1293a9de9248SMarcel Holtmann __le16 clock_offset; 1294a9de9248SMarcel Holtmann __s8 rssi; 1295a9de9248SMarcel Holtmann __u8 data[240]; 129666c853ccSGustavo F. Padovan } __packed; 1297a9de9248SMarcel Holtmann 12981c2e0041SJohan Hedberg #define HCI_EV_KEY_REFRESH_COMPLETE 0x30 12991c2e0041SJohan Hedberg struct hci_ev_key_refresh_complete { 13001c2e0041SJohan Hedberg __u8 status; 13011c2e0041SJohan Hedberg __le16 handle; 13021c2e0041SJohan Hedberg } __packed; 13031c2e0041SJohan Hedberg 13040493684eSMarcel Holtmann #define HCI_EV_IO_CAPA_REQUEST 0x31 13050493684eSMarcel Holtmann struct hci_ev_io_capa_request { 13060493684eSMarcel Holtmann bdaddr_t bdaddr; 130766c853ccSGustavo F. Padovan } __packed; 13080493684eSMarcel Holtmann 130903b555e1SJohan Hedberg #define HCI_EV_IO_CAPA_REPLY 0x32 131003b555e1SJohan Hedberg struct hci_ev_io_capa_reply { 131103b555e1SJohan Hedberg bdaddr_t bdaddr; 131203b555e1SJohan Hedberg __u8 capability; 131303b555e1SJohan Hedberg __u8 oob_data; 131403b555e1SJohan Hedberg __u8 authentication; 131503b555e1SJohan Hedberg } __packed; 131603b555e1SJohan Hedberg 1317a5c29683SJohan Hedberg #define HCI_EV_USER_CONFIRM_REQUEST 0x33 1318a5c29683SJohan Hedberg struct hci_ev_user_confirm_req { 1319a5c29683SJohan Hedberg bdaddr_t bdaddr; 1320a5c29683SJohan Hedberg __le32 passkey; 1321a5c29683SJohan Hedberg } __packed; 1322a5c29683SJohan Hedberg 13239ad4019aSBrian Gix #define HCI_EV_USER_PASSKEY_REQUEST 0x34 13249ad4019aSBrian Gix struct hci_ev_user_passkey_req { 13259ad4019aSBrian Gix bdaddr_t bdaddr; 13269ad4019aSBrian Gix } __packed; 13279ad4019aSBrian Gix 13282763eda6SSzymon Janc #define HCI_EV_REMOTE_OOB_DATA_REQUEST 0x35 13292763eda6SSzymon Janc struct hci_ev_remote_oob_data_request { 13302763eda6SSzymon Janc bdaddr_t bdaddr; 13312763eda6SSzymon Janc } __packed; 13322763eda6SSzymon Janc 13330493684eSMarcel Holtmann #define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36 13340493684eSMarcel Holtmann struct hci_ev_simple_pair_complete { 13350493684eSMarcel Holtmann __u8 status; 13360493684eSMarcel Holtmann bdaddr_t bdaddr; 133766c853ccSGustavo F. Padovan } __packed; 13380493684eSMarcel Holtmann 133992a25256SJohan Hedberg #define HCI_EV_USER_PASSKEY_NOTIFY 0x3b 134092a25256SJohan Hedberg struct hci_ev_user_passkey_notify { 134192a25256SJohan Hedberg bdaddr_t bdaddr; 134292a25256SJohan Hedberg __le32 passkey; 134392a25256SJohan Hedberg } __packed; 134492a25256SJohan Hedberg 134592a25256SJohan Hedberg #define HCI_KEYPRESS_STARTED 0 134692a25256SJohan Hedberg #define HCI_KEYPRESS_ENTERED 1 134792a25256SJohan Hedberg #define HCI_KEYPRESS_ERASED 2 134892a25256SJohan Hedberg #define HCI_KEYPRESS_CLEARED 3 134992a25256SJohan Hedberg #define HCI_KEYPRESS_COMPLETED 4 135092a25256SJohan Hedberg 135192a25256SJohan Hedberg #define HCI_EV_KEYPRESS_NOTIFY 0x3c 135292a25256SJohan Hedberg struct hci_ev_keypress_notify { 135392a25256SJohan Hedberg bdaddr_t bdaddr; 135492a25256SJohan Hedberg __u8 type; 135592a25256SJohan Hedberg } __packed; 135692a25256SJohan Hedberg 135741a96212SMarcel Holtmann #define HCI_EV_REMOTE_HOST_FEATURES 0x3d 135841a96212SMarcel Holtmann struct hci_ev_remote_host_features { 135941a96212SMarcel Holtmann bdaddr_t bdaddr; 136041a96212SMarcel Holtmann __u8 features[8]; 136166c853ccSGustavo F. Padovan } __packed; 136241a96212SMarcel Holtmann 136363185f64SVille Tervo #define HCI_EV_LE_META 0x3e 136463185f64SVille Tervo struct hci_ev_le_meta { 136563185f64SVille Tervo __u8 subevent; 136663185f64SVille Tervo } __packed; 136763185f64SVille Tervo 1368523e93cdSAndrei Emeltchenko #define HCI_EV_PHY_LINK_COMPLETE 0x40 1369523e93cdSAndrei Emeltchenko struct hci_ev_phy_link_complete { 1370523e93cdSAndrei Emeltchenko __u8 status; 1371523e93cdSAndrei Emeltchenko __u8 phy_handle; 1372523e93cdSAndrei Emeltchenko } __packed; 1373523e93cdSAndrei Emeltchenko 1374523e93cdSAndrei Emeltchenko #define HCI_EV_CHANNEL_SELECTED 0x41 1375523e93cdSAndrei Emeltchenko struct hci_ev_channel_selected { 1376523e93cdSAndrei Emeltchenko __u8 phy_handle; 1377523e93cdSAndrei Emeltchenko } __packed; 1378523e93cdSAndrei Emeltchenko 1379523e93cdSAndrei Emeltchenko #define HCI_EV_DISCONN_PHY_LINK_COMPLETE 0x42 1380523e93cdSAndrei Emeltchenko struct hci_ev_disconn_phy_link_complete { 1381523e93cdSAndrei Emeltchenko __u8 status; 1382523e93cdSAndrei Emeltchenko __u8 phy_handle; 1383523e93cdSAndrei Emeltchenko __u8 reason; 1384523e93cdSAndrei Emeltchenko } __packed; 1385523e93cdSAndrei Emeltchenko 1386523e93cdSAndrei Emeltchenko #define HCI_EV_LOGICAL_LINK_COMPLETE 0x45 1387523e93cdSAndrei Emeltchenko struct hci_ev_logical_link_complete { 1388523e93cdSAndrei Emeltchenko __u8 status; 1389523e93cdSAndrei Emeltchenko __le16 handle; 1390523e93cdSAndrei Emeltchenko __u8 phy_handle; 1391523e93cdSAndrei Emeltchenko __u8 flow_spec_id; 1392523e93cdSAndrei Emeltchenko } __packed; 1393523e93cdSAndrei Emeltchenko 1394523e93cdSAndrei Emeltchenko #define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE 0x46 1395523e93cdSAndrei Emeltchenko struct hci_ev_disconn_logical_link_complete { 1396523e93cdSAndrei Emeltchenko __u8 status; 1397523e93cdSAndrei Emeltchenko __le16 handle; 1398523e93cdSAndrei Emeltchenko __u8 reason; 1399523e93cdSAndrei Emeltchenko } __packed; 1400523e93cdSAndrei Emeltchenko 140125e89e99SAndrei Emeltchenko #define HCI_EV_NUM_COMP_BLOCKS 0x48 140225e89e99SAndrei Emeltchenko struct hci_comp_blocks_info { 140325e89e99SAndrei Emeltchenko __le16 handle; 140425e89e99SAndrei Emeltchenko __le16 pkts; 140525e89e99SAndrei Emeltchenko __le16 blocks; 140625e89e99SAndrei Emeltchenko } __packed; 140725e89e99SAndrei Emeltchenko 140825e89e99SAndrei Emeltchenko struct hci_ev_num_comp_blocks { 140925e89e99SAndrei Emeltchenko __le16 num_blocks; 141025e89e99SAndrei Emeltchenko __u8 num_hndl; 141125e89e99SAndrei Emeltchenko struct hci_comp_blocks_info handles[0]; 141225e89e99SAndrei Emeltchenko } __packed; 141325e89e99SAndrei Emeltchenko 141463185f64SVille Tervo /* Low energy meta events */ 1415b9b343d2SAndre Guedes #define LE_CONN_ROLE_MASTER 0x00 1416b9b343d2SAndre Guedes 141763185f64SVille Tervo #define HCI_EV_LE_CONN_COMPLETE 0x01 141863185f64SVille Tervo struct hci_ev_le_conn_complete { 141963185f64SVille Tervo __u8 status; 142063185f64SVille Tervo __le16 handle; 142163185f64SVille Tervo __u8 role; 142263185f64SVille Tervo __u8 bdaddr_type; 142363185f64SVille Tervo bdaddr_t bdaddr; 142463185f64SVille Tervo __le16 interval; 142563185f64SVille Tervo __le16 latency; 142663185f64SVille Tervo __le16 supervision_timeout; 142763185f64SVille Tervo __u8 clk_accurancy; 142863185f64SVille Tervo } __packed; 142963185f64SVille Tervo 1430a7a595f6SVinicius Costa Gomes #define HCI_EV_LE_LTK_REQ 0x05 1431a7a595f6SVinicius Costa Gomes struct hci_ev_le_ltk_req { 1432a7a595f6SVinicius Costa Gomes __le16 handle; 1433a7a595f6SVinicius Costa Gomes __u8 random[8]; 1434a7a595f6SVinicius Costa Gomes __le16 ediv; 1435a7a595f6SVinicius Costa Gomes } __packed; 1436a7a595f6SVinicius Costa Gomes 143757a56fd4SAnderson Briglia /* Advertising report event types */ 143857a56fd4SAnderson Briglia #define ADV_IND 0x00 143957a56fd4SAnderson Briglia #define ADV_DIRECT_IND 0x01 144057a56fd4SAnderson Briglia #define ADV_SCAN_IND 0x02 144157a56fd4SAnderson Briglia #define ADV_NONCONN_IND 0x03 144257a56fd4SAnderson Briglia #define ADV_SCAN_RSP 0x04 144357a56fd4SAnderson Briglia 144457a56fd4SAnderson Briglia #define ADDR_LE_DEV_PUBLIC 0x00 144557a56fd4SAnderson Briglia #define ADDR_LE_DEV_RANDOM 0x01 144657a56fd4SAnderson Briglia 144757a56fd4SAnderson Briglia #define HCI_EV_LE_ADVERTISING_REPORT 0x02 144857a56fd4SAnderson Briglia struct hci_ev_le_advertising_info { 144957a56fd4SAnderson Briglia __u8 evt_type; 145057a56fd4SAnderson Briglia __u8 bdaddr_type; 145157a56fd4SAnderson Briglia bdaddr_t bdaddr; 145257a56fd4SAnderson Briglia __u8 length; 145357a56fd4SAnderson Briglia __u8 data[0]; 145457a56fd4SAnderson Briglia } __packed; 145557a56fd4SAnderson Briglia 14561da177e4SLinus Torvalds /* Internal events generated by Bluetooth stack */ 1457a9de9248SMarcel Holtmann #define HCI_EV_STACK_INTERNAL 0xfd 14581da177e4SLinus Torvalds struct hci_ev_stack_internal { 14591da177e4SLinus Torvalds __u16 type; 14601da177e4SLinus Torvalds __u8 data[0]; 146166c853ccSGustavo F. Padovan } __packed; 14621da177e4SLinus Torvalds 14631da177e4SLinus Torvalds #define HCI_EV_SI_DEVICE 0x01 14641da177e4SLinus Torvalds struct hci_ev_si_device { 14651da177e4SLinus Torvalds __u16 event; 14661da177e4SLinus Torvalds __u16 dev_id; 146766c853ccSGustavo F. Padovan } __packed; 14681da177e4SLinus Torvalds 14691da177e4SLinus Torvalds #define HCI_EV_SI_SECURITY 0x02 14701da177e4SLinus Torvalds struct hci_ev_si_security { 14711da177e4SLinus Torvalds __u16 event; 14721da177e4SLinus Torvalds __u16 proto; 14731da177e4SLinus Torvalds __u16 subproto; 14741da177e4SLinus Torvalds __u8 incoming; 147566c853ccSGustavo F. Padovan } __packed; 14761da177e4SLinus Torvalds 14771da177e4SLinus Torvalds /* ---- HCI Packet structures ---- */ 14781da177e4SLinus Torvalds #define HCI_COMMAND_HDR_SIZE 3 14791da177e4SLinus Torvalds #define HCI_EVENT_HDR_SIZE 2 14801da177e4SLinus Torvalds #define HCI_ACL_HDR_SIZE 4 14811da177e4SLinus Torvalds #define HCI_SCO_HDR_SIZE 3 14821da177e4SLinus Torvalds 14831da177e4SLinus Torvalds struct hci_command_hdr { 14841ebb9252SMarcel Holtmann __le16 opcode; /* OCF & OGF */ 14851da177e4SLinus Torvalds __u8 plen; 148666c853ccSGustavo F. Padovan } __packed; 14871da177e4SLinus Torvalds 14881da177e4SLinus Torvalds struct hci_event_hdr { 14891da177e4SLinus Torvalds __u8 evt; 14901da177e4SLinus Torvalds __u8 plen; 149166c853ccSGustavo F. Padovan } __packed; 14921da177e4SLinus Torvalds 14931da177e4SLinus Torvalds struct hci_acl_hdr { 14941ebb9252SMarcel Holtmann __le16 handle; /* Handle & Flags(PB, BC) */ 14951ebb9252SMarcel Holtmann __le16 dlen; 149666c853ccSGustavo F. Padovan } __packed; 14971da177e4SLinus Torvalds 14981da177e4SLinus Torvalds struct hci_sco_hdr { 14991ebb9252SMarcel Holtmann __le16 handle; 15001da177e4SLinus Torvalds __u8 dlen; 150166c853ccSGustavo F. Padovan } __packed; 15021da177e4SLinus Torvalds 15032a123b86SArnaldo Carvalho de Melo static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb) 15042a123b86SArnaldo Carvalho de Melo { 15052a123b86SArnaldo Carvalho de Melo return (struct hci_event_hdr *) skb->data; 15062a123b86SArnaldo Carvalho de Melo } 15072a123b86SArnaldo Carvalho de Melo 15082a123b86SArnaldo Carvalho de Melo static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb) 15092a123b86SArnaldo Carvalho de Melo { 15102a123b86SArnaldo Carvalho de Melo return (struct hci_acl_hdr *) skb->data; 15112a123b86SArnaldo Carvalho de Melo } 15122a123b86SArnaldo Carvalho de Melo 15132a123b86SArnaldo Carvalho de Melo static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb) 15142a123b86SArnaldo Carvalho de Melo { 15152a123b86SArnaldo Carvalho de Melo return (struct hci_sco_hdr *) skb->data; 15162a123b86SArnaldo Carvalho de Melo } 15172a123b86SArnaldo Carvalho de Melo 15181da177e4SLinus Torvalds /* Command opcode pack/unpack */ 1519c3c7ea65SGustavo Padovan #define hci_opcode_pack(ogf, ocf) ((__u16) ((ocf & 0x03ff)|(ogf << 10))) 15201da177e4SLinus Torvalds #define hci_opcode_ogf(op) (op >> 10) 15211da177e4SLinus Torvalds #define hci_opcode_ocf(op) (op & 0x03ff) 15221da177e4SLinus Torvalds 15231da177e4SLinus Torvalds /* ACL handle and flags pack/unpack */ 1524c3c7ea65SGustavo Padovan #define hci_handle_pack(h, f) ((__u16) ((h & 0x0fff)|(f << 12))) 15251da177e4SLinus Torvalds #define hci_handle(h) (h & 0x0fff) 15261da177e4SLinus Torvalds #define hci_flags(h) (h >> 12) 15271da177e4SLinus Torvalds 15281da177e4SLinus Torvalds /* ---- HCI Sockets ---- */ 15291da177e4SLinus Torvalds 15301da177e4SLinus Torvalds /* Socket options */ 15311da177e4SLinus Torvalds #define HCI_DATA_DIR 1 15321da177e4SLinus Torvalds #define HCI_FILTER 2 15331da177e4SLinus Torvalds #define HCI_TIME_STAMP 3 15341da177e4SLinus Torvalds 15351da177e4SLinus Torvalds /* CMSG flags */ 15361da177e4SLinus Torvalds #define HCI_CMSG_DIR 0x0001 15371da177e4SLinus Torvalds #define HCI_CMSG_TSTAMP 0x0002 15381da177e4SLinus Torvalds 15391da177e4SLinus Torvalds struct sockaddr_hci { 15401da177e4SLinus Torvalds sa_family_t hci_family; 15411da177e4SLinus Torvalds unsigned short hci_dev; 1542c02178d2SJohan Hedberg unsigned short hci_channel; 15431da177e4SLinus Torvalds }; 15441da177e4SLinus Torvalds #define HCI_DEV_NONE 0xffff 15451da177e4SLinus Torvalds 1546c02178d2SJohan Hedberg #define HCI_CHANNEL_RAW 0 1547cd82e61cSMarcel Holtmann #define HCI_CHANNEL_MONITOR 2 154866f3b913SGustavo Padovan #define HCI_CHANNEL_CONTROL 3 1549c02178d2SJohan Hedberg 15501da177e4SLinus Torvalds struct hci_filter { 15511da177e4SLinus Torvalds unsigned long type_mask; 15521da177e4SLinus Torvalds unsigned long event_mask[2]; 1553905f3ed6SAl Viro __le16 opcode; 15541da177e4SLinus Torvalds }; 15551da177e4SLinus Torvalds 15561da177e4SLinus Torvalds struct hci_ufilter { 15571da177e4SLinus Torvalds __u32 type_mask; 15581da177e4SLinus Torvalds __u32 event_mask[2]; 1559905f3ed6SAl Viro __le16 opcode; 15601da177e4SLinus Torvalds }; 15611da177e4SLinus Torvalds 15621da177e4SLinus Torvalds #define HCI_FLT_TYPE_BITS 31 15631da177e4SLinus Torvalds #define HCI_FLT_EVENT_BITS 63 15641da177e4SLinus Torvalds #define HCI_FLT_OGF_BITS 63 15651da177e4SLinus Torvalds #define HCI_FLT_OCF_BITS 127 15661da177e4SLinus Torvalds 15671da177e4SLinus Torvalds /* ---- HCI Ioctl requests structures ---- */ 15681da177e4SLinus Torvalds struct hci_dev_stats { 15691da177e4SLinus Torvalds __u32 err_rx; 15701da177e4SLinus Torvalds __u32 err_tx; 15711da177e4SLinus Torvalds __u32 cmd_tx; 15721da177e4SLinus Torvalds __u32 evt_rx; 15731da177e4SLinus Torvalds __u32 acl_tx; 15741da177e4SLinus Torvalds __u32 acl_rx; 15751da177e4SLinus Torvalds __u32 sco_tx; 15761da177e4SLinus Torvalds __u32 sco_rx; 15771da177e4SLinus Torvalds __u32 byte_rx; 15781da177e4SLinus Torvalds __u32 byte_tx; 15791da177e4SLinus Torvalds }; 15801da177e4SLinus Torvalds 15811da177e4SLinus Torvalds struct hci_dev_info { 15821da177e4SLinus Torvalds __u16 dev_id; 15831da177e4SLinus Torvalds char name[8]; 15841da177e4SLinus Torvalds 15851da177e4SLinus Torvalds bdaddr_t bdaddr; 15861da177e4SLinus Torvalds 15871da177e4SLinus Torvalds __u32 flags; 15881da177e4SLinus Torvalds __u8 type; 15891da177e4SLinus Torvalds 15901da177e4SLinus Torvalds __u8 features[8]; 15911da177e4SLinus Torvalds 15921da177e4SLinus Torvalds __u32 pkt_type; 15931da177e4SLinus Torvalds __u32 link_policy; 15941da177e4SLinus Torvalds __u32 link_mode; 15951da177e4SLinus Torvalds 15961da177e4SLinus Torvalds __u16 acl_mtu; 15971da177e4SLinus Torvalds __u16 acl_pkts; 15981da177e4SLinus Torvalds __u16 sco_mtu; 15991da177e4SLinus Torvalds __u16 sco_pkts; 16001da177e4SLinus Torvalds 16011da177e4SLinus Torvalds struct hci_dev_stats stat; 16021da177e4SLinus Torvalds }; 16031da177e4SLinus Torvalds 16041da177e4SLinus Torvalds struct hci_conn_info { 16051da177e4SLinus Torvalds __u16 handle; 16061da177e4SLinus Torvalds bdaddr_t bdaddr; 16071da177e4SLinus Torvalds __u8 type; 16081da177e4SLinus Torvalds __u8 out; 16091da177e4SLinus Torvalds __u16 state; 16101da177e4SLinus Torvalds __u32 link_mode; 16111da177e4SLinus Torvalds }; 16121da177e4SLinus Torvalds 16131da177e4SLinus Torvalds struct hci_dev_req { 16141da177e4SLinus Torvalds __u16 dev_id; 16151da177e4SLinus Torvalds __u32 dev_opt; 16161da177e4SLinus Torvalds }; 16171da177e4SLinus Torvalds 16181da177e4SLinus Torvalds struct hci_dev_list_req { 16191da177e4SLinus Torvalds __u16 dev_num; 16201da177e4SLinus Torvalds struct hci_dev_req dev_req[0]; /* hci_dev_req structures */ 16211da177e4SLinus Torvalds }; 16221da177e4SLinus Torvalds 16231da177e4SLinus Torvalds struct hci_conn_list_req { 16241da177e4SLinus Torvalds __u16 dev_id; 16251da177e4SLinus Torvalds __u16 conn_num; 16261da177e4SLinus Torvalds struct hci_conn_info conn_info[0]; 16271da177e4SLinus Torvalds }; 16281da177e4SLinus Torvalds 16291da177e4SLinus Torvalds struct hci_conn_info_req { 16301da177e4SLinus Torvalds bdaddr_t bdaddr; 16311da177e4SLinus Torvalds __u8 type; 16321da177e4SLinus Torvalds struct hci_conn_info conn_info[0]; 16331da177e4SLinus Torvalds }; 16341da177e4SLinus Torvalds 163540be492fSMarcel Holtmann struct hci_auth_info_req { 163640be492fSMarcel Holtmann bdaddr_t bdaddr; 163740be492fSMarcel Holtmann __u8 type; 163840be492fSMarcel Holtmann }; 163940be492fSMarcel Holtmann 16401da177e4SLinus Torvalds struct hci_inquiry_req { 16411da177e4SLinus Torvalds __u16 dev_id; 16421da177e4SLinus Torvalds __u16 flags; 16431da177e4SLinus Torvalds __u8 lap[3]; 16441da177e4SLinus Torvalds __u8 length; 16451da177e4SLinus Torvalds __u8 num_rsp; 16461da177e4SLinus Torvalds }; 16471da177e4SLinus Torvalds #define IREQ_CACHE_FLUSH 0x0001 16481da177e4SLinus Torvalds 16498b281b9cSFabio Estevam extern bool enable_hs; 16508830f514SAndrei Emeltchenko 16511da177e4SLinus Torvalds #endif /* __HCI_H */ 1652