162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci BlueZ - Bluetooth protocol stack for Linux 362306a36Sopenharmony_ci Copyright (C) 2000-2001 Qualcomm Incorporated 462306a36Sopenharmony_ci Copyright 2023 NXP 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci This program is free software; you can redistribute it and/or modify 962306a36Sopenharmony_ci it under the terms of the GNU General Public License version 2 as 1062306a36Sopenharmony_ci published by the Free Software Foundation; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1362306a36Sopenharmony_ci OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1462306a36Sopenharmony_ci FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 1562306a36Sopenharmony_ci IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 1662306a36Sopenharmony_ci CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 1762306a36Sopenharmony_ci WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1862306a36Sopenharmony_ci ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1962306a36Sopenharmony_ci OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 2262306a36Sopenharmony_ci COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 2362306a36Sopenharmony_ci SOFTWARE IS DISCLAIMED. 2462306a36Sopenharmony_ci*/ 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#ifndef __HCI_H 2762306a36Sopenharmony_ci#define __HCI_H 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define HCI_MAX_ACL_SIZE 1024 3062306a36Sopenharmony_ci#define HCI_MAX_SCO_SIZE 255 3162306a36Sopenharmony_ci#define HCI_MAX_ISO_SIZE 251 3262306a36Sopenharmony_ci#define HCI_MAX_EVENT_SIZE 260 3362306a36Sopenharmony_ci#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define HCI_LINK_KEY_SIZE 16 3662306a36Sopenharmony_ci#define HCI_AMP_LINK_KEY_SIZE (2 * HCI_LINK_KEY_SIZE) 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci#define HCI_MAX_AMP_ASSOC_SIZE 672 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci#define HCI_MAX_CPB_DATA_SIZE 252 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci/* HCI dev events */ 4362306a36Sopenharmony_ci#define HCI_DEV_REG 1 4462306a36Sopenharmony_ci#define HCI_DEV_UNREG 2 4562306a36Sopenharmony_ci#define HCI_DEV_UP 3 4662306a36Sopenharmony_ci#define HCI_DEV_DOWN 4 4762306a36Sopenharmony_ci#define HCI_DEV_SUSPEND 5 4862306a36Sopenharmony_ci#define HCI_DEV_RESUME 6 4962306a36Sopenharmony_ci#define HCI_DEV_OPEN 7 5062306a36Sopenharmony_ci#define HCI_DEV_CLOSE 8 5162306a36Sopenharmony_ci#define HCI_DEV_SETUP 9 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci/* HCI notify events */ 5462306a36Sopenharmony_ci#define HCI_NOTIFY_CONN_ADD 1 5562306a36Sopenharmony_ci#define HCI_NOTIFY_CONN_DEL 2 5662306a36Sopenharmony_ci#define HCI_NOTIFY_VOICE_SETTING 3 5762306a36Sopenharmony_ci#define HCI_NOTIFY_ENABLE_SCO_CVSD 4 5862306a36Sopenharmony_ci#define HCI_NOTIFY_ENABLE_SCO_TRANSP 5 5962306a36Sopenharmony_ci#define HCI_NOTIFY_DISABLE_SCO 6 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* HCI bus types */ 6262306a36Sopenharmony_ci#define HCI_VIRTUAL 0 6362306a36Sopenharmony_ci#define HCI_USB 1 6462306a36Sopenharmony_ci#define HCI_PCCARD 2 6562306a36Sopenharmony_ci#define HCI_UART 3 6662306a36Sopenharmony_ci#define HCI_RS232 4 6762306a36Sopenharmony_ci#define HCI_PCI 5 6862306a36Sopenharmony_ci#define HCI_SDIO 6 6962306a36Sopenharmony_ci#define HCI_SPI 7 7062306a36Sopenharmony_ci#define HCI_I2C 8 7162306a36Sopenharmony_ci#define HCI_SMD 9 7262306a36Sopenharmony_ci#define HCI_VIRTIO 10 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci/* HCI controller types */ 7562306a36Sopenharmony_ci#define HCI_PRIMARY 0x00 7662306a36Sopenharmony_ci#define HCI_AMP 0x01 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/* First BR/EDR Controller shall have ID = 0 */ 7962306a36Sopenharmony_ci#define AMP_ID_BREDR 0x00 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci/* AMP controller types */ 8262306a36Sopenharmony_ci#define AMP_TYPE_BREDR 0x00 8362306a36Sopenharmony_ci#define AMP_TYPE_80211 0x01 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci/* AMP controller status */ 8662306a36Sopenharmony_ci#define AMP_STATUS_POWERED_DOWN 0x00 8762306a36Sopenharmony_ci#define AMP_STATUS_BLUETOOTH_ONLY 0x01 8862306a36Sopenharmony_ci#define AMP_STATUS_NO_CAPACITY 0x02 8962306a36Sopenharmony_ci#define AMP_STATUS_LOW_CAPACITY 0x03 9062306a36Sopenharmony_ci#define AMP_STATUS_MEDIUM_CAPACITY 0x04 9162306a36Sopenharmony_ci#define AMP_STATUS_HIGH_CAPACITY 0x05 9262306a36Sopenharmony_ci#define AMP_STATUS_FULL_CAPACITY 0x06 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* HCI device quirks */ 9562306a36Sopenharmony_cienum { 9662306a36Sopenharmony_ci /* When this quirk is set, the HCI Reset command is send when 9762306a36Sopenharmony_ci * closing the transport instead of when opening it. 9862306a36Sopenharmony_ci * 9962306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 10062306a36Sopenharmony_ci */ 10162306a36Sopenharmony_ci HCI_QUIRK_RESET_ON_CLOSE, 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci /* When this quirk is set, the device is turned into a raw-only 10462306a36Sopenharmony_ci * device and it will stay in unconfigured state. 10562306a36Sopenharmony_ci * 10662306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 10762306a36Sopenharmony_ci */ 10862306a36Sopenharmony_ci HCI_QUIRK_RAW_DEVICE, 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci /* When this quirk is set, the buffer sizes reported by 11162306a36Sopenharmony_ci * HCI Read Buffer Size command are corrected if invalid. 11262306a36Sopenharmony_ci * 11362306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 11462306a36Sopenharmony_ci */ 11562306a36Sopenharmony_ci HCI_QUIRK_FIXUP_BUFFER_SIZE, 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci /* When this quirk is set, then a controller that does not 11862306a36Sopenharmony_ci * indicate support for Inquiry Result with RSSI is assumed to 11962306a36Sopenharmony_ci * support it anyway. Some early Bluetooth 1.2 controllers had 12062306a36Sopenharmony_ci * wrongly configured local features that will require forcing 12162306a36Sopenharmony_ci * them to enable this mode. Getting RSSI information with the 12262306a36Sopenharmony_ci * inquiry responses is preferred since it allows for a better 12362306a36Sopenharmony_ci * user experience. 12462306a36Sopenharmony_ci * 12562306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 12662306a36Sopenharmony_ci */ 12762306a36Sopenharmony_ci HCI_QUIRK_FIXUP_INQUIRY_MODE, 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci /* When this quirk is set, then the HCI Read Local Supported 13062306a36Sopenharmony_ci * Commands command is not supported. In general Bluetooth 1.2 13162306a36Sopenharmony_ci * and later controllers should support this command. However 13262306a36Sopenharmony_ci * some controllers indicate Bluetooth 1.2 support, but do 13362306a36Sopenharmony_ci * not support this command. 13462306a36Sopenharmony_ci * 13562306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 13662306a36Sopenharmony_ci */ 13762306a36Sopenharmony_ci HCI_QUIRK_BROKEN_LOCAL_COMMANDS, 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci /* When this quirk is set, then no stored link key handling 14062306a36Sopenharmony_ci * is performed. This is mainly due to the fact that the 14162306a36Sopenharmony_ci * HCI Delete Stored Link Key command is advertised, but 14262306a36Sopenharmony_ci * not supported. 14362306a36Sopenharmony_ci * 14462306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 14562306a36Sopenharmony_ci */ 14662306a36Sopenharmony_ci HCI_QUIRK_BROKEN_STORED_LINK_KEY, 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci /* When this quirk is set, an external configuration step 14962306a36Sopenharmony_ci * is required and will be indicated with the controller 15062306a36Sopenharmony_ci * configuration. 15162306a36Sopenharmony_ci * 15262306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 15362306a36Sopenharmony_ci * during the hdev->setup vendor callback. 15462306a36Sopenharmony_ci */ 15562306a36Sopenharmony_ci HCI_QUIRK_EXTERNAL_CONFIG, 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci /* When this quirk is set, the public Bluetooth address 15862306a36Sopenharmony_ci * initially reported by HCI Read BD Address command 15962306a36Sopenharmony_ci * is considered invalid. Controller configuration is 16062306a36Sopenharmony_ci * required before this device can be used. 16162306a36Sopenharmony_ci * 16262306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 16362306a36Sopenharmony_ci * during the hdev->setup vendor callback. 16462306a36Sopenharmony_ci */ 16562306a36Sopenharmony_ci HCI_QUIRK_INVALID_BDADDR, 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci /* When this quirk is set, the public Bluetooth address 16862306a36Sopenharmony_ci * initially reported by HCI Read BD Address command 16962306a36Sopenharmony_ci * is considered invalid. The public BD Address can be 17062306a36Sopenharmony_ci * specified in the fwnode property 'local-bd-address'. 17162306a36Sopenharmony_ci * If this property does not exist or is invalid controller 17262306a36Sopenharmony_ci * configuration is required before this device can be used. 17362306a36Sopenharmony_ci * 17462306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 17562306a36Sopenharmony_ci * during the hdev->setup vendor callback. 17662306a36Sopenharmony_ci */ 17762306a36Sopenharmony_ci HCI_QUIRK_USE_BDADDR_PROPERTY, 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci /* When this quirk is set, the duplicate filtering during 18062306a36Sopenharmony_ci * scanning is based on Bluetooth devices addresses. To allow 18162306a36Sopenharmony_ci * RSSI based updates, restart scanning if needed. 18262306a36Sopenharmony_ci * 18362306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 18462306a36Sopenharmony_ci * during the hdev->setup vendor callback. 18562306a36Sopenharmony_ci */ 18662306a36Sopenharmony_ci HCI_QUIRK_STRICT_DUPLICATE_FILTER, 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci /* When this quirk is set, LE scan and BR/EDR inquiry is done 18962306a36Sopenharmony_ci * simultaneously, otherwise it's interleaved. 19062306a36Sopenharmony_ci * 19162306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 19262306a36Sopenharmony_ci * during the hdev->setup vendor callback. 19362306a36Sopenharmony_ci */ 19462306a36Sopenharmony_ci HCI_QUIRK_SIMULTANEOUS_DISCOVERY, 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci /* When this quirk is set, the enabling of diagnostic mode is 19762306a36Sopenharmony_ci * not persistent over HCI Reset. Every time the controller 19862306a36Sopenharmony_ci * is brought up it needs to be reprogrammed. 19962306a36Sopenharmony_ci * 20062306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 20162306a36Sopenharmony_ci * during the hdev->setup vendor callback. 20262306a36Sopenharmony_ci */ 20362306a36Sopenharmony_ci HCI_QUIRK_NON_PERSISTENT_DIAG, 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci /* When this quirk is set, setup() would be run after every 20662306a36Sopenharmony_ci * open() and not just after the first open(). 20762306a36Sopenharmony_ci * 20862306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 20962306a36Sopenharmony_ci * during the hdev->setup vendor callback. 21062306a36Sopenharmony_ci * 21162306a36Sopenharmony_ci */ 21262306a36Sopenharmony_ci HCI_QUIRK_NON_PERSISTENT_SETUP, 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci /* When this quirk is set, wide band speech is supported by 21562306a36Sopenharmony_ci * the driver since no reliable mechanism exist to report 21662306a36Sopenharmony_ci * this from the hardware, a driver flag is use to convey 21762306a36Sopenharmony_ci * this support 21862306a36Sopenharmony_ci * 21962306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 22062306a36Sopenharmony_ci */ 22162306a36Sopenharmony_ci HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci /* When this quirk is set, the controller has validated that 22462306a36Sopenharmony_ci * LE states reported through the HCI_LE_READ_SUPPORTED_STATES are 22562306a36Sopenharmony_ci * valid. This mechanism is necessary as many controllers have 22662306a36Sopenharmony_ci * been seen has having trouble initiating a connectable 22762306a36Sopenharmony_ci * advertisement despite the state combination being reported as 22862306a36Sopenharmony_ci * supported. 22962306a36Sopenharmony_ci */ 23062306a36Sopenharmony_ci HCI_QUIRK_VALID_LE_STATES, 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci /* When this quirk is set, then erroneous data reporting 23362306a36Sopenharmony_ci * is ignored. This is mainly due to the fact that the HCI 23462306a36Sopenharmony_ci * Read Default Erroneous Data Reporting command is advertised, 23562306a36Sopenharmony_ci * but not supported; these controllers often reply with unknown 23662306a36Sopenharmony_ci * command and tend to lock up randomly. Needing a hard reset. 23762306a36Sopenharmony_ci * 23862306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 23962306a36Sopenharmony_ci * during the hdev->setup vendor callback. 24062306a36Sopenharmony_ci */ 24162306a36Sopenharmony_ci HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ci /* 24462306a36Sopenharmony_ci * When this quirk is set, then the hci_suspend_notifier is not 24562306a36Sopenharmony_ci * registered. This is intended for devices which drop completely 24662306a36Sopenharmony_ci * from the bus on system-suspend and which will show up as a new 24762306a36Sopenharmony_ci * HCI after resume. 24862306a36Sopenharmony_ci */ 24962306a36Sopenharmony_ci HCI_QUIRK_NO_SUSPEND_NOTIFIER, 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci /* 25262306a36Sopenharmony_ci * When this quirk is set, LE tx power is not queried on startup 25362306a36Sopenharmony_ci * and the min/max tx power values default to HCI_TX_POWER_INVALID. 25462306a36Sopenharmony_ci * 25562306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 25662306a36Sopenharmony_ci * during the hdev->setup vendor callback. 25762306a36Sopenharmony_ci */ 25862306a36Sopenharmony_ci HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER, 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_ci /* When this quirk is set, HCI_OP_SET_EVENT_FLT requests with 26162306a36Sopenharmony_ci * HCI_FLT_CLEAR_ALL are ignored and event filtering is 26262306a36Sopenharmony_ci * completely avoided. A subset of the CSR controller 26362306a36Sopenharmony_ci * clones struggle with this and instantly lock up. 26462306a36Sopenharmony_ci * 26562306a36Sopenharmony_ci * Note that devices using this must (separately) disable 26662306a36Sopenharmony_ci * runtime suspend, because event filtering takes place there. 26762306a36Sopenharmony_ci */ 26862306a36Sopenharmony_ci HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci /* 27162306a36Sopenharmony_ci * When this quirk is set, disables the use of 27262306a36Sopenharmony_ci * HCI_OP_ENHANCED_SETUP_SYNC_CONN command to setup SCO connections. 27362306a36Sopenharmony_ci * 27462306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 27562306a36Sopenharmony_ci * during the hdev->setup vendor callback. 27662306a36Sopenharmony_ci */ 27762306a36Sopenharmony_ci HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN, 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci /* 28062306a36Sopenharmony_ci * When this quirk is set, the HCI_OP_LE_SET_EXT_SCAN_ENABLE command is 28162306a36Sopenharmony_ci * disabled. This is required for some Broadcom controllers which 28262306a36Sopenharmony_ci * erroneously claim to support extended scanning. 28362306a36Sopenharmony_ci * 28462306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 28562306a36Sopenharmony_ci * during the hdev->setup vendor callback. 28662306a36Sopenharmony_ci */ 28762306a36Sopenharmony_ci HCI_QUIRK_BROKEN_EXT_SCAN, 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci /* 29062306a36Sopenharmony_ci * When this quirk is set, the HCI_OP_GET_MWS_TRANSPORT_CONFIG command is 29162306a36Sopenharmony_ci * disabled. This is required for some Broadcom controllers which 29262306a36Sopenharmony_ci * erroneously claim to support MWS Transport Layer Configuration. 29362306a36Sopenharmony_ci * 29462306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 29562306a36Sopenharmony_ci * during the hdev->setup vendor callback. 29662306a36Sopenharmony_ci */ 29762306a36Sopenharmony_ci HCI_QUIRK_BROKEN_MWS_TRANSPORT_CONFIG, 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci /* When this quirk is set, max_page for local extended features 30062306a36Sopenharmony_ci * is set to 1, even if controller reports higher number. Some 30162306a36Sopenharmony_ci * controllers (e.g. RTL8723CS) report more pages, but they 30262306a36Sopenharmony_ci * don't actually support features declared there. 30362306a36Sopenharmony_ci */ 30462306a36Sopenharmony_ci HCI_QUIRK_BROKEN_LOCAL_EXT_FEATURES_PAGE_2, 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci /* 30762306a36Sopenharmony_ci * When this quirk is set, the HCI_OP_LE_SET_RPA_TIMEOUT command is 30862306a36Sopenharmony_ci * skipped during initialization. This is required for the Actions 30962306a36Sopenharmony_ci * Semiconductor ATS2851 based controllers, which erroneously claims 31062306a36Sopenharmony_ci * to support it. 31162306a36Sopenharmony_ci */ 31262306a36Sopenharmony_ci HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT, 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci /* When this quirk is set, MSFT extension monitor tracking by 31562306a36Sopenharmony_ci * address filter is supported. Since tracking quantity of each 31662306a36Sopenharmony_ci * pattern is limited, this feature supports tracking multiple 31762306a36Sopenharmony_ci * devices concurrently if controller supports multiple 31862306a36Sopenharmony_ci * address filters. 31962306a36Sopenharmony_ci * 32062306a36Sopenharmony_ci * This quirk must be set before hci_register_dev is called. 32162306a36Sopenharmony_ci */ 32262306a36Sopenharmony_ci HCI_QUIRK_USE_MSFT_EXT_ADDRESS_FILTER, 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ci /* 32562306a36Sopenharmony_ci * When this quirk is set, LE Coded PHY shall not be used. This is 32662306a36Sopenharmony_ci * required for some Intel controllers which erroneously claim to 32762306a36Sopenharmony_ci * support it but it causes problems with extended scanning. 32862306a36Sopenharmony_ci * 32962306a36Sopenharmony_ci * This quirk can be set before hci_register_dev is called or 33062306a36Sopenharmony_ci * during the hdev->setup vendor callback. 33162306a36Sopenharmony_ci */ 33262306a36Sopenharmony_ci HCI_QUIRK_BROKEN_LE_CODED, 33362306a36Sopenharmony_ci}; 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci/* HCI device flags */ 33662306a36Sopenharmony_cienum { 33762306a36Sopenharmony_ci HCI_UP, 33862306a36Sopenharmony_ci HCI_INIT, 33962306a36Sopenharmony_ci HCI_RUNNING, 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci HCI_PSCAN, 34262306a36Sopenharmony_ci HCI_ISCAN, 34362306a36Sopenharmony_ci HCI_AUTH, 34462306a36Sopenharmony_ci HCI_ENCRYPT, 34562306a36Sopenharmony_ci HCI_INQUIRY, 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci HCI_RAW, 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ci HCI_RESET, 35062306a36Sopenharmony_ci}; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci/* HCI socket flags */ 35362306a36Sopenharmony_cienum { 35462306a36Sopenharmony_ci HCI_SOCK_TRUSTED, 35562306a36Sopenharmony_ci HCI_MGMT_INDEX_EVENTS, 35662306a36Sopenharmony_ci HCI_MGMT_UNCONF_INDEX_EVENTS, 35762306a36Sopenharmony_ci HCI_MGMT_EXT_INDEX_EVENTS, 35862306a36Sopenharmony_ci HCI_MGMT_EXT_INFO_EVENTS, 35962306a36Sopenharmony_ci HCI_MGMT_OPTION_EVENTS, 36062306a36Sopenharmony_ci HCI_MGMT_SETTING_EVENTS, 36162306a36Sopenharmony_ci HCI_MGMT_DEV_CLASS_EVENTS, 36262306a36Sopenharmony_ci HCI_MGMT_LOCAL_NAME_EVENTS, 36362306a36Sopenharmony_ci HCI_MGMT_OOB_DATA_EVENTS, 36462306a36Sopenharmony_ci HCI_MGMT_EXP_FEATURE_EVENTS, 36562306a36Sopenharmony_ci}; 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ci/* 36862306a36Sopenharmony_ci * BR/EDR and/or LE controller flags: the flags defined here should represent 36962306a36Sopenharmony_ci * states from the controller. 37062306a36Sopenharmony_ci */ 37162306a36Sopenharmony_cienum { 37262306a36Sopenharmony_ci HCI_SETUP, 37362306a36Sopenharmony_ci HCI_CONFIG, 37462306a36Sopenharmony_ci HCI_DEBUGFS_CREATED, 37562306a36Sopenharmony_ci HCI_AUTO_OFF, 37662306a36Sopenharmony_ci HCI_RFKILLED, 37762306a36Sopenharmony_ci HCI_MGMT, 37862306a36Sopenharmony_ci HCI_BONDABLE, 37962306a36Sopenharmony_ci HCI_SERVICE_CACHE, 38062306a36Sopenharmony_ci HCI_KEEP_DEBUG_KEYS, 38162306a36Sopenharmony_ci HCI_USE_DEBUG_KEYS, 38262306a36Sopenharmony_ci HCI_UNREGISTER, 38362306a36Sopenharmony_ci HCI_UNCONFIGURED, 38462306a36Sopenharmony_ci HCI_USER_CHANNEL, 38562306a36Sopenharmony_ci HCI_EXT_CONFIGURED, 38662306a36Sopenharmony_ci HCI_LE_ADV, 38762306a36Sopenharmony_ci HCI_LE_PER_ADV, 38862306a36Sopenharmony_ci HCI_LE_SCAN, 38962306a36Sopenharmony_ci HCI_SSP_ENABLED, 39062306a36Sopenharmony_ci HCI_SC_ENABLED, 39162306a36Sopenharmony_ci HCI_SC_ONLY, 39262306a36Sopenharmony_ci HCI_PRIVACY, 39362306a36Sopenharmony_ci HCI_LIMITED_PRIVACY, 39462306a36Sopenharmony_ci HCI_RPA_EXPIRED, 39562306a36Sopenharmony_ci HCI_RPA_RESOLVING, 39662306a36Sopenharmony_ci HCI_LE_ENABLED, 39762306a36Sopenharmony_ci HCI_ADVERTISING, 39862306a36Sopenharmony_ci HCI_ADVERTISING_CONNECTABLE, 39962306a36Sopenharmony_ci HCI_CONNECTABLE, 40062306a36Sopenharmony_ci HCI_DISCOVERABLE, 40162306a36Sopenharmony_ci HCI_LIMITED_DISCOVERABLE, 40262306a36Sopenharmony_ci HCI_LINK_SECURITY, 40362306a36Sopenharmony_ci HCI_PERIODIC_INQ, 40462306a36Sopenharmony_ci HCI_FAST_CONNECTABLE, 40562306a36Sopenharmony_ci HCI_BREDR_ENABLED, 40662306a36Sopenharmony_ci HCI_LE_SCAN_INTERRUPTED, 40762306a36Sopenharmony_ci HCI_WIDEBAND_SPEECH_ENABLED, 40862306a36Sopenharmony_ci HCI_EVENT_FILTER_CONFIGURED, 40962306a36Sopenharmony_ci HCI_PA_SYNC, 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci HCI_DUT_MODE, 41262306a36Sopenharmony_ci HCI_VENDOR_DIAG, 41362306a36Sopenharmony_ci HCI_FORCE_BREDR_SMP, 41462306a36Sopenharmony_ci HCI_FORCE_STATIC_ADDR, 41562306a36Sopenharmony_ci HCI_LL_RPA_RESOLUTION, 41662306a36Sopenharmony_ci HCI_ENABLE_LL_PRIVACY, 41762306a36Sopenharmony_ci HCI_CMD_PENDING, 41862306a36Sopenharmony_ci HCI_FORCE_NO_MITM, 41962306a36Sopenharmony_ci HCI_QUALITY_REPORT, 42062306a36Sopenharmony_ci HCI_OFFLOAD_CODECS_ENABLED, 42162306a36Sopenharmony_ci HCI_LE_SIMULTANEOUS_ROLES, 42262306a36Sopenharmony_ci HCI_CMD_DRAIN_WORKQUEUE, 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci HCI_MESH_EXPERIMENTAL, 42562306a36Sopenharmony_ci HCI_MESH, 42662306a36Sopenharmony_ci HCI_MESH_SENDING, 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci __HCI_NUM_FLAGS, 42962306a36Sopenharmony_ci}; 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_ci/* HCI timeouts */ 43262306a36Sopenharmony_ci#define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */ 43362306a36Sopenharmony_ci#define HCI_PAIRING_TIMEOUT msecs_to_jiffies(60000) /* 60 seconds */ 43462306a36Sopenharmony_ci#define HCI_INIT_TIMEOUT msecs_to_jiffies(10000) /* 10 seconds */ 43562306a36Sopenharmony_ci#define HCI_CMD_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */ 43662306a36Sopenharmony_ci#define HCI_NCMD_TIMEOUT msecs_to_jiffies(4000) /* 4 seconds */ 43762306a36Sopenharmony_ci#define HCI_ACL_TX_TIMEOUT msecs_to_jiffies(45000) /* 45 seconds */ 43862306a36Sopenharmony_ci#define HCI_AUTO_OFF_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */ 43962306a36Sopenharmony_ci#define HCI_LE_CONN_TIMEOUT msecs_to_jiffies(20000) /* 20 seconds */ 44062306a36Sopenharmony_ci#define HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(4000) /* 4 seconds */ 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ci/* HCI data types */ 44362306a36Sopenharmony_ci#define HCI_COMMAND_PKT 0x01 44462306a36Sopenharmony_ci#define HCI_ACLDATA_PKT 0x02 44562306a36Sopenharmony_ci#define HCI_SCODATA_PKT 0x03 44662306a36Sopenharmony_ci#define HCI_EVENT_PKT 0x04 44762306a36Sopenharmony_ci#define HCI_ISODATA_PKT 0x05 44862306a36Sopenharmony_ci#define HCI_DIAG_PKT 0xf0 44962306a36Sopenharmony_ci#define HCI_VENDOR_PKT 0xff 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_ci/* HCI packet types */ 45262306a36Sopenharmony_ci#define HCI_DM1 0x0008 45362306a36Sopenharmony_ci#define HCI_DM3 0x0400 45462306a36Sopenharmony_ci#define HCI_DM5 0x4000 45562306a36Sopenharmony_ci#define HCI_DH1 0x0010 45662306a36Sopenharmony_ci#define HCI_DH3 0x0800 45762306a36Sopenharmony_ci#define HCI_DH5 0x8000 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_ci/* HCI packet types inverted masks */ 46062306a36Sopenharmony_ci#define HCI_2DH1 0x0002 46162306a36Sopenharmony_ci#define HCI_3DH1 0x0004 46262306a36Sopenharmony_ci#define HCI_2DH3 0x0100 46362306a36Sopenharmony_ci#define HCI_3DH3 0x0200 46462306a36Sopenharmony_ci#define HCI_2DH5 0x1000 46562306a36Sopenharmony_ci#define HCI_3DH5 0x2000 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci#define HCI_HV1 0x0020 46862306a36Sopenharmony_ci#define HCI_HV2 0x0040 46962306a36Sopenharmony_ci#define HCI_HV3 0x0080 47062306a36Sopenharmony_ci 47162306a36Sopenharmony_ci#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3) 47262306a36Sopenharmony_ci#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK) 47362306a36Sopenharmony_ci 47462306a36Sopenharmony_ci/* eSCO packet types */ 47562306a36Sopenharmony_ci#define ESCO_HV1 0x0001 47662306a36Sopenharmony_ci#define ESCO_HV2 0x0002 47762306a36Sopenharmony_ci#define ESCO_HV3 0x0004 47862306a36Sopenharmony_ci#define ESCO_EV3 0x0008 47962306a36Sopenharmony_ci#define ESCO_EV4 0x0010 48062306a36Sopenharmony_ci#define ESCO_EV5 0x0020 48162306a36Sopenharmony_ci#define ESCO_2EV3 0x0040 48262306a36Sopenharmony_ci#define ESCO_3EV3 0x0080 48362306a36Sopenharmony_ci#define ESCO_2EV5 0x0100 48462306a36Sopenharmony_ci#define ESCO_3EV5 0x0200 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_ci#define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3) 48762306a36Sopenharmony_ci#define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5) 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_ci/* ACL flags */ 49062306a36Sopenharmony_ci#define ACL_START_NO_FLUSH 0x00 49162306a36Sopenharmony_ci#define ACL_CONT 0x01 49262306a36Sopenharmony_ci#define ACL_START 0x02 49362306a36Sopenharmony_ci#define ACL_COMPLETE 0x03 49462306a36Sopenharmony_ci#define ACL_ACTIVE_BCAST 0x04 49562306a36Sopenharmony_ci#define ACL_PICO_BCAST 0x08 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_ci/* ISO PB flags */ 49862306a36Sopenharmony_ci#define ISO_START 0x00 49962306a36Sopenharmony_ci#define ISO_CONT 0x01 50062306a36Sopenharmony_ci#define ISO_SINGLE 0x02 50162306a36Sopenharmony_ci#define ISO_END 0x03 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_ci/* ISO TS flags */ 50462306a36Sopenharmony_ci#define ISO_TS 0x01 50562306a36Sopenharmony_ci 50662306a36Sopenharmony_ci/* Baseband links */ 50762306a36Sopenharmony_ci#define SCO_LINK 0x00 50862306a36Sopenharmony_ci#define ACL_LINK 0x01 50962306a36Sopenharmony_ci#define ESCO_LINK 0x02 51062306a36Sopenharmony_ci/* Low Energy links do not have defined link type. Use invented one */ 51162306a36Sopenharmony_ci#define LE_LINK 0x80 51262306a36Sopenharmony_ci#define AMP_LINK 0x81 51362306a36Sopenharmony_ci#define ISO_LINK 0x82 51462306a36Sopenharmony_ci#define INVALID_LINK 0xff 51562306a36Sopenharmony_ci 51662306a36Sopenharmony_ci/* LMP features */ 51762306a36Sopenharmony_ci#define LMP_3SLOT 0x01 51862306a36Sopenharmony_ci#define LMP_5SLOT 0x02 51962306a36Sopenharmony_ci#define LMP_ENCRYPT 0x04 52062306a36Sopenharmony_ci#define LMP_SOFFSET 0x08 52162306a36Sopenharmony_ci#define LMP_TACCURACY 0x10 52262306a36Sopenharmony_ci#define LMP_RSWITCH 0x20 52362306a36Sopenharmony_ci#define LMP_HOLD 0x40 52462306a36Sopenharmony_ci#define LMP_SNIFF 0x80 52562306a36Sopenharmony_ci 52662306a36Sopenharmony_ci#define LMP_PARK 0x01 52762306a36Sopenharmony_ci#define LMP_RSSI 0x02 52862306a36Sopenharmony_ci#define LMP_QUALITY 0x04 52962306a36Sopenharmony_ci#define LMP_SCO 0x08 53062306a36Sopenharmony_ci#define LMP_HV2 0x10 53162306a36Sopenharmony_ci#define LMP_HV3 0x20 53262306a36Sopenharmony_ci#define LMP_ULAW 0x40 53362306a36Sopenharmony_ci#define LMP_ALAW 0x80 53462306a36Sopenharmony_ci 53562306a36Sopenharmony_ci#define LMP_CVSD 0x01 53662306a36Sopenharmony_ci#define LMP_PSCHEME 0x02 53762306a36Sopenharmony_ci#define LMP_PCONTROL 0x04 53862306a36Sopenharmony_ci#define LMP_TRANSPARENT 0x08 53962306a36Sopenharmony_ci 54062306a36Sopenharmony_ci#define LMP_EDR_2M 0x02 54162306a36Sopenharmony_ci#define LMP_EDR_3M 0x04 54262306a36Sopenharmony_ci#define LMP_RSSI_INQ 0x40 54362306a36Sopenharmony_ci#define LMP_ESCO 0x80 54462306a36Sopenharmony_ci 54562306a36Sopenharmony_ci#define LMP_EV4 0x01 54662306a36Sopenharmony_ci#define LMP_EV5 0x02 54762306a36Sopenharmony_ci#define LMP_NO_BREDR 0x20 54862306a36Sopenharmony_ci#define LMP_LE 0x40 54962306a36Sopenharmony_ci#define LMP_EDR_3SLOT 0x80 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_ci#define LMP_EDR_5SLOT 0x01 55262306a36Sopenharmony_ci#define LMP_SNIFF_SUBR 0x02 55362306a36Sopenharmony_ci#define LMP_PAUSE_ENC 0x04 55462306a36Sopenharmony_ci#define LMP_EDR_ESCO_2M 0x20 55562306a36Sopenharmony_ci#define LMP_EDR_ESCO_3M 0x40 55662306a36Sopenharmony_ci#define LMP_EDR_3S_ESCO 0x80 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ci#define LMP_EXT_INQ 0x01 55962306a36Sopenharmony_ci#define LMP_SIMUL_LE_BR 0x02 56062306a36Sopenharmony_ci#define LMP_SIMPLE_PAIR 0x08 56162306a36Sopenharmony_ci#define LMP_ERR_DATA_REPORTING 0x20 56262306a36Sopenharmony_ci#define LMP_NO_FLUSH 0x40 56362306a36Sopenharmony_ci 56462306a36Sopenharmony_ci#define LMP_LSTO 0x01 56562306a36Sopenharmony_ci#define LMP_INQ_TX_PWR 0x02 56662306a36Sopenharmony_ci#define LMP_EXTFEATURES 0x80 56762306a36Sopenharmony_ci 56862306a36Sopenharmony_ci/* Extended LMP features */ 56962306a36Sopenharmony_ci#define LMP_CPB_CENTRAL 0x01 57062306a36Sopenharmony_ci#define LMP_CPB_PERIPHERAL 0x02 57162306a36Sopenharmony_ci#define LMP_SYNC_TRAIN 0x04 57262306a36Sopenharmony_ci#define LMP_SYNC_SCAN 0x08 57362306a36Sopenharmony_ci 57462306a36Sopenharmony_ci#define LMP_SC 0x01 57562306a36Sopenharmony_ci#define LMP_PING 0x02 57662306a36Sopenharmony_ci 57762306a36Sopenharmony_ci/* Host features */ 57862306a36Sopenharmony_ci#define LMP_HOST_SSP 0x01 57962306a36Sopenharmony_ci#define LMP_HOST_LE 0x02 58062306a36Sopenharmony_ci#define LMP_HOST_LE_BREDR 0x04 58162306a36Sopenharmony_ci#define LMP_HOST_SC 0x08 58262306a36Sopenharmony_ci 58362306a36Sopenharmony_ci/* LE features */ 58462306a36Sopenharmony_ci#define HCI_LE_ENCRYPTION 0x01 58562306a36Sopenharmony_ci#define HCI_LE_CONN_PARAM_REQ_PROC 0x02 58662306a36Sopenharmony_ci#define HCI_LE_PERIPHERAL_FEATURES 0x08 58762306a36Sopenharmony_ci#define HCI_LE_PING 0x10 58862306a36Sopenharmony_ci#define HCI_LE_DATA_LEN_EXT 0x20 58962306a36Sopenharmony_ci#define HCI_LE_LL_PRIVACY 0x40 59062306a36Sopenharmony_ci#define HCI_LE_EXT_SCAN_POLICY 0x80 59162306a36Sopenharmony_ci#define HCI_LE_PHY_2M 0x01 59262306a36Sopenharmony_ci#define HCI_LE_PHY_CODED 0x08 59362306a36Sopenharmony_ci#define HCI_LE_EXT_ADV 0x10 59462306a36Sopenharmony_ci#define HCI_LE_PERIODIC_ADV 0x20 59562306a36Sopenharmony_ci#define HCI_LE_CHAN_SEL_ALG2 0x40 59662306a36Sopenharmony_ci#define HCI_LE_CIS_CENTRAL 0x10 59762306a36Sopenharmony_ci#define HCI_LE_CIS_PERIPHERAL 0x20 59862306a36Sopenharmony_ci#define HCI_LE_ISO_BROADCASTER 0x40 59962306a36Sopenharmony_ci#define HCI_LE_ISO_SYNC_RECEIVER 0x80 60062306a36Sopenharmony_ci 60162306a36Sopenharmony_ci/* Connection modes */ 60262306a36Sopenharmony_ci#define HCI_CM_ACTIVE 0x0000 60362306a36Sopenharmony_ci#define HCI_CM_HOLD 0x0001 60462306a36Sopenharmony_ci#define HCI_CM_SNIFF 0x0002 60562306a36Sopenharmony_ci#define HCI_CM_PARK 0x0003 60662306a36Sopenharmony_ci 60762306a36Sopenharmony_ci/* Link policies */ 60862306a36Sopenharmony_ci#define HCI_LP_RSWITCH 0x0001 60962306a36Sopenharmony_ci#define HCI_LP_HOLD 0x0002 61062306a36Sopenharmony_ci#define HCI_LP_SNIFF 0x0004 61162306a36Sopenharmony_ci#define HCI_LP_PARK 0x0008 61262306a36Sopenharmony_ci 61362306a36Sopenharmony_ci/* Link modes */ 61462306a36Sopenharmony_ci#define HCI_LM_ACCEPT 0x8000 61562306a36Sopenharmony_ci#define HCI_LM_MASTER 0x0001 61662306a36Sopenharmony_ci#define HCI_LM_AUTH 0x0002 61762306a36Sopenharmony_ci#define HCI_LM_ENCRYPT 0x0004 61862306a36Sopenharmony_ci#define HCI_LM_TRUSTED 0x0008 61962306a36Sopenharmony_ci#define HCI_LM_RELIABLE 0x0010 62062306a36Sopenharmony_ci#define HCI_LM_SECURE 0x0020 62162306a36Sopenharmony_ci#define HCI_LM_FIPS 0x0040 62262306a36Sopenharmony_ci 62362306a36Sopenharmony_ci/* Authentication types */ 62462306a36Sopenharmony_ci#define HCI_AT_NO_BONDING 0x00 62562306a36Sopenharmony_ci#define HCI_AT_NO_BONDING_MITM 0x01 62662306a36Sopenharmony_ci#define HCI_AT_DEDICATED_BONDING 0x02 62762306a36Sopenharmony_ci#define HCI_AT_DEDICATED_BONDING_MITM 0x03 62862306a36Sopenharmony_ci#define HCI_AT_GENERAL_BONDING 0x04 62962306a36Sopenharmony_ci#define HCI_AT_GENERAL_BONDING_MITM 0x05 63062306a36Sopenharmony_ci 63162306a36Sopenharmony_ci/* I/O capabilities */ 63262306a36Sopenharmony_ci#define HCI_IO_DISPLAY_ONLY 0x00 63362306a36Sopenharmony_ci#define HCI_IO_DISPLAY_YESNO 0x01 63462306a36Sopenharmony_ci#define HCI_IO_KEYBOARD_ONLY 0x02 63562306a36Sopenharmony_ci#define HCI_IO_NO_INPUT_OUTPUT 0x03 63662306a36Sopenharmony_ci 63762306a36Sopenharmony_ci/* Link Key types */ 63862306a36Sopenharmony_ci#define HCI_LK_COMBINATION 0x00 63962306a36Sopenharmony_ci#define HCI_LK_LOCAL_UNIT 0x01 64062306a36Sopenharmony_ci#define HCI_LK_REMOTE_UNIT 0x02 64162306a36Sopenharmony_ci#define HCI_LK_DEBUG_COMBINATION 0x03 64262306a36Sopenharmony_ci#define HCI_LK_UNAUTH_COMBINATION_P192 0x04 64362306a36Sopenharmony_ci#define HCI_LK_AUTH_COMBINATION_P192 0x05 64462306a36Sopenharmony_ci#define HCI_LK_CHANGED_COMBINATION 0x06 64562306a36Sopenharmony_ci#define HCI_LK_UNAUTH_COMBINATION_P256 0x07 64662306a36Sopenharmony_ci#define HCI_LK_AUTH_COMBINATION_P256 0x08 64762306a36Sopenharmony_ci 64862306a36Sopenharmony_ci/* ---- HCI Error Codes ---- */ 64962306a36Sopenharmony_ci#define HCI_ERROR_UNKNOWN_CONN_ID 0x02 65062306a36Sopenharmony_ci#define HCI_ERROR_AUTH_FAILURE 0x05 65162306a36Sopenharmony_ci#define HCI_ERROR_PIN_OR_KEY_MISSING 0x06 65262306a36Sopenharmony_ci#define HCI_ERROR_MEMORY_EXCEEDED 0x07 65362306a36Sopenharmony_ci#define HCI_ERROR_CONNECTION_TIMEOUT 0x08 65462306a36Sopenharmony_ci#define HCI_ERROR_REJ_LIMITED_RESOURCES 0x0d 65562306a36Sopenharmony_ci#define HCI_ERROR_REJ_BAD_ADDR 0x0f 65662306a36Sopenharmony_ci#define HCI_ERROR_INVALID_PARAMETERS 0x12 65762306a36Sopenharmony_ci#define HCI_ERROR_REMOTE_USER_TERM 0x13 65862306a36Sopenharmony_ci#define HCI_ERROR_REMOTE_LOW_RESOURCES 0x14 65962306a36Sopenharmony_ci#define HCI_ERROR_REMOTE_POWER_OFF 0x15 66062306a36Sopenharmony_ci#define HCI_ERROR_LOCAL_HOST_TERM 0x16 66162306a36Sopenharmony_ci#define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18 66262306a36Sopenharmony_ci#define HCI_ERROR_INVALID_LL_PARAMS 0x1e 66362306a36Sopenharmony_ci#define HCI_ERROR_UNSPECIFIED 0x1f 66462306a36Sopenharmony_ci#define HCI_ERROR_ADVERTISING_TIMEOUT 0x3c 66562306a36Sopenharmony_ci#define HCI_ERROR_CANCELLED_BY_HOST 0x44 66662306a36Sopenharmony_ci 66762306a36Sopenharmony_ci/* Flow control modes */ 66862306a36Sopenharmony_ci#define HCI_FLOW_CTL_MODE_PACKET_BASED 0x00 66962306a36Sopenharmony_ci#define HCI_FLOW_CTL_MODE_BLOCK_BASED 0x01 67062306a36Sopenharmony_ci 67162306a36Sopenharmony_ci/* The core spec defines 127 as the "not available" value */ 67262306a36Sopenharmony_ci#define HCI_TX_POWER_INVALID 127 67362306a36Sopenharmony_ci#define HCI_RSSI_INVALID 127 67462306a36Sopenharmony_ci 67562306a36Sopenharmony_ci#define HCI_SYNC_HANDLE_INVALID 0xffff 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci#define HCI_ROLE_MASTER 0x00 67862306a36Sopenharmony_ci#define HCI_ROLE_SLAVE 0x01 67962306a36Sopenharmony_ci 68062306a36Sopenharmony_ci/* Extended Inquiry Response field types */ 68162306a36Sopenharmony_ci#define EIR_FLAGS 0x01 /* flags */ 68262306a36Sopenharmony_ci#define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */ 68362306a36Sopenharmony_ci#define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */ 68462306a36Sopenharmony_ci#define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */ 68562306a36Sopenharmony_ci#define EIR_UUID32_ALL 0x05 /* 32-bit UUID, all listed */ 68662306a36Sopenharmony_ci#define EIR_UUID128_SOME 0x06 /* 128-bit UUID, more available */ 68762306a36Sopenharmony_ci#define EIR_UUID128_ALL 0x07 /* 128-bit UUID, all listed */ 68862306a36Sopenharmony_ci#define EIR_NAME_SHORT 0x08 /* shortened local name */ 68962306a36Sopenharmony_ci#define EIR_NAME_COMPLETE 0x09 /* complete local name */ 69062306a36Sopenharmony_ci#define EIR_TX_POWER 0x0A /* transmit power level */ 69162306a36Sopenharmony_ci#define EIR_CLASS_OF_DEV 0x0D /* Class of Device */ 69262306a36Sopenharmony_ci#define EIR_SSP_HASH_C192 0x0E /* Simple Pairing Hash C-192 */ 69362306a36Sopenharmony_ci#define EIR_SSP_RAND_R192 0x0F /* Simple Pairing Randomizer R-192 */ 69462306a36Sopenharmony_ci#define EIR_DEVICE_ID 0x10 /* device ID */ 69562306a36Sopenharmony_ci#define EIR_APPEARANCE 0x19 /* Device appearance */ 69662306a36Sopenharmony_ci#define EIR_SERVICE_DATA 0x16 /* Service Data */ 69762306a36Sopenharmony_ci#define EIR_LE_BDADDR 0x1B /* LE Bluetooth device address */ 69862306a36Sopenharmony_ci#define EIR_LE_ROLE 0x1C /* LE role */ 69962306a36Sopenharmony_ci#define EIR_SSP_HASH_C256 0x1D /* Simple Pairing Hash C-256 */ 70062306a36Sopenharmony_ci#define EIR_SSP_RAND_R256 0x1E /* Simple Pairing Rand R-256 */ 70162306a36Sopenharmony_ci#define EIR_LE_SC_CONFIRM 0x22 /* LE SC Confirmation Value */ 70262306a36Sopenharmony_ci#define EIR_LE_SC_RANDOM 0x23 /* LE SC Random Value */ 70362306a36Sopenharmony_ci 70462306a36Sopenharmony_ci/* Low Energy Advertising Flags */ 70562306a36Sopenharmony_ci#define LE_AD_LIMITED 0x01 /* Limited Discoverable */ 70662306a36Sopenharmony_ci#define LE_AD_GENERAL 0x02 /* General Discoverable */ 70762306a36Sopenharmony_ci#define LE_AD_NO_BREDR 0x04 /* BR/EDR not supported */ 70862306a36Sopenharmony_ci#define LE_AD_SIM_LE_BREDR_CTRL 0x08 /* Simultaneous LE & BR/EDR Controller */ 70962306a36Sopenharmony_ci#define LE_AD_SIM_LE_BREDR_HOST 0x10 /* Simultaneous LE & BR/EDR Host */ 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci/* ----- HCI Commands ---- */ 71262306a36Sopenharmony_ci#define HCI_OP_NOP 0x0000 71362306a36Sopenharmony_ci 71462306a36Sopenharmony_ci#define HCI_OP_INQUIRY 0x0401 71562306a36Sopenharmony_cistruct hci_cp_inquiry { 71662306a36Sopenharmony_ci __u8 lap[3]; 71762306a36Sopenharmony_ci __u8 length; 71862306a36Sopenharmony_ci __u8 num_rsp; 71962306a36Sopenharmony_ci} __packed; 72062306a36Sopenharmony_ci 72162306a36Sopenharmony_ci#define HCI_OP_INQUIRY_CANCEL 0x0402 72262306a36Sopenharmony_ci 72362306a36Sopenharmony_ci#define HCI_OP_PERIODIC_INQ 0x0403 72462306a36Sopenharmony_ci 72562306a36Sopenharmony_ci#define HCI_OP_EXIT_PERIODIC_INQ 0x0404 72662306a36Sopenharmony_ci 72762306a36Sopenharmony_ci#define HCI_OP_CREATE_CONN 0x0405 72862306a36Sopenharmony_cistruct hci_cp_create_conn { 72962306a36Sopenharmony_ci bdaddr_t bdaddr; 73062306a36Sopenharmony_ci __le16 pkt_type; 73162306a36Sopenharmony_ci __u8 pscan_rep_mode; 73262306a36Sopenharmony_ci __u8 pscan_mode; 73362306a36Sopenharmony_ci __le16 clock_offset; 73462306a36Sopenharmony_ci __u8 role_switch; 73562306a36Sopenharmony_ci} __packed; 73662306a36Sopenharmony_ci 73762306a36Sopenharmony_ci#define HCI_OP_DISCONNECT 0x0406 73862306a36Sopenharmony_cistruct hci_cp_disconnect { 73962306a36Sopenharmony_ci __le16 handle; 74062306a36Sopenharmony_ci __u8 reason; 74162306a36Sopenharmony_ci} __packed; 74262306a36Sopenharmony_ci 74362306a36Sopenharmony_ci#define HCI_OP_ADD_SCO 0x0407 74462306a36Sopenharmony_cistruct hci_cp_add_sco { 74562306a36Sopenharmony_ci __le16 handle; 74662306a36Sopenharmony_ci __le16 pkt_type; 74762306a36Sopenharmony_ci} __packed; 74862306a36Sopenharmony_ci 74962306a36Sopenharmony_ci#define HCI_OP_CREATE_CONN_CANCEL 0x0408 75062306a36Sopenharmony_cistruct hci_cp_create_conn_cancel { 75162306a36Sopenharmony_ci bdaddr_t bdaddr; 75262306a36Sopenharmony_ci} __packed; 75362306a36Sopenharmony_ci 75462306a36Sopenharmony_ci#define HCI_OP_ACCEPT_CONN_REQ 0x0409 75562306a36Sopenharmony_cistruct hci_cp_accept_conn_req { 75662306a36Sopenharmony_ci bdaddr_t bdaddr; 75762306a36Sopenharmony_ci __u8 role; 75862306a36Sopenharmony_ci} __packed; 75962306a36Sopenharmony_ci 76062306a36Sopenharmony_ci#define HCI_OP_REJECT_CONN_REQ 0x040a 76162306a36Sopenharmony_cistruct hci_cp_reject_conn_req { 76262306a36Sopenharmony_ci bdaddr_t bdaddr; 76362306a36Sopenharmony_ci __u8 reason; 76462306a36Sopenharmony_ci} __packed; 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_ci#define HCI_OP_LINK_KEY_REPLY 0x040b 76762306a36Sopenharmony_cistruct hci_cp_link_key_reply { 76862306a36Sopenharmony_ci bdaddr_t bdaddr; 76962306a36Sopenharmony_ci __u8 link_key[HCI_LINK_KEY_SIZE]; 77062306a36Sopenharmony_ci} __packed; 77162306a36Sopenharmony_ci 77262306a36Sopenharmony_ci#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c 77362306a36Sopenharmony_cistruct hci_cp_link_key_neg_reply { 77462306a36Sopenharmony_ci bdaddr_t bdaddr; 77562306a36Sopenharmony_ci} __packed; 77662306a36Sopenharmony_ci 77762306a36Sopenharmony_ci#define HCI_OP_PIN_CODE_REPLY 0x040d 77862306a36Sopenharmony_cistruct hci_cp_pin_code_reply { 77962306a36Sopenharmony_ci bdaddr_t bdaddr; 78062306a36Sopenharmony_ci __u8 pin_len; 78162306a36Sopenharmony_ci __u8 pin_code[16]; 78262306a36Sopenharmony_ci} __packed; 78362306a36Sopenharmony_cistruct hci_rp_pin_code_reply { 78462306a36Sopenharmony_ci __u8 status; 78562306a36Sopenharmony_ci bdaddr_t bdaddr; 78662306a36Sopenharmony_ci} __packed; 78762306a36Sopenharmony_ci 78862306a36Sopenharmony_ci#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e 78962306a36Sopenharmony_cistruct hci_cp_pin_code_neg_reply { 79062306a36Sopenharmony_ci bdaddr_t bdaddr; 79162306a36Sopenharmony_ci} __packed; 79262306a36Sopenharmony_cistruct hci_rp_pin_code_neg_reply { 79362306a36Sopenharmony_ci __u8 status; 79462306a36Sopenharmony_ci bdaddr_t bdaddr; 79562306a36Sopenharmony_ci} __packed; 79662306a36Sopenharmony_ci 79762306a36Sopenharmony_ci#define HCI_OP_CHANGE_CONN_PTYPE 0x040f 79862306a36Sopenharmony_cistruct hci_cp_change_conn_ptype { 79962306a36Sopenharmony_ci __le16 handle; 80062306a36Sopenharmony_ci __le16 pkt_type; 80162306a36Sopenharmony_ci} __packed; 80262306a36Sopenharmony_ci 80362306a36Sopenharmony_ci#define HCI_OP_AUTH_REQUESTED 0x0411 80462306a36Sopenharmony_cistruct hci_cp_auth_requested { 80562306a36Sopenharmony_ci __le16 handle; 80662306a36Sopenharmony_ci} __packed; 80762306a36Sopenharmony_ci 80862306a36Sopenharmony_ci#define HCI_OP_SET_CONN_ENCRYPT 0x0413 80962306a36Sopenharmony_cistruct hci_cp_set_conn_encrypt { 81062306a36Sopenharmony_ci __le16 handle; 81162306a36Sopenharmony_ci __u8 encrypt; 81262306a36Sopenharmony_ci} __packed; 81362306a36Sopenharmony_ci 81462306a36Sopenharmony_ci#define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415 81562306a36Sopenharmony_cistruct hci_cp_change_conn_link_key { 81662306a36Sopenharmony_ci __le16 handle; 81762306a36Sopenharmony_ci} __packed; 81862306a36Sopenharmony_ci 81962306a36Sopenharmony_ci#define HCI_OP_REMOTE_NAME_REQ 0x0419 82062306a36Sopenharmony_cistruct hci_cp_remote_name_req { 82162306a36Sopenharmony_ci bdaddr_t bdaddr; 82262306a36Sopenharmony_ci __u8 pscan_rep_mode; 82362306a36Sopenharmony_ci __u8 pscan_mode; 82462306a36Sopenharmony_ci __le16 clock_offset; 82562306a36Sopenharmony_ci} __packed; 82662306a36Sopenharmony_ci 82762306a36Sopenharmony_ci#define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a 82862306a36Sopenharmony_cistruct hci_cp_remote_name_req_cancel { 82962306a36Sopenharmony_ci bdaddr_t bdaddr; 83062306a36Sopenharmony_ci} __packed; 83162306a36Sopenharmony_ci 83262306a36Sopenharmony_ci#define HCI_OP_READ_REMOTE_FEATURES 0x041b 83362306a36Sopenharmony_cistruct hci_cp_read_remote_features { 83462306a36Sopenharmony_ci __le16 handle; 83562306a36Sopenharmony_ci} __packed; 83662306a36Sopenharmony_ci 83762306a36Sopenharmony_ci#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c 83862306a36Sopenharmony_cistruct hci_cp_read_remote_ext_features { 83962306a36Sopenharmony_ci __le16 handle; 84062306a36Sopenharmony_ci __u8 page; 84162306a36Sopenharmony_ci} __packed; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_ci#define HCI_OP_READ_REMOTE_VERSION 0x041d 84462306a36Sopenharmony_cistruct hci_cp_read_remote_version { 84562306a36Sopenharmony_ci __le16 handle; 84662306a36Sopenharmony_ci} __packed; 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_ci#define HCI_OP_READ_CLOCK_OFFSET 0x041f 84962306a36Sopenharmony_cistruct hci_cp_read_clock_offset { 85062306a36Sopenharmony_ci __le16 handle; 85162306a36Sopenharmony_ci} __packed; 85262306a36Sopenharmony_ci 85362306a36Sopenharmony_ci#define HCI_OP_SETUP_SYNC_CONN 0x0428 85462306a36Sopenharmony_cistruct hci_cp_setup_sync_conn { 85562306a36Sopenharmony_ci __le16 handle; 85662306a36Sopenharmony_ci __le32 tx_bandwidth; 85762306a36Sopenharmony_ci __le32 rx_bandwidth; 85862306a36Sopenharmony_ci __le16 max_latency; 85962306a36Sopenharmony_ci __le16 voice_setting; 86062306a36Sopenharmony_ci __u8 retrans_effort; 86162306a36Sopenharmony_ci __le16 pkt_type; 86262306a36Sopenharmony_ci} __packed; 86362306a36Sopenharmony_ci 86462306a36Sopenharmony_ci#define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429 86562306a36Sopenharmony_cistruct hci_cp_accept_sync_conn_req { 86662306a36Sopenharmony_ci bdaddr_t bdaddr; 86762306a36Sopenharmony_ci __le32 tx_bandwidth; 86862306a36Sopenharmony_ci __le32 rx_bandwidth; 86962306a36Sopenharmony_ci __le16 max_latency; 87062306a36Sopenharmony_ci __le16 content_format; 87162306a36Sopenharmony_ci __u8 retrans_effort; 87262306a36Sopenharmony_ci __le16 pkt_type; 87362306a36Sopenharmony_ci} __packed; 87462306a36Sopenharmony_ci 87562306a36Sopenharmony_ci#define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a 87662306a36Sopenharmony_cistruct hci_cp_reject_sync_conn_req { 87762306a36Sopenharmony_ci bdaddr_t bdaddr; 87862306a36Sopenharmony_ci __u8 reason; 87962306a36Sopenharmony_ci} __packed; 88062306a36Sopenharmony_ci 88162306a36Sopenharmony_ci#define HCI_OP_IO_CAPABILITY_REPLY 0x042b 88262306a36Sopenharmony_cistruct hci_cp_io_capability_reply { 88362306a36Sopenharmony_ci bdaddr_t bdaddr; 88462306a36Sopenharmony_ci __u8 capability; 88562306a36Sopenharmony_ci __u8 oob_data; 88662306a36Sopenharmony_ci __u8 authentication; 88762306a36Sopenharmony_ci} __packed; 88862306a36Sopenharmony_ci 88962306a36Sopenharmony_ci#define HCI_OP_USER_CONFIRM_REPLY 0x042c 89062306a36Sopenharmony_cistruct hci_cp_user_confirm_reply { 89162306a36Sopenharmony_ci bdaddr_t bdaddr; 89262306a36Sopenharmony_ci} __packed; 89362306a36Sopenharmony_cistruct hci_rp_user_confirm_reply { 89462306a36Sopenharmony_ci __u8 status; 89562306a36Sopenharmony_ci bdaddr_t bdaddr; 89662306a36Sopenharmony_ci} __packed; 89762306a36Sopenharmony_ci 89862306a36Sopenharmony_ci#define HCI_OP_USER_CONFIRM_NEG_REPLY 0x042d 89962306a36Sopenharmony_ci 90062306a36Sopenharmony_ci#define HCI_OP_USER_PASSKEY_REPLY 0x042e 90162306a36Sopenharmony_cistruct hci_cp_user_passkey_reply { 90262306a36Sopenharmony_ci bdaddr_t bdaddr; 90362306a36Sopenharmony_ci __le32 passkey; 90462306a36Sopenharmony_ci} __packed; 90562306a36Sopenharmony_ci 90662306a36Sopenharmony_ci#define HCI_OP_USER_PASSKEY_NEG_REPLY 0x042f 90762306a36Sopenharmony_ci 90862306a36Sopenharmony_ci#define HCI_OP_REMOTE_OOB_DATA_REPLY 0x0430 90962306a36Sopenharmony_cistruct hci_cp_remote_oob_data_reply { 91062306a36Sopenharmony_ci bdaddr_t bdaddr; 91162306a36Sopenharmony_ci __u8 hash[16]; 91262306a36Sopenharmony_ci __u8 rand[16]; 91362306a36Sopenharmony_ci} __packed; 91462306a36Sopenharmony_ci 91562306a36Sopenharmony_ci#define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY 0x0433 91662306a36Sopenharmony_cistruct hci_cp_remote_oob_data_neg_reply { 91762306a36Sopenharmony_ci bdaddr_t bdaddr; 91862306a36Sopenharmony_ci} __packed; 91962306a36Sopenharmony_ci 92062306a36Sopenharmony_ci#define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434 92162306a36Sopenharmony_cistruct hci_cp_io_capability_neg_reply { 92262306a36Sopenharmony_ci bdaddr_t bdaddr; 92362306a36Sopenharmony_ci __u8 reason; 92462306a36Sopenharmony_ci} __packed; 92562306a36Sopenharmony_ci 92662306a36Sopenharmony_ci#define HCI_OP_CREATE_PHY_LINK 0x0435 92762306a36Sopenharmony_cistruct hci_cp_create_phy_link { 92862306a36Sopenharmony_ci __u8 phy_handle; 92962306a36Sopenharmony_ci __u8 key_len; 93062306a36Sopenharmony_ci __u8 key_type; 93162306a36Sopenharmony_ci __u8 key[HCI_AMP_LINK_KEY_SIZE]; 93262306a36Sopenharmony_ci} __packed; 93362306a36Sopenharmony_ci 93462306a36Sopenharmony_ci#define HCI_OP_ACCEPT_PHY_LINK 0x0436 93562306a36Sopenharmony_cistruct hci_cp_accept_phy_link { 93662306a36Sopenharmony_ci __u8 phy_handle; 93762306a36Sopenharmony_ci __u8 key_len; 93862306a36Sopenharmony_ci __u8 key_type; 93962306a36Sopenharmony_ci __u8 key[HCI_AMP_LINK_KEY_SIZE]; 94062306a36Sopenharmony_ci} __packed; 94162306a36Sopenharmony_ci 94262306a36Sopenharmony_ci#define HCI_OP_DISCONN_PHY_LINK 0x0437 94362306a36Sopenharmony_cistruct hci_cp_disconn_phy_link { 94462306a36Sopenharmony_ci __u8 phy_handle; 94562306a36Sopenharmony_ci __u8 reason; 94662306a36Sopenharmony_ci} __packed; 94762306a36Sopenharmony_ci 94862306a36Sopenharmony_cistruct ext_flow_spec { 94962306a36Sopenharmony_ci __u8 id; 95062306a36Sopenharmony_ci __u8 stype; 95162306a36Sopenharmony_ci __le16 msdu; 95262306a36Sopenharmony_ci __le32 sdu_itime; 95362306a36Sopenharmony_ci __le32 acc_lat; 95462306a36Sopenharmony_ci __le32 flush_to; 95562306a36Sopenharmony_ci} __packed; 95662306a36Sopenharmony_ci 95762306a36Sopenharmony_ci#define HCI_OP_CREATE_LOGICAL_LINK 0x0438 95862306a36Sopenharmony_ci#define HCI_OP_ACCEPT_LOGICAL_LINK 0x0439 95962306a36Sopenharmony_cistruct hci_cp_create_accept_logical_link { 96062306a36Sopenharmony_ci __u8 phy_handle; 96162306a36Sopenharmony_ci struct ext_flow_spec tx_flow_spec; 96262306a36Sopenharmony_ci struct ext_flow_spec rx_flow_spec; 96362306a36Sopenharmony_ci} __packed; 96462306a36Sopenharmony_ci 96562306a36Sopenharmony_ci#define HCI_OP_DISCONN_LOGICAL_LINK 0x043a 96662306a36Sopenharmony_cistruct hci_cp_disconn_logical_link { 96762306a36Sopenharmony_ci __le16 log_handle; 96862306a36Sopenharmony_ci} __packed; 96962306a36Sopenharmony_ci 97062306a36Sopenharmony_ci#define HCI_OP_LOGICAL_LINK_CANCEL 0x043b 97162306a36Sopenharmony_cistruct hci_cp_logical_link_cancel { 97262306a36Sopenharmony_ci __u8 phy_handle; 97362306a36Sopenharmony_ci __u8 flow_spec_id; 97462306a36Sopenharmony_ci} __packed; 97562306a36Sopenharmony_ci 97662306a36Sopenharmony_ci#define HCI_OP_ENHANCED_SETUP_SYNC_CONN 0x043d 97762306a36Sopenharmony_cistruct hci_coding_format { 97862306a36Sopenharmony_ci __u8 id; 97962306a36Sopenharmony_ci __le16 cid; 98062306a36Sopenharmony_ci __le16 vid; 98162306a36Sopenharmony_ci} __packed; 98262306a36Sopenharmony_ci 98362306a36Sopenharmony_cistruct hci_cp_enhanced_setup_sync_conn { 98462306a36Sopenharmony_ci __le16 handle; 98562306a36Sopenharmony_ci __le32 tx_bandwidth; 98662306a36Sopenharmony_ci __le32 rx_bandwidth; 98762306a36Sopenharmony_ci struct hci_coding_format tx_coding_format; 98862306a36Sopenharmony_ci struct hci_coding_format rx_coding_format; 98962306a36Sopenharmony_ci __le16 tx_codec_frame_size; 99062306a36Sopenharmony_ci __le16 rx_codec_frame_size; 99162306a36Sopenharmony_ci __le32 in_bandwidth; 99262306a36Sopenharmony_ci __le32 out_bandwidth; 99362306a36Sopenharmony_ci struct hci_coding_format in_coding_format; 99462306a36Sopenharmony_ci struct hci_coding_format out_coding_format; 99562306a36Sopenharmony_ci __le16 in_coded_data_size; 99662306a36Sopenharmony_ci __le16 out_coded_data_size; 99762306a36Sopenharmony_ci __u8 in_pcm_data_format; 99862306a36Sopenharmony_ci __u8 out_pcm_data_format; 99962306a36Sopenharmony_ci __u8 in_pcm_sample_payload_msb_pos; 100062306a36Sopenharmony_ci __u8 out_pcm_sample_payload_msb_pos; 100162306a36Sopenharmony_ci __u8 in_data_path; 100262306a36Sopenharmony_ci __u8 out_data_path; 100362306a36Sopenharmony_ci __u8 in_transport_unit_size; 100462306a36Sopenharmony_ci __u8 out_transport_unit_size; 100562306a36Sopenharmony_ci __le16 max_latency; 100662306a36Sopenharmony_ci __le16 pkt_type; 100762306a36Sopenharmony_ci __u8 retrans_effort; 100862306a36Sopenharmony_ci} __packed; 100962306a36Sopenharmony_ci 101062306a36Sopenharmony_cistruct hci_rp_logical_link_cancel { 101162306a36Sopenharmony_ci __u8 status; 101262306a36Sopenharmony_ci __u8 phy_handle; 101362306a36Sopenharmony_ci __u8 flow_spec_id; 101462306a36Sopenharmony_ci} __packed; 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci#define HCI_OP_SET_CPB 0x0441 101762306a36Sopenharmony_cistruct hci_cp_set_cpb { 101862306a36Sopenharmony_ci __u8 enable; 101962306a36Sopenharmony_ci __u8 lt_addr; 102062306a36Sopenharmony_ci __u8 lpo_allowed; 102162306a36Sopenharmony_ci __le16 packet_type; 102262306a36Sopenharmony_ci __le16 interval_min; 102362306a36Sopenharmony_ci __le16 interval_max; 102462306a36Sopenharmony_ci __le16 cpb_sv_tout; 102562306a36Sopenharmony_ci} __packed; 102662306a36Sopenharmony_cistruct hci_rp_set_cpb { 102762306a36Sopenharmony_ci __u8 status; 102862306a36Sopenharmony_ci __u8 lt_addr; 102962306a36Sopenharmony_ci __le16 interval; 103062306a36Sopenharmony_ci} __packed; 103162306a36Sopenharmony_ci 103262306a36Sopenharmony_ci#define HCI_OP_START_SYNC_TRAIN 0x0443 103362306a36Sopenharmony_ci 103462306a36Sopenharmony_ci#define HCI_OP_REMOTE_OOB_EXT_DATA_REPLY 0x0445 103562306a36Sopenharmony_cistruct hci_cp_remote_oob_ext_data_reply { 103662306a36Sopenharmony_ci bdaddr_t bdaddr; 103762306a36Sopenharmony_ci __u8 hash192[16]; 103862306a36Sopenharmony_ci __u8 rand192[16]; 103962306a36Sopenharmony_ci __u8 hash256[16]; 104062306a36Sopenharmony_ci __u8 rand256[16]; 104162306a36Sopenharmony_ci} __packed; 104262306a36Sopenharmony_ci 104362306a36Sopenharmony_ci#define HCI_OP_SNIFF_MODE 0x0803 104462306a36Sopenharmony_cistruct hci_cp_sniff_mode { 104562306a36Sopenharmony_ci __le16 handle; 104662306a36Sopenharmony_ci __le16 max_interval; 104762306a36Sopenharmony_ci __le16 min_interval; 104862306a36Sopenharmony_ci __le16 attempt; 104962306a36Sopenharmony_ci __le16 timeout; 105062306a36Sopenharmony_ci} __packed; 105162306a36Sopenharmony_ci 105262306a36Sopenharmony_ci#define HCI_OP_EXIT_SNIFF_MODE 0x0804 105362306a36Sopenharmony_cistruct hci_cp_exit_sniff_mode { 105462306a36Sopenharmony_ci __le16 handle; 105562306a36Sopenharmony_ci} __packed; 105662306a36Sopenharmony_ci 105762306a36Sopenharmony_ci#define HCI_OP_ROLE_DISCOVERY 0x0809 105862306a36Sopenharmony_cistruct hci_cp_role_discovery { 105962306a36Sopenharmony_ci __le16 handle; 106062306a36Sopenharmony_ci} __packed; 106162306a36Sopenharmony_cistruct hci_rp_role_discovery { 106262306a36Sopenharmony_ci __u8 status; 106362306a36Sopenharmony_ci __le16 handle; 106462306a36Sopenharmony_ci __u8 role; 106562306a36Sopenharmony_ci} __packed; 106662306a36Sopenharmony_ci 106762306a36Sopenharmony_ci#define HCI_OP_SWITCH_ROLE 0x080b 106862306a36Sopenharmony_cistruct hci_cp_switch_role { 106962306a36Sopenharmony_ci bdaddr_t bdaddr; 107062306a36Sopenharmony_ci __u8 role; 107162306a36Sopenharmony_ci} __packed; 107262306a36Sopenharmony_ci 107362306a36Sopenharmony_ci#define HCI_OP_READ_LINK_POLICY 0x080c 107462306a36Sopenharmony_cistruct hci_cp_read_link_policy { 107562306a36Sopenharmony_ci __le16 handle; 107662306a36Sopenharmony_ci} __packed; 107762306a36Sopenharmony_cistruct hci_rp_read_link_policy { 107862306a36Sopenharmony_ci __u8 status; 107962306a36Sopenharmony_ci __le16 handle; 108062306a36Sopenharmony_ci __le16 policy; 108162306a36Sopenharmony_ci} __packed; 108262306a36Sopenharmony_ci 108362306a36Sopenharmony_ci#define HCI_OP_WRITE_LINK_POLICY 0x080d 108462306a36Sopenharmony_cistruct hci_cp_write_link_policy { 108562306a36Sopenharmony_ci __le16 handle; 108662306a36Sopenharmony_ci __le16 policy; 108762306a36Sopenharmony_ci} __packed; 108862306a36Sopenharmony_cistruct hci_rp_write_link_policy { 108962306a36Sopenharmony_ci __u8 status; 109062306a36Sopenharmony_ci __le16 handle; 109162306a36Sopenharmony_ci} __packed; 109262306a36Sopenharmony_ci 109362306a36Sopenharmony_ci#define HCI_OP_READ_DEF_LINK_POLICY 0x080e 109462306a36Sopenharmony_cistruct hci_rp_read_def_link_policy { 109562306a36Sopenharmony_ci __u8 status; 109662306a36Sopenharmony_ci __le16 policy; 109762306a36Sopenharmony_ci} __packed; 109862306a36Sopenharmony_ci 109962306a36Sopenharmony_ci#define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f 110062306a36Sopenharmony_cistruct hci_cp_write_def_link_policy { 110162306a36Sopenharmony_ci __le16 policy; 110262306a36Sopenharmony_ci} __packed; 110362306a36Sopenharmony_ci 110462306a36Sopenharmony_ci#define HCI_OP_SNIFF_SUBRATE 0x0811 110562306a36Sopenharmony_cistruct hci_cp_sniff_subrate { 110662306a36Sopenharmony_ci __le16 handle; 110762306a36Sopenharmony_ci __le16 max_latency; 110862306a36Sopenharmony_ci __le16 min_remote_timeout; 110962306a36Sopenharmony_ci __le16 min_local_timeout; 111062306a36Sopenharmony_ci} __packed; 111162306a36Sopenharmony_ci 111262306a36Sopenharmony_ci#define HCI_OP_SET_EVENT_MASK 0x0c01 111362306a36Sopenharmony_ci 111462306a36Sopenharmony_ci#define HCI_OP_RESET 0x0c03 111562306a36Sopenharmony_ci 111662306a36Sopenharmony_ci#define HCI_OP_SET_EVENT_FLT 0x0c05 111762306a36Sopenharmony_ci#define HCI_SET_EVENT_FLT_SIZE 9 111862306a36Sopenharmony_cistruct hci_cp_set_event_filter { 111962306a36Sopenharmony_ci __u8 flt_type; 112062306a36Sopenharmony_ci __u8 cond_type; 112162306a36Sopenharmony_ci struct { 112262306a36Sopenharmony_ci bdaddr_t bdaddr; 112362306a36Sopenharmony_ci __u8 auto_accept; 112462306a36Sopenharmony_ci } __packed addr_conn_flt; 112562306a36Sopenharmony_ci} __packed; 112662306a36Sopenharmony_ci 112762306a36Sopenharmony_ci/* Filter types */ 112862306a36Sopenharmony_ci#define HCI_FLT_CLEAR_ALL 0x00 112962306a36Sopenharmony_ci#define HCI_FLT_INQ_RESULT 0x01 113062306a36Sopenharmony_ci#define HCI_FLT_CONN_SETUP 0x02 113162306a36Sopenharmony_ci 113262306a36Sopenharmony_ci/* CONN_SETUP Condition types */ 113362306a36Sopenharmony_ci#define HCI_CONN_SETUP_ALLOW_ALL 0x00 113462306a36Sopenharmony_ci#define HCI_CONN_SETUP_ALLOW_CLASS 0x01 113562306a36Sopenharmony_ci#define HCI_CONN_SETUP_ALLOW_BDADDR 0x02 113662306a36Sopenharmony_ci 113762306a36Sopenharmony_ci/* CONN_SETUP Conditions */ 113862306a36Sopenharmony_ci#define HCI_CONN_SETUP_AUTO_OFF 0x01 113962306a36Sopenharmony_ci#define HCI_CONN_SETUP_AUTO_ON 0x02 114062306a36Sopenharmony_ci#define HCI_CONN_SETUP_AUTO_ON_WITH_RS 0x03 114162306a36Sopenharmony_ci 114262306a36Sopenharmony_ci#define HCI_OP_READ_STORED_LINK_KEY 0x0c0d 114362306a36Sopenharmony_cistruct hci_cp_read_stored_link_key { 114462306a36Sopenharmony_ci bdaddr_t bdaddr; 114562306a36Sopenharmony_ci __u8 read_all; 114662306a36Sopenharmony_ci} __packed; 114762306a36Sopenharmony_cistruct hci_rp_read_stored_link_key { 114862306a36Sopenharmony_ci __u8 status; 114962306a36Sopenharmony_ci __le16 max_keys; 115062306a36Sopenharmony_ci __le16 num_keys; 115162306a36Sopenharmony_ci} __packed; 115262306a36Sopenharmony_ci 115362306a36Sopenharmony_ci#define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12 115462306a36Sopenharmony_cistruct hci_cp_delete_stored_link_key { 115562306a36Sopenharmony_ci bdaddr_t bdaddr; 115662306a36Sopenharmony_ci __u8 delete_all; 115762306a36Sopenharmony_ci} __packed; 115862306a36Sopenharmony_cistruct hci_rp_delete_stored_link_key { 115962306a36Sopenharmony_ci __u8 status; 116062306a36Sopenharmony_ci __le16 num_keys; 116162306a36Sopenharmony_ci} __packed; 116262306a36Sopenharmony_ci 116362306a36Sopenharmony_ci#define HCI_MAX_NAME_LENGTH 248 116462306a36Sopenharmony_ci 116562306a36Sopenharmony_ci#define HCI_OP_WRITE_LOCAL_NAME 0x0c13 116662306a36Sopenharmony_cistruct hci_cp_write_local_name { 116762306a36Sopenharmony_ci __u8 name[HCI_MAX_NAME_LENGTH]; 116862306a36Sopenharmony_ci} __packed; 116962306a36Sopenharmony_ci 117062306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_NAME 0x0c14 117162306a36Sopenharmony_cistruct hci_rp_read_local_name { 117262306a36Sopenharmony_ci __u8 status; 117362306a36Sopenharmony_ci __u8 name[HCI_MAX_NAME_LENGTH]; 117462306a36Sopenharmony_ci} __packed; 117562306a36Sopenharmony_ci 117662306a36Sopenharmony_ci#define HCI_OP_WRITE_CA_TIMEOUT 0x0c16 117762306a36Sopenharmony_ci 117862306a36Sopenharmony_ci#define HCI_OP_WRITE_PG_TIMEOUT 0x0c18 117962306a36Sopenharmony_ci 118062306a36Sopenharmony_ci#define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a 118162306a36Sopenharmony_ci #define SCAN_DISABLED 0x00 118262306a36Sopenharmony_ci #define SCAN_INQUIRY 0x01 118362306a36Sopenharmony_ci #define SCAN_PAGE 0x02 118462306a36Sopenharmony_ci 118562306a36Sopenharmony_ci#define HCI_OP_READ_AUTH_ENABLE 0x0c1f 118662306a36Sopenharmony_ci 118762306a36Sopenharmony_ci#define HCI_OP_WRITE_AUTH_ENABLE 0x0c20 118862306a36Sopenharmony_ci #define AUTH_DISABLED 0x00 118962306a36Sopenharmony_ci #define AUTH_ENABLED 0x01 119062306a36Sopenharmony_ci 119162306a36Sopenharmony_ci#define HCI_OP_READ_ENCRYPT_MODE 0x0c21 119262306a36Sopenharmony_ci 119362306a36Sopenharmony_ci#define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22 119462306a36Sopenharmony_ci #define ENCRYPT_DISABLED 0x00 119562306a36Sopenharmony_ci #define ENCRYPT_P2P 0x01 119662306a36Sopenharmony_ci #define ENCRYPT_BOTH 0x02 119762306a36Sopenharmony_ci 119862306a36Sopenharmony_ci#define HCI_OP_READ_CLASS_OF_DEV 0x0c23 119962306a36Sopenharmony_cistruct hci_rp_read_class_of_dev { 120062306a36Sopenharmony_ci __u8 status; 120162306a36Sopenharmony_ci __u8 dev_class[3]; 120262306a36Sopenharmony_ci} __packed; 120362306a36Sopenharmony_ci 120462306a36Sopenharmony_ci#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24 120562306a36Sopenharmony_cistruct hci_cp_write_class_of_dev { 120662306a36Sopenharmony_ci __u8 dev_class[3]; 120762306a36Sopenharmony_ci} __packed; 120862306a36Sopenharmony_ci 120962306a36Sopenharmony_ci#define HCI_OP_READ_VOICE_SETTING 0x0c25 121062306a36Sopenharmony_cistruct hci_rp_read_voice_setting { 121162306a36Sopenharmony_ci __u8 status; 121262306a36Sopenharmony_ci __le16 voice_setting; 121362306a36Sopenharmony_ci} __packed; 121462306a36Sopenharmony_ci 121562306a36Sopenharmony_ci#define HCI_OP_WRITE_VOICE_SETTING 0x0c26 121662306a36Sopenharmony_cistruct hci_cp_write_voice_setting { 121762306a36Sopenharmony_ci __le16 voice_setting; 121862306a36Sopenharmony_ci} __packed; 121962306a36Sopenharmony_ci 122062306a36Sopenharmony_ci#define HCI_OP_HOST_BUFFER_SIZE 0x0c33 122162306a36Sopenharmony_cistruct hci_cp_host_buffer_size { 122262306a36Sopenharmony_ci __le16 acl_mtu; 122362306a36Sopenharmony_ci __u8 sco_mtu; 122462306a36Sopenharmony_ci __le16 acl_max_pkt; 122562306a36Sopenharmony_ci __le16 sco_max_pkt; 122662306a36Sopenharmony_ci} __packed; 122762306a36Sopenharmony_ci 122862306a36Sopenharmony_ci#define HCI_OP_READ_NUM_SUPPORTED_IAC 0x0c38 122962306a36Sopenharmony_cistruct hci_rp_read_num_supported_iac { 123062306a36Sopenharmony_ci __u8 status; 123162306a36Sopenharmony_ci __u8 num_iac; 123262306a36Sopenharmony_ci} __packed; 123362306a36Sopenharmony_ci 123462306a36Sopenharmony_ci#define HCI_OP_READ_CURRENT_IAC_LAP 0x0c39 123562306a36Sopenharmony_ci 123662306a36Sopenharmony_ci#define HCI_OP_WRITE_CURRENT_IAC_LAP 0x0c3a 123762306a36Sopenharmony_cistruct hci_cp_write_current_iac_lap { 123862306a36Sopenharmony_ci __u8 num_iac; 123962306a36Sopenharmony_ci __u8 iac_lap[6]; 124062306a36Sopenharmony_ci} __packed; 124162306a36Sopenharmony_ci 124262306a36Sopenharmony_ci#define HCI_OP_WRITE_INQUIRY_MODE 0x0c45 124362306a36Sopenharmony_ci 124462306a36Sopenharmony_ci#define HCI_MAX_EIR_LENGTH 240 124562306a36Sopenharmony_ci 124662306a36Sopenharmony_ci#define HCI_OP_WRITE_EIR 0x0c52 124762306a36Sopenharmony_cistruct hci_cp_write_eir { 124862306a36Sopenharmony_ci __u8 fec; 124962306a36Sopenharmony_ci __u8 data[HCI_MAX_EIR_LENGTH]; 125062306a36Sopenharmony_ci} __packed; 125162306a36Sopenharmony_ci 125262306a36Sopenharmony_ci#define HCI_OP_READ_SSP_MODE 0x0c55 125362306a36Sopenharmony_cistruct hci_rp_read_ssp_mode { 125462306a36Sopenharmony_ci __u8 status; 125562306a36Sopenharmony_ci __u8 mode; 125662306a36Sopenharmony_ci} __packed; 125762306a36Sopenharmony_ci 125862306a36Sopenharmony_ci#define HCI_OP_WRITE_SSP_MODE 0x0c56 125962306a36Sopenharmony_cistruct hci_cp_write_ssp_mode { 126062306a36Sopenharmony_ci __u8 mode; 126162306a36Sopenharmony_ci} __packed; 126262306a36Sopenharmony_ci 126362306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_OOB_DATA 0x0c57 126462306a36Sopenharmony_cistruct hci_rp_read_local_oob_data { 126562306a36Sopenharmony_ci __u8 status; 126662306a36Sopenharmony_ci __u8 hash[16]; 126762306a36Sopenharmony_ci __u8 rand[16]; 126862306a36Sopenharmony_ci} __packed; 126962306a36Sopenharmony_ci 127062306a36Sopenharmony_ci#define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58 127162306a36Sopenharmony_cistruct hci_rp_read_inq_rsp_tx_power { 127262306a36Sopenharmony_ci __u8 status; 127362306a36Sopenharmony_ci __s8 tx_power; 127462306a36Sopenharmony_ci} __packed; 127562306a36Sopenharmony_ci 127662306a36Sopenharmony_ci#define HCI_OP_READ_DEF_ERR_DATA_REPORTING 0x0c5a 127762306a36Sopenharmony_ci #define ERR_DATA_REPORTING_DISABLED 0x00 127862306a36Sopenharmony_ci #define ERR_DATA_REPORTING_ENABLED 0x01 127962306a36Sopenharmony_cistruct hci_rp_read_def_err_data_reporting { 128062306a36Sopenharmony_ci __u8 status; 128162306a36Sopenharmony_ci __u8 err_data_reporting; 128262306a36Sopenharmony_ci} __packed; 128362306a36Sopenharmony_ci 128462306a36Sopenharmony_ci#define HCI_OP_WRITE_DEF_ERR_DATA_REPORTING 0x0c5b 128562306a36Sopenharmony_cistruct hci_cp_write_def_err_data_reporting { 128662306a36Sopenharmony_ci __u8 err_data_reporting; 128762306a36Sopenharmony_ci} __packed; 128862306a36Sopenharmony_ci 128962306a36Sopenharmony_ci#define HCI_OP_SET_EVENT_MASK_PAGE_2 0x0c63 129062306a36Sopenharmony_ci 129162306a36Sopenharmony_ci#define HCI_OP_READ_LOCATION_DATA 0x0c64 129262306a36Sopenharmony_ci 129362306a36Sopenharmony_ci#define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 129462306a36Sopenharmony_cistruct hci_rp_read_flow_control_mode { 129562306a36Sopenharmony_ci __u8 status; 129662306a36Sopenharmony_ci __u8 mode; 129762306a36Sopenharmony_ci} __packed; 129862306a36Sopenharmony_ci 129962306a36Sopenharmony_ci#define HCI_OP_WRITE_LE_HOST_SUPPORTED 0x0c6d 130062306a36Sopenharmony_cistruct hci_cp_write_le_host_supported { 130162306a36Sopenharmony_ci __u8 le; 130262306a36Sopenharmony_ci __u8 simul; 130362306a36Sopenharmony_ci} __packed; 130462306a36Sopenharmony_ci 130562306a36Sopenharmony_ci#define HCI_OP_SET_RESERVED_LT_ADDR 0x0c74 130662306a36Sopenharmony_cistruct hci_cp_set_reserved_lt_addr { 130762306a36Sopenharmony_ci __u8 lt_addr; 130862306a36Sopenharmony_ci} __packed; 130962306a36Sopenharmony_cistruct hci_rp_set_reserved_lt_addr { 131062306a36Sopenharmony_ci __u8 status; 131162306a36Sopenharmony_ci __u8 lt_addr; 131262306a36Sopenharmony_ci} __packed; 131362306a36Sopenharmony_ci 131462306a36Sopenharmony_ci#define HCI_OP_DELETE_RESERVED_LT_ADDR 0x0c75 131562306a36Sopenharmony_cistruct hci_cp_delete_reserved_lt_addr { 131662306a36Sopenharmony_ci __u8 lt_addr; 131762306a36Sopenharmony_ci} __packed; 131862306a36Sopenharmony_cistruct hci_rp_delete_reserved_lt_addr { 131962306a36Sopenharmony_ci __u8 status; 132062306a36Sopenharmony_ci __u8 lt_addr; 132162306a36Sopenharmony_ci} __packed; 132262306a36Sopenharmony_ci 132362306a36Sopenharmony_ci#define HCI_OP_SET_CPB_DATA 0x0c76 132462306a36Sopenharmony_cistruct hci_cp_set_cpb_data { 132562306a36Sopenharmony_ci __u8 lt_addr; 132662306a36Sopenharmony_ci __u8 fragment; 132762306a36Sopenharmony_ci __u8 data_length; 132862306a36Sopenharmony_ci __u8 data[HCI_MAX_CPB_DATA_SIZE]; 132962306a36Sopenharmony_ci} __packed; 133062306a36Sopenharmony_cistruct hci_rp_set_cpb_data { 133162306a36Sopenharmony_ci __u8 status; 133262306a36Sopenharmony_ci __u8 lt_addr; 133362306a36Sopenharmony_ci} __packed; 133462306a36Sopenharmony_ci 133562306a36Sopenharmony_ci#define HCI_OP_READ_SYNC_TRAIN_PARAMS 0x0c77 133662306a36Sopenharmony_ci 133762306a36Sopenharmony_ci#define HCI_OP_WRITE_SYNC_TRAIN_PARAMS 0x0c78 133862306a36Sopenharmony_cistruct hci_cp_write_sync_train_params { 133962306a36Sopenharmony_ci __le16 interval_min; 134062306a36Sopenharmony_ci __le16 interval_max; 134162306a36Sopenharmony_ci __le32 sync_train_tout; 134262306a36Sopenharmony_ci __u8 service_data; 134362306a36Sopenharmony_ci} __packed; 134462306a36Sopenharmony_cistruct hci_rp_write_sync_train_params { 134562306a36Sopenharmony_ci __u8 status; 134662306a36Sopenharmony_ci __le16 sync_train_int; 134762306a36Sopenharmony_ci} __packed; 134862306a36Sopenharmony_ci 134962306a36Sopenharmony_ci#define HCI_OP_READ_SC_SUPPORT 0x0c79 135062306a36Sopenharmony_cistruct hci_rp_read_sc_support { 135162306a36Sopenharmony_ci __u8 status; 135262306a36Sopenharmony_ci __u8 support; 135362306a36Sopenharmony_ci} __packed; 135462306a36Sopenharmony_ci 135562306a36Sopenharmony_ci#define HCI_OP_WRITE_SC_SUPPORT 0x0c7a 135662306a36Sopenharmony_cistruct hci_cp_write_sc_support { 135762306a36Sopenharmony_ci __u8 support; 135862306a36Sopenharmony_ci} __packed; 135962306a36Sopenharmony_ci 136062306a36Sopenharmony_ci#define HCI_OP_READ_AUTH_PAYLOAD_TO 0x0c7b 136162306a36Sopenharmony_cistruct hci_cp_read_auth_payload_to { 136262306a36Sopenharmony_ci __le16 handle; 136362306a36Sopenharmony_ci} __packed; 136462306a36Sopenharmony_cistruct hci_rp_read_auth_payload_to { 136562306a36Sopenharmony_ci __u8 status; 136662306a36Sopenharmony_ci __le16 handle; 136762306a36Sopenharmony_ci __le16 timeout; 136862306a36Sopenharmony_ci} __packed; 136962306a36Sopenharmony_ci 137062306a36Sopenharmony_ci#define HCI_OP_WRITE_AUTH_PAYLOAD_TO 0x0c7c 137162306a36Sopenharmony_cistruct hci_cp_write_auth_payload_to { 137262306a36Sopenharmony_ci __le16 handle; 137362306a36Sopenharmony_ci __le16 timeout; 137462306a36Sopenharmony_ci} __packed; 137562306a36Sopenharmony_cistruct hci_rp_write_auth_payload_to { 137662306a36Sopenharmony_ci __u8 status; 137762306a36Sopenharmony_ci __le16 handle; 137862306a36Sopenharmony_ci} __packed; 137962306a36Sopenharmony_ci 138062306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_OOB_EXT_DATA 0x0c7d 138162306a36Sopenharmony_cistruct hci_rp_read_local_oob_ext_data { 138262306a36Sopenharmony_ci __u8 status; 138362306a36Sopenharmony_ci __u8 hash192[16]; 138462306a36Sopenharmony_ci __u8 rand192[16]; 138562306a36Sopenharmony_ci __u8 hash256[16]; 138662306a36Sopenharmony_ci __u8 rand256[16]; 138762306a36Sopenharmony_ci} __packed; 138862306a36Sopenharmony_ci 138962306a36Sopenharmony_ci#define HCI_CONFIGURE_DATA_PATH 0x0c83 139062306a36Sopenharmony_cistruct hci_op_configure_data_path { 139162306a36Sopenharmony_ci __u8 direction; 139262306a36Sopenharmony_ci __u8 data_path_id; 139362306a36Sopenharmony_ci __u8 vnd_len; 139462306a36Sopenharmony_ci __u8 vnd_data[]; 139562306a36Sopenharmony_ci} __packed; 139662306a36Sopenharmony_ci 139762306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_VERSION 0x1001 139862306a36Sopenharmony_cistruct hci_rp_read_local_version { 139962306a36Sopenharmony_ci __u8 status; 140062306a36Sopenharmony_ci __u8 hci_ver; 140162306a36Sopenharmony_ci __le16 hci_rev; 140262306a36Sopenharmony_ci __u8 lmp_ver; 140362306a36Sopenharmony_ci __le16 manufacturer; 140462306a36Sopenharmony_ci __le16 lmp_subver; 140562306a36Sopenharmony_ci} __packed; 140662306a36Sopenharmony_ci 140762306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_COMMANDS 0x1002 140862306a36Sopenharmony_cistruct hci_rp_read_local_commands { 140962306a36Sopenharmony_ci __u8 status; 141062306a36Sopenharmony_ci __u8 commands[64]; 141162306a36Sopenharmony_ci} __packed; 141262306a36Sopenharmony_ci 141362306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_FEATURES 0x1003 141462306a36Sopenharmony_cistruct hci_rp_read_local_features { 141562306a36Sopenharmony_ci __u8 status; 141662306a36Sopenharmony_ci __u8 features[8]; 141762306a36Sopenharmony_ci} __packed; 141862306a36Sopenharmony_ci 141962306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004 142062306a36Sopenharmony_cistruct hci_cp_read_local_ext_features { 142162306a36Sopenharmony_ci __u8 page; 142262306a36Sopenharmony_ci} __packed; 142362306a36Sopenharmony_cistruct hci_rp_read_local_ext_features { 142462306a36Sopenharmony_ci __u8 status; 142562306a36Sopenharmony_ci __u8 page; 142662306a36Sopenharmony_ci __u8 max_page; 142762306a36Sopenharmony_ci __u8 features[8]; 142862306a36Sopenharmony_ci} __packed; 142962306a36Sopenharmony_ci 143062306a36Sopenharmony_ci#define HCI_OP_READ_BUFFER_SIZE 0x1005 143162306a36Sopenharmony_cistruct hci_rp_read_buffer_size { 143262306a36Sopenharmony_ci __u8 status; 143362306a36Sopenharmony_ci __le16 acl_mtu; 143462306a36Sopenharmony_ci __u8 sco_mtu; 143562306a36Sopenharmony_ci __le16 acl_max_pkt; 143662306a36Sopenharmony_ci __le16 sco_max_pkt; 143762306a36Sopenharmony_ci} __packed; 143862306a36Sopenharmony_ci 143962306a36Sopenharmony_ci#define HCI_OP_READ_BD_ADDR 0x1009 144062306a36Sopenharmony_cistruct hci_rp_read_bd_addr { 144162306a36Sopenharmony_ci __u8 status; 144262306a36Sopenharmony_ci bdaddr_t bdaddr; 144362306a36Sopenharmony_ci} __packed; 144462306a36Sopenharmony_ci 144562306a36Sopenharmony_ci#define HCI_OP_READ_DATA_BLOCK_SIZE 0x100a 144662306a36Sopenharmony_cistruct hci_rp_read_data_block_size { 144762306a36Sopenharmony_ci __u8 status; 144862306a36Sopenharmony_ci __le16 max_acl_len; 144962306a36Sopenharmony_ci __le16 block_len; 145062306a36Sopenharmony_ci __le16 num_blocks; 145162306a36Sopenharmony_ci} __packed; 145262306a36Sopenharmony_ci 145362306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_CODECS 0x100b 145462306a36Sopenharmony_cistruct hci_std_codecs { 145562306a36Sopenharmony_ci __u8 num; 145662306a36Sopenharmony_ci __u8 codec[]; 145762306a36Sopenharmony_ci} __packed; 145862306a36Sopenharmony_ci 145962306a36Sopenharmony_cistruct hci_vnd_codec { 146062306a36Sopenharmony_ci /* company id */ 146162306a36Sopenharmony_ci __le16 cid; 146262306a36Sopenharmony_ci /* vendor codec id */ 146362306a36Sopenharmony_ci __le16 vid; 146462306a36Sopenharmony_ci} __packed; 146562306a36Sopenharmony_ci 146662306a36Sopenharmony_cistruct hci_vnd_codecs { 146762306a36Sopenharmony_ci __u8 num; 146862306a36Sopenharmony_ci struct hci_vnd_codec codec[]; 146962306a36Sopenharmony_ci} __packed; 147062306a36Sopenharmony_ci 147162306a36Sopenharmony_cistruct hci_rp_read_local_supported_codecs { 147262306a36Sopenharmony_ci __u8 status; 147362306a36Sopenharmony_ci struct hci_std_codecs std_codecs; 147462306a36Sopenharmony_ci struct hci_vnd_codecs vnd_codecs; 147562306a36Sopenharmony_ci} __packed; 147662306a36Sopenharmony_ci 147762306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_PAIRING_OPTS 0x100c 147862306a36Sopenharmony_cistruct hci_rp_read_local_pairing_opts { 147962306a36Sopenharmony_ci __u8 status; 148062306a36Sopenharmony_ci __u8 pairing_opts; 148162306a36Sopenharmony_ci __u8 max_key_size; 148262306a36Sopenharmony_ci} __packed; 148362306a36Sopenharmony_ci 148462306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_CODECS_V2 0x100d 148562306a36Sopenharmony_cistruct hci_std_codec_v2 { 148662306a36Sopenharmony_ci __u8 id; 148762306a36Sopenharmony_ci __u8 transport; 148862306a36Sopenharmony_ci} __packed; 148962306a36Sopenharmony_ci 149062306a36Sopenharmony_cistruct hci_std_codecs_v2 { 149162306a36Sopenharmony_ci __u8 num; 149262306a36Sopenharmony_ci struct hci_std_codec_v2 codec[]; 149362306a36Sopenharmony_ci} __packed; 149462306a36Sopenharmony_ci 149562306a36Sopenharmony_cistruct hci_vnd_codec_v2 { 149662306a36Sopenharmony_ci __le16 cid; 149762306a36Sopenharmony_ci __le16 vid; 149862306a36Sopenharmony_ci __u8 transport; 149962306a36Sopenharmony_ci} __packed; 150062306a36Sopenharmony_ci 150162306a36Sopenharmony_cistruct hci_vnd_codecs_v2 { 150262306a36Sopenharmony_ci __u8 num; 150362306a36Sopenharmony_ci struct hci_vnd_codec_v2 codec[]; 150462306a36Sopenharmony_ci} __packed; 150562306a36Sopenharmony_ci 150662306a36Sopenharmony_cistruct hci_rp_read_local_supported_codecs_v2 { 150762306a36Sopenharmony_ci __u8 status; 150862306a36Sopenharmony_ci struct hci_std_codecs_v2 std_codecs; 150962306a36Sopenharmony_ci struct hci_vnd_codecs_v2 vendor_codecs; 151062306a36Sopenharmony_ci} __packed; 151162306a36Sopenharmony_ci 151262306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_CODEC_CAPS 0x100e 151362306a36Sopenharmony_cistruct hci_op_read_local_codec_caps { 151462306a36Sopenharmony_ci __u8 id; 151562306a36Sopenharmony_ci __le16 cid; 151662306a36Sopenharmony_ci __le16 vid; 151762306a36Sopenharmony_ci __u8 transport; 151862306a36Sopenharmony_ci __u8 direction; 151962306a36Sopenharmony_ci} __packed; 152062306a36Sopenharmony_ci 152162306a36Sopenharmony_cistruct hci_codec_caps { 152262306a36Sopenharmony_ci __u8 len; 152362306a36Sopenharmony_ci __u8 data[]; 152462306a36Sopenharmony_ci} __packed; 152562306a36Sopenharmony_ci 152662306a36Sopenharmony_cistruct hci_rp_read_local_codec_caps { 152762306a36Sopenharmony_ci __u8 status; 152862306a36Sopenharmony_ci __u8 num_caps; 152962306a36Sopenharmony_ci} __packed; 153062306a36Sopenharmony_ci 153162306a36Sopenharmony_ci#define HCI_OP_READ_PAGE_SCAN_ACTIVITY 0x0c1b 153262306a36Sopenharmony_cistruct hci_rp_read_page_scan_activity { 153362306a36Sopenharmony_ci __u8 status; 153462306a36Sopenharmony_ci __le16 interval; 153562306a36Sopenharmony_ci __le16 window; 153662306a36Sopenharmony_ci} __packed; 153762306a36Sopenharmony_ci 153862306a36Sopenharmony_ci#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c 153962306a36Sopenharmony_cistruct hci_cp_write_page_scan_activity { 154062306a36Sopenharmony_ci __le16 interval; 154162306a36Sopenharmony_ci __le16 window; 154262306a36Sopenharmony_ci} __packed; 154362306a36Sopenharmony_ci 154462306a36Sopenharmony_ci#define HCI_OP_READ_TX_POWER 0x0c2d 154562306a36Sopenharmony_cistruct hci_cp_read_tx_power { 154662306a36Sopenharmony_ci __le16 handle; 154762306a36Sopenharmony_ci __u8 type; 154862306a36Sopenharmony_ci} __packed; 154962306a36Sopenharmony_cistruct hci_rp_read_tx_power { 155062306a36Sopenharmony_ci __u8 status; 155162306a36Sopenharmony_ci __le16 handle; 155262306a36Sopenharmony_ci __s8 tx_power; 155362306a36Sopenharmony_ci} __packed; 155462306a36Sopenharmony_ci 155562306a36Sopenharmony_ci#define HCI_OP_READ_PAGE_SCAN_TYPE 0x0c46 155662306a36Sopenharmony_cistruct hci_rp_read_page_scan_type { 155762306a36Sopenharmony_ci __u8 status; 155862306a36Sopenharmony_ci __u8 type; 155962306a36Sopenharmony_ci} __packed; 156062306a36Sopenharmony_ci 156162306a36Sopenharmony_ci#define HCI_OP_WRITE_PAGE_SCAN_TYPE 0x0c47 156262306a36Sopenharmony_ci #define PAGE_SCAN_TYPE_STANDARD 0x00 156362306a36Sopenharmony_ci #define PAGE_SCAN_TYPE_INTERLACED 0x01 156462306a36Sopenharmony_ci 156562306a36Sopenharmony_ci#define HCI_OP_READ_RSSI 0x1405 156662306a36Sopenharmony_cistruct hci_cp_read_rssi { 156762306a36Sopenharmony_ci __le16 handle; 156862306a36Sopenharmony_ci} __packed; 156962306a36Sopenharmony_cistruct hci_rp_read_rssi { 157062306a36Sopenharmony_ci __u8 status; 157162306a36Sopenharmony_ci __le16 handle; 157262306a36Sopenharmony_ci __s8 rssi; 157362306a36Sopenharmony_ci} __packed; 157462306a36Sopenharmony_ci 157562306a36Sopenharmony_ci#define HCI_OP_READ_CLOCK 0x1407 157662306a36Sopenharmony_cistruct hci_cp_read_clock { 157762306a36Sopenharmony_ci __le16 handle; 157862306a36Sopenharmony_ci __u8 which; 157962306a36Sopenharmony_ci} __packed; 158062306a36Sopenharmony_cistruct hci_rp_read_clock { 158162306a36Sopenharmony_ci __u8 status; 158262306a36Sopenharmony_ci __le16 handle; 158362306a36Sopenharmony_ci __le32 clock; 158462306a36Sopenharmony_ci __le16 accuracy; 158562306a36Sopenharmony_ci} __packed; 158662306a36Sopenharmony_ci 158762306a36Sopenharmony_ci#define HCI_OP_READ_ENC_KEY_SIZE 0x1408 158862306a36Sopenharmony_cistruct hci_cp_read_enc_key_size { 158962306a36Sopenharmony_ci __le16 handle; 159062306a36Sopenharmony_ci} __packed; 159162306a36Sopenharmony_cistruct hci_rp_read_enc_key_size { 159262306a36Sopenharmony_ci __u8 status; 159362306a36Sopenharmony_ci __le16 handle; 159462306a36Sopenharmony_ci __u8 key_size; 159562306a36Sopenharmony_ci} __packed; 159662306a36Sopenharmony_ci 159762306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_AMP_INFO 0x1409 159862306a36Sopenharmony_cistruct hci_rp_read_local_amp_info { 159962306a36Sopenharmony_ci __u8 status; 160062306a36Sopenharmony_ci __u8 amp_status; 160162306a36Sopenharmony_ci __le32 total_bw; 160262306a36Sopenharmony_ci __le32 max_bw; 160362306a36Sopenharmony_ci __le32 min_latency; 160462306a36Sopenharmony_ci __le32 max_pdu; 160562306a36Sopenharmony_ci __u8 amp_type; 160662306a36Sopenharmony_ci __le16 pal_cap; 160762306a36Sopenharmony_ci __le16 max_assoc_size; 160862306a36Sopenharmony_ci __le32 max_flush_to; 160962306a36Sopenharmony_ci __le32 be_flush_to; 161062306a36Sopenharmony_ci} __packed; 161162306a36Sopenharmony_ci 161262306a36Sopenharmony_ci#define HCI_OP_READ_LOCAL_AMP_ASSOC 0x140a 161362306a36Sopenharmony_cistruct hci_cp_read_local_amp_assoc { 161462306a36Sopenharmony_ci __u8 phy_handle; 161562306a36Sopenharmony_ci __le16 len_so_far; 161662306a36Sopenharmony_ci __le16 max_len; 161762306a36Sopenharmony_ci} __packed; 161862306a36Sopenharmony_cistruct hci_rp_read_local_amp_assoc { 161962306a36Sopenharmony_ci __u8 status; 162062306a36Sopenharmony_ci __u8 phy_handle; 162162306a36Sopenharmony_ci __le16 rem_len; 162262306a36Sopenharmony_ci __u8 frag[]; 162362306a36Sopenharmony_ci} __packed; 162462306a36Sopenharmony_ci 162562306a36Sopenharmony_ci#define HCI_OP_WRITE_REMOTE_AMP_ASSOC 0x140b 162662306a36Sopenharmony_cistruct hci_cp_write_remote_amp_assoc { 162762306a36Sopenharmony_ci __u8 phy_handle; 162862306a36Sopenharmony_ci __le16 len_so_far; 162962306a36Sopenharmony_ci __le16 rem_len; 163062306a36Sopenharmony_ci __u8 frag[]; 163162306a36Sopenharmony_ci} __packed; 163262306a36Sopenharmony_cistruct hci_rp_write_remote_amp_assoc { 163362306a36Sopenharmony_ci __u8 status; 163462306a36Sopenharmony_ci __u8 phy_handle; 163562306a36Sopenharmony_ci} __packed; 163662306a36Sopenharmony_ci 163762306a36Sopenharmony_ci#define HCI_OP_GET_MWS_TRANSPORT_CONFIG 0x140c 163862306a36Sopenharmony_ci 163962306a36Sopenharmony_ci#define HCI_OP_ENABLE_DUT_MODE 0x1803 164062306a36Sopenharmony_ci 164162306a36Sopenharmony_ci#define HCI_OP_WRITE_SSP_DEBUG_MODE 0x1804 164262306a36Sopenharmony_ci 164362306a36Sopenharmony_ci#define HCI_OP_LE_SET_EVENT_MASK 0x2001 164462306a36Sopenharmony_cistruct hci_cp_le_set_event_mask { 164562306a36Sopenharmony_ci __u8 mask[8]; 164662306a36Sopenharmony_ci} __packed; 164762306a36Sopenharmony_ci 164862306a36Sopenharmony_ci#define HCI_OP_LE_READ_BUFFER_SIZE 0x2002 164962306a36Sopenharmony_cistruct hci_rp_le_read_buffer_size { 165062306a36Sopenharmony_ci __u8 status; 165162306a36Sopenharmony_ci __le16 le_mtu; 165262306a36Sopenharmony_ci __u8 le_max_pkt; 165362306a36Sopenharmony_ci} __packed; 165462306a36Sopenharmony_ci 165562306a36Sopenharmony_ci#define HCI_OP_LE_READ_LOCAL_FEATURES 0x2003 165662306a36Sopenharmony_cistruct hci_rp_le_read_local_features { 165762306a36Sopenharmony_ci __u8 status; 165862306a36Sopenharmony_ci __u8 features[8]; 165962306a36Sopenharmony_ci} __packed; 166062306a36Sopenharmony_ci 166162306a36Sopenharmony_ci#define HCI_OP_LE_SET_RANDOM_ADDR 0x2005 166262306a36Sopenharmony_ci 166362306a36Sopenharmony_ci#define HCI_OP_LE_SET_ADV_PARAM 0x2006 166462306a36Sopenharmony_cistruct hci_cp_le_set_adv_param { 166562306a36Sopenharmony_ci __le16 min_interval; 166662306a36Sopenharmony_ci __le16 max_interval; 166762306a36Sopenharmony_ci __u8 type; 166862306a36Sopenharmony_ci __u8 own_address_type; 166962306a36Sopenharmony_ci __u8 direct_addr_type; 167062306a36Sopenharmony_ci bdaddr_t direct_addr; 167162306a36Sopenharmony_ci __u8 channel_map; 167262306a36Sopenharmony_ci __u8 filter_policy; 167362306a36Sopenharmony_ci} __packed; 167462306a36Sopenharmony_ci 167562306a36Sopenharmony_ci#define HCI_OP_LE_READ_ADV_TX_POWER 0x2007 167662306a36Sopenharmony_cistruct hci_rp_le_read_adv_tx_power { 167762306a36Sopenharmony_ci __u8 status; 167862306a36Sopenharmony_ci __s8 tx_power; 167962306a36Sopenharmony_ci} __packed; 168062306a36Sopenharmony_ci 168162306a36Sopenharmony_ci#define HCI_MAX_AD_LENGTH 31 168262306a36Sopenharmony_ci 168362306a36Sopenharmony_ci#define HCI_OP_LE_SET_ADV_DATA 0x2008 168462306a36Sopenharmony_cistruct hci_cp_le_set_adv_data { 168562306a36Sopenharmony_ci __u8 length; 168662306a36Sopenharmony_ci __u8 data[HCI_MAX_AD_LENGTH]; 168762306a36Sopenharmony_ci} __packed; 168862306a36Sopenharmony_ci 168962306a36Sopenharmony_ci#define HCI_OP_LE_SET_SCAN_RSP_DATA 0x2009 169062306a36Sopenharmony_cistruct hci_cp_le_set_scan_rsp_data { 169162306a36Sopenharmony_ci __u8 length; 169262306a36Sopenharmony_ci __u8 data[HCI_MAX_AD_LENGTH]; 169362306a36Sopenharmony_ci} __packed; 169462306a36Sopenharmony_ci 169562306a36Sopenharmony_ci#define HCI_OP_LE_SET_ADV_ENABLE 0x200a 169662306a36Sopenharmony_ci 169762306a36Sopenharmony_ci#define LE_SCAN_PASSIVE 0x00 169862306a36Sopenharmony_ci#define LE_SCAN_ACTIVE 0x01 169962306a36Sopenharmony_ci 170062306a36Sopenharmony_ci#define HCI_OP_LE_SET_SCAN_PARAM 0x200b 170162306a36Sopenharmony_cistruct hci_cp_le_set_scan_param { 170262306a36Sopenharmony_ci __u8 type; 170362306a36Sopenharmony_ci __le16 interval; 170462306a36Sopenharmony_ci __le16 window; 170562306a36Sopenharmony_ci __u8 own_address_type; 170662306a36Sopenharmony_ci __u8 filter_policy; 170762306a36Sopenharmony_ci} __packed; 170862306a36Sopenharmony_ci 170962306a36Sopenharmony_ci#define LE_SCAN_DISABLE 0x00 171062306a36Sopenharmony_ci#define LE_SCAN_ENABLE 0x01 171162306a36Sopenharmony_ci#define LE_SCAN_FILTER_DUP_DISABLE 0x00 171262306a36Sopenharmony_ci#define LE_SCAN_FILTER_DUP_ENABLE 0x01 171362306a36Sopenharmony_ci 171462306a36Sopenharmony_ci#define HCI_OP_LE_SET_SCAN_ENABLE 0x200c 171562306a36Sopenharmony_cistruct hci_cp_le_set_scan_enable { 171662306a36Sopenharmony_ci __u8 enable; 171762306a36Sopenharmony_ci __u8 filter_dup; 171862306a36Sopenharmony_ci} __packed; 171962306a36Sopenharmony_ci 172062306a36Sopenharmony_ci#define HCI_LE_USE_PEER_ADDR 0x00 172162306a36Sopenharmony_ci#define HCI_LE_USE_ACCEPT_LIST 0x01 172262306a36Sopenharmony_ci 172362306a36Sopenharmony_ci#define HCI_OP_LE_CREATE_CONN 0x200d 172462306a36Sopenharmony_cistruct hci_cp_le_create_conn { 172562306a36Sopenharmony_ci __le16 scan_interval; 172662306a36Sopenharmony_ci __le16 scan_window; 172762306a36Sopenharmony_ci __u8 filter_policy; 172862306a36Sopenharmony_ci __u8 peer_addr_type; 172962306a36Sopenharmony_ci bdaddr_t peer_addr; 173062306a36Sopenharmony_ci __u8 own_address_type; 173162306a36Sopenharmony_ci __le16 conn_interval_min; 173262306a36Sopenharmony_ci __le16 conn_interval_max; 173362306a36Sopenharmony_ci __le16 conn_latency; 173462306a36Sopenharmony_ci __le16 supervision_timeout; 173562306a36Sopenharmony_ci __le16 min_ce_len; 173662306a36Sopenharmony_ci __le16 max_ce_len; 173762306a36Sopenharmony_ci} __packed; 173862306a36Sopenharmony_ci 173962306a36Sopenharmony_ci#define HCI_OP_LE_CREATE_CONN_CANCEL 0x200e 174062306a36Sopenharmony_ci 174162306a36Sopenharmony_ci#define HCI_OP_LE_READ_ACCEPT_LIST_SIZE 0x200f 174262306a36Sopenharmony_cistruct hci_rp_le_read_accept_list_size { 174362306a36Sopenharmony_ci __u8 status; 174462306a36Sopenharmony_ci __u8 size; 174562306a36Sopenharmony_ci} __packed; 174662306a36Sopenharmony_ci 174762306a36Sopenharmony_ci#define HCI_OP_LE_CLEAR_ACCEPT_LIST 0x2010 174862306a36Sopenharmony_ci 174962306a36Sopenharmony_ci#define HCI_OP_LE_ADD_TO_ACCEPT_LIST 0x2011 175062306a36Sopenharmony_cistruct hci_cp_le_add_to_accept_list { 175162306a36Sopenharmony_ci __u8 bdaddr_type; 175262306a36Sopenharmony_ci bdaddr_t bdaddr; 175362306a36Sopenharmony_ci} __packed; 175462306a36Sopenharmony_ci 175562306a36Sopenharmony_ci#define HCI_OP_LE_DEL_FROM_ACCEPT_LIST 0x2012 175662306a36Sopenharmony_cistruct hci_cp_le_del_from_accept_list { 175762306a36Sopenharmony_ci __u8 bdaddr_type; 175862306a36Sopenharmony_ci bdaddr_t bdaddr; 175962306a36Sopenharmony_ci} __packed; 176062306a36Sopenharmony_ci 176162306a36Sopenharmony_ci#define HCI_OP_LE_CONN_UPDATE 0x2013 176262306a36Sopenharmony_cistruct hci_cp_le_conn_update { 176362306a36Sopenharmony_ci __le16 handle; 176462306a36Sopenharmony_ci __le16 conn_interval_min; 176562306a36Sopenharmony_ci __le16 conn_interval_max; 176662306a36Sopenharmony_ci __le16 conn_latency; 176762306a36Sopenharmony_ci __le16 supervision_timeout; 176862306a36Sopenharmony_ci __le16 min_ce_len; 176962306a36Sopenharmony_ci __le16 max_ce_len; 177062306a36Sopenharmony_ci} __packed; 177162306a36Sopenharmony_ci 177262306a36Sopenharmony_ci#define HCI_OP_LE_READ_REMOTE_FEATURES 0x2016 177362306a36Sopenharmony_cistruct hci_cp_le_read_remote_features { 177462306a36Sopenharmony_ci __le16 handle; 177562306a36Sopenharmony_ci} __packed; 177662306a36Sopenharmony_ci 177762306a36Sopenharmony_ci#define HCI_OP_LE_START_ENC 0x2019 177862306a36Sopenharmony_cistruct hci_cp_le_start_enc { 177962306a36Sopenharmony_ci __le16 handle; 178062306a36Sopenharmony_ci __le64 rand; 178162306a36Sopenharmony_ci __le16 ediv; 178262306a36Sopenharmony_ci __u8 ltk[16]; 178362306a36Sopenharmony_ci} __packed; 178462306a36Sopenharmony_ci 178562306a36Sopenharmony_ci#define HCI_OP_LE_LTK_REPLY 0x201a 178662306a36Sopenharmony_cistruct hci_cp_le_ltk_reply { 178762306a36Sopenharmony_ci __le16 handle; 178862306a36Sopenharmony_ci __u8 ltk[16]; 178962306a36Sopenharmony_ci} __packed; 179062306a36Sopenharmony_cistruct hci_rp_le_ltk_reply { 179162306a36Sopenharmony_ci __u8 status; 179262306a36Sopenharmony_ci __le16 handle; 179362306a36Sopenharmony_ci} __packed; 179462306a36Sopenharmony_ci 179562306a36Sopenharmony_ci#define HCI_OP_LE_LTK_NEG_REPLY 0x201b 179662306a36Sopenharmony_cistruct hci_cp_le_ltk_neg_reply { 179762306a36Sopenharmony_ci __le16 handle; 179862306a36Sopenharmony_ci} __packed; 179962306a36Sopenharmony_cistruct hci_rp_le_ltk_neg_reply { 180062306a36Sopenharmony_ci __u8 status; 180162306a36Sopenharmony_ci __le16 handle; 180262306a36Sopenharmony_ci} __packed; 180362306a36Sopenharmony_ci 180462306a36Sopenharmony_ci#define HCI_OP_LE_READ_SUPPORTED_STATES 0x201c 180562306a36Sopenharmony_cistruct hci_rp_le_read_supported_states { 180662306a36Sopenharmony_ci __u8 status; 180762306a36Sopenharmony_ci __u8 le_states[8]; 180862306a36Sopenharmony_ci} __packed; 180962306a36Sopenharmony_ci 181062306a36Sopenharmony_ci#define HCI_OP_LE_CONN_PARAM_REQ_REPLY 0x2020 181162306a36Sopenharmony_cistruct hci_cp_le_conn_param_req_reply { 181262306a36Sopenharmony_ci __le16 handle; 181362306a36Sopenharmony_ci __le16 interval_min; 181462306a36Sopenharmony_ci __le16 interval_max; 181562306a36Sopenharmony_ci __le16 latency; 181662306a36Sopenharmony_ci __le16 timeout; 181762306a36Sopenharmony_ci __le16 min_ce_len; 181862306a36Sopenharmony_ci __le16 max_ce_len; 181962306a36Sopenharmony_ci} __packed; 182062306a36Sopenharmony_ci 182162306a36Sopenharmony_ci#define HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY 0x2021 182262306a36Sopenharmony_cistruct hci_cp_le_conn_param_req_neg_reply { 182362306a36Sopenharmony_ci __le16 handle; 182462306a36Sopenharmony_ci __u8 reason; 182562306a36Sopenharmony_ci} __packed; 182662306a36Sopenharmony_ci 182762306a36Sopenharmony_ci#define HCI_OP_LE_SET_DATA_LEN 0x2022 182862306a36Sopenharmony_cistruct hci_cp_le_set_data_len { 182962306a36Sopenharmony_ci __le16 handle; 183062306a36Sopenharmony_ci __le16 tx_len; 183162306a36Sopenharmony_ci __le16 tx_time; 183262306a36Sopenharmony_ci} __packed; 183362306a36Sopenharmony_cistruct hci_rp_le_set_data_len { 183462306a36Sopenharmony_ci __u8 status; 183562306a36Sopenharmony_ci __le16 handle; 183662306a36Sopenharmony_ci} __packed; 183762306a36Sopenharmony_ci 183862306a36Sopenharmony_ci#define HCI_OP_LE_READ_DEF_DATA_LEN 0x2023 183962306a36Sopenharmony_cistruct hci_rp_le_read_def_data_len { 184062306a36Sopenharmony_ci __u8 status; 184162306a36Sopenharmony_ci __le16 tx_len; 184262306a36Sopenharmony_ci __le16 tx_time; 184362306a36Sopenharmony_ci} __packed; 184462306a36Sopenharmony_ci 184562306a36Sopenharmony_ci#define HCI_OP_LE_WRITE_DEF_DATA_LEN 0x2024 184662306a36Sopenharmony_cistruct hci_cp_le_write_def_data_len { 184762306a36Sopenharmony_ci __le16 tx_len; 184862306a36Sopenharmony_ci __le16 tx_time; 184962306a36Sopenharmony_ci} __packed; 185062306a36Sopenharmony_ci 185162306a36Sopenharmony_ci#define HCI_OP_LE_ADD_TO_RESOLV_LIST 0x2027 185262306a36Sopenharmony_cistruct hci_cp_le_add_to_resolv_list { 185362306a36Sopenharmony_ci __u8 bdaddr_type; 185462306a36Sopenharmony_ci bdaddr_t bdaddr; 185562306a36Sopenharmony_ci __u8 peer_irk[16]; 185662306a36Sopenharmony_ci __u8 local_irk[16]; 185762306a36Sopenharmony_ci} __packed; 185862306a36Sopenharmony_ci 185962306a36Sopenharmony_ci#define HCI_OP_LE_DEL_FROM_RESOLV_LIST 0x2028 186062306a36Sopenharmony_cistruct hci_cp_le_del_from_resolv_list { 186162306a36Sopenharmony_ci __u8 bdaddr_type; 186262306a36Sopenharmony_ci bdaddr_t bdaddr; 186362306a36Sopenharmony_ci} __packed; 186462306a36Sopenharmony_ci 186562306a36Sopenharmony_ci#define HCI_OP_LE_CLEAR_RESOLV_LIST 0x2029 186662306a36Sopenharmony_ci 186762306a36Sopenharmony_ci#define HCI_OP_LE_READ_RESOLV_LIST_SIZE 0x202a 186862306a36Sopenharmony_cistruct hci_rp_le_read_resolv_list_size { 186962306a36Sopenharmony_ci __u8 status; 187062306a36Sopenharmony_ci __u8 size; 187162306a36Sopenharmony_ci} __packed; 187262306a36Sopenharmony_ci 187362306a36Sopenharmony_ci#define HCI_OP_LE_SET_ADDR_RESOLV_ENABLE 0x202d 187462306a36Sopenharmony_ci 187562306a36Sopenharmony_ci#define HCI_OP_LE_SET_RPA_TIMEOUT 0x202e 187662306a36Sopenharmony_ci 187762306a36Sopenharmony_ci#define HCI_OP_LE_READ_MAX_DATA_LEN 0x202f 187862306a36Sopenharmony_cistruct hci_rp_le_read_max_data_len { 187962306a36Sopenharmony_ci __u8 status; 188062306a36Sopenharmony_ci __le16 tx_len; 188162306a36Sopenharmony_ci __le16 tx_time; 188262306a36Sopenharmony_ci __le16 rx_len; 188362306a36Sopenharmony_ci __le16 rx_time; 188462306a36Sopenharmony_ci} __packed; 188562306a36Sopenharmony_ci 188662306a36Sopenharmony_ci#define HCI_OP_LE_SET_DEFAULT_PHY 0x2031 188762306a36Sopenharmony_cistruct hci_cp_le_set_default_phy { 188862306a36Sopenharmony_ci __u8 all_phys; 188962306a36Sopenharmony_ci __u8 tx_phys; 189062306a36Sopenharmony_ci __u8 rx_phys; 189162306a36Sopenharmony_ci} __packed; 189262306a36Sopenharmony_ci 189362306a36Sopenharmony_ci#define HCI_LE_SET_PHY_1M 0x01 189462306a36Sopenharmony_ci#define HCI_LE_SET_PHY_2M 0x02 189562306a36Sopenharmony_ci#define HCI_LE_SET_PHY_CODED 0x04 189662306a36Sopenharmony_ci 189762306a36Sopenharmony_ci#define HCI_OP_LE_SET_EXT_SCAN_PARAMS 0x2041 189862306a36Sopenharmony_cistruct hci_cp_le_set_ext_scan_params { 189962306a36Sopenharmony_ci __u8 own_addr_type; 190062306a36Sopenharmony_ci __u8 filter_policy; 190162306a36Sopenharmony_ci __u8 scanning_phys; 190262306a36Sopenharmony_ci __u8 data[]; 190362306a36Sopenharmony_ci} __packed; 190462306a36Sopenharmony_ci 190562306a36Sopenharmony_ci#define LE_SCAN_PHY_1M 0x01 190662306a36Sopenharmony_ci#define LE_SCAN_PHY_2M 0x02 190762306a36Sopenharmony_ci#define LE_SCAN_PHY_CODED 0x04 190862306a36Sopenharmony_ci 190962306a36Sopenharmony_cistruct hci_cp_le_scan_phy_params { 191062306a36Sopenharmony_ci __u8 type; 191162306a36Sopenharmony_ci __le16 interval; 191262306a36Sopenharmony_ci __le16 window; 191362306a36Sopenharmony_ci} __packed; 191462306a36Sopenharmony_ci 191562306a36Sopenharmony_ci#define HCI_OP_LE_SET_EXT_SCAN_ENABLE 0x2042 191662306a36Sopenharmony_cistruct hci_cp_le_set_ext_scan_enable { 191762306a36Sopenharmony_ci __u8 enable; 191862306a36Sopenharmony_ci __u8 filter_dup; 191962306a36Sopenharmony_ci __le16 duration; 192062306a36Sopenharmony_ci __le16 period; 192162306a36Sopenharmony_ci} __packed; 192262306a36Sopenharmony_ci 192362306a36Sopenharmony_ci#define HCI_OP_LE_EXT_CREATE_CONN 0x2043 192462306a36Sopenharmony_cistruct hci_cp_le_ext_create_conn { 192562306a36Sopenharmony_ci __u8 filter_policy; 192662306a36Sopenharmony_ci __u8 own_addr_type; 192762306a36Sopenharmony_ci __u8 peer_addr_type; 192862306a36Sopenharmony_ci bdaddr_t peer_addr; 192962306a36Sopenharmony_ci __u8 phys; 193062306a36Sopenharmony_ci __u8 data[]; 193162306a36Sopenharmony_ci} __packed; 193262306a36Sopenharmony_ci 193362306a36Sopenharmony_cistruct hci_cp_le_ext_conn_param { 193462306a36Sopenharmony_ci __le16 scan_interval; 193562306a36Sopenharmony_ci __le16 scan_window; 193662306a36Sopenharmony_ci __le16 conn_interval_min; 193762306a36Sopenharmony_ci __le16 conn_interval_max; 193862306a36Sopenharmony_ci __le16 conn_latency; 193962306a36Sopenharmony_ci __le16 supervision_timeout; 194062306a36Sopenharmony_ci __le16 min_ce_len; 194162306a36Sopenharmony_ci __le16 max_ce_len; 194262306a36Sopenharmony_ci} __packed; 194362306a36Sopenharmony_ci 194462306a36Sopenharmony_ci#define HCI_OP_LE_PA_CREATE_SYNC 0x2044 194562306a36Sopenharmony_cistruct hci_cp_le_pa_create_sync { 194662306a36Sopenharmony_ci __u8 options; 194762306a36Sopenharmony_ci __u8 sid; 194862306a36Sopenharmony_ci __u8 addr_type; 194962306a36Sopenharmony_ci bdaddr_t addr; 195062306a36Sopenharmony_ci __le16 skip; 195162306a36Sopenharmony_ci __le16 sync_timeout; 195262306a36Sopenharmony_ci __u8 sync_cte_type; 195362306a36Sopenharmony_ci} __packed; 195462306a36Sopenharmony_ci 195562306a36Sopenharmony_ci#define HCI_OP_LE_PA_TERM_SYNC 0x2046 195662306a36Sopenharmony_cistruct hci_cp_le_pa_term_sync { 195762306a36Sopenharmony_ci __le16 handle; 195862306a36Sopenharmony_ci} __packed; 195962306a36Sopenharmony_ci 196062306a36Sopenharmony_ci#define HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS 0x203b 196162306a36Sopenharmony_cistruct hci_rp_le_read_num_supported_adv_sets { 196262306a36Sopenharmony_ci __u8 status; 196362306a36Sopenharmony_ci __u8 num_of_sets; 196462306a36Sopenharmony_ci} __packed; 196562306a36Sopenharmony_ci 196662306a36Sopenharmony_ci#define HCI_OP_LE_SET_EXT_ADV_PARAMS 0x2036 196762306a36Sopenharmony_cistruct hci_cp_le_set_ext_adv_params { 196862306a36Sopenharmony_ci __u8 handle; 196962306a36Sopenharmony_ci __le16 evt_properties; 197062306a36Sopenharmony_ci __u8 min_interval[3]; 197162306a36Sopenharmony_ci __u8 max_interval[3]; 197262306a36Sopenharmony_ci __u8 channel_map; 197362306a36Sopenharmony_ci __u8 own_addr_type; 197462306a36Sopenharmony_ci __u8 peer_addr_type; 197562306a36Sopenharmony_ci bdaddr_t peer_addr; 197662306a36Sopenharmony_ci __u8 filter_policy; 197762306a36Sopenharmony_ci __u8 tx_power; 197862306a36Sopenharmony_ci __u8 primary_phy; 197962306a36Sopenharmony_ci __u8 secondary_max_skip; 198062306a36Sopenharmony_ci __u8 secondary_phy; 198162306a36Sopenharmony_ci __u8 sid; 198262306a36Sopenharmony_ci __u8 notif_enable; 198362306a36Sopenharmony_ci} __packed; 198462306a36Sopenharmony_ci 198562306a36Sopenharmony_ci#define HCI_ADV_PHY_1M 0X01 198662306a36Sopenharmony_ci#define HCI_ADV_PHY_2M 0x02 198762306a36Sopenharmony_ci#define HCI_ADV_PHY_CODED 0x03 198862306a36Sopenharmony_ci 198962306a36Sopenharmony_cistruct hci_rp_le_set_ext_adv_params { 199062306a36Sopenharmony_ci __u8 status; 199162306a36Sopenharmony_ci __u8 tx_power; 199262306a36Sopenharmony_ci} __packed; 199362306a36Sopenharmony_ci 199462306a36Sopenharmony_cistruct hci_cp_ext_adv_set { 199562306a36Sopenharmony_ci __u8 handle; 199662306a36Sopenharmony_ci __le16 duration; 199762306a36Sopenharmony_ci __u8 max_events; 199862306a36Sopenharmony_ci} __packed; 199962306a36Sopenharmony_ci 200062306a36Sopenharmony_ci#define HCI_MAX_EXT_AD_LENGTH 251 200162306a36Sopenharmony_ci 200262306a36Sopenharmony_ci#define HCI_OP_LE_SET_EXT_ADV_DATA 0x2037 200362306a36Sopenharmony_cistruct hci_cp_le_set_ext_adv_data { 200462306a36Sopenharmony_ci __u8 handle; 200562306a36Sopenharmony_ci __u8 operation; 200662306a36Sopenharmony_ci __u8 frag_pref; 200762306a36Sopenharmony_ci __u8 length; 200862306a36Sopenharmony_ci __u8 data[]; 200962306a36Sopenharmony_ci} __packed; 201062306a36Sopenharmony_ci 201162306a36Sopenharmony_ci#define HCI_OP_LE_SET_EXT_SCAN_RSP_DATA 0x2038 201262306a36Sopenharmony_cistruct hci_cp_le_set_ext_scan_rsp_data { 201362306a36Sopenharmony_ci __u8 handle; 201462306a36Sopenharmony_ci __u8 operation; 201562306a36Sopenharmony_ci __u8 frag_pref; 201662306a36Sopenharmony_ci __u8 length; 201762306a36Sopenharmony_ci __u8 data[]; 201862306a36Sopenharmony_ci} __packed; 201962306a36Sopenharmony_ci 202062306a36Sopenharmony_ci#define HCI_OP_LE_SET_EXT_ADV_ENABLE 0x2039 202162306a36Sopenharmony_cistruct hci_cp_le_set_ext_adv_enable { 202262306a36Sopenharmony_ci __u8 enable; 202362306a36Sopenharmony_ci __u8 num_of_sets; 202462306a36Sopenharmony_ci __u8 data[]; 202562306a36Sopenharmony_ci} __packed; 202662306a36Sopenharmony_ci 202762306a36Sopenharmony_ci#define HCI_OP_LE_SET_PER_ADV_PARAMS 0x203e 202862306a36Sopenharmony_cistruct hci_cp_le_set_per_adv_params { 202962306a36Sopenharmony_ci __u8 handle; 203062306a36Sopenharmony_ci __le16 min_interval; 203162306a36Sopenharmony_ci __le16 max_interval; 203262306a36Sopenharmony_ci __le16 periodic_properties; 203362306a36Sopenharmony_ci} __packed; 203462306a36Sopenharmony_ci 203562306a36Sopenharmony_ci#define HCI_MAX_PER_AD_LENGTH 252 203662306a36Sopenharmony_ci 203762306a36Sopenharmony_ci#define HCI_OP_LE_SET_PER_ADV_DATA 0x203f 203862306a36Sopenharmony_cistruct hci_cp_le_set_per_adv_data { 203962306a36Sopenharmony_ci __u8 handle; 204062306a36Sopenharmony_ci __u8 operation; 204162306a36Sopenharmony_ci __u8 length; 204262306a36Sopenharmony_ci __u8 data[]; 204362306a36Sopenharmony_ci} __packed; 204462306a36Sopenharmony_ci 204562306a36Sopenharmony_ci#define HCI_OP_LE_SET_PER_ADV_ENABLE 0x2040 204662306a36Sopenharmony_cistruct hci_cp_le_set_per_adv_enable { 204762306a36Sopenharmony_ci __u8 enable; 204862306a36Sopenharmony_ci __u8 handle; 204962306a36Sopenharmony_ci} __packed; 205062306a36Sopenharmony_ci 205162306a36Sopenharmony_ci#define LE_SET_ADV_DATA_OP_COMPLETE 0x03 205262306a36Sopenharmony_ci 205362306a36Sopenharmony_ci#define LE_SET_ADV_DATA_NO_FRAG 0x01 205462306a36Sopenharmony_ci 205562306a36Sopenharmony_ci#define HCI_OP_LE_REMOVE_ADV_SET 0x203c 205662306a36Sopenharmony_ci 205762306a36Sopenharmony_ci#define HCI_OP_LE_CLEAR_ADV_SETS 0x203d 205862306a36Sopenharmony_ci 205962306a36Sopenharmony_ci#define HCI_OP_LE_SET_ADV_SET_RAND_ADDR 0x2035 206062306a36Sopenharmony_cistruct hci_cp_le_set_adv_set_rand_addr { 206162306a36Sopenharmony_ci __u8 handle; 206262306a36Sopenharmony_ci bdaddr_t bdaddr; 206362306a36Sopenharmony_ci} __packed; 206462306a36Sopenharmony_ci 206562306a36Sopenharmony_ci#define HCI_OP_LE_READ_TRANSMIT_POWER 0x204b 206662306a36Sopenharmony_cistruct hci_rp_le_read_transmit_power { 206762306a36Sopenharmony_ci __u8 status; 206862306a36Sopenharmony_ci __s8 min_le_tx_power; 206962306a36Sopenharmony_ci __s8 max_le_tx_power; 207062306a36Sopenharmony_ci} __packed; 207162306a36Sopenharmony_ci 207262306a36Sopenharmony_ci#define HCI_NETWORK_PRIVACY 0x00 207362306a36Sopenharmony_ci#define HCI_DEVICE_PRIVACY 0x01 207462306a36Sopenharmony_ci 207562306a36Sopenharmony_ci#define HCI_OP_LE_SET_PRIVACY_MODE 0x204e 207662306a36Sopenharmony_cistruct hci_cp_le_set_privacy_mode { 207762306a36Sopenharmony_ci __u8 bdaddr_type; 207862306a36Sopenharmony_ci bdaddr_t bdaddr; 207962306a36Sopenharmony_ci __u8 mode; 208062306a36Sopenharmony_ci} __packed; 208162306a36Sopenharmony_ci 208262306a36Sopenharmony_ci#define HCI_OP_LE_READ_BUFFER_SIZE_V2 0x2060 208362306a36Sopenharmony_cistruct hci_rp_le_read_buffer_size_v2 { 208462306a36Sopenharmony_ci __u8 status; 208562306a36Sopenharmony_ci __le16 acl_mtu; 208662306a36Sopenharmony_ci __u8 acl_max_pkt; 208762306a36Sopenharmony_ci __le16 iso_mtu; 208862306a36Sopenharmony_ci __u8 iso_max_pkt; 208962306a36Sopenharmony_ci} __packed; 209062306a36Sopenharmony_ci 209162306a36Sopenharmony_ci#define HCI_OP_LE_READ_ISO_TX_SYNC 0x2061 209262306a36Sopenharmony_cistruct hci_cp_le_read_iso_tx_sync { 209362306a36Sopenharmony_ci __le16 handle; 209462306a36Sopenharmony_ci} __packed; 209562306a36Sopenharmony_ci 209662306a36Sopenharmony_cistruct hci_rp_le_read_iso_tx_sync { 209762306a36Sopenharmony_ci __u8 status; 209862306a36Sopenharmony_ci __le16 handle; 209962306a36Sopenharmony_ci __le16 seq; 210062306a36Sopenharmony_ci __le32 imestamp; 210162306a36Sopenharmony_ci __u8 offset[3]; 210262306a36Sopenharmony_ci} __packed; 210362306a36Sopenharmony_ci 210462306a36Sopenharmony_ci#define HCI_OP_LE_SET_CIG_PARAMS 0x2062 210562306a36Sopenharmony_cistruct hci_cis_params { 210662306a36Sopenharmony_ci __u8 cis_id; 210762306a36Sopenharmony_ci __le16 c_sdu; 210862306a36Sopenharmony_ci __le16 p_sdu; 210962306a36Sopenharmony_ci __u8 c_phy; 211062306a36Sopenharmony_ci __u8 p_phy; 211162306a36Sopenharmony_ci __u8 c_rtn; 211262306a36Sopenharmony_ci __u8 p_rtn; 211362306a36Sopenharmony_ci} __packed; 211462306a36Sopenharmony_ci 211562306a36Sopenharmony_cistruct hci_cp_le_set_cig_params { 211662306a36Sopenharmony_ci __u8 cig_id; 211762306a36Sopenharmony_ci __u8 c_interval[3]; 211862306a36Sopenharmony_ci __u8 p_interval[3]; 211962306a36Sopenharmony_ci __u8 sca; 212062306a36Sopenharmony_ci __u8 packing; 212162306a36Sopenharmony_ci __u8 framing; 212262306a36Sopenharmony_ci __le16 c_latency; 212362306a36Sopenharmony_ci __le16 p_latency; 212462306a36Sopenharmony_ci __u8 num_cis; 212562306a36Sopenharmony_ci struct hci_cis_params cis[]; 212662306a36Sopenharmony_ci} __packed; 212762306a36Sopenharmony_ci 212862306a36Sopenharmony_cistruct hci_rp_le_set_cig_params { 212962306a36Sopenharmony_ci __u8 status; 213062306a36Sopenharmony_ci __u8 cig_id; 213162306a36Sopenharmony_ci __u8 num_handles; 213262306a36Sopenharmony_ci __le16 handle[]; 213362306a36Sopenharmony_ci} __packed; 213462306a36Sopenharmony_ci 213562306a36Sopenharmony_ci#define HCI_OP_LE_CREATE_CIS 0x2064 213662306a36Sopenharmony_cistruct hci_cis { 213762306a36Sopenharmony_ci __le16 cis_handle; 213862306a36Sopenharmony_ci __le16 acl_handle; 213962306a36Sopenharmony_ci} __packed; 214062306a36Sopenharmony_ci 214162306a36Sopenharmony_cistruct hci_cp_le_create_cis { 214262306a36Sopenharmony_ci __u8 num_cis; 214362306a36Sopenharmony_ci struct hci_cis cis[]; 214462306a36Sopenharmony_ci} __packed; 214562306a36Sopenharmony_ci 214662306a36Sopenharmony_ci#define HCI_OP_LE_REMOVE_CIG 0x2065 214762306a36Sopenharmony_cistruct hci_cp_le_remove_cig { 214862306a36Sopenharmony_ci __u8 cig_id; 214962306a36Sopenharmony_ci} __packed; 215062306a36Sopenharmony_ci 215162306a36Sopenharmony_ci#define HCI_OP_LE_ACCEPT_CIS 0x2066 215262306a36Sopenharmony_cistruct hci_cp_le_accept_cis { 215362306a36Sopenharmony_ci __le16 handle; 215462306a36Sopenharmony_ci} __packed; 215562306a36Sopenharmony_ci 215662306a36Sopenharmony_ci#define HCI_OP_LE_REJECT_CIS 0x2067 215762306a36Sopenharmony_cistruct hci_cp_le_reject_cis { 215862306a36Sopenharmony_ci __le16 handle; 215962306a36Sopenharmony_ci __u8 reason; 216062306a36Sopenharmony_ci} __packed; 216162306a36Sopenharmony_ci 216262306a36Sopenharmony_ci#define HCI_OP_LE_CREATE_BIG 0x2068 216362306a36Sopenharmony_cistruct hci_bis { 216462306a36Sopenharmony_ci __u8 sdu_interval[3]; 216562306a36Sopenharmony_ci __le16 sdu; 216662306a36Sopenharmony_ci __le16 latency; 216762306a36Sopenharmony_ci __u8 rtn; 216862306a36Sopenharmony_ci __u8 phy; 216962306a36Sopenharmony_ci __u8 packing; 217062306a36Sopenharmony_ci __u8 framing; 217162306a36Sopenharmony_ci __u8 encryption; 217262306a36Sopenharmony_ci __u8 bcode[16]; 217362306a36Sopenharmony_ci} __packed; 217462306a36Sopenharmony_ci 217562306a36Sopenharmony_cistruct hci_cp_le_create_big { 217662306a36Sopenharmony_ci __u8 handle; 217762306a36Sopenharmony_ci __u8 adv_handle; 217862306a36Sopenharmony_ci __u8 num_bis; 217962306a36Sopenharmony_ci struct hci_bis bis; 218062306a36Sopenharmony_ci} __packed; 218162306a36Sopenharmony_ci 218262306a36Sopenharmony_ci#define HCI_OP_LE_TERM_BIG 0x206a 218362306a36Sopenharmony_cistruct hci_cp_le_term_big { 218462306a36Sopenharmony_ci __u8 handle; 218562306a36Sopenharmony_ci __u8 reason; 218662306a36Sopenharmony_ci} __packed; 218762306a36Sopenharmony_ci 218862306a36Sopenharmony_ci#define HCI_OP_LE_BIG_CREATE_SYNC 0x206b 218962306a36Sopenharmony_cistruct hci_cp_le_big_create_sync { 219062306a36Sopenharmony_ci __u8 handle; 219162306a36Sopenharmony_ci __le16 sync_handle; 219262306a36Sopenharmony_ci __u8 encryption; 219362306a36Sopenharmony_ci __u8 bcode[16]; 219462306a36Sopenharmony_ci __u8 mse; 219562306a36Sopenharmony_ci __le16 timeout; 219662306a36Sopenharmony_ci __u8 num_bis; 219762306a36Sopenharmony_ci __u8 bis[]; 219862306a36Sopenharmony_ci} __packed; 219962306a36Sopenharmony_ci 220062306a36Sopenharmony_ci#define HCI_OP_LE_BIG_TERM_SYNC 0x206c 220162306a36Sopenharmony_cistruct hci_cp_le_big_term_sync { 220262306a36Sopenharmony_ci __u8 handle; 220362306a36Sopenharmony_ci} __packed; 220462306a36Sopenharmony_ci 220562306a36Sopenharmony_ci#define HCI_OP_LE_SETUP_ISO_PATH 0x206e 220662306a36Sopenharmony_cistruct hci_cp_le_setup_iso_path { 220762306a36Sopenharmony_ci __le16 handle; 220862306a36Sopenharmony_ci __u8 direction; 220962306a36Sopenharmony_ci __u8 path; 221062306a36Sopenharmony_ci __u8 codec; 221162306a36Sopenharmony_ci __le16 codec_cid; 221262306a36Sopenharmony_ci __le16 codec_vid; 221362306a36Sopenharmony_ci __u8 delay[3]; 221462306a36Sopenharmony_ci __u8 codec_cfg_len; 221562306a36Sopenharmony_ci __u8 codec_cfg[]; 221662306a36Sopenharmony_ci} __packed; 221762306a36Sopenharmony_ci 221862306a36Sopenharmony_cistruct hci_rp_le_setup_iso_path { 221962306a36Sopenharmony_ci __u8 status; 222062306a36Sopenharmony_ci __le16 handle; 222162306a36Sopenharmony_ci} __packed; 222262306a36Sopenharmony_ci 222362306a36Sopenharmony_ci#define HCI_OP_LE_SET_HOST_FEATURE 0x2074 222462306a36Sopenharmony_cistruct hci_cp_le_set_host_feature { 222562306a36Sopenharmony_ci __u8 bit_number; 222662306a36Sopenharmony_ci __u8 bit_value; 222762306a36Sopenharmony_ci} __packed; 222862306a36Sopenharmony_ci 222962306a36Sopenharmony_ci/* ---- HCI Events ---- */ 223062306a36Sopenharmony_cistruct hci_ev_status { 223162306a36Sopenharmony_ci __u8 status; 223262306a36Sopenharmony_ci} __packed; 223362306a36Sopenharmony_ci 223462306a36Sopenharmony_ci#define HCI_EV_INQUIRY_COMPLETE 0x01 223562306a36Sopenharmony_ci 223662306a36Sopenharmony_ci#define HCI_EV_INQUIRY_RESULT 0x02 223762306a36Sopenharmony_cistruct inquiry_info { 223862306a36Sopenharmony_ci bdaddr_t bdaddr; 223962306a36Sopenharmony_ci __u8 pscan_rep_mode; 224062306a36Sopenharmony_ci __u8 pscan_period_mode; 224162306a36Sopenharmony_ci __u8 pscan_mode; 224262306a36Sopenharmony_ci __u8 dev_class[3]; 224362306a36Sopenharmony_ci __le16 clock_offset; 224462306a36Sopenharmony_ci} __packed; 224562306a36Sopenharmony_ci 224662306a36Sopenharmony_cistruct hci_ev_inquiry_result { 224762306a36Sopenharmony_ci __u8 num; 224862306a36Sopenharmony_ci struct inquiry_info info[]; 224962306a36Sopenharmony_ci}; 225062306a36Sopenharmony_ci 225162306a36Sopenharmony_ci#define HCI_EV_CONN_COMPLETE 0x03 225262306a36Sopenharmony_cistruct hci_ev_conn_complete { 225362306a36Sopenharmony_ci __u8 status; 225462306a36Sopenharmony_ci __le16 handle; 225562306a36Sopenharmony_ci bdaddr_t bdaddr; 225662306a36Sopenharmony_ci __u8 link_type; 225762306a36Sopenharmony_ci __u8 encr_mode; 225862306a36Sopenharmony_ci} __packed; 225962306a36Sopenharmony_ci 226062306a36Sopenharmony_ci#define HCI_EV_CONN_REQUEST 0x04 226162306a36Sopenharmony_cistruct hci_ev_conn_request { 226262306a36Sopenharmony_ci bdaddr_t bdaddr; 226362306a36Sopenharmony_ci __u8 dev_class[3]; 226462306a36Sopenharmony_ci __u8 link_type; 226562306a36Sopenharmony_ci} __packed; 226662306a36Sopenharmony_ci 226762306a36Sopenharmony_ci#define HCI_EV_DISCONN_COMPLETE 0x05 226862306a36Sopenharmony_cistruct hci_ev_disconn_complete { 226962306a36Sopenharmony_ci __u8 status; 227062306a36Sopenharmony_ci __le16 handle; 227162306a36Sopenharmony_ci __u8 reason; 227262306a36Sopenharmony_ci} __packed; 227362306a36Sopenharmony_ci 227462306a36Sopenharmony_ci#define HCI_EV_AUTH_COMPLETE 0x06 227562306a36Sopenharmony_cistruct hci_ev_auth_complete { 227662306a36Sopenharmony_ci __u8 status; 227762306a36Sopenharmony_ci __le16 handle; 227862306a36Sopenharmony_ci} __packed; 227962306a36Sopenharmony_ci 228062306a36Sopenharmony_ci#define HCI_EV_REMOTE_NAME 0x07 228162306a36Sopenharmony_cistruct hci_ev_remote_name { 228262306a36Sopenharmony_ci __u8 status; 228362306a36Sopenharmony_ci bdaddr_t bdaddr; 228462306a36Sopenharmony_ci __u8 name[HCI_MAX_NAME_LENGTH]; 228562306a36Sopenharmony_ci} __packed; 228662306a36Sopenharmony_ci 228762306a36Sopenharmony_ci#define HCI_EV_ENCRYPT_CHANGE 0x08 228862306a36Sopenharmony_cistruct hci_ev_encrypt_change { 228962306a36Sopenharmony_ci __u8 status; 229062306a36Sopenharmony_ci __le16 handle; 229162306a36Sopenharmony_ci __u8 encrypt; 229262306a36Sopenharmony_ci} __packed; 229362306a36Sopenharmony_ci 229462306a36Sopenharmony_ci#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09 229562306a36Sopenharmony_cistruct hci_ev_change_link_key_complete { 229662306a36Sopenharmony_ci __u8 status; 229762306a36Sopenharmony_ci __le16 handle; 229862306a36Sopenharmony_ci} __packed; 229962306a36Sopenharmony_ci 230062306a36Sopenharmony_ci#define HCI_EV_REMOTE_FEATURES 0x0b 230162306a36Sopenharmony_cistruct hci_ev_remote_features { 230262306a36Sopenharmony_ci __u8 status; 230362306a36Sopenharmony_ci __le16 handle; 230462306a36Sopenharmony_ci __u8 features[8]; 230562306a36Sopenharmony_ci} __packed; 230662306a36Sopenharmony_ci 230762306a36Sopenharmony_ci#define HCI_EV_REMOTE_VERSION 0x0c 230862306a36Sopenharmony_cistruct hci_ev_remote_version { 230962306a36Sopenharmony_ci __u8 status; 231062306a36Sopenharmony_ci __le16 handle; 231162306a36Sopenharmony_ci __u8 lmp_ver; 231262306a36Sopenharmony_ci __le16 manufacturer; 231362306a36Sopenharmony_ci __le16 lmp_subver; 231462306a36Sopenharmony_ci} __packed; 231562306a36Sopenharmony_ci 231662306a36Sopenharmony_ci#define HCI_EV_QOS_SETUP_COMPLETE 0x0d 231762306a36Sopenharmony_cistruct hci_qos { 231862306a36Sopenharmony_ci __u8 service_type; 231962306a36Sopenharmony_ci __u32 token_rate; 232062306a36Sopenharmony_ci __u32 peak_bandwidth; 232162306a36Sopenharmony_ci __u32 latency; 232262306a36Sopenharmony_ci __u32 delay_variation; 232362306a36Sopenharmony_ci} __packed; 232462306a36Sopenharmony_cistruct hci_ev_qos_setup_complete { 232562306a36Sopenharmony_ci __u8 status; 232662306a36Sopenharmony_ci __le16 handle; 232762306a36Sopenharmony_ci struct hci_qos qos; 232862306a36Sopenharmony_ci} __packed; 232962306a36Sopenharmony_ci 233062306a36Sopenharmony_ci#define HCI_EV_CMD_COMPLETE 0x0e 233162306a36Sopenharmony_cistruct hci_ev_cmd_complete { 233262306a36Sopenharmony_ci __u8 ncmd; 233362306a36Sopenharmony_ci __le16 opcode; 233462306a36Sopenharmony_ci} __packed; 233562306a36Sopenharmony_ci 233662306a36Sopenharmony_ci#define HCI_EV_CMD_STATUS 0x0f 233762306a36Sopenharmony_cistruct hci_ev_cmd_status { 233862306a36Sopenharmony_ci __u8 status; 233962306a36Sopenharmony_ci __u8 ncmd; 234062306a36Sopenharmony_ci __le16 opcode; 234162306a36Sopenharmony_ci} __packed; 234262306a36Sopenharmony_ci 234362306a36Sopenharmony_ci#define HCI_EV_HARDWARE_ERROR 0x10 234462306a36Sopenharmony_cistruct hci_ev_hardware_error { 234562306a36Sopenharmony_ci __u8 code; 234662306a36Sopenharmony_ci} __packed; 234762306a36Sopenharmony_ci 234862306a36Sopenharmony_ci#define HCI_EV_ROLE_CHANGE 0x12 234962306a36Sopenharmony_cistruct hci_ev_role_change { 235062306a36Sopenharmony_ci __u8 status; 235162306a36Sopenharmony_ci bdaddr_t bdaddr; 235262306a36Sopenharmony_ci __u8 role; 235362306a36Sopenharmony_ci} __packed; 235462306a36Sopenharmony_ci 235562306a36Sopenharmony_ci#define HCI_EV_NUM_COMP_PKTS 0x13 235662306a36Sopenharmony_cistruct hci_comp_pkts_info { 235762306a36Sopenharmony_ci __le16 handle; 235862306a36Sopenharmony_ci __le16 count; 235962306a36Sopenharmony_ci} __packed; 236062306a36Sopenharmony_ci 236162306a36Sopenharmony_cistruct hci_ev_num_comp_pkts { 236262306a36Sopenharmony_ci __u8 num; 236362306a36Sopenharmony_ci struct hci_comp_pkts_info handles[]; 236462306a36Sopenharmony_ci} __packed; 236562306a36Sopenharmony_ci 236662306a36Sopenharmony_ci#define HCI_EV_MODE_CHANGE 0x14 236762306a36Sopenharmony_cistruct hci_ev_mode_change { 236862306a36Sopenharmony_ci __u8 status; 236962306a36Sopenharmony_ci __le16 handle; 237062306a36Sopenharmony_ci __u8 mode; 237162306a36Sopenharmony_ci __le16 interval; 237262306a36Sopenharmony_ci} __packed; 237362306a36Sopenharmony_ci 237462306a36Sopenharmony_ci#define HCI_EV_PIN_CODE_REQ 0x16 237562306a36Sopenharmony_cistruct hci_ev_pin_code_req { 237662306a36Sopenharmony_ci bdaddr_t bdaddr; 237762306a36Sopenharmony_ci} __packed; 237862306a36Sopenharmony_ci 237962306a36Sopenharmony_ci#define HCI_EV_LINK_KEY_REQ 0x17 238062306a36Sopenharmony_cistruct hci_ev_link_key_req { 238162306a36Sopenharmony_ci bdaddr_t bdaddr; 238262306a36Sopenharmony_ci} __packed; 238362306a36Sopenharmony_ci 238462306a36Sopenharmony_ci#define HCI_EV_LINK_KEY_NOTIFY 0x18 238562306a36Sopenharmony_cistruct hci_ev_link_key_notify { 238662306a36Sopenharmony_ci bdaddr_t bdaddr; 238762306a36Sopenharmony_ci __u8 link_key[HCI_LINK_KEY_SIZE]; 238862306a36Sopenharmony_ci __u8 key_type; 238962306a36Sopenharmony_ci} __packed; 239062306a36Sopenharmony_ci 239162306a36Sopenharmony_ci#define HCI_EV_CLOCK_OFFSET 0x1c 239262306a36Sopenharmony_cistruct hci_ev_clock_offset { 239362306a36Sopenharmony_ci __u8 status; 239462306a36Sopenharmony_ci __le16 handle; 239562306a36Sopenharmony_ci __le16 clock_offset; 239662306a36Sopenharmony_ci} __packed; 239762306a36Sopenharmony_ci 239862306a36Sopenharmony_ci#define HCI_EV_PKT_TYPE_CHANGE 0x1d 239962306a36Sopenharmony_cistruct hci_ev_pkt_type_change { 240062306a36Sopenharmony_ci __u8 status; 240162306a36Sopenharmony_ci __le16 handle; 240262306a36Sopenharmony_ci __le16 pkt_type; 240362306a36Sopenharmony_ci} __packed; 240462306a36Sopenharmony_ci 240562306a36Sopenharmony_ci#define HCI_EV_PSCAN_REP_MODE 0x20 240662306a36Sopenharmony_cistruct hci_ev_pscan_rep_mode { 240762306a36Sopenharmony_ci bdaddr_t bdaddr; 240862306a36Sopenharmony_ci __u8 pscan_rep_mode; 240962306a36Sopenharmony_ci} __packed; 241062306a36Sopenharmony_ci 241162306a36Sopenharmony_ci#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 241262306a36Sopenharmony_cistruct inquiry_info_rssi { 241362306a36Sopenharmony_ci bdaddr_t bdaddr; 241462306a36Sopenharmony_ci __u8 pscan_rep_mode; 241562306a36Sopenharmony_ci __u8 pscan_period_mode; 241662306a36Sopenharmony_ci __u8 dev_class[3]; 241762306a36Sopenharmony_ci __le16 clock_offset; 241862306a36Sopenharmony_ci __s8 rssi; 241962306a36Sopenharmony_ci} __packed; 242062306a36Sopenharmony_cistruct inquiry_info_rssi_pscan { 242162306a36Sopenharmony_ci bdaddr_t bdaddr; 242262306a36Sopenharmony_ci __u8 pscan_rep_mode; 242362306a36Sopenharmony_ci __u8 pscan_period_mode; 242462306a36Sopenharmony_ci __u8 pscan_mode; 242562306a36Sopenharmony_ci __u8 dev_class[3]; 242662306a36Sopenharmony_ci __le16 clock_offset; 242762306a36Sopenharmony_ci __s8 rssi; 242862306a36Sopenharmony_ci} __packed; 242962306a36Sopenharmony_cistruct hci_ev_inquiry_result_rssi { 243062306a36Sopenharmony_ci __u8 num; 243162306a36Sopenharmony_ci __u8 data[]; 243262306a36Sopenharmony_ci} __packed; 243362306a36Sopenharmony_ci 243462306a36Sopenharmony_ci#define HCI_EV_REMOTE_EXT_FEATURES 0x23 243562306a36Sopenharmony_cistruct hci_ev_remote_ext_features { 243662306a36Sopenharmony_ci __u8 status; 243762306a36Sopenharmony_ci __le16 handle; 243862306a36Sopenharmony_ci __u8 page; 243962306a36Sopenharmony_ci __u8 max_page; 244062306a36Sopenharmony_ci __u8 features[8]; 244162306a36Sopenharmony_ci} __packed; 244262306a36Sopenharmony_ci 244362306a36Sopenharmony_ci#define HCI_EV_SYNC_CONN_COMPLETE 0x2c 244462306a36Sopenharmony_cistruct hci_ev_sync_conn_complete { 244562306a36Sopenharmony_ci __u8 status; 244662306a36Sopenharmony_ci __le16 handle; 244762306a36Sopenharmony_ci bdaddr_t bdaddr; 244862306a36Sopenharmony_ci __u8 link_type; 244962306a36Sopenharmony_ci __u8 tx_interval; 245062306a36Sopenharmony_ci __u8 retrans_window; 245162306a36Sopenharmony_ci __le16 rx_pkt_len; 245262306a36Sopenharmony_ci __le16 tx_pkt_len; 245362306a36Sopenharmony_ci __u8 air_mode; 245462306a36Sopenharmony_ci} __packed; 245562306a36Sopenharmony_ci 245662306a36Sopenharmony_ci#define HCI_EV_SYNC_CONN_CHANGED 0x2d 245762306a36Sopenharmony_cistruct hci_ev_sync_conn_changed { 245862306a36Sopenharmony_ci __u8 status; 245962306a36Sopenharmony_ci __le16 handle; 246062306a36Sopenharmony_ci __u8 tx_interval; 246162306a36Sopenharmony_ci __u8 retrans_window; 246262306a36Sopenharmony_ci __le16 rx_pkt_len; 246362306a36Sopenharmony_ci __le16 tx_pkt_len; 246462306a36Sopenharmony_ci} __packed; 246562306a36Sopenharmony_ci 246662306a36Sopenharmony_ci#define HCI_EV_SNIFF_SUBRATE 0x2e 246762306a36Sopenharmony_cistruct hci_ev_sniff_subrate { 246862306a36Sopenharmony_ci __u8 status; 246962306a36Sopenharmony_ci __le16 handle; 247062306a36Sopenharmony_ci __le16 max_tx_latency; 247162306a36Sopenharmony_ci __le16 max_rx_latency; 247262306a36Sopenharmony_ci __le16 max_remote_timeout; 247362306a36Sopenharmony_ci __le16 max_local_timeout; 247462306a36Sopenharmony_ci} __packed; 247562306a36Sopenharmony_ci 247662306a36Sopenharmony_ci#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f 247762306a36Sopenharmony_cistruct extended_inquiry_info { 247862306a36Sopenharmony_ci bdaddr_t bdaddr; 247962306a36Sopenharmony_ci __u8 pscan_rep_mode; 248062306a36Sopenharmony_ci __u8 pscan_period_mode; 248162306a36Sopenharmony_ci __u8 dev_class[3]; 248262306a36Sopenharmony_ci __le16 clock_offset; 248362306a36Sopenharmony_ci __s8 rssi; 248462306a36Sopenharmony_ci __u8 data[240]; 248562306a36Sopenharmony_ci} __packed; 248662306a36Sopenharmony_ci 248762306a36Sopenharmony_cistruct hci_ev_ext_inquiry_result { 248862306a36Sopenharmony_ci __u8 num; 248962306a36Sopenharmony_ci struct extended_inquiry_info info[]; 249062306a36Sopenharmony_ci} __packed; 249162306a36Sopenharmony_ci 249262306a36Sopenharmony_ci#define HCI_EV_KEY_REFRESH_COMPLETE 0x30 249362306a36Sopenharmony_cistruct hci_ev_key_refresh_complete { 249462306a36Sopenharmony_ci __u8 status; 249562306a36Sopenharmony_ci __le16 handle; 249662306a36Sopenharmony_ci} __packed; 249762306a36Sopenharmony_ci 249862306a36Sopenharmony_ci#define HCI_EV_IO_CAPA_REQUEST 0x31 249962306a36Sopenharmony_cistruct hci_ev_io_capa_request { 250062306a36Sopenharmony_ci bdaddr_t bdaddr; 250162306a36Sopenharmony_ci} __packed; 250262306a36Sopenharmony_ci 250362306a36Sopenharmony_ci#define HCI_EV_IO_CAPA_REPLY 0x32 250462306a36Sopenharmony_cistruct hci_ev_io_capa_reply { 250562306a36Sopenharmony_ci bdaddr_t bdaddr; 250662306a36Sopenharmony_ci __u8 capability; 250762306a36Sopenharmony_ci __u8 oob_data; 250862306a36Sopenharmony_ci __u8 authentication; 250962306a36Sopenharmony_ci} __packed; 251062306a36Sopenharmony_ci 251162306a36Sopenharmony_ci#define HCI_EV_USER_CONFIRM_REQUEST 0x33 251262306a36Sopenharmony_cistruct hci_ev_user_confirm_req { 251362306a36Sopenharmony_ci bdaddr_t bdaddr; 251462306a36Sopenharmony_ci __le32 passkey; 251562306a36Sopenharmony_ci} __packed; 251662306a36Sopenharmony_ci 251762306a36Sopenharmony_ci#define HCI_EV_USER_PASSKEY_REQUEST 0x34 251862306a36Sopenharmony_cistruct hci_ev_user_passkey_req { 251962306a36Sopenharmony_ci bdaddr_t bdaddr; 252062306a36Sopenharmony_ci} __packed; 252162306a36Sopenharmony_ci 252262306a36Sopenharmony_ci#define HCI_EV_REMOTE_OOB_DATA_REQUEST 0x35 252362306a36Sopenharmony_cistruct hci_ev_remote_oob_data_request { 252462306a36Sopenharmony_ci bdaddr_t bdaddr; 252562306a36Sopenharmony_ci} __packed; 252662306a36Sopenharmony_ci 252762306a36Sopenharmony_ci#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36 252862306a36Sopenharmony_cistruct hci_ev_simple_pair_complete { 252962306a36Sopenharmony_ci __u8 status; 253062306a36Sopenharmony_ci bdaddr_t bdaddr; 253162306a36Sopenharmony_ci} __packed; 253262306a36Sopenharmony_ci 253362306a36Sopenharmony_ci#define HCI_EV_USER_PASSKEY_NOTIFY 0x3b 253462306a36Sopenharmony_cistruct hci_ev_user_passkey_notify { 253562306a36Sopenharmony_ci bdaddr_t bdaddr; 253662306a36Sopenharmony_ci __le32 passkey; 253762306a36Sopenharmony_ci} __packed; 253862306a36Sopenharmony_ci 253962306a36Sopenharmony_ci#define HCI_KEYPRESS_STARTED 0 254062306a36Sopenharmony_ci#define HCI_KEYPRESS_ENTERED 1 254162306a36Sopenharmony_ci#define HCI_KEYPRESS_ERASED 2 254262306a36Sopenharmony_ci#define HCI_KEYPRESS_CLEARED 3 254362306a36Sopenharmony_ci#define HCI_KEYPRESS_COMPLETED 4 254462306a36Sopenharmony_ci 254562306a36Sopenharmony_ci#define HCI_EV_KEYPRESS_NOTIFY 0x3c 254662306a36Sopenharmony_cistruct hci_ev_keypress_notify { 254762306a36Sopenharmony_ci bdaddr_t bdaddr; 254862306a36Sopenharmony_ci __u8 type; 254962306a36Sopenharmony_ci} __packed; 255062306a36Sopenharmony_ci 255162306a36Sopenharmony_ci#define HCI_EV_REMOTE_HOST_FEATURES 0x3d 255262306a36Sopenharmony_cistruct hci_ev_remote_host_features { 255362306a36Sopenharmony_ci bdaddr_t bdaddr; 255462306a36Sopenharmony_ci __u8 features[8]; 255562306a36Sopenharmony_ci} __packed; 255662306a36Sopenharmony_ci 255762306a36Sopenharmony_ci#define HCI_EV_LE_META 0x3e 255862306a36Sopenharmony_cistruct hci_ev_le_meta { 255962306a36Sopenharmony_ci __u8 subevent; 256062306a36Sopenharmony_ci} __packed; 256162306a36Sopenharmony_ci 256262306a36Sopenharmony_ci#define HCI_EV_PHY_LINK_COMPLETE 0x40 256362306a36Sopenharmony_cistruct hci_ev_phy_link_complete { 256462306a36Sopenharmony_ci __u8 status; 256562306a36Sopenharmony_ci __u8 phy_handle; 256662306a36Sopenharmony_ci} __packed; 256762306a36Sopenharmony_ci 256862306a36Sopenharmony_ci#define HCI_EV_CHANNEL_SELECTED 0x41 256962306a36Sopenharmony_cistruct hci_ev_channel_selected { 257062306a36Sopenharmony_ci __u8 phy_handle; 257162306a36Sopenharmony_ci} __packed; 257262306a36Sopenharmony_ci 257362306a36Sopenharmony_ci#define HCI_EV_DISCONN_PHY_LINK_COMPLETE 0x42 257462306a36Sopenharmony_cistruct hci_ev_disconn_phy_link_complete { 257562306a36Sopenharmony_ci __u8 status; 257662306a36Sopenharmony_ci __u8 phy_handle; 257762306a36Sopenharmony_ci __u8 reason; 257862306a36Sopenharmony_ci} __packed; 257962306a36Sopenharmony_ci 258062306a36Sopenharmony_ci#define HCI_EV_LOGICAL_LINK_COMPLETE 0x45 258162306a36Sopenharmony_cistruct hci_ev_logical_link_complete { 258262306a36Sopenharmony_ci __u8 status; 258362306a36Sopenharmony_ci __le16 handle; 258462306a36Sopenharmony_ci __u8 phy_handle; 258562306a36Sopenharmony_ci __u8 flow_spec_id; 258662306a36Sopenharmony_ci} __packed; 258762306a36Sopenharmony_ci 258862306a36Sopenharmony_ci#define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE 0x46 258962306a36Sopenharmony_cistruct hci_ev_disconn_logical_link_complete { 259062306a36Sopenharmony_ci __u8 status; 259162306a36Sopenharmony_ci __le16 handle; 259262306a36Sopenharmony_ci __u8 reason; 259362306a36Sopenharmony_ci} __packed; 259462306a36Sopenharmony_ci 259562306a36Sopenharmony_ci#define HCI_EV_NUM_COMP_BLOCKS 0x48 259662306a36Sopenharmony_cistruct hci_comp_blocks_info { 259762306a36Sopenharmony_ci __le16 handle; 259862306a36Sopenharmony_ci __le16 pkts; 259962306a36Sopenharmony_ci __le16 blocks; 260062306a36Sopenharmony_ci} __packed; 260162306a36Sopenharmony_ci 260262306a36Sopenharmony_cistruct hci_ev_num_comp_blocks { 260362306a36Sopenharmony_ci __le16 num_blocks; 260462306a36Sopenharmony_ci __u8 num_hndl; 260562306a36Sopenharmony_ci struct hci_comp_blocks_info handles[]; 260662306a36Sopenharmony_ci} __packed; 260762306a36Sopenharmony_ci 260862306a36Sopenharmony_ci#define HCI_EV_SYNC_TRAIN_COMPLETE 0x4F 260962306a36Sopenharmony_cistruct hci_ev_sync_train_complete { 261062306a36Sopenharmony_ci __u8 status; 261162306a36Sopenharmony_ci} __packed; 261262306a36Sopenharmony_ci 261362306a36Sopenharmony_ci#define HCI_EV_PERIPHERAL_PAGE_RESP_TIMEOUT 0x54 261462306a36Sopenharmony_ci 261562306a36Sopenharmony_ci#define HCI_EV_LE_CONN_COMPLETE 0x01 261662306a36Sopenharmony_cistruct hci_ev_le_conn_complete { 261762306a36Sopenharmony_ci __u8 status; 261862306a36Sopenharmony_ci __le16 handle; 261962306a36Sopenharmony_ci __u8 role; 262062306a36Sopenharmony_ci __u8 bdaddr_type; 262162306a36Sopenharmony_ci bdaddr_t bdaddr; 262262306a36Sopenharmony_ci __le16 interval; 262362306a36Sopenharmony_ci __le16 latency; 262462306a36Sopenharmony_ci __le16 supervision_timeout; 262562306a36Sopenharmony_ci __u8 clk_accurancy; 262662306a36Sopenharmony_ci} __packed; 262762306a36Sopenharmony_ci 262862306a36Sopenharmony_ci/* Advertising report event types */ 262962306a36Sopenharmony_ci#define LE_ADV_IND 0x00 263062306a36Sopenharmony_ci#define LE_ADV_DIRECT_IND 0x01 263162306a36Sopenharmony_ci#define LE_ADV_SCAN_IND 0x02 263262306a36Sopenharmony_ci#define LE_ADV_NONCONN_IND 0x03 263362306a36Sopenharmony_ci#define LE_ADV_SCAN_RSP 0x04 263462306a36Sopenharmony_ci#define LE_ADV_INVALID 0x05 263562306a36Sopenharmony_ci 263662306a36Sopenharmony_ci/* Legacy event types in extended adv report */ 263762306a36Sopenharmony_ci#define LE_LEGACY_ADV_IND 0x0013 263862306a36Sopenharmony_ci#define LE_LEGACY_ADV_DIRECT_IND 0x0015 263962306a36Sopenharmony_ci#define LE_LEGACY_ADV_SCAN_IND 0x0012 264062306a36Sopenharmony_ci#define LE_LEGACY_NONCONN_IND 0x0010 264162306a36Sopenharmony_ci#define LE_LEGACY_SCAN_RSP_ADV 0x001b 264262306a36Sopenharmony_ci#define LE_LEGACY_SCAN_RSP_ADV_SCAN 0x001a 264362306a36Sopenharmony_ci 264462306a36Sopenharmony_ci/* Extended Advertising event types */ 264562306a36Sopenharmony_ci#define LE_EXT_ADV_NON_CONN_IND 0x0000 264662306a36Sopenharmony_ci#define LE_EXT_ADV_CONN_IND 0x0001 264762306a36Sopenharmony_ci#define LE_EXT_ADV_SCAN_IND 0x0002 264862306a36Sopenharmony_ci#define LE_EXT_ADV_DIRECT_IND 0x0004 264962306a36Sopenharmony_ci#define LE_EXT_ADV_SCAN_RSP 0x0008 265062306a36Sopenharmony_ci#define LE_EXT_ADV_LEGACY_PDU 0x0010 265162306a36Sopenharmony_ci#define LE_EXT_ADV_EVT_TYPE_MASK 0x007f 265262306a36Sopenharmony_ci 265362306a36Sopenharmony_ci#define ADDR_LE_DEV_PUBLIC 0x00 265462306a36Sopenharmony_ci#define ADDR_LE_DEV_RANDOM 0x01 265562306a36Sopenharmony_ci#define ADDR_LE_DEV_PUBLIC_RESOLVED 0x02 265662306a36Sopenharmony_ci#define ADDR_LE_DEV_RANDOM_RESOLVED 0x03 265762306a36Sopenharmony_ci 265862306a36Sopenharmony_ci#define HCI_EV_LE_ADVERTISING_REPORT 0x02 265962306a36Sopenharmony_cistruct hci_ev_le_advertising_info { 266062306a36Sopenharmony_ci __u8 type; 266162306a36Sopenharmony_ci __u8 bdaddr_type; 266262306a36Sopenharmony_ci bdaddr_t bdaddr; 266362306a36Sopenharmony_ci __u8 length; 266462306a36Sopenharmony_ci __u8 data[]; 266562306a36Sopenharmony_ci} __packed; 266662306a36Sopenharmony_ci 266762306a36Sopenharmony_cistruct hci_ev_le_advertising_report { 266862306a36Sopenharmony_ci __u8 num; 266962306a36Sopenharmony_ci struct hci_ev_le_advertising_info info[]; 267062306a36Sopenharmony_ci} __packed; 267162306a36Sopenharmony_ci 267262306a36Sopenharmony_ci#define HCI_EV_LE_CONN_UPDATE_COMPLETE 0x03 267362306a36Sopenharmony_cistruct hci_ev_le_conn_update_complete { 267462306a36Sopenharmony_ci __u8 status; 267562306a36Sopenharmony_ci __le16 handle; 267662306a36Sopenharmony_ci __le16 interval; 267762306a36Sopenharmony_ci __le16 latency; 267862306a36Sopenharmony_ci __le16 supervision_timeout; 267962306a36Sopenharmony_ci} __packed; 268062306a36Sopenharmony_ci 268162306a36Sopenharmony_ci#define HCI_EV_LE_REMOTE_FEAT_COMPLETE 0x04 268262306a36Sopenharmony_cistruct hci_ev_le_remote_feat_complete { 268362306a36Sopenharmony_ci __u8 status; 268462306a36Sopenharmony_ci __le16 handle; 268562306a36Sopenharmony_ci __u8 features[8]; 268662306a36Sopenharmony_ci} __packed; 268762306a36Sopenharmony_ci 268862306a36Sopenharmony_ci#define HCI_EV_LE_LTK_REQ 0x05 268962306a36Sopenharmony_cistruct hci_ev_le_ltk_req { 269062306a36Sopenharmony_ci __le16 handle; 269162306a36Sopenharmony_ci __le64 rand; 269262306a36Sopenharmony_ci __le16 ediv; 269362306a36Sopenharmony_ci} __packed; 269462306a36Sopenharmony_ci 269562306a36Sopenharmony_ci#define HCI_EV_LE_REMOTE_CONN_PARAM_REQ 0x06 269662306a36Sopenharmony_cistruct hci_ev_le_remote_conn_param_req { 269762306a36Sopenharmony_ci __le16 handle; 269862306a36Sopenharmony_ci __le16 interval_min; 269962306a36Sopenharmony_ci __le16 interval_max; 270062306a36Sopenharmony_ci __le16 latency; 270162306a36Sopenharmony_ci __le16 timeout; 270262306a36Sopenharmony_ci} __packed; 270362306a36Sopenharmony_ci 270462306a36Sopenharmony_ci#define HCI_EV_LE_DATA_LEN_CHANGE 0x07 270562306a36Sopenharmony_cistruct hci_ev_le_data_len_change { 270662306a36Sopenharmony_ci __le16 handle; 270762306a36Sopenharmony_ci __le16 tx_len; 270862306a36Sopenharmony_ci __le16 tx_time; 270962306a36Sopenharmony_ci __le16 rx_len; 271062306a36Sopenharmony_ci __le16 rx_time; 271162306a36Sopenharmony_ci} __packed; 271262306a36Sopenharmony_ci 271362306a36Sopenharmony_ci#define HCI_EV_LE_DIRECT_ADV_REPORT 0x0B 271462306a36Sopenharmony_cistruct hci_ev_le_direct_adv_info { 271562306a36Sopenharmony_ci __u8 type; 271662306a36Sopenharmony_ci __u8 bdaddr_type; 271762306a36Sopenharmony_ci bdaddr_t bdaddr; 271862306a36Sopenharmony_ci __u8 direct_addr_type; 271962306a36Sopenharmony_ci bdaddr_t direct_addr; 272062306a36Sopenharmony_ci __s8 rssi; 272162306a36Sopenharmony_ci} __packed; 272262306a36Sopenharmony_ci 272362306a36Sopenharmony_cistruct hci_ev_le_direct_adv_report { 272462306a36Sopenharmony_ci __u8 num; 272562306a36Sopenharmony_ci struct hci_ev_le_direct_adv_info info[]; 272662306a36Sopenharmony_ci} __packed; 272762306a36Sopenharmony_ci 272862306a36Sopenharmony_ci#define HCI_EV_LE_PHY_UPDATE_COMPLETE 0x0c 272962306a36Sopenharmony_cistruct hci_ev_le_phy_update_complete { 273062306a36Sopenharmony_ci __u8 status; 273162306a36Sopenharmony_ci __le16 handle; 273262306a36Sopenharmony_ci __u8 tx_phy; 273362306a36Sopenharmony_ci __u8 rx_phy; 273462306a36Sopenharmony_ci} __packed; 273562306a36Sopenharmony_ci 273662306a36Sopenharmony_ci#define HCI_EV_LE_EXT_ADV_REPORT 0x0d 273762306a36Sopenharmony_cistruct hci_ev_le_ext_adv_info { 273862306a36Sopenharmony_ci __le16 type; 273962306a36Sopenharmony_ci __u8 bdaddr_type; 274062306a36Sopenharmony_ci bdaddr_t bdaddr; 274162306a36Sopenharmony_ci __u8 primary_phy; 274262306a36Sopenharmony_ci __u8 secondary_phy; 274362306a36Sopenharmony_ci __u8 sid; 274462306a36Sopenharmony_ci __u8 tx_power; 274562306a36Sopenharmony_ci __s8 rssi; 274662306a36Sopenharmony_ci __le16 interval; 274762306a36Sopenharmony_ci __u8 direct_addr_type; 274862306a36Sopenharmony_ci bdaddr_t direct_addr; 274962306a36Sopenharmony_ci __u8 length; 275062306a36Sopenharmony_ci __u8 data[]; 275162306a36Sopenharmony_ci} __packed; 275262306a36Sopenharmony_ci 275362306a36Sopenharmony_cistruct hci_ev_le_ext_adv_report { 275462306a36Sopenharmony_ci __u8 num; 275562306a36Sopenharmony_ci struct hci_ev_le_ext_adv_info info[]; 275662306a36Sopenharmony_ci} __packed; 275762306a36Sopenharmony_ci 275862306a36Sopenharmony_ci#define HCI_EV_LE_PA_SYNC_ESTABLISHED 0x0e 275962306a36Sopenharmony_cistruct hci_ev_le_pa_sync_established { 276062306a36Sopenharmony_ci __u8 status; 276162306a36Sopenharmony_ci __le16 handle; 276262306a36Sopenharmony_ci __u8 sid; 276362306a36Sopenharmony_ci __u8 bdaddr_type; 276462306a36Sopenharmony_ci bdaddr_t bdaddr; 276562306a36Sopenharmony_ci __u8 phy; 276662306a36Sopenharmony_ci __le16 interval; 276762306a36Sopenharmony_ci __u8 clock_accuracy; 276862306a36Sopenharmony_ci} __packed; 276962306a36Sopenharmony_ci 277062306a36Sopenharmony_ci#define HCI_EV_LE_ENHANCED_CONN_COMPLETE 0x0a 277162306a36Sopenharmony_cistruct hci_ev_le_enh_conn_complete { 277262306a36Sopenharmony_ci __u8 status; 277362306a36Sopenharmony_ci __le16 handle; 277462306a36Sopenharmony_ci __u8 role; 277562306a36Sopenharmony_ci __u8 bdaddr_type; 277662306a36Sopenharmony_ci bdaddr_t bdaddr; 277762306a36Sopenharmony_ci bdaddr_t local_rpa; 277862306a36Sopenharmony_ci bdaddr_t peer_rpa; 277962306a36Sopenharmony_ci __le16 interval; 278062306a36Sopenharmony_ci __le16 latency; 278162306a36Sopenharmony_ci __le16 supervision_timeout; 278262306a36Sopenharmony_ci __u8 clk_accurancy; 278362306a36Sopenharmony_ci} __packed; 278462306a36Sopenharmony_ci 278562306a36Sopenharmony_ci#define HCI_EV_LE_PER_ADV_REPORT 0x0f 278662306a36Sopenharmony_cistruct hci_ev_le_per_adv_report { 278762306a36Sopenharmony_ci __le16 sync_handle; 278862306a36Sopenharmony_ci __u8 tx_power; 278962306a36Sopenharmony_ci __u8 rssi; 279062306a36Sopenharmony_ci __u8 cte_type; 279162306a36Sopenharmony_ci __u8 data_status; 279262306a36Sopenharmony_ci __u8 length; 279362306a36Sopenharmony_ci __u8 data[]; 279462306a36Sopenharmony_ci} __packed; 279562306a36Sopenharmony_ci 279662306a36Sopenharmony_ci#define HCI_EV_LE_EXT_ADV_SET_TERM 0x12 279762306a36Sopenharmony_cistruct hci_evt_le_ext_adv_set_term { 279862306a36Sopenharmony_ci __u8 status; 279962306a36Sopenharmony_ci __u8 handle; 280062306a36Sopenharmony_ci __le16 conn_handle; 280162306a36Sopenharmony_ci __u8 num_evts; 280262306a36Sopenharmony_ci} __packed; 280362306a36Sopenharmony_ci 280462306a36Sopenharmony_ci#define HCI_EVT_LE_CIS_ESTABLISHED 0x19 280562306a36Sopenharmony_cistruct hci_evt_le_cis_established { 280662306a36Sopenharmony_ci __u8 status; 280762306a36Sopenharmony_ci __le16 handle; 280862306a36Sopenharmony_ci __u8 cig_sync_delay[3]; 280962306a36Sopenharmony_ci __u8 cis_sync_delay[3]; 281062306a36Sopenharmony_ci __u8 c_latency[3]; 281162306a36Sopenharmony_ci __u8 p_latency[3]; 281262306a36Sopenharmony_ci __u8 c_phy; 281362306a36Sopenharmony_ci __u8 p_phy; 281462306a36Sopenharmony_ci __u8 nse; 281562306a36Sopenharmony_ci __u8 c_bn; 281662306a36Sopenharmony_ci __u8 p_bn; 281762306a36Sopenharmony_ci __u8 c_ft; 281862306a36Sopenharmony_ci __u8 p_ft; 281962306a36Sopenharmony_ci __le16 c_mtu; 282062306a36Sopenharmony_ci __le16 p_mtu; 282162306a36Sopenharmony_ci __le16 interval; 282262306a36Sopenharmony_ci} __packed; 282362306a36Sopenharmony_ci 282462306a36Sopenharmony_ci#define HCI_EVT_LE_CIS_REQ 0x1a 282562306a36Sopenharmony_cistruct hci_evt_le_cis_req { 282662306a36Sopenharmony_ci __le16 acl_handle; 282762306a36Sopenharmony_ci __le16 cis_handle; 282862306a36Sopenharmony_ci __u8 cig_id; 282962306a36Sopenharmony_ci __u8 cis_id; 283062306a36Sopenharmony_ci} __packed; 283162306a36Sopenharmony_ci 283262306a36Sopenharmony_ci#define HCI_EVT_LE_CREATE_BIG_COMPLETE 0x1b 283362306a36Sopenharmony_cistruct hci_evt_le_create_big_complete { 283462306a36Sopenharmony_ci __u8 status; 283562306a36Sopenharmony_ci __u8 handle; 283662306a36Sopenharmony_ci __u8 sync_delay[3]; 283762306a36Sopenharmony_ci __u8 transport_delay[3]; 283862306a36Sopenharmony_ci __u8 phy; 283962306a36Sopenharmony_ci __u8 nse; 284062306a36Sopenharmony_ci __u8 bn; 284162306a36Sopenharmony_ci __u8 pto; 284262306a36Sopenharmony_ci __u8 irc; 284362306a36Sopenharmony_ci __le16 max_pdu; 284462306a36Sopenharmony_ci __le16 interval; 284562306a36Sopenharmony_ci __u8 num_bis; 284662306a36Sopenharmony_ci __le16 bis_handle[]; 284762306a36Sopenharmony_ci} __packed; 284862306a36Sopenharmony_ci 284962306a36Sopenharmony_ci#define HCI_EVT_LE_BIG_SYNC_ESTABILISHED 0x1d 285062306a36Sopenharmony_cistruct hci_evt_le_big_sync_estabilished { 285162306a36Sopenharmony_ci __u8 status; 285262306a36Sopenharmony_ci __u8 handle; 285362306a36Sopenharmony_ci __u8 latency[3]; 285462306a36Sopenharmony_ci __u8 nse; 285562306a36Sopenharmony_ci __u8 bn; 285662306a36Sopenharmony_ci __u8 pto; 285762306a36Sopenharmony_ci __u8 irc; 285862306a36Sopenharmony_ci __le16 max_pdu; 285962306a36Sopenharmony_ci __le16 interval; 286062306a36Sopenharmony_ci __u8 num_bis; 286162306a36Sopenharmony_ci __le16 bis[]; 286262306a36Sopenharmony_ci} __packed; 286362306a36Sopenharmony_ci 286462306a36Sopenharmony_ci#define HCI_EVT_LE_BIG_INFO_ADV_REPORT 0x22 286562306a36Sopenharmony_cistruct hci_evt_le_big_info_adv_report { 286662306a36Sopenharmony_ci __le16 sync_handle; 286762306a36Sopenharmony_ci __u8 num_bis; 286862306a36Sopenharmony_ci __u8 nse; 286962306a36Sopenharmony_ci __le16 iso_interval; 287062306a36Sopenharmony_ci __u8 bn; 287162306a36Sopenharmony_ci __u8 pto; 287262306a36Sopenharmony_ci __u8 irc; 287362306a36Sopenharmony_ci __le16 max_pdu; 287462306a36Sopenharmony_ci __u8 sdu_interval[3]; 287562306a36Sopenharmony_ci __le16 max_sdu; 287662306a36Sopenharmony_ci __u8 phy; 287762306a36Sopenharmony_ci __u8 framing; 287862306a36Sopenharmony_ci __u8 encryption; 287962306a36Sopenharmony_ci} __packed; 288062306a36Sopenharmony_ci 288162306a36Sopenharmony_ci#define HCI_EV_VENDOR 0xff 288262306a36Sopenharmony_ci 288362306a36Sopenharmony_ci/* Internal events generated by Bluetooth stack */ 288462306a36Sopenharmony_ci#define HCI_EV_STACK_INTERNAL 0xfd 288562306a36Sopenharmony_cistruct hci_ev_stack_internal { 288662306a36Sopenharmony_ci __u16 type; 288762306a36Sopenharmony_ci __u8 data[]; 288862306a36Sopenharmony_ci} __packed; 288962306a36Sopenharmony_ci 289062306a36Sopenharmony_ci#define HCI_EV_SI_DEVICE 0x01 289162306a36Sopenharmony_cistruct hci_ev_si_device { 289262306a36Sopenharmony_ci __u16 event; 289362306a36Sopenharmony_ci __u16 dev_id; 289462306a36Sopenharmony_ci} __packed; 289562306a36Sopenharmony_ci 289662306a36Sopenharmony_ci#define HCI_EV_SI_SECURITY 0x02 289762306a36Sopenharmony_cistruct hci_ev_si_security { 289862306a36Sopenharmony_ci __u16 event; 289962306a36Sopenharmony_ci __u16 proto; 290062306a36Sopenharmony_ci __u16 subproto; 290162306a36Sopenharmony_ci __u8 incoming; 290262306a36Sopenharmony_ci} __packed; 290362306a36Sopenharmony_ci 290462306a36Sopenharmony_ci/* ---- HCI Packet structures ---- */ 290562306a36Sopenharmony_ci#define HCI_COMMAND_HDR_SIZE 3 290662306a36Sopenharmony_ci#define HCI_EVENT_HDR_SIZE 2 290762306a36Sopenharmony_ci#define HCI_ACL_HDR_SIZE 4 290862306a36Sopenharmony_ci#define HCI_SCO_HDR_SIZE 3 290962306a36Sopenharmony_ci#define HCI_ISO_HDR_SIZE 4 291062306a36Sopenharmony_ci 291162306a36Sopenharmony_cistruct hci_command_hdr { 291262306a36Sopenharmony_ci __le16 opcode; /* OCF & OGF */ 291362306a36Sopenharmony_ci __u8 plen; 291462306a36Sopenharmony_ci} __packed; 291562306a36Sopenharmony_ci 291662306a36Sopenharmony_cistruct hci_event_hdr { 291762306a36Sopenharmony_ci __u8 evt; 291862306a36Sopenharmony_ci __u8 plen; 291962306a36Sopenharmony_ci} __packed; 292062306a36Sopenharmony_ci 292162306a36Sopenharmony_cistruct hci_acl_hdr { 292262306a36Sopenharmony_ci __le16 handle; /* Handle & Flags(PB, BC) */ 292362306a36Sopenharmony_ci __le16 dlen; 292462306a36Sopenharmony_ci} __packed; 292562306a36Sopenharmony_ci 292662306a36Sopenharmony_cistruct hci_sco_hdr { 292762306a36Sopenharmony_ci __le16 handle; 292862306a36Sopenharmony_ci __u8 dlen; 292962306a36Sopenharmony_ci} __packed; 293062306a36Sopenharmony_ci 293162306a36Sopenharmony_cistruct hci_iso_hdr { 293262306a36Sopenharmony_ci __le16 handle; 293362306a36Sopenharmony_ci __le16 dlen; 293462306a36Sopenharmony_ci __u8 data[]; 293562306a36Sopenharmony_ci} __packed; 293662306a36Sopenharmony_ci 293762306a36Sopenharmony_ci/* ISO data packet status flags */ 293862306a36Sopenharmony_ci#define HCI_ISO_STATUS_VALID 0x00 293962306a36Sopenharmony_ci#define HCI_ISO_STATUS_INVALID 0x01 294062306a36Sopenharmony_ci#define HCI_ISO_STATUS_NOP 0x02 294162306a36Sopenharmony_ci 294262306a36Sopenharmony_ci#define HCI_ISO_DATA_HDR_SIZE 4 294362306a36Sopenharmony_cistruct hci_iso_data_hdr { 294462306a36Sopenharmony_ci __le16 sn; 294562306a36Sopenharmony_ci __le16 slen; 294662306a36Sopenharmony_ci}; 294762306a36Sopenharmony_ci 294862306a36Sopenharmony_ci#define HCI_ISO_TS_DATA_HDR_SIZE 8 294962306a36Sopenharmony_cistruct hci_iso_ts_data_hdr { 295062306a36Sopenharmony_ci __le32 ts; 295162306a36Sopenharmony_ci __le16 sn; 295262306a36Sopenharmony_ci __le16 slen; 295362306a36Sopenharmony_ci}; 295462306a36Sopenharmony_ci 295562306a36Sopenharmony_cistatic inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb) 295662306a36Sopenharmony_ci{ 295762306a36Sopenharmony_ci return (struct hci_event_hdr *) skb->data; 295862306a36Sopenharmony_ci} 295962306a36Sopenharmony_ci 296062306a36Sopenharmony_cistatic inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb) 296162306a36Sopenharmony_ci{ 296262306a36Sopenharmony_ci return (struct hci_acl_hdr *) skb->data; 296362306a36Sopenharmony_ci} 296462306a36Sopenharmony_ci 296562306a36Sopenharmony_cistatic inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb) 296662306a36Sopenharmony_ci{ 296762306a36Sopenharmony_ci return (struct hci_sco_hdr *) skb->data; 296862306a36Sopenharmony_ci} 296962306a36Sopenharmony_ci 297062306a36Sopenharmony_ci/* Command opcode pack/unpack */ 297162306a36Sopenharmony_ci#define hci_opcode_pack(ogf, ocf) ((__u16) ((ocf & 0x03ff)|(ogf << 10))) 297262306a36Sopenharmony_ci#define hci_opcode_ogf(op) (op >> 10) 297362306a36Sopenharmony_ci#define hci_opcode_ocf(op) (op & 0x03ff) 297462306a36Sopenharmony_ci 297562306a36Sopenharmony_ci/* ACL handle and flags pack/unpack */ 297662306a36Sopenharmony_ci#define hci_handle_pack(h, f) ((__u16) ((h & 0x0fff)|(f << 12))) 297762306a36Sopenharmony_ci#define hci_handle(h) (h & 0x0fff) 297862306a36Sopenharmony_ci#define hci_flags(h) (h >> 12) 297962306a36Sopenharmony_ci 298062306a36Sopenharmony_ci/* ISO handle and flags pack/unpack */ 298162306a36Sopenharmony_ci#define hci_iso_flags_pb(f) (f & 0x0003) 298262306a36Sopenharmony_ci#define hci_iso_flags_ts(f) ((f >> 2) & 0x0001) 298362306a36Sopenharmony_ci#define hci_iso_flags_pack(pb, ts) ((pb & 0x03) | ((ts & 0x01) << 2)) 298462306a36Sopenharmony_ci 298562306a36Sopenharmony_ci/* ISO data length and flags pack/unpack */ 298662306a36Sopenharmony_ci#define hci_iso_data_len_pack(h, f) ((__u16) ((h) | ((f) << 14))) 298762306a36Sopenharmony_ci#define hci_iso_data_len(h) ((h) & 0x3fff) 298862306a36Sopenharmony_ci#define hci_iso_data_flags(h) ((h) >> 14) 298962306a36Sopenharmony_ci 299062306a36Sopenharmony_ci/* codec transport types */ 299162306a36Sopenharmony_ci#define HCI_TRANSPORT_SCO_ESCO 0x01 299262306a36Sopenharmony_ci 299362306a36Sopenharmony_ci/* le24 support */ 299462306a36Sopenharmony_cistatic inline void hci_cpu_to_le24(__u32 val, __u8 dst[3]) 299562306a36Sopenharmony_ci{ 299662306a36Sopenharmony_ci dst[0] = val & 0xff; 299762306a36Sopenharmony_ci dst[1] = (val & 0xff00) >> 8; 299862306a36Sopenharmony_ci dst[2] = (val & 0xff0000) >> 16; 299962306a36Sopenharmony_ci} 300062306a36Sopenharmony_ci 300162306a36Sopenharmony_ci#endif /* __HCI_H */ 3002