1b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/*
2b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt * BT-AMP (BlueTooth Alternate Mac and Phy) HCI (Host/Controller Interface)
3b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt *
438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Copyright (C) 1999-2013, Broadcom Corporation
538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
66dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * Permission to use, copy, modify, and/or distribute this software for any
76dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * purpose with or without fee is hereby granted, provided that the above
86dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * copyright notice and this permission notice appear in all copies.
96dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt *
106dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt *
1838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * $Id: bt_amp_hci.h 382882 2013-02-04 23:24:31Z $
19b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt*/
20b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
21b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifndef _bt_amp_hci_h
22b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _bt_amp_hci_h
23b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
24b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* This marks the start of a packed structure section. */
25b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#include <packed_section_start.h>
26b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
27b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
28b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI CMD packet format */
29b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct amp_hci_cmd {
30b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 opcode;
31b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plen;
32b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 parms[1];
33b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT amp_hci_cmd_t;
34b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
35b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_CMD_PREAMBLE_SIZE		OFFSETOF(amp_hci_cmd_t, parms)
36b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_CMD_DATA_SIZE		255
37b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
38b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI CMD opcode layout */
39b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_CMD_OPCODE(ogf, ocf)	((((ogf) & 0x3F) << 10) | ((ocf) & 0x03FF))
40b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_CMD_OGF(opcode)		((uint8)(((opcode) >> 10) & 0x3F))
41b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_CMD_OCF(opcode)		((opcode) & 0x03FF)
42b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
43b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI command opcodes */
44b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Failed_Contact_Counter		HCI_CMD_OPCODE(0x05, 0x0001)
45b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Reset_Failed_Contact_Counter	HCI_CMD_OPCODE(0x05, 0x0002)
46b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Link_Quality			HCI_CMD_OPCODE(0x05, 0x0003)
47b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Local_AMP_Info			HCI_CMD_OPCODE(0x05, 0x0009)
48b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Local_AMP_ASSOC		HCI_CMD_OPCODE(0x05, 0x000A)
49b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Write_Remote_AMP_ASSOC		HCI_CMD_OPCODE(0x05, 0x000B)
50b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Create_Physical_Link		HCI_CMD_OPCODE(0x01, 0x0035)
51b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Accept_Physical_Link_Request	HCI_CMD_OPCODE(0x01, 0x0036)
52b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Disconnect_Physical_Link		HCI_CMD_OPCODE(0x01, 0x0037)
53b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Create_Logical_Link			HCI_CMD_OPCODE(0x01, 0x0038)
54b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Accept_Logical_Link			HCI_CMD_OPCODE(0x01, 0x0039)
55b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Disconnect_Logical_Link		HCI_CMD_OPCODE(0x01, 0x003A)
56b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Logical_Link_Cancel			HCI_CMD_OPCODE(0x01, 0x003B)
57b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Flow_Spec_Modify			HCI_CMD_OPCODE(0x01, 0x003C)
58b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Write_Flow_Control_Mode		HCI_CMD_OPCODE(0x01, 0x0067)
59b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Best_Effort_Flush_Timeout	HCI_CMD_OPCODE(0x01, 0x0069)
60b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Write_Best_Effort_Flush_Timeout	HCI_CMD_OPCODE(0x01, 0x006A)
61b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Short_Range_Mode			HCI_CMD_OPCODE(0x01, 0x006B)
62b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Reset				HCI_CMD_OPCODE(0x03, 0x0003)
63b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Connection_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0015)
64b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Write_Connection_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0016)
65b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Link_Supervision_Timeout	HCI_CMD_OPCODE(0x03, 0x0036)
66b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Write_Link_Supervision_Timeout	HCI_CMD_OPCODE(0x03, 0x0037)
67b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Enhanced_Flush			HCI_CMD_OPCODE(0x03, 0x005F)
68b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Logical_Link_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0061)
69b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Write_Logical_Link_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0062)
70b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Set_Event_Mask_Page_2		HCI_CMD_OPCODE(0x03, 0x0063)
71b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Location_Data_Command		HCI_CMD_OPCODE(0x03, 0x0064)
72b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Write_Location_Data_Command		HCI_CMD_OPCODE(0x03, 0x0065)
73b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Local_Version_Info		HCI_CMD_OPCODE(0x04, 0x0001)
74b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Local_Supported_Commands	HCI_CMD_OPCODE(0x04, 0x0002)
75b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Buffer_Size			HCI_CMD_OPCODE(0x04, 0x0005)
76b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Read_Data_Block_Size		HCI_CMD_OPCODE(0x04, 0x000A)
77b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
78b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI command parameters */
79b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct read_local_cmd_parms {
80b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
81b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 offset[2];			/* length so far */
82b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 max_remote[2];
83b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT read_local_cmd_parms_t;
84b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
85b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct write_remote_cmd_parms {
86b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
87b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 offset[2];
88b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 len[2];
89b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 frag[1];
90b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT write_remote_cmd_parms_t;
91b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
92b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct phy_link_cmd_parms {
93b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
94b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 key_length;
95b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 key_type;
96b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 key[1];
97b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT phy_link_cmd_parms_t;
98b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
99b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct dis_phy_link_cmd_parms {
100b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
101b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 reason;
102b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT dis_phy_link_cmd_parms_t;
103b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
104b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct log_link_cmd_parms {
105b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
106b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 txflow[16];
107b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 rxflow[16];
108b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT log_link_cmd_parms_t;
109b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
110b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct ext_flow_spec {
111b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 id;
112b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 service_type;
113b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 max_sdu[2];
114b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 sdu_ia_time[4];
115b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 access_latency[4];
116b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 flush_timeout[4];
117b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT ext_flow_spec_t;
118b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
119b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct log_link_cancel_cmd_parms {
120b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
121b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 tx_fs_ID;
122b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT log_link_cancel_cmd_parms_t;
123b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
124b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct flow_spec_mod_cmd_parms {
125b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 llh[2];
126b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 txflow[16];
127b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 rxflow[16];
128b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT flow_spec_mod_cmd_parms_t;
129b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
130b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct plh_pad {
131b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
132b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 pad;
133b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT plh_pad_t;
134b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
135b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT union hci_handle {
136b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 bredr;
137b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	plh_pad_t amp;
138b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT hci_handle_t;
139b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
140b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct ls_to_cmd_parms {
141b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	hci_handle_t handle;
142b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 timeout[2];
143b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT ls_to_cmd_parms_t;
144b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
145b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct befto_cmd_parms {
146b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 llh[2];
147b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 befto[4];
148b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT befto_cmd_parms_t;
149b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
150b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct srm_cmd_parms {
151b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
152b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 srm;
153b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT srm_cmd_parms_t;
154b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
155b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct ld_cmd_parms {
156b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ld_aware;
157b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ld[2];
158b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ld_opts;
159b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 l_opts;
160b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT ld_cmd_parms_t;
161b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
162b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct eflush_cmd_parms {
163b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 llh[2];
164b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 packet_type;
165b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT eflush_cmd_parms_t;
166b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
167b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* Generic AMP extended flow spec service types */
168b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define EFS_SVCTYPE_NO_TRAFFIC		0
169b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define EFS_SVCTYPE_BEST_EFFORT		1
170b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define EFS_SVCTYPE_GUARANTEED		2
171b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
172b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI event packet format */
173b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct amp_hci_event {
174b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ecode;
175b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plen;
176b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 parms[1];
177b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT amp_hci_event_t;
178b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
179b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_EVT_PREAMBLE_SIZE			OFFSETOF(amp_hci_event_t, parms)
180b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
181b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI event codes */
182b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Command_Complete			0x0E
183b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Command_Status			0x0F
184b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Flush_Occurred			0x11
185b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Enhanced_Flush_Complete		0x39
186b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Physical_Link_Complete		0x40
187b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Channel_Select			0x41
188b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Disconnect_Physical_Link_Complete	0x42
189b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Logical_Link_Complete		0x45
190b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Disconnect_Logical_Link_Complete	0x46
191b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Flow_Spec_Modify_Complete		0x47
192b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Number_of_Completed_Data_Blocks	0x48
193b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Short_Range_Mode_Change_Complete	0x4C
194b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Status_Change_Event			0x4D
195b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Vendor_Specific			0xFF
196b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
197b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI event mask bit positions */
198b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Physical_Link_Complete_Event_Mask			0x0001
199b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Channel_Select_Event_Mask				0x0002
200b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Disconnect_Physical_Link_Complete_Event_Mask	0x0004
201b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Logical_Link_Complete_Event_Mask			0x0020
202b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Disconnect_Logical_Link_Complete_Event_Mask		0x0040
203b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Flow_Spec_Modify_Complete_Event_Mask		0x0080
204b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Number_of_Completed_Data_Blocks_Event_Mask		0x0100
205b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Short_Range_Mode_Change_Complete_Event_Mask		0x1000
206b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_Status_Change_Event_Mask				0x2000
207b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_All_Event_Mask					0x31e7
208b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI event parameters */
209b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct cmd_status_parms {
210b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
211b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 cmdpkts;
212b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 opcode;
213b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT cmd_status_parms_t;
214b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
215b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct cmd_complete_parms {
216b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 cmdpkts;
217b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 opcode;
218b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 parms[1];
219b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT cmd_complete_parms_t;
220b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
221b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct flush_occurred_evt_parms {
222b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 handle;
223b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT flush_occurred_evt_parms_t;
224b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
225b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct write_remote_evt_parms {
226b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
227b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
228b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT write_remote_evt_parms_t;
229b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
230b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct read_local_evt_parms {
231b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
232b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
233b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 len;
234b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 frag[1];
235b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT read_local_evt_parms_t;
236b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
237b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct read_local_info_evt_parms {
238b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
239b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 AMP_status;
240b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32 bandwidth;
241b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32 gbandwidth;
242b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32 latency;
243b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32 PDU_size;
244b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ctrl_type;
245b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 PAL_cap;
246b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 AMP_ASSOC_len;
247b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32 max_flush_timeout;
248b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32 be_flush_timeout;
249b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT read_local_info_evt_parms_t;
250b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
251b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct log_link_evt_parms {
252b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
253b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 llh;
254b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
255b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 tx_fs_ID;
256b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT log_link_evt_parms_t;
257b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
258b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct disc_log_link_evt_parms {
259b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
260b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 llh;
261b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 reason;
262b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT disc_log_link_evt_parms_t;
263b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
264b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct log_link_cancel_evt_parms {
265b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
266b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
267b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 tx_fs_ID;
268b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT log_link_cancel_evt_parms_t;
269b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
270b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct flow_spec_mod_evt_parms {
271b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
272b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 llh;
273b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT flow_spec_mod_evt_parms_t;
274b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
275b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct phy_link_evt_parms {
276b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
277b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
278b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT phy_link_evt_parms_t;
279b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
280b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct dis_phy_link_evt_parms {
281b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
282b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
283b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 reason;
284b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT dis_phy_link_evt_parms_t;
285b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
286b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct read_ls_to_evt_parms {
287b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
288b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	hci_handle_t handle;
289b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 timeout;
290b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT read_ls_to_evt_parms_t;
291b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
292b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct read_lla_ca_to_evt_parms {
293b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
294b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 timeout;
295b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT read_lla_ca_to_evt_parms_t;
296b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
297b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct read_data_block_size_evt_parms {
298b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
299b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 ACL_pkt_len;
300b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 data_block_len;
301b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 data_block_num;
302b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT read_data_block_size_evt_parms_t;
303b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
304b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct data_blocks {
305b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 handle;
306b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 pkts;
307b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 blocks;
308b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT data_blocks_t;
309b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
310b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct num_completed_data_blocks_evt_parms {
311b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 num_blocks;
312b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 num_handles;
313b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	data_blocks_t completed[1];
314b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT num_completed_data_blocks_evt_parms_t;
315b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
316b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct befto_evt_parms {
317b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
318b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32 befto;
319b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT befto_evt_parms_t;
320b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
321b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct srm_evt_parms {
322b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
323b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 plh;
324b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 srm;
325b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT srm_evt_parms_t;
326b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
327b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct contact_counter_evt_parms {
328b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
329b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 llh[2];
330b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 counter;
331b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT contact_counter_evt_parms_t;
332b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
333b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct contact_counter_reset_evt_parms {
334b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
335b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 llh[2];
336b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT contact_counter_reset_evt_parms_t;
337b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
338b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct read_linkq_evt_parms {
339b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
340b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	hci_handle_t handle;
341b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 link_quality;
342b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT read_linkq_evt_parms_t;
343b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
344b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct ld_evt_parms {
345b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
346b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ld_aware;
347b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ld[2];
348b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 ld_opts;
349b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 l_opts;
350b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT ld_evt_parms_t;
351b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
352b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct eflush_complete_evt_parms {
353b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 handle;
354b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT eflush_complete_evt_parms_t;
355b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
356b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct vendor_specific_evt_parms {
357b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 len;
358b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 parms[1];
359b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT vendor_specific_evt_parms_t;
360b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
361b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct local_version_info_evt_parms {
362b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
363b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 hci_version;
364b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 hci_revision;
365b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 pal_version;
366b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 mfg_name;
367b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16 pal_subversion;
368b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT local_version_info_evt_parms_t;
369b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
370b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define MAX_SUPPORTED_CMD_BYTE	64
371b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct local_supported_cmd_evt_parms {
372b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
373b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 cmd[MAX_SUPPORTED_CMD_BYTE];
374b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT local_supported_cmd_evt_parms_t;
375b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
376b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct status_change_evt_parms {
377b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 status;
378b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 amp_status;
379b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT status_change_evt_parms_t;
380b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
381b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI error codes */
382b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_SUCCESS				0x00
383b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_ILLEGAL_COMMAND			0x01
384b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_NO_CONNECTION			0x02
385b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_MEMORY_FULL			0x07
386b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_CONNECTION_TIMEOUT		0x08
387b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_MAX_NUM_OF_CONNECTIONS		0x09
388b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_CONNECTION_EXISTS		0x0B
389b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_CONNECTION_DISALLOWED		0x0C
390b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_CONNECTION_ACCEPT_TIMEOUT	0x10
391b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_UNSUPPORTED_VALUE		0x11
392b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_ILLEGAL_PARAMETER_FMT		0x12
393b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_CONN_TERM_BY_LOCAL_HOST		0x16
394b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_UNSPECIFIED			0x1F
395b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_UNIT_KEY_USED			0x26
396b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_QOS_REJECTED			0x2D
397b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_PARAM_OUT_OF_RANGE		0x30
398b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_NO_SUITABLE_CHANNEL		0x39
399b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ERR_CHANNEL_MOVE			0xFF
400b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
401b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP HCI ACL Data packet format */
402b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct amp_hci_ACL_data {
403b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16	handle;			/* 12-bit connection handle + 2-bit PB and 2-bit BC flags */
404b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint16	dlen;			/* data total length */
405b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 data[1];
406b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT amp_hci_ACL_data_t;
407b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
408b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ACL_DATA_PREAMBLE_SIZE	OFFSETOF(amp_hci_ACL_data_t, data)
409b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
410b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ACL_DATA_BC_FLAGS		(0x0 << 14)
411b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ACL_DATA_PB_FLAGS		(0x3 << 12)
412b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
413b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ACL_DATA_HANDLE(handle)	((handle) & 0x0fff)
414b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_ACL_DATA_FLAGS(handle)	((handle) >> 12)
415b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
416b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* AMP Activity Report packet formats */
417b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct amp_hci_activity_report {
418b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8	ScheduleKnown;
419b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8	NumReports;
420b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8	data[1];
421b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT amp_hci_activity_report_t;
422b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
423b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct amp_hci_activity_report_triple {
424b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32	StartTime;
425b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32	Duration;
426b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint32	Periodicity;
427b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT amp_hci_activity_report_triple_t;
428b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
429b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define HCI_AR_SCHEDULE_KNOWN		0x01
430b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
431b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
432b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* This marks the end of a packed structure section. */
433b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#include <packed_section_end.h>
434b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
435b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#endif /* _bt_amp_hci_h_ */
436