337 lines
14 KiB
C
337 lines
14 KiB
C
|
/***************************************************************************
|
||
|
*
|
||
|
* Copyright 2015-2019 BES.
|
||
|
* All rights reserved. All unpublished rights reserved.
|
||
|
*
|
||
|
* No part of this work may be used or reproduced in any form or by any
|
||
|
* means, or stored in a database or retrieval system, without prior written
|
||
|
* permission of BES.
|
||
|
*
|
||
|
* Use of this work is governed by a license granted by BES.
|
||
|
* This work contains confidential and proprietary information of
|
||
|
* BES. which is protected by copyright, trade secret,
|
||
|
* trademark and other intellectual property rights.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
#ifndef __BT_DRV_REG_OP_H__
|
||
|
#define __BT_DRV_REG_OP_H__
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include "stdint.h"
|
||
|
#include "stdbool.h"
|
||
|
#include "plat_types.h"
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int8_t rssi;
|
||
|
uint8_t rxgain;
|
||
|
} rx_agc_t;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
uint8_t agc_idx0;
|
||
|
int8_t rssi0;
|
||
|
int8_t rssi0_max;
|
||
|
int8_t rssi0_min;
|
||
|
uint8_t agc_idx1;
|
||
|
int8_t rssi1;
|
||
|
int8_t rssi1_max;
|
||
|
int8_t rssi1_min;
|
||
|
uint8_t agc_idx2;
|
||
|
int8_t rssi2;
|
||
|
int8_t rssi2_max;
|
||
|
int8_t rssi2_min;
|
||
|
uint16_t ser;
|
||
|
uint16_t rx_data_sum;
|
||
|
} __attribute__((packed)) rssi_t;
|
||
|
|
||
|
struct ld_afh_env
|
||
|
{
|
||
|
/// RSSI threshold for interference detection (in dBm)
|
||
|
int8_t rf_rssi_interf_thr;
|
||
|
/// AFH update period (in sec)
|
||
|
uint8_t afh_update_period;
|
||
|
/// Maximum duration without receiving a packet before considering a channel quality unknown (in slots) (2 secs)
|
||
|
uint16_t afh_access_valid_to;
|
||
|
/// Maximum duration without receiving a packet before reintroducing a channel to the map (in slots) (20 secs)
|
||
|
uint16_t afh_reaccess_to;
|
||
|
/// Maximum counter value for channel assessment
|
||
|
int8_t afh_access_count_max;
|
||
|
/// Counter threshold to consider a channel good
|
||
|
int8_t afh_access_count_thr_good;
|
||
|
/// Counter threshold to consider a channel bad
|
||
|
int8_t afh_access_count_thr_bad;
|
||
|
/// Minimum counter value for channel assessment
|
||
|
int8_t afh_access_count_min;
|
||
|
};
|
||
|
|
||
|
/// RSSI threshold for interference detection (in dBm)
|
||
|
#define BT_AFH_RSSI_INTERF_THR (-70)
|
||
|
|
||
|
/// AFH update period (in sec)
|
||
|
#define BT_AFH_UPDATE_PERIOD 4
|
||
|
|
||
|
/// Maximum duration without receiving a packet before considering a channel quality unknown (in slots) (2 secs)
|
||
|
#define BT_AFH_ASSESS_VALID_TO 0x1900
|
||
|
|
||
|
/// Maximum duration without receiving a packet before reintroducing a channel to the map (in slots) (20 secs)
|
||
|
#define BT_AFH_REASSESS_TO 0x7D00
|
||
|
|
||
|
/// Maximum counter value for channel assessment
|
||
|
#define BT_AFH_ASSESS_COUNT_MAX 4
|
||
|
/// Counter threshold to consider a channel good
|
||
|
#define BT_AFH_ASSESS_COUNT_THR_GOOD 2
|
||
|
/// Counter threshold to consider a channel bad
|
||
|
#define BT_AFH_ASSESS_COUNT_THR_BAD -2
|
||
|
/// Minimum counter value for channel assessment
|
||
|
#define BT_AFH_ASSESS_COUNT_MIN -4
|
||
|
|
||
|
#define RETX_NB_0 0
|
||
|
#define RETX_NB_1 1
|
||
|
#define RETX_NB_2 2
|
||
|
#define RETX_NEGO 3
|
||
|
#ifdef CHIP_BEST2000
|
||
|
#define MIC_BUFF_ADRR_REG (0xc0000040)
|
||
|
#define RX_BUFF_ADRR (0xc0000044)
|
||
|
#elif defined(CHIP_BEST1400) || defined(CHIP_BEST1402) || defined(CHIP_BEST2300P)
|
||
|
#define MIC_BUFF_ADRR_REG (0xc0000058)
|
||
|
#define RX_BUFF_ADRR (0xc000005c)
|
||
|
#elif defined(CHIP_BEST2300A)
|
||
|
#define MIC_BUFF_ADRR_REG (0xc0000058)
|
||
|
#define RX_BUFF_INFO_ADRR (0xc000005c)
|
||
|
#define RX_BUFF_ADRR (*(volatile uint32_t *)(RX_BUFF_INFO_ADRR))
|
||
|
#endif
|
||
|
|
||
|
//BT acl tx silence
|
||
|
#define TX_SILENCE_ON 1
|
||
|
#define TX_SILENCE_OFF 0
|
||
|
|
||
|
struct dbg_set_ebq_test
|
||
|
{
|
||
|
uint8_t ebq_testmode;
|
||
|
uint8_t ble_set_privacy_mode;
|
||
|
uint8_t ll_con_ini_bv2324;
|
||
|
uint8_t ll_con_ini_bv2021;
|
||
|
uint8_t ll_ddi_scn_bv26;
|
||
|
uint8_t ll_sec_adv_bv05;
|
||
|
uint8_t ll_sync_win_default;
|
||
|
uint8_t auth_end_notify_host_lk;
|
||
|
uint8_t ll_sec_adv_bv09;
|
||
|
uint8_t ll_sec_adv_bv17;
|
||
|
uint8_t ll_sec_adv_bv1819;
|
||
|
uint8_t LocEncKeyRefresh;
|
||
|
uint8_t publickey_check;
|
||
|
uint8_t Qos;
|
||
|
uint8_t hv1;
|
||
|
uint8_t ssr;
|
||
|
uint8_t aes_ccm_daycounter;
|
||
|
uint8_t bb_prot_flh_bv01;
|
||
|
uint8_t bb_prot_arq_bv43;
|
||
|
uint8_t pause_aes_generate_rand;
|
||
|
};
|
||
|
|
||
|
|
||
|
void bt_drv_reg_op_rssi_set(uint16_t rssi);
|
||
|
void bt_drv_reg_op_scan_intv_set(uint32_t scan_intv);
|
||
|
void bt_drv_reg_op_encryptchange_errcode_reset(uint16_t hci_handle);
|
||
|
void bt_drv_reg_op_sco_sniffer_checker(void);
|
||
|
void bt_drv_reg_op_trigger_time_checker(void);
|
||
|
void bt_drv_reg_op_tws_output_power_fix_separate(uint16_t hci_handle, uint16_t pwr);
|
||
|
bool bt_drv_reg_op_ld_sniffer_env_monitored_dev_state_get(void);
|
||
|
void bt_drv_reg_op_ld_sniffer_env_monitored_dev_state_set(bool state);
|
||
|
void bt_drv_reg_op_ld_sniffer_master_addr_set(uint8_t * addr);
|
||
|
int bt_drv_reg_op_currentfreeaclbuf_get(void);
|
||
|
void bt_drv_reg_op_save_mobile_airpath_info(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_block_xfer_with_mobile(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_resume_xfer_with_mobile(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_block_fast_ack_with_mobile(void);
|
||
|
void bt_drv_reg_op_resume_fast_ack_with_mobile(void);
|
||
|
int bt_drv_reg_op_packet_type_checker(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_max_slot_setting_checker(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_force_task_dbg_idle(void);
|
||
|
void bt_drv_reg_op_afh_follow_mobile_mobileidx_set(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_afh_follow_mobile_twsidx_set(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_sco_status_store(void);
|
||
|
void bt_drv_reg_op_sco_status_restore(void);
|
||
|
bool bt_drv_reg_op_sco_tx_buf_restore(uint8_t *trigger_test);
|
||
|
void bt_drv_reg_op_afh_bak_reset(void);
|
||
|
void bt_drv_reg_op_afh_bak_save(uint8_t role, uint16_t mobileHciHandle);
|
||
|
void bt_drv_reg_op_connection_checker(void);
|
||
|
void bt_drv_reg_op_bt_info_checker(void);
|
||
|
uint8_t bt_drv_reg_op_get_controller_tx_free_buffer(void);
|
||
|
uint8_t bt_drv_reg_op_get_controller_ble_tx_free_buffer(void);
|
||
|
void bt_drv_reg_op_ble_buffer_cleanup(void);
|
||
|
bool bt_drv_reg_op_get_dbg_state(void);
|
||
|
void bt_drv_reg_op_crash_dump(void);
|
||
|
void bt_drv_reg_op_set_tx_pwr(uint16_t connHandle, uint8_t txpwr);
|
||
|
uint8_t bt_drv_reg_op_get_tx_pwr(uint16_t connHandle);
|
||
|
void bt_drv_reg_op_fix_tx_pwr(uint16_t connHandle);
|
||
|
void bt_drv_reg_op_lsto_hack(uint16_t hciHandle, uint16_t lsto);
|
||
|
uint16_t bt_drv_reg_op_get_lsto(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_enable_emsack_mode(uint16_t connHandle, uint8_t master, uint8_t enable);
|
||
|
void bt_drv_reg_op_set_accessible_mode(uint8_t mode);
|
||
|
void bt_drv_reg_op_force_sco_retrans(bool enable);
|
||
|
void bt_drv_reg_op_enable_pcm_tx_hw_cal(void);
|
||
|
void bt_drv_reg_op_monitor_clk(void);
|
||
|
bool bt_drv_reg_op_read_rssi_in_dbm(uint16_t connHandle,rx_agc_t* rx_val);
|
||
|
bool bt_drv_reg_op_read_ble_rssi_in_dbm(uint16_t connHandle,rx_agc_t* rx_val);
|
||
|
void bt_drv_reg_op_set_swagc_mode(uint8_t mode);
|
||
|
void bt_drv_reg_op_set_reboot_pairing_mode(uint8_t mode);
|
||
|
|
||
|
void bt_drv_reg_op_acl_silence(uint16_t connHandle, uint8_t silence);
|
||
|
void bt_drv_reg_op_call_monitor(uint16_t connHandle, uint8_t tws_role);
|
||
|
void bt_drv_reg_op_lock_sniffer_sco_resync(void);
|
||
|
void bt_drv_reg_op_unlock_sniffer_sco_resync(void);
|
||
|
void bt_drv_reg_op_afh_set_default(void);
|
||
|
void bt_drv_reg_op_update_sniffer_bitoffset(uint16_t mobile_conhdl,uint16_t master_conhdl);
|
||
|
void bt_drv_reg_op_modify_bitoff_timer(uint16_t time_out);
|
||
|
uint16_t em_bt_bitoff_getf(int elt_idx);
|
||
|
void bt_drv_reg_op_ble_llm_substate_hacker(void);
|
||
|
void bt_drv_reg_op_esco_acl_sniff_delay_cal(uint16_t hciHandle,bool enable);
|
||
|
bool bt_drv_reg_op_check_esco_acl_sniff_conflict(uint16_t hciHandle);
|
||
|
void bt_drv_reg_op_set_tpoll(uint8_t linkid,uint16_t poll_interval);
|
||
|
uint8_t bt_drv_reg_op_get_role(uint8_t linkid);
|
||
|
int8_t bt_drv_reg_op_rssi_correction(int8_t rssi);
|
||
|
void bt_drv_reg_set_rssi_seed(uint32_t seed);
|
||
|
void bt_drv_reg_op_piconet_clk_offset_get(uint16_t connHandle, int32_t *clock_offset, uint16_t *bit_offset);
|
||
|
void bt_drv_reg_op_sw_seq_filter(uint16_t connHandle);
|
||
|
bool bt_drv_reg_op_check_bt_controller_state(void);
|
||
|
void bt_drv_reg_op_dma_tc_clkcnt_get(uint32_t *btclk, uint16_t *btcnt);
|
||
|
|
||
|
void bt_drv_reg_op_clean_flags_of_ble_and_sco(void);
|
||
|
void bt_drv_reg_op_sco_txfifo_reset(uint16_t codec_id);
|
||
|
void bt_drv_reg_op_ibrt_retx_att_nb_set(uint8_t retx_nb);
|
||
|
void bt_drv_reg_op_acl_tx_type_set(uint16_t hciHandle, uint8_t slot_sel);
|
||
|
void bt_drv_reg_op_acl_tx_type_trace(uint16_t hciHandle);
|
||
|
uint8_t bt_drv_reg_op_acl_tx_type_get(uint16_t hciHandle, uint8_t* br_type, uint8_t* edr_type);
|
||
|
void bt_drv_reg_op_lm_nb_sync_hacker(uint8_t sco_status);
|
||
|
|
||
|
void bt_drv_reg_op_afh_env_reset(void);
|
||
|
void bt_drv_reg_op_acl_tx_silence(uint16_t connHandle, uint8_t on);
|
||
|
void bt_drv_reg_op_acl_tx_silence_clear(uint16_t connHandle);
|
||
|
|
||
|
void bt_drv_reg_op_ibrt_env_reset(void);
|
||
|
void btdrv_reg_op_set_private_tws_poll_interval(uint16_t poll_interval, uint16_t poll_interval_in_sco);
|
||
|
void btdrv_reg_op_enable_private_tws_schedule(bool enable);
|
||
|
void btdrv_reg_op_set_tws_link_duration(uint8_t slot_num);
|
||
|
void bt_drv_reg_op_decrease_tx_pwr_when_reconnect(bool enable);
|
||
|
void bt_drv_reg_op_controller_mem_log_config(void);
|
||
|
void bt_drv_reg_op_clear_ibrt_snoop_status(void);
|
||
|
uint8_t bt_drv_reg_op_linkcntl_aclltaddr_getf(uint16_t conhdl);
|
||
|
uint8_t bt_drv_reg_op_sync_bt_param(uint8_t* param, uint16_t len);
|
||
|
uint32_t bt_drv_reg_op_get_lc_env_ptr(uint16_t conhdl, uint8_t type);
|
||
|
void bt_drv_reg_op_set_tws_link_id(uint8_t link_id);
|
||
|
void bt_drv_reg_op_rx_slot_stop_lantency_checker(void);
|
||
|
void bt_drv_reg_op_hack_max_slot(uint8_t link_id,uint8_t slot);
|
||
|
void bt_drv_reg_op_fa_set(uint8_t en);
|
||
|
bool bt_drv_reg_op_check_seq_pending_status(void);
|
||
|
void bt_drv_reg_op_clear_seq_pending_status(void);
|
||
|
void bt_dev_clear_verison_receive_flag(uint8_t linkid);
|
||
|
void bt_drv_reg_op_fastack_status_checker(uint16_t conhdl);
|
||
|
void bt_drv_reg_op_set_link_policy(uint8_t linkid, uint8_t policy);
|
||
|
uint8_t bt_drv_reg_op_lmp_sco_hdl_get(uint16_t sco_handle);
|
||
|
bool bt_drv_reg_op_lmp_sco_hdl_set(uint16_t sco_handle, uint8_t lmp_hdl);
|
||
|
void bt_drv_reg_op_controller_state_checker(void);
|
||
|
void bt_drv_reg_op_controller_ble_flow_checker(void);
|
||
|
void bt_drv_reg_op_force_set_lc_state(uint16_t conhdl, uint8_t state);
|
||
|
uint8_t bt_drv_reg_op_force_get_lc_state(uint16_t conhdl);
|
||
|
void bt_drv_digital_config_for_ble_adv(bool en);
|
||
|
void bt_drv_reg_op_fa_gain_direct_set(uint8_t gain_idx);
|
||
|
uint8_t bt_drv_reg_op_fa_gain_direct_get(void);
|
||
|
void bt_drv_reg_op_dgb_link_gain_ctrl_set(uint16_t connHandle, uint8_t bt_ble_mode, uint8_t gain_idx, uint8_t enable);
|
||
|
void bt_drv_reg_op_dgb_link_gain_ctrl_clear(uint16_t connHandle, uint8_t bt_ble_mode);
|
||
|
void bt_drv_reg_op_dgb_link_gain_ctrl_init(void);
|
||
|
void bt_drv_reg_op_rx_gain_fix(uint16_t connHandle, uint8_t bt_ble_mode, uint8_t gain_idx, uint8_t enable, uint8_t table_idx);
|
||
|
void bt_drv_reg_op_afh_follow_en(bool enable, uint8_t be_followed_link_id, uint8_t follow_link_id);
|
||
|
/// Index for DM1 packet type (used in both BR and EDR)
|
||
|
#define DM1_IDX 0
|
||
|
/// Enhanced Data Rate packet types indexes (classified by packet size)
|
||
|
#define DH1_2_IDX 1
|
||
|
#define DH1_3_IDX 2
|
||
|
#define DH3_2_IDX 3
|
||
|
#define DH3_3_IDX 4
|
||
|
#define DH5_2_IDX 5
|
||
|
#define DH5_3_IDX 6
|
||
|
|
||
|
#define USE_1_SLOT_PACKET 0x02
|
||
|
#define USE_3_SLOT_PACKET 0x04
|
||
|
#define USE_5_SLOT_PACKET 0x06
|
||
|
|
||
|
///Sniffer sco status
|
||
|
#define SNIFFER_SCO_STOP 0
|
||
|
#define SNIFFER_SCO_START 1
|
||
|
#define SNIFFER_SCO_RESTART 2
|
||
|
#define SNIFFER_SCO_RESUME_AFTER_TO 3
|
||
|
#define SNIFFER_ACL_DISCONNECT_STOP_SCO 4
|
||
|
#define SNIFFER_IBRT_START 5
|
||
|
#define SNIFFER_IBRT_STOP 6
|
||
|
#define IDEL_CHECK 0xff
|
||
|
|
||
|
enum REG_OP
|
||
|
{
|
||
|
READ_OP,
|
||
|
WRITE_OP,
|
||
|
};
|
||
|
|
||
|
enum LC_ENV_TAG
|
||
|
{
|
||
|
LC_LINK_TAG,
|
||
|
LC_INFO_TAG,
|
||
|
LC_ENC_TAG,
|
||
|
LC_AFH_TAG,
|
||
|
LC_SP_TAG,
|
||
|
LC_EPR_TAG,
|
||
|
LC_EPC_TAG,
|
||
|
};
|
||
|
|
||
|
void bt_drv_reg_op_hw_sw_agc_select(uint8_t agc_mode);
|
||
|
void bt_drv_reg_op_force_set_sniff_att(uint16_t conhdle);
|
||
|
void bt_drv_reg_op_voice_settings_set(uint16_t voice_settings);
|
||
|
void bt_drv_reg_op_host_buff_and_flow_ctl_set
|
||
|
(uint16_t acl_pkt_len, uint16_t acl_pkt_num,uint16_t sync_pkt_len, uint16_t sync_pkt_num,bool flow_ctl_en);
|
||
|
|
||
|
void bt_drv_reg_op_page_to_set(uint16_t page_to);
|
||
|
void bt_drv_reg_op_btdm_address_set(uint8_t* bt_addr, uint8_t* ble_addr);
|
||
|
void bt_drv_reg_op_evtmask_set(uint8_t ble_en);
|
||
|
void bt_drv_reg_op_simplepair_mode_set(uint8_t en);
|
||
|
void bt_drv_reg_op_class_of_dev_set(uint8_t* class_of_dev, uint8_t len);
|
||
|
void bt_drv_reg_op_sleep_set(bool en);
|
||
|
void bt_drv_reg_op_sco_fifo_reset(void);
|
||
|
void bt_drv_reg_sco_fifo_dump(void);
|
||
|
uint8_t bt_drv_reg_op_get_sync_id_op(uint8_t op, uint8_t sync_id);
|
||
|
void bt_drv_reg_op_set_agc_thd(bool isMaster, bool isSco);
|
||
|
void bt_drv_reg_op_global_symbols_init(void);
|
||
|
void bt_drv_tx_pwr_init(void);
|
||
|
void bt_drv_tx_pwr_init_for_testmode(void);
|
||
|
void bt_drv_reg_op_set_ibrt_auto_accept_sco(bool en);
|
||
|
void bt_drv_reg_op_update_dbg_state(void);
|
||
|
void bt_drv_reg_op_set_ibrt_reject_sniff_req(bool en);
|
||
|
uint8_t bt_drv_reg_op_get_esco_nego_airmode(uint8_t sco_link_id);
|
||
|
void bt_drv_reg_op_hci_vender_ibrt_ll_monitor(uint8_t* ptr, uint16_t* p_sum_err,uint16_t* p_rx_total);
|
||
|
uint32_t bt_drv_reg_op_get_host_ref_clk(void);
|
||
|
void bt_drv_reg_op_set_accept_new_mobile_enable(void);
|
||
|
void bt_drv_reg_op_clear_accept_new_mobile_enable(void);
|
||
|
void bt_drv_reg_op_ecc_softbit_process(uint16_t* p_conn_handle1,uint16_t* p_conn_handle2, uint16_t length, uint8_t *data);
|
||
|
void bt_drv_reg_op_ebq_test_setting(void);
|
||
|
void bt_drv_reg_op_hw_spi_en_setf(int elt_idx, uint8_t hwspien);
|
||
|
void bt_drv_enhance_fa_mode(bool enable);
|
||
|
void bt_drv_reg_op_set_rand_seed(uint32_t seed);
|
||
|
void bt_drv_reg_op_swagc_mode_set(uint8_t mode);
|
||
|
void bt_drv_reg_op_set_max_pwr_rcv(uint16_t connHandle);
|
||
|
void bt_drv_reg_op_key_gen_after_reset(bool enable);
|
||
|
uint8_t bt_drv_reg_op_bt_sync_swagc_en_get(void);
|
||
|
void bt_drv_reg_op_ble_sup_timeout_set(uint16_t ble_conhdl, uint16_t sup_to);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|
||
|
|