1 /* hci.h - Bluetooth Host Control Interface types */
2 
3 /*
4  * Copyright (c) 2015-2016 Intel Corporation
5  * Copyright (c) 2023 Nordic Semiconductor ASA
6  *
7  * SPDX-License-Identifier: Apache-2.0
8  */
9 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_HCI_TYPES_H_
10 #define ZEPHYR_INCLUDE_BLUETOOTH_HCI_TYPES_H_
11 
12 #include <stdbool.h>
13 #include <stdint.h>
14 
15 #include <zephyr/bluetooth/addr.h>
16 #include <zephyr/sys/util.h>
17 #include <zephyr/sys/util_macro.h>
18 #include <zephyr/toolchain.h>
19 #include <zephyr/types.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /* Bluetooth spec v5.4 Vol 4, Part A Table 2.1: HCI packet indicators
26  * The following definitions are intended for use with the UART Transport Layer and
27  * may be reused with other transport layers if desired.
28  */
29 #define BT_HCI_H4_NONE                  0x00    /* None of the known packet types */
30 #define BT_HCI_H4_CMD                   0x01    /* HCI Command packet */
31 #define BT_HCI_H4_ACL                   0x02    /* HCI ACL Data packet */
32 #define BT_HCI_H4_SCO                   0x03    /* HCI Synchronous Data packet */
33 #define BT_HCI_H4_EVT                   0x04    /* HCI Event packet */
34 #define BT_HCI_H4_ISO                   0x05    /* HCI ISO Data packet */
35 
36 #define BT_HCI_OWN_ADDR_PUBLIC          0x00
37 #define BT_HCI_OWN_ADDR_RANDOM          0x01
38 #define BT_HCI_OWN_ADDR_RPA_OR_PUBLIC   0x02
39 #define BT_HCI_OWN_ADDR_RPA_OR_RANDOM   0x03
40 #define BT_HCI_OWN_ADDR_RPA_MASK        0x02
41 
42 #define BT_HCI_PEER_ADDR_RPA_UNRESOLVED 0xfe
43 #define BT_HCI_PEER_ADDR_ANONYMOUS      0xff
44 
45 #define BT_ENC_KEY_SIZE_MIN             0x07
46 #define BT_ENC_KEY_SIZE_MAX             0x10
47 
48 #define BT_HCI_ADV_HANDLE_INVALID       0xff
49 #define BT_HCI_SYNC_HANDLE_INVALID      0xffff
50 #define BT_HCI_PAWR_SUBEVENT_MAX        128
51 
52 /* Bluetooth spec v5.4 Vol 4, Part E - 5.4.3 HCI Synchronous Data Packets */
53 struct bt_hci_sco_hdr {
54 	uint16_t handle; /* 12 bit handle, 2 bit Packet Status Flag, 1 bit RFU */
55 	uint8_t  len;
56 } __packed;
57 #define BT_HCI_SCO_HDR_SIZE             3
58 
59 /* Bluetooth spec v5.4 Vol 4, Part E - 5.4.4 HCI Event Packet */
60 struct bt_hci_evt_hdr {
61 	uint8_t  evt;
62 	uint8_t  len;
63 	uint8_t  data[];
64 } __packed;
65 #define BT_HCI_EVT_HDR_SIZE             2
66 
67 #define BT_ACL_START_NO_FLUSH           0x00
68 #define BT_ACL_CONT                     0x01
69 #define BT_ACL_START                    0x02
70 #define BT_ACL_COMPLETE                 0x03
71 
72 #define BT_ACL_POINT_TO_POINT           0x00
73 #define BT_ACL_BROADCAST                0x01
74 
75 #define BT_ACL_HANDLE_MASK              BIT_MASK(12)
76 
77 #define bt_acl_handle(h)                ((h) & BT_ACL_HANDLE_MASK)
78 #define bt_acl_flags(h)                 ((h) >> 12)
79 #define bt_acl_flags_pb(f)              ((f) & BIT_MASK(2))
80 #define bt_acl_flags_bc(f)              ((f) >> 2)
81 #define bt_acl_handle_pack(h, f)        ((h) | ((f) << 12))
82 
83 /* Bluetooth spec v5.4 Vol 4, Part E - 5.4.2 ACL Data Packets */
84 struct bt_hci_acl_hdr {
85 	uint16_t handle;
86 	uint16_t len;
87 } __packed;
88 #define BT_HCI_ACL_HDR_SIZE             4
89 
90 #define BT_ISO_START                    0x00
91 #define BT_ISO_CONT                     0x01
92 #define BT_ISO_SINGLE                   0x02
93 #define BT_ISO_END                      0x03
94 
95 #define bt_iso_handle(h)                ((h) & 0x0fff)
96 #define bt_iso_flags(h)                 ((h) >> 12)
97 #define bt_iso_flags_pb(f)              ((f) & 0x0003)
98 #define bt_iso_flags_ts(f)              (((f) >> 2) & 0x0001)
99 #define bt_iso_pack_flags(pb, ts) \
100 	(((pb) & 0x0003) | (((ts) & 0x0001) << 2))
101 #define bt_iso_handle_pack(h, pb, ts) \
102 	((h) | (bt_iso_pack_flags(pb, ts) << 12))
103 #define bt_iso_hdr_len(h)                ((h) & BIT_MASK(14))
104 
105 #define BT_ISO_DATA_VALID                0x00
106 #define BT_ISO_DATA_INVALID              0x01
107 #define BT_ISO_DATA_NOP                  0x02
108 
109 #define bt_iso_pkt_len(h)                ((h) & BIT_MASK(12))
110 #define bt_iso_pkt_flags(h)              ((h) >> 14)
111 #define bt_iso_pkt_len_pack(h, f)        (((h) & BIT_MASK(12)) | ((f) << 14))
112 
113 struct bt_hci_iso_sdu_hdr {
114 	uint16_t sn;
115 	uint16_t slen; /* 12 bit len, 2 bit RFU, 2 bit packet status */
116 } __packed;
117 #define BT_HCI_ISO_SDU_HDR_SIZE          4
118 
119 struct bt_hci_iso_sdu_ts_hdr {
120 	uint32_t ts;
121 	struct bt_hci_iso_sdu_hdr sdu;
122 } __packed;
123 #define BT_HCI_ISO_SDU_TS_HDR_SIZE       8
124 
125 /* Bluetooth spec v5.4 Vol 4, Part E - 5.4.5 HCI ISO Data Packets */
126 struct bt_hci_iso_hdr {
127 	uint16_t handle; /* 12 bit handle, 2 bit PB flags, 1 bit TS_Flag, 1 bit RFU */
128 	uint16_t len; /* 14 bits, 2 bits RFU */
129 } __packed;
130 #define BT_HCI_ISO_HDR_SIZE             4
131 
132 /* Bluetooth spec v5.4 Vol 4, Part E - 5.4.1 HCI Command Packet */
133 struct bt_hci_cmd_hdr {
134 	uint16_t opcode;
135 	uint8_t  param_len;
136 } __packed;
137 #define BT_HCI_CMD_HDR_SIZE             3
138 
139 /* Supported Commands */
140 #define BT_CMD_TEST(cmd, octet, bit)            (cmd[octet] & BIT(bit))
141 #define BT_CMD_LE_STATES(cmd)                   BT_CMD_TEST(cmd, 28, 3)
142 
143 #define BT_FEAT_TEST(feat, page, octet, bit)    ((feat[page][octet] & BIT(bit)) != 0)
144 
145 #define BT_FEAT_BREDR(feat)                     !BT_FEAT_TEST(feat, 0, 4, 5)
146 #define BT_FEAT_LE(feat)                        BT_FEAT_TEST(feat, 0, 4, 6)
147 #define BT_FEAT_EXT_FEATURES(feat)              BT_FEAT_TEST(feat, 0, 7, 7)
148 #define BT_FEAT_HOST_SSP(feat)                  BT_FEAT_TEST(feat, 1, 0, 0)
149 #define BT_FEAT_SC(feat)                        BT_FEAT_TEST(feat, 2, 1, 0)
150 
151 #define BT_FEAT_LMP_SCO_CAPABLE(feat)           BT_FEAT_TEST(feat, 0, 1, 3)
152 #define BT_FEAT_LMP_ESCO_CAPABLE(feat)          BT_FEAT_TEST(feat, 0, 3, 7)
153 #define BT_FEAT_HV2_PKT(feat)                   BT_FEAT_TEST(feat, 0, 1, 4)
154 #define BT_FEAT_HV3_PKT(feat)                   BT_FEAT_TEST(feat, 0, 1, 5)
155 #define BT_FEAT_EV4_PKT(feat)                   BT_FEAT_TEST(feat, 0, 4, 0)
156 #define BT_FEAT_EV5_PKT(feat)                   BT_FEAT_TEST(feat, 0, 4, 1)
157 #define BT_FEAT_2EV3_PKT(feat)                  BT_FEAT_TEST(feat, 0, 5, 5)
158 #define BT_FEAT_3EV3_PKT(feat)                  BT_FEAT_TEST(feat, 0, 5, 6)
159 #define BT_FEAT_3SLOT_PKT(feat)                 BT_FEAT_TEST(feat, 0, 5, 7)
160 
161 /* LE features */
162 #define BT_LE_FEAT_BIT_ENC                      0
163 #define BT_LE_FEAT_BIT_CONN_PARAM_REQ           1
164 #define BT_LE_FEAT_BIT_EXT_REJ_IND              2
165 #define BT_LE_FEAT_BIT_PER_INIT_FEAT_XCHG       3
166 #define BT_LE_FEAT_BIT_PING                     4
167 #define BT_LE_FEAT_BIT_DLE                      5
168 #define BT_LE_FEAT_BIT_PRIVACY                  6
169 #define BT_LE_FEAT_BIT_EXT_SCAN                 7
170 #define BT_LE_FEAT_BIT_PHY_2M                   8
171 #define BT_LE_FEAT_BIT_SMI_TX                   9
172 #define BT_LE_FEAT_BIT_SMI_RX                   10
173 #define BT_LE_FEAT_BIT_PHY_CODED                11
174 #define BT_LE_FEAT_BIT_EXT_ADV                  12
175 #define BT_LE_FEAT_BIT_PER_ADV                  13
176 #define BT_LE_FEAT_BIT_CHAN_SEL_ALGO_2          14
177 #define BT_LE_FEAT_BIT_PWR_CLASS_1              15
178 #define BT_LE_FEAT_BIT_MIN_USED_CHAN_PROC       16
179 #define BT_LE_FEAT_BIT_CONN_CTE_REQ             17
180 #define BT_LE_FEAT_BIT_CONN_CTE_RESP            18
181 #define BT_LE_FEAT_BIT_CONNECTIONLESS_CTE_TX    19
182 #define BT_LE_FEAT_BIT_CONNECTIONLESS_CTE_RX    20
183 #define BT_LE_FEAT_BIT_ANT_SWITCH_TX_AOD        21
184 #define BT_LE_FEAT_BIT_ANT_SWITCH_RX_AOA        22
185 #define BT_LE_FEAT_BIT_RX_CTE                   23
186 #define BT_LE_FEAT_BIT_PAST_SEND                24
187 #define BT_LE_FEAT_BIT_PAST_RECV                25
188 #define BT_LE_FEAT_BIT_SCA_UPDATE               26
189 #define BT_LE_FEAT_BIT_REMOTE_PUB_KEY_VALIDATE  27
190 #define BT_LE_FEAT_BIT_CIS_CENTRAL              28
191 #define BT_LE_FEAT_BIT_CIS_PERIPHERAL           29
192 #define BT_LE_FEAT_BIT_ISO_BROADCASTER          30
193 #define BT_LE_FEAT_BIT_SYNC_RECEIVER            31
194 #define BT_LE_FEAT_BIT_ISO_CHANNELS             32
195 #define BT_LE_FEAT_BIT_PWR_CTRL_REQ             33
196 #define BT_LE_FEAT_BIT_PWR_CHG_IND              34
197 #define BT_LE_FEAT_BIT_PATH_LOSS_MONITOR        35
198 #define BT_LE_FEAT_BIT_PER_ADV_ADI_SUPP         36
199 #define BT_LE_FEAT_BIT_CONN_SUBRATING           37
200 #define BT_LE_FEAT_BIT_CONN_SUBRATING_HOST_SUPP 38
201 #define BT_LE_FEAT_BIT_CHANNEL_CLASSIFICATION   39
202 #define BT_LE_FEAT_BIT_ADV_CODING_SEL           40
203 #define BT_LE_FEAT_BIT_ADV_CODING_SEL_HOST      41
204 #define BT_LE_FEAT_BIT_DECISION_ADV_FILTER      42
205 #define BT_LE_FEAT_BIT_PAWR_ADVERTISER          43
206 #define BT_LE_FEAT_BIT_PAWR_SCANNER             44
207 #define BT_LE_FEAT_BIT_UNSEG_FRAMED_MODE        45
208 #define BT_LE_FEAT_BIT_CHANNEL_SOUNDING         46
209 #define BT_LE_FEAT_BIT_CHANNEL_SOUNDING_HOST    47
210 #define BT_LE_FEAT_BIT_CHANNEL_SOUNDING_TONE_QUAL_IND    48
211 #define BT_LE_FEAT_BIT_EXTENDED_FEAT_SET        63
212 #define BT_LE_FEAT_BIT_FRAME_SPACE_UPDATE       65
213 #define BT_LE_FEAT_BIT_SHORTER_CONN_INTERVALS   72
214 #define BT_LE_FEAT_BIT_SHORTER_CONN_INTERVALS_HOST_SUPP  73
215 
216 #define BT_LE_FEAT_TEST(feat, n)                (feat[(n) >> 3] & \
217 						 BIT((n) & 7))
218 
219 #define BT_FEAT_LE_ENCR(feat)                     BT_LE_FEAT_TEST(feat, \
220 						  BT_LE_FEAT_BIT_ENC)
221 #define BT_FEAT_LE_CONN_PARAM_REQ_PROC(feat)      BT_LE_FEAT_TEST(feat, \
222 						  BT_LE_FEAT_BIT_CONN_PARAM_REQ)
223 #define BT_FEAT_LE_PER_INIT_FEAT_XCHG(feat)       BT_LE_FEAT_TEST(feat, \
224 						  BT_LE_FEAT_BIT_PER_INIT_FEAT_XCHG)
225 #define BT_FEAT_LE_DLE(feat)                      BT_LE_FEAT_TEST(feat, \
226 						  BT_LE_FEAT_BIT_DLE)
227 #define BT_FEAT_LE_PHY_2M(feat)                   BT_LE_FEAT_TEST(feat, \
228 						  BT_LE_FEAT_BIT_PHY_2M)
229 #define BT_FEAT_LE_PHY_CODED(feat)                BT_LE_FEAT_TEST(feat, \
230 						  BT_LE_FEAT_BIT_PHY_CODED)
231 #define BT_FEAT_LE_PRIVACY(feat)                  BT_LE_FEAT_TEST(feat, \
232 						  BT_LE_FEAT_BIT_PRIVACY)
233 #define BT_FEAT_LE_EXT_ADV(feat)                  BT_LE_FEAT_TEST(feat, \
234 						  BT_LE_FEAT_BIT_EXT_ADV)
235 #define BT_FEAT_LE_EXT_PER_ADV(feat)              BT_LE_FEAT_TEST(feat, \
236 						  BT_LE_FEAT_BIT_PER_ADV)
237 #define BT_FEAT_LE_CONNECTION_CTE_REQ(feat)       BT_LE_FEAT_TEST(feat, \
238 						  BT_LE_FEAT_BIT_CONN_CTE_REQ)
239 #define BT_FEAT_LE_CONNECTION_CTE_RESP(feat)      BT_LE_FEAT_TEST(feat, \
240 						  BT_LE_FEAT_BIT_CONN_CTE_RESP)
241 #define BT_FEAT_LE_CONNECTIONLESS_CTE_TX(feat)    BT_LE_FEAT_TEST(feat, \
242 						  BT_LE_FEAT_BIT_CONNECTIONLESS_CTE_TX)
243 #define BT_FEAT_LE_CONNECTIONLESS_CTE_RX(feat)    BT_LE_FEAT_TEST(feat, \
244 						  BT_LE_FEAT_BIT_CONNECTIONLESS_CTE_RX)
245 #define BT_FEAT_LE_ANT_SWITCH_TX_AOD(feat)        BT_LE_FEAT_TEST(feat, \
246 						  BT_LE_FEAT_BIT_ANT_SWITCH_TX_AOD)
247 #define BT_FEAT_LE_ANT_SWITCH_RX_AOA(feat)        BT_LE_FEAT_TEST(feat, \
248 						  BT_LE_FEAT_BIT_ANT_SWITCH_RX_AOA)
249 #define BT_FEAT_LE_RX_CTE(feat)                   BT_LE_FEAT_TEST(feat, \
250 						  BT_LE_FEAT_BIT_RX_CTE)
251 #define BT_FEAT_LE_PAST_SEND(feat)                BT_LE_FEAT_TEST(feat, \
252 						  BT_LE_FEAT_BIT_PAST_SEND)
253 #define BT_FEAT_LE_PAST_RECV(feat)                BT_LE_FEAT_TEST(feat, \
254 						  BT_LE_FEAT_BIT_PAST_RECV)
255 #define BT_FEAT_LE_CIS_CENTRAL(feat)              BT_LE_FEAT_TEST(feat, \
256 						  BT_LE_FEAT_BIT_CIS_CENTRAL)
257 #define BT_FEAT_LE_CIS_PERIPHERAL(feat)           BT_LE_FEAT_TEST(feat, \
258 						  BT_LE_FEAT_BIT_CIS_PERIPHERAL)
259 #define BT_FEAT_LE_ISO_BROADCASTER(feat)          BT_LE_FEAT_TEST(feat, \
260 						  BT_LE_FEAT_BIT_ISO_BROADCASTER)
261 #define BT_FEAT_LE_SYNC_RECEIVER(feat)            BT_LE_FEAT_TEST(feat, \
262 						  BT_LE_FEAT_BIT_SYNC_RECEIVER)
263 #define BT_FEAT_LE_ISO_CHANNELS(feat)             BT_LE_FEAT_TEST(feat, \
264 						  BT_LE_FEAT_BIT_ISO_CHANNELS)
265 #define BT_FEAT_LE_PWR_CTRL_REQ(feat)             BT_LE_FEAT_TEST(feat, \
266 						  BT_LE_FEAT_BIT_PWR_CTRL_REQ)
267 #define BT_FEAT_LE_PWR_CHG_IND(feat)              BT_LE_FEAT_TEST(feat, \
268 						  BT_LE_FEAT_BIT_PWR_CHG_IND)
269 #define BT_FEAT_LE_PATH_LOSS_MONITOR(feat)        BT_LE_FEAT_TEST(feat, \
270 						  BT_LE_FEAT_BIT_PATH_LOSS_MONITOR)
271 #define BT_FEAT_LE_PER_ADV_ADI_SUPP(feat)         BT_LE_FEAT_TEST(feat, \
272 						  BT_LE_FEAT_BIT_PER_ADV_ADI_SUPP)
273 #define BT_FEAT_LE_CONN_SUBRATING(feat)           BT_LE_FEAT_TEST(feat, \
274 						  BT_LE_FEAT_BIT_CONN_SUBRATING)
275 #define BT_FEAT_LE_CONN_SUBRATING_HOST_SUPP(feat) BT_LE_FEAT_TEST(feat, \
276 						  BT_LE_FEAT_BIT_CONN_SUBRATING_HOST_SUPP)
277 #define BT_FEAT_LE_CHANNEL_CLASSIFICATION(feat)   BT_LE_FEAT_TEST(feat, \
278 						  BT_LE_FEAT_BIT_CHANNEL_CLASSIFICATION)
279 #define BT_FEAT_LE_ADV_CODING_SEL(feat)	          BT_LE_FEAT_TEST(feat, \
280 						  BT_LE_FEAT_BIT_ADV_CODING_SEL)
281 #define BT_FEAT_LE_ADV_CODING_SEL_HOST(feat)	  BT_LE_FEAT_TEST(feat, \
282 						  BT_LE_FEAT_BIT_ADV_CODING_SEL_HOST)
283 #define BT_FEAT_LE_PAWR_ADVERTISER(feat)	  BT_LE_FEAT_TEST(feat, \
284 						  BT_LE_FEAT_BIT_PAWR_ADVERTISER)
285 #define BT_FEAT_LE_PAWR_SCANNER(feat)             BT_LE_FEAT_TEST(feat, \
286 						  BT_LE_FEAT_BIT_PAWR_SCANNER)
287 #define BT_FEAT_LE_CHANNEL_SOUNDING(feat)         BT_LE_FEAT_TEST(feat, \
288 						  BT_LE_FEAT_BIT_CHANNEL_SOUNDING)
289 #define BT_FEAT_LE_CHANNEL_SOUNDING_HOST(feat)    BT_LE_FEAT_TEST(feat, \
290 						  BT_LE_FEAT_BIT_CHANNEL_SOUNDING_HOST)
291 #define BT_FEAT_LE_EXTENDED_FEAT_SET(feat)        BT_LE_FEAT_TEST(feat, \
292 						  BT_LE_FEAT_BIT_EXTENDED_FEAT_SET)
293 #define BT_FEAT_LE_FRAME_SPACE_UPDATE_SET(feat)   BT_LE_FEAT_TEST(feat, \
294 						  BT_LE_FEAT_BIT_FRAME_SPACE_UPDATE)
295 #define BT_FEAT_LE_SHORTER_CONN_INTERVALS(feat)   BT_LE_FEAT_TEST(feat, \
296 						  BT_LE_FEAT_BIT_SHORTER_CONN_INTERVALS)
297 #define BT_FEAT_LE_SHORTER_CONN_INTERVALS_HOST_SUPP(feat) BT_LE_FEAT_TEST(feat, \
298 						  BT_LE_FEAT_BIT_SHORTER_CONN_INTERVALS_HOST_SUPP)
299 
300 #define BT_FEAT_LE_CIS(feat)            (BT_FEAT_LE_CIS_CENTRAL(feat) | \
301 					BT_FEAT_LE_CIS_PERIPHERAL(feat))
302 #define BT_FEAT_LE_BIS(feat)            (BT_FEAT_LE_ISO_BROADCASTER(feat) | \
303 					BT_FEAT_LE_SYNC_RECEIVER(feat))
304 #define BT_FEAT_LE_ISO(feat)            (BT_FEAT_LE_CIS(feat) | \
305 					BT_FEAT_LE_BIS(feat))
306 
307 /* LE States. See Core_v5.4, Vol 4, Part E, Section 7.8.27 */
308 #define BT_LE_STATES_PER_CONN_ADV(states)     (states & BIT64_MASK(38))
309 
310 #if defined(CONFIG_BT_SCAN_AND_INITIATE_IN_PARALLEL)
311 /* Both passive and active scanner can be run in parallel with initiator. */
312 #define BT_LE_STATES_SCAN_INIT(states) ((states) & BIT64_MASK(22) && \
313 					(states) & BIT64_MASK(23))
314 
315 #else
316 #define BT_LE_STATES_SCAN_INIT(states)  0
317 #endif
318 
319 /* Bonding/authentication types */
320 #define BT_HCI_NO_BONDING                       0x00
321 #define BT_HCI_NO_BONDING_MITM                  0x01
322 #define BT_HCI_DEDICATED_BONDING                0x02
323 #define BT_HCI_DEDICATED_BONDING_MITM           0x03
324 #define BT_HCI_GENERAL_BONDING                  0x04
325 #define BT_HCI_GENERAL_BONDING_MITM             0x05
326 
327 /*
328  * MITM protection is enabled in SSP authentication requirements octet when
329  * LSB bit is set.
330  */
331 #define BT_MITM                                 0x01
332 
333 /* I/O capabilities */
334 #define BT_IO_DISPLAY_ONLY                      0x00
335 #define BT_IO_DISPLAY_YESNO                     0x01
336 #define BT_IO_KEYBOARD_ONLY                     0x02
337 #define BT_IO_NO_INPUT_OUTPUT                   0x03
338 
339 /* SCO packet types */
340 #define HCI_PKT_TYPE_HV1                        0x0020
341 #define HCI_PKT_TYPE_HV2                        0x0040
342 #define HCI_PKT_TYPE_HV3                        0x0080
343 
344 /* eSCO packet types */
345 #define HCI_PKT_TYPE_SCO_HV1                    0x0001
346 #define HCI_PKT_TYPE_SCO_HV2                    0x0002
347 #define HCI_PKT_TYPE_SCO_HV3                    0x0004
348 #define HCI_PKT_TYPE_ESCO_EV3                   0x0008
349 #define HCI_PKT_TYPE_ESCO_EV4                   0x0010
350 #define HCI_PKT_TYPE_ESCO_EV5                   0x0020
351 #define HCI_PKT_TYPE_ESCO_2EV3                  0x0040
352 #define HCI_PKT_TYPE_ESCO_3EV3                  0x0080
353 #define HCI_PKT_TYPE_ESCO_2EV5                  0x0100
354 #define HCI_PKT_TYPE_ESCO_3EV5                  0x0200
355 
356 
357 #define ESCO_PKT_MASK                           (HCI_PKT_TYPE_SCO_HV1 | \
358 						 HCI_PKT_TYPE_SCO_HV2 | \
359 						 HCI_PKT_TYPE_SCO_HV3 | \
360 						 HCI_PKT_TYPE_ESCO_EV3 | \
361 						 HCI_PKT_TYPE_ESCO_EV4 | \
362 						 HCI_PKT_TYPE_ESCO_EV5)
363 #define SCO_PKT_MASK                            (HCI_PKT_TYPE_SCO_HV1 | \
364 						 HCI_PKT_TYPE_SCO_HV2 | \
365 						 HCI_PKT_TYPE_SCO_HV3)
366 #define EDR_ESCO_PKT_MASK                       (HCI_PKT_TYPE_ESCO_2EV3 | \
367 						 HCI_PKT_TYPE_ESCO_3EV3 | \
368 						 HCI_PKT_TYPE_ESCO_2EV5 | \
369 						 HCI_PKT_TYPE_ESCO_3EV5)
370 
371 /* HCI BR/EDR link types */
372 #define BT_HCI_SCO                              0x00
373 #define BT_HCI_ACL                              0x01
374 #define BT_HCI_ESCO                             0x02
375 
376 /* OpCode Group Fields */
377 #define BT_OGF_LINK_CTRL                        0x01
378 #define BT_OGF_LINK_POLICY                      0x02
379 #define BT_OGF_BASEBAND                         0x03
380 #define BT_OGF_INFO                             0x04
381 #define BT_OGF_STATUS                           0x05
382 #define BT_OGF_LE                               0x08
383 #define BT_OGF_VS                               0x3f
384 
385 /* Construct OpCode from OGF and OCF */
386 #define BT_OP(ogf, ocf)                         ((ocf) | ((ogf) << 10))
387 
388 /* Invalid opcode */
389 #define BT_OP_NOP				0x0000
390 
391 /* Obtain OGF from OpCode */
392 #define BT_OGF(opcode)                          (((opcode) >> 10) & BIT_MASK(6))
393 /* Obtain OCF from OpCode */
394 #define BT_OCF(opcode)                          ((opcode) & BIT_MASK(10))
395 
396 #define BT_HCI_OP_INQUIRY                       BT_OP(BT_OGF_LINK_CTRL, 0x0001) /* 0x0401 */
397 struct bt_hci_op_inquiry {
398 	uint8_t lap[3];
399 	uint8_t length;
400 	uint8_t num_rsp;
401 } __packed;
402 
403 #define BT_HCI_OP_INQUIRY_CANCEL                BT_OP(BT_OGF_LINK_CTRL, 0x0002) /* 0x0402 */
404 
405 #define BT_HCI_OP_CONNECT                       BT_OP(BT_OGF_LINK_CTRL, 0x0005) /* 0x0405 */
406 struct bt_hci_cp_connect {
407 	bt_addr_t bdaddr;
408 	uint16_t  packet_type;
409 	uint8_t   pscan_rep_mode;
410 	uint8_t   reserved;
411 	uint16_t  clock_offset;
412 	uint8_t   allow_role_switch;
413 } __packed;
414 
415 #define BT_HCI_OP_DISCONNECT                    BT_OP(BT_OGF_LINK_CTRL, 0x0006) /* 0x0406 */
416 struct bt_hci_cp_disconnect {
417 	uint16_t handle;
418 	uint8_t  reason;
419 } __packed;
420 
421 #define BT_HCI_OP_CONNECT_CANCEL                BT_OP(BT_OGF_LINK_CTRL, 0x0008) /* 0x0408 */
422 struct bt_hci_cp_connect_cancel {
423 	bt_addr_t bdaddr;
424 } __packed;
425 struct bt_hci_rp_connect_cancel {
426 	uint8_t   status;
427 	bt_addr_t bdaddr;
428 } __packed;
429 
430 #define BT_HCI_OP_ACCEPT_CONN_REQ               BT_OP(BT_OGF_LINK_CTRL, 0x0009) /* 0x0409 */
431 struct bt_hci_cp_accept_conn_req {
432 	bt_addr_t bdaddr;
433 	uint8_t   role;
434 } __packed;
435 
436 #define BT_HCI_VOICE_SETTING_AIR_CODING_FMT_CVSD        0x00
437 #define BT_HCI_VOICE_SETTING_AIR_CODING_FMT_ULAW        0x01
438 #define BT_HCI_VOICE_SETTING_AIR_CODING_FMT_ALAW        0x02
439 #define BT_HCI_VOICE_SETTING_AIR_CODING_FMT_TRANSPARENT 0x03
440 
441 #define BT_HCI_VOICE_SETTING_PCM_BIT_POS_DEFAULT 0x00
442 
443 #define BT_HCI_VOICE_SETTING_SAMPLE_SIZE_8_BITS  0x00
444 #define BT_HCI_VOICE_SETTING_SAMPLE_SIZE_16_BITS 0x01
445 
446 #define BT_HCI_VOICE_SETTING_DATA_FMT_1_COMPLEMENT 0x00
447 #define BT_HCI_VOICE_SETTING_DATA_FMT_2_COMPLEMENT 0x01
448 #define BT_HCI_VOICE_SETTING_DATA_FMT_SIGNED       0x02
449 #define BT_HCI_VOICE_SETTING_DATA_FMT_UNSIGNED     0x03
450 
451 #define BT_HCI_VOICE_SETTING_CODING_FMT_LINEAR 0x00
452 #define BT_HCI_VOICE_SETTING_CODING_FMT_ULAW   0x01
453 #define BT_HCI_VOICE_SETTING_CODING_FMT_ALAW   0x02
454 
455 #define BT_HCI_VOICE_SETTING_AIR_CODING_FMT_MASK GENMASK(1, 0)
456 #define BT_HCI_VOICE_SETTING_PCM_BIT_POS_MASK    GENMASK(2, 4)
457 #define BT_HCI_VOICE_SETTING_SAMPLE_SIZE_MASK    GENMASK(5, 5)
458 #define BT_HCI_VOICE_SETTING_DATA_FMT_MASK       GENMASK(7, 6)
459 #define BT_HCI_VOICE_SETTING_CODING_FMT_MASK     GENMASK(9, 8)
460 
461 #define BT_HCI_VOICE_SETTING_AIR_CODING_FMT_PREP(val) \
462 	FIELD_PREP(BT_HCI_VOICE_SETTING_AIR_CODING_FMT_MASK, val)
463 #define BT_HCI_VOICE_SETTING_PCM_BIT_POS_PREP(val) \
464 	FIELD_PREP(BT_HCI_VOICE_SETTING_PCM_BIT_POS_MASK, val)
465 #define BT_HCI_VOICE_SETTING_SAMPLE_SIZE_PREP(val) \
466 	FIELD_PREP(BT_HCI_VOICE_SETTING_SAMPLE_SIZE_MASK, val)
467 #define BT_HCI_VOICE_SETTING_DATA_FMT_PREP(val) FIELD_PREP(BT_HCI_VOICE_SETTING_DATA_FMT_MASK, val)
468 #define BT_HCI_VOICE_SETTING_CODING_FMT_PREP(val) \
469 	FIELD_PREP(BT_HCI_VOICE_SETTING_CODING_FMT_MASK, val)
470 
471 #define BT_HCI_VOICE_SETTING_AIR_CODING_FMT_GET(val) \
472 	FIELD_GET(BT_HCI_VOICE_SETTING_AIR_CODING_FMT_MASK, val)
473 #define BT_HCI_VOICE_SETTING_PCM_BIT_POS_GET(val) \
474 	FIELD_GET(BT_HCI_VOICE_SETTING_PCM_BIT_POS_MASK, val)
475 #define BT_HCI_VOICE_SETTING_SAMPLE_SIZE_GET(val) \
476 	FIELD_GET(BT_HCI_VOICE_SETTING_SAMPLE_SIZE_MASK, val)
477 #define BT_HCI_VOICE_SETTING_DATA_FMT_GET(val) FIELD_GET(BT_HCI_VOICE_SETTING_DATA_FMT_MASK, val)
478 #define BT_HCI_VOICE_SETTING_CODING_FMT_GET(val) \
479 	FIELD_GET(BT_HCI_VOICE_SETTING_CODING_FMT_MASK, val)
480 
481 #define BT_HCI_VOICE_SETTINGS(air_coding_fmt, pcm_bit_pos, sample_size, data_fmt, coding_fmt) \
482 	(BT_HCI_VOICE_SETTING_AIR_CODING_FMT_PREP(air_coding_fmt) | \
483 	 BT_HCI_VOICE_SETTING_PCM_BIT_POS_PREP(pcm_bit_pos) | \
484 	 BT_HCI_VOICE_SETTING_SAMPLE_SIZE_PREP(sample_size) | \
485 	 BT_HCI_VOICE_SETTING_DATA_FMT_PREP(data_fmt) | \
486 	 BT_HCI_VOICE_SETTING_CODING_FMT_PREP(coding_fmt))
487 
488 #define BT_HCI_SCO_MAX_LATENCY_DEFAULT 0xffff /* do not care about SCO link latency */
489 
490 #define BT_HCI_SCO_RETRANS_EFFORT_DEFAULT 0xff /* do not care about SCO retransmission effort */
491 
492 #define BT_HCI_OP_SETUP_SYNC_CONN               BT_OP(BT_OGF_LINK_CTRL, 0x0028) /* 0x0428 */
493 struct bt_hci_cp_setup_sync_conn {
494 	uint16_t  handle;
495 	uint32_t  tx_bandwidth;
496 	uint32_t  rx_bandwidth;
497 	uint16_t  max_latency;
498 	uint16_t  content_format;
499 	uint8_t   retrans_effort;
500 	uint16_t  pkt_type;
501 } __packed;
502 
503 #define BT_HCI_OP_ACCEPT_SYNC_CONN_REQ          BT_OP(BT_OGF_LINK_CTRL, 0x0029) /* 0x0429 */
504 struct bt_hci_cp_accept_sync_conn_req {
505 	bt_addr_t bdaddr;
506 	uint32_t  tx_bandwidth;
507 	uint32_t  rx_bandwidth;
508 	uint16_t  max_latency;
509 	uint16_t  content_format;
510 	uint8_t   retrans_effort;
511 	uint16_t  pkt_type;
512 } __packed;
513 
514 #define BT_HCI_OP_REJECT_CONN_REQ               BT_OP(BT_OGF_LINK_CTRL, 0x000a) /* 0x040a */
515 struct bt_hci_cp_reject_conn_req {
516 	bt_addr_t bdaddr;
517 	uint8_t   reason;
518 } __packed;
519 
520 #define BT_HCI_OP_LINK_KEY_REPLY                BT_OP(BT_OGF_LINK_CTRL, 0x000b) /* 0x040b */
521 struct bt_hci_cp_link_key_reply {
522 	bt_addr_t bdaddr;
523 	uint8_t   link_key[16];
524 } __packed;
525 
526 #define BT_HCI_OP_LINK_KEY_NEG_REPLY            BT_OP(BT_OGF_LINK_CTRL, 0x000c) /* 0x040c */
527 struct bt_hci_cp_link_key_neg_reply {
528 	bt_addr_t bdaddr;
529 } __packed;
530 
531 #define BT_HCI_OP_PIN_CODE_REPLY                BT_OP(BT_OGF_LINK_CTRL, 0x000d) /* 0x040d */
532 struct bt_hci_cp_pin_code_reply {
533 	bt_addr_t bdaddr;
534 	uint8_t   pin_len;
535 	uint8_t   pin_code[16];
536 } __packed;
537 struct bt_hci_rp_pin_code_reply {
538 	uint8_t      status;
539 	bt_addr_t bdaddr;
540 } __packed;
541 
542 #define BT_HCI_OP_PIN_CODE_NEG_REPLY            BT_OP(BT_OGF_LINK_CTRL, 0x000e) /* 0x040e */
543 struct bt_hci_cp_pin_code_neg_reply {
544 	bt_addr_t bdaddr;
545 } __packed;
546 struct bt_hci_rp_pin_code_neg_reply {
547 	uint8_t   status;
548 	bt_addr_t bdaddr;
549 } __packed;
550 
551 #define BT_HCI_OP_AUTH_REQUESTED                BT_OP(BT_OGF_LINK_CTRL, 0x0011) /* 0x0411 */
552 struct bt_hci_cp_auth_requested {
553 	uint16_t handle;
554 } __packed;
555 
556 #define BT_HCI_OP_SET_CONN_ENCRYPT              BT_OP(BT_OGF_LINK_CTRL, 0x0013) /* 0x0413 */
557 struct bt_hci_cp_set_conn_encrypt {
558 	uint16_t handle;
559 	uint8_t  encrypt;
560 } __packed;
561 
562 #define BT_HCI_OP_REMOTE_NAME_REQUEST           BT_OP(BT_OGF_LINK_CTRL, 0x0019) /* 0x0419 */
563 struct bt_hci_cp_remote_name_request {
564 	bt_addr_t bdaddr;
565 	uint8_t   pscan_rep_mode;
566 	uint8_t   reserved;
567 	uint16_t  clock_offset;
568 } __packed;
569 
570 #define BT_HCI_OP_REMOTE_NAME_CANCEL            BT_OP(BT_OGF_LINK_CTRL, 0x001a) /* 0x041a */
571 struct bt_hci_cp_remote_name_cancel {
572 	bt_addr_t bdaddr;
573 } __packed;
574 struct bt_hci_rp_remote_name_cancel {
575 	uint8_t   status;
576 	bt_addr_t bdaddr;
577 } __packed;
578 
579 #define BT_HCI_OP_READ_REMOTE_FEATURES          BT_OP(BT_OGF_LINK_CTRL, 0x001b) /* 0x041b */
580 struct bt_hci_cp_read_remote_features {
581 	uint16_t handle;
582 } __packed;
583 
584 #define BT_HCI_OP_READ_REMOTE_EXT_FEATURES      BT_OP(BT_OGF_LINK_CTRL, 0x001c) /* 0x041c */
585 struct bt_hci_cp_read_remote_ext_features {
586 	uint16_t handle;
587 	uint8_t  page;
588 } __packed;
589 
590 #define BT_HCI_OP_READ_REMOTE_VERSION_INFO      BT_OP(BT_OGF_LINK_CTRL, 0x001d) /* 0x041d */
591 struct bt_hci_cp_read_remote_version_info {
592 	uint16_t handle;
593 } __packed;
594 
595 #define BT_HCI_OP_IO_CAPABILITY_REPLY           BT_OP(BT_OGF_LINK_CTRL, 0x002b) /* 0x042b */
596 struct bt_hci_cp_io_capability_reply {
597 	bt_addr_t bdaddr;
598 	uint8_t   capability;
599 	uint8_t   oob_data;
600 	uint8_t   authentication;
601 } __packed;
602 
603 #define BT_HCI_OP_USER_CONFIRM_REPLY            BT_OP(BT_OGF_LINK_CTRL, 0x002c) /* 0x042c */
604 #define BT_HCI_OP_USER_CONFIRM_NEG_REPLY        BT_OP(BT_OGF_LINK_CTRL, 0x002d) /* 0x042d */
605 struct bt_hci_cp_user_confirm_reply {
606 	bt_addr_t bdaddr;
607 } __packed;
608 struct bt_hci_rp_user_confirm_reply {
609 	uint8_t   status;
610 	bt_addr_t bdaddr;
611 } __packed;
612 
613 #define BT_HCI_OP_USER_PASSKEY_REPLY            BT_OP(BT_OGF_LINK_CTRL, 0x002e) /* 0x042e */
614 struct bt_hci_cp_user_passkey_reply {
615 	bt_addr_t bdaddr;
616 	uint32_t  passkey;
617 } __packed;
618 
619 #define BT_HCI_OP_USER_PASSKEY_NEG_REPLY        BT_OP(BT_OGF_LINK_CTRL, 0x002f) /* 0x042f */
620 struct bt_hci_cp_user_passkey_neg_reply {
621 	bt_addr_t bdaddr;
622 } __packed;
623 
624 #define BT_HCI_OP_IO_CAPABILITY_NEG_REPLY       BT_OP(BT_OGF_LINK_CTRL, 0x0034) /* 0x0434 */
625 struct bt_hci_cp_io_capability_neg_reply {
626 	bt_addr_t bdaddr;
627 	uint8_t   reason;
628 } __packed;
629 
630 #define BT_HCI_OP_SWITCH_ROLE                   BT_OP(BT_OGF_LINK_POLICY, 0x000b)
631 struct bt_hci_cp_switch_role {
632 	bt_addr_t bdaddr;
633 	uint8_t   role;
634 } __packed;
635 
636 #define BT_HCI_LINK_POLICY_SETTINGS_ENABLE_ROLE_SWITCH  BIT(0)
637 #define BT_HCI_LINK_POLICY_SETTINGS_ENABLE_HOLD_MODE    BIT(1)
638 #define BT_HCI_LINK_POLICY_SETTINGS_ENABLE_SNIFF_SWITCH BIT(2)
639 
640 #define BT_HCI_OP_READ_LINK_POLICY_SETTINGS     BT_OP(BT_OGF_LINK_POLICY, 0x000c)
641 struct bt_hci_cp_read_link_policy_settings {
642 	uint16_t handle;
643 } __packed;
644 struct bt_hci_rp_read_link_policy_settings {
645 	uint8_t  status;
646 	uint16_t handle;
647 	uint16_t link_policy_settings;
648 } __packed;
649 
650 #define BT_HCI_OP_WRITE_LINK_POLICY_SETTINGS    BT_OP(BT_OGF_LINK_POLICY, 0x000d)
651 struct bt_hci_cp_write_link_policy_settings {
652 	uint16_t handle;
653 	uint16_t link_policy_settings;
654 } __packed;
655 
656 #define BT_HCI_OP_READ_DEFAULT_LINK_POLICY_SETTINGS  BT_OP(BT_OGF_LINK_POLICY, 0x000e)
657 struct bt_hci_rp_read_default_link_policy_settings {
658 	uint8_t  status;
659 	uint16_t default_link_policy_settings;
660 } __packed;
661 
662 #define BT_HCI_OP_WRITE_DEFAULT_LINK_POLICY_SETTINGS BT_OP(BT_OGF_LINK_POLICY, 0x000f)
663 struct bt_hci_cp_write_default_link_policy_settings {
664 	uint16_t default_link_policy_settings;
665 } __packed;
666 
667 #define BT_HCI_OP_SNIFF_MODE                    BT_OP(BT_OGF_LINK_POLICY, 0x0003) /* 0x0803 */
668 struct bt_hci_cp_sniff_mode {
669 	uint16_t handle;
670 	uint16_t max_interval;
671 	uint16_t min_interval;
672 	uint16_t attempt;
673 	uint16_t timeout;
674 } __packed;
675 
676 #define BT_HCI_OP_EXIT_SNIFF_MODE               BT_OP(BT_OGF_LINK_POLICY, 0x0004) /* 0x0804 */
677 struct bt_hci_cp_exit_sniff_mode {
678 	uint16_t handle;
679 } __packed;
680 
681 #define BT_HCI_OP_SET_EVENT_MASK                BT_OP(BT_OGF_BASEBAND, 0x0001) /* 0x0c01 */
682 struct bt_hci_cp_set_event_mask {
683 	uint8_t  events[8];
684 } __packed;
685 
686 #define BT_HCI_OP_RESET                         BT_OP(BT_OGF_BASEBAND, 0x0003) /* 0x0c03 */
687 
688 #define BT_HCI_OP_WRITE_LOCAL_NAME              BT_OP(BT_OGF_BASEBAND, 0x0013) /* 0x0c13 */
689 struct bt_hci_write_local_name {
690 	uint8_t local_name[248];
691 } __packed;
692 
693 #define BT_HCI_OP_READ_CONN_ACCEPT_TIMEOUT      BT_OP(BT_OGF_BASEBAND, 0x0015) /* 0x0c15 */
694 struct bt_hci_rp_read_conn_accept_timeout {
695 	uint8_t  status;
696 	uint16_t conn_accept_timeout;
697 } __packed;
698 
699 #define BT_HCI_OP_WRITE_CONN_ACCEPT_TIMEOUT     BT_OP(BT_OGF_BASEBAND, 0x0016) /* 0x0c16 */
700 struct bt_hci_cp_write_conn_accept_timeout {
701 	uint16_t conn_accept_timeout;
702 } __packed;
703 
704 struct bt_hci_rp_write_conn_accept_timeout {
705 	uint8_t  status;
706 } __packed;
707 
708 #define BT_HCI_OP_WRITE_PAGE_TIMEOUT            BT_OP(BT_OGF_BASEBAND, 0x0018) /* 0x0c18 */
709 
710 #define BT_HCI_OP_WRITE_SCAN_ENABLE             BT_OP(BT_OGF_BASEBAND, 0x001a) /* 0x0c1a */
711 #define BT_BREDR_SCAN_DISABLED                  0x00
712 #define BT_BREDR_SCAN_INQUIRY                   0x01
713 #define BT_BREDR_SCAN_PAGE                      0x02
714 
715 #define BT_HCI_OP_READ_CLASS_OF_DEVICE          BT_OP(BT_OGF_BASEBAND, 0x0023) /* 0x0c23 */
716 struct bt_hci_rp_read_class_of_device {
717 	uint8_t  status;
718 	uint8_t  class_of_device[3];
719 } __packed;
720 
721 #define BT_COD(major_service, major_device, minor_device)                         \
722 	(((uint32_t)major_service << 13) | ((uint32_t)major_device << 8) |            \
723 	 ((uint32_t)minor_device << 2))
724 #define BT_COD_VALID(cod) ((0 == (cod[0] & (BIT(0) | BIT(1)))) ? true : false)
725 #define BT_COD_MAJOR_SERVICE_CLASSES(cod)                                         \
726 	((((uint32_t)cod[2] & 0xFF) >> 5) | (((uint32_t)cod[1] & 0xD0) >> 5))
727 #define BT_COD_MAJOR_DEVICE_CLASS(cod) ((((uint32_t)cod[1]) & 0x1FUL))
728 #define BT_COD_MINOR_DEVICE_CLASS(cod) (((((uint32_t)cod[0]) & 0xFF) >> 2))
729 
730 #define BT_COD_MAJOR_MISC           0x00
731 #define BT_COD_MAJOR_COMPUTER       0x01
732 #define BT_COD_MAJOR_PHONE          0x02
733 #define BT_COD_MAJOR_LAN_NETWORK_AP 0x03
734 #define BT_COD_MAJOR_AUDIO_VIDEO    0x04
735 #define BT_COD_MAJOR_PERIPHERAL     0x05
736 #define BT_COD_MAJOR_IMAGING        0x06
737 #define BT_COD_MAJOR_WEARABLE       0x07
738 #define BT_COD_MAJOR_TOY            0x08
739 #define BT_COD_MAJOR_HEALTH         0x09
740 #define BT_COD_MAJOR_UNCATEGORIZED  0x1F
741 
742 /* Minor Device Class field - Computer Major Class */
743 #define BT_COD_MAJOR_COMPUTER_MINOR_UNCATEGORIZED         0x00
744 #define BT_COD_MAJOR_COMPUTER_MINOR_DESKTOP               0x01
745 #define BT_COD_MAJOR_COMPUTER_MINOR_SERVER_CLASS_COMPUTER 0x02
746 #define BT_COD_MAJOR_COMPUTER_MINOR_LAPTOP                0x03
747 #define BT_COD_MAJOR_COMPUTER_MINOR_HANDHELD_PC_PDA       0x04
748 #define BT_COD_MAJOR_COMPUTER_MINOR_PALM_SIZE_PC_PDA      0x05
749 #define BT_COD_MAJOR_COMPUTER_MINOR_WEARABLE_COMPUTER     0x06
750 #define BT_COD_MAJOR_COMPUTER_MINOR_TABLET                0x07
751 
752 /* Minor Device Class field - Phone Major Class */
753 #define BT_COD_MAJOR_PHONE_MINOR_UNCATEGORIZED             0x00
754 #define BT_COD_MAJOR_PHONE_MINOR_CELLULAR                  0x01
755 #define BT_COD_MAJOR_PHONE_MINOR_CORDLESS                  0x02
756 #define BT_COD_MAJOR_PHONE_MINOR_SMARTPHONE                0x03
757 #define BT_COD_MAJOR_PHONE_MINOR_WIRED_MODEM_VOICE_GATEWAY 0x04
758 #define BT_COD_MAJOR_PHONE_MINOR_ISDN                      0x05
759 
760 /* Minor Device Class field - Audio/Video Major Class */
761 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_UNCATEGORIZED             0x00
762 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_WEARABLE_HEADSET          0x01
763 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_HANDS_FREE                0x02
764 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_RFU                       0x03
765 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_MICROPHONE                0x04
766 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_LOUDSPEAKER               0x05
767 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_HEADPHONES                0x06
768 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_PORTABLE_AUDIO            0x07
769 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_CAR_AUDIO                 0x08
770 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_SET_TOP_BOX               0x09
771 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_HIFI_AUDIO                0x0A
772 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_VCR                       0x0B
773 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_VIDEO_CAMERA              0x0C
774 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_CAMCORDER                 0x0D
775 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_VIDEO_MONITOR             0x0E
776 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_VIDEO_DISPLAY_LOUDSPEAKER 0x0F
777 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_VIDEO_CONFERENCING        0x10
778 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_RFU2                      0x11
779 #define BT_COD_MAJOR_AUDIO_VIDEO_MINOR_GAME_TOY                  0x12
780 
781 #define BT_HCI_OP_WRITE_CLASS_OF_DEVICE         BT_OP(BT_OGF_BASEBAND, 0x0024) /* 0x0c24 */
782 struct bt_hci_cp_write_class_of_device {
783 	uint8_t  class_of_device[3];
784 } __packed;
785 
786 #define BT_TX_POWER_LEVEL_CURRENT               0x00
787 #define BT_TX_POWER_LEVEL_MAX                   0x01
788 #define BT_HCI_OP_READ_TX_POWER_LEVEL           BT_OP(BT_OGF_BASEBAND, 0x002d) /* 0x0c2d */
789 struct bt_hci_cp_read_tx_power_level {
790 	uint16_t handle;
791 	uint8_t  type;
792 } __packed;
793 
794 struct bt_hci_rp_read_tx_power_level {
795 	uint8_t  status;
796 	uint16_t handle;
797 	int8_t   tx_power_level;
798 } __packed;
799 
800 #define BT_HCI_LE_TX_POWER_PHY_1M               0x01
801 #define BT_HCI_LE_TX_POWER_PHY_2M               0x02
802 #define BT_HCI_LE_TX_POWER_PHY_CODED_S8         0x03
803 #define BT_HCI_LE_TX_POWER_PHY_CODED_S2         0x04
804 #define BT_HCI_OP_LE_ENH_READ_TX_POWER_LEVEL    BT_OP(BT_OGF_LE, 0x0076) /* 0x2076 */
805 struct bt_hci_cp_le_read_tx_power_level {
806 	uint16_t handle;
807 	uint8_t  phy;
808 } __packed;
809 
810 struct bt_hci_rp_le_read_tx_power_level {
811 	uint8_t  status;
812 	uint16_t handle;
813 	uint8_t  phy;
814 	int8_t   current_tx_power_level;
815 	int8_t   max_tx_power_level;
816 } __packed;
817 
818 #define BT_HCI_OP_LE_READ_REMOTE_TX_POWER_LEVEL	BT_OP(BT_OGF_LE, 0x0077) /* 0x2077 */
819 
820 #define BT_HCI_LE_TX_POWER_REPORT_DISABLE       0x00
821 #define BT_HCI_LE_TX_POWER_REPORT_ENABLE        0x01
822 #define BT_HCI_OP_LE_SET_TX_POWER_REPORT_ENABLE BT_OP(BT_OGF_LE, 0x007A) /* 0x207A */
823 struct bt_hci_cp_le_set_tx_power_report_enable {
824 	uint16_t handle;
825 	uint8_t  local_enable;
826 	uint8_t  remote_enable;
827 } __packed;
828 
829 #define BT_HCI_OP_LE_SET_PATH_LOSS_REPORTING_PARAMETERS BT_OP(BT_OGF_LE, 0x0078) /* 0x2078 */
830 struct bt_hci_cp_le_set_path_loss_reporting_parameters {
831 	uint16_t handle;
832 	uint8_t  high_threshold;
833 	uint8_t  high_hysteresis;
834 	uint8_t  low_threshold;
835 	uint8_t  low_hysteresis;
836 	uint16_t min_time_spent;
837 } __packed;
838 
839 struct bt_hci_rp_le_set_path_loss_reporting_parameters {
840 	uint16_t handle;
841 	uint8_t  status;
842 } __packed;
843 
844 
845 #define BT_HCI_LE_PATH_LOSS_REPORTING_DISABLE       0x00
846 #define BT_HCI_LE_PATH_LOSS_REPORTING_ENABLE        0x01
847 #define BT_HCI_OP_LE_SET_PATH_LOSS_REPORTING_ENABLE BT_OP(BT_OGF_LE, 0x0079) /* 0x2079 */
848 
849 struct bt_hci_cp_le_set_path_loss_reporting_enable {
850 	uint16_t handle;
851 	uint8_t  enable;
852 } __packed;
853 
854 struct bt_hci_rp_le_set_path_loss_reporting_enable {
855 	uint16_t handle;
856 	uint8_t  status;
857 } __packed;
858 
859 #define BT_HCI_OP_LE_SET_DEFAULT_SUBRATE BT_OP(BT_OGF_LE, 0x007D) /* 0x207D */
860 
861 struct bt_hci_cp_le_set_default_subrate {
862 	uint16_t subrate_min;
863 	uint16_t subrate_max;
864 	uint16_t max_latency;
865 	uint16_t continuation_number;
866 	uint16_t supervision_timeout;
867 } __packed;
868 
869 #define BT_HCI_OP_LE_SUBRATE_REQUEST     BT_OP(BT_OGF_LE, 0x007E) /* 0x207E */
870 
871 struct bt_hci_cp_le_subrate_request {
872 	uint16_t handle;
873 	uint16_t subrate_min;
874 	uint16_t subrate_max;
875 	uint16_t max_latency;
876 	uint16_t continuation_number;
877 	uint16_t supervision_timeout;
878 } __packed;
879 
880 #define BT_HCI_CTL_TO_HOST_FLOW_DISABLE         0x00
881 #define BT_HCI_CTL_TO_HOST_FLOW_ENABLE          0x01
882 #define BT_HCI_OP_SET_CTL_TO_HOST_FLOW          BT_OP(BT_OGF_BASEBAND, 0x0031) /* 0x0c31 */
883 struct bt_hci_cp_set_ctl_to_host_flow {
884 	uint8_t  flow_enable;
885 } __packed;
886 
887 #define BT_HCI_OP_HOST_BUFFER_SIZE              BT_OP(BT_OGF_BASEBAND, 0x0033) /* 0x0c33 */
888 struct bt_hci_cp_host_buffer_size {
889 	uint16_t acl_mtu;
890 	uint8_t  sco_mtu;
891 	uint16_t acl_pkts;
892 	uint16_t sco_pkts;
893 } __packed;
894 
895 struct bt_hci_handle_count {
896 	uint16_t handle;
897 	uint16_t count;
898 } __packed;
899 
900 #define BT_HCI_OP_HOST_NUM_COMPLETED_PACKETS    BT_OP(BT_OGF_BASEBAND, 0x0035) /* 0x0c35 */
901 struct bt_hci_cp_host_num_completed_packets {
902 	uint8_t  num_handles;
903 	struct bt_hci_handle_count h[0];
904 } __packed;
905 
906 #define BT_HCI_OP_WRITE_CURRENT_IAC_LAP         BT_OP(BT_OGF_BASEBAND, 0x003a) /* 0x0c3a */
907 struct bt_hci_iac_lap {
908 	uint8_t iac[3];
909 } __packed;
910 
911 struct bt_hci_cp_write_current_iac_lap {
912 	uint8_t  num_current_iac;
913 	struct bt_hci_iac_lap lap[0];
914 } __packed;
915 
916 #define BT_HCI_OP_WRITE_INQUIRY_MODE            BT_OP(BT_OGF_BASEBAND, 0x0045) /* 0x0c45 */
917 struct bt_hci_cp_write_inquiry_mode {
918 	uint8_t  mode;
919 } __packed;
920 
921 #define BT_HCI_OP_WRITE_SSP_MODE                BT_OP(BT_OGF_BASEBAND, 0x0056) /* 0x0c56 */
922 struct bt_hci_cp_write_ssp_mode {
923 	uint8_t mode;
924 } __packed;
925 
926 #define BT_HCI_OP_SET_EVENT_MASK_PAGE_2         BT_OP(BT_OGF_BASEBAND, 0x0063) /* 0x0c63 */
927 struct bt_hci_cp_set_event_mask_page_2 {
928 	uint8_t  events_page_2[8];
929 } __packed;
930 
931 #define BT_HCI_OP_LE_WRITE_LE_HOST_SUPP         BT_OP(BT_OGF_BASEBAND, 0x006d) /* 0x0c6d */
932 struct bt_hci_cp_write_le_host_supp {
933 	uint8_t  le;
934 	uint8_t  simul;
935 } __packed;
936 
937 #define BT_HCI_OP_WRITE_SC_HOST_SUPP            BT_OP(BT_OGF_BASEBAND, 0x007a) /* 0x0c7a */
938 struct bt_hci_cp_write_sc_host_supp {
939 	uint8_t  sc_support;
940 } __packed;
941 
942 #define BT_HCI_OP_READ_AUTH_PAYLOAD_TIMEOUT     BT_OP(BT_OGF_BASEBAND, 0x007b) /* 0x0c7b */
943 struct bt_hci_cp_read_auth_payload_timeout {
944 	uint16_t handle;
945 } __packed;
946 
947 struct bt_hci_rp_read_auth_payload_timeout {
948 	uint8_t  status;
949 	uint16_t handle;
950 	uint16_t auth_payload_timeout;
951 } __packed;
952 
953 #define BT_HCI_OP_WRITE_AUTH_PAYLOAD_TIMEOUT    BT_OP(BT_OGF_BASEBAND, 0x007c) /* 0x0c7c */
954 struct bt_hci_cp_write_auth_payload_timeout {
955 	uint16_t handle;
956 	uint16_t auth_payload_timeout;
957 } __packed;
958 
959 struct bt_hci_rp_write_auth_payload_timeout {
960 	uint8_t  status;
961 	uint16_t handle;
962 } __packed;
963 
964 #define BT_HCI_OP_CONFIGURE_DATA_PATH           BT_OP(BT_OGF_BASEBAND, 0x0083) /* 0x0c83 */
965 struct bt_hci_cp_configure_data_path {
966 	uint8_t  data_path_dir;
967 	uint8_t  data_path_id;
968 	uint8_t  vs_config_len;
969 	uint8_t  vs_config[0];
970 } __packed;
971 
972 struct bt_hci_rp_configure_data_path {
973 	uint8_t  status;
974 } __packed;
975 
976 /* HCI version from Assigned Numbers */
977 #define BT_HCI_VERSION_1_0B                     0
978 #define BT_HCI_VERSION_1_1                      1
979 #define BT_HCI_VERSION_1_2                      2
980 #define BT_HCI_VERSION_2_0                      3
981 #define BT_HCI_VERSION_2_1                      4
982 #define BT_HCI_VERSION_3_0                      5
983 #define BT_HCI_VERSION_4_0                      6
984 #define BT_HCI_VERSION_4_1                      7
985 #define BT_HCI_VERSION_4_2                      8
986 #define BT_HCI_VERSION_5_0                      9
987 #define BT_HCI_VERSION_5_1                      10
988 #define BT_HCI_VERSION_5_2                      11
989 #define BT_HCI_VERSION_5_3                      12
990 #define BT_HCI_VERSION_5_4                      13
991 #define BT_HCI_VERSION_6_0                      14
992 #define BT_HCI_VERSION_6_1                      15
993 #define BT_HCI_VERSION_6_2                      16
994 
995 #define BT_HCI_OP_READ_LOCAL_VERSION_INFO       BT_OP(BT_OGF_INFO, 0x0001) /* 0x1001 */
996 struct bt_hci_rp_read_local_version_info {
997 	uint8_t  status;
998 	uint8_t  hci_version;
999 	uint16_t hci_revision;
1000 	uint8_t  lmp_version;
1001 	uint16_t manufacturer;
1002 	uint16_t lmp_subversion;
1003 } __packed;
1004 
1005 #define BT_HCI_OP_READ_SUPPORTED_COMMANDS       BT_OP(BT_OGF_INFO, 0x0002) /* 0x1002 */
1006 struct bt_hci_rp_read_supported_commands {
1007 	uint8_t  status;
1008 	uint8_t  commands[64];
1009 } __packed;
1010 
1011 #define BT_HCI_OP_READ_LOCAL_EXT_FEATURES       BT_OP(BT_OGF_INFO, 0x0004) /* 0x1004 */
1012 struct bt_hci_cp_read_local_ext_features {
1013 	uint8_t page;
1014 };
1015 struct bt_hci_rp_read_local_ext_features {
1016 	uint8_t  status;
1017 	uint8_t  page;
1018 	uint8_t  max_page;
1019 	uint8_t  ext_features[8];
1020 } __packed;
1021 
1022 #define BT_HCI_OP_READ_LOCAL_FEATURES           BT_OP(BT_OGF_INFO, 0x0003) /* 0x1003 */
1023 struct bt_hci_rp_read_local_features {
1024 	uint8_t  status;
1025 	uint8_t  features[8];
1026 } __packed;
1027 
1028 #define BT_HCI_OP_READ_BUFFER_SIZE              BT_OP(BT_OGF_INFO, 0x0005) /* 0x1005 */
1029 struct bt_hci_rp_read_buffer_size {
1030 	uint8_t  status;
1031 	uint16_t acl_max_len;
1032 	uint8_t  sco_max_len;
1033 	uint16_t acl_max_num;
1034 	uint16_t sco_max_num;
1035 } __packed;
1036 
1037 #define BT_HCI_OP_READ_BD_ADDR                  BT_OP(BT_OGF_INFO, 0x0009) /* 0x1009 */
1038 struct bt_hci_rp_read_bd_addr {
1039 	uint8_t   status;
1040 	bt_addr_t bdaddr;
1041 } __packed;
1042 
1043 /* logic transport type bits as returned when reading supported codecs */
1044 #define BT_HCI_CODEC_TRANSPORT_MASK_BREDR_ACL BIT(0)
1045 #define BT_HCI_CODEC_TRANSPORT_MASK_BREDR_SCO BIT(1)
1046 #define BT_HCI_CODEC_TRANSPORT_MASK_LE_CIS    BIT(2)
1047 #define BT_HCI_CODEC_TRANSPORT_MASK_LE_BIS    BIT(3)
1048 
1049 /* logic transport types for reading codec capabilities and controller delays */
1050 #define BT_HCI_LOGICAL_TRANSPORT_TYPE_BREDR_ACL 0x00
1051 #define BT_HCI_LOGICAL_TRANSPORT_TYPE_BREDR_SCO 0x01
1052 #define BT_HCI_LOGICAL_TRANSPORT_TYPE_LE_CIS    0x02
1053 #define BT_HCI_LOGICAL_TRANSPORT_TYPE_LE_BIS    0x03
1054 
1055 /* audio datapath directions */
1056 #define BT_HCI_DATAPATH_DIR_HOST_TO_CTLR 0x00
1057 #define BT_HCI_DATAPATH_DIR_CTLR_TO_HOST 0x01
1058 
1059 /* audio datapath IDs */
1060 #define BT_HCI_DATAPATH_ID_HCI      0x00
1061 #define BT_HCI_DATAPATH_ID_VS       0x01
1062 #define BT_HCI_DATAPATH_ID_VS_END   0xfe
1063 
1064 /* coding format assigned numbers, used for codec IDs */
1065 #define BT_HCI_CODING_FORMAT_ULAW_LOG    0x00
1066 #define BT_HCI_CODING_FORMAT_ALAW_LOG    0x01
1067 #define BT_HCI_CODING_FORMAT_CVSD        0x02
1068 #define BT_HCI_CODING_FORMAT_TRANSPARENT 0x03
1069 #define BT_HCI_CODING_FORMAT_LINEAR_PCM  0x04
1070 #define BT_HCI_CODING_FORMAT_MSBC        0x05
1071 #define BT_HCI_CODING_FORMAT_LC3         0x06
1072 #define BT_HCI_CODING_FORMAT_G729A       0x07
1073 #define BT_HCI_CODING_FORMAT_VS          0xFF
1074 
1075 
1076 #define BT_HCI_OP_READ_CODECS                   BT_OP(BT_OGF_INFO, 0x000b) /* 0x100b */
1077 struct bt_hci_std_codec_info {
1078 	uint8_t codec_id;
1079 } __packed;
1080 struct bt_hci_std_codecs {
1081 	uint8_t num_codecs;
1082 	struct bt_hci_std_codec_info codec_info[0];
1083 } __packed;
1084 struct bt_hci_vs_codec_info {
1085 	uint16_t company_id;
1086 	uint16_t codec_id;
1087 } __packed;
1088 struct bt_hci_vs_codecs {
1089 	uint8_t num_codecs;
1090 	struct bt_hci_vs_codec_info codec_info[0];
1091 } __packed;
1092 struct bt_hci_rp_read_codecs {
1093 	uint8_t status;
1094 	/* other fields filled in dynamically */
1095 	uint8_t codecs[0];
1096 } __packed;
1097 
1098 #define BT_HCI_OP_READ_CODECS_V2                BT_OP(BT_OGF_INFO, 0x000d) /* 0x100d */
1099 struct bt_hci_std_codec_info_v2 {
1100 	uint8_t codec_id;
1101 	uint8_t transports; /* bitmap */
1102 } __packed;
1103 struct bt_hci_std_codecs_v2 {
1104 	uint8_t num_codecs;
1105 	struct bt_hci_std_codec_info_v2 codec_info[0];
1106 } __packed;
1107 struct bt_hci_vs_codec_info_v2 {
1108 	uint16_t company_id;
1109 	uint16_t codec_id;
1110 	uint8_t transports; /* bitmap */
1111 } __packed;
1112 struct bt_hci_vs_codecs_v2 {
1113 	uint8_t num_codecs;
1114 	struct bt_hci_vs_codec_info_v2 codec_info[0];
1115 } __packed;
1116 struct bt_hci_rp_read_codecs_v2 {
1117 	uint8_t status;
1118 	/* other fields filled in dynamically */
1119 	uint8_t codecs[0];
1120 } __packed;
1121 
1122 struct bt_hci_cp_codec_id {
1123 	uint8_t coding_format;
1124 	uint16_t company_id;
1125 	uint16_t vs_codec_id;
1126 } __packed;
1127 
1128 #define BT_HCI_OP_READ_CODEC_CAPABILITIES       BT_OP(BT_OGF_INFO, 0x000e) /* 0x100e */
1129 struct bt_hci_cp_read_codec_capabilities {
1130 	struct bt_hci_cp_codec_id codec_id;
1131 	uint8_t transport;
1132 	uint8_t direction;
1133 } __packed;
1134 struct bt_hci_codec_capability_info {
1135 	uint8_t length;
1136 	uint8_t data[0];
1137 } __packed;
1138 struct bt_hci_rp_read_codec_capabilities {
1139 	uint8_t status;
1140 	uint8_t num_capabilities;
1141 	/* other fields filled in dynamically */
1142 	uint8_t capabilities[0];
1143 } __packed;
1144 
1145 #define BT_HCI_OP_READ_CTLR_DELAY               BT_OP(BT_OGF_INFO, 0x000f) /* 0x100f */
1146 struct bt_hci_cp_read_ctlr_delay {
1147 	struct bt_hci_cp_codec_id codec_id;
1148 	uint8_t transport;
1149 	uint8_t direction;
1150 	uint8_t codec_config_len;
1151 	uint8_t codec_config[0];
1152 } __packed;
1153 struct bt_hci_rp_read_ctlr_delay {
1154 	uint8_t status;
1155 	uint8_t min_ctlr_delay[3];
1156 	uint8_t max_ctlr_delay[3];
1157 } __packed;
1158 
1159 #define BT_HCI_OP_READ_RSSI                     BT_OP(BT_OGF_STATUS, 0x0005) /* 0x1405 */
1160 struct bt_hci_cp_read_rssi {
1161 	uint16_t handle;
1162 } __packed;
1163 struct bt_hci_rp_read_rssi {
1164 	uint8_t  status;
1165 	uint16_t handle;
1166 	int8_t   rssi;
1167 } __packed;
1168 
1169 #define BT_HCI_ENCRYPTION_KEY_SIZE_MIN          7
1170 #define BT_HCI_ENCRYPTION_KEY_SIZE_MAX          16
1171 
1172 #define BT_HCI_OP_READ_ENCRYPTION_KEY_SIZE      BT_OP(BT_OGF_STATUS, 0x0008) /* 0x1408 */
1173 struct bt_hci_cp_read_encryption_key_size {
1174 	uint16_t handle;
1175 } __packed;
1176 struct bt_hci_rp_read_encryption_key_size {
1177 	uint8_t  status;
1178 	uint16_t handle;
1179 	uint8_t  key_size;
1180 } __packed;
1181 
1182 /* Bluetooth LE */
1183 
1184 #define BT_HCI_OP_LE_SET_EVENT_MASK             BT_OP(BT_OGF_LE, 0x0001) /* 0x2001 */
1185 struct bt_hci_cp_le_set_event_mask {
1186 	uint8_t events[8];
1187 } __packed;
1188 
1189 #define BT_HCI_OP_LE_READ_BUFFER_SIZE           BT_OP(BT_OGF_LE, 0x0002) /* 0x2002 */
1190 struct bt_hci_rp_le_read_buffer_size {
1191 	uint8_t  status;
1192 	uint16_t le_max_len;
1193 	uint8_t  le_max_num;
1194 } __packed;
1195 
1196 #define BT_HCI_OP_LE_READ_LOCAL_FEATURES        BT_OP(BT_OGF_LE, 0x0003) /* 0x2003 */
1197 struct bt_hci_rp_le_read_local_features {
1198 	uint8_t  status;
1199 	uint8_t  features[8];
1200 } __packed;
1201 
1202 #define BT_HCI_OP_LE_SET_RANDOM_ADDRESS         BT_OP(BT_OGF_LE, 0x0005) /* 0x2005 */
1203 struct bt_hci_cp_le_set_random_address {
1204 	bt_addr_t bdaddr;
1205 } __packed;
1206 
1207 #define BT_HCI_ADV_IND                          0x00
1208 #define BT_HCI_ADV_DIRECT_IND                   0x01
1209 #define BT_HCI_ADV_SCAN_IND                     0x02
1210 #define BT_HCI_ADV_NONCONN_IND                  0x03
1211 #define BT_HCI_ADV_DIRECT_IND_LOW_DUTY          0x04
1212 #define BT_HCI_ADV_SCAN_RSP                     0x04
1213 
1214 #define BT_LE_ADV_INTERVAL_MIN                  0x0020
1215 #define BT_LE_ADV_INTERVAL_MAX                  0x4000
1216 #define BT_LE_ADV_INTERVAL_DEFAULT              0x0800
1217 
1218 #define BT_LE_ADV_CHAN_MAP_CHAN_37              0x01
1219 #define BT_LE_ADV_CHAN_MAP_CHAN_38              0x02
1220 #define BT_LE_ADV_CHAN_MAP_CHAN_39              0x04
1221 #define BT_LE_ADV_CHAN_MAP_ALL                  0x07
1222 
1223 #define BT_LE_ADV_FP_NO_FILTER                  0x00
1224 #define BT_LE_ADV_FP_FILTER_SCAN_REQ            0x01
1225 #define BT_LE_ADV_FP_FILTER_CONN_IND            0x02
1226 #define BT_LE_ADV_FP_FILTER_BOTH                0x03
1227 
1228 #define BT_HCI_OP_LE_SET_ADV_PARAM              BT_OP(BT_OGF_LE, 0x0006) /* 0x2006 */
1229 struct bt_hci_cp_le_set_adv_param {
1230 	uint16_t     min_interval;
1231 	uint16_t     max_interval;
1232 	uint8_t      type;
1233 	uint8_t      own_addr_type;
1234 	bt_addr_le_t direct_addr;
1235 	uint8_t      channel_map;
1236 	uint8_t      filter_policy;
1237 } __packed;
1238 
1239 #define BT_HCI_OP_LE_READ_ADV_CHAN_TX_POWER     BT_OP(BT_OGF_LE, 0x0007) /* 0x2007 */
1240 struct bt_hci_rp_le_read_chan_tx_power {
1241 	uint8_t status;
1242 	int8_t  tx_power_level;
1243 } __packed;
1244 
1245 #define BT_HCI_OP_LE_SET_ADV_DATA               BT_OP(BT_OGF_LE, 0x0008) /* 0x2008 */
1246 struct bt_hci_cp_le_set_adv_data {
1247 	uint8_t  len;
1248 	uint8_t  data[31];
1249 } __packed;
1250 
1251 #define BT_HCI_OP_LE_SET_SCAN_RSP_DATA          BT_OP(BT_OGF_LE, 0x0009) /* 0x2009 */
1252 struct bt_hci_cp_le_set_scan_rsp_data {
1253 	uint8_t  len;
1254 	uint8_t  data[31];
1255 } __packed;
1256 
1257 #define BT_HCI_LE_ADV_DISABLE                   0x00
1258 #define BT_HCI_LE_ADV_ENABLE                    0x01
1259 
1260 #define BT_HCI_OP_LE_SET_ADV_ENABLE             BT_OP(BT_OGF_LE, 0x000a) /* 0x200a */
1261 struct bt_hci_cp_le_set_adv_enable {
1262 	uint8_t  enable;
1263 } __packed;
1264 
1265 /* Scan types */
1266 #define BT_HCI_OP_LE_SET_SCAN_PARAM             BT_OP(BT_OGF_LE, 0x000b) /* 0x200b */
1267 #define BT_HCI_LE_SCAN_PASSIVE                  0x00
1268 #define BT_HCI_LE_SCAN_ACTIVE                   0x01
1269 
1270 #define BT_HCI_LE_SCAN_FP_BASIC_NO_FILTER       0x00
1271 #define BT_HCI_LE_SCAN_FP_BASIC_FILTER          0x01
1272 #define BT_HCI_LE_SCAN_FP_EXT_NO_FILTER         0x02
1273 #define BT_HCI_LE_SCAN_FP_EXT_FILTER            0x03
1274 
1275 struct bt_hci_cp_le_set_scan_param {
1276 	uint8_t  scan_type;
1277 	uint16_t interval;
1278 	uint16_t window;
1279 	uint8_t  addr_type;
1280 	uint8_t  filter_policy;
1281 } __packed;
1282 
1283 #define BT_HCI_OP_LE_SET_SCAN_ENABLE            BT_OP(BT_OGF_LE, 0x000c) /* 0x200c */
1284 
1285 #define BT_HCI_LE_SCAN_DISABLE                  0x00
1286 #define BT_HCI_LE_SCAN_ENABLE                   0x01
1287 
1288 #define BT_HCI_LE_SCAN_FILTER_DUP_DISABLE       0x00
1289 #define BT_HCI_LE_SCAN_FILTER_DUP_ENABLE        0x01
1290 
1291 struct bt_hci_cp_le_set_scan_enable {
1292 	uint8_t  enable;
1293 	uint8_t  filter_dup;
1294 } __packed;
1295 
1296 #define BT_HCI_OP_LE_CREATE_CONN                BT_OP(BT_OGF_LE, 0x000d) /* 0x200d */
1297 
1298 #define BT_HCI_LE_CREATE_CONN_FP_NO_FILTER      0x00
1299 #define BT_HCI_LE_CREATE_CONN_FP_FILTER         0x01
1300 
1301 struct bt_hci_cp_le_create_conn {
1302 	uint16_t     scan_interval;
1303 	uint16_t     scan_window;
1304 	uint8_t      filter_policy;
1305 	bt_addr_le_t peer_addr;
1306 	uint8_t      own_addr_type;
1307 	uint16_t     conn_interval_min;
1308 	uint16_t     conn_interval_max;
1309 	uint16_t     conn_latency;
1310 	uint16_t     supervision_timeout;
1311 	uint16_t     min_ce_len;
1312 	uint16_t     max_ce_len;
1313 } __packed;
1314 
1315 #define BT_HCI_OP_LE_CREATE_CONN_CANCEL         BT_OP(BT_OGF_LE, 0x000e) /* 0x200e */
1316 
1317 #define BT_HCI_OP_LE_READ_FAL_SIZE               BT_OP(BT_OGF_LE, 0x000f) /* 0x200f */
1318 struct bt_hci_rp_le_read_fal_size {
1319 	uint8_t  status;
1320 	uint8_t  fal_size;
1321 } __packed;
1322 
1323 #define BT_HCI_OP_LE_CLEAR_FAL                   BT_OP(BT_OGF_LE, 0x0010) /* 0x2010 */
1324 
1325 #define BT_HCI_OP_LE_ADD_DEV_TO_FAL              BT_OP(BT_OGF_LE, 0x0011) /* 0x2011 */
1326 struct bt_hci_cp_le_add_dev_to_fal {
1327 	bt_addr_le_t  addr;
1328 } __packed;
1329 
1330 #define BT_HCI_OP_LE_REM_DEV_FROM_FAL            BT_OP(BT_OGF_LE, 0x0012) /* 0x2012 */
1331 struct bt_hci_cp_le_rem_dev_from_fal {
1332 	bt_addr_le_t  addr;
1333 } __packed;
1334 
1335 #define BT_HCI_OP_LE_CONN_UPDATE                BT_OP(BT_OGF_LE, 0x0013) /* 0x2013 */
1336 struct hci_cp_le_conn_update {
1337 	uint16_t handle;
1338 	uint16_t conn_interval_min;
1339 	uint16_t conn_interval_max;
1340 	uint16_t conn_latency;
1341 	uint16_t supervision_timeout;
1342 	uint16_t min_ce_len;
1343 	uint16_t max_ce_len;
1344 } __packed;
1345 
1346 #define BT_HCI_OP_LE_SET_HOST_CHAN_CLASSIF      BT_OP(BT_OGF_LE, 0x0014) /* 0x2014 */
1347 struct bt_hci_cp_le_set_host_chan_classif {
1348 	uint8_t  ch_map[5];
1349 } __packed;
1350 
1351 #define BT_HCI_OP_LE_READ_CHAN_MAP              BT_OP(BT_OGF_LE, 0x0015) /* 0x2015 */
1352 struct bt_hci_cp_le_read_chan_map {
1353 	uint16_t handle;
1354 } __packed;
1355 struct bt_hci_rp_le_read_chan_map {
1356 	uint8_t  status;
1357 	uint16_t handle;
1358 	uint8_t  ch_map[5];
1359 } __packed;
1360 
1361 #define BT_HCI_OP_LE_READ_REMOTE_FEATURES       BT_OP(BT_OGF_LE, 0x0016) /* 0x2016 */
1362 struct bt_hci_cp_le_read_remote_features {
1363 	uint16_t  handle;
1364 } __packed;
1365 
1366 #define BT_HCI_OP_LE_ENCRYPT                    BT_OP(BT_OGF_LE, 0x0017) /* 0x2017 */
1367 struct bt_hci_cp_le_encrypt {
1368 	uint8_t  key[16];
1369 	uint8_t  plaintext[16];
1370 } __packed;
1371 struct bt_hci_rp_le_encrypt {
1372 	uint8_t  status;
1373 	uint8_t  enc_data[16];
1374 } __packed;
1375 
1376 #define BT_HCI_OP_LE_RAND                       BT_OP(BT_OGF_LE, 0x0018) /* 0x2018 */
1377 struct bt_hci_rp_le_rand {
1378 	uint8_t  status;
1379 	uint8_t  rand[8];
1380 } __packed;
1381 
1382 #define BT_HCI_OP_LE_START_ENCRYPTION           BT_OP(BT_OGF_LE, 0x0019) /* 0x2019 */
1383 struct bt_hci_cp_le_start_encryption {
1384 	uint16_t handle;
1385 	uint64_t rand;
1386 	uint16_t ediv;
1387 	uint8_t  ltk[16];
1388 } __packed;
1389 
1390 #define BT_HCI_OP_LE_LTK_REQ_REPLY              BT_OP(BT_OGF_LE, 0x001a) /* 0x201a */
1391 struct bt_hci_cp_le_ltk_req_reply {
1392 	uint16_t handle;
1393 	uint8_t  ltk[16];
1394 } __packed;
1395 struct bt_hci_rp_le_ltk_req_reply {
1396 	uint8_t  status;
1397 	uint16_t handle;
1398 } __packed;
1399 
1400 #define BT_HCI_OP_LE_LTK_REQ_NEG_REPLY          BT_OP(BT_OGF_LE, 0x001b) /* 0x201b */
1401 struct bt_hci_cp_le_ltk_req_neg_reply {
1402 	uint16_t handle;
1403 } __packed;
1404 struct bt_hci_rp_le_ltk_req_neg_reply {
1405 	uint8_t  status;
1406 	uint16_t handle;
1407 } __packed;
1408 
1409 #define BT_HCI_OP_LE_READ_SUPP_STATES           BT_OP(BT_OGF_LE, 0x001c) /* 0x201c */
1410 struct bt_hci_rp_le_read_supp_states {
1411 	uint8_t  status;
1412 	uint8_t  le_states[8];
1413 } __packed;
1414 
1415 #define BT_HCI_OP_LE_RX_TEST                    BT_OP(BT_OGF_LE, 0x001d) /* 0x201d */
1416 struct bt_hci_cp_le_rx_test {
1417 	uint8_t  rx_ch;
1418 } __packed;
1419 
1420 #define BT_HCI_TEST_PKT_PAYLOAD_PRBS9           0x00
1421 #define BT_HCI_TEST_PKT_PAYLOAD_11110000        0x01
1422 #define BT_HCI_TEST_PKT_PAYLOAD_10101010        0x02
1423 #define BT_HCI_TEST_PKT_PAYLOAD_PRBS15          0x03
1424 #define BT_HCI_TEST_PKT_PAYLOAD_11111111        0x04
1425 #define BT_HCI_TEST_PKT_PAYLOAD_00000000        0x05
1426 #define BT_HCI_TEST_PKT_PAYLOAD_00001111        0x06
1427 #define BT_HCI_TEST_PKT_PAYLOAD_01010101        0x07
1428 
1429 #define BT_HCI_OP_LE_TX_TEST                    BT_OP(BT_OGF_LE, 0x001e) /* 0x201e */
1430 struct bt_hci_cp_le_tx_test {
1431 	uint8_t  tx_ch;
1432 	uint8_t  test_data_len;
1433 	uint8_t  pkt_payload;
1434 } __packed;
1435 
1436 #define BT_HCI_OP_LE_TEST_END                   BT_OP(BT_OGF_LE, 0x001f) /* 0x201f */
1437 struct bt_hci_rp_le_test_end {
1438 	uint8_t  status;
1439 	uint16_t rx_pkt_count;
1440 } __packed;
1441 
1442 #define BT_HCI_OP_LE_CONN_PARAM_REQ_REPLY       BT_OP(BT_OGF_LE, 0x0020) /* 0x2020 */
1443 struct bt_hci_cp_le_conn_param_req_reply {
1444 	uint16_t handle;
1445 	uint16_t interval_min;
1446 	uint16_t interval_max;
1447 	uint16_t latency;
1448 	uint16_t timeout;
1449 	uint16_t min_ce_len;
1450 	uint16_t max_ce_len;
1451 } __packed;
1452 struct bt_hci_rp_le_conn_param_req_reply {
1453 	uint8_t  status;
1454 	uint16_t handle;
1455 } __packed;
1456 
1457 #define BT_HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY   BT_OP(BT_OGF_LE, 0x0021) /* 0x2021 */
1458 struct bt_hci_cp_le_conn_param_req_neg_reply {
1459 	uint16_t handle;
1460 	uint8_t  reason;
1461 } __packed;
1462 struct bt_hci_rp_le_conn_param_req_neg_reply {
1463 	uint8_t  status;
1464 	uint16_t handle;
1465 } __packed;
1466 
1467 #define BT_HCI_OP_LE_SET_DATA_LEN               BT_OP(BT_OGF_LE, 0x0022) /* 0x2022 */
1468 struct bt_hci_cp_le_set_data_len {
1469 	uint16_t handle;
1470 	uint16_t tx_octets;
1471 	uint16_t tx_time;
1472 } __packed;
1473 struct bt_hci_rp_le_set_data_len {
1474 	uint8_t  status;
1475 	uint16_t handle;
1476 } __packed;
1477 
1478 #define BT_HCI_OP_LE_READ_DEFAULT_DATA_LEN      BT_OP(BT_OGF_LE, 0x0023) /* 0x2023 */
1479 struct bt_hci_rp_le_read_default_data_len {
1480 	uint8_t  status;
1481 	uint16_t max_tx_octets;
1482 	uint16_t max_tx_time;
1483 } __packed;
1484 
1485 #define BT_HCI_OP_LE_WRITE_DEFAULT_DATA_LEN     BT_OP(BT_OGF_LE, 0x0024) /* 0x2024 */
1486 struct bt_hci_cp_le_write_default_data_len {
1487 	uint16_t max_tx_octets;
1488 	uint16_t max_tx_time;
1489 } __packed;
1490 
1491 #define BT_HCI_OP_LE_P256_PUBLIC_KEY            BT_OP(BT_OGF_LE, 0x0025) /* 0x2025 */
1492 
1493 #define BT_HCI_OP_LE_GENERATE_DHKEY             BT_OP(BT_OGF_LE, 0x0026) /* 0x2026 */
1494 struct bt_hci_cp_le_generate_dhkey {
1495 	uint8_t key[64];
1496 } __packed;
1497 
1498 
1499 #define BT_HCI_OP_LE_GENERATE_DHKEY_V2          BT_OP(BT_OGF_LE, 0x005e) /* 0x205e */
1500 
1501 #define BT_HCI_LE_KEY_TYPE_GENERATED            0x00
1502 #define BT_HCI_LE_KEY_TYPE_DEBUG                0x01
1503 
1504 struct bt_hci_cp_le_generate_dhkey_v2 {
1505 	uint8_t key[64];
1506 	uint8_t key_type;
1507 } __packed;
1508 
1509 
1510 #define BT_HCI_OP_LE_ADD_DEV_TO_RL              BT_OP(BT_OGF_LE, 0x0027) /* 0x2027 */
1511 struct bt_hci_cp_le_add_dev_to_rl {
1512 	bt_addr_le_t  peer_id_addr;
1513 	uint8_t       peer_irk[16];
1514 	uint8_t       local_irk[16];
1515 } __packed;
1516 
1517 #define BT_HCI_OP_LE_REM_DEV_FROM_RL            BT_OP(BT_OGF_LE, 0x0028) /* 0x2028 */
1518 struct bt_hci_cp_le_rem_dev_from_rl {
1519 	bt_addr_le_t  peer_id_addr;
1520 } __packed;
1521 
1522 #define BT_HCI_OP_LE_CLEAR_RL                   BT_OP(BT_OGF_LE, 0x0029) /* 0x2029 */
1523 
1524 #define BT_HCI_OP_LE_READ_RL_SIZE               BT_OP(BT_OGF_LE, 0x002a) /* 0x202a */
1525 struct bt_hci_rp_le_read_rl_size {
1526 	uint8_t  status;
1527 	uint8_t  rl_size;
1528 } __packed;
1529 
1530 #define BT_HCI_OP_LE_READ_PEER_RPA              BT_OP(BT_OGF_LE, 0x002b) /* 0x202b */
1531 struct bt_hci_cp_le_read_peer_rpa {
1532 	bt_addr_le_t  peer_id_addr;
1533 } __packed;
1534 struct bt_hci_rp_le_read_peer_rpa {
1535 	uint8_t    status;
1536 	bt_addr_t  peer_rpa;
1537 } __packed;
1538 
1539 #define BT_HCI_OP_LE_READ_LOCAL_RPA             BT_OP(BT_OGF_LE, 0x002c) /* 0x202c */
1540 struct bt_hci_cp_le_read_local_rpa {
1541 	bt_addr_le_t  peer_id_addr;
1542 } __packed;
1543 struct bt_hci_rp_le_read_local_rpa {
1544 	uint8_t    status;
1545 	bt_addr_t  local_rpa;
1546 } __packed;
1547 
1548 #define BT_HCI_ADDR_RES_DISABLE                 0x00
1549 #define BT_HCI_ADDR_RES_ENABLE                  0x01
1550 
1551 #define BT_HCI_OP_LE_SET_ADDR_RES_ENABLE        BT_OP(BT_OGF_LE, 0x002d) /* 0x202d */
1552 struct bt_hci_cp_le_set_addr_res_enable {
1553 	uint8_t  enable;
1554 } __packed;
1555 
1556 #define BT_HCI_OP_LE_SET_RPA_TIMEOUT            BT_OP(BT_OGF_LE, 0x002e) /* 0x202e */
1557 struct bt_hci_cp_le_set_rpa_timeout {
1558 	uint16_t rpa_timeout;
1559 } __packed;
1560 
1561 /* All limits according to BT Core spec 5.4 [Vol 4, Part E, 7.8.46] */
1562 #define BT_HCI_LE_MAX_TX_OCTETS_MIN             0x001B
1563 #define BT_HCI_LE_MAX_TX_OCTETS_MAX             0x00FB
1564 #define BT_HCI_LE_MAX_RX_OCTETS_MIN             0x001B
1565 #define BT_HCI_LE_MAX_RX_OCTETS_MAX             0x00FB
1566 
1567 #define BT_HCI_LE_MAX_TX_TIME_MIN               0x0148
1568 #define BT_HCI_LE_MAX_TX_TIME_MAX               0x4290
1569 #define BT_HCI_LE_MAX_RX_TIME_MIN               0x0148
1570 #define BT_HCI_LE_MAX_RX_TIME_MAX               0x4290
1571 
1572 #define BT_HCI_OP_LE_READ_MAX_DATA_LEN          BT_OP(BT_OGF_LE, 0x002f) /* 0x202f */
1573 struct bt_hci_rp_le_read_max_data_len {
1574 	uint8_t  status;
1575 	uint16_t max_tx_octets;
1576 	uint16_t max_tx_time;
1577 	uint16_t max_rx_octets;
1578 	uint16_t max_rx_time;
1579 } __packed;
1580 
1581 #define BT_HCI_LE_PHY_1M                        0x01
1582 #define BT_HCI_LE_PHY_2M                        0x02
1583 #define BT_HCI_LE_PHY_CODED                     0x03
1584 
1585 #define BT_HCI_OP_LE_READ_PHY                   BT_OP(BT_OGF_LE, 0x0030) /* 0x2030 */
1586 struct bt_hci_cp_le_read_phy {
1587 	uint16_t handle;
1588 } __packed;
1589 struct bt_hci_rp_le_read_phy {
1590 	uint8_t  status;
1591 	uint16_t handle;
1592 	uint8_t  tx_phy;
1593 	uint8_t  rx_phy;
1594 } __packed;
1595 
1596 #define BT_HCI_LE_PHY_TX_ANY                    BIT(0)
1597 #define BT_HCI_LE_PHY_RX_ANY                    BIT(1)
1598 
1599 #define BT_HCI_LE_PHY_PREFER_1M                 BIT(0)
1600 #define BT_HCI_LE_PHY_PREFER_2M                 BIT(1)
1601 #define BT_HCI_LE_PHY_PREFER_CODED              BIT(2)
1602 
1603 #define BT_HCI_OP_LE_SET_DEFAULT_PHY            BT_OP(BT_OGF_LE, 0x0031) /* 0x2031 */
1604 struct bt_hci_cp_le_set_default_phy {
1605 	uint8_t all_phys;
1606 	uint8_t tx_phys;
1607 	uint8_t rx_phys;
1608 } __packed;
1609 
1610 #define BT_HCI_LE_PHY_CODED_ANY                 0x00
1611 #define BT_HCI_LE_PHY_CODED_S2                  0x01
1612 #define BT_HCI_LE_PHY_CODED_S8                  0x02
1613 
1614 #define BT_HCI_OP_LE_SET_PHY                    BT_OP(BT_OGF_LE, 0x0032) /* 0x2032 */
1615 struct bt_hci_cp_le_set_phy {
1616 	uint16_t  handle;
1617 	uint8_t   all_phys;
1618 	uint8_t   tx_phys;
1619 	uint8_t   rx_phys;
1620 	uint16_t  phy_opts;
1621 } __packed;
1622 
1623 #define BT_HCI_LE_MOD_INDEX_STANDARD            0x00
1624 #define BT_HCI_LE_MOD_INDEX_STABLE              0x01
1625 
1626 #define BT_HCI_LE_RX_PHY_1M                     0x01
1627 #define BT_HCI_LE_RX_PHY_2M                     0x02
1628 #define BT_HCI_LE_RX_PHY_CODED                  0x03
1629 
1630 #define BT_HCI_OP_LE_ENH_RX_TEST                BT_OP(BT_OGF_LE, 0x0033) /* 0x2033 */
1631 struct bt_hci_cp_le_enh_rx_test {
1632 	uint8_t  rx_ch;
1633 	uint8_t  phy;
1634 	uint8_t  mod_index;
1635 } __packed;
1636 
1637 #define BT_HCI_LE_TX_PHY_1M                     0x01
1638 #define BT_HCI_LE_TX_PHY_2M                     0x02
1639 #define BT_HCI_LE_TX_PHY_CODED_S8               0x03
1640 #define BT_HCI_LE_TX_PHY_CODED_S2               0x04
1641 
1642 #define BT_HCI_OP_LE_ENH_TX_TEST                BT_OP(BT_OGF_LE, 0x0034) /* 0x2034 */
1643 struct bt_hci_cp_le_enh_tx_test {
1644 	uint8_t  tx_ch;
1645 	uint8_t  test_data_len;
1646 	uint8_t  pkt_payload;
1647 	uint8_t  phy;
1648 } __packed;
1649 
1650 #define BT_HCI_OP_LE_SET_ADV_SET_RANDOM_ADDR    BT_OP(BT_OGF_LE, 0x0035) /* 0x2035 */
1651 struct bt_hci_cp_le_set_adv_set_random_addr {
1652 	uint8_t   handle;
1653 	bt_addr_t bdaddr;
1654 } __packed;
1655 
1656 #define BT_HCI_LE_ADV_PROP_CONN                 BIT(0)
1657 #define BT_HCI_LE_ADV_PROP_SCAN                 BIT(1)
1658 #define BT_HCI_LE_ADV_PROP_DIRECT               BIT(2)
1659 #define BT_HCI_LE_ADV_PROP_HI_DC_CONN           BIT(3)
1660 #define BT_HCI_LE_ADV_PROP_LEGACY               BIT(4)
1661 #define BT_HCI_LE_ADV_PROP_ANON                 BIT(5)
1662 #define BT_HCI_LE_ADV_PROP_TX_POWER             BIT(6)
1663 
1664 #define BT_HCI_LE_PRIM_ADV_INTERVAL_MIN         0x000020
1665 #define BT_HCI_LE_PRIM_ADV_INTERVAL_MAX         0xFFFFFF
1666 
1667 #define BT_HCI_LE_ADV_SCAN_REQ_ENABLE  1
1668 #define BT_HCI_LE_ADV_SCAN_REQ_DISABLE 0
1669 
1670 #define BT_HCI_LE_ADV_TX_POWER_NO_PREF 0x7F
1671 
1672 #define BT_HCI_LE_ADV_HANDLE_MAX       0xEF
1673 
1674 #define BT_HCI_LE_EXT_ADV_SID_INVALID  0xFF
1675 
1676 #define BT_HCI_OP_LE_SET_EXT_ADV_PARAM          BT_OP(BT_OGF_LE, 0x0036) /* 0x2036 */
1677 struct bt_hci_cp_le_set_ext_adv_param {
1678 	uint8_t      handle;
1679 	uint16_t     props;
1680 	uint8_t      prim_min_interval[3];
1681 	uint8_t      prim_max_interval[3];
1682 	uint8_t      prim_channel_map;
1683 	uint8_t      own_addr_type;
1684 	bt_addr_le_t peer_addr;
1685 	uint8_t      filter_policy;
1686 	int8_t       tx_power;
1687 	uint8_t      prim_adv_phy;
1688 	uint8_t      sec_adv_max_skip;
1689 	uint8_t      sec_adv_phy;
1690 	uint8_t      sid;
1691 	uint8_t      scan_req_notify_enable;
1692 } __packed;
1693 struct bt_hci_rp_le_set_ext_adv_param {
1694 	uint8_t status;
1695 	int8_t  tx_power;
1696 } __packed;
1697 
1698 #define BT_HCI_LE_ADV_PHY_OPTION_NO_REQUIRED 0x00
1699 #define BT_HCI_LE_ADV_PHY_OPTION_REQUIRE_S2  0x03
1700 #define BT_HCI_LE_ADV_PHY_OPTION_REQUIRE_S8  0x04
1701 
1702 #define BT_HCI_OP_LE_SET_EXT_ADV_PARAM_V2        BT_OP(BT_OGF_LE, 0x007F) /* 0x207F */
1703 struct bt_hci_cp_le_set_ext_adv_param_v2 {
1704 	uint8_t      handle;
1705 	uint16_t     props;
1706 	uint8_t      prim_min_interval[3];
1707 	uint8_t      prim_max_interval[3];
1708 	uint8_t      prim_channel_map;
1709 	uint8_t      own_addr_type;
1710 	bt_addr_le_t peer_addr;
1711 	uint8_t      filter_policy;
1712 	int8_t       tx_power;
1713 	uint8_t      prim_adv_phy;
1714 	uint8_t      sec_adv_max_skip;
1715 	uint8_t      sec_adv_phy;
1716 	uint8_t      sid;
1717 	uint8_t      scan_req_notify_enable;
1718 	uint8_t      prim_adv_phy_opt;
1719 	uint8_t      sec_adv_phy_opt;
1720 } __packed;
1721 
1722 #define BT_HCI_LE_EXT_ADV_OP_INTERM_FRAG        0x00
1723 #define BT_HCI_LE_EXT_ADV_OP_FIRST_FRAG         0x01
1724 #define BT_HCI_LE_EXT_ADV_OP_LAST_FRAG          0x02
1725 #define BT_HCI_LE_EXT_ADV_OP_COMPLETE_DATA      0x03
1726 #define BT_HCI_LE_EXT_ADV_OP_UNCHANGED_DATA     0x04
1727 
1728 #define BT_HCI_LE_EXT_ADV_FRAG_ENABLED          0x00
1729 #define BT_HCI_LE_EXT_ADV_FRAG_DISABLED         0x01
1730 
1731 #define BT_HCI_LE_EXT_ADV_FRAG_MAX_LEN          251
1732 
1733 #define BT_HCI_OP_LE_SET_EXT_ADV_DATA           BT_OP(BT_OGF_LE, 0x0037) /* 0x2037 */
1734 struct bt_hci_cp_le_set_ext_adv_data {
1735 	uint8_t  handle;
1736 	uint8_t  op;
1737 	uint8_t  frag_pref;
1738 	uint8_t  len;
1739 	uint8_t  data[0];
1740 } __packed;
1741 
1742 #define BT_HCI_OP_LE_SET_EXT_SCAN_RSP_DATA      BT_OP(BT_OGF_LE, 0x0038) /* 0x2038 */
1743 struct bt_hci_cp_le_set_ext_scan_rsp_data {
1744 	uint8_t  handle;
1745 	uint8_t  op;
1746 	uint8_t  frag_pref;
1747 	uint8_t  len;
1748 	uint8_t  data[0];
1749 } __packed;
1750 
1751 #define BT_HCI_OP_LE_SET_EXT_ADV_ENABLE         BT_OP(BT_OGF_LE, 0x0039) /* 0x2039 */
1752 struct bt_hci_ext_adv_set {
1753 	uint8_t  handle;
1754 	uint16_t duration;
1755 	uint8_t  max_ext_adv_evts;
1756 } __packed;
1757 
1758 struct bt_hci_cp_le_set_ext_adv_enable {
1759 	uint8_t  enable;
1760 	uint8_t  set_num;
1761 	struct bt_hci_ext_adv_set s[0];
1762 } __packed;
1763 
1764 #define BT_HCI_OP_LE_READ_MAX_ADV_DATA_LEN      BT_OP(BT_OGF_LE, 0x003a) /* 0x203a */
1765 struct bt_hci_rp_le_read_max_adv_data_len {
1766 	uint8_t  status;
1767 	uint16_t max_adv_data_len;
1768 } __packed;
1769 
1770 #define BT_HCI_OP_LE_READ_NUM_ADV_SETS          BT_OP(BT_OGF_LE, 0x003b) /* 0x203b */
1771 struct bt_hci_rp_le_read_num_adv_sets {
1772 	uint8_t  status;
1773 	uint8_t  num_sets;
1774 } __packed;
1775 
1776 #define BT_HCI_OP_LE_REMOVE_ADV_SET             BT_OP(BT_OGF_LE, 0x003c) /* 0x203c */
1777 struct bt_hci_cp_le_remove_adv_set {
1778 	uint8_t  handle;
1779 } __packed;
1780 
1781 #define BT_HCI_OP_CLEAR_ADV_SETS                BT_OP(BT_OGF_LE, 0x003d) /* 0x203d */
1782 
1783 #define BT_HCI_LE_PER_ADV_INTERVAL_MIN          0x0006
1784 #define BT_HCI_LE_PER_ADV_INTERVAL_MAX          0xFFFF
1785 
1786 #define BT_HCI_OP_LE_SET_PER_ADV_PARAM          BT_OP(BT_OGF_LE, 0x003e) /* 0x203e */
1787 struct bt_hci_cp_le_set_per_adv_param {
1788 	uint8_t  handle;
1789 	uint16_t min_interval;
1790 	uint16_t max_interval;
1791 	uint16_t props;
1792 } __packed;
1793 
1794 #define BT_HCI_LE_PER_ADV_OP_INTERM_FRAG        0x00
1795 #define BT_HCI_LE_PER_ADV_OP_FIRST_FRAG         0x01
1796 #define BT_HCI_LE_PER_ADV_OP_LAST_FRAG          0x02
1797 #define BT_HCI_LE_PER_ADV_OP_COMPLETE_DATA      0x03
1798 
1799 #define BT_HCI_LE_PER_ADV_FRAG_MAX_LEN          252
1800 
1801 #define BT_HCI_OP_LE_SET_PER_ADV_DATA           BT_OP(BT_OGF_LE, 0x003f) /* 0x203f */
1802 struct bt_hci_cp_le_set_per_adv_data {
1803 	uint8_t  handle;
1804 	uint8_t  op;
1805 	uint8_t  len;
1806 	uint8_t  data[0];
1807 } __packed;
1808 
1809 #define BT_HCI_LE_SET_PER_ADV_ENABLE_ENABLE     BIT(0)
1810 #define BT_HCI_LE_SET_PER_ADV_ENABLE_ADI        BIT(1)
1811 
1812 #define BT_HCI_OP_LE_SET_PER_ADV_ENABLE         BT_OP(BT_OGF_LE, 0x0040) /* 0x2040 */
1813 struct bt_hci_cp_le_set_per_adv_enable {
1814 	uint8_t  enable;
1815 	uint8_t  handle;
1816 } __packed;
1817 
1818 #define BT_HCI_OP_LE_SET_EXT_SCAN_PARAM         BT_OP(BT_OGF_LE, 0x0041) /* 0x2041 */
1819 struct bt_hci_ext_scan_phy {
1820 	uint8_t  type;
1821 	uint16_t interval;
1822 	uint16_t window;
1823 } __packed;
1824 
1825 #define BT_HCI_LE_EXT_SCAN_PHY_1M               BIT(0)
1826 #define BT_HCI_LE_EXT_SCAN_PHY_2M               BIT(1)
1827 #define BT_HCI_LE_EXT_SCAN_PHY_CODED            BIT(2)
1828 
1829 struct bt_hci_cp_le_set_ext_scan_param {
1830 	uint8_t  own_addr_type;
1831 	uint8_t  filter_policy;
1832 	uint8_t  phys;
1833 	struct bt_hci_ext_scan_phy p[0];
1834 } __packed;
1835 
1836 /* Extends BT_HCI_LE_SCAN_FILTER_DUP */
1837 #define BT_HCI_LE_EXT_SCAN_FILTER_DUP_ENABLE_RESET  0x02
1838 
1839 #define BT_HCI_OP_LE_SET_EXT_SCAN_ENABLE        BT_OP(BT_OGF_LE, 0x0042) /* 0x2042 */
1840 struct bt_hci_cp_le_set_ext_scan_enable {
1841 	uint8_t  enable;
1842 	uint8_t  filter_dup;
1843 	uint16_t duration;
1844 	uint16_t period;
1845 } __packed;
1846 
1847 #define BT_HCI_OP_LE_EXT_CREATE_CONN            BT_OP(BT_OGF_LE, 0x0043) /* 0x2043 */
1848 #define BT_HCI_OP_LE_EXT_CREATE_CONN_V2         BT_OP(BT_OGF_LE, 0x0085) /* 0x2085 */
1849 struct bt_hci_ext_conn_phy {
1850 	uint16_t scan_interval;
1851 	uint16_t scan_window;
1852 	uint16_t conn_interval_min;
1853 	uint16_t conn_interval_max;
1854 	uint16_t conn_latency;
1855 	uint16_t supervision_timeout;
1856 	uint16_t min_ce_len;
1857 	uint16_t max_ce_len;
1858 } __packed;
1859 
1860 struct bt_hci_cp_le_ext_create_conn {
1861 	uint8_t      filter_policy;
1862 	uint8_t      own_addr_type;
1863 	bt_addr_le_t peer_addr;
1864 	uint8_t      phys;
1865 	struct bt_hci_ext_conn_phy p[0];
1866 } __packed;
1867 
1868 struct bt_hci_cp_le_ext_create_conn_v2 {
1869 	uint8_t      adv_handle;
1870 	uint8_t      subevent;
1871 	uint8_t      filter_policy;
1872 	uint8_t      own_addr_type;
1873 	bt_addr_le_t peer_addr;
1874 	uint8_t      phys;
1875 	struct bt_hci_ext_conn_phy p[0];
1876 } __packed;
1877 
1878 #define BT_HCI_OP_LE_SET_PER_ADV_SUBEVENT_DATA  BT_OP(BT_OGF_LE, 0x0082) /* 0x2082 */
1879 struct bt_hci_cp_le_set_pawr_subevent_data_element {
1880 	uint8_t subevent;
1881 	uint8_t response_slot_start;
1882 	uint8_t response_slot_count;
1883 	uint8_t subevent_data_length;
1884 	uint8_t subevent_data[0];
1885 } __packed;
1886 
1887 struct bt_hci_cp_le_set_pawr_subevent_data {
1888 	uint8_t adv_handle;
1889 	uint8_t num_subevents;
1890 	struct bt_hci_cp_le_set_pawr_subevent_data_element subevents[0];
1891 } __packed;
1892 
1893 
1894 #define BT_HCI_OP_LE_SET_PER_ADV_RESPONSE_DATA  BT_OP(BT_OGF_LE, 0x0083) /* 0x2083 */
1895 struct bt_hci_cp_le_set_pawr_response_data {
1896 	uint16_t sync_handle;
1897 	uint16_t request_event;
1898 	uint8_t  request_subevent;
1899 	uint8_t  response_subevent;
1900 	uint8_t  response_slot;
1901 	uint8_t  response_data_length;
1902 	uint8_t  response_data[0];
1903 } __packed;
1904 
1905 #define BT_HCI_OP_LE_SET_PER_ADV_SYNC_SUBEVENT  BT_OP(BT_OGF_LE, 0x0084) /* 0x2084 */
1906 struct bt_hci_cp_le_set_pawr_sync_subevent {
1907 	uint16_t sync_handle;
1908 	uint16_t periodic_adv_properties;
1909 	uint8_t  num_subevents;
1910 	uint8_t  subevents[0];
1911 } __packed;
1912 
1913 
1914 #define BT_HCI_OP_LE_SET_PER_ADV_PARAM_V2       BT_OP(BT_OGF_LE, 0x0086) /* 0x2086 */
1915 struct bt_hci_cp_le_set_per_adv_param_v2 {
1916 	uint8_t  handle;
1917 	uint16_t min_interval;
1918 	uint16_t max_interval;
1919 	uint16_t props;
1920 	uint8_t  num_subevents;
1921 	uint8_t  subevent_interval;
1922 	uint8_t  response_slot_delay;
1923 	uint8_t  response_slot_spacing;
1924 	uint8_t  num_response_slots;
1925 } __packed;
1926 
1927 
1928 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_FP_USE_LIST               BIT(0)
1929 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_FP_REPORTS_DISABLED       BIT(1)
1930 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_FP_FILTER_DUPLICATE       BIT(2)
1931 
1932 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_FILTERING     0
1933 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_AOA           BIT(0)
1934 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_AOD_1US       BIT(1)
1935 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_AOD_2US       BIT(2)
1936 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_CTE           BIT(3)
1937 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_ONLY_CTE         BIT(4)
1938 /* Constants to check correctness of CTE type */
1939 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_ALLOWED_BITS 5
1940 #define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_INVALID_VALUE \
1941 	(~BIT_MASK(BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_ALLOWED_BITS))
1942 
1943 #define BT_HCI_OP_LE_PER_ADV_CREATE_SYNC        BT_OP(BT_OGF_LE, 0x0044) /* 0x2044 */
1944 struct bt_hci_cp_le_per_adv_create_sync {
1945 	uint8_t      options;
1946 	uint8_t      sid;
1947 	bt_addr_le_t addr;
1948 	uint16_t     skip;
1949 	uint16_t     sync_timeout;
1950 	uint8_t      cte_type;
1951 } __packed;
1952 
1953 #define BT_HCI_OP_LE_PER_ADV_CREATE_SYNC_CANCEL BT_OP(BT_OGF_LE, 0x0045) /* 0x2045 */
1954 
1955 #define BT_HCI_OP_LE_PER_ADV_TERMINATE_SYNC     BT_OP(BT_OGF_LE, 0x0046) /* 0x2046 */
1956 struct bt_hci_cp_le_per_adv_terminate_sync {
1957 	uint16_t handle;
1958 } __packed;
1959 
1960 #define BT_HCI_OP_LE_ADD_DEV_TO_PER_ADV_LIST    BT_OP(BT_OGF_LE, 0x0047) /* 0x2047 */
1961 struct bt_hci_cp_le_add_dev_to_per_adv_list {
1962 	bt_addr_le_t addr;
1963 	uint8_t      sid;
1964 } __packed;
1965 
1966 #define BT_HCI_OP_LE_REM_DEV_FROM_PER_ADV_LIST  BT_OP(BT_OGF_LE, 0x0048) /* 0x2048 */
1967 struct bt_hci_cp_le_rem_dev_from_per_adv_list {
1968 	bt_addr_le_t addr;
1969 	uint8_t      sid;
1970 } __packed;
1971 
1972 #define BT_HCI_OP_LE_CLEAR_PER_ADV_LIST         BT_OP(BT_OGF_LE, 0x0049) /* 0x2049 */
1973 
1974 #define BT_HCI_OP_LE_READ_PER_ADV_LIST_SIZE     BT_OP(BT_OGF_LE, 0x004a) /* 0x204a */
1975 struct bt_hci_rp_le_read_per_adv_list_size {
1976 	uint8_t  status;
1977 	uint8_t  list_size;
1978 } __packed;
1979 
1980 #define BT_HCI_OP_LE_READ_TX_POWER              BT_OP(BT_OGF_LE, 0x004b) /* 0x204b */
1981 struct bt_hci_rp_le_read_tx_power {
1982 	uint8_t status;
1983 	int8_t  min_tx_power;
1984 	int8_t  max_tx_power;
1985 } __packed;
1986 
1987 #define BT_HCI_OP_LE_READ_RF_PATH_COMP          BT_OP(BT_OGF_LE, 0x004c) /* 0x204c */
1988 struct bt_hci_rp_le_read_rf_path_comp {
1989 	uint8_t status;
1990 	int16_t tx_path_comp;
1991 	int16_t rx_path_comp;
1992 } __packed;
1993 
1994 #define BT_HCI_OP_LE_WRITE_RF_PATH_COMP         BT_OP(BT_OGF_LE, 0x004d) /* 0x204d */
1995 struct bt_hci_cp_le_write_rf_path_comp {
1996 	int16_t  tx_path_comp;
1997 	int16_t  rx_path_comp;
1998 } __packed;
1999 
2000 #define BT_HCI_LE_PRIVACY_MODE_NETWORK          0x00
2001 #define BT_HCI_LE_PRIVACY_MODE_DEVICE           0x01
2002 
2003 #define BT_HCI_OP_LE_SET_PRIVACY_MODE           BT_OP(BT_OGF_LE, 0x004e) /* 0x204e */
2004 struct bt_hci_cp_le_set_privacy_mode {
2005 	bt_addr_le_t id_addr;
2006 	uint8_t         mode;
2007 } __packed;
2008 
2009 #define BT_HCI_LE_TEST_CTE_DISABLED             0x00
2010 #define BT_HCI_LE_TEST_CTE_TYPE_ANY             0x00
2011 #define BT_HCI_LE_TEST_SLOT_DURATION_ANY        0x00
2012 #define BT_HCI_LE_TEST_SWITCH_PATTERN_LEN_ANY   0x00
2013 
2014 #define BT_HCI_OP_LE_RX_TEST_V3                 BT_OP(BT_OGF_LE, 0x004f) /* 0x204f */
2015 struct bt_hci_cp_le_rx_test_v3 {
2016 	uint8_t  rx_ch;
2017 	uint8_t  phy;
2018 	uint8_t  mod_index;
2019 	uint8_t  expected_cte_len;
2020 	uint8_t  expected_cte_type;
2021 	uint8_t  slot_durations;
2022 	uint8_t  switch_pattern_len;
2023 	uint8_t  ant_ids[0];
2024 } __packed;
2025 
2026 #define BT_HCI_OP_LE_TX_TEST_V3                 BT_OP(BT_OGF_LE, 0x0050) /* 0x2050 */
2027 
2028 struct bt_hci_cp_le_tx_test_v3 {
2029 	uint8_t  tx_ch;
2030 	uint8_t  test_data_len;
2031 	uint8_t  pkt_payload;
2032 	uint8_t  phy;
2033 	uint8_t  cte_len;
2034 	uint8_t  cte_type;
2035 	uint8_t  switch_pattern_len;
2036 	uint8_t  ant_ids[0];
2037 } __packed;
2038 
2039 /* Min and max Constant Tone Extension length in 8us units */
2040 #define BT_HCI_LE_CTE_LEN_MIN                  0x2
2041 #define BT_HCI_LE_CTE_LEN_MAX                  0x14
2042 
2043 #define BT_HCI_LE_AOA_CTE                      0x0
2044 #define BT_HCI_LE_AOD_CTE_1US                  0x1
2045 #define BT_HCI_LE_AOD_CTE_2US                  0x2
2046 #define BT_HCI_LE_NO_CTE                       0xFF
2047 
2048 #define BT_HCI_LE_CTE_COUNT_MIN                0x1
2049 #define BT_HCI_LE_CTE_COUNT_MAX                0x10
2050 
2051 #define BT_HCI_OP_LE_SET_CL_CTE_TX_PARAMS      BT_OP(BT_OGF_LE, 0x0051) /* 0x2051 */
2052 struct bt_hci_cp_le_set_cl_cte_tx_params {
2053 	uint8_t handle;
2054 	uint8_t cte_len;
2055 	uint8_t cte_type;
2056 	uint8_t cte_count;
2057 	uint8_t switch_pattern_len;
2058 	uint8_t ant_ids[0];
2059 } __packed;
2060 
2061 #define BT_HCI_OP_LE_SET_CL_CTE_TX_ENABLE      BT_OP(BT_OGF_LE, 0x0052) /* 0x2052 */
2062 struct bt_hci_cp_le_set_cl_cte_tx_enable {
2063 	uint8_t handle;
2064 	uint8_t cte_enable;
2065 } __packed;
2066 
2067 #define BT_HCI_LE_ANTENNA_SWITCHING_SLOT_1US   0x1
2068 #define BT_HCI_LE_ANTENNA_SWITCHING_SLOT_2US   0x2
2069 
2070 #define BT_HCI_LE_SAMPLE_CTE_ALL               0x0
2071 #define BT_HCI_LE_SAMPLE_CTE_COUNT_MIN         0x1
2072 #define BT_HCI_LE_SAMPLE_CTE_COUNT_MAX         0x10
2073 
2074 #define BT_HCI_OP_LE_SET_CL_CTE_SAMPLING_ENABLE BT_OP(BT_OGF_LE, 0x0053) /* 0x2053 */
2075 struct bt_hci_cp_le_set_cl_cte_sampling_enable {
2076 	uint16_t sync_handle;
2077 	uint8_t  sampling_enable;
2078 	uint8_t  slot_durations;
2079 	uint8_t  max_sampled_cte;
2080 	uint8_t  switch_pattern_len;
2081 	uint8_t  ant_ids[0];
2082 } __packed;
2083 
2084 struct bt_hci_rp_le_set_cl_cte_sampling_enable {
2085 	uint8_t  status;
2086 	uint16_t sync_handle;
2087 } __packed;
2088 
2089 #define BT_HCI_OP_LE_SET_CONN_CTE_RX_PARAMS BT_OP(BT_OGF_LE, 0x0054) /* 0x2054 */
2090 struct bt_hci_cp_le_set_conn_cte_rx_params {
2091 	uint16_t handle;
2092 	uint8_t  sampling_enable;
2093 	uint8_t  slot_durations;
2094 	uint8_t  switch_pattern_len;
2095 	uint8_t  ant_ids[0];
2096 } __packed;
2097 
2098 struct bt_hci_rp_le_set_conn_cte_rx_params {
2099 	uint8_t  status;
2100 	uint16_t handle;
2101 } __packed;
2102 
2103 #define BT_HCI_LE_AOA_CTE_RSP                   BIT(0)
2104 #define BT_HCI_LE_AOD_CTE_RSP_1US               BIT(1)
2105 #define BT_HCI_LE_AOD_CTE_RSP_2US               BIT(2)
2106 
2107 #define BT_HCI_LE_SWITCH_PATTERN_LEN_MIN        0x2
2108 #define BT_HCI_LE_SWITCH_PATTERN_LEN_MAX        0x4B
2109 
2110 #define BT_HCI_OP_LE_SET_CONN_CTE_TX_PARAMS     BT_OP(BT_OGF_LE, 0x0055) /* 0x2055 */
2111 struct bt_hci_cp_le_set_conn_cte_tx_params {
2112 	uint16_t handle;
2113 	uint8_t  cte_types;
2114 	uint8_t  switch_pattern_len;
2115 	uint8_t  ant_ids[0];
2116 } __packed;
2117 
2118 struct bt_hci_rp_le_set_conn_cte_tx_params {
2119 	uint8_t  status;
2120 	uint16_t handle;
2121 } __packed;
2122 
2123 /* Interval between consecutive CTE request procedure starts in number of connection events. */
2124 #define BT_HCI_REQUEST_CTE_ONCE                0x0
2125 #define BT_HCI_REQUEST_CTE_INTERVAL_MIN        0x1
2126 #define BT_HCI_REQUEST_CTE_INTERVAL_MAX        0xFFFF
2127 
2128 #define BT_HCI_OP_LE_CONN_CTE_REQ_ENABLE       BT_OP(BT_OGF_LE, 0x0056) /* 0x2056 */
2129 struct bt_hci_cp_le_conn_cte_req_enable {
2130 	uint16_t handle;
2131 	uint8_t  enable;
2132 	uint16_t cte_request_interval;
2133 	uint8_t  requested_cte_length;
2134 	uint8_t  requested_cte_type;
2135 } __packed;
2136 
2137 struct bt_hci_rp_le_conn_cte_req_enable {
2138 	uint8_t  status;
2139 	uint16_t handle;
2140 } __packed;
2141 
2142 #define BT_HCI_OP_LE_CONN_CTE_RSP_ENABLE       BT_OP(BT_OGF_LE, 0x0057) /* 0x2057 */
2143 struct bt_hci_cp_le_conn_cte_rsp_enable {
2144 	uint16_t handle;
2145 	uint8_t  enable;
2146 } __packed;
2147 
2148 struct bt_hci_rp_le_conn_cte_rsp_enable {
2149 	uint8_t  status;
2150 	uint16_t handle;
2151 } __packed;
2152 
2153 #define BT_HCI_LE_1US_AOD_TX                    BIT(0)
2154 #define BT_HCI_LE_1US_AOD_RX                    BIT(1)
2155 #define BT_HCI_LE_1US_AOA_RX                    BIT(2)
2156 
2157 #define BT_HCI_LE_NUM_ANT_MIN                   0x1
2158 #define BT_HCI_LE_NUM_ANT_MAX                   0x4B
2159 
2160 #define BT_HCI_LE_MAX_SWITCH_PATTERN_LEN_MIN    0x2
2161 #define BT_HCI_LE_MAX_SWITCH_PATTERN_LEN_MAX    0x4B
2162 
2163 #define BT_HCI_LE_MAX_CTE_LEN_MIN               0x2
2164 #define BT_HCI_LE_MAX_CTE_LEN_MAX               0x14
2165 
2166 #define BT_HCI_OP_LE_READ_ANT_INFO              BT_OP(BT_OGF_LE, 0x0058) /* 0x2058 */
2167 struct bt_hci_rp_le_read_ant_info {
2168 	uint8_t status;
2169 	uint8_t switch_sample_rates;
2170 	uint8_t num_ant;
2171 	uint8_t max_switch_pattern_len;
2172 	uint8_t max_cte_len;
2173 };
2174 
2175 #define BT_HCI_LE_SET_PER_ADV_RECV_ENABLE_ENABLE           BIT(0)
2176 #define BT_HCI_LE_SET_PER_ADV_RECV_ENABLE_FILTER_DUPLICATE BIT(1)
2177 
2178 #define BT_HCI_OP_LE_SET_PER_ADV_RECV_ENABLE     BT_OP(BT_OGF_LE, 0x0059) /* 0x2059 */
2179 struct bt_hci_cp_le_set_per_adv_recv_enable {
2180 	uint16_t handle;
2181 	uint8_t  enable;
2182 } __packed;
2183 
2184 #define BT_HCI_OP_LE_PER_ADV_SYNC_TRANSFER      BT_OP(BT_OGF_LE, 0x005a) /* 0x205a */
2185 struct bt_hci_cp_le_per_adv_sync_transfer {
2186 	uint16_t conn_handle;
2187 	uint16_t service_data;
2188 	uint16_t sync_handle;
2189 } __packed;
2190 
2191 struct bt_hci_rp_le_per_adv_sync_transfer {
2192 	uint8_t  status;
2193 	uint16_t conn_handle;
2194 } __packed;
2195 
2196 #define BT_HCI_OP_LE_PER_ADV_SET_INFO_TRANSFER  BT_OP(BT_OGF_LE, 0x005b) /* 0x205b */
2197 struct bt_hci_cp_le_per_adv_set_info_transfer {
2198 	uint16_t conn_handle;
2199 	uint16_t service_data;
2200 	uint8_t  adv_handle;
2201 } __packed;
2202 
2203 struct bt_hci_rp_le_per_adv_set_info_transfer {
2204 	uint8_t  status;
2205 	uint16_t conn_handle;
2206 } __packed;
2207 
2208 #define BT_HCI_LE_PAST_MODE_NO_SYNC                0x00
2209 #define BT_HCI_LE_PAST_MODE_NO_REPORTS             0x01
2210 #define BT_HCI_LE_PAST_MODE_SYNC                   0x02
2211 #define BT_HCI_LE_PAST_MODE_SYNC_FILTER_DUPLICATES 0x03
2212 
2213 #define BT_HCI_LE_PAST_CTE_TYPE_NO_AOA           BIT(0)
2214 #define BT_HCI_LE_PAST_CTE_TYPE_NO_AOD_1US       BIT(1)
2215 #define BT_HCI_LE_PAST_CTE_TYPE_NO_AOD_2US       BIT(2)
2216 #define BT_HCI_LE_PAST_CTE_TYPE_NO_CTE           BIT(3)
2217 #define BT_HCI_LE_PAST_CTE_TYPE_ONLY_CTE         BIT(4)
2218 
2219 #define BT_HCI_OP_LE_PAST_PARAM                 BT_OP(BT_OGF_LE, 0x005c) /* 0x205c */
2220 struct bt_hci_cp_le_past_param {
2221 	uint16_t conn_handle;
2222 	uint8_t  mode;
2223 	uint16_t skip;
2224 	uint16_t timeout;
2225 	uint8_t  cte_type;
2226 } __packed;
2227 
2228 struct bt_hci_rp_le_past_param {
2229 	uint8_t  status;
2230 	uint16_t conn_handle;
2231 } __packed;
2232 
2233 #define BT_HCI_OP_LE_DEFAULT_PAST_PARAM         BT_OP(BT_OGF_LE, 0x005d) /* 0x205d */
2234 struct bt_hci_cp_le_default_past_param {
2235 	uint8_t  mode;
2236 	uint16_t skip;
2237 	uint16_t timeout;
2238 	uint8_t  cte_type;
2239 } __packed;
2240 
2241 struct bt_hci_rp_le_default_past_param {
2242 	uint8_t  status;
2243 } __packed;
2244 
2245 #define BT_HCI_OP_LE_READ_BUFFER_SIZE_V2        BT_OP(BT_OGF_LE, 0x0060) /* 0x2060 */
2246 struct bt_hci_rp_le_read_buffer_size_v2 {
2247 	uint8_t  status;
2248 	uint16_t acl_max_len;
2249 	uint8_t  acl_max_num;
2250 	uint16_t iso_max_len;
2251 	uint8_t  iso_max_num;
2252 } __packed;
2253 
2254 #define BT_HCI_OP_LE_READ_ISO_TX_SYNC           BT_OP(BT_OGF_LE, 0x0061) /* 0x2061 */
2255 struct bt_hci_cp_le_read_iso_tx_sync {
2256 	uint16_t handle;
2257 } __packed;
2258 
2259 struct bt_hci_rp_le_read_iso_tx_sync {
2260 	uint8_t  status;
2261 	uint16_t handle;
2262 	uint16_t seq;
2263 	uint32_t timestamp;
2264 	uint8_t  offset[3];
2265 } __packed;
2266 
2267 #define BT_HCI_ISO_CIG_ID_MAX                   0xFE
2268 #define BT_HCI_ISO_CIS_COUNT_MAX                0x1F
2269 #define BT_HCI_ISO_SDU_INTERVAL_MIN             0x0000FF
2270 #define BT_HCI_ISO_SDU_INTERVAL_MAX             0x0FFFFF
2271 #define BT_HCI_ISO_WORST_CASE_SCA_VALID_MASK    0x07
2272 #define BT_HCI_ISO_PACKING_VALID_MASK           0x01
2273 #define BT_HCI_ISO_FRAMING_VALID_MASK           0x01
2274 #define BT_HCI_ISO_MAX_TRANSPORT_LATENCY_MIN    0x0005
2275 #define BT_HCI_ISO_MAX_TRANSPORT_LATENCY_MAX    0x0FA0
2276 #define BT_HCI_ISO_CIS_ID_VALID_MAX             0xEF
2277 #define BT_HCI_ISO_MAX_SDU_VALID_MASK           0x0FFF
2278 #define BT_HCI_ISO_PHY_VALID_MASK               0x07
2279 #define BT_HCI_ISO_INTERVAL_MIN                 0x0004
2280 #define BT_HCI_ISO_INTERVAL_MAX                 0x0C80
2281 
2282 #define BT_HCI_OP_LE_SET_CIG_PARAMS             BT_OP(BT_OGF_LE, 0x0062) /* 0x2062 */
2283 struct bt_hci_cis_params {
2284 	uint8_t  cis_id;
2285 	uint16_t c_sdu;
2286 	uint16_t p_sdu;
2287 	uint8_t  c_phy;
2288 	uint8_t  p_phy;
2289 	uint8_t  c_rtn;
2290 	uint8_t  p_rtn;
2291 } __packed;
2292 
2293 struct bt_hci_cp_le_set_cig_params {
2294 	uint8_t  cig_id;
2295 	uint8_t  c_interval[3];
2296 	uint8_t  p_interval[3];
2297 	uint8_t  sca;
2298 	uint8_t  packing;
2299 	uint8_t  framing;
2300 	uint16_t c_latency;
2301 	uint16_t p_latency;
2302 	uint8_t  num_cis;
2303 	struct bt_hci_cis_params cis[0];
2304 } __packed;
2305 
2306 struct bt_hci_rp_le_set_cig_params {
2307 	uint8_t  status;
2308 	uint8_t  cig_id;
2309 	uint8_t  num_handles;
2310 	uint16_t handle[0];
2311 } __packed;
2312 
2313 #define BT_HCI_OP_LE_SET_CIG_PARAMS_TEST        BT_OP(BT_OGF_LE, 0x0063) /* 0x2063 */
2314 struct bt_hci_cis_params_test {
2315 	uint8_t  cis_id;
2316 	uint8_t  nse;
2317 	uint16_t c_sdu;
2318 	uint16_t p_sdu;
2319 	uint16_t c_pdu;
2320 	uint16_t p_pdu;
2321 	uint8_t  c_phy;
2322 	uint8_t  p_phy;
2323 	uint8_t  c_bn;
2324 	uint8_t  p_bn;
2325 } __packed;
2326 
2327 struct bt_hci_cp_le_set_cig_params_test {
2328 	uint8_t  cig_id;
2329 	uint8_t  c_interval[3];
2330 	uint8_t  p_interval[3];
2331 	uint8_t  c_ft;
2332 	uint8_t  p_ft;
2333 	uint16_t iso_interval;
2334 	uint8_t  sca;
2335 	uint8_t  packing;
2336 	uint8_t  framing;
2337 	uint8_t  num_cis;
2338 	struct bt_hci_cis_params_test cis[0];
2339 } __packed;
2340 
2341 struct bt_hci_rp_le_set_cig_params_test {
2342 	uint8_t  status;
2343 	uint8_t  cig_id;
2344 	uint8_t  num_handles;
2345 	uint16_t handle[0];
2346 } __packed;
2347 
2348 #define BT_HCI_OP_LE_CREATE_CIS                 BT_OP(BT_OGF_LE, 0x0064) /* 0x2064 */
2349 struct bt_hci_cis {
2350 	uint16_t  cis_handle;
2351 	uint16_t  acl_handle;
2352 } __packed;
2353 
2354 struct bt_hci_cp_le_create_cis {
2355 	uint8_t  num_cis;
2356 	struct bt_hci_cis cis[0];
2357 } __packed;
2358 
2359 #define BT_HCI_OP_LE_REMOVE_CIG                 BT_OP(BT_OGF_LE, 0x0065) /* 0x2065 */
2360 struct bt_hci_cp_le_remove_cig {
2361 	uint8_t  cig_id;
2362 } __packed;
2363 
2364 struct bt_hci_rp_le_remove_cig {
2365 	uint8_t  status;
2366 	uint8_t  cig_id;
2367 } __packed;
2368 
2369 #define BT_HCI_OP_LE_ACCEPT_CIS                 BT_OP(BT_OGF_LE, 0x0066) /* 0x2066 */
2370 struct bt_hci_cp_le_accept_cis {
2371 	uint16_t handle;
2372 } __packed;
2373 
2374 #define BT_HCI_OP_LE_REJECT_CIS                 BT_OP(BT_OGF_LE, 0x0067) /* 0x2067 */
2375 struct bt_hci_cp_le_reject_cis {
2376 	uint16_t handle;
2377 	uint8_t  reason;
2378 } __packed;
2379 
2380 struct bt_hci_rp_le_reject_cis {
2381 	uint8_t  status;
2382 	uint16_t handle;
2383 } __packed;
2384 
2385 #define BT_HCI_OP_LE_CREATE_BIG                 BT_OP(BT_OGF_LE, 0x0068) /* 0x2068 */
2386 struct bt_hci_cp_le_create_big {
2387 	uint8_t  big_handle;
2388 	uint8_t  adv_handle;
2389 	uint8_t  num_bis;
2390 	uint8_t  sdu_interval[3];
2391 	uint16_t max_sdu;
2392 	uint16_t max_latency;
2393 	uint8_t  rtn;
2394 	uint8_t  phy;
2395 	uint8_t  packing;
2396 	uint8_t  framing;
2397 	uint8_t  encryption;
2398 	uint8_t  bcode[16];
2399 } __packed;
2400 
2401 #define BT_HCI_OP_LE_CREATE_BIG_TEST            BT_OP(BT_OGF_LE, 0x0069) /* 0x2069 */
2402 struct bt_hci_cp_le_create_big_test {
2403 	uint8_t  big_handle;
2404 	uint8_t  adv_handle;
2405 	uint8_t  num_bis;
2406 	uint8_t  sdu_interval[3];
2407 	uint16_t iso_interval;
2408 	uint8_t  nse;
2409 	uint16_t max_sdu;
2410 	uint16_t max_pdu;
2411 	uint8_t  phy;
2412 	uint8_t  packing;
2413 	uint8_t  framing;
2414 	uint8_t  bn;
2415 	uint8_t  irc;
2416 	uint8_t  pto;
2417 	uint8_t  encryption;
2418 	uint8_t  bcode[16];
2419 } __packed;
2420 
2421 #define BT_HCI_OP_LE_TERMINATE_BIG              BT_OP(BT_OGF_LE, 0x006a) /* 0x206a */
2422 struct bt_hci_cp_le_terminate_big {
2423 	uint8_t  big_handle;
2424 	uint8_t  reason;
2425 } __packed;
2426 
2427 #define BT_HCI_OP_LE_BIG_CREATE_SYNC            BT_OP(BT_OGF_LE, 0x006b) /* 0x206b */
2428 struct bt_hci_cp_le_big_create_sync {
2429 	uint8_t  big_handle;
2430 	uint16_t sync_handle;
2431 	uint8_t  encryption;
2432 	uint8_t  bcode[16];
2433 	uint8_t  mse;
2434 	uint16_t sync_timeout;
2435 	uint8_t  num_bis;
2436 	uint8_t  bis[0];
2437 } __packed;
2438 
2439 #define BT_HCI_OP_LE_BIG_TERMINATE_SYNC         BT_OP(BT_OGF_LE, 0x006c) /* 0x206c */
2440 struct bt_hci_cp_le_big_terminate_sync {
2441 	uint8_t  big_handle;
2442 } __packed;
2443 
2444 struct bt_hci_rp_le_big_terminate_sync {
2445 	uint8_t  status;
2446 	uint8_t  big_handle;
2447 } __packed;
2448 
2449 #define BT_HCI_OP_LE_REQ_PEER_SC                BT_OP(BT_OGF_LE, 0x006d) /* 0x206d */
2450 struct bt_hci_cp_le_req_peer_sca {
2451 	uint16_t handle;
2452 } __packed;
2453 
2454 #define BT_HCI_OP_LE_SETUP_ISO_PATH             BT_OP(BT_OGF_LE, 0x006e) /* 0x206e */
2455 struct bt_hci_cp_le_setup_iso_path {
2456 	uint16_t handle;
2457 	uint8_t  path_dir;
2458 	uint8_t  path_id;
2459 	struct bt_hci_cp_codec_id codec_id;
2460 	uint8_t  controller_delay[3];
2461 	uint8_t  codec_config_len;
2462 	uint8_t  codec_config[0];
2463 } __packed;
2464 
2465 struct bt_hci_rp_le_setup_iso_path {
2466 	uint8_t  status;
2467 	uint16_t handle;
2468 } __packed;
2469 
2470 #define BT_HCI_OP_LE_REMOVE_ISO_PATH            BT_OP(BT_OGF_LE, 0x006f) /* 0x206f */
2471 struct bt_hci_cp_le_remove_iso_path {
2472 	uint16_t handle;
2473 	uint8_t  path_dir;
2474 } __packed;
2475 
2476 struct bt_hci_rp_le_remove_iso_path {
2477 	uint8_t  status;
2478 	uint16_t handle;
2479 } __packed;
2480 
2481 #define BT_HCI_ISO_TEST_ZERO_SIZE_SDU     0
2482 #define BT_HCI_ISO_TEST_VARIABLE_SIZE_SDU 1
2483 #define BT_HCI_ISO_TEST_MAX_SIZE_SDU      2
2484 
2485 #define BT_HCI_OP_LE_ISO_TRANSMIT_TEST          BT_OP(BT_OGF_LE, 0x0070) /* 0x2070 */
2486 struct bt_hci_cp_le_iso_transmit_test {
2487 	uint16_t handle;
2488 	uint8_t  payload_type;
2489 } __packed;
2490 
2491 struct bt_hci_rp_le_iso_transmit_test {
2492 	uint8_t  status;
2493 	uint16_t handle;
2494 } __packed;
2495 
2496 #define BT_HCI_OP_LE_ISO_RECEIVE_TEST           BT_OP(BT_OGF_LE, 0x0071) /* 0x2071 */
2497 struct bt_hci_cp_le_iso_receive_test {
2498 	uint16_t handle;
2499 	uint8_t  payload_type;
2500 } __packed;
2501 
2502 struct bt_hci_rp_le_iso_receive_test {
2503 	uint8_t  status;
2504 	uint16_t handle;
2505 } __packed;
2506 
2507 #define BT_HCI_OP_LE_ISO_READ_TEST_COUNTERS     BT_OP(BT_OGF_LE, 0x0072) /* 0x2072 */
2508 struct bt_hci_cp_le_read_test_counters {
2509 	uint16_t handle;
2510 } __packed;
2511 
2512 struct bt_hci_rp_le_read_test_counters {
2513 	uint8_t  status;
2514 	uint16_t handle;
2515 	uint32_t received_cnt;
2516 	uint32_t missed_cnt;
2517 	uint32_t failed_cnt;
2518 } __packed;
2519 
2520 #define BT_HCI_OP_LE_ISO_TEST_END               BT_OP(BT_OGF_LE, 0x0073) /* 0x2073 */
2521 struct bt_hci_cp_le_iso_test_end {
2522 	uint16_t handle;
2523 } __packed;
2524 
2525 struct bt_hci_rp_le_iso_test_end {
2526 	uint8_t  status;
2527 	uint16_t handle;
2528 	uint32_t received_cnt;
2529 	uint32_t missed_cnt;
2530 	uint32_t failed_cnt;
2531 } __packed;
2532 
2533 #define BT_HCI_OP_LE_SET_HOST_FEATURE           BT_OP(BT_OGF_LE, 0x0074) /* 0x2074 */
2534 struct bt_hci_cp_le_set_host_feature {
2535 	uint8_t  bit_number;
2536 	uint8_t  bit_value;
2537 } __packed;
2538 
2539 struct bt_hci_rp_le_set_host_feature {
2540 	uint8_t  status;
2541 } __packed;
2542 
2543 #define BT_HCI_OP_LE_READ_ISO_LINK_QUALITY      BT_OP(BT_OGF_LE, 0x0075) /* 0x2075 */
2544 struct bt_hci_cp_le_read_iso_link_quality {
2545 	uint16_t handle;
2546 } __packed;
2547 
2548 struct bt_hci_rp_le_read_iso_link_quality {
2549 	uint8_t  status;
2550 	uint16_t handle;
2551 	uint32_t tx_unacked_packets;
2552 	uint32_t tx_flushed_packets;
2553 	uint32_t tx_last_subevent_packets;
2554 	uint32_t retransmitted_packets;
2555 	uint32_t crc_error_packets;
2556 	uint32_t rx_unreceived_packets;
2557 	uint32_t duplicate_packets;
2558 } __packed;
2559 
2560 #define BT_HCI_OP_LE_TX_TEST_V4                 BT_OP(BT_OGF_LE, 0x007B) /* 0x207B */
2561 
2562 struct bt_hci_cp_le_tx_test_v4 {
2563 	uint8_t  tx_ch;
2564 	uint8_t  test_data_len;
2565 	uint8_t  pkt_payload;
2566 	uint8_t  phy;
2567 	uint8_t  cte_len;
2568 	uint8_t  cte_type;
2569 	uint8_t  switch_pattern_len;
2570 	uint8_t  ant_ids[0];
2571 } __packed;
2572 
2573 #define BT_HCI_OP_LE_READ_ALL_LOCAL_SUPPORTED_FEATURES BT_OP(BT_OGF_LE, 0x0087) /* 0x2087 */
2574 struct bt_hci_rp_le_read_all_local_supported_features {
2575 	uint8_t  status;
2576 	uint8_t  max_page;
2577 	uint8_t  features[248];
2578 } __packed;
2579 
2580 #define BT_READ_ALL_LOCAL_FEATURES_SUPPORTED(supported_commands)                                   \
2581 	BT_CMD_TEST(supported_commands, 47, 2)
2582 
2583 #define BT_HCI_OP_LE_READ_ALL_REMOTE_FEATURES BT_OP(BT_OGF_LE, 0x0088) /* 0x2088 */
2584 struct bt_hci_cp_le_read_all_remote_features {
2585 	uint16_t handle;
2586 	uint8_t  pages_requested;
2587 } __packed;
2588 
2589 #define BT_HCI_TX_TEST_POWER_MIN -0x7F
2590 #define BT_HCI_TX_TEST_POWER_MAX 0x14
2591 
2592 #define BT_HCI_TX_TEST_POWER_MIN_SET 0x7E
2593 #define BT_HCI_TX_TEST_POWER_MAX_SET 0x7F
2594 
2595 /* Helper structure for Tx power parameter in the HCI Tx Test v4 command.
2596  * Previous parameter of this command is variable size so having separated structure
2597  * for this parameter helps in command parameters unpacking.
2598  */
2599 struct bt_hci_cp_le_tx_test_v4_tx_power {
2600 	int8_t tx_power;
2601 } __packed;
2602 
2603 #define BT_HCI_OP_LE_CS_READ_LOCAL_SUPPORTED_CAPABILITIES BT_OP(BT_OGF_LE, 0x0089) /* 0x2089 */
2604 
2605 struct bt_hci_rp_le_read_local_supported_capabilities {
2606 	uint8_t  status;
2607 	uint8_t  num_config_supported;
2608 	uint16_t max_consecutive_procedures_supported;
2609 	uint8_t  num_antennas_supported;
2610 	uint8_t  max_antenna_paths_supported;
2611 	uint8_t  roles_supported;
2612 	uint8_t  modes_supported;
2613 	uint8_t  rtt_capability;
2614 	uint8_t  rtt_aa_only_n;
2615 	uint8_t  rtt_sounding_n;
2616 	uint8_t  rtt_random_payload_n;
2617 	uint16_t nadm_sounding_capability;
2618 	uint16_t nadm_random_capability;
2619 	uint8_t  cs_sync_phys_supported;
2620 	uint16_t subfeatures_supported;
2621 	uint16_t t_ip1_times_supported;
2622 	uint16_t t_ip2_times_supported;
2623 	uint16_t t_fcs_times_supported;
2624 	uint16_t t_pm_times_supported;
2625 	uint8_t  t_sw_time_supported;
2626 	uint8_t  tx_snr_capability;
2627 } __packed;
2628 
2629 #define BT_HCI_OP_LE_CS_READ_REMOTE_SUPPORTED_CAPABILITIES BT_OP(BT_OGF_LE, 0x008A) /* 0x208A */
2630 
2631 struct bt_hci_cp_le_read_remote_supported_capabilities {
2632 	uint16_t handle;
2633 } __packed;
2634 
2635 #define BT_HCI_OP_LE_CS_WRITE_CACHED_REMOTE_SUPPORTED_CAPABILITIES \
2636 	BT_OP(BT_OGF_LE, 0x008B) /* 0x208B */
2637 
2638 struct bt_hci_cp_le_write_cached_remote_supported_capabilities {
2639 	uint16_t handle;
2640 	uint8_t  num_config_supported;
2641 	uint16_t max_consecutive_procedures_supported;
2642 	uint8_t  num_antennas_supported;
2643 	uint8_t  max_antenna_paths_supported;
2644 	uint8_t  roles_supported;
2645 	uint8_t  modes_supported;
2646 	uint8_t  rtt_capability;
2647 	uint8_t  rtt_aa_only_n;
2648 	uint8_t  rtt_sounding_n;
2649 	uint8_t  rtt_random_payload_n;
2650 	uint16_t nadm_sounding_capability;
2651 	uint16_t nadm_random_capability;
2652 	uint8_t  cs_sync_phys_supported;
2653 	uint16_t subfeatures_supported;
2654 	uint16_t t_ip1_times_supported;
2655 	uint16_t t_ip2_times_supported;
2656 	uint16_t t_fcs_times_supported;
2657 	uint16_t t_pm_times_supported;
2658 	uint8_t  t_sw_time_supported;
2659 	uint8_t  tx_snr_capability;
2660 } __packed;
2661 
2662 #define BT_HCI_OP_LE_CS_SECURITY_ENABLE BT_OP(BT_OGF_LE, 0x008C) /* 0x208C */
2663 
2664 struct bt_hci_cp_le_security_enable {
2665 	uint16_t handle;
2666 } __packed;
2667 
2668 #define BT_HCI_OP_LE_CS_SET_DEFAULT_SETTINGS BT_OP(BT_OGF_LE, 0x008D) /* 0x208D */
2669 
2670 #define BT_HCI_OP_LE_CS_INITIATOR_ROLE_MASK BIT(0)
2671 #define BT_HCI_OP_LE_CS_REFLECTOR_ROLE_MASK BIT(1)
2672 
2673 #define BT_HCI_OP_LE_CS_MIN_MAX_TX_POWER -127
2674 #define BT_HCI_OP_LE_CS_MAX_MAX_TX_POWER 20
2675 
2676 #define BT_HCI_OP_LE_CS_ANTENNA_SEL_ONE   0x01
2677 #define BT_HCI_OP_LE_CS_ANTENNA_SEL_TWO   0x02
2678 #define BT_HCI_OP_LE_CS_ANTENNA_SEL_THREE 0x03
2679 #define BT_HCI_OP_LE_CS_ANTENNA_SEL_FOUR  0x04
2680 #define BT_HCI_OP_LE_CS_ANTENNA_SEL_REP   0xFE
2681 #define BT_HCI_OP_LE_CS_ANTENNA_SEL_NONE  0xFF
2682 
2683 struct bt_hci_cp_le_cs_set_default_settings {
2684 	uint16_t handle;
2685 	uint8_t  role_enable;
2686 	uint8_t  cs_sync_antenna_selection;
2687 	int8_t   max_tx_power;
2688 } __packed;
2689 
2690 #define BT_HCI_OP_LE_CS_READ_REMOTE_FAE_TABLE BT_OP(BT_OGF_LE, 0x008E) /* 0x208E */
2691 
2692 struct bt_hci_cp_le_read_remote_fae_table {
2693 	uint16_t handle;
2694 } __packed;
2695 
2696 #define BT_HCI_OP_LE_CS_WRITE_CACHED_REMOTE_FAE_TABLE BT_OP(BT_OGF_LE, 0x008F) /* 0x208F */
2697 
2698 struct bt_hci_cp_le_write_cached_remote_fae_table {
2699 	uint16_t handle;
2700 	int8_t   remote_fae_table[72];
2701 } __packed;
2702 
2703 #define BT_HCI_OP_LE_CS_SET_CHANNEL_CLASSIFICATION BT_OP(BT_OGF_LE, 0x0092) /* 0x2092 */
2704 
2705 #define BT_HCI_OP_LE_CS_SET_PROCEDURE_PARAMETERS BT_OP(BT_OGF_LE, 0x0093) /* 0x2093 */
2706 
2707 #define BT_HCI_OP_LE_CS_PROCEDURE_PHY_1M       0x01
2708 #define BT_HCI_OP_LE_CS_PROCEDURE_PHY_2M       0x02
2709 #define BT_HCI_OP_LE_CS_PROCEDURE_PHY_CODED_S8 0x03
2710 #define BT_HCI_OP_LE_CS_PROCEDURE_PHY_CODED_S2 0x04
2711 
2712 struct bt_hci_cp_le_set_procedure_parameters {
2713 	uint16_t handle;
2714 	uint8_t  config_id;
2715 	uint16_t max_procedure_len;
2716 	uint16_t min_procedure_interval;
2717 	uint16_t max_procedure_interval;
2718 	uint16_t max_procedure_count;
2719 	uint8_t  min_subevent_len[3];
2720 	uint8_t  max_subevent_len[3];
2721 	uint8_t  tone_antenna_config_selection;
2722 	uint8_t  phy;
2723 	uint8_t  tx_power_delta;
2724 	uint8_t  preferred_peer_antenna;
2725 	uint8_t  snr_control_initiator;
2726 	uint8_t  snr_control_reflector;
2727 } __packed;
2728 
2729 #define BT_HCI_OP_LE_CS_PROCEDURE_ENABLE BT_OP(BT_OGF_LE, 0x0094) /* 0x2094 */
2730 
2731 #define BT_HCI_OP_LE_CS_PROCEDURES_DISABLED 0x00
2732 #define BT_HCI_OP_LE_CS_PROCEDURES_ENABLED  0x01
2733 
2734 struct bt_hci_cp_le_procedure_enable {
2735 	uint16_t handle;
2736 	uint8_t  config_id;
2737 	uint8_t  enable;
2738 } __packed;
2739 
2740 #define BT_HCI_OP_LE_CS_TEST BT_OP(BT_OGF_LE, 0x0095) /* 0x2095 */
2741 
2742 #define BT_HCI_OP_LE_CS_MAIN_MODE_1 0x1
2743 #define BT_HCI_OP_LE_CS_MAIN_MODE_2 0x2
2744 #define BT_HCI_OP_LE_CS_MAIN_MODE_3 0x3
2745 
2746 #define BT_HCI_OP_LE_CS_SUB_MODE_1 0x1
2747 #define BT_HCI_OP_LE_CS_SUB_MODE_2 0x2
2748 #define BT_HCI_OP_LE_CS_SUB_MODE_3 0x3
2749 #define BT_HCI_OP_LE_CS_SUB_MODE_UNUSED 0xFF
2750 
2751 #define BT_HCI_OP_LE_CS_INITIATOR_ROLE 0x0
2752 #define BT_HCI_OP_LE_CS_REFLECTOR_ROLE 0x1
2753 
2754 #define BT_HCI_OP_LE_CS_RTT_TYPE_AA_ONLY     0x0
2755 #define BT_HCI_OP_LE_CS_RTT_TYPE_32BIT_SOUND 0x1
2756 #define BT_HCI_OP_LE_CS_RTT_TYPE_96BIT_SOUND 0x2
2757 #define BT_HCI_OP_LE_CS_RTT_TYPE_32BIT_RAND  0x3
2758 #define BT_HCI_OP_LE_CS_RTT_TYPE_64BIT_RAND  0x4
2759 #define BT_HCI_OP_LE_CS_RTT_TYPE_96BIT_RAND  0x5
2760 #define BT_HCI_OP_LE_CS_RTT_TYPE_128BIT_RAND 0x6
2761 
2762 #define BT_HCI_OP_LE_CS_CS_SYNC_1M     0x1
2763 #define BT_HCI_OP_LE_CS_CS_SYNC_2M     0x2
2764 #define BT_HCI_OP_LE_CS_CS_SYNC_2M_2BT 0x3
2765 
2766 #define BT_HCI_OP_LE_CS_TEST_MINIMIZE_TX_POWER 0x7E
2767 #define BT_HCI_OP_LE_CS_TEST_MAXIMIZE_TX_POWER 0x7F
2768 
2769 #define BT_HCI_OP_LE_CS_ACI_0 0x0
2770 #define BT_HCI_OP_LE_CS_ACI_1 0x1
2771 #define BT_HCI_OP_LE_CS_ACI_2 0x2
2772 #define BT_HCI_OP_LE_CS_ACI_3 0x3
2773 #define BT_HCI_OP_LE_CS_ACI_4 0x4
2774 #define BT_HCI_OP_LE_CS_ACI_5 0x5
2775 #define BT_HCI_OP_LE_CS_ACI_6 0x6
2776 #define BT_HCI_OP_LE_CS_ACI_7 0x7
2777 
2778 #define BT_HCI_OP_LE_CS_SNR_18 0x0
2779 #define BT_HCI_OP_LE_CS_SNR_21 0x1
2780 #define BT_HCI_OP_LE_CS_SNR_24 0x2
2781 #define BT_HCI_OP_LE_CS_SNR_27 0x3
2782 #define BT_HCI_OP_LE_CS_SNR_30 0x4
2783 #define BT_HCI_OP_LE_CS_SNR_NOT_USED 0xFF
2784 
2785 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_0_MASK BIT(0)
2786 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_2_MASK BIT(2)
2787 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_3_MASK BIT(3)
2788 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_4_MASK BIT(4)
2789 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_5_MASK BIT(5)
2790 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_6_MASK BIT(6)
2791 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_7_MASK BIT(7)
2792 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_8_MASK BIT(8)
2793 #define BT_HCI_OP_LE_CS_TEST_OVERRIDE_CONFIG_10_MASK BIT(10)
2794 
2795 #define BT_HCI_OP_LE_CS_TEST_CHSEL_TYPE_3B 0x0
2796 #define BT_HCI_OP_LE_CS_TEST_CHSEL_TYPE_3C 0x1
2797 
2798 #define BT_HCI_OP_LE_CS_TEST_CH3C_SHAPE_HAT 0x0
2799 #define BT_HCI_OP_LE_CS_TEST_CH3C_SHAPE_X   0x1
2800 
2801 #define BT_HCI_OP_LE_CS_TEST_TONE_EXT_NONE 0x0
2802 #define BT_HCI_OP_LE_CS_TEST_TONE_EXT_INIT 0x1
2803 #define BT_HCI_OP_LE_CS_TEST_TONE_EXT_REFL 0x2
2804 #define BT_HCI_OP_LE_CS_TEST_TONE_EXT_BOTH 0x3
2805 #define BT_HCI_OP_LE_CS_TEST_TONE_EXT_REPEAT 0x4
2806 
2807 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_00 0x0
2808 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_01 0x1
2809 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_02 0x2
2810 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_03 0x3
2811 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_04 0x4
2812 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_05 0x5
2813 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_06 0x6
2814 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_07 0x7
2815 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_08 0x8
2816 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_09 0x9
2817 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_10 0xA
2818 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_11 0xB
2819 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_12 0xC
2820 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_13 0xD
2821 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_14 0xE
2822 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_15 0xF
2823 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_16 0x10
2824 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_17 0x11
2825 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_18 0x12
2826 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_19 0x13
2827 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_20 0x14
2828 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_21 0x15
2829 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_22 0x16
2830 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_23 0x17
2831 #define BT_HCI_OP_LE_CS_TEST_AP_INDEX_LOOP 0xFF
2832 
2833 #define BT_HCI_OP_LE_CS_TEST_SS_MARKER_2_POSITION_NOT_PRESENT 0xFF
2834 
2835 #define BT_HCI_OP_LE_CS_TEST_SS_MARKER_VAL_0011 0x0
2836 #define BT_HCI_OP_LE_CS_TEST_SS_MARKER_VAL_1100 0x1
2837 #define BT_HCI_OP_LE_CS_TEST_SS_MARKER_VAL_LOOP 0x2
2838 
2839 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_PRBS9    0x00
2840 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_11110000 0x01
2841 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_10101010 0x02
2842 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_PRBS15   0x03
2843 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_11111111 0x04
2844 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_00000000 0x05
2845 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_00001111 0x06
2846 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_01010101 0x07
2847 #define BT_HCI_OP_LE_CS_TEST_PAYLOAD_USER     0x80
2848 
2849 struct bt_hci_op_le_cs_test {
2850 	uint8_t  main_mode_type;
2851 	uint8_t  sub_mode_type;
2852 	uint8_t  main_mode_repetition;
2853 	uint8_t  mode_0_steps;
2854 	uint8_t  role;
2855 	uint8_t  rtt_type;
2856 	uint8_t  cs_sync_phy;
2857 	uint8_t  cs_sync_antenna_selection;
2858 	uint8_t  subevent_len[3];
2859 	uint16_t subevent_interval;
2860 	uint8_t  max_num_subevents;
2861 	uint8_t  transmit_power_level;
2862 	uint8_t  t_ip1_time;
2863 	uint8_t  t_ip2_time;
2864 	uint8_t  t_fcs_time;
2865 	uint8_t  t_pm_time;
2866 	uint8_t  t_sw_time;
2867 	uint8_t  tone_antenna_config_selection;
2868 	uint8_t  reserved;
2869 	uint8_t  snr_control_initiator;
2870 	uint8_t  snr_control_reflector;
2871 	uint16_t drbg_nonce;
2872 	uint8_t  channel_map_repetition;
2873 	uint16_t override_config;
2874 	uint8_t  override_parameters_length;
2875 	uint8_t  override_parameters_data[];
2876 } __packed;
2877 
2878 #define BT_HCI_OP_LE_CS_CREATE_CONFIG BT_OP(BT_OGF_LE, 0x0090) /* 0x2090 */
2879 
2880 struct bt_hci_cp_le_cs_create_config {
2881 	uint16_t handle;
2882 	uint8_t  config_id;
2883 	uint8_t  create_context;
2884 	uint8_t  main_mode_type;
2885 	uint8_t  sub_mode_type;
2886 	uint8_t  min_main_mode_steps;
2887 	uint8_t  max_main_mode_steps;
2888 	uint8_t  main_mode_repetition;
2889 	uint8_t  mode_0_steps;
2890 	uint8_t  role;
2891 	uint8_t  rtt_type;
2892 	uint8_t  cs_sync_phy;
2893 	uint8_t  channel_map[10];
2894 	uint8_t  channel_map_repetition;
2895 	uint8_t  channel_selection_type;
2896 	uint8_t  ch3c_shape;
2897 	uint8_t  ch3c_jump;
2898 	uint8_t  reserved;
2899 } __packed;
2900 
2901 #define BT_HCI_OP_LE_CS_REMOVE_CONFIG BT_OP(BT_OGF_LE, 0x0091) /* 0x2091 */
2902 
2903 struct bt_hci_cp_le_cs_remove_config {
2904 	uint16_t handle;
2905 	uint8_t  config_id;
2906 } __packed;
2907 
2908 #define BT_HCI_OP_LE_CS_TEST_END BT_OP(BT_OGF_LE, 0x0096) /* 0x2096 */
2909 
2910 #define BT_HCI_LE_FRAME_SPACE_UPDATE_PHY_1M_MASK    BIT(0)
2911 #define BT_HCI_LE_FRAME_SPACE_UPDATE_PHY_2M_MASK    BIT(1)
2912 #define BT_HCI_LE_FRAME_SPACE_UPDATE_PHY_CODED_MASK BIT(2)
2913 
2914 #define BT_HCI_LE_FRAME_SPACE_UPDATE_SPACING_TYPE_IFS_ACL_CP_MASK BIT(0)
2915 #define BT_HCI_LE_FRAME_SPACE_UPDATE_SPACING_TYPE_IFS_ACL_PC_MASK BIT(1)
2916 #define BT_HCI_LE_FRAME_SPACE_UPDATE_SPACING_TYPE_MCES_MASK       BIT(2)
2917 #define BT_HCI_LE_FRAME_SPACE_UPDATE_SPACING_TYPE_IFS_CIS_MASK    BIT(3)
2918 #define BT_HCI_LE_FRAME_SPACE_UPDATE_SPACING_TYPE_MSS_CIS_MASK    BIT(4)
2919 
2920 #define BT_HCI_LE_FRAME_SPACE_UPDATE_INITIATOR_LOCAL_HOST       (0)
2921 #define BT_HCI_LE_FRAME_SPACE_UPDATE_INITIATOR_LOCAL_CONTROLLER (1)
2922 #define BT_HCI_LE_FRAME_SPACE_UPDATE_INITIATOR_PEER             (2)
2923 
2924 struct bt_hci_cp_le_frame_space_update {
2925 	uint16_t handle;
2926 	uint16_t frame_space_min;
2927 	uint16_t frame_space_max;
2928 	uint8_t  phys;
2929 	uint16_t spacing_types;
2930 } __packed;
2931 
2932 #define BT_HCI_OP_LE_FRAME_SPACE_UPDATE BT_OP(BT_OGF_LE, 0x009D) /* 0x209D */
2933 
2934 /** All limits according to BT Core spec 6.2 [Vol 4, Part E, 7.8.154]. */
2935 #define BT_HCI_LE_SCI_INTERVAL_MIN_125US   (0x0003U)
2936 #define BT_HCI_LE_SCI_INTERVAL_MAX_125US   (0x7D00U)
2937 #define BT_HCI_LE_SCI_INTERVAL_MIN_US      (375U)
2938 #define BT_HCI_LE_SCI_INTERVAL_MAX_US      (4000000U)
2939 #define BT_HCI_LE_SCI_INTERVAL_UNIT_US     (125U)
2940 
2941 #define BT_HCI_LE_SCI_STRIDE_MIN_125US     (0x0001U)
2942 
2943 #define BT_HCI_LE_MIN_SUPP_CONN_INT_MIN_US (375U)
2944 #define BT_HCI_LE_MIN_SUPP_CONN_INT_MAX_US (7500U)
2945 
2946 #define BT_HCI_LE_SCI_CE_LEN_MIN_125US     (0x0001U)
2947 #define BT_HCI_LE_SCI_CE_LEN_MAX_125US     (0x3E7FU)
2948 
2949 struct bt_hci_le_read_min_supported_conn_interval_group {
2950 	uint16_t group_min;
2951 	uint16_t group_max;
2952 	uint16_t group_stride;
2953 } __packed;
2954 
2955 struct bt_hci_op_le_read_min_supported_conn_interval {
2956 	uint8_t status;
2957 	uint8_t min_supported_conn_interval;
2958 	uint8_t num_groups;
2959 	struct bt_hci_le_read_min_supported_conn_interval_group groups[];
2960 } __packed;
2961 
2962 #define BT_HCI_OP_LE_READ_MIN_SUPPORTED_CONN_INTERVAL                                    \
2963 	BT_OP(BT_OGF_LE, 0x00A3) /* 0x20A3 */
2964 
2965 struct bt_hci_op_le_set_default_rate_parameters {
2966 	uint16_t conn_interval_min;
2967 	uint16_t conn_interval_max;
2968 	uint16_t subrate_min;
2969 	uint16_t subrate_max;
2970 	uint16_t max_latency;
2971 	uint16_t continuation_number;
2972 	uint16_t supervision_timeout;
2973 	uint16_t min_ce_len;
2974 	uint16_t max_ce_len;
2975 } __packed;
2976 
2977 #define BT_HCI_OP_LE_SET_DEFAULT_RATE_PARAMETERS BT_OP(BT_OGF_LE, 0x00A2) /* 0x20A2 */
2978 
2979 struct bt_hci_op_le_connection_rate_request {
2980 	uint16_t handle;
2981 	uint16_t conn_interval_min;
2982 	uint16_t conn_interval_max;
2983 	uint16_t subrate_min;
2984 	uint16_t subrate_max;
2985 	uint16_t max_latency;
2986 	uint16_t continuation_number;
2987 	uint16_t supervision_timeout;
2988 	uint16_t min_ce_len;
2989 	uint16_t max_ce_len;
2990 } __packed;
2991 
2992 #define BT_HCI_OP_LE_CONNECTION_RATE_REQUEST BT_OP(BT_OGF_LE, 0x00A1) /* 0x20A1 */
2993 
2994 /* Event definitions */
2995 
2996 #define BT_HCI_EVT_UNKNOWN                      0x00
2997 #define BT_HCI_EVT_VENDOR                       0xff
2998 
2999 #define BT_HCI_EVT_INQUIRY_COMPLETE             0x01
3000 struct bt_hci_evt_inquiry_complete {
3001 	uint8_t status;
3002 } __packed;
3003 
3004 #define BT_HCI_EVT_CONN_COMPLETE                0x03
3005 struct bt_hci_evt_conn_complete {
3006 	uint8_t   status;
3007 	uint16_t  handle;
3008 	bt_addr_t bdaddr;
3009 	uint8_t   link_type;
3010 	uint8_t   encr_enabled;
3011 } __packed;
3012 
3013 #define BT_HCI_EVT_CONN_REQUEST                 0x04
3014 struct bt_hci_evt_conn_request {
3015 	bt_addr_t bdaddr;
3016 	uint8_t   dev_class[3];
3017 	uint8_t   link_type;
3018 } __packed;
3019 
3020 #define BT_HCI_EVT_DISCONN_COMPLETE             0x05
3021 struct bt_hci_evt_disconn_complete {
3022 	uint8_t  status;
3023 	uint16_t handle;
3024 	uint8_t  reason;
3025 } __packed;
3026 
3027 #define BT_HCI_EVT_AUTH_COMPLETE                0x06
3028 struct bt_hci_evt_auth_complete {
3029 	uint8_t  status;
3030 	uint16_t handle;
3031 } __packed;
3032 
3033 #define BT_HCI_EVT_REMOTE_NAME_REQ_COMPLETE     0x07
3034 struct bt_hci_evt_remote_name_req_complete {
3035 	uint8_t   status;
3036 	bt_addr_t bdaddr;
3037 	uint8_t   name[248];
3038 } __packed;
3039 
3040 /* Encryption Value */
3041 #define BT_HCI_ENCRYPTION_OFF           0x00
3042 #define BT_HCI_ENCRYPTION_ON_LE_AES_CCM 0x01
3043 #define BT_HCI_ENCRYPTION_ON_BR_E0      0x01
3044 #define BT_HCI_ENCRYPTION_ON_BR_AES_CCM 0x02
3045 
3046 #define BT_HCI_EVT_ENCRYPT_CHANGE               0x08
3047 struct bt_hci_evt_encrypt_change {
3048 	uint8_t  status;
3049 	uint16_t handle;
3050 	uint8_t  encrypt;
3051 } __packed;
3052 
3053 #define BT_HCI_EVT_REMOTE_FEATURES              0x0b
3054 struct bt_hci_evt_remote_features {
3055 	uint8_t  status;
3056 	uint16_t handle;
3057 	uint8_t  features[8];
3058 } __packed;
3059 
3060 #define BT_HCI_EVT_REMOTE_VERSION_INFO          0x0c
3061 struct bt_hci_evt_remote_version_info {
3062 	uint8_t  status;
3063 	uint16_t handle;
3064 	uint8_t  version;
3065 	uint16_t manufacturer;
3066 	uint16_t subversion;
3067 } __packed;
3068 
3069 #define BT_HCI_EVT_CMD_COMPLETE                 0x0e
3070 struct bt_hci_evt_cmd_complete {
3071 	uint8_t  ncmd;
3072 	uint16_t opcode;
3073 } __packed;
3074 
3075 struct bt_hci_evt_cc_status {
3076 	uint8_t  status;
3077 } __packed;
3078 
3079 #define BT_HCI_EVT_CMD_STATUS                   0x0f
3080 struct bt_hci_evt_cmd_status {
3081 	uint8_t  status;
3082 	uint8_t  ncmd;
3083 	uint16_t opcode;
3084 } __packed;
3085 
3086 #define BT_HCI_EVT_HARDWARE_ERROR               0x10
3087 struct bt_hci_evt_hardware_error {
3088 	uint8_t  hardware_code;
3089 } __packed;
3090 
3091 #define BT_HCI_EVT_ROLE_CHANGE                  0x12
3092 struct bt_hci_evt_role_change {
3093 	uint8_t   status;
3094 	bt_addr_t bdaddr;
3095 	uint8_t   role;
3096 } __packed;
3097 
3098 #define BT_HCI_EVT_NUM_COMPLETED_PACKETS        0x13
3099 struct bt_hci_evt_num_completed_packets {
3100 	uint8_t  num_handles;
3101 	struct bt_hci_handle_count h[0];
3102 } __packed;
3103 
3104 /* Current mode */
3105 #define BT_ACTIVE_MODE 0x00
3106 #define BT_HOLD_MODE   0x01
3107 #define BT_SNIFF_MODE  0x02
3108 
3109 #define BT_HCI_EVT_MODE_CHANGE                  0x14
3110 struct bt_hci_evt_mode_change {
3111 	uint8_t  status;
3112 	uint16_t handle;
3113 	uint8_t  mode;
3114 	uint16_t interval;
3115 } __packed;
3116 
3117 #define BT_HCI_EVT_PIN_CODE_REQ                 0x16
3118 struct bt_hci_evt_pin_code_req {
3119 	bt_addr_t bdaddr;
3120 } __packed;
3121 
3122 #define BT_HCI_EVT_LINK_KEY_REQ                 0x17
3123 struct bt_hci_evt_link_key_req {
3124 	bt_addr_t bdaddr;
3125 } __packed;
3126 
3127 /* Link Key types */
3128 #define BT_LK_COMBINATION                       0x00
3129 #define BT_LK_LOCAL_UNIT                        0x01
3130 #define BT_LK_REMOTE_UNIT                       0x02
3131 #define BT_LK_DEBUG_COMBINATION                 0x03
3132 #define BT_LK_UNAUTH_COMBINATION_P192           0x04
3133 #define BT_LK_AUTH_COMBINATION_P192             0x05
3134 #define BT_LK_CHANGED_COMBINATION               0x06
3135 #define BT_LK_UNAUTH_COMBINATION_P256           0x07
3136 #define BT_LK_AUTH_COMBINATION_P256             0x08
3137 
3138 #define BT_HCI_EVT_LINK_KEY_NOTIFY              0x18
3139 struct bt_hci_evt_link_key_notify {
3140 	bt_addr_t bdaddr;
3141 	uint8_t   link_key[16];
3142 	uint8_t   key_type;
3143 } __packed;
3144 
3145 /* Overflow link types */
3146 #define BT_OVERFLOW_LINK_SYNCH                  0x00
3147 #define BT_OVERFLOW_LINK_ACL                    0x01
3148 #define BT_OVERFLOW_LINK_ISO                    0x02
3149 
3150 #define BT_HCI_EVT_DATA_BUF_OVERFLOW            0x1a
3151 struct bt_hci_evt_data_buf_overflow {
3152 	uint8_t  link_type;
3153 } __packed;
3154 
3155 #define BT_HCI_EVT_INQUIRY_RESULT_WITH_RSSI     0x22
3156 struct bt_hci_evt_inquiry_result_with_rssi {
3157 	bt_addr_t addr;
3158 	uint8_t   pscan_rep_mode;
3159 	uint8_t   reserved;
3160 	uint8_t   cod[3];
3161 	uint16_t  clock_offset;
3162 	int8_t    rssi;
3163 } __packed;
3164 
3165 #define BT_HCI_EVT_REMOTE_EXT_FEATURES          0x23
3166 struct bt_hci_evt_remote_ext_features {
3167 	uint8_t  status;
3168 	uint16_t handle;
3169 	uint8_t  page;
3170 	uint8_t  max_page;
3171 	uint8_t  features[8];
3172 } __packed;
3173 
3174 #define BT_HCI_EVT_LE_PER_ADV_SYNC_ESTABLISHED_V2 0x24
3175 struct bt_hci_evt_le_per_adv_sync_established_v2 {
3176 	uint8_t      status;
3177 	uint16_t     handle;
3178 	uint8_t      sid;
3179 	bt_addr_le_t adv_addr;
3180 	uint8_t      phy;
3181 	uint16_t     interval;
3182 	uint8_t      clock_accuracy;
3183 	uint8_t      num_subevents;
3184 	uint8_t      subevent_interval;
3185 	uint8_t      response_slot_delay;
3186 	uint8_t      response_slot_spacing;
3187 } __packed;
3188 
3189 #define BT_HCI_EVT_LE_PER_ADVERTISING_REPORT_V2 0x25
3190 struct bt_hci_evt_le_per_advertising_report_v2 {
3191 	uint16_t handle;
3192 	int8_t   tx_power;
3193 	int8_t   rssi;
3194 	uint8_t  cte_type;
3195 	uint16_t periodic_event_counter;
3196 	uint8_t  subevent;
3197 	uint8_t  data_status;
3198 	uint8_t  length;
3199 	uint8_t  data[0];
3200 } __packed;
3201 
3202 #define BT_HCI_EVT_LE_PAST_RECEIVED_V2 0x26
3203 struct bt_hci_evt_le_past_received_v2 {
3204 	uint8_t      status;
3205 	uint16_t     conn_handle;
3206 	uint16_t     service_data;
3207 	uint16_t     sync_handle;
3208 	uint8_t      adv_sid;
3209 	bt_addr_le_t addr;
3210 	uint8_t      phy;
3211 	uint16_t     interval;
3212 	uint8_t      clock_accuracy;
3213 	uint8_t      num_subevents;
3214 	uint8_t      subevent_interval;
3215 	uint8_t      response_slot_delay;
3216 	uint8_t      response_slot_spacing;
3217 } __packed;
3218 
3219 #define BT_HCI_EVT_LE_PER_ADV_SUBEVENT_DATA_REQUEST 0x27
3220 struct bt_hci_evt_le_per_adv_subevent_data_request {
3221 	uint8_t adv_handle;
3222 	uint8_t subevent_start;
3223 	uint8_t subevent_data_count;
3224 } __packed;
3225 
3226 #define BT_HCI_EVT_LE_PER_ADV_RESPONSE_REPORT 0x28
3227 
3228 struct bt_hci_evt_le_per_adv_response {
3229 	int8_t  tx_power;
3230 	int8_t  rssi;
3231 	uint8_t cte_type;
3232 	uint8_t response_slot;
3233 	uint8_t data_status;
3234 	uint8_t data_length;
3235 	uint8_t data[0];
3236 } __packed;
3237 
3238 struct bt_hci_evt_le_per_adv_response_report {
3239 	uint8_t adv_handle;
3240 	uint8_t subevent;
3241 	uint8_t tx_status;
3242 	uint8_t num_responses;
3243 	struct bt_hci_evt_le_per_adv_response responses[0];
3244 } __packed;
3245 
3246 #define BT_HCI_EVT_LE_ENH_CONN_COMPLETE_V2 0x29
3247 struct bt_hci_evt_le_enh_conn_complete_v2 {
3248 	uint8_t      status;
3249 	uint16_t     handle;
3250 	uint8_t      role;
3251 	bt_addr_le_t peer_addr;
3252 	bt_addr_t    local_rpa;
3253 	bt_addr_t    peer_rpa;
3254 	uint16_t     interval;
3255 	uint16_t     latency;
3256 	uint16_t     supv_timeout;
3257 	uint8_t      clock_accuracy;
3258 	uint8_t      adv_handle;
3259 	uint16_t     sync_handle;
3260 } __packed;
3261 
3262 #define BT_HCI_EVT_SYNC_CONN_COMPLETE           0x2c
3263 struct bt_hci_evt_sync_conn_complete {
3264 	uint8_t    status;
3265 	uint16_t   handle;
3266 	bt_addr_t  bdaddr;
3267 	uint8_t    link_type;
3268 	uint8_t    tx_interval;
3269 	uint8_t    retansmission_window;
3270 	uint16_t   rx_pkt_length;
3271 	uint16_t   tx_pkt_length;
3272 	uint8_t    air_mode;
3273 } __packed;
3274 
3275 #define BT_HCI_EVT_EXTENDED_INQUIRY_RESULT      0x2f
3276 struct bt_hci_evt_extended_inquiry_result {
3277 	uint8_t    num_reports;
3278 	bt_addr_t  addr;
3279 	uint8_t    pscan_rep_mode;
3280 	uint8_t    reserved;
3281 	uint8_t    cod[3];
3282 	uint16_t   clock_offset;
3283 	int8_t     rssi;
3284 	uint8_t    eir[240];
3285 } __packed;
3286 
3287 #define BT_HCI_EVT_ENCRYPT_KEY_REFRESH_COMPLETE 0x30
3288 struct bt_hci_evt_encrypt_key_refresh_complete {
3289 	uint8_t  status;
3290 	uint16_t handle;
3291 } __packed;
3292 
3293 #define BT_HCI_EVT_IO_CAPA_REQ                  0x31
3294 struct bt_hci_evt_io_capa_req {
3295 	bt_addr_t bdaddr;
3296 } __packed;
3297 
3298 #define BT_HCI_EVT_IO_CAPA_RESP                 0x32
3299 struct bt_hci_evt_io_capa_resp {
3300 	bt_addr_t bdaddr;
3301 	uint8_t   capability;
3302 	uint8_t   oob_data;
3303 	uint8_t   authentication;
3304 } __packed;
3305 
3306 #define BT_HCI_EVT_USER_CONFIRM_REQ             0x33
3307 struct bt_hci_evt_user_confirm_req {
3308 	bt_addr_t bdaddr;
3309 	uint32_t  passkey;
3310 } __packed;
3311 
3312 #define BT_HCI_EVT_USER_PASSKEY_REQ             0x34
3313 struct bt_hci_evt_user_passkey_req {
3314 	bt_addr_t bdaddr;
3315 } __packed;
3316 
3317 #define BT_HCI_EVT_SSP_COMPLETE                 0x36
3318 struct bt_hci_evt_ssp_complete {
3319 	uint8_t   status;
3320 	bt_addr_t bdaddr;
3321 } __packed;
3322 
3323 #define BT_HCI_EVT_USER_PASSKEY_NOTIFY          0x3b
3324 struct bt_hci_evt_user_passkey_notify {
3325 	bt_addr_t bdaddr;
3326 	uint32_t  passkey;
3327 } __packed;
3328 
3329 #define BT_HCI_EVT_LE_META_EVENT                0x3e
3330 struct bt_hci_evt_le_meta_event {
3331 	uint8_t  subevent;
3332 	uint8_t  data[];
3333 } __packed;
3334 
3335 #define BT_HCI_EVT_AUTH_PAYLOAD_TIMEOUT_EXP     0x57
3336 struct bt_hci_evt_auth_payload_timeout_exp {
3337 	uint16_t handle;
3338 } __packed;
3339 
3340 #define BT_HCI_ROLE_CENTRAL                     0x00
3341 #define BT_HCI_ROLE_PERIPHERAL                  0x01
3342 
3343 #define BT_HCI_EVT_LE_CONN_COMPLETE             0x01
3344 struct bt_hci_evt_le_conn_complete {
3345 	uint8_t      status;
3346 	uint16_t     handle;
3347 	uint8_t      role;
3348 	bt_addr_le_t peer_addr;
3349 	uint16_t     interval;
3350 	uint16_t     latency;
3351 	uint16_t     supv_timeout;
3352 	uint8_t      clock_accuracy;
3353 } __packed;
3354 
3355 #define BT_HCI_LE_RSSI_NOT_AVAILABLE            0x7F
3356 
3357 #define BT_HCI_EVT_LE_ADVERTISING_REPORT        0x02
3358 struct bt_hci_evt_le_advertising_info {
3359 	uint8_t      evt_type;
3360 	bt_addr_le_t addr;
3361 	uint8_t      length;
3362 	uint8_t      data[0];
3363 } __packed;
3364 struct bt_hci_evt_le_advertising_report {
3365 	uint8_t num_reports;
3366 	struct bt_hci_evt_le_advertising_info adv_info[0];
3367 } __packed;
3368 
3369 /** All limits according to BT Core Spec v5.4 [Vol 4, Part E]. */
3370 #define BT_HCI_LE_INTERVAL_MIN           0x0006
3371 #define BT_HCI_LE_INTERVAL_MAX           0x0c80
3372 #define BT_HCI_LE_PERIPHERAL_LATENCY_MIN (0x0000U)
3373 #define BT_HCI_LE_PERIPHERAL_LATENCY_MAX 0x01f3
3374 #define BT_HCI_LE_SUPERVISON_TIMEOUT_MIN 0x000a
3375 #define BT_HCI_LE_SUPERVISON_TIMEOUT_MAX 0x0c80
3376 
3377 #define BT_HCI_LE_INTERVAL_UNIT_US (1250U)
3378 
3379 #define BT_HCI_EVT_LE_CONN_UPDATE_COMPLETE      0x03
3380 struct bt_hci_evt_le_conn_update_complete {
3381 	uint8_t  status;
3382 	uint16_t handle;
3383 	uint16_t interval;
3384 	uint16_t latency;
3385 	uint16_t supv_timeout;
3386 } __packed;
3387 
3388 #define BT_HCI_EVT_LE_REMOTE_FEAT_COMPLETE      0x04
3389 struct bt_hci_evt_le_remote_feat_complete {
3390 	uint8_t  status;
3391 	uint16_t handle;
3392 	uint8_t  features[8];
3393 } __packed;
3394 
3395 #define BT_HCI_EVT_LE_LTK_REQUEST               0x05
3396 struct bt_hci_evt_le_ltk_request {
3397 	uint16_t handle;
3398 	uint64_t rand;
3399 	uint16_t ediv;
3400 } __packed;
3401 
3402 #define BT_HCI_EVT_LE_CONN_PARAM_REQ            0x06
3403 struct bt_hci_evt_le_conn_param_req {
3404 	uint16_t handle;
3405 	uint16_t interval_min;
3406 	uint16_t interval_max;
3407 	uint16_t latency;
3408 	uint16_t timeout;
3409 } __packed;
3410 
3411 #define BT_HCI_EVT_LE_DATA_LEN_CHANGE           0x07
3412 struct bt_hci_evt_le_data_len_change {
3413 	uint16_t handle;
3414 	uint16_t max_tx_octets;
3415 	uint16_t max_tx_time;
3416 	uint16_t max_rx_octets;
3417 	uint16_t max_rx_time;
3418 } __packed;
3419 
3420 #define BT_HCI_EVT_LE_P256_PUBLIC_KEY_COMPLETE  0x08
3421 struct bt_hci_evt_le_p256_public_key_complete {
3422 	uint8_t status;
3423 	uint8_t key[64];
3424 } __packed;
3425 
3426 #define BT_HCI_EVT_LE_GENERATE_DHKEY_COMPLETE   0x09
3427 struct bt_hci_evt_le_generate_dhkey_complete {
3428 	uint8_t status;
3429 	uint8_t dhkey[32];
3430 } __packed;
3431 
3432 #define BT_HCI_EVT_LE_ENH_CONN_COMPLETE         0x0a
3433 struct bt_hci_evt_le_enh_conn_complete {
3434 	uint8_t      status;
3435 	uint16_t     handle;
3436 	uint8_t      role;
3437 	bt_addr_le_t peer_addr;
3438 	bt_addr_t    local_rpa;
3439 	bt_addr_t    peer_rpa;
3440 	uint16_t     interval;
3441 	uint16_t     latency;
3442 	uint16_t     supv_timeout;
3443 	uint8_t      clock_accuracy;
3444 } __packed;
3445 
3446 #define BT_HCI_EVT_LE_DIRECT_ADV_REPORT         0x0b
3447 struct bt_hci_evt_le_direct_adv_info {
3448 	uint8_t      evt_type;
3449 	bt_addr_le_t addr;
3450 	bt_addr_le_t dir_addr;
3451 	int8_t       rssi;
3452 } __packed;
3453 struct bt_hci_evt_le_direct_adv_report {
3454 	uint8_t num_reports;
3455 	struct bt_hci_evt_le_direct_adv_info direct_adv_info[0];
3456 } __packed;
3457 
3458 #define BT_HCI_EVT_LE_PHY_UPDATE_COMPLETE       0x0c
3459 struct bt_hci_evt_le_phy_update_complete {
3460 	uint8_t  status;
3461 	uint16_t handle;
3462 	uint8_t  tx_phy;
3463 	uint8_t  rx_phy;
3464 } __packed;
3465 
3466 #define BT_HCI_EVT_LE_EXT_ADVERTISING_REPORT    0x0d
3467 
3468 #define BT_HCI_LE_ADV_EVT_TYPE_CONN                 BIT(0)
3469 #define BT_HCI_LE_ADV_EVT_TYPE_SCAN                 BIT(1)
3470 #define BT_HCI_LE_ADV_EVT_TYPE_DIRECT               BIT(2)
3471 #define BT_HCI_LE_ADV_EVT_TYPE_SCAN_RSP             BIT(3)
3472 #define BT_HCI_LE_ADV_EVT_TYPE_LEGACY               BIT(4)
3473 
3474 #define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS(ev_type) (((ev_type) >> 5) & 0x03)
3475 #define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_COMPLETE   0
3476 #define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_PARTIAL    1
3477 #define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_INCOMPLETE 2
3478 #define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_RX_FAILED  0xFF
3479 
3480 /* Advertising Coding Selection extended advertising report PHY values.
3481  * Only used when Kconfig BT_EXT_ADV_CODING_SELECTION is enabled.
3482  */
3483 #define BT_HCI_LE_ADV_EVT_PHY_1M                0x01
3484 #define BT_HCI_LE_ADV_EVT_PHY_2M                0x02
3485 #define BT_HCI_LE_ADV_EVT_PHY_CODED_S8          0x03
3486 #define BT_HCI_LE_ADV_EVT_PHY_CODED_S2          0x04
3487 
3488 struct bt_hci_evt_le_ext_advertising_info {
3489 	uint16_t     evt_type;
3490 	bt_addr_le_t addr;
3491 	uint8_t      prim_phy;
3492 	uint8_t      sec_phy;
3493 	uint8_t      sid;
3494 	int8_t       tx_power;
3495 	int8_t       rssi;
3496 	uint16_t     interval;
3497 	bt_addr_le_t direct_addr;
3498 	uint8_t      length;
3499 	uint8_t      data[0];
3500 } __packed;
3501 struct bt_hci_evt_le_ext_advertising_report {
3502 	uint8_t num_reports;
3503 	struct bt_hci_evt_le_ext_advertising_info adv_info[0];
3504 } __packed;
3505 
3506 #define BT_HCI_EVT_LE_PER_ADV_SYNC_ESTABLISHED  0x0e
3507 struct bt_hci_evt_le_per_adv_sync_established {
3508 	uint8_t      status;
3509 	uint16_t     handle;
3510 	uint8_t      sid;
3511 	bt_addr_le_t adv_addr;
3512 	uint8_t      phy;
3513 	uint16_t     interval;
3514 	uint8_t      clock_accuracy;
3515 } __packed;
3516 
3517 #define BT_HCI_EVT_LE_PER_ADVERTISING_REPORT    0x0f
3518 struct bt_hci_evt_le_per_advertising_report {
3519 	uint16_t handle;
3520 	int8_t   tx_power;
3521 	int8_t   rssi;
3522 	uint8_t  cte_type;
3523 	uint8_t  data_status;
3524 	uint8_t  length;
3525 	uint8_t  data[0];
3526 } __packed;
3527 
3528 #define BT_HCI_EVT_LE_PER_ADV_SYNC_LOST         0x10
3529 struct bt_hci_evt_le_per_adv_sync_lost {
3530 	uint16_t handle;
3531 } __packed;
3532 
3533 #define BT_HCI_EVT_LE_SCAN_TIMEOUT              0x11
3534 
3535 #define BT_HCI_EVT_LE_ADV_SET_TERMINATED        0x12
3536 struct bt_hci_evt_le_adv_set_terminated {
3537 	uint8_t  status;
3538 	uint8_t  adv_handle;
3539 	uint16_t conn_handle;
3540 	uint8_t  num_completed_ext_adv_evts;
3541 } __packed;
3542 
3543 #define BT_HCI_EVT_LE_SCAN_REQ_RECEIVED         0x13
3544 struct bt_hci_evt_le_scan_req_received {
3545 	uint8_t      handle;
3546 	bt_addr_le_t addr;
3547 } __packed;
3548 
3549 #define BT_HCI_LE_CHAN_SEL_ALGO_1               0x00
3550 #define BT_HCI_LE_CHAN_SEL_ALGO_2               0x01
3551 
3552 #define BT_HCI_EVT_LE_CHAN_SEL_ALGO             0x14
3553 struct bt_hci_evt_le_chan_sel_algo {
3554 	uint16_t handle;
3555 	uint8_t  chan_sel_algo;
3556 } __packed;
3557 
3558 #define BT_HCI_LE_CTE_CRC_OK                    0x0
3559 #define BT_HCI_LE_CTE_CRC_ERR_CTE_BASED_TIME    0x1
3560 #define BT_HCI_LE_CTE_CRC_ERR_CTE_BASED_OTHER   0x2
3561 #define BT_HCI_LE_CTE_INSUFFICIENT_RESOURCES    0xFF
3562 
3563 #define B_HCI_LE_CTE_REPORT_SAMPLE_COUNT_MIN    0x9
3564 #define B_HCI_LE_CTE_REPORT_SAMPLE_COUNT_MAX    0x52
3565 
3566 #define BT_HCI_LE_CTE_REPORT_NO_VALID_SAMPLE    0x80
3567 
3568 #define BT_HCI_EVT_LE_CONNECTIONLESS_IQ_REPORT  0x15
3569 struct bt_hci_le_iq_sample {
3570 	int8_t i;
3571 	int8_t q;
3572 };
3573 
3574 struct bt_hci_evt_le_connectionless_iq_report {
3575 	uint16_t sync_handle;
3576 	uint8_t  chan_idx;
3577 	int16_t  rssi;
3578 	uint8_t  rssi_ant_id;
3579 	uint8_t  cte_type;
3580 	uint8_t  slot_durations;
3581 	uint8_t  packet_status;
3582 	uint16_t per_evt_counter;
3583 	uint8_t  sample_count;
3584 	struct bt_hci_le_iq_sample sample[0];
3585 } __packed;
3586 
3587 #define BT_HCI_EVT_LE_CONNECTION_IQ_REPORT      0x16
3588 struct bt_hci_evt_le_connection_iq_report {
3589 	uint16_t conn_handle;
3590 	uint8_t  rx_phy;
3591 	uint8_t  data_chan_idx;
3592 	int16_t  rssi;
3593 	uint8_t  rssi_ant_id;
3594 	uint8_t  cte_type;
3595 	uint8_t  slot_durations;
3596 	uint8_t  packet_status;
3597 	uint16_t conn_evt_counter;
3598 	uint8_t  sample_count;
3599 	struct bt_hci_le_iq_sample sample[0];
3600 } __packed;
3601 
3602 #define BT_HCI_CTE_REQ_STATUS_RSP_WITHOUT_CTE  0x0
3603 
3604 #define BT_HCI_EVT_LE_CTE_REQUEST_FAILED       0x17
3605 struct bt_hci_evt_le_cte_req_failed {
3606 	/* According to BT 5.3 Core Spec the status field may have following
3607 	 * values:
3608 	 * - BT_HCI_CTE_REQ_STATUS_RSP_WITHOUT_CTE when received LL_CTE_RSP_PDU without CTE.
3609 	 * - Other Controller error code for peer rejected request.
3610 	 */
3611 	uint8_t  status;
3612 	uint16_t conn_handle;
3613 } __packed;
3614 
3615 #define BT_HCI_EVT_LE_PAST_RECEIVED                0x18
3616 struct bt_hci_evt_le_past_received {
3617 	uint8_t      status;
3618 	uint16_t     conn_handle;
3619 	uint16_t     service_data;
3620 	uint16_t     sync_handle;
3621 	uint8_t      adv_sid;
3622 	bt_addr_le_t addr;
3623 	uint8_t      phy;
3624 	uint16_t     interval;
3625 	uint8_t      clock_accuracy;
3626 } __packed;
3627 
3628 #define BT_HCI_EVT_LE_CIS_ESTABLISHED           0x19
3629 struct bt_hci_evt_le_cis_established {
3630 	uint8_t  status;
3631 	uint16_t conn_handle;
3632 	uint8_t  cig_sync_delay[3];
3633 	uint8_t  cis_sync_delay[3];
3634 	uint8_t  c_latency[3];
3635 	uint8_t  p_latency[3];
3636 	uint8_t  c_phy;
3637 	uint8_t  p_phy;
3638 	uint8_t  nse;
3639 	uint8_t  c_bn;
3640 	uint8_t  p_bn;
3641 	uint8_t  c_ft;
3642 	uint8_t  p_ft;
3643 	uint16_t c_max_pdu;
3644 	uint16_t p_max_pdu;
3645 	uint16_t interval;
3646 } __packed;
3647 
3648 #define BT_HCI_EVT_LE_CIS_REQ                   0x1a
3649 struct bt_hci_evt_le_cis_req {
3650 	uint16_t acl_handle;
3651 	uint16_t cis_handle;
3652 	uint8_t  cig_id;
3653 	uint8_t  cis_id;
3654 } __packed;
3655 
3656 #define BT_HCI_LE_BIG_HANDLE_MIN            0x00U
3657 #define BT_HCI_LE_BIG_HANDLE_MAX            0xEFU
3658 #define BT_HCI_LE_BIG_SYNC_DELAY_MIN        0x000030U
3659 #define BT_HCI_LE_BIG_SYNC_DELAY_MAX        0x7FFFFFU
3660 #define BT_HCI_LE_TRANSPORT_LATENCY_BIG_MIN 0x000030U
3661 #define BT_HCI_LE_TRANSPORT_LATENCY_BIG_MAX 0x7FFFFFU
3662 
3663 #define BT_HCI_EVT_LE_BIG_COMPLETE              0x1b
3664 struct bt_hci_evt_le_big_complete {
3665 	uint8_t  status;
3666 	uint8_t  big_handle;
3667 	uint8_t  sync_delay[3];
3668 	uint8_t  latency[3];
3669 	uint8_t  phy;
3670 	uint8_t  nse;
3671 	uint8_t  bn;
3672 	uint8_t  pto;
3673 	uint8_t  irc;
3674 	uint16_t max_pdu;
3675 	uint16_t iso_interval;
3676 	uint8_t  num_bis;
3677 	uint16_t handle[0];
3678 } __packed;
3679 
3680 #define BT_HCI_EVT_LE_BIG_TERMINATE             0x1c
3681 struct bt_hci_evt_le_big_terminate {
3682 	uint8_t  big_handle;
3683 	uint8_t  reason;
3684 } __packed;
3685 
3686 #define BT_HCI_EVT_LE_BIG_SYNC_ESTABLISHED      0x1d
3687 struct bt_hci_evt_le_big_sync_established {
3688 	uint8_t  status;
3689 	uint8_t  big_handle;
3690 	uint8_t  latency[3];
3691 	uint8_t  nse;
3692 	uint8_t  bn;
3693 	uint8_t  pto;
3694 	uint8_t  irc;
3695 	uint16_t max_pdu;
3696 	uint16_t iso_interval;
3697 	uint8_t  num_bis;
3698 	uint16_t handle[0];
3699 } __packed;
3700 
3701 #define BT_HCI_EVT_LE_BIG_SYNC_LOST             0x1e
3702 struct bt_hci_evt_le_big_sync_lost {
3703 	uint8_t  big_handle;
3704 	uint8_t  reason;
3705 } __packed;
3706 
3707 #define BT_HCI_EVT_LE_REQ_PEER_SCA_COMPLETE     0x1f
3708 struct bt_hci_evt_le_req_peer_sca_complete {
3709 	uint8_t  status;
3710 	uint16_t handle;
3711 	uint8_t  sca;
3712 } __packed;
3713 
3714 #define	BT_HCI_LE_ZONE_ENTERED_LOW      0x0
3715 #define	BT_HCI_LE_ZONE_ENTERED_MIDDLE   0x1
3716 #define	BT_HCI_LE_ZONE_ENTERED_HIGH     0x2
3717 #define	BT_HCI_LE_PATH_LOSS_UNAVAILABLE 0xFF
3718 
3719 #define BT_HCI_EVT_LE_PATH_LOSS_THRESHOLD                   0x20
3720 struct bt_hci_evt_le_path_loss_threshold {
3721 	uint16_t handle;
3722 	uint8_t  current_path_loss;
3723 	uint8_t  zone_entered;
3724 } __packed;
3725 
3726 /** Reason for Transmit power reporting.
3727  */
3728 /* Local Transmit power changed. */
3729 #define	BT_HCI_LE_TX_POWER_REPORT_REASON_LOCAL_CHANGED         0x00
3730 /* Remote Transmit power changed. */
3731 #define	BT_HCI_LE_TX_POWER_REPORT_REASON_REMOTE_CHANGED        0x01
3732 /* HCI_LE_Read_Remote_Transmit_Power_Level command completed. */
3733 #define	BT_HCI_LE_TX_POWER_REPORT_REASON_READ_REMOTE_COMPLETED 0x02
3734 
3735 #define BT_HCI_EVT_LE_TRANSMIT_POWER_REPORT     0x21
3736 struct bt_hci_evt_le_transmit_power_report {
3737 	uint8_t	 status;
3738 	uint16_t handle;
3739 	uint8_t  reason;
3740 	uint8_t  phy;
3741 	int8_t   tx_power_level;
3742 	uint8_t  tx_power_level_flag;
3743 	int8_t   delta;
3744 } __packed;
3745 
3746 #define BT_HCI_EVT_LE_BIGINFO_ADV_REPORT        0x22
3747 struct bt_hci_evt_le_biginfo_adv_report {
3748 	uint16_t sync_handle;
3749 	uint8_t  num_bis;
3750 	uint8_t  nse;
3751 	uint16_t iso_interval;
3752 	uint8_t  bn;
3753 	uint8_t  pto;
3754 	uint8_t  irc;
3755 	uint16_t max_pdu;
3756 	uint8_t  sdu_interval[3];
3757 	uint16_t max_sdu;
3758 	uint8_t  phy;
3759 	uint8_t  framing;
3760 	uint8_t  encryption;
3761 } __packed;
3762 
3763 /** All limits according to BT Core Spec v5.4 [Vol 4, Part E]. */
3764 #define BT_HCI_LE_SUBRATE_FACTOR_MIN   0x0001
3765 #define BT_HCI_LE_SUBRATE_FACTOR_MAX   0x01f4
3766 #define BT_HCI_LE_CONTINUATION_NUM_MIN (0x0000U)
3767 #define BT_HCI_LE_CONTINUATION_NUM_MAX 0x01f3
3768 
3769 #define BT_HCI_EVT_LE_SUBRATE_CHANGE            0x23
3770 struct bt_hci_evt_le_subrate_change {
3771 	uint8_t  status;
3772 	uint16_t handle;
3773 	uint16_t subrate_factor;
3774 	uint16_t peripheral_latency;
3775 	uint16_t continuation_number;
3776 	uint16_t supervision_timeout;
3777 } __packed;
3778 
3779 #define BT_HCI_EVT_LE_CIS_ESTABLISHED_V2 0x2a
3780 struct bt_hci_evt_le_cis_established_v2 {
3781 	uint8_t  status;
3782 	uint16_t conn_handle;
3783 	uint8_t  cig_sync_delay[3];
3784 	uint8_t  cis_sync_delay[3];
3785 	uint8_t  c_latency[3];
3786 	uint8_t  p_latency[3];
3787 	uint8_t  c_phy;
3788 	uint8_t  p_phy;
3789 	uint8_t  nse;
3790 	uint8_t  c_bn;
3791 	uint8_t  p_bn;
3792 	uint8_t  c_ft;
3793 	uint8_t  p_ft;
3794 	uint16_t c_max_pdu;
3795 	uint16_t p_max_pdu;
3796 	uint16_t interval;
3797 	uint8_t  sub_interval[3];
3798 	uint16_t c_max_sdu;
3799 	uint16_t p_max_sdu;
3800 	uint8_t  c_sdu_interval[3];
3801 	uint8_t  p_sdu_interval[3];
3802 	uint8_t  framing;
3803 } __packed;
3804 
3805 #define BT_HCI_EVT_LE_READ_ALL_REMOTE_FEAT_COMPLETE 0x2b
3806 
3807 #define BT_HCI_LE_FEATURE_PAGE_MAX          10
3808 #define BT_HCI_LE_BYTES_PER_FEATURE_PAGE    24
3809 #define BT_HCI_LE_BYTES_PAGE_0_FEATURE_PAGE 8
3810 
3811 struct bt_hci_evt_le_read_all_remote_feat_complete {
3812 	uint8_t  status;
3813 	uint16_t handle;
3814 	uint8_t  max_remote_page;
3815 	uint8_t  max_valid_page;
3816 	uint8_t  features[248];
3817 } __packed;
3818 
3819 #define BT_HCI_LE_CS_INITIATOR_ROLE_MASK BIT(0)
3820 #define BT_HCI_LE_CS_REFLECTOR_ROLE_MASK BIT(1)
3821 
3822 #define BT_HCI_LE_CS_MODES_SUPPORTED_MODE_3_MASK BIT(0)
3823 
3824 #define BT_HCI_LE_CS_RTT_AA_ONLY_N_10NS_MASK        BIT(0)
3825 #define BT_HCI_LE_CS_RTT_SOUNDING_N_10NS_MASK       BIT(1)
3826 #define BT_HCI_LE_CS_RTT_RANDOM_PAYLOAD_N_10NS_MASK BIT(2)
3827 
3828 #define BT_HCI_LE_CS_NADM_SOUNDING_CAPABILITY_PHASE_BASED_MASK BIT(0)
3829 #define BT_HCI_LE_CS_NADM_RANDOM_CAPABILITY_PHASE_BASED_MASK BIT(0)
3830 
3831 #define BT_HCI_LE_CS_SYNC_PHYS_2M_MASK BIT(1)
3832 #define BT_HCI_LE_CS_SYNC_PHYS_2M_2BT_MASK BIT(2)
3833 
3834 #define BT_HCI_LE_CS_SUBFEATURE_NO_TX_FAE_MASK BIT(1)
3835 #define BT_HCI_LE_CS_SUBFEATURE_CHSEL_ALG_3C_MASK BIT(2)
3836 #define BT_HCI_LE_CS_SUBFEATURE_PBR_FROM_RTT_SOUNDING_SEQ_MASK BIT(3)
3837 
3838 #define BT_HCI_LE_CS_T_IP1_TIME_10US_MASK BIT(0)
3839 #define BT_HCI_LE_CS_T_IP1_TIME_20US_MASK BIT(1)
3840 #define BT_HCI_LE_CS_T_IP1_TIME_30US_MASK BIT(2)
3841 #define BT_HCI_LE_CS_T_IP1_TIME_40US_MASK BIT(3)
3842 #define BT_HCI_LE_CS_T_IP1_TIME_50US_MASK BIT(4)
3843 #define BT_HCI_LE_CS_T_IP1_TIME_60US_MASK BIT(5)
3844 #define BT_HCI_LE_CS_T_IP1_TIME_80US_MASK BIT(6)
3845 
3846 #define BT_HCI_LE_CS_T_IP2_TIME_10US_MASK BIT(0)
3847 #define BT_HCI_LE_CS_T_IP2_TIME_20US_MASK BIT(1)
3848 #define BT_HCI_LE_CS_T_IP2_TIME_30US_MASK BIT(2)
3849 #define BT_HCI_LE_CS_T_IP2_TIME_40US_MASK BIT(3)
3850 #define BT_HCI_LE_CS_T_IP2_TIME_50US_MASK BIT(4)
3851 #define BT_HCI_LE_CS_T_IP2_TIME_60US_MASK BIT(5)
3852 #define BT_HCI_LE_CS_T_IP2_TIME_80US_MASK BIT(6)
3853 
3854 #define BT_HCI_LE_CS_T_FCS_TIME_15US_MASK   BIT(0)
3855 #define BT_HCI_LE_CS_T_FCS_TIME_20US_MASK   BIT(1)
3856 #define BT_HCI_LE_CS_T_FCS_TIME_30US_MASK   BIT(2)
3857 #define BT_HCI_LE_CS_T_FCS_TIME_40US_MASK   BIT(3)
3858 #define BT_HCI_LE_CS_T_FCS_TIME_50US_MASK   BIT(4)
3859 #define BT_HCI_LE_CS_T_FCS_TIME_60US_MASK   BIT(5)
3860 #define BT_HCI_LE_CS_T_FCS_TIME_80US_MASK   BIT(6)
3861 #define BT_HCI_LE_CS_T_FCS_TIME_100US_MASK  BIT(7)
3862 #define BT_HCI_LE_CS_T_FCS_TIME_1200US_MASK BIT(8)
3863 
3864 #define BT_HCI_LE_CS_T_PM_TIME_10US_MASK BIT(0)
3865 #define BT_HCI_LE_CS_T_PM_TIME_20US_MASK BIT(1)
3866 
3867 #define BT_HCI_LE_CS_TX_SNR_CAPABILITY_18DB_MASK BIT(0)
3868 #define BT_HCI_LE_CS_TX_SNR_CAPABILITY_21DB_MASK BIT(1)
3869 #define BT_HCI_LE_CS_TX_SNR_CAPABILITY_24DB_MASK BIT(2)
3870 #define BT_HCI_LE_CS_TX_SNR_CAPABILITY_27DB_MASK BIT(3)
3871 #define BT_HCI_LE_CS_TX_SNR_CAPABILITY_30DB_MASK BIT(4)
3872 
3873 #define BT_HCI_EVT_LE_CS_READ_REMOTE_SUPPORTED_CAPABILITIES_COMPLETE 0x2C
3874 struct bt_hci_evt_le_cs_read_remote_supported_capabilities_complete {
3875 	uint8_t  status;
3876 	uint16_t conn_handle;
3877 	uint8_t  num_config_supported;
3878 	uint16_t max_consecutive_procedures_supported;
3879 	uint8_t  num_antennas_supported;
3880 	uint8_t  max_antenna_paths_supported;
3881 	uint8_t  roles_supported;
3882 	uint8_t  modes_supported;
3883 	uint8_t  rtt_capability;
3884 	uint8_t  rtt_aa_only_n;
3885 	uint8_t  rtt_sounding_n;
3886 	uint8_t  rtt_random_payload_n;
3887 	uint16_t nadm_sounding_capability;
3888 	uint16_t nadm_random_capability;
3889 	uint8_t  cs_sync_phys_supported;
3890 	uint16_t subfeatures_supported;
3891 	uint16_t t_ip1_times_supported;
3892 	uint16_t t_ip2_times_supported;
3893 	uint16_t t_fcs_times_supported;
3894 	uint16_t t_pm_times_supported;
3895 	uint8_t  t_sw_time_supported;
3896 	uint8_t  tx_snr_capability;
3897 } __packed;
3898 
3899 #define BT_HCI_EVT_LE_CS_READ_REMOTE_FAE_TABLE_COMPLETE 0x2D
3900 struct bt_hci_evt_le_cs_read_remote_fae_table_complete {
3901 	uint8_t  status;
3902 	uint16_t conn_handle;
3903 	int8_t   remote_fae_table[72];
3904 } __packed;
3905 
3906 #define BT_HCI_LE_CS_CONFIG_ACTION_REMOVED 0x00
3907 #define BT_HCI_LE_CS_CONFIG_ACTION_CREATED 0x01
3908 
3909 #define BT_HCI_EVT_LE_CS_SECURITY_ENABLE_COMPLETE 0x2E
3910 struct bt_hci_evt_le_cs_security_enable_complete {
3911 	uint8_t  status;
3912 	uint16_t handle;
3913 } __packed;
3914 
3915 #define BT_HCI_EVT_LE_CS_CONFIG_COMPLETE 0x2F
3916 struct bt_hci_evt_le_cs_config_complete {
3917 	uint8_t  status;
3918 	uint16_t handle;
3919 	uint8_t  config_id;
3920 	uint8_t  action;
3921 	uint8_t  main_mode_type;
3922 	uint8_t  sub_mode_type;
3923 	uint8_t  min_main_mode_steps;
3924 	uint8_t  max_main_mode_steps;
3925 	uint8_t  main_mode_repetition;
3926 	uint8_t  mode_0_steps;
3927 	uint8_t  role;
3928 	uint8_t  rtt_type;
3929 	uint8_t  cs_sync_phy;
3930 	uint8_t  channel_map[10];
3931 	uint8_t  channel_map_repetition;
3932 	uint8_t  channel_selection_type;
3933 	uint8_t  ch3c_shape;
3934 	uint8_t  ch3c_jump;
3935 	uint8_t  reserved;
3936 	uint8_t  t_ip1_time;
3937 	uint8_t  t_ip2_time;
3938 	uint8_t  t_fcs_time;
3939 	uint8_t  t_pm_time;
3940 } __packed;
3941 
3942 #define BT_HCI_LE_CS_TEST_CONN_HANDLE 0x0FFF
3943 
3944 #define BT_HCI_LE_CS_PROCEDURE_DONE_STATUS_COMPLETE 0x0
3945 #define BT_HCI_LE_CS_PROCEDURE_DONE_STATUS_PARTIAL  0x1
3946 #define BT_HCI_LE_CS_PROCEDURE_DONE_STATUS_ABORTED  0xF
3947 
3948 #define BT_HCI_LE_CS_SUBEVENT_DONE_STATUS_COMPLETE 0x0
3949 #define BT_HCI_LE_CS_SUBEVENT_DONE_STATUS_PARTIAL  0x1
3950 #define BT_HCI_LE_CS_SUBEVENT_DONE_STATUS_ABORTED  0xF
3951 
3952 #define BT_HCI_LE_CS_PROCEDURE_ABORT_REASON_NO_ABORT                     0x0
3953 #define BT_HCI_LE_CS_PROCEDURE_ABORT_REASON_LOCAL_HOST_OR_REMOTE_REQUEST 0x1
3954 #define BT_HCI_LE_CS_PROCEDURE_ABORT_REASON_TOO_FEW_CHANNELS             0x2
3955 #define BT_HCI_LE_CS_PROCEDURE_ABORT_REASON_CHMAP_INSTANT_PASSED         0x3
3956 #define BT_HCI_LE_CS_PROCEDURE_ABORT_REASON_UNSPECIFIED                  0xF
3957 
3958 #define BT_HCI_LE_CS_SUBEVENT_ABORT_REASON_NO_ABORT                     0x0
3959 #define BT_HCI_LE_CS_SUBEVENT_ABORT_REASON_LOCAL_HOST_OR_REMOTE_REQUEST 0x1
3960 #define BT_HCI_LE_CS_SUBEVENT_ABORT_REASON_NO_CS_SYNC_RECEIVED          0x2
3961 #define BT_HCI_LE_CS_SUBEVENT_ABORT_REASON_SCHED_CONFLICT               0x3
3962 #define BT_HCI_LE_CS_SUBEVENT_ABORT_REASON_UNSPECIFIED                  0xF
3963 
3964 #define BT_HCI_LE_CS_SUBEVENT_RESULT_N_AP_IGNORED 0x00
3965 #define BT_HCI_LE_CS_SUBEVENT_RESULT_N_AP_1       0x01
3966 #define BT_HCI_LE_CS_SUBEVENT_RESULT_N_AP_2       0x02
3967 #define BT_HCI_LE_CS_SUBEVENT_RESULT_N_AP_3       0x03
3968 #define BT_HCI_LE_CS_SUBEVENT_RESULT_N_AP_4       0x04
3969 
3970 #define BT_HCI_LE_CS_SUBEVENT_RESULT_FREQ_COMPENSATION_NOT_AVAILABLE 0xC000
3971 
3972 #define BT_HCI_LE_CS_SUBEVENT_RESULT_PCT_NOT_AVAILABLE 0xFFFFFFFF
3973 
3974 #define BT_HCI_LE_CS_REF_POWER_LEVEL_UNAVAILABLE 0x7F
3975 
3976 #define BT_HCI_LE_CS_PCT_I_MASK 0x000FFF
3977 #define BT_HCI_LE_CS_PCT_Q_MASK 0xFFF000
3978 
3979 #define BT_HCI_LE_CS_TONE_QUALITY_HIGH        0x0
3980 #define BT_HCI_LE_CS_TONE_QUALITY_MED         0x1
3981 #define BT_HCI_LE_CS_TONE_QUALITY_LOW         0x2
3982 #define BT_HCI_LE_CS_TONE_QUALITY_UNAVAILABLE 0x3
3983 
3984 #define BT_HCI_LE_CS_NOT_TONE_EXT_SLOT              0x0
3985 #define BT_HCI_LE_CS_TONE_EXT_SLOT_EXT_NOT_EXPECTED 0x1
3986 #define BT_HCI_LE_CS_TONE_EXT_SLOT_EXT_EXPECTED     0x2
3987 
3988 #define BT_HCI_LE_CS_TIME_DIFFERENCE_NOT_AVAILABLE ((int16_t)0x8000)
3989 
3990 #define BT_HCI_LE_CS_PACKET_NADM_ATTACK_EXT_UNLIKELY  0x00
3991 #define BT_HCI_LE_CS_PACKET_NADM_ATTACK_VERY_UNLIKELY 0x01
3992 #define BT_HCI_LE_CS_PACKET_NADM_ATTACK_UNLIKELY      0x02
3993 #define BT_HCI_LE_CS_PACKET_NADM_ATTACK_POSSIBLE      0x03
3994 #define BT_HCI_LE_CS_PACKET_NADM_ATTACK_LIKELY        0x04
3995 #define BT_HCI_LE_CS_PACKET_NADM_ATTACK_VERY_LIKELY   0x05
3996 #define BT_HCI_LE_CS_PACKET_NADM_ATTACK_EXT_LIKELY    0x06
3997 #define BT_HCI_LE_CS_PACKET_NADM_UNKNOWN              0xFF
3998 
3999 #define BT_HCI_LE_CS_PACKET_QUALITY_AA_CHECK_SUCCESSFUL	      0x0
4000 #define BT_HCI_LE_CS_PACKET_QUALITY_AA_CHECK_BIT_ERRORS_FOUND 0x1
4001 #define BT_HCI_LE_CS_PACKET_QUALITY_AA_CHECK_AA_NOT_FOUND     0x2
4002 
4003 #define BT_HCI_LE_CS_PACKET_RSSI_NOT_AVAILABLE 0x7F
4004 
4005 #define BT_HCI_EVT_LE_CS_SUBEVENT_RESULT 0x31
4006 /** Subevent result step data format: Mode 0 Initiator  */
4007 struct bt_hci_le_cs_step_data_mode_0_initiator {
4008 #ifdef CONFIG_LITTLE_ENDIAN
4009 	uint8_t  packet_quality_aa_check: 4;
4010 	uint8_t  packet_quality_bit_errors: 4;
4011 #else
4012 	uint8_t  packet_quality_bit_errors: 4;
4013 	uint8_t  packet_quality_aa_check: 4;
4014 #endif /* CONFIG_LITTLE_ENDIAN */
4015 	uint8_t  packet_rssi;
4016 	uint8_t  packet_antenna;
4017 	uint16_t measured_freq_offset;
4018 } __packed;
4019 
4020 /** Subevent result step data format: Mode 0 Reflector  */
4021 struct bt_hci_le_cs_step_data_mode_0_reflector {
4022 #ifdef CONFIG_LITTLE_ENDIAN
4023 	uint8_t packet_quality_aa_check: 4;
4024 	uint8_t packet_quality_bit_errors: 4;
4025 #else
4026 	uint8_t packet_quality_bit_errors: 4;
4027 	uint8_t packet_quality_aa_check: 4;
4028 #endif /* CONFIG_LITTLE_ENDIAN */
4029 	uint8_t packet_rssi;
4030 	uint8_t packet_antenna;
4031 } __packed;
4032 
4033 /** Subevent result step data format: Mode 1  */
4034 struct bt_hci_le_cs_step_data_mode_1 {
4035 #ifdef CONFIG_LITTLE_ENDIAN
4036 	uint8_t packet_quality_aa_check: 4;
4037 	uint8_t packet_quality_bit_errors: 4;
4038 #else
4039 	uint8_t packet_quality_bit_errors: 4;
4040 	uint8_t packet_quality_aa_check: 4;
4041 #endif /* CONFIG_LITTLE_ENDIAN */
4042 	uint8_t packet_nadm;
4043 	uint8_t packet_rssi;
4044 	union {
4045 		int16_t toa_tod_initiator;
4046 		int16_t tod_toa_reflector;
4047 	};
4048 	uint8_t packet_antenna;
4049 } __packed;
4050 
4051 /** Subevent result step data format: Mode 1 with sounding sequence RTT support */
4052 struct bt_hci_le_cs_step_data_mode_1_ss_rtt {
4053 #ifdef CONFIG_LITTLE_ENDIAN
4054 	uint8_t packet_quality_aa_check: 4;
4055 	uint8_t packet_quality_bit_errors: 4;
4056 #else
4057 	uint8_t packet_quality_bit_errors: 4;
4058 	uint8_t packet_quality_aa_check: 4;
4059 #endif /* CONFIG_LITTLE_ENDIAN */
4060 	uint8_t packet_nadm;
4061 	uint8_t packet_rssi;
4062 	union {
4063 		int16_t toa_tod_initiator;
4064 		int16_t tod_toa_reflector;
4065 	};
4066 	uint8_t packet_antenna;
4067 	uint8_t packet_pct1[4];
4068 	uint8_t packet_pct2[4];
4069 } __packed;
4070 
4071 
4072 /** Format for per-antenna path step data in modes 2 and 3 */
4073 struct bt_hci_le_cs_step_data_tone_info {
4074 	uint8_t phase_correction_term[3];
4075 #ifdef CONFIG_LITTLE_ENDIAN
4076 	uint8_t quality_indicator: 4;
4077 	uint8_t extension_indicator: 4;
4078 #else
4079 	uint8_t extension_indicator: 4;
4080 	uint8_t quality_indicator: 4;
4081 #endif /* CONFIG_LITTLE_ENDIAN */
4082 } __packed;
4083 
4084 /** Subevent result step data format: Mode 2 */
4085 struct bt_hci_le_cs_step_data_mode_2 {
4086 	uint8_t antenna_permutation_index;
4087 	struct bt_hci_le_cs_step_data_tone_info tone_info[];
4088 } __packed;
4089 
4090 /** Subevent result step data format: Mode 3 */
4091 struct bt_hci_le_cs_step_data_mode_3 {
4092 #ifdef CONFIG_LITTLE_ENDIAN
4093 	uint8_t packet_quality_aa_check: 4;
4094 	uint8_t packet_quality_bit_errors: 4;
4095 #else
4096 	uint8_t packet_quality_bit_errors: 4;
4097 	uint8_t packet_quality_aa_check: 4;
4098 #endif /* CONFIG_LITTLE_ENDIAN */
4099 	uint8_t packet_nadm;
4100 	uint8_t packet_rssi;
4101 	union {
4102 		int16_t toa_tod_initiator;
4103 		int16_t tod_toa_reflector;
4104 	};
4105 	uint8_t packet_antenna;
4106 	uint8_t antenna_permutation_index;
4107 	struct bt_hci_le_cs_step_data_tone_info tone_info[];
4108 } __packed;
4109 
4110 /** Subevent result step data format: Mode 3 with sounding sequence RTT support */
4111 struct bt_hci_le_cs_step_data_mode_3_ss_rtt {
4112 #ifdef CONFIG_LITTLE_ENDIAN
4113 	uint8_t packet_quality_aa_check: 4;
4114 	uint8_t packet_quality_bit_errors: 4;
4115 #else
4116 	uint8_t packet_quality_bit_errors: 4;
4117 	uint8_t packet_quality_aa_check: 4;
4118 #endif /* CONFIG_LITTLE_ENDIAN */
4119 	uint8_t packet_nadm;
4120 	uint8_t packet_rssi;
4121 	union {
4122 		int16_t toa_tod_initiator;
4123 		int16_t tod_toa_reflector;
4124 	};
4125 	uint8_t packet_antenna;
4126 	uint8_t packet_pct1[4];
4127 	uint8_t packet_pct2[4];
4128 	uint8_t antenna_permutation_index;
4129 	struct bt_hci_le_cs_step_data_tone_info tone_info[];
4130 } __packed;
4131 
4132 struct bt_hci_evt_le_cs_subevent_result_step {
4133 	uint8_t step_mode;
4134 	uint8_t step_channel;
4135 	uint8_t step_data_length;
4136 	uint8_t step_data[];
4137 } __packed;
4138 
4139 struct bt_hci_evt_le_cs_subevent_result {
4140 	uint16_t conn_handle;
4141 	uint8_t  config_id;
4142 	uint16_t start_acl_conn_event_counter;
4143 	uint16_t procedure_counter;
4144 	uint16_t frequency_compensation;
4145 	uint8_t  reference_power_level;
4146 	uint8_t  procedure_done_status;
4147 	uint8_t  subevent_done_status;
4148 #ifdef CONFIG_LITTLE_ENDIAN
4149 	uint8_t  procedure_abort_reason: 4;
4150 	uint8_t  subevent_abort_reason: 4;
4151 #else
4152 	uint8_t  subevent_abort_reason: 4;
4153 	uint8_t  procedure_abort_reason: 4;
4154 #endif /* CONFIG_LITTLE_ENDIAN */
4155 	uint8_t  num_antenna_paths;
4156 	uint8_t  num_steps_reported;
4157 	uint8_t  steps[];
4158 } __packed;
4159 
4160 #define BT_HCI_EVT_LE_CS_SUBEVENT_RESULT_CONTINUE 0x32
4161 
4162 struct bt_hci_evt_le_cs_subevent_result_continue {
4163 	uint16_t conn_handle;
4164 	uint8_t  config_id;
4165 	uint8_t  procedure_done_status;
4166 	uint8_t  subevent_done_status;
4167 #ifdef CONFIG_LITTLE_ENDIAN
4168 	uint8_t  procedure_abort_reason: 4;
4169 	uint8_t  subevent_abort_reason: 4;
4170 #else
4171 	uint8_t  subevent_abort_reason: 4;
4172 	uint8_t  procedure_abort_reason: 4;
4173 #endif /* CONFIG_LITTLE_ENDIAN */
4174 	uint8_t  num_antenna_paths;
4175 	uint8_t  num_steps_reported;
4176 	uint8_t  steps[];
4177 } __packed;
4178 
4179 #define BT_HCI_EVT_LE_CS_TEST_END_COMPLETE 0x33
4180 struct bt_hci_evt_le_cs_test_end_complete {
4181 	uint8_t status;
4182 } __packed;
4183 
4184 #define BT_HCI_EVT_LE_CS_PROCEDURE_ENABLE_COMPLETE 0x30
4185 struct bt_hci_evt_le_cs_procedure_enable_complete {
4186 	uint8_t  status;
4187 	uint16_t handle;
4188 	uint8_t  config_id;
4189 	uint8_t  state;
4190 	uint8_t  tone_antenna_config_selection;
4191 	uint8_t  selected_tx_power;
4192 	uint8_t  subevent_len[3];
4193 	uint8_t  subevents_per_event;
4194 	uint16_t subevent_interval;
4195 	uint16_t event_interval;
4196 	uint16_t procedure_interval;
4197 	uint16_t procedure_count;
4198 	uint16_t max_procedure_len;
4199 } __packed;
4200 
4201 #define BT_HCI_EVT_LE_FRAME_SPACE_UPDATE_COMPLETE 0x35
4202 struct bt_hci_evt_le_frame_space_update_complete {
4203 	uint8_t  status;
4204 	uint16_t handle;
4205 	uint8_t  initiator;
4206 	uint16_t frame_space;
4207 	uint8_t  phys;
4208 	uint16_t spacing_types;
4209 } __packed;
4210 
4211 #define BT_HCI_EVT_LE_CONN_RATE_CHANGE 0x37
4212 struct bt_hci_evt_le_conn_rate_change {
4213 	uint8_t  status;
4214 	uint16_t handle;
4215 	uint16_t conn_interval;
4216 	uint16_t subrate_factor;
4217 	uint16_t peripheral_latency;
4218 	uint16_t continuation_number;
4219 	uint16_t supervision_timeout;
4220 } __packed;
4221 
4222 /* Event mask bits */
4223 
4224 #define BT_EVT_BIT(n) (1ULL << (n))
4225 
4226 #define BT_EVT_MASK_INQUIRY_COMPLETE             BT_EVT_BIT(0)
4227 #define BT_EVT_MASK_CONN_COMPLETE                BT_EVT_BIT(2)
4228 #define BT_EVT_MASK_CONN_REQUEST                 BT_EVT_BIT(3)
4229 #define BT_EVT_MASK_DISCONN_COMPLETE             BT_EVT_BIT(4)
4230 #define BT_EVT_MASK_AUTH_COMPLETE                BT_EVT_BIT(5)
4231 #define BT_EVT_MASK_REMOTE_NAME_REQ_COMPLETE     BT_EVT_BIT(6)
4232 #define BT_EVT_MASK_ENCRYPT_CHANGE               BT_EVT_BIT(7)
4233 #define BT_EVT_MASK_REMOTE_FEATURES              BT_EVT_BIT(10)
4234 #define BT_EVT_MASK_REMOTE_VERSION_INFO          BT_EVT_BIT(11)
4235 #define BT_EVT_MASK_HARDWARE_ERROR               BT_EVT_BIT(15)
4236 #define BT_EVT_MASK_ROLE_CHANGE                  BT_EVT_BIT(17)
4237 #define BT_EVT_MASK_PIN_CODE_REQ                 BT_EVT_BIT(21)
4238 #define BT_EVT_MASK_LINK_KEY_REQ                 BT_EVT_BIT(22)
4239 #define BT_EVT_MASK_LINK_KEY_NOTIFY              BT_EVT_BIT(23)
4240 #define BT_EVT_MASK_DATA_BUFFER_OVERFLOW         BT_EVT_BIT(25)
4241 #define BT_EVT_MASK_INQUIRY_RESULT_WITH_RSSI     BT_EVT_BIT(33)
4242 #define BT_EVT_MASK_REMOTE_EXT_FEATURES          BT_EVT_BIT(34)
4243 #define BT_EVT_MASK_SYNC_CONN_COMPLETE           BT_EVT_BIT(43)
4244 #define BT_EVT_MASK_EXTENDED_INQUIRY_RESULT      BT_EVT_BIT(46)
4245 #define BT_EVT_MASK_ENCRYPT_KEY_REFRESH_COMPLETE BT_EVT_BIT(47)
4246 #define BT_EVT_MASK_IO_CAPA_REQ                  BT_EVT_BIT(48)
4247 #define BT_EVT_MASK_IO_CAPA_RESP                 BT_EVT_BIT(49)
4248 #define BT_EVT_MASK_USER_CONFIRM_REQ             BT_EVT_BIT(50)
4249 #define BT_EVT_MASK_USER_PASSKEY_REQ             BT_EVT_BIT(51)
4250 #define BT_EVT_MASK_SSP_COMPLETE                 BT_EVT_BIT(53)
4251 #define BT_EVT_MASK_USER_PASSKEY_NOTIFY          BT_EVT_BIT(58)
4252 #define BT_EVT_MASK_LE_META_EVENT                BT_EVT_BIT(61)
4253 
4254 /* Page 2 */
4255 #define BT_EVT_MASK_NUM_COMPLETE_DATA_BLOCKS     BT_EVT_BIT(8)
4256 #define BT_EVT_MASK_TRIGG_CLOCK_CAPTURE          BT_EVT_BIT(14)
4257 #define BT_EVT_MASK_SYNCH_TRAIN_COMPLETE         BT_EVT_BIT(15)
4258 #define BT_EVT_MASK_SYNCH_TRAIN_RX               BT_EVT_BIT(16)
4259 #define BT_EVT_MASK_CL_PER_BC_RX                 BT_EVT_BIT(17)
4260 #define BT_EVT_MASK_CL_PER_BC_TIMEOUT            BT_EVT_BIT(18)
4261 #define BT_EVT_MASK_TRUNC_PAGE_COMPLETE          BT_EVT_BIT(19)
4262 #define BT_EVT_MASK_PER_PAGE_RSP_TIMEOUT         BT_EVT_BIT(20)
4263 #define BT_EVT_MASK_CL_PER_BC_CH_MAP_CHANGE      BT_EVT_BIT(21)
4264 #define BT_EVT_MASK_INQUIRY_RSP_NOT              BT_EVT_BIT(22)
4265 #define BT_EVT_MASK_AUTH_PAYLOAD_TIMEOUT_EXP     BT_EVT_BIT(23)
4266 #define BT_EVT_MASK_SAM_STATUS_CHANGE            BT_EVT_BIT(24)
4267 
4268 #define BT_EVT_MASK_LE_CONN_COMPLETE             BT_EVT_BIT(0)
4269 #define BT_EVT_MASK_LE_ADVERTISING_REPORT        BT_EVT_BIT(1)
4270 #define BT_EVT_MASK_LE_CONN_UPDATE_COMPLETE      BT_EVT_BIT(2)
4271 #define BT_EVT_MASK_LE_REMOTE_FEAT_COMPLETE      BT_EVT_BIT(3)
4272 #define BT_EVT_MASK_LE_LTK_REQUEST               BT_EVT_BIT(4)
4273 #define BT_EVT_MASK_LE_CONN_PARAM_REQ            BT_EVT_BIT(5)
4274 #define BT_EVT_MASK_LE_DATA_LEN_CHANGE           BT_EVT_BIT(6)
4275 #define BT_EVT_MASK_LE_P256_PUBLIC_KEY_COMPLETE  BT_EVT_BIT(7)
4276 #define BT_EVT_MASK_LE_GENERATE_DHKEY_COMPLETE   BT_EVT_BIT(8)
4277 #define BT_EVT_MASK_LE_ENH_CONN_COMPLETE         BT_EVT_BIT(9)
4278 #define BT_EVT_MASK_LE_DIRECT_ADV_REPORT         BT_EVT_BIT(10)
4279 #define BT_EVT_MASK_LE_PHY_UPDATE_COMPLETE       BT_EVT_BIT(11)
4280 #define BT_EVT_MASK_LE_EXT_ADVERTISING_REPORT    BT_EVT_BIT(12)
4281 #define BT_EVT_MASK_LE_PER_ADV_SYNC_ESTABLISHED  BT_EVT_BIT(13)
4282 #define BT_EVT_MASK_LE_PER_ADVERTISING_REPORT    BT_EVT_BIT(14)
4283 #define BT_EVT_MASK_LE_PER_ADV_SYNC_LOST         BT_EVT_BIT(15)
4284 #define BT_EVT_MASK_LE_SCAN_TIMEOUT              BT_EVT_BIT(16)
4285 #define BT_EVT_MASK_LE_ADV_SET_TERMINATED        BT_EVT_BIT(17)
4286 #define BT_EVT_MASK_LE_SCAN_REQ_RECEIVED         BT_EVT_BIT(18)
4287 #define BT_EVT_MASK_LE_CHAN_SEL_ALGO             BT_EVT_BIT(19)
4288 #define BT_EVT_MASK_LE_CONNECTIONLESS_IQ_REPORT  BT_EVT_BIT(20)
4289 #define BT_EVT_MASK_LE_CONNECTION_IQ_REPORT      BT_EVT_BIT(21)
4290 #define BT_EVT_MASK_LE_CTE_REQUEST_FAILED        BT_EVT_BIT(22)
4291 #define BT_EVT_MASK_LE_PAST_RECEIVED             BT_EVT_BIT(23)
4292 #define BT_EVT_MASK_LE_CIS_ESTABLISHED           BT_EVT_BIT(24)
4293 #define BT_EVT_MASK_LE_CIS_REQ                   BT_EVT_BIT(25)
4294 #define BT_EVT_MASK_LE_BIG_COMPLETE              BT_EVT_BIT(26)
4295 #define BT_EVT_MASK_LE_BIG_TERMINATED            BT_EVT_BIT(27)
4296 #define BT_EVT_MASK_LE_BIG_SYNC_ESTABLISHED      BT_EVT_BIT(28)
4297 #define BT_EVT_MASK_LE_BIG_SYNC_LOST             BT_EVT_BIT(29)
4298 #define BT_EVT_MASK_LE_REQ_PEER_SCA_COMPLETE     BT_EVT_BIT(30)
4299 #define BT_EVT_MASK_LE_PATH_LOSS_THRESHOLD       BT_EVT_BIT(31)
4300 #define BT_EVT_MASK_LE_TRANSMIT_POWER_REPORTING  BT_EVT_BIT(32)
4301 #define BT_EVT_MASK_LE_BIGINFO_ADV_REPORT        BT_EVT_BIT(33)
4302 #define BT_EVT_MASK_LE_SUBRATE_CHANGE            BT_EVT_BIT(34)
4303 
4304 #define BT_EVT_MASK_LE_PER_ADV_SYNC_ESTABLISHED_V2 BT_EVT_BIT(35)
4305 #define BT_EVT_MASK_LE_PER_ADVERTISING_REPORT_V2   BT_EVT_BIT(36)
4306 #define BT_EVT_MASK_LE_PAST_RECEIVED_V2            BT_EVT_BIT(37)
4307 #define BT_EVT_MASK_LE_PER_ADV_SUBEVENT_DATA_REQ   BT_EVT_BIT(38)
4308 #define BT_EVT_MASK_LE_PER_ADV_RESPONSE_REPORT     BT_EVT_BIT(39)
4309 #define BT_EVT_MASK_LE_ENH_CONN_COMPLETE_V2        BT_EVT_BIT(40)
4310 #define BT_EVT_MASK_LE_CIS_ESTABLISHED_V2          BT_EVT_BIT(41)
4311 
4312 #define BT_EVT_MASK_LE_READ_ALL_REMOTE_FEAT_COMPLETE BT_EVT_BIT(42)
4313 
4314 #define BT_EVT_MASK_LE_CS_READ_REMOTE_SUPPORTED_CAPABILITIES_COMPLETE BT_EVT_BIT(43)
4315 #define BT_EVT_MASK_LE_CS_READ_REMOTE_FAE_TABLE_COMPLETE              BT_EVT_BIT(44)
4316 #define BT_EVT_MASK_LE_CS_SECURITY_ENABLE_COMPLETE                    BT_EVT_BIT(45)
4317 #define BT_EVT_MASK_LE_CS_CONFIG_COMPLETE                             BT_EVT_BIT(46)
4318 #define BT_EVT_MASK_LE_CS_PROCEDURE_ENABLE_COMPLETE                   BT_EVT_BIT(47)
4319 #define BT_EVT_MASK_LE_CS_SUBEVENT_RESULT                             BT_EVT_BIT(48)
4320 #define BT_EVT_MASK_LE_CS_SUBEVENT_RESULT_CONTINUE                    BT_EVT_BIT(49)
4321 #define BT_EVT_MASK_LE_CS_TEST_END_COMPLETE                           BT_EVT_BIT(50)
4322 
4323 #define BT_EVT_MASK_LE_FRAME_SPACE_UPDATE_COMPLETE BT_EVT_BIT(52)
4324 #define BT_EVT_MASK_LE_CONN_RATE_CHANGE            BT_EVT_BIT(54)
4325 
4326 /** HCI Error Codes, BT Core Spec v5.4 [Vol 1, Part F]. */
4327 #define BT_HCI_ERR_SUCCESS                      0x00
4328 #define BT_HCI_ERR_UNKNOWN_CMD                  0x01
4329 #define BT_HCI_ERR_UNKNOWN_CONN_ID              0x02
4330 #define BT_HCI_ERR_HW_FAILURE                   0x03
4331 #define BT_HCI_ERR_PAGE_TIMEOUT                 0x04
4332 #define BT_HCI_ERR_AUTH_FAIL                    0x05
4333 #define BT_HCI_ERR_PIN_OR_KEY_MISSING           0x06
4334 #define BT_HCI_ERR_MEM_CAPACITY_EXCEEDED        0x07
4335 #define BT_HCI_ERR_CONN_TIMEOUT                 0x08
4336 #define BT_HCI_ERR_CONN_LIMIT_EXCEEDED          0x09
4337 #define BT_HCI_ERR_SYNC_CONN_LIMIT_EXCEEDED     0x0a
4338 #define BT_HCI_ERR_CONN_ALREADY_EXISTS          0x0b
4339 #define BT_HCI_ERR_CMD_DISALLOWED               0x0c
4340 #define BT_HCI_ERR_INSUFFICIENT_RESOURCES       0x0d
4341 #define BT_HCI_ERR_INSUFFICIENT_SECURITY        0x0e
4342 #define BT_HCI_ERR_BD_ADDR_UNACCEPTABLE         0x0f
4343 #define BT_HCI_ERR_CONN_ACCEPT_TIMEOUT          0x10
4344 #define BT_HCI_ERR_UNSUPP_FEATURE_PARAM_VAL     0x11
4345 #define BT_HCI_ERR_INVALID_PARAM                0x12
4346 #define BT_HCI_ERR_REMOTE_USER_TERM_CONN        0x13
4347 #define BT_HCI_ERR_REMOTE_LOW_RESOURCES         0x14
4348 #define BT_HCI_ERR_REMOTE_POWER_OFF             0x15
4349 #define BT_HCI_ERR_LOCALHOST_TERM_CONN          0x16
4350 #define BT_HCI_ERR_REPEATED_ATTEMPTS            0x17
4351 #define BT_HCI_ERR_PAIRING_NOT_ALLOWED          0x18
4352 #define BT_HCI_ERR_UNKNOWN_LMP_PDU              0x19
4353 #define BT_HCI_ERR_UNSUPP_REMOTE_FEATURE        0x1a
4354 #define BT_HCI_ERR_SCO_OFFSET_REJECTED          0x1b
4355 #define BT_HCI_ERR_SCO_INTERVAL_REJECTED        0x1c
4356 #define BT_HCI_ERR_SCO_AIR_MODE_REJECTED        0x1d
4357 #define BT_HCI_ERR_INVALID_LL_PARAM             0x1e
4358 #define BT_HCI_ERR_UNSPECIFIED                  0x1f
4359 #define BT_HCI_ERR_UNSUPP_LL_PARAM_VAL          0x20
4360 #define BT_HCI_ERR_ROLE_CHANGE_NOT_ALLOWED      0x21
4361 #define BT_HCI_ERR_LL_RESP_TIMEOUT              0x22
4362 #define BT_HCI_ERR_LL_PROC_COLLISION            0x23
4363 #define BT_HCI_ERR_LMP_PDU_NOT_ALLOWED          0x24
4364 #define BT_HCI_ERR_ENC_MODE_NOT_ACCEPTABLE      0x25
4365 #define BT_HCI_ERR_LINK_KEY_CANNOT_BE_CHANGED   0x26
4366 #define BT_HCI_ERR_REQUESTED_QOS_NOT_SUPPORTED  0x27
4367 #define BT_HCI_ERR_INSTANT_PASSED               0x28
4368 #define BT_HCI_ERR_PAIRING_NOT_SUPPORTED        0x29
4369 #define BT_HCI_ERR_DIFF_TRANS_COLLISION         0x2a
4370 #define BT_HCI_ERR_QOS_UNACCEPTABLE_PARAM       0x2c
4371 #define BT_HCI_ERR_QOS_REJECTED                 0x2d
4372 #define BT_HCI_ERR_CHAN_ASSESS_NOT_SUPPORTED    0x2e
4373 #define BT_HCI_ERR_INSUFF_SECURITY              0x2f
4374 #define BT_HCI_ERR_PARAM_OUT_OF_MANDATORY_RANGE 0x30
4375 #define BT_HCI_ERR_ROLE_SWITCH_PENDING          0x32
4376 #define BT_HCI_ERR_RESERVED_SLOT_VIOLATION      0x34
4377 #define BT_HCI_ERR_ROLE_SWITCH_FAILED           0x35
4378 #define BT_HCI_ERR_EXT_INQ_RESP_TOO_LARGE       0x36
4379 #define BT_HCI_ERR_SIMPLE_PAIR_NOT_SUPP_BY_HOST 0x37
4380 #define BT_HCI_ERR_HOST_BUSY_PAIRING            0x38
4381 #define BT_HCI_ERR_CONN_REJECTED_DUE_TO_NO_CHAN 0x39
4382 #define BT_HCI_ERR_CONTROLLER_BUSY              0x3a
4383 #define BT_HCI_ERR_UNACCEPT_CONN_PARAM          0x3b
4384 #define BT_HCI_ERR_ADV_TIMEOUT                  0x3c
4385 #define BT_HCI_ERR_TERM_DUE_TO_MIC_FAIL         0x3d
4386 #define BT_HCI_ERR_CONN_FAIL_TO_ESTAB           0x3e
4387 #define BT_HCI_ERR_MAC_CONN_FAILED              0x3f
4388 #define BT_HCI_ERR_CLOCK_ADJUST_REJECTED        0x40
4389 #define BT_HCI_ERR_SUBMAP_NOT_DEFINED           0x41
4390 #define BT_HCI_ERR_UNKNOWN_ADV_IDENTIFIER       0x42
4391 #define BT_HCI_ERR_LIMIT_REACHED                0x43
4392 #define BT_HCI_ERR_OP_CANCELLED_BY_HOST         0x44
4393 #define BT_HCI_ERR_PACKET_TOO_LONG              0x45
4394 #define BT_HCI_ERR_TOO_LATE                     0x46
4395 #define BT_HCI_ERR_TOO_EARLY                    0x47
4396 
4397 #ifdef __cplusplus
4398 }
4399 #endif
4400 
4401 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_HCI_TYPES_H_ */
4402