Fixed MTP to work with TWRP

This commit is contained in:
awab228 2018-06-19 23:16:04 +02:00
commit f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions

44
include/scsc/api/bhcs.h Normal file
View file

@ -0,0 +1,44 @@
/****************************************************************************
*
* Copyright (c) 2014 - 2016 Samsung Electronics Co., Ltd. All rights reserved
*
****************************************************************************/
/****************************************************************************
* FILE
* bhcs.h - Bluetooth Host Configuration Structure
*
* DESCRIPTION
* This file specifies the layout of the Bluetooth Host Configuration
* Structure. The structure is written by the host and passed to the
* firmware as an argument to the service start callback function in
* the form of an offset that must be converted to a local address.
*
* ASSUMPTIONS
* The host and the firmware has the same endiannes.
* The ABI on the host and the firmware results in the same memory
* layout of the defined structure.
*
*/
#ifndef BHCS_H__
#define BHCS_H__
/* The version of the BHCS structure. Must be written to the version field
* by the host and confirmed to match the define by the firmware. Increment
* the version when changing the layout of the structure. This also serves
* as a rudimentary endianess check. */
#define BHCS_VERSION 2
struct BHCS {
uint32_t version; /* BHCS_VERSION */
uint32_t bsmhcp_protocol_offset; /* BSMHCP_PROTOCOL structure offset */
uint32_t bsmhcp_protocol_length; /* BSMHCP_PROTOCOL structure length */
uint32_t configuration_offset; /* Binary configuration data offset */
uint32_t configuration_length; /* Binary configuration data length */
uint32_t bluetooth_address_lap; /* Lower Address Part 00..23 */
uint8_t bluetooth_address_uap; /* Upper Address Part 24..31 */
uint16_t bluetooth_address_nap; /* Non-significant 32..47 */
};
#endif /* BHCS_H__ */

366
include/scsc/api/bsmhcp.h Normal file
View file

@ -0,0 +1,366 @@
/****************************************************************************
*
* Copyright (c) 2014 - 2016 Samsung Electronics Co., Ltd. All rights reserved
*
****************************************************************************/
/****************************************************************************
* FILE
* bsmhcp.h - Bluetooth Shared Memory Host Controller Protocol
*
* DESCRIPTION
* This file specifies the layout of the Bluetooth Shared Memory
* Host Controller Protocol as described in SC-505753-DD
*/
#ifndef __BSMHCP_H__
#define __BSMHCP_H__
#define BSMHCP_TRANSFER_RING_CMD_SIZE (8)
#define BSMHCP_TRANSFER_RING_EVT_SIZE (32)
#define BSMHCP_TRANSFER_RING_ACL_SIZE (32)
/* Of the buffers in BSMHCP_TRANSFER_RING_ACL_SIZE, reserve a number for ULP
* operation. */
#define BSMHCP_TRANSFER_RING_ACL_ULP_RESERVED (4)
#define BSMHCP_TRANSFER_RING_SCO_SIZE (0)
#define BSMHCP_TRANSFER_RING_ACL_COUNT (36)
#define BSMHCP_TRANSFER_RING_TIMING_COUNT (64)
#define BSMHCP_CMD_EVT_BUFFER_SIZE (258)
#define BSMHCP_ACL_BUFFER_SIZE (1024)
#define BSMHCP_ACL_PACKET_SIZE (1021)
#define BSMHCP_ULP_PACKET_SIZE BSMHCP_ACL_PACKET_SIZE
#define BSMHCP_SCO_PACKET_SIZE (0)
#define BSMHCP_DATA_BUFFER_CMD_SIZE \
BSMHCP_TRANSFER_RING_CMD_SIZE
#define BSMHCP_DATA_BUFFER_EVT_SIZE \
BSMHCP_TRANSFER_RING_EVT_SIZE
#define BSMHCP_DATA_BUFFER_TX_ACL_SIZE \
(BSMHCP_TRANSFER_RING_ACL_SIZE - 2)
#define BSMHCP_DATA_BUFFER_RX_ACL_SIZE \
BSMHCP_TRANSFER_RING_ACL_SIZE
#define BSMHCP_EVENT_TYPE_NONE (0x00)
#define BSMHCP_EVENT_TYPE_CONNECTED (0x01)
#define BSMHCP_EVENT_TYPE_DISCONNECTED (0x02)
#define BSMHCP_ACL_BC_FLAG_BCAST_NON (0x00)
#define BSMHCP_ACL_BC_FLAG_BCAST_ACTIVE (0x40)
#define BSMHCP_ACL_BC_FLAG_BCAST_ALL (0x80)
#define BSMHCP_ACL_BC_FLAG_BCAST_RSVD (0xC0)
#define BSMHCP_ACL_BC_FLAG_BCAST_MASK (0xC0)
#define BSMHCP_ACL_PB_FLAG_START_NONFLUSH (0x00)
#define BSMHCP_ACL_PB_FLAG_CONT (0x10)
#define BSMHCP_ACL_PB_FLAG_START_FLUSH (0x20)
#define BSMHCP_ACL_PB_FLAG_RSVD_3 (0x30)
#define BSMHCP_ACL_PB_FLAG_MASK (0x30)
#define BSMHCP_ACL_L2CAP_FLAG_NON (0x00)
#define BSMHCP_ACL_L2CAP_FLAG_END (0x01)
#define BSMHCP_ACL_L2CAP_FLAG_MASK (0x01)
#define BSMHCP_SERVICE_BT_STATE_INACTIVE (0x00)
#define BSMHCP_SERVICE_BT_STATE_ACTIVE (0x01)
#define BSMHCP_CONTROLLER_STATE_ACTIVE (0x00000001)
#define BSMHCP_HCI_CONNECTION_HANDLE_LOOPBACK (0x4000)
#define BSMHCP_ALIGNMENT (32)
#define BSMHCP_FEATURE_LPA2DP (0x00000001)
#define BSMHCP_FEATURE_M4_INTERRUPTS (0x00000002)
#define BSMHCP_FEATURE_FW_INFORMATION (0x00000004)
#define BSMHCP_CONTROL_START_PANIC (0x10DEAD01)
#define BSMHCP_CONTROL_STOP_PANIC (0x0201DEAD)
#define BSMHCP_CONTROL_CONNECTION_PANIC (0xDEAD2002)
#define BSMHCP_FW_INFO_USER_DEFINED_COUNT (96)
#define BSMHCP_TIMING_SOURCE_ITIME (0)
#define BSMHCP_TIMING_SOURCE_ITIME_L1 (1)
#define BSMHCP_TIMING_SOURCE_RADIO_TX (2)
#define BSMHCP_TIMING_SOURCE_RADIO_RX (3)
#define BSMHCP_TIMING_SOURCE_RADIO_LC (4)
#define BSMHCP_TIMING_SOURCE_COUNT (5)
#define BSMHCP_DEBUG_INIT (0xFFFF)
#define BSMHCP_DEBUG_TIMESTAMP (0x0000)
#define BSMHCP_DEBUG_WRAP (0x0001)
#define BSMHCP_DEBUG_STRING (0x0002)
#define BSMHCP_DEBUG_FROM_AIR (0x0003)
#define BSMHCP_DEBUG_TO_AIR (0x0004)
#define BSMHCP_DEBUG_SPEEDY (0x0005)
#define BSMHCP_DEBUG_BINARY_DATA (0x0006)
#define BSMHCP_DEBUG_FILTER_BOOT (0x00000001)
#define BSMHCP_DEBUG_FILTER_SPEEDY (0x00000002)
#define BSMHCP_DEBUG_FILTER_RADIO (0x00000004)
#define BSMHCP_DEBUG_FILTER_SMM_ACL (0x00000008)
#define BSMHCP_DEBUG_FILTER_SMM_HCI (0x00000010)
#define BSMHCP_DEBUG_FILTER_LC (0x00000020)
#define BSMHCP_DEBUG_FILTER_LC_PAGE (0x00000040)
#define BSMHCP_DEBUG_FILTER_RADIOTEST (0x00000080)
#define BSMHCP_DEBUG_FILTER_FROM_AIR_DATA (0x00000100)
#define BSMHCP_DEBUG_FILTER_TO_AIR_DATA (0x00000200)
#define BSMHCP_DEBUG_FILTER_LM (0x00000400)
#define BSMHCP_DEBUG_FILTER_FSM (0x00000800)
#define BSMHCP_DEBUG_SPEEDY_FLAG_APB_CYCLE_DONE (0x00000002)
#define BSMHCP_DEBUG_SPEEDY_FLAG_APB_CYCLE_ERR (0x00000004)
#define BSMHCP_DEBUG_SPEEDY_FLAG_TIMEOUT_ERROR (0x00000008)
#define BSMHCP_DEBUG_SPEEDY_FLAG_WRITE (0x00000010)
#define BSMHCP_DEBUG_SPEEDY_FLAG_FOREGROUND (0x00000020)
#define BSMHCP_DEBUG_IDENTIFIER_HCI_CMD (0x00000000)
#define BSMHCP_DEBUG_IDENTIFIER_HCI_EVT (0x00000001)
#define BSMHCP_DEBUG_STRING_MAX (0x0100)
#define BSMHCP_DEBUG_POOL_SIZE (512 * 1024)
#define BSMHCP_INCREASE_INDEX(index, limit) \
((index) = ((index) + 1) % (limit))
#define BSMHCP_HAS_ROOM(write, read, limit) \
((((write) + 1) % (limit)) != (read))
struct BSMHCP_TD_CONTROL {
uint16_t length;
uint8_t data[BSMHCP_CMD_EVT_BUFFER_SIZE];
};
struct BSMHCP_TD_HCI_EVT {
uint16_t length;
uint16_t hci_connection_handle;
uint16_t event_type;
uint8_t data[BSMHCP_CMD_EVT_BUFFER_SIZE];
};
struct BSMHCP_TD_ACL_RX {
uint16_t hci_connection_handle;
uint16_t length;
uint8_t broadcast_flag;
uint8_t packet_boundary;
uint8_t disconnected;
uint8_t reserved;
uint8_t data[BSMHCP_ACL_BUFFER_SIZE];
};
struct BSMHCP_TD_ACL_TX_DATA {
uint16_t length;
uint8_t buffer_index;
uint8_t flags;
uint16_t hci_connection_handle;
uint16_t l2cap_cid;
};
struct BSMHCP_TD_ACL_TX_FREE {
uint8_t buffer_index;
uint8_t reserved;
uint16_t hci_connection_handle;
};
struct BSMHCP_ACL_TR_DRV_INDEX {
uint32_t read_free;
uint32_t write_data;
};
struct BSMHCP_ACL_TR_CTRL_INDEX {
uint32_t read_data;
uint32_t write_free;
};
struct BSMHCP_INDEX {
uint32_t read;
uint32_t write;
};
struct BSMHCP_DEBUG {
uint16_t type;
uint16_t length;
uint32_t timestamp;
};
struct BSMHCP_DEBUG_AIR_PACKET {
uint16_t type;
uint16_t length;
uint32_t timestamp;
uint8_t am_addr;
uint8_t lnk_type;
uint8_t pkt_type;
uint8_t link_flow;
uint8_t link_arqn;
uint8_t link_seqn;
uint8_t chan_type;
uint8_t l2cap_flow;
uint16_t payload_num_data_bytes;
uint16_t bb_pwr_status;
uint16_t payload_num_voice_bytes;
uint32_t access_code_sync_time;
uint32_t event_type;
uint16_t channel;
};
struct BSMHCP_DEBUG_SPEEDY_PACKET {
uint16_t type;
uint16_t length;
uint32_t timestamp;
uint32_t address;
uint32_t data;
uint32_t flags;
};
struct BSMHCP_DEBUG_BINARY_DATA_PACKET {
uint16_t type;
uint16_t length;
uint32_t timestamp;
uint32_t identifier;
};
struct BSMHCP_TIMING_PACKET {
uint16_t source;
uint16_t sequence_number;
uint32_t interrupt_enter;
uint32_t critical_section_enter;
uint32_t time[4];
uint32_t critical_section_leave;
uint32_t interrupt_leave;
};
struct BSMHCP_FW_INFO {
uint32_t r4_from_ap_interrupt_count;
uint32_t m4_from_ap_interrupt_count;
uint32_t r4_to_ap_interrupt_count;
uint32_t m4_to_ap_interrupt_count;
uint32_t bt_deep_sleep_time_total;
uint32_t bt_deep_sleep_wakeup_duration;
uint32_t sched_n_messages;
uint32_t user_defined_count;
uint32_t user_defined[BSMHCP_FW_INFO_USER_DEFINED_COUNT];
};
struct BSMHCP_HEADER {
/* AP RW - M4/R4 RO - 64 octets */
uint32_t magic_value; /* 0x00 */
uint16_t ap_to_fg_m4_int_src; /* 0x04 */
uint8_t service_request; /* 0x06 */
uint8_t reserved1; /* 0x07 */
uint32_t acl_buffer_size; /* 0x08 */
uint32_t cmd_evt_buffer_size; /* 0x0C */
uint32_t acl_tx_buffers; /* 0x10 */
uint16_t ap_to_bg_int_src; /* 0x14 */
uint16_t ap_to_fg_int_src; /* 0x16 */
uint16_t bg_to_ap_int_src; /* 0x18 */
uint16_t fg_to_ap_int_src; /* 0x1A */
uint32_t mailbox_offset; /* 0x1C */
uint32_t debug_output_offset; /* 0x20 */
uint32_t mailbox_hci_cmd_write; /* 0x24 */
uint32_t mailbox_hci_evt_read; /* 0x28 */
uint32_t mailbox_acl_tx_write; /* 0x2C */
uint32_t mailbox_acl_free_read; /* 0x30 */
uint32_t mailbox_acl_rx_read; /* 0x34 */
uint32_t mailbox_debug_read; /* 0x38 */
uint32_t smm_output_filter; /* 0x3C */
/* AP RO - R4 RW - M4 NA - 32 octets */
uint16_t panic_deathbed_confession; /* 0x40 */
uint16_t panic_diatribe_value; /* 0x42 */
uint32_t mailbox_hci_cmd_read; /* 0x44 */
uint32_t mailbox_hci_evt_write; /* 0x48 */
uint32_t controller_flags; /* 0x4C */
uint32_t firmware_features; /* 0x50 */
uint16_t reserved_u16; /* 0x54 */
uint8_t service_state; /* 0x56 */
uint8_t reserved_u8; /* 0x57 */
uint32_t mailbox_r4_debug_write; /* 0x58 */
uint8_t reserved3[0x04]; /* 0x5C */
/* AP RO - R4 NA - M4 RW - 32 octets */
uint32_t mailbox_acl_tx_read; /* 0x60 */
uint32_t mailbox_acl_free_write; /* 0x64 */
uint32_t mailbox_acl_rx_write; /* 0x68 */
uint32_t mailbox_timing_write; /* 0x6C */
uint32_t mailbox_m4_debug_write; /* 0x70 */
uint8_t reserved4[0x0C]; /* 0x74 */
/* AP RO - R4/M4 RW - 32 octets */
uint32_t mailbox_debug_write; /* 0x80 */
uint8_t reserved5[0x1C]; /* 0x84 */
/* AP RW - M4/R4 RO */
uint32_t mailbox_timing_read; /* 0xA0 */
uint32_t debug_r4_offset; /* 0xA4 */
uint32_t debug_r4_length; /* 0xA8 */
uint32_t debug_m4_offset; /* 0xAC */
uint32_t debug_m4_length; /* 0xB0 */
uint32_t mailbox_r4_debug_read; /* 0xB4 */
uint32_t mailbox_m4_debug_read; /* 0xB8 */
uint16_t info_ap_to_bg_int_src; /* 0xBC */
uint16_t info_bg_to_ap_int_src; /* 0xBE */
uint32_t mxlog_filter; /* 0xC0 */
uint32_t firmware_control; /* 0xC4 */
uint8_t reserved6[0x24]; /* 0xC8 */
/* Obsolete region - not used */
uint32_t smm_debug_read; /* 0xEC */
uint32_t smm_debug_write; /* 0xF0 */
uint32_t smm_exception; /* 0xF4 */
uint32_t avdtp_detect_stream_id; /* 0xF8 */
uint32_t smm_int_ready; /* 0xFE */
};
struct BSMHCP_PROTOCOL {
/* header offset: 0x00000000 */
volatile struct BSMHCP_HEADER header;
/* from AP */
struct BSMHCP_TD_CONTROL /* offset: 0x00000100 */
hci_cmd_transfer_ring[BSMHCP_TRANSFER_RING_CMD_SIZE];
uint8_t /* offset: 0x00000920 */
to_air_reserved[0x2080];
struct BSMHCP_TD_ACL_TX_DATA /* offset: 0x000029A0 */
acl_tx_data_transfer_ring[BSMHCP_TRANSFER_RING_ACL_SIZE];
uint8_t /* offset: 0x00002AA0 */
acl_tx_buffer[BSMHCP_DATA_BUFFER_TX_ACL_SIZE]
[BSMHCP_ACL_BUFFER_SIZE];
/* Padding used to ensure minimum 32 octets between sections */
uint8_t reserved[0x20]; /* offset: 0x0000A2A0 */
/* to AP */
struct BSMHCP_TD_HCI_EVT /* offset: 0x0000A2C0 */
hci_evt_transfer_ring[BSMHCP_TRANSFER_RING_EVT_SIZE];
struct BSMHCP_TIMING_PACKET /* offset: 0x0000C3C0 */
timing_transfer_ring[BSMHCP_TRANSFER_RING_TIMING_COUNT];
struct BSMHCP_FW_INFO /* offset: 0x0000CCC0 */
information;
uint8_t /* offset: 0x0000CCC0 + sizoef(struct BSMHCP_FW_INFO) */
from_air_reserved[0x1780 - sizeof(struct BSMHCP_FW_INFO)];
struct BSMHCP_TD_ACL_RX /* offset: 0x0000E440 */
acl_rx_transfer_ring[BSMHCP_TRANSFER_RING_ACL_SIZE];
struct BSMHCP_TD_ACL_TX_FREE /* offset: 0x00016540 */
acl_tx_free_transfer_ring[BSMHCP_TRANSFER_RING_ACL_SIZE];
};
#define BSMHCP_TD_ACL_RX_CONTROL_SIZE \
(sizeof(struct BSMHCP_TD_ACL_RX) - BSMHCP_ACL_BUFFER_SIZE)
#define BSMHCP_PROTOCOL_MAGICVALUE \
((BSMHCP_ACL_BUFFER_SIZE | BSMHCP_CMD_EVT_BUFFER_SIZE | \
(offsetof(struct BSMHCP_PROTOCOL, acl_tx_buffer) << 15)) ^ \
sizeof(struct BSMHCP_PROTOCOL))
#endif /* __BSMHCP_H__ */