/*
 * BT-AMP (BlueTooth Alternate Mac and Phy) HCI (Host/Controller Interface)
 *
 * Copyright (C) 1999-2016, Broadcom Corporation
 * 
 *      Unless you and Broadcom execute a separate written software license
 * agreement governing use of this software, this software is licensed to you
 * under the terms of the GNU General Public License version 2 (the "GPL"),
 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
 * following added to such license:
 * 
 *      As a special exception, the copyright holders of this software give you
 * permission to link this software with independent modules, and to copy and
 * distribute the resulting executable under terms of your choice, provided that
 * you also meet, for each linked independent module, the terms and conditions of
 * the license of that module.  An independent module is a module which is not
 * derived from this software.  The special exception does not apply to any
 * modifications of the software.
 * 
 *      Notwithstanding the above, under no circumstances may you combine this
 * software in any way with any other Broadcom software provided under a license
 * other than the GPL, without Broadcom's express prior written consent.
 *
 *
 * <<Broadcom-WL-IPTag/Open:>>
 *
 * $Id: bt_amp_hci.h 518342 2014-12-01 23:21:41Z $
*/

#ifndef _bt_amp_hci_h
#define _bt_amp_hci_h

/* This marks the start of a packed structure section. */
#include <packed_section_start.h>


/* AMP HCI CMD packet format */
typedef BWL_PRE_PACKED_STRUCT struct amp_hci_cmd {
	uint16 opcode;
	uint8 plen;
	uint8 parms[1];
} BWL_POST_PACKED_STRUCT amp_hci_cmd_t;

#define HCI_CMD_PREAMBLE_SIZE		OFFSETOF(amp_hci_cmd_t, parms)
#define HCI_CMD_DATA_SIZE		255

/* AMP HCI CMD opcode layout */
#define HCI_CMD_OPCODE(ogf, ocf)	((((ogf) & 0x3F) << 10) | ((ocf) & 0x03FF))
#define HCI_CMD_OGF(opcode)		((uint8)(((opcode) >> 10) & 0x3F))
#define HCI_CMD_OCF(opcode)		((opcode) & 0x03FF)

/* AMP HCI command opcodes */
#define HCI_Read_Failed_Contact_Counter		HCI_CMD_OPCODE(0x05, 0x0001)
#define HCI_Reset_Failed_Contact_Counter	HCI_CMD_OPCODE(0x05, 0x0002)
#define HCI_Read_Link_Quality			HCI_CMD_OPCODE(0x05, 0x0003)
#define HCI_Read_Local_AMP_Info			HCI_CMD_OPCODE(0x05, 0x0009)
#define HCI_Read_Local_AMP_ASSOC		HCI_CMD_OPCODE(0x05, 0x000A)
#define HCI_Write_Remote_AMP_ASSOC		HCI_CMD_OPCODE(0x05, 0x000B)
#define HCI_Create_Physical_Link		HCI_CMD_OPCODE(0x01, 0x0035)
#define HCI_Accept_Physical_Link_Request	HCI_CMD_OPCODE(0x01, 0x0036)
#define HCI_Disconnect_Physical_Link		HCI_CMD_OPCODE(0x01, 0x0037)
#define HCI_Create_Logical_Link			HCI_CMD_OPCODE(0x01, 0x0038)
#define HCI_Accept_Logical_Link			HCI_CMD_OPCODE(0x01, 0x0039)
#define HCI_Disconnect_Logical_Link		HCI_CMD_OPCODE(0x01, 0x003A)
#define HCI_Logical_Link_Cancel			HCI_CMD_OPCODE(0x01, 0x003B)
#define HCI_Flow_Spec_Modify			HCI_CMD_OPCODE(0x01, 0x003C)
#define HCI_Write_Flow_Control_Mode		HCI_CMD_OPCODE(0x01, 0x0067)
#define HCI_Read_Best_Effort_Flush_Timeout	HCI_CMD_OPCODE(0x01, 0x0069)
#define HCI_Write_Best_Effort_Flush_Timeout	HCI_CMD_OPCODE(0x01, 0x006A)
#define HCI_Short_Range_Mode			HCI_CMD_OPCODE(0x01, 0x006B)
#define HCI_Reset				HCI_CMD_OPCODE(0x03, 0x0003)
#define HCI_Read_Connection_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0015)
#define HCI_Write_Connection_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0016)
#define HCI_Read_Link_Supervision_Timeout	HCI_CMD_OPCODE(0x03, 0x0036)
#define HCI_Write_Link_Supervision_Timeout	HCI_CMD_OPCODE(0x03, 0x0037)
#define HCI_Enhanced_Flush			HCI_CMD_OPCODE(0x03, 0x005F)
#define HCI_Read_Logical_Link_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0061)
#define HCI_Write_Logical_Link_Accept_Timeout	HCI_CMD_OPCODE(0x03, 0x0062)
#define HCI_Set_Event_Mask_Page_2		HCI_CMD_OPCODE(0x03, 0x0063)
#define HCI_Read_Location_Data_Command		HCI_CMD_OPCODE(0x03, 0x0064)
#define HCI_Write_Location_Data_Command		HCI_CMD_OPCODE(0x03, 0x0065)
#define HCI_Read_Local_Version_Info		HCI_CMD_OPCODE(0x04, 0x0001)
#define HCI_Read_Local_Supported_Commands	HCI_CMD_OPCODE(0x04, 0x0002)
#define HCI_Read_Buffer_Size			HCI_CMD_OPCODE(0x04, 0x0005)
#define HCI_Read_Data_Block_Size		HCI_CMD_OPCODE(0x04, 0x000A)

/* AMP HCI command parameters */
typedef BWL_PRE_PACKED_STRUCT struct read_local_cmd_parms {
	uint8 plh;
	uint8 offset[2];			/* length so far */
	uint8 max_remote[2];
} BWL_POST_PACKED_STRUCT read_local_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct write_remote_cmd_parms {
	uint8 plh;
	uint8 offset[2];
	uint8 len[2];
	uint8 frag[1];
} BWL_POST_PACKED_STRUCT write_remote_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct phy_link_cmd_parms {
	uint8 plh;
	uint8 key_length;
	uint8 key_type;
	uint8 key[1];
} BWL_POST_PACKED_STRUCT phy_link_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct dis_phy_link_cmd_parms {
	uint8 plh;
	uint8 reason;
} BWL_POST_PACKED_STRUCT dis_phy_link_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct log_link_cmd_parms {
	uint8 plh;
	uint8 txflow[16];
	uint8 rxflow[16];
} BWL_POST_PACKED_STRUCT log_link_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct ext_flow_spec {
	uint8 id;
	uint8 service_type;
	uint8 max_sdu[2];
	uint8 sdu_ia_time[4];
	uint8 access_latency[4];
	uint8 flush_timeout[4];
} BWL_POST_PACKED_STRUCT ext_flow_spec_t;

typedef BWL_PRE_PACKED_STRUCT struct log_link_cancel_cmd_parms {
	uint8 plh;
	uint8 tx_fs_ID;
} BWL_POST_PACKED_STRUCT log_link_cancel_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct flow_spec_mod_cmd_parms {
	uint8 llh[2];
	uint8 txflow[16];
	uint8 rxflow[16];
} BWL_POST_PACKED_STRUCT flow_spec_mod_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct plh_pad {
	uint8 plh;
	uint8 pad;
} BWL_POST_PACKED_STRUCT plh_pad_t;

typedef BWL_PRE_PACKED_STRUCT union hci_handle {
	uint16 bredr;
	plh_pad_t amp;
} BWL_POST_PACKED_STRUCT hci_handle_t;

typedef BWL_PRE_PACKED_STRUCT struct ls_to_cmd_parms {
	hci_handle_t handle;
	uint8 timeout[2];
} BWL_POST_PACKED_STRUCT ls_to_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct befto_cmd_parms {
	uint8 llh[2];
	uint8 befto[4];
} BWL_POST_PACKED_STRUCT befto_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct srm_cmd_parms {
	uint8 plh;
	uint8 srm;
} BWL_POST_PACKED_STRUCT srm_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct ld_cmd_parms {
	uint8 ld_aware;
	uint8 ld[2];
	uint8 ld_opts;
	uint8 l_opts;
} BWL_POST_PACKED_STRUCT ld_cmd_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct eflush_cmd_parms {
	uint8 llh[2];
	uint8 packet_type;
} BWL_POST_PACKED_STRUCT eflush_cmd_parms_t;

/* Generic AMP extended flow spec service types */
#define EFS_SVCTYPE_NO_TRAFFIC		0
#define EFS_SVCTYPE_BEST_EFFORT		1
#define EFS_SVCTYPE_GUARANTEED		2

/* AMP HCI event packet format */
typedef BWL_PRE_PACKED_STRUCT struct amp_hci_event {
	uint8 ecode;
	uint8 plen;
	uint8 parms[1];
} BWL_POST_PACKED_STRUCT amp_hci_event_t;

#define HCI_EVT_PREAMBLE_SIZE			OFFSETOF(amp_hci_event_t, parms)

/* AMP HCI event codes */
#define HCI_Command_Complete			0x0E
#define HCI_Command_Status			0x0F
#define HCI_Flush_Occurred			0x11
#define HCI_Enhanced_Flush_Complete		0x39
#define HCI_Physical_Link_Complete		0x40
#define HCI_Channel_Select			0x41
#define HCI_Disconnect_Physical_Link_Complete	0x42
#define HCI_Logical_Link_Complete		0x45
#define HCI_Disconnect_Logical_Link_Complete	0x46
#define HCI_Flow_Spec_Modify_Complete		0x47
#define HCI_Number_of_Completed_Data_Blocks	0x48
#define HCI_Short_Range_Mode_Change_Complete	0x4C
#define HCI_Status_Change_Event			0x4D
#define HCI_Vendor_Specific			0xFF

/* AMP HCI event mask bit positions */
#define HCI_Physical_Link_Complete_Event_Mask			0x0001
#define HCI_Channel_Select_Event_Mask				0x0002
#define HCI_Disconnect_Physical_Link_Complete_Event_Mask	0x0004
#define HCI_Logical_Link_Complete_Event_Mask			0x0020
#define HCI_Disconnect_Logical_Link_Complete_Event_Mask		0x0040
#define HCI_Flow_Spec_Modify_Complete_Event_Mask		0x0080
#define HCI_Number_of_Completed_Data_Blocks_Event_Mask		0x0100
#define HCI_Short_Range_Mode_Change_Complete_Event_Mask		0x1000
#define HCI_Status_Change_Event_Mask				0x2000
#define HCI_All_Event_Mask					0x31e7
/* AMP HCI event parameters */
typedef BWL_PRE_PACKED_STRUCT struct cmd_status_parms {
	uint8 status;
	uint8 cmdpkts;
	uint16 opcode;
} BWL_POST_PACKED_STRUCT cmd_status_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct cmd_complete_parms {
	uint8 cmdpkts;
	uint16 opcode;
	uint8 parms[1];
} BWL_POST_PACKED_STRUCT cmd_complete_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct flush_occurred_evt_parms {
	uint16 handle;
} BWL_POST_PACKED_STRUCT flush_occurred_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct write_remote_evt_parms {
	uint8 status;
	uint8 plh;
} BWL_POST_PACKED_STRUCT write_remote_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct read_local_evt_parms {
	uint8 status;
	uint8 plh;
	uint16 len;
	uint8 frag[1];
} BWL_POST_PACKED_STRUCT read_local_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct read_local_info_evt_parms {
	uint8 status;
	uint8 AMP_status;
	uint32 bandwidth;
	uint32 gbandwidth;
	uint32 latency;
	uint32 PDU_size;
	uint8 ctrl_type;
	uint16 PAL_cap;
	uint16 AMP_ASSOC_len;
	uint32 max_flush_timeout;
	uint32 be_flush_timeout;
} BWL_POST_PACKED_STRUCT read_local_info_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct log_link_evt_parms {
	uint8 status;
	uint16 llh;
	uint8 plh;
	uint8 tx_fs_ID;
} BWL_POST_PACKED_STRUCT log_link_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct disc_log_link_evt_parms {
	uint8 status;
	uint16 llh;
	uint8 reason;
} BWL_POST_PACKED_STRUCT disc_log_link_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct log_link_cancel_evt_parms {
	uint8 status;
	uint8 plh;
	uint8 tx_fs_ID;
} BWL_POST_PACKED_STRUCT log_link_cancel_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct flow_spec_mod_evt_parms {
	uint8 status;
	uint16 llh;
} BWL_POST_PACKED_STRUCT flow_spec_mod_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct phy_link_evt_parms {
	uint8 status;
	uint8 plh;
} BWL_POST_PACKED_STRUCT phy_link_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct dis_phy_link_evt_parms {
	uint8 status;
	uint8 plh;
	uint8 reason;
} BWL_POST_PACKED_STRUCT dis_phy_link_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct read_ls_to_evt_parms {
	uint8 status;
	hci_handle_t handle;
	uint16 timeout;
} BWL_POST_PACKED_STRUCT read_ls_to_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct read_lla_ca_to_evt_parms {
	uint8 status;
	uint16 timeout;
} BWL_POST_PACKED_STRUCT read_lla_ca_to_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct read_data_block_size_evt_parms {
	uint8 status;
	uint16 ACL_pkt_len;
	uint16 data_block_len;
	uint16 data_block_num;
} BWL_POST_PACKED_STRUCT read_data_block_size_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct data_blocks {
	uint16 handle;
	uint16 pkts;
	uint16 blocks;
} BWL_POST_PACKED_STRUCT data_blocks_t;

typedef BWL_PRE_PACKED_STRUCT struct num_completed_data_blocks_evt_parms {
	uint16 num_blocks;
	uint8 num_handles;
	data_blocks_t completed[1];
} BWL_POST_PACKED_STRUCT num_completed_data_blocks_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct befto_evt_parms {
	uint8 status;
	uint32 befto;
} BWL_POST_PACKED_STRUCT befto_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct srm_evt_parms {
	uint8 status;
	uint8 plh;
	uint8 srm;
} BWL_POST_PACKED_STRUCT srm_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct contact_counter_evt_parms {
	uint8 status;
	uint8 llh[2];
	uint16 counter;
} BWL_POST_PACKED_STRUCT contact_counter_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct contact_counter_reset_evt_parms {
	uint8 status;
	uint8 llh[2];
} BWL_POST_PACKED_STRUCT contact_counter_reset_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct read_linkq_evt_parms {
	uint8 status;
	hci_handle_t handle;
	uint8 link_quality;
} BWL_POST_PACKED_STRUCT read_linkq_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct ld_evt_parms {
	uint8 status;
	uint8 ld_aware;
	uint8 ld[2];
	uint8 ld_opts;
	uint8 l_opts;
} BWL_POST_PACKED_STRUCT ld_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct eflush_complete_evt_parms {
	uint16 handle;
} BWL_POST_PACKED_STRUCT eflush_complete_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct vendor_specific_evt_parms {
	uint8 len;
	uint8 parms[1];
} BWL_POST_PACKED_STRUCT vendor_specific_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct local_version_info_evt_parms {
	uint8 status;
	uint8 hci_version;
	uint16 hci_revision;
	uint8 pal_version;
	uint16 mfg_name;
	uint16 pal_subversion;
} BWL_POST_PACKED_STRUCT local_version_info_evt_parms_t;

#define MAX_SUPPORTED_CMD_BYTE	64
typedef BWL_PRE_PACKED_STRUCT struct local_supported_cmd_evt_parms {
	uint8 status;
	uint8 cmd[MAX_SUPPORTED_CMD_BYTE];
} BWL_POST_PACKED_STRUCT local_supported_cmd_evt_parms_t;

typedef BWL_PRE_PACKED_STRUCT struct status_change_evt_parms {
	uint8 status;
	uint8 amp_status;
} BWL_POST_PACKED_STRUCT status_change_evt_parms_t;

/* AMP HCI error codes */
#define HCI_SUCCESS				0x00
#define HCI_ERR_ILLEGAL_COMMAND			0x01
#define HCI_ERR_NO_CONNECTION			0x02
#define HCI_ERR_MEMORY_FULL			0x07
#define HCI_ERR_CONNECTION_TIMEOUT		0x08
#define HCI_ERR_MAX_NUM_OF_CONNECTIONS		0x09
#define HCI_ERR_CONNECTION_EXISTS		0x0B
#define HCI_ERR_CONNECTION_DISALLOWED		0x0C
#define HCI_ERR_CONNECTION_ACCEPT_TIMEOUT	0x10
#define HCI_ERR_UNSUPPORTED_VALUE		0x11
#define HCI_ERR_ILLEGAL_PARAMETER_FMT		0x12
#define HCI_ERR_CONN_TERM_BY_LOCAL_HOST		0x16
#define HCI_ERR_UNSPECIFIED			0x1F
#define HCI_ERR_UNIT_KEY_USED			0x26
#define HCI_ERR_QOS_REJECTED			0x2D
#define HCI_ERR_PARAM_OUT_OF_RANGE		0x30
#define HCI_ERR_NO_SUITABLE_CHANNEL		0x39
#define HCI_ERR_CHANNEL_MOVE			0xFF

/* AMP HCI ACL Data packet format */
typedef BWL_PRE_PACKED_STRUCT struct amp_hci_ACL_data {
	uint16	handle;			/* 12-bit connection handle + 2-bit PB and 2-bit BC flags */
	uint16	dlen;			/* data total length */
	uint8 data[1];
} BWL_POST_PACKED_STRUCT amp_hci_ACL_data_t;

#define HCI_ACL_DATA_PREAMBLE_SIZE	OFFSETOF(amp_hci_ACL_data_t, data)

#define HCI_ACL_DATA_BC_FLAGS		(0x0 << 14)
#define HCI_ACL_DATA_PB_FLAGS		(0x3 << 12)

#define HCI_ACL_DATA_HANDLE(handle)	((handle) & 0x0fff)
#define HCI_ACL_DATA_FLAGS(handle)	((handle) >> 12)

/* AMP Activity Report packet formats */
typedef BWL_PRE_PACKED_STRUCT struct amp_hci_activity_report {
	uint8	ScheduleKnown;
	uint8	NumReports;
	uint8	data[1];
} BWL_POST_PACKED_STRUCT amp_hci_activity_report_t;

typedef BWL_PRE_PACKED_STRUCT struct amp_hci_activity_report_triple {
	uint32	StartTime;
	uint32	Duration;
	uint32	Periodicity;
} BWL_POST_PACKED_STRUCT amp_hci_activity_report_triple_t;

#define HCI_AR_SCHEDULE_KNOWN		0x01


/* This marks the end of a packed structure section. */
#include <packed_section_end.h>

#endif /* _bt_amp_hci_h_ */
