pinebuds/platform/drivers/bt/best2300p/bt_drv_patch.c
Ben V. Brown 75381150fd Formatting
Formatting Pass 1

Lots of fixups to adding stdint and stdbool all over the place

Formatting Pass 2
Formatting Pass 3
Formatting Pass 4

Update app_bt_stream.cpp
2023-02-02 07:56:49 +11:00

4681 lines
148 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.
*
****************************************************************************/
#include "bt_drv.h"
#include "bt_drv_2300p_internal.h"
#include "bt_drv_interface.h"
#include "hal_chipid.h"
#include "hal_i2c.h"
#include "hal_uart.h"
#include "plat_types.h"
extern void btdrv_write_memory(uint8_t wr_type, uint32_t address,
const uint8_t *value, uint8_t length);
/// enable m4 patch func
#define BTDRV_PATCH_EN_REG 0xe0002000
// set m4 patch remap adress
#define BTDRV_PATCH_REMAP_REG 0xe0002004
// instruction patch compare src address
#define BTDRV_PATCH_INS_COMP_ADDR_START 0xe0002008
#define BTDRV_PATCH_INS_REMAP_ADDR_START 0xc0000100
// data patch compare src address
#define BTDRV_PATCH_DATA_COMP_ADDR_START 0xe00020e8
#define BTDRV_PATCH_DATA_REMAP_ADDR_START 0xc00001e0
#define BTDRV_PATCH_ACT 0x1
#define BTDRV_PATCH_INACT 0x0
typedef struct {
uint8_t patch_index; // patch position
uint8_t patch_state; // is patch active
uint16_t patch_length; // patch length 0:one instrution replace other:jump to
// ram to run more instruction
uint32_t patch_remap_address; // patch occured address
uint32_t patch_remap_value; // patch replaced instuction
uint32_t patch_start_address; // ram patch address for lenth>0
uint8_t *patch_data; // ram patch date for length >0
} BTDRV_PATCH_STRUCT;
#ifdef IBRT
/***************************************************************************
*
* instruction patch Information
*
* BT ROM Chip Version:1302 T3 (CHIP ID=2)
*
* IBRT function
*
* patch 2: 0xC00069a8--->0xC00069b0
* patch 4: 0xC00069b8--->0xC00069d0
* patch 5: 0xC00069d4--->0xC00069f0
* patch 6: 0xC00069f8--->0xC0006a08
* patch 7: 0xC0006a10--->0xC0006a24
* patch 9: 0xC0006a2c--->0xC0006a4c
* patch 10: 0xC0006a54--->0xC0006a64
* patch 11: 0xC0006a68--->0xC0006a90
* patch 13: 0xC0006a98--->0xC0006b2c
* patch 15: 0xC0006b3c--->0xC0006b88
* patch 16: 0xC0006b90--->0xC0006ba0
* patch 17: 0xC0006ba4--->0xC0006bc0
* patch 14: 0xC0006bc8--->0xC0006bdc
* patch 0: 0xC0006be4--->0xC0006c04
* patch 1: 0xC0006c0c--->0xC0006c24
* patch 2: 0xC0006c34--->0xC0006c80
* patch 3: 0xC0006c88--->0xC0006c94
* lmp_ext_sniffer_fast_cfm_tab: 0xC0006c9c --->0xC0006ca4
* patch 18: 0xC0006cbc--->0xC0006d10 DEBUG_PATCH
* patch 19: 0xC0006d14--->0xC0006dbc
* patch 20: 0xC0006dc4--->0xC0006df4
* patch 21: 0xC0006e00--->0xC0006e2c
* patch 22: 0xC0006e34--->0xC0006e38
* lmp_ext_sniffer_filter_tab: 0xC0006e40 --->0xC0006e54
* patch 2a: 0xC0006e5c--->0xC0006e70
* patch 24: 0xC0006e78--->0xC0006e88
* patch 25: 0xC0006e94--->0xC0006ea4
* patch 29: 0xC0006eb0--->0xC0006ec4
* patch 30: 0xC0006ecc--->0xC0006ef0
* patch 31: 0xC0006ef8--->0xC0006f08
* patch 32: 0xC0006f0c--->0xC0006f18
* patch 33: 0xc0006f20--->0xc0006f50
* patch 34: 0xc0006f58--->0xc0006f64
* patch 35: 0xc0006f70--->0xc0006f90
* patch 49: 0xc0006f98--->0xc0006fac
* patch 36: 0xc0006fc0--->0xc0007034
* patch 37: 0xc0007050--->0xc0007328
* patch 37: 0xc000732c--->0xc0007348
* patch 44: 0xc0007460--->0xc0007500
patch_ld_ibrt_sco_req_filter: c0007670--->c0007670
****************************************************************************/
//#define BT_CONTROLLER_DEBUG 1
const uint32_t bes2300p_patch0_ibrt_ins_data_t3[] = {
0x400fe92d, /*0xc0007758L*/
0xf0004630, /*0xc000775cL*/
0xe8bdf805, /*0xc0007760L*/
0xf634400f, /*0xc0007764L*/
0x0000bb51, /*0xc0007768L*/
0x4604b510, /*0xc000776cL*/
0x47984b0c, /*0xc0007770L*/
0x60184b0c, /*0xc0007774L*/
0x781b3304, /*0xc0007778L*/
0x2b03b2db, /*0xc000777cL*/
0x2c02d005, /*0xc0007780L*/
0x2c10d009, /*0xc0007784L*/
0x2004d10a, /*0xc0007788L*/
0x4b07e006, /*0xc000778cL*/
0xb2db781b, /*0xc0007790L*/
0x70134a06, /*0xc0007794L*/
0x2002e7f3, /*0xc0007798L*/
0x47984b05, /*0xc000779cL*/
0xbf00bd10, /*0xc00077a0L*/
0xa0026ded, /*0xc00077a4L*/
0xc000653c, /*0xc00077a8L*/
0xc00064da, /*0xc00077acL*/
0xc0006541, /*0xc00077b0L*/
0xa003bcc1, /*0xc00077b4L*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch0 = {
0,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch0_ibrt_ins_data_t3),
0x0003bdc0,
0xbccaf1cb,
0xc0007758,
(uint8_t *)
bes2300p_patch0_ibrt_ins_data_t3}; // ibrt sco auto accept (slave)
const uint32_t bes2300p_patch1_ibrt_ins_data_t3[] = {
0x681b4b08, 0xf632b933, 0x2800ffdb, 0x2001bf0c, 0xe0002004,
0xf6352001, 0x2000f84d, 0x60184b01, 0xb809f60a, 0xc0007434, /*6c30*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch1 = {
1,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch1_ibrt_ins_data_t3),
0x00010c3c,
0xbfe6f1f5,
0xc0006c0c,
(uint8_t *)
bes2300p_patch1_ibrt_ins_data_t3}; // ibrt sco auto accept (master)
const uint32_t bes2300p_patch2_ibrt_ins_data_t3[] = {
0x4b04b508, 0x2b01681b, 0x2001d102, 0xfb00f5fa, 0xbf00bd08,
0xc0007668, 0xfd56f60d, 0xfff0f7ff, 0xbe7af60f, /*6c58*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch2 = {
2,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch2_ibrt_ins_data_t3),
0x0001694c,
0xb980f1f0,
0xc0006c38,
(uint8_t *)bes2300p_patch2_ibrt_ins_data_t3}; // tws unsniff update ke state
const uint32_t bes2300p_patch3_ibrt_ins_data_t3[] = {
0xbf004628, 0xfdc4f60d, 0x21144628, 0xba4af60f, /*6c94*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch3_ibrt_ins_data_t3),
0x00016128,
0xbdaef1f0,
0xc0006c88,
(uint8_t *)bes2300p_patch3_ibrt_ins_data_t3}; // start lmp to before sending
// LMP_HostConnectionReq
const uint32_t bes2300p_patch4_ibrt_ins_data_t3[] = {
0xf633b940, /*69b8*/
0x2801f86d, 0xf633d104, 0x2800f903,
0xbf00d102, 0xbd84f62b, 0xbe02f62b, /*69d0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch4 = {
4,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch4_ibrt_ins_data_t3),
0x000324d4,
0xba70f1d4,
0xc00069b8,
(uint8_t *)bes2300p_patch4_ibrt_ins_data_t3}; // filter afh map
const uint32_t bes2300p_patch5_ibrt_ins_data_t3[] = {
0x79ab4688, /*69d4*/
0x6383ea6f, 0x4578f023, 0xf8d39b09, 0x9906308c,
0x402b440b, 0xbf004641, 0xb8bdf62d, /*69f0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch5 = {
5,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch5_ibrt_ins_data_t3),
0x00033b60,
0xbf38f1d2,
0xc00069d4,
(uint8_t *)bes2300p_patch5_ibrt_ins_data_t3}; // sco param init
const uint32_t bes2300p_patch6_ibrt_ins_data_t3[] = {
0x4a033304, /*69f8*/
0xbf008153, 0x12c4f640, 0xbeb9f632, 0xc00062c0, /*6a08*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch6 = {
6,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch6_ibrt_ins_data_t3),
0x00039770,
0xb942f1cd,
0xc00069f8,
(uint8_t *)bes2300p_patch6_ibrt_ins_data_t3}; // pscan duration
const uint32_t bes2300p_patch7_ibrt_ins_data_t3[] = {
0x71ab2300, /*6a10*/
0x0000f8d9, 0x380cb110, 0xf8f6f5fa, 0xbf002300, 0xbf3ef608, /*6a24*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch7 = {
7,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch7_ibrt_ins_data_t3),
0x0000f8a0,
0xb8b6f1f7,
0xc0006a10,
(uint8_t *)
bes2300p_patch7_ibrt_ins_data_t3}; // lm_page_scan_end_ind free msg
const uint32_t bes2300p_patch8_ibrt_ins_data_t3[] = {
0xf8862001,
0xf8860060,
0xbf000061,
0xbba3f611,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch8 = {
8,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch8_ibrt_ins_data_t3),
0x00018f1c,
0xbc62f1ee,
0xc00077e4,
(uint8_t *)bes2300p_patch8_ibrt_ins_data_t3}; // ignore 0x5d sm
const uint32_t bes2300p_patch9_ibrt_ins_data_t3[] = {
0xf62a4628, /*6a2c*/
0x4620fef7, 0xff76f60f, 0xf8534b04, 0x46203025,
0x135ef893, 0xfc68f5fa, 0xbd702000, 0xc0005de4, /*6a4c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch9 = {
9,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch9_ibrt_ins_data_t3),
0x0002347c,
0xbad6f1e3,
0xc0006a2c,
(uint8_t *)bes2300p_patch9_ibrt_ins_data_t3};
const uint32_t bes2300p_patch10_ibrt_ins_data_t3[] = {
0x0818f104,
0xbb9ff634,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch10 = {
10,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch10_ibrt_ins_data_t3),
0x0003b184,
0xbc66f1cb,
0xc0006a54,
(uint8_t *)bes2300p_patch10_ibrt_ins_data_t3}; // set afh
const uint32_t bes2300p_patch11_ibrt_ins_data_t3[] = {
0xf8934b09, /*6a68*/
0xf0133084, 0xd0050f06, 0xf6374620, 0x4601f805, 0xe0052400,
0xf8934b03, 0xbf003084, 0xb941f636, 0xb987f636, 0xc0006568, /*6a90*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch11 = {
11,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch11_ibrt_ins_data_t3),
0x0003cd08,
0xbeaef1c9,
0xc0006a68,
(uint8_t *)bes2300p_patch11_ibrt_ins_data_t3}; // set ble adv data
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch12 = {
12, BTDRV_PATCH_ACT, 0, 0x0003cbf0, 0xbf00e004, 0,
NULL}; // set ble scan response data
const uint32_t bes2300p_patch13_ibrt_ins_data_t3[] = {
/*6a98*/ 0x99049803,
/*6a9c*/ 0x4b12b470,
/*6aa0*/ 0x010e5c5a,
/*6aa4*/ 0x19734d11,
/*6aa8*/ 0x78244c11,
/*6aac*/ 0xd20342a2,
/*6ab0*/ 0x32015498,
/*6ab4*/ 0xe001b2d2,
/*6ab8*/ 0x22015570,
/*6abc*/ 0x5442480a,
/*6ac0*/ 0x461ab14c,
/*6ac4*/ 0x23001919,
/*6ac8*/ 0x0b01f912,
/*6acc*/ 0xbf004403,
/*6ad0*/ 0xd1f9428a,
/*6ad4*/ 0x2300e000,
/*6ad8*/ 0xf0f4fb93,
/*6adc*/ 0xbc70b240,
/*6ae0*/ 0x22019904,
/*6ae4*/ 0xba00f626, // jump a0206ae4 -> a002cee8
/*6ae8*/ 0xc0006af8, // addr of rssi_idx_for_agc
/*6aec*/ 0xc0006afc, // addr of rssi_set_for_agc
/*6af0*/ 0xc0006af4, // addr of N
/*6af4*/ 0x00000005, // N : 1 ~ 16
/*6af8*/ 0x00000000, // rssi_idx_for_agc[3]
/*6afc*/ 0xbabababa, // rssi_set_for_agc[3*16]
/*6b00*/ 0xbabababa,
/*6b04*/ 0xbabababa,
/*6b08*/ 0xbabababa,
/*6b0c*/ 0xbabababa,
/*6b10*/ 0xbabababa,
/*6b14*/ 0xbabababa,
/*6b18*/ 0xbabababa,
/*6b1c*/ 0xbabababa,
/*6b20*/ 0xbabababa,
/*6b24*/ 0xbabababa,
/*6b28*/ 0xbabababa,
/*6b2c*/ 0xbabababa,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch13 = {
13,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch13_ibrt_ins_data_t3),
0x0002cee4,
0xbdd8f1d9, // jump a002cee4 -> a0206a98
0xc0006a98,
(uint8_t *)bes2300p_patch13_ibrt_ins_data_t3}; // ld_acl_rx() average rssi
const uint32_t bes2300p_patch14_ibrt_ins_data_t3[] = {
0x305af893, 0xd1032b00, 0x12f4f240,
0xbf00e002, 0x32b8f640, 0xbe30f60d, /*6bdc*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch14 = {
14,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch14_ibrt_ins_data_t3),
0x0001483c,
0xb9c4f1f2,
0xc0006bc8,
(uint8_t *)bes2300p_patch14_ibrt_ins_data_t3}; // lmp to 5s before
// connection cmp sent
const uint32_t bes2300p_patch15_ibrt_ins_data_t3[] = {
0x2028f843, /*6b3c*/
0xf8434b08, 0x4b052028, 0x4b0e701a, 0x2201701a, 0xf8434b08,
0xbf002028, 0xba32f624, 0xc0006b60, 0x00000000, 0xc0006b68,
0x00000000, 0x00000000, 0x00000000, 0xc0006b78, 0x00000001,
0x00000001, 0x00000001, 0xc0006b88, 0x00000000, /*6b88*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch15 = {
15,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch15_ibrt_ins_data_t3),
0x0002afbc,
0xbdbef1db,
0xc0006b3c,
(uint8_t *)bes2300p_patch15_ibrt_ins_data_t3}; // sync clear count
const uint32_t bes2300p_patch16_ibrt_ins_data_t3[] = {
0x0046f894, /*6b90*/
0xfe94f625, 0xd8012802, 0xba3ef629, 0xba57f629, /*6ba0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch16 = {
16,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch16_ibrt_ins_data_t3),
0x00030014,
0xbdbcf1d6,
0xc0006b90,
(uint8_t *)bes2300p_patch16_ibrt_ins_data_t3}; // ld_sco_evt_start_cbk
const uint32_t bes2300p_patch17_ibrt_ins_data_t3[] = {
0xf6062002, /*6ba4*/
0x2802f937, 0xf898d108, 0xf62500b2, 0x2802fe85,
0xbf00d802, 0xbc93f629, 0xbc98f629, /*6bc0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch17 = {
17,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch17_ibrt_ins_data_t3),
0x000304d4,
0xbb66f1d6,
0xc0006ba4,
(uint8_t *)
bes2300p_patch17_ibrt_ins_data_t3}; // ld_calculate_event_timestamp
#ifdef BT_CONTROLLER_DEBUG
const uint32_t bes2300p_patch18_ibrt_ins_data_t3[] = {
0x68124a0e, 0x2084f8c3, 0x68124a0d, 0x2088f8c3, 0x68124a0c, 0x208cf8c3,
0x68124a0b, 0x2090f8c3, 0x68124a0a, 0x2094f8c3, 0x68124a09, 0x2098f8c3,
0x68124a08, 0x209cf8c3, 0xbf004770, 0xe000ed04, 0xe000ed0c, 0xe000ed10,
0xe000ed14, 0xe000ed24, 0xe000ed3c, 0xe000ed34, /*6d10*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch18 = {
18,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch18_ibrt_ins_data_t3),
0x000077fc,
0xba5ef1ff,
0xc0006cbc,
(uint8_t *)bes2300p_patch18_ibrt_ins_data_t3}; // correct crash dump
#else
const uint32_t bes2300p_patch18_ibrt_ins_data_t3[] = {
0x2271f240, /*6cc0*/
0x4080f8b0, /*6cc4*/
0xb9f9f63f,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch18 = {
18,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch18_ibrt_ins_data_t3),
0x000460ac,
0xbe08f1c0,
0xc0006cc0,
(uint8_t *)bes2300p_patch18_ibrt_ins_data_t3
}; // BT avoid ble
#endif
const uint32_t bes2300p_patch19_ibrt_ins_data_t3[] = {
0x4603b508, 0x8210f3ef, 0x0f01f012, 0xb672d112, 0xf5a34811, 0x3b285343,
0xfba14910, 0xf3c32303, 0xeb032387, 0xeb000343, 0x31940183, 0xfdd0f5fc,
0xbd08b662, 0xf5a34808, 0x3b285343, 0xfba14907, 0xf3c32303, 0xeb032387,
0xeb000343, 0x31940183, 0xfdbef5fc, 0xbf00bd08, 0xc0005b4c, 0xff00ff01,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch19 = {
19,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch19_ibrt_ins_data_t3),
0x00008b24,
0xb8f8f1fe,
0xc0006d18,
(uint8_t *)bes2300p_patch19_ibrt_ins_data_t3}; // add lock interrupt when
// free acl buf
const uint32_t bes2300p_patch20_ibrt_ins_data_t3[] = {
0x460cb510, 0xfafaf5fa, 0xd9042870, 0x007ef1b4, 0x2001bf18,
0x2000bd10, 0xbf00bd10, 0xf7ff4621, 0x2800ffef, 0x4628d104,
0xfae8f5fa, 0xbd9af61c, 0xb85ff61d, /*6df4*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch20 = {
20,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch20_ibrt_ins_data_t3),
0x00023924,
0xba5cf1e3,
0xc0006dc4,
(uint8_t *)bes2300p_patch20_ibrt_ins_data_t3}; // protect ext3 lmp tx cfm
const uint32_t bes2300p_patch21_ibrt_ins_data_t3[] = {
0x2040f897, /*6e00*/
0xd1112a01, 0x0109f106, 0xf5fc4608, 0x2813fd4b, 0x221ed802, 0xbc54f614,
0x2a017a32, 0xf614d801, 0x221ebbf6, 0xbc4cf614, 0xbc47f614, /*6e2c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch21 = {
21,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch21_ibrt_ins_data_t3),
0x0001b604,
0xbbfcf1eb,
0xc0006e00,
(uint8_t *)
bes2300p_patch21_ibrt_ins_data_t3}; // reject set afh lmp when
// channel number less than 20
const uint32_t bes2300p_patch22_ibrt_ins_data_t3[] = {
0x2202729a, /*6e34*/
0xbd38719a, /*6e38*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch22 = {
22,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch22_ibrt_ins_data_t3),
0x00011c90,
0xb8d0f1f5,
0xc0006e34,
(uint8_t *)bes2300p_patch22_ibrt_ins_data_t3}; // update sco sync type
const uint32_t bes2300p_patch2a_ibrt_ins_data_t3[] = {
/*6e5c*/ 0xb10b4b04,
/*6e60*/ 0xbb84f615, // jump a001c56c
/*6e64*/ 0x783b2300,
/*6e68*/ 0x0301f003,
/*6e6c*/ 0xbb5ef615, // jump a001c52c
/*6e70*/ 0x00000000, // reject sniff
}; // LMP_MSG_HANDLER(sniff_req) LC_CONNECTED
const uint32_t bes2300p_patch23_ibrt_ins_data_t3[] = {
0xf9c6f632, /*7744*/
0x02194603, 0x417ff401, 0xbeeff632, /*7750*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch23 = {
23,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch23_ibrt_ins_data_t3),
0x0003a52c,
0xb90af1cd,
0xc0007744,
(uint8_t *)bes2300p_patch23_ibrt_ins_data_t3}; // fix sco success index
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch24 = {
24, BTDRV_PATCH_ACT, 0, 0x00002490, 0xbf00e012, 0, NULL,
}; // stop ibrt directly
const uint32_t bes2300p_patch25_ibrt_ins_data_t3[] = {
0x2a020a02, 0xbf00d804, 0x427ff400, 0xbf44f61c, 0xb807f61d,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch25 = {
25,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch25_ibrt_ins_data_t3),
0x00023d28,
0xb8b4f1e3,
0xc0006e94,
(uint8_t *)bes2300p_patch25_ibrt_ins_data_t3}; // enc update2 idx error
#if 1
const uint32_t bes2300p_patch26_ibrt_ins_data_t3[] = {
0x68134a05, 0x2380f043, 0xf5a26013, 0x68137206,
0x0301f043, 0xbd386013, 0xd0220400,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch26 = {
26,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch26_ibrt_ins_data_t3),
0x00048200,
0xba8ef1bf,
0xc0007720,
(uint8_t *)bes2300p_patch26_ibrt_ins_data_t3}; // enable hw spiin BLE
// lld_evt_rx_isr
#elif 0
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch26 = {
26, BTDRV_PATCH_ACT, 0, 0x00013f44, 0xbf00bd38, 0, NULL}; // assert
#else
const uint32_t bes2300p_patch26_ibrt_ins_data_t3[] = {
0xf6324607, 0xb120fa87, 0x63a6f640, 0xf63e827b,
0x4638bd94, 0x2080f8d0, 0xbd86f63e,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch26 = {
26,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch26_ibrt_ins_data_t3),
0x000461dc,
0xba6cf1c1,
0xc00076b8,
(uint8_t *)bes2300p_patch26_ibrt_ins_data_t3}; // ble con slave duration in
// snoop mode
#endif
#if defined(SYNC_BT_CTLR_PROFILE)
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch27 = {
27, BTDRV_PATCH_ACT, 0, 0x000187b8, 0x4628b123, 0,
NULL}; // send profile via ble
#else
const uint32_t bes2300p_patch27_ibrt_ins_data_t3[] = {
0xfe88f632, 0xffe8f7ff, 0xb9a2f625, /*6c68*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch27 = {
27,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch27_ibrt_ins_data_t3),
0x0002bfac,
0xbe58f1da,
0xc0006c60,
(uint8_t *)bes2300p_patch27_ibrt_ins_data_t3}; // disconnect update ke state
#endif
#if 1
// for ble master update con param with large winsize
const uint32_t bes2300p_patch28_ibrt_ins_data_t3[] = {
0x4630bf00, 0x109ef894, 0xf958f63f, 0x309cf894,
0x2271f240, 0x0003fb02, 0xbcf1f63f,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch28 = {
28,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch28_ibrt_ins_data_t3),
0x000471e4,
0xbb08f1c0,
0xc00077f8,
(uint8_t *)bes2300p_patch28_ibrt_ins_data_t3};
#else
// only for search UI
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch28 = {
28, BTDRV_PATCH_ACT, 0, 0x0000e47a, 0xe0027b20, 0,
NULL}; // lm_inq_res_ind_handler() rssi
#endif
const uint32_t bes2300p_patch29_ibrt_ins_data_t3[] = {
0xf8934b04, 0x2b0231c2, 0x230fbf0c,
0x75ab2314, 0xbac2f629, 0xc0005ea8, /*6ec4*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch29 = {
29,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch29_ibrt_ins_data_t3),
0x00030444,
0xbd34f1d6,
0xc0006eb0,
(uint8_t *)bes2300p_patch29_ibrt_ins_data_t3}; /// fix acl interv priority
const uint32_t bes2300p_patch30_ibrt_ins_data_t3[] = {
0xd80a2802, 0x4b05b508, 0x3020f853, 0xf893b123, 0x220510c4,
0xfe86f61d, 0x4770bd08, 0xc00009d4, 0xffeef7ff, 0xbda8f634, /*6ef0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch30 = {
30,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch30_ibrt_ins_data_t3),
0x0003ba40,
0xba54f1cb,
0xc0006ecc,
(uint8_t *)bes2300p_patch30_ibrt_ins_data_t3}; /// send max slot req when
/// start ibrt
const uint32_t bes2300p_patch31_ibrt_ins_data_t3[] = {
0xf632b920, 0x2800fdc1, 0xbf00d002, 0xbb3af629, 0xbba2f629, /*6f08*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch31 = {
31,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch31_ibrt_ins_data_t3),
0x00030578,
0xbcbef1d6,
0xc0006ef8,
(uint8_t *)bes2300p_patch31_ibrt_ins_data_t3}; // modify start ibrt timing
#if 0 // def BT_CONTROLLER_DEBUG
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch32=
{
32,
BTDRV_PATCH_ACT,
0,
0x00000348,
0xbf00e005,
0,
NULL
};///lmp trace
#else
const uint32_t bes2300p_patch32_ibrt_ins_data_t3[] = {
0xfe4af5f9, 0xbf002300, 0x30c8f884, 0xbaf8f624, /*6f18*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch32 = {
32,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch32_ibrt_ins_data_t3),
0x0002b508,
0xbd00f1db,
0xc0006f0c,
(uint8_t *)bes2300p_patch32_ibrt_ins_data_t3}; /// role switch fail
#endif
const uint32_t bes2300p_patch33_ibrt_ins_data_t3[] = {
0x2300b430, 0x4d072103, 0x4290b2da, 0xf855d004, 0x2c004023,
0x4611bf18, 0x2b033301, 0x4608d1f4, 0x4770bc30, 0xc00009d4, /*6f50*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch33 = {
33,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch33_ibrt_ins_data_t3),
0x0002c8c0,
0xbb2ef1da,
0xc0006f20,
(uint8_t *)bes2300p_patch33_ibrt_ins_data_t3}; // find_other_acl_link
const uint32_t bes2300p_patch34_ibrt_ins_data_t3[] = {
0xfe38f632, 0xd0052800, 0xbf002002,
0xfcb0f61c, 0xbb2ff634, 0xbb25f634, /*6f6c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch34 = {
34,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch34_ibrt_ins_data_t3),
0x0003b5b4,
0xbcd0f1cb,
0xc0006f58,
(uint8_t *)bes2300p_patch34_ibrt_ins_data_t3}; // do not trans afh after
// IBRT switch
const uint32_t bes2300p_patch35_ibrt_ins_data_t3[] = {
0xfd92f632, /*6f70*/
0xd1092801, 0xfe28f632, 0xd0052800, 0xfd9cf632,
0xd10142a0, 0xbc77f611, 0x68294620, 0xbc70f611, /*6f90*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch35 = {
35,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch35_ibrt_ins_data_t3),
0x00018870,
0xbb7ef1ee,
0xc0006f70,
(uint8_t *)bes2300p_patch35_ibrt_ins_data_t3}; // acl data tx cfm
const uint32_t bes2300p_patch36_ibrt_ins_data_t3[] = {
0x460db538, 0x78034614, 0x7842085b, 0x2b7f78c1, 0x2a01d10a,
0x290dd11e, 0xf632d11c, 0x4601fd45, 0xf6342000, 0xe015ff1f,
0xd1132b03, 0xd1112a18, 0xd80f2d02, 0xf6104628, 0xb158fcb3,
0x3047f890, 0xd1072b02, 0xf62a4628, 0x0228fc0b, 0x0001f040,
0xfc88f60f, 0x000cf1a4, 0xfdf8f5f9, 0xbf00bd38, 0xd1072800,
0x4620bf00, 0x46524639, 0xffc8f7ff, 0xbbd8f61a, 0xbb62f61a, /*7034*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch36 = {
36,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch36_ibrt_ins_data_t3),
0x000216f8,
0xbc92f1e5,
0xc0006fc0,
(uint8_t *)bes2300p_patch36_ibrt_ins_data_t3}; // lmp filter
const uint32_t bes2300p_patch37_ibrt_ins_data_t3[] = {
0x47f0e92d, /*7050*/
0x4b97b082, 0x236e5c1e, 0xf300fb03, 0x5a9b4a95, 0x4f00f413, 0x8120f040,
0x46044689, 0x1800ea4f, 0xeb084f91, 0x4b910507, 0xa020f853, 0xf8524a90,
0x33013020, 0x3020f842, 0xf860f635, 0x42a04601, 0x8088f040, 0xf8534b8a,
0x4b8a2024, 0x429a681b, 0xf8dad817, 0xebc22084, 0xf0230309, 0xf1b34378,
0xd9046f80, 0x0302ebc9, 0x4378f023, 0x4a82425b, 0x0024f852, 0x68124a81,
0xf200fb02, 0xf2404293, 0x4b7f80eb, 0x3000f993, 0x4b7eb9c3, 0xc000f893,
0x0f00f1bc, 0x462ad00a, 0x0e0ceb05, 0xf9122300, 0x44030b01, 0xd1fa4572,
0xe0014662, 0x46132200, 0xfcfcfb93, 0xf8804872, 0xe001c000, 0x46132200,
0xf890486f, 0x4870e000, 0x9000f890, 0xf890486f, 0xfa4fc000, 0xebc9f08e,
0xfa4f0000, 0x4550fa8c, 0xebc9dd05, 0x48660e0e, 0xe000f880, 0x4864e002,
0xc000f880, 0x0e00f04f, 0xf840485d, 0xf8dfe024, 0xf85ee178, 0x30010024,
0x0024f84e, 0x7800485d, 0xd2054286, 0x783f4f5a, 0x360155af, 0xe004b2f6,
0x78364e57, 0x6007f808, 0x4f4d2601, 0x4282553e, 0x442ada06, 0xf9124405,
0x44234b01, 0xd1fa42aa, 0xfb934a53, 0x9200f0f0, 0xb2406a14, 0x23002201,
0xe08147a0, 0xf8534b46, 0x4b4e2024, 0x429a681b, 0xf8dad816, 0xebc22084,
0xf0230309, 0xf1b34378, 0xd9046f80, 0x0302ebc9, 0x4378f023, 0x4a3e425b,
0x1024f852, 0x68124a44, 0xf201fb02, 0xd9634293, 0xf9934b42, 0xb9c33000,
0xf8934b3a, 0xf1bee000, 0xd00a0f00, 0xeb05462a, 0x2300000e, 0x1b01f912,
0x4282440b, 0x4672d1fa, 0x2200e001, 0xfb934613, 0x4936fefe, 0xe000f881,
0x2200e001, 0x49334613, 0x49337808, 0xc000f891, 0xf8914932, 0xb241e000,
0x0101ebcc, 0xf98efa4f, 0xdd044549, 0x0000ebcc, 0x7008492a, 0x4929e002,
0xe000f881, 0x491c2000, 0x0024f841, 0xf850481c, 0x31011024, 0x1024f840,
0x7808491c, 0xd2054286, 0x78094920, 0x360155a9, 0xe004b2f6, 0x7809491d,
0x1007f808, 0x490c2601, 0x4282550e, 0x442ada06, 0xf9124405, 0x440b1b01,
0xd1fa42aa, 0xfb934a12, 0x9200f0f0, 0xb2406a15, 0x22014621, 0x47a82300,
0xe8bdb002, 0xbf0087f0,
0xc0006af8, // rssi_idx_for_agc[link_id] shenxin
0xd02111f8, // EM_BT_RD(EM_BT_RXBIT_ADDR
0xc0006afc, // rssi_set_for_agc shenxin
0xc00009d4, // ld_acl_env[link_id]
0xc0006b68, // link_no_sync_count[link_id]
0xc00072fc, // link_agc_thd_tws
0xc0006b78, // link_no_sync_count_time[link_id]
0xc0007300, // link_agc_thd_tws_time
0xc0006b60, // rssi_store_tws
0xc0006af4, // n shenxin
0xc0007304, // rssi_tws_step
0xc0007308, // rssi_min_value_tws
0xc0004268, // rwip_rf.rxgain_cntl
0xc000730c, // link_agc_thd_mobile
0xc0007310, // link_agc_thd_mobile_time
0xc0006b88, // rssi_store_mobile
0xc0007314, // rssi_mobile_step
0xc0007318, // rssi_min_value_mobile
0xffffffff, // link_agc_thd_tws
0x00000030, // link_agc_thd_tws_time
0x00000014, // rssi_tws_step
0x0000009c, // rssi_min_value_tws
0xffffffff, // link_agc_thd_mobile
0x00000030, // link_agc_thd_mobile_time
0x00000014, // rssi_mobile_step
0x000000a1, // rssi_min_value_mobile
0x99029804, 0xfe96f7ff, 0xfc48f632, 0xb898f626, /*7328*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch37 = {
37,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch37_ibrt_ins_data_t3),
0x0002d458,
0xbf60f1d9,
0xc0007050,
(uint8_t *)bes2300p_patch37_ibrt_ins_data_t3}; // swagc no sync
#if 0
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch38 =
{
38,
BTDRV_PATCH_ACT,
0,
0x000340b0,
0xbf00e003,
0,
NULL,
};//ld_sco_stop
#elif 1
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch38 = {
38, BTDRV_PATCH_ACT, 0, 0x00039ecc, 0xbf00e001, 0, NULL,
}; // remove lc_start_lmp_to
#else
const uint32_t bes2300p_patch38_ibrt_ins_data_t3[] = {
0x30d8f8c4, 0xfed6f61f, 0xd2014283, 0xbca7f62a, 0xbcbaf62a, /*7048*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch38 = {
38,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch38_ibrt_ins_data_t3),
0x000319a4,
0xbb48f1d5,
0xc0007038,
(uint8_t *)
bes2300p_patch38_ibrt_ins_data_t3}; // ble first connection anchor
#endif
const uint32_t bes2300p_patch39_ibrt_ins_data_t3[] = {
0x681b4b05, /*732c*/
0xd1032b00, 0x781a9b12, 0xbeb8f60b, 0xbec3f60b, 0xbf00bf00,
0xc0007348, // sniffer_sco_auto_accept
0x00000000, /*7348*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch39 = {
39,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch39_ibrt_ins_data_t3),
0x000130a8,
0xb940f1f4,
0xc000732c,
(uint8_t *)bes2300p_patch39_ibrt_ins_data_t3}; // lm_get_sync_param_hl_rsp
const uint32_t bes2300p_patch40_ibrt_ins_data_t3[] = {
0xfba2f632, 0xd11d2801, 0xfc38f632, 0x4b33b1d0, 0x2b00681b, 0xf632d013,
0x4606fba9, 0xd10e42b8, 0xfb98f632, 0xd15f2800, 0xfb76f632, 0x7a224605,
0x42937a63, 0x4620d103,
0xf99af000, //
0x2000b9d0, 0xbdeff614, 0xfb80f632, 0xd10d2802, 0xfc16f632, 0x4b22b150,
0x2b00681b, 0x4620d006,
0xf988f000, //
0x4b1fb910, 0x601a2201, 0xf0037823, 0xbf000301, 0xbda9f614, 0xf8852602,
0x79a36054, 0x3055f885, 0xf844f5fc, 0x7c4279e3, 0xd802429a, 0xf83ef5fc,
0xf8857c43, 0x79633056, 0x3057f885, 0xf3c37923, 0xf8850340, 0x7a233058,
0x3059f885, 0xf8a58963, 0x7ba3305a, 0x305cf885, 0xf88578e3, 0x78a3305d,
0x305ff885, 0xfb28f632, 0x46384603, 0xf1052110, 0xf6340252, 0x2000fc65,
0xbda3f614,
0xc0007348, // sniffer_sco_auto_accept
0xc0007434, // sco_param_filter_status
0x00000000, 0xfc3cf634, 0xb2c33801, 0xd8022b02, 0xf6342004, 0x2000fc3b,
0xbd91f614, 0x3c260cff, 0x5a3712ff, 0xffffffff, 0xffffffff,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch40 = {
40,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch40_ibrt_ins_data_t3),
0x0001bf10,
0xba1ef1eb,
0xc0007350,
(uint8_t *)
bes2300p_patch40_ibrt_ins_data_t3}; // LMP_MSG_HANDLER(esco_link_req)
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch41 = {
41, BTDRV_PATCH_ACT, 0, 0x0003b818, 0xfb1be001, 0, NULL,
}; // config fastack none mode
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch42 = {
42, BTDRV_PATCH_ACT, 0, 0x0002ceb4, 0xe00b0f0f, 0,
NULL}; // ld_acl_rx() average rssi
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch43 = {
43, BTDRV_PATCH_ACT, 0, 0x0002a51c, 0x3300f443, 0, NULL,
}; // bt_e_scoltcntl_retxnb_setf 2
const uint32_t bes2300p_patch44_ibrt_ins_data_t3[] = {
0xbf00686b, 0xd00f42b3, 0x4a212100, 0x6863e004, 0x42b34629, 0x4625d00a,
0xd9264293, 0xd8242e01, 0x462c461e, 0xe001460d, 0x2500462c, 0x8008f8d4,
0xa00cf894, 0x900df894, 0x46384f16, 0x46224629, 0xfb12f5fc, 0x0014f1a7,
0xf5fc4621, 0xf1b8fa1d, 0xd0050f00, 0x46514630, 0x2300464a, 0xe00847c0,
0x21ff480d, 0xfffaf5ff, 0x682ce003, 0xd1ce2c00, 0xb924e000, 0xf44f4808,
0xf5ff7185, 0xe8bdffef, 0xbf0087f0, 0xc0000954, 0xd02200bc, 0xa00508ec,
0x07fffffc, 0xc0000968, 0xa00508b4,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch44 = {
44,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch44_ibrt_ins_data_t3),
0x0002706c,
0xb9f8f1e0,
0xc0007460,
(uint8_t *)bes2300p_patch44_ibrt_ins_data_t3};
const uint32_t bes2300p_patch45_ibrt_ins_data_t3[] = {
0x4b05b508, 0x2b01681b, 0x2200d104, 0x601a4b02,
0xfe6cf633, 0xbf00bd08, 0xc00076a4, 0x00000000,
0xffeef7ff, 0xd1012b04, 0xbff0f5ff, 0xbff5f5ff, /*76b4*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch45 = {
45,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch45_ibrt_ins_data_t3),
0x00007690,
0xb80af200,
0xc0007688,
(uint8_t *)bes2300p_patch45_ibrt_ins_data_t3}; // dbg state
const uint32_t bes2300p_patch46_ibrt_ins_data_t3[] = {
0x4b06b508, 0x02007a98, 0x0001f040, 0xfb70f5fa, 0xbf183801, 0x30fff04f,
0xbf00bd08, 0xc00064d0, 0xffeef7ff, 0x781bb918, 0xf6342b02, 0xbd08bc89,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch46 = {
46,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch46_ibrt_ins_data_t3),
0x0003b60c,
0xbb70f1cb,
0xc0006cd0,
(uint8_t *)bes2300p_patch46_ibrt_ins_data_t3};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch47 = {
47,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch2a_ibrt_ins_data_t3),
0x0001c528,
0xbc98f1ea, // a001c528 -> a0206e5c
0xc0006e5c,
(uint8_t *)bes2300p_patch2a_ibrt_ins_data_t3}; // LMP_MSG_HANDLER(sniff_req)
// LC_CONNECTED
const uint32_t bes2300p_patch48_ibrt_ins_data_t3[] = {
0x681b4b1d, 0xd1352b00, 0xb083b530, 0x8310f3ef, 0x0f01f013, 0xb672d117,
0x25004c18, 0x95019500, 0xf1044620, 0x2208013c, 0xf5fc2307, 0x9500f9ed,
0xf5049501, 0xf5047080, 0x2208718a, 0xf5fc2307, 0xb662f9e3, 0x4c0de014,
0x95002500, 0x46209501, 0x013cf104, 0x23072208, 0xf9d6f5fc, 0x95019500,
0x7080f504, 0x718af504, 0x23072208, 0xf9ccf5fc, 0xbd30b003, 0xbf004770,
0xc0005df0, 0xc0005b24, 0xffbef7ff, 0xe8bdb004, 0xbf0081f0, /*75a4*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch48 = {
48,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch48_ibrt_ins_data_t3),
0x000013b0,
0xb8f2f206,
0xc0007518,
(uint8_t *)bes2300p_patch48_ibrt_ins_data_t3};
#if 1
const uint32_t bes2300p_patch49_ibrt_ins_data_t3[] = {
0x78004804, 0xbf00b120, 0xfd8cf632, 0xba1af609, 0xba1af609, 0xc0006221,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch49 = {
49,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch49_ibrt_ins_data_t3),
0x000103d8,
0xbddef1f6,
0xc0006f98,
(uint8_t *)bes2300p_patch49_ibrt_ins_data_t3}; // lc_sco_ind
#else
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch49 = {
49, BTDRV_PATCH_ACT, 0, 0x000103d8, 0xbf00e002, 0, NULL,
}; // lc_sco_ind
#endif
const uint32_t bes2300p_patch50_ibrt_ins_data_t3[] = {
0xf632d806, 0x2801fb0b, 0x0209d002, 0xbbeef632, 0xbf00bd08, /*75d0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch50 = {
50,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch50_ibrt_ins_data_t3),
0x00039d98,
0xbc0af1cd,
0xc00075b0,
(uint8_t *)bes2300p_patch50_ibrt_ins_data_t3}; // do not trans stop SCO
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch51 = {
51, BTDRV_PATCH_ACT, 0, 0x0002ea00, 0x8ff8e8bd, 0, NULL,
}; // remove lmp flush
const uint32_t bes2300p_patch52_ibrt_ins_data_t3[] = {
0x4605b5f8, 0xf8544c19, 0xf6327020, 0x4606fb05, 0x4020f854,
0xfaecf632, 0xf632b320, 0x42a8fa61, 0xf897d120, 0x2b023047,
0x2e02d11c, 0xb1ccd81a, 0x3047f894, 0xd1152b02, 0x3040f894,
0x0234b973, 0x0401f044, 0x4620b2a4, 0xfeccf5f9, 0xd0052836,
0x60a2f44f, 0x46224621, 0xfadaf5f9, 0x4b042001, 0xbdf86018,
0x4b022000, 0xbdf86018, 0xc0005de4, 0xc0007668, 0x4638bf00,
0xffc2f7ff, 0x4628d104, 0xfeb0f5f9, 0xfc38f614, 0xbc84f614,
0x00000000, /*7668*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch52 = {
52,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch52_ibrt_ins_data_t3),
0x0001bed0,
0xbbbef1eb,
0xc00075dc,
(uint8_t *)bes2300p_patch52_ibrt_ins_data_t3}; // delay mobile unsniff lmp
const uint32_t bes2300p_patch53_ibrt_ins_data_t3[] = {
0x681b4b03, /*76fc*/
0xd1012b01, /*7700*/
0xfb06f632, /*7704*/
0x81f0e8bd, /*7708*/
0xc0007434, /*770c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch53 = {
53,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch53_ibrt_ins_data_t3),
0x0003a088,
0xbb38f1cd,
0xc00076fc,
(uint8_t *)
bes2300p_patch53_ibrt_ins_data_t3}; // don not trans start ibrt sco
const uint32_t bes2300p_patch54_ibrt_ins_data_t3[] = {
0xbf000a28, 0xffc6f626, 0x0a210a28, 0xb8a4f611, /*767c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch54 = {
54,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch54_ibrt_ins_data_t3),
0x000187c4,
0xbf54f1ee,
0xc0007670,
(uint8_t *)bes2300p_patch54_ibrt_ins_data_t3}; // protect tws tx type
#if 0
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch55 =
{
55,
BTDRV_PATCH_ACT,
0,
0x00030758,
0xbf00e03a,
0,
NULL,
};//decrease the connection time of TWS link in SCO
#else
const uint32_t bes2300p_patch55_ibrt_ins_data_t3[] = {
0x68134a06, 0x2380f023, 0xf5a26013, 0x68137206,
0x0301f023, 0xbf006013, 0xbdaff63e, 0xd0220400, /*77dc*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ibrt_ins_patch55 = {
55,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch55_ibrt_ins_data_t3),
0x00046330,
0xba46f1c1,
0xc00077c0,
(uint8_t *)bes2300p_patch55_ibrt_ins_data_t3}; // disable hw spi in BLE push
#endif
/////2300p t3 ibrt patch (chip id =2)
static const uint32_t best2300p_t3_ibrt_ins_patch_config[] = {
56,
(uint32_t)&bes2300p_t3_ibrt_ins_patch0,
(uint32_t)&bes2300p_t3_ibrt_ins_patch1,
(uint32_t)&bes2300p_t3_ibrt_ins_patch2,
(uint32_t)&bes2300p_t3_ibrt_ins_patch3,
(uint32_t)&bes2300p_t3_ibrt_ins_patch4,
(uint32_t)&bes2300p_t3_ibrt_ins_patch5,
(uint32_t)&bes2300p_t3_ibrt_ins_patch6,
(uint32_t)&bes2300p_t3_ibrt_ins_patch7,
(uint32_t)&bes2300p_t3_ibrt_ins_patch8,
(uint32_t)&bes2300p_t3_ibrt_ins_patch9,
(uint32_t)&bes2300p_t3_ibrt_ins_patch10,
(uint32_t)&bes2300p_t3_ibrt_ins_patch11,
(uint32_t)&bes2300p_t3_ibrt_ins_patch12,
(uint32_t)&bes2300p_t3_ibrt_ins_patch13,
(uint32_t)&bes2300p_t3_ibrt_ins_patch14,
(uint32_t)&bes2300p_t3_ibrt_ins_patch15,
(uint32_t)&bes2300p_t3_ibrt_ins_patch16,
(uint32_t)&bes2300p_t3_ibrt_ins_patch17,
(uint32_t)&bes2300p_t3_ibrt_ins_patch18,
(uint32_t)&bes2300p_t3_ibrt_ins_patch19,
(uint32_t)&bes2300p_t3_ibrt_ins_patch20,
(uint32_t)&bes2300p_t3_ibrt_ins_patch21,
(uint32_t)&bes2300p_t3_ibrt_ins_patch22,
(uint32_t)&bes2300p_t3_ibrt_ins_patch23,
(uint32_t)&bes2300p_t3_ibrt_ins_patch24,
(uint32_t)&bes2300p_t3_ibrt_ins_patch25,
(uint32_t)&bes2300p_t3_ibrt_ins_patch26,
(uint32_t)&bes2300p_t3_ibrt_ins_patch27,
(uint32_t)&bes2300p_t3_ibrt_ins_patch28,
(uint32_t)&bes2300p_t3_ibrt_ins_patch29,
(uint32_t)&bes2300p_t3_ibrt_ins_patch30,
(uint32_t)&bes2300p_t3_ibrt_ins_patch31,
(uint32_t)&bes2300p_t3_ibrt_ins_patch32,
(uint32_t)&bes2300p_t3_ibrt_ins_patch33,
(uint32_t)&bes2300p_t3_ibrt_ins_patch34,
(uint32_t)&bes2300p_t3_ibrt_ins_patch35,
(uint32_t)&bes2300p_t3_ibrt_ins_patch36,
(uint32_t)&bes2300p_t3_ibrt_ins_patch37,
(uint32_t)&bes2300p_t3_ibrt_ins_patch38,
(uint32_t)&bes2300p_t3_ibrt_ins_patch39,
(uint32_t)&bes2300p_t3_ibrt_ins_patch40,
(uint32_t)&bes2300p_t3_ibrt_ins_patch41,
(uint32_t)&bes2300p_t3_ibrt_ins_patch42,
(uint32_t)&bes2300p_t3_ibrt_ins_patch43,
(uint32_t)&bes2300p_t3_ibrt_ins_patch44,
(uint32_t)&bes2300p_t3_ibrt_ins_patch45,
(uint32_t)&bes2300p_t3_ibrt_ins_patch46,
(uint32_t)&bes2300p_t3_ibrt_ins_patch47,
(uint32_t)&bes2300p_t3_ibrt_ins_patch48,
(uint32_t)&bes2300p_t3_ibrt_ins_patch49,
(uint32_t)&bes2300p_t3_ibrt_ins_patch50,
(uint32_t)&bes2300p_t3_ibrt_ins_patch51,
(uint32_t)&bes2300p_t3_ibrt_ins_patch52,
(uint32_t)&bes2300p_t3_ibrt_ins_patch53,
(uint32_t)&bes2300p_t3_ibrt_ins_patch54,
(uint32_t)&bes2300p_t3_ibrt_ins_patch55,
};
#else
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch0 = {
0, BTDRV_PATCH_ACT, 0, 0x000324d4, 0xbf00bf00, 0,
NULL}; // afh filter disable
const uint32_t bes2300p_patch1_ins_data_t3[] = {
0xf8934b09, 0xf0133084, 0xd0050f06, 0xf6374620, 0x4601f839, 0xe0052400,
0xf8934b03, 0xbf003084, 0xb975f636, 0xb9bbf636, 0xc0006568,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch1 = {
1,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch1_ins_data_t3),
0x0003cd08,
0xbe7af1c9,
0xc0006a00,
(uint8_t *)bes2300p_patch1_ins_data_t3}; // set ble adv data
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch2 = {
2, BTDRV_PATCH_ACT, 0, 0x0003cbf0, 0xbf00e004, 0,
NULL}; // set ble scan response data
const uint32_t bes2300p_patch3_ins_data_t3[] = {
/*6a98*/ 0x99049803,
/*6a9c*/ 0x4b12b470,
/*6aa0*/ 0x010e5c5a,
/*6aa4*/ 0x19734d11,
/*6aa8*/ 0x78244c11,
/*6aac*/ 0xd20342a2,
/*6ab0*/ 0x32015498,
/*6ab4*/ 0xe001b2d2,
/*6ab8*/ 0x22015570,
/*6abc*/ 0x5442480a,
/*6ac0*/ 0x461ab14c,
/*6ac4*/ 0x23001919,
/*6ac8*/ 0x0b01f912,
/*6acc*/ 0xbf004403,
/*6ad0*/ 0xd1f9428a,
/*6ad4*/ 0x2300e000,
/*6ad8*/ 0xf0f4fb93,
/*6adc*/ 0xbc70b240,
/*6ae0*/ 0x22019904,
/*6ae4*/ 0xba00f626, // jump a0206ae4 -> a002cee8
/*6ae8*/ 0xc0006af8, // addr of rssi_idx_for_agc
/*6aec*/ 0xc0006afc, // addr of rssi_set_for_agc
/*6af0*/ 0xc0006af4, // addr of N
/*6af4*/ 0x00000005, // N : 1 ~ 16
/*6af8*/ 0x00000000, // rssi_idx_for_agc[3]
/*6afc*/ 0xbabababa, // rssi_set_for_agc[3*16]
/*6b00*/ 0xbabababa,
/*6b04*/ 0xbabababa,
/*6b08*/ 0xbabababa,
/*6b0c*/ 0xbabababa,
/*6b10*/ 0xbabababa,
/*6b14*/ 0xbabababa,
/*6b18*/ 0xbabababa,
/*6b1c*/ 0xbabababa,
/*6b20*/ 0xbabababa,
/*6b24*/ 0xbabababa,
/*6b28*/ 0xbabababa,
/*6b2c*/ 0xbabababa,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch3_ins_data_t3),
0x0002cee4,
0xbdd8f1d9, // jump a002cee4 -> a0206a98
0xc0006a98,
(uint8_t *)bes2300p_patch3_ins_data_t3}; // ld_acl_rx() average rssi
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch4 = {
4, BTDRV_PATCH_ACT, 0, 0x0002ceb4, 0xe00b0f0f, 0,
NULL}; // ld_acl_rx() average rssi
const uint32_t bes2300p_patch5_ins_data_t3[] = {
0x2028f843, /*6b3c*/
0xf8434b08, 0x4b052028, 0x4b0e701a, 0x2201701a, 0xf8434b08,
0xbf002028, 0xba32f624, 0xc0006b60, 0x00000000, 0xc0006b68,
0x00000000, 0x00000000, 0x00000000, 0xc0006b78, 0x00000001,
0x00000001, 0x00000001, 0xc0006b88, 0x00000000, /*6b88*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch5 = {
5,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch5_ins_data_t3),
0x0002afbc,
0xbdbef1db,
0xc0006b3c,
(uint8_t *)bes2300p_patch5_ins_data_t3}; // sync clear count
const uint32_t bes2300p_patch6_ins_data_t3[] = {
0x47f0e92d, /*7050*/
0x4b97b082, 0x236e5c1e, 0xf300fb03, 0x5a9b4a95, 0x4f00f413, 0x8120f040,
0x46044689, 0x1800ea4f, 0xeb084f91, 0x4b910507, 0xa020f853, 0xf8524a90,
0x33013020, 0x3020f842, 0xf860f635, 0x42a04601, 0x8088f040, 0xf8534b8a,
0x4b8a2024, 0x429a681b, 0xf8dad817, 0xebc22084, 0xf0230309, 0xf1b34378,
0xd9046f80, 0x0302ebc9, 0x4378f023, 0x4a82425b, 0x0024f852, 0x68124a81,
0xf200fb02, 0xf2404293, 0x4b7f80eb, 0x3000f993, 0x4b7eb9c3, 0xc000f893,
0x0f00f1bc, 0x462ad00a, 0x0e0ceb05, 0xf9122300, 0x44030b01, 0xd1fa4572,
0xe0014662, 0x46132200, 0xfcfcfb93, 0xf8804872, 0xe001c000, 0x46132200,
0xf890486f, 0x4870e000, 0x9000f890, 0xf890486f, 0xfa4fc000, 0xebc9f08e,
0xfa4f0000, 0x4550fa8c, 0xebc9dd05, 0x48660e0e, 0xe000f880, 0x4864e002,
0xc000f880, 0x0e00f04f, 0xf840485d, 0xf8dfe024, 0xf85ee178, 0x30010024,
0x0024f84e, 0x7800485d, 0xd2054286, 0x783f4f5a, 0x360155af, 0xe004b2f6,
0x78364e57, 0x6007f808, 0x4f4d2601, 0x4282553e, 0x442ada06, 0xf9124405,
0x44234b01, 0xd1fa42aa, 0xfb934a53, 0x9200f0f0, 0xb2406a14, 0x23002201,
0xe08147a0, 0xf8534b46, 0x4b4e2024, 0x429a681b, 0xf8dad816, 0xebc22084,
0xf0230309, 0xf1b34378, 0xd9046f80, 0x0302ebc9, 0x4378f023, 0x4a3e425b,
0x1024f852, 0x68124a44, 0xf201fb02, 0xd9634293, 0xf9934b42, 0xb9c33000,
0xf8934b3a, 0xf1bee000, 0xd00a0f00, 0xeb05462a, 0x2300000e, 0x1b01f912,
0x4282440b, 0x4672d1fa, 0x2200e001, 0xfb934613, 0x4936fefe, 0xe000f881,
0x2200e001, 0x49334613, 0x49337808, 0xc000f891, 0xf8914932, 0xb241e000,
0x0101ebcc, 0xf98efa4f, 0xdd044549, 0x0000ebcc, 0x7008492a, 0x4929e002,
0xe000f881, 0x491c2000, 0x0024f841, 0xf850481c, 0x31011024, 0x1024f840,
0x7808491c, 0xd2054286, 0x78094920, 0x360155a9, 0xe004b2f6, 0x7809491d,
0x1007f808, 0x490c2601, 0x4282550e, 0x442ada06, 0xf9124405, 0x440b1b01,
0xd1fa42aa, 0xfb934a12, 0x9200f0f0, 0xb2406a15, 0x22014621, 0x47a82300,
0xe8bdb002, 0xbf0087f0,
0xc0006af8, // rssi_idx_for_agc[link_id] shenxin
0xd02111f8, // EM_BT_RD(EM_BT_RXBIT_ADDR
0xc0006afc, // rssi_set_for_agc shenxin
0xc00009d4, // ld_acl_env[link_id]
0xc0006b68, // link_no_sync_count[link_id]
0xc00072fc, // link_agc_thd_tws
0xc0006b78, // link_no_sync_count_time[link_id]
0xc0007300, // link_agc_thd_tws_time
0xc0006b60, // rssi_store_tws
0xc0006af4, // n shenxin
0xc0007304, // rssi_tws_step
0xc0007308, // rssi_min_value_tws
0xc0004268, // rwip_rf.rxgain_cntl
0xc000730c, // link_agc_thd_mobile
0xc0007310, // link_agc_thd_mobile_time
0xc0006b88, // rssi_store_mobile
0xc0007314, // rssi_mobile_step
0xc0007318, // rssi_min_value_mobile
0xffffffff, // link_agc_thd_tws
0x00000030, // link_agc_thd_tws_time
0x00000014, // rssi_tws_step
0x0000009c, // rssi_min_value_tws
0xffffffff, // link_agc_thd_mobile
0x00000030, // link_agc_thd_mobile_time
0x00000014, // rssi_mobile_step
0x000000a1, // rssi_min_value_mobile
0x99029804, 0xfe96f7ff, 0xfc48f632, 0xb898f626, /*7328*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch6 = {
6,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch6_ins_data_t3),
0x0002d458,
0xbf60f1d9,
0xc0007050,
(uint8_t *)bes2300p_patch6_ins_data_t3}; // swagc no sync
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch7 = {
7, BTDRV_PATCH_ACT, 0, 0x0000e47a, 0xe0027b20, 0,
NULL}; // lm_inq_res_ind_handler() rssi
const uint32_t bes2300p_patch8_ins_data_t3[] = {
0x2300b430, 0x4d072103, 0x4290b2da, 0xf855d004, 0x2c004023,
0x4611bf18, 0x2b033301, 0x4608d1f4, 0x4770bc30, 0xc00009d4,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch8 = {
8,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch8_ins_data_t3),
0x0002c8c0,
0xbb2ef1da,
0xc0006f20,
(uint8_t *)bes2300p_patch8_ins_data_t3}; // find_other_acl_link
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch9 = {
9, BTDRV_PATCH_ACT, 0, 0x000123e8, 0xf7f1bf00, 0,
NULL}; // ignore lm_get_nb_acl(MASTER_FLAG|SLAVE_FLAG) > 1 when cal wesco
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch10 = {
10, BTDRV_PATCH_ACT, 0, 0x0002ff48, 0xd9590f05, 0, NULL,
}; // ignore bld_sco_retransmit_dec function
const uint32_t bes2300p_patch11_ins_data_t3[] = {
0x304bf996,
0x44233302,
0xbbfcf629,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch11 = {
11,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch11_ins_data_t3),
0x00030748,
0xbbfef1d6,
0xc0006f48,
(uint8_t *)bes2300p_patch11_ins_data_t3}; // ld_calculate_timestamp
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch12 = {
12, BTDRV_PATCH_ACT, 0, 0x0001bcf4, 0xbf00e004, 0, NULL,
}; // LMP_MSG_HANDLER(max_slot_req)
const uint32_t bes2300p_patch13_ins_data_t3[] = {
0x3040f894, 0xd1032b00, 0x222a210b, 0xbe00f616, 0xbd06f616};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch13 = {
13,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch13_ins_data_t3),
0x0001d63c,
0xb9f8f1e9,
0xc0006a30,
(uint8_t *)bes2300p_patch13_ins_data_t3}; // LMP_MSG_HANDLER(aurand)
const uint32_t bes2300p_patch14_ins_data_t3[] = {
0xf8534b04, 0x46283026, 0x135ef893, 0xfc62f5fa, 0xbd55f616, 0xc0005de4};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch14 = {
14,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch14_ins_data_t3),
0x0001d4f4,
0xbaa6f1e9,
0xc0006a44,
(uint8_t *)bes2300p_patch14_ins_data_t3}; // LMP_MSG_HANDLER(aurand)
const uint32_t bes2300p_patch15_ins_data_t3[] = {
0x3040f897, 0xd1032b00, 0xbbacf617,
0x21234620, 0xf836f610, 0xbc8bf617 /*0xc0006a74*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch15 = {
15,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch15_ins_data_t3),
0x0001e1c0,
0xbc4ef1e8,
0xc0006a60,
(uint8_t *)bes2300p_patch15_ins_data_t3}; // LMP_MSG_HANDLER(not_accepted)
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch16 = {
16, BTDRV_PATCH_ACT, 0, 0x0002ea00, 0x8ff8e8bd, 0, NULL,
}; // remove lmp flush
const uint32_t bes2300p_patch17_ins_data_t3[] = {
0xfe4af5f9, 0xbf002300, 0x30c8f884, 0xbaf8f624, /*6f18*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch17 = {
17,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch17_ins_data_t3),
0x0002b508,
0xbd00f1db,
0xc0006f0c,
(uint8_t *)bes2300p_patch17_ins_data_t3}; /// role switch fail
const uint32_t bes2300p_patch18_ins_data_t3[] = {
0xbf004628, 0xfdc4f60d, 0x21144628, 0xba4af60f, /*6c94*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch18 = {
18,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch18_ins_data_t3),
0x00016128,
0xbdaef1f0,
0xc0006c88,
(uint8_t *)bes2300p_patch18_ins_data_t3}; // start lmp to before sending
// LMP_HostConnectionReq
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch19 = {
19, BTDRV_PATCH_ACT, 0, 0x00020640, 0xe00dbf00, 0, NULL,
}; // detach directly
const uint32_t bes2300p_patch20_ins_data_t3[] = {
0x305af893, 0xd1032b00, 0x12f4f240,
0xbf00e002, 0x32b8f640, 0xbe30f60d, /*6bdc*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch20 = {
20,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch20_ins_data_t3),
0x0001483c,
0xb9c4f1f2,
0xc0006bc8,
(uint8_t *)bes2300p_patch20_ins_data_t3}; // lmp to 5s before connection cmp
// sent
const uint32_t bes2300p_patch21_ins_data_t3[] = {
0x4603b508, 0x8210f3ef, 0x0f01f012, 0xb672d112, 0xf5a34811, 0x3b285343,
0xfba14910, 0xf3c32303, 0xeb032387, 0xeb000343, 0x31940183, 0xfdd0f5fc,
0xbd08b662, 0xf5a34808, 0x3b285343, 0xfba14907, 0xf3c32303, 0xeb032387,
0xeb000343, 0x31940183, 0xfdbef5fc, 0xbf00bd08, 0xc0005b4c, 0xff00ff01,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch21 = {
21,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch21_ins_data_t3),
0x00008b24,
0xb8f8f1fe,
0xc0006d18,
(uint8_t *)bes2300p_patch21_ins_data_t3}; // add lock interrupt when free
// acl buf
const uint32_t bes2300p_patch22_ins_data_t3[] = {
0x2040f897, /*6e00*/
0xd1112a01, 0x0109f106, 0xf5fc4608, 0x2813fd4b, 0x221ed802, 0xbc54f614,
0x2a017a32, 0xf614d801, 0x221ebbf6, 0xbc4cf614, 0xbc47f614, /*6e2c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch22 = {
22,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch22_ins_data_t3),
0x0001b604,
0xbbfcf1eb,
0xc0006e00,
(uint8_t *)bes2300p_patch22_ins_data_t3}; // reject set afh lmp when channel
// number less than 20
/*patch 23,24 for HiSilicon,BCS4.2,ver0x608 and Broadcom,BCS4.2,ver0x6106
* Enhanced Data Rate problem*/
const uint32_t bes2300p_patch23_ins_data_t3[] = {
0x0a00b538, /*c0006b90*/
0xf8534b08, 0xb2c45020, 0xf6274620, 0x4620fdaf,
0xf895210b, 0xf61d2046, 0x2201ff63, 0x701a4b02,
0xbf00bd38, 0xc0005de4, 0xc0006bc0, 0x00000000 /*c0006bc0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch23 = {
23,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch23_ins_data_t3),
0x000144fc,
0xbb48f1f2,
0xc0006b90,
(uint8_t *)bes2300p_patch23_ins_data_t3}; // table request
const uint32_t bes2300p_patch24_ins_data_t3[] = {
0x0a00b538, /*c0006be0*/
0xf8534b0f, 0xb2c45020, 0x104df895, 0x31004620, 0x2101bf18,
0xfab8f628, 0x8d298ea8, 0xf61d2201, 0x4601f9f7, 0xf6284620,
0x2301fae5, 0x3062f885, 0xf6274620, 0x2200fd7f, 0x701a4b02,
0xbf00bd38, 0xc0005de4, 0xc0006bc0, 0x78244c04, 0x4628b114,
0xffd4f7ff, 0xb00d2000, 0x83f0e8bd, 0xc0006bc0 /*c0006c40*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch24 = {
24,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch24_ins_data_t3),
0x00023eb8,
0xbeb8f1e2,
0xc0006be0,
(uint8_t *)bes2300p_patch24_ins_data_t3}; // table request configure
/*end patch 23,24 for HiSilicon,BCS4.2,ver0x608 and Broadcom,BCS4.2,ver0x6106
* Enhanced Data Rate problem*/
const uint32_t bes2300p_patch25_ins_data_t3[] = {
0xfa80f5fc, /*c0006f58*/
0xb9737f43, 0x2b01786b, 0x2b03d01a, 0x2b05d010, 0xf896d00e,
0x22203044, 0x4620212e, 0xfd90f61d, 0xf896e010, 0x212e2044,
0xf61d4620, 0xe009fd65, 0xfd70f60c, 0xd1ec2800, 0x325ef896,
0xd1e82b00, 0xbeb0f614, 0xbec1f614, /*c0006fa0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch25 = {
25,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch25_ins_data_t3),
0x0001bcb8,
0xb94ef1eb,
0xc0006f58,
(uint8_t *)bes2300p_patch25_ins_data_t3}; // LMP_MSG_HANDLER(max_slot_req)
const uint32_t bes2300p_patch26_ins_data_t3[] = {
0x681b4b16, 0xd0222b00, 0xf8b34b16, 0xf01331c0, 0xd1000f18, 0x4b13e020,
0x71c2f893, 0xff12f61f, 0xd0192f02, 0xf8534b10, 0x2b003027, 0x6b5ad014,
0xd9074282, 0xf8931a10, 0xeb033042, 0x42980343, 0x2200d80a, 0x46204611,
0xfa62f629, 0x4620e004, 0xbf002100, 0xbe0cf629, 0xbe0df629,
0xc0007008, // sco_start_delay_flag
0x00000000,
0xc0005ea8, // ld_env
0xc00009e4, // ld_sco_env
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch26 = {
26,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch26_ins_data_t3),
0x00030c14,
0xb9c8f1d6,
0xc0006fa8,
(uint8_t *)bes2300p_patch26_ins_data_t3}; // ld_acl_sched
const uint32_t bes2300p_patch27_ins_data_t3[] = {
0xf0234413, 0x63634378, 0x68094904, 0x4904b121,
0xfb016809, 0x63633300, 0xba5af62c,
0xc0007008, // sco_start_delay_flag
0xc000703c, // sco_anchor_start_add
0x0000000a,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch27 = {
27,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch27_ins_data_t3),
0x000334e0,
0xbd9af1d3,
0xc0007018,
(uint8_t *)bes2300p_patch27_ins_data_t3}; // ld_sco_start
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch28 = {
28, BTDRV_PATCH_ACT, 0, 0x00019f54, 0xbf00e00b, 0, NULL,
}; // lc_sync_ind
// send max_slot anyway
const uint32_t bes2300p_patch29_ins_data_t3[] = {
0xf8862001,
0xf8860060,
0xbf000061,
0xbba3f611,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch29 = {
29,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch29_ins_data_t3),
0x00018f1c,
0xbc62f1ee,
0xc00077e4,
(uint8_t *)bes2300p_patch29_ins_data_t3}; // ignore 0x5d sm
// for ble master update con param with large winsize
const uint32_t bes2300p_patch30_ins_data_t3[] = {
0x4630bf00, 0x109ef894, 0xf958f63f, 0x309cf894,
0x2271f240, 0x0003fb02, 0xbcf1f63f,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch30 = {
30,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch30_ins_data_t3),
0x000471e4,
0xbb08f1c0,
0xc00077f8,
(uint8_t *)bes2300p_patch30_ins_data_t3};
static const uint32_t best2300p_t3_ins_patch_config[] = {
31,
(uint32_t)&bes2300p_t3_ins_patch0,
(uint32_t)&bes2300p_t3_ins_patch1,
(uint32_t)&bes2300p_t3_ins_patch2,
(uint32_t)&bes2300p_t3_ins_patch3,
(uint32_t)&bes2300p_t3_ins_patch4,
(uint32_t)&bes2300p_t3_ins_patch5,
(uint32_t)&bes2300p_t3_ins_patch6,
(uint32_t)&bes2300p_t3_ins_patch7,
(uint32_t)&bes2300p_t3_ins_patch8,
(uint32_t)&bes2300p_t3_ins_patch9,
(uint32_t)&bes2300p_t3_ins_patch10,
(uint32_t)&bes2300p_t3_ins_patch11,
(uint32_t)&bes2300p_t3_ins_patch12,
(uint32_t)&bes2300p_t3_ins_patch13,
(uint32_t)&bes2300p_t3_ins_patch14,
(uint32_t)&bes2300p_t3_ins_patch15,
(uint32_t)&bes2300p_t3_ins_patch16,
(uint32_t)&bes2300p_t3_ins_patch17,
(uint32_t)&bes2300p_t3_ins_patch18,
(uint32_t)&bes2300p_t3_ins_patch19,
(uint32_t)&bes2300p_t3_ins_patch20,
(uint32_t)&bes2300p_t3_ins_patch21,
(uint32_t)&bes2300p_t3_ins_patch22,
(uint32_t)&bes2300p_t3_ins_patch23,
(uint32_t)&bes2300p_t3_ins_patch24,
(uint32_t)&bes2300p_t3_ins_patch25,
(uint32_t)&bes2300p_t3_ins_patch26,
(uint32_t)&bes2300p_t3_ins_patch27,
(uint32_t)&bes2300p_t3_ins_patch28,
(uint32_t)&bes2300p_t3_ins_patch29,
(uint32_t)&bes2300p_t3_ins_patch30,
};
#endif
#ifndef IBRT
/***************************************************************************
*
* instruction patch Information
*
* BT ROM Chip Version:1302 T2(CHIP ID=1)
*
* __BT_ONE_BRING_TWO__ function
*
****************************************************************************/
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch0 = {
0, BTDRV_PATCH_ACT, 0, 0x00030d48, 0xbf00bf00, 0,
NULL}; // set lsto when there is no connect
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch1 = {
1, BTDRV_PATCH_ACT, 0, 0x00019acc, 0xbf00e003, 0, NULL}; ////iocap rsp
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch2 = {
2, BTDRV_PATCH_ACT, 0, 0x0001a7a4, 0xbf00e003, 0,
NULL}; // pwer rsp in wrong state
const uint32_t bes2300p_patch3_ins_data_t2[] = {
0xf5fa4620, /*6900*/
0x285dfd4b, 0xf240d10e, 0x46215005, 0xf84cf5fa, /*6910*/
0xf8534b05, 0x46203026, 0x135ef893, 0xfcd0f5fa, /*6920*/
0xb9f3f617, 0xb9ebf617, 0xc0005cd8, /*692c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch3_ins_data_t2),
0x0001dcfc,
0xbe00f1e8,
0xc0006900,
(uint8_t *)bes2300p_patch3_ins_data_t2}; // not accept
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch4 = {
4, BTDRV_PATCH_ACT, 0, 0x0002a4a4, 0xbf8c7f80, 0,
NULL}; // LD_ACL_STOP_NOTIF_BIT_OFF_THR
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch5 = {
5, BTDRV_PATCH_ACT, 0, 0x0002a7e4, 0x7f80f5b3, 0,
NULL}; // LD_ACL_STOP_NOTIF_BIT_OFF_THR
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch6 = {
6, BTDRV_PATCH_ACT, 0, 0x0002a69c, 0xbf947f80, 0,
NULL}; // LD_ACL_STOP_NOTIF_BIT_OFF_THR
const uint32_t bes2300p_patch7_ins_data_t2[] = {
0xd01e0fdb, /*6930*/
0x6307f44f, 0xf304fb03, 0x48168f6a, 0x93011810, /*6940*/
0x49154418, 0xfea0f644, 0x58fb4b14, 0x4301f3c3, /*6950*/
0xf1028f2a, 0xf5024250, 0xf2021205, 0x8f6942fc, /*6960*/
0x0241eb02, 0x440a9901, 0x600a490d, 0xf44fe010, /*6970*/
0xfb036307, 0x9301f304, 0x18184806, 0x8f6a4906, /*6980*/
0xfe82f644, 0x58fb4b05, 0x4381f3c3, 0xba27f62e, /*6990*/
0xba2df62e,
0xd02144fc, 0xc000593c, 0xd0220144, /*69a0*/
0xc000005c, /*69a4*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch7 = {
7,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch7_ins_data_t2),
0x00034d80,
0xbdd6f1d1,
0xc0006930,
(uint8_t *)bes2300p_patch7_ins_data_t2}; // ld_sco_frm_isr
const uint32_t bes2300p_patch8_ins_data_t2[] = {
0xf6052002, /*69a8*/
0x2802ffbf, 0xf898d110, /*69b0*/
0x230120b2, 0x4a074093, 0x21c0f8b2, 0x0303ea22, /*69c0*/
0x0341f3c3, 0xf8524a04, 0xbf003023, 0xbbecf625, /*69d0*/
0xbbeef625,
0xc0005d9c, // ld_env
0xc0000998, // ld_acl_env /*69dc*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch8 = {
8,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch8_ins_data_t2),
0x0002c188,
0xbc0ef1da,
0xc00069a8,
(uint8_t *)bes2300p_patch8_ins_data_t2}; // ld_event_timestamp_calculate
const uint32_t bes2300p_patch9_ins_data_t2[] = {
0xf8934b07, /*69e0*/
0xf0133084, 0xd0070f06, 0xf6364620, 0x4601fa4b, /*69f0*/
0xbf002400, 0xbbd2f635, 0xbb91f635,
0xc0006460, // llm_le_env /*6a00*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch9 = {
9,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch9_ins_data_t2),
0x0003c11c,
0xbc60f1ca,
0xc00069e0,
(uint8_t *)bes2300p_patch9_ins_data_t2}; // hci_le_set_adv_data_cmd_handler
const uint32_t bes2300p_patch10_ins_data_t2[] = {
0x123ff240, /*6a04*/
0xd006421a, 0x2b007aab, 0x2201d003, /*6a10*/
0x601a4b05, 0x2201e002, 0x601a4b03, 0xf240892b, /*6a20*/
0xbf00123f, 0xbc1af63e,
0xc0006a30, // le_wrong_packet
0x00000000, /*6a30*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch10 = {
10,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch10_ins_data_t2),
0x0004525c,
0xbbd2f1c1,
0xc0006a04,
(uint8_t *)bes2300p_patch10_ins_data_t2}; // lld_pdu_rx_handler
const uint32_t bes2300p_patch11_ins_data_t2[] = {
0xf894b952, /*6a34*/
0xf01330ae, 0xd1050f09, 0x209ff894, /*6a40*/
0x4a03b912, 0xb10a6812, 0xbc05f63f, 0xbc09f63f, /*6a50*/
0xc0006a30, /*6a54*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch11 = {
11,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch11_ins_data_t2),
0x00046248,
0xbbf4f1c0,
0xc0006a34,
(uint8_t *)bes2300p_patch11_ins_data_t2}; // lld_evt_restart
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch12 = // from bes2300p_t2_ibrt_ins_patch2
{12, BTDRV_PATCH_ACT, 0, 0x00007024, 0xbf00e011, 0,
NULL}; // dont call rwip_assert_err when assert error
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch13 = // from bes2300p_t2_ibrt_ins_patch4
{13, BTDRV_PATCH_ACT, 0, 0x0002be90, 0xbd702000, 0,
NULL}; // ld_check_if_need_protect_sniff retrun 0
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch14 = // from bes2300p_t2_ibrt_ins_patch9
{
14, BTDRV_PATCH_ACT, 0, 0x0002d82c, 0x2b006013, 0, NULL,
}; // ld_acl_rsw_rx
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch15 = // from bes2300p_t2_ibrt_ins_patch10
{
15, BTDRV_PATCH_ACT, 0, 0x0002fe60, 0xbf00e001, 0, NULL,
}; // ld_acl_flow_on
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch16 = // from bes2300p_t2_ibrt_ins_patch12
{16, BTDRV_PATCH_ACT, 0, 0x0002a41c, 0xbf000f01, 0,
NULL}; // mode == SYNC2_SCO_MODE
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch17 = // from bes2300p_t2_ibrt_ins_patch17
{
17, BTDRV_PATCH_ACT,
0,
0x00007010, // a0007010
0xb9bef000, // jump a0007390
0, NULL,
}; // DEF_IRQHandler
const uint32_t bes2300p_patch18_ins_data_t2[] = {
0x4681b083, /*6b30*/
0x4b022200, 0x2020f843, 0xbddcf623, 0xc0006b44,
0x00000000, 0x00000000, 0x00000000, /*6b4c*/
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch18 = // from bes2300p_t2_ibrt_ins_patch22
{18,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch18_ins_data_t2),
0x0002a6f4,
0xba1cf1dc,
0xc0006b30,
(uint8_t *)bes2300p_patch18_ins_data_t2}; // sync clear count
const uint32_t bes2300p_patch19_ins_data_t2[] = {
/*6ba0*/ 0xbf0080c6,
/*6ba4*/ 0x71022200,
/*6ba8*/ 0xbb2af619, // jump a0020200
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch19 = // from bes2300p_t2_ibrt_ins_patch29
{19,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch19_ins_data_t2),
0x000201f8,
0xbcd2f1e6, // jump a00201f8 -> a0206ba0
0xc0006ba0,
(uint8_t *)
bes2300p_patch19_ins_data_t2}; // KE_MSG_HANDLER(lc_op_loc_sniff_req,
// void)
const uint32_t bes2300p_patch20_ins_data_t2[] = {
/*6bac*/ 0x46286825,
/*6bb0*/ 0x303ef895,
/*6bb4*/ 0xd0012b02,
/*6bb8*/ 0xbda2f622, // jump a0029700
/*6bbc*/ 0xbf002300,
/*6bc0*/ 0x303ef885,
/*6bc4*/ 0xfea6f622, // call a0029914
/*6bc8*/ 0xbdc1f622, // jump a002974e
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch20 = // from bes2300p_t2_ibrt_ins_patch30
{20,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch20_ins_data_t2),
0x000296fc,
0xba56f1dd, // jump a00296fc -> a0206bac
0xc0006bac,
(uint8_t *)bes2300p_patch20_ins_data_t2}; // ld_pscan_frm_cbk
const uint32_t bes2300p_patch21_ins_data_t2[] = {
0x4620461d, /*6d00*/
0x463a4629, 0xf5f94633, 0xbdf8fc2b, /*6d0c*/
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch21 = // from bes2300p_t2_ibrt_ins_patch0
{21,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch21_ins_data_t2),
0x000070ec,
0xbe08f1ff,
0xc0006d00,
(uint8_t *)bes2300p_patch21_ins_data_t2}; // assert warn
const uint32_t bes2300p_patch22_ins_data_t2[] = {
0x4630461f, /*6d14*/
0x462a4639, 0xf5f94623, 0xbdf8fc21, /*6d20*/
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch22 = // from bes2300p_t2_ibrt_ins_patch1
{22,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch22_ins_data_t2),
0x00007070,
0xbe50f1ff,
0xc0006d14,
(uint8_t *)bes2300p_patch22_ins_data_t2}; // assert param
const uint32_t bes2300p_patch23_ins_data_t2[] = {
0x2a140c92, /*6d30*/
0x2214bf28, 0xbf004691, 0xbc44f623, /*6d3c*/
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch23 = // from bes2300p_t2_ibrt_ins_patch40
{23,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch23_ins_data_t2),
0x0002a5c4,
0xbbb4f1dc,
0xc0006d30,
(uint8_t *)bes2300p_patch23_ins_data_t2}; // max_drift limit
const uint32_t bes2300p_patch24_ins_data_t2[] = {
/*6d9c*/ 0x4b179a0b,
/*6da0*/ 0xd023429a,
/*6da4*/ 0x20b5f894,
/*6da8*/ 0xb9fab2d2,
/*6dac*/ 0xf9b4b22e,
/*6db0*/ 0x1b9b3098,
/*6db4*/ 0xf9b24a0f,
/*6db8*/ 0x42932000,
/*6dbc*/ 0x4251da05,
/*6dc0*/ 0xdd02428b,
/*6dc4*/ 0x7088f8d4,
/*6dc8*/ 0x4293e00f,
/*6dcc*/ 0xf8d4dd05,
/*6dd0*/ 0x3f017088,
/*6dd4*/ 0x4778f027,
/*6dd8*/ 0x4252e007,
/*6ddc*/ 0xda044293,
/*6de0*/ 0x7088f8d4,
/*6de4*/ 0xf0273701,
/*6de8*/ 0xbf004778,
/*6dec*/ 0x708cf8c4,
/*6df0*/ 0xbce4f623, // jump a002a7bc
/*6df4*/ 0xc0006df8,
/*6df8*/ 0x00000032, // 50
/*6dfc*/ 0xa003477b, // ld_acl_sniff_frm_isr lr
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch24 = // from bes2300p_t2_ibrt_ins_patch46
{24,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch24_ins_data_t2),
0x0002a7b8,
0xbaf0f1dc, // jump a002a7b8 -> a0206d9c
0xc0006d9c,
(uint8_t *)bes2300p_patch24_ins_data_t2}; // ld_acl_rx_sync clk_off cal
// active mode
const uint32_t bes2300p_patch25_ins_data_t2[] = {
/*6e10*/ 0xbf00669a,
/*6e14*/ 0x66da466a, // mov r2, sp; str r2, [r3, #108]
/*6e18*/ 0x8208f3ef, // mrs r2, MSP
/*6e1c*/ 0xbf00671a, // str r2, [r3, #112]
/*6e20*/ 0x8209f3ef, // mrs r2, PSP
/*6e24*/ 0xbf00675a, // str r2, [r3, #116]
/*6e28*/ 0xbf00bf00,
/*6e2c*/ 0xbf00bf00,
/*6e30*/ 0xbf00bf00,
/*6e34*/ 0xbf00bf00,
/*6e38*/ 0xbf00bf00,
/*6e3c*/ 0xbf00bf00,
/*6e40*/ 0xbf00bf00,
/*6e44*/ 0xbf00bf00,
/*6e48*/ 0xbf00bf00,
/*6e4c*/ 0xbf00bf00,
/*6e50*/ 0xba90f600, // jump a0206e50 -> a0007374
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch25 = // from bes2300p_t2_ibrt_ins_patch15
{25,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch25_ins_data_t2),
0x00007360,
0xbd56f1ff, // jump a0007360 -> a0206e10
0xc0006e10,
(uint8_t *)bes2300p_patch25_ins_data_t2}; // bt_assert_crash_dump
#define PATCH_IN_EXTRA_SPACE 1
#if PATCH_IN_EXTRA_SPACE
const uint32_t bes2300p_patch26_ins_data_t2[] = {
0xd8092b01, /*70d0*/
0xfb03236e, 0x4a04f308, 0xf4135a9b, 0xd1016f00, /*70e0*/
0xb919f629, 0xb9aef629, 0xd0211200, /*70ec*/
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch26 = // from bes2300p_t2_ibrt_ins_patch44
{26,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch26_ins_data_t2),
0x00030314,
0xbedcf1d6,
0xc00070d0,
(uint8_t *)bes2300p_patch26_ins_data_t2}; // lmp tx for tx desc error
const uint32_t bes2300p_patch27_ins_data_t2[] = {
0xfeecf5f8, /*7300*/
0xbf00bf00, 0x8310f3ef, 0x0401f013, 0xb672d108, /*7310*/
0xff22f5f8, 0xbf30b110, 0xd1ef2c00, 0xe7edb662, /*7320*/
0xff1af5f8, 0xd1f62800, 0xbf00e7e8, /*732c*/
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch27 = // from bes2300p_t2_ibrt_ins_patch13
{27,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch27_ins_data_t2),
0x0000721c,
0xb870f200,
0xc0007300,
(uint8_t *)bes2300p_patch27_ins_data_t2};
const uint32_t bes2300p_patch28_ins_data_t2[] = {
0xf885b2db, /*7338*/
0xf89530bd, 0x2a0220b4, /*7340*/
0xb98bd114, 0xf8534b0a, 0xf6430024, 0xf895fd15, /*7350*/
0x2b0430b5, 0x4620d103, 0xf6232116, 0x4620fc61, /*7360*/
0xf6242116, 0xbf00f961, 0xbc6bf62d, 0xbc53f62d, /*7370*/
0xc0000998, /*7374*/
};
const BTDRV_PATCH_STRUCT
bes2300p_t2_ins_patch28 = // from bes2300p_t2_ibrt_ins_patch15
{28,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch28_ins_data_t2),
0x00034c14,
0xbb90f1d2,
0xc0007338,
(uint8_t *)bes2300p_patch28_ins_data_t2}; // no disconnect evt
#endif /* PATCH_IN_EXTRA_SPACE */
/////2300p t2 patch
static const uint32_t best2300p_t2_ins_patch_config[] = {
29,
(uint32_t)&bes2300p_t2_ins_patch0,
(uint32_t)&bes2300p_t2_ins_patch1,
(uint32_t)&bes2300p_t2_ins_patch2,
(uint32_t)&bes2300p_t2_ins_patch3,
(uint32_t)&bes2300p_t2_ins_patch4,
(uint32_t)&bes2300p_t2_ins_patch5,
(uint32_t)&bes2300p_t2_ins_patch6,
(uint32_t)&bes2300p_t2_ins_patch7,
(uint32_t)&bes2300p_t2_ins_patch8,
(uint32_t)&bes2300p_t2_ins_patch9,
(uint32_t)&bes2300p_t2_ins_patch10,
(uint32_t)&bes2300p_t2_ins_patch11,
(uint32_t)&bes2300p_t2_ins_patch12,
(uint32_t)&bes2300p_t2_ins_patch13,
(uint32_t)&bes2300p_t2_ins_patch14,
(uint32_t)&bes2300p_t2_ins_patch15,
(uint32_t)&bes2300p_t2_ins_patch16,
(uint32_t)&bes2300p_t2_ins_patch17,
(uint32_t)&bes2300p_t2_ins_patch18,
(uint32_t)&bes2300p_t2_ins_patch19,
(uint32_t)&bes2300p_t2_ins_patch20,
(uint32_t)&bes2300p_t2_ins_patch21,
(uint32_t)&bes2300p_t2_ins_patch22,
(uint32_t)&bes2300p_t2_ins_patch23,
(uint32_t)&bes2300p_t2_ins_patch24,
(uint32_t)&bes2300p_t2_ins_patch25,
(uint32_t)&bes2300p_t2_ins_patch26,
(uint32_t)&bes2300p_t2_ins_patch27,
(uint32_t)&bes2300p_t2_ins_patch28,
};
#else
/***************************************************************************
*
* instruction patch Information
*
* BT ROM Chip Version:1302 T2 (CHIP ID=1)
*
* IBRT function
*
* patch 3: 0xC0006900--->0xC0006910
* patch 45:0xC0006930--->0xC0006940
* patch 5: 0xC000694c--->0xC0006980
* patch 14: 0xC000698c--->0xC00069cc
* patch 16: 0xC0006a18--->0xC0006a28//REMOVE
* patch 19: 0xC0006a2c--->0xC0006a9c
* patch 20: 0xC0006aa4--->0xC0006ab0
* patch 21: 0xC0006ab4--->0xC0006ad0
* patch 2: 0xC0006ae8--->0xC0006b04
* patch 22: 0xC0006b30--->0xC0006b4c
* patch 22: 0xC0006b54--->0xC0006b7c
* patch 29: 0xC0006ba0--->0xC0006ba8
* patch 30: 0xC0006bac--->0xC0006bc8
* patch 32: 0xC0006be8--->0xC0006c14
* patch 33: 0xC0006c1c--->0xC0006c2c
* patch 34: 0xC0006c30--->0xC0006c44
* patch 35: 0xC0006c48--->0xC0006c84
* patch 36: 0xC0006c88--->0xC0006c98
* patch 37: 0xC0006ca0--->0xC0006cb8
* patch 38: 0xC0006cc0--->0xC0006cf8
* patch 0: 0xC0006d00--->0xC0006d0c
* patch 1: 0xC0006d14--->0xC0006d20
* patch 44: 0xC0006d24--->0xC0006d2c (via ble)
* patch 40: 0xC0006d30--->0xC0006d40
* patch 45: 0xC0006d50--->0xC0006d90
* patch 46: 0xC0006d9c--->0xC0006dfc
* patch 47: 0xC0006e00--->0xC0006e28
* patch 48: 0xC0006e30--->0xC0006e98
* patch 49: 0xC0006ec0--->0xC0006ed0
* patch 50: 0xC0006ed8--->0xC0006f2c
* patch 51: 0xC0006f30--->0xC0006f5c
* patch 53: 0xC0006f74--->0xC0006f8c
* patch 25: 0xC0006f90--->0xc0007074
* patch 55: 0xC00070a4--->0xC00070c4
* patch 44: 0xC00070d0--->0xC00070ec
* sniffer_filter_tab: 0xC00070f4--->0xC0007130
* patch 7: 0xC0007138--->0xC0007164
* patch 23: 0xC0007180--->0xC000720c
* patch 17: 0xC00072b4--->0xC00072ec
* patch 13: 0xC0007300--->0xC0007330
* patch 15: 0xC0007338--->0xC0007374
* patch 31: 0xC000737c--->0xC0007a4
* patch 54: 0xC00073cc--->0XC00074E4(new)
****************************************************************************/
//#define ECC_LL_MONITOR
const uint32_t bes2300p_patch0_ibrt_ins_data_t2[] = {
/*6d00*/ 0x4673b408,
/*6d04*/ 0x0f20f013,
/*6d08*/ 0xbc08d002,
/*6d0c*/ 0xb9e5f600, // jump a00070da
/*6d10*/ 0xbf00bc08,
/*6d14*/ 0x4b014699,
/*6d18*/ 0xbaeaf600, // jump a00072f0
/*6d1c*/ 0xc0000050,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch0 = {
0,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch0_ibrt_ins_data_t2),
0x000072ec,
0xbd08f1ff, // jump a00072ec -> a0206d00
0xc0006d00,
(uint8_t *)bes2300p_patch0_ibrt_ins_data_t2}; // assert warn, assert param
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch1 = {
1, BTDRV_PATCH_ACT,
0, 0x0001ff2c,
0xb81af000, // jump a001ff2c -> a001ff64
0, NULL}; // KE_MSG_HANDLER(lc_op_loc_unsniff_req)
#if 0
const uint32_t bes2300p_patch2_ibrt_ins_data_t2[] =
{
0x460a4603,/*6ae8*/
0x46194802,
0xfcb6f5fc,
0xbf00bd38,
0xc0006afc,/*6af8*/
0x73617243,
0x73252c68,
0x0064252c,/*6b04*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch2 =
{
2,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch2_ibrt_ins_data_t2),
0x00007018,
0xbd66f1ff,
0xc0006ae8,
(uint8_t *)bes2300p_patch2_ibrt_ins_data_t2
};//"Crash,%s,%d", file, line
#elif 1
#if 0
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch2 =
{
2,
BTDRV_PATCH_ACT,
0,
0x00007024,
0xbf00e011,
0,
NULL
};//dont call rwip_assert_err when assert error
#else
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch2 = {
2, BTDRV_PATCH_ACT,
0,
0x0002d8b0, // 0xa002d8b0
0xbf00bf00, 0,
NULL}; // ld_acl_rsw_frm_isr
#endif
#else
const uint32_t bes2300p_patch2_ibrt_ins_data_t2[] = {
0xfc12f631, /*7780*/
0xb1337843, 0x0518f100, 0xf5fb4628, 0x2813fed9,
0xf605d804, 0xbf00fba1, 0xba24f60c, 0xba23f60c /*77a0*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch2 = {
2,
BTDRV_PATCH_INACT,
sizeof(bes2300p_patch2_ibrt_ins_data_t2),
0x00013be4,
0xbdccf1f3,
0xc0007780,
(uint8_t *)bes2300p_patch2_ibrt_ins_data_t2}; // lc_afh_set use mobile afh
#endif
const uint32_t bes2300p_patch3_ibrt_ins_data_t2[] = {
0xd1052800, /*6900*/
0x000cf1aa, 0xf97af5fa, 0xbc48f61a, 0xbbd2f61a, /*6910*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch3_ibrt_ins_data_t2),
0x000210b4,
0xbc24f1e5,
0xc0006900,
(uint8_t *)bes2300p_patch3_ibrt_ins_data_t2}; // lmp filter free heap
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch4 = {
4, BTDRV_PATCH_ACT, 0, 0x0002be90, 0xbd702000, 0,
NULL}; // ld_check_if_need_protect_sniff retrun 0
#if 0
const uint32_t bes2300p_patch5_ibrt_ins_data_t2[] =
{
/*6950*/ 0x0f01f013,
/*6954*/ 0x4b06d00a,
/*6958*/ 0x104ff893,
/*695c*/ 0xd8052902,
/*6960*/ 0x2a027a9a,
/*6964*/ 0xbf00d802,
/*6968*/ 0xbc73f632,
/*696c*/ 0xbf00bd08,
/*6970*/ 0xc00063c8,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch5 =
{
5,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch5_ibrt_ins_data_t2),
0x0003924c,
0xbb80f1cd, // jump a00384dc -> a0206950
0xc0006950,
(uint8_t *)bes2300p_patch5_ibrt_ins_data_t2
}; //protect link id when send bitoffset
const uint32_t bes2300p_patch6_ibrt_ins_data_t2[] =
{
/*6978*/ 0x5023f852,
/*697c*/ 0xd0012d00,
/*6980*/ 0xbc04f611,// jump a0206980 -> a001818c
/*6984*/ 0xbd382000,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch6 =
{
6,
BTDRV_PATCH_INACT,
sizeof(bes2300p_patch6_ibrt_ins_data_t2),
0x00018188,
0xbbf6f1ee, // jump a0018188 -> a0206978
0xc0006978,
(uint8_t *)bes2300p_patch6_ibrt_ins_data_t2
};//protect null ptr when send afh
#else
const uint32_t bes2300p_patch5_ibrt_ins_data_t2[] = {
/*694c*/ 0xf632b1c0,
/*6950*/ 0xb1a8fc1b,
/*6954*/ 0x70b2f898,
/*6958*/ 0xfc2af632,
/*695c*/ 0xd10d4287,
/*6960*/ 0xfbfaf634,
/*6964*/ 0xbf142804,
/*6968*/ 0x22012200,
/*696c*/ 0x46294640,
/*6970*/ 0xf6259b03,
/*6974*/ 0x2001fae5,
/*6978*/ 0xbecef625,
/*697c*/ 0xbc6cf625,
/*6980*/ 0xbcc9f625,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch5 = {
5,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch5_ibrt_ins_data_t2),
0x0002c230,
0xbb8cf1da, // jump a002c230 -> a020694c
0xc000694c,
(uint8_t *)bes2300p_patch5_ibrt_ins_data_t2}; // ld_cal_timestamp
#if 1
const uint32_t bes2300p_patch6_ibrt_ins_data_t2[] = {
0x79ab4688, 0x6383ea6f, 0x4578f023, 0xf8d39b09,
0x9906308c, 0x402b440b, 0xbf004641, 0xbb87f62c,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch6 = {
6,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch6_ibrt_ins_data_t2),
0x000330f4,
0xbc6ef1d3, // jump a00330f4 -> a02069d4
0xc00069d4,
(uint8_t *)bes2300p_patch6_ibrt_ins_data_t2}; // sco param init
#else
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch6 = {
6, BTDRV_PATCH_ACT,
0,
0x00007010, // a0007010
0xb9bef000, // jump a0007390
0, NULL,
}; // DEF_IRQHandler
#endif
#endif
const uint32_t bes2300p_patch7_ibrt_ins_data_t2[] = {
/*7138*/ 0x28024604,
/*713c*/ 0xf89ad812,
/*7140*/ 0x28020046,
/*7144*/ 0xf610d803,
/*7148*/ 0x2800fb1b,
/*714c*/ 0x2112d106,
/*7150*/ 0xf61b20ff,
/*7154*/ 0x2000fec9,
/*7158*/ 0xbb0af633,
/*715c*/ 0xbf004620,
/*7160*/ 0xba4ef633,
/*7164*/ 0xbad8f633,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch7 = {
7,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch7_ibrt_ins_data_t2),
0x0003a5f8,
0xbd9ef1cc, // jump a003a5f8 -> a0207138
0xc0007138,
(uint8_t *)
bes2300p_patch7_ibrt_ins_data_t2}; // start simu link check linkid
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch8 = {
8, BTDRV_PATCH_ACT, 0, 0x0002e720, 0xf8a62308, 0, NULL,
}; // ld_acl_start t_poll
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch9 = {
9, BTDRV_PATCH_ACT, 0, 0x0002d82c, 0x2b006013, 0, NULL,
}; // ld_acl_rsw_rx
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch10 = {
10, BTDRV_PATCH_ACT, 0, 0x0002fe60, 0xbf00e001, 0, NULL,
}; // ld_acl_flow_on
#ifdef ECC_LL_MONITOR
////patch 11 12 13 used for ecc count by set it to ll monitor parameter
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch11 = {
11, BTDRV_PATCH_ACT, 0, 0x0002dc94, 0x7000f400, 0, NULL}; ////wrong flag
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch12 = {
12, BTDRV_PATCH_ACT, 0, 0x0002dc98, 0x2800bf00, 0, NULL};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch13 = {
13, BTDRV_PATCH_ACT, 0, 0x0002f78c, 0x46288113, 0, NULL};
#else
const uint32_t bes2300p_patch11_ibrt_ins_data_t2[] = {
0x0034f104, 0x220a4649, 0xfd86f644, 0xf632b940, 0x2801fa39, 0xf632d104,
0x2800fb0d, 0xbf00d104, 0x00c5f894, 0xb97cf62b, 0xb9eaf62b,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch11 = {
11,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch11_ibrt_ins_data_t2),
0x00031e70,
0xbe70f1d4,
0xc0006b54,
(uint8_t *)bes2300p_patch11_ibrt_ins_data_t2}; // filter afh map
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch12 = {
12, BTDRV_PATCH_ACT, 0, 0x0002a41c, 0xbf000f01, 0,
NULL}; // mode == SYNC2_SCO_MODE
const uint32_t bes2300p_patch13_ibrt_ins_data_t2[] = {
0xfeecf5f8, 0xbf00bf00, 0x8310f3ef, 0x0401f013, 0xb672d108, 0xff22f5f8,
0xbf30b110, 0xd1ef2c00, 0xe7edb662, 0xff1af5f8, 0xd1f62800, 0xbf00e7e8,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch13 = {
13,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch13_ibrt_ins_data_t2),
0x0000721c,
0xb870f200,
0xc0007300,
(uint8_t *)bes2300p_patch13_ibrt_ins_data_t2};
#endif
const uint32_t bes2300p_patch14_ibrt_ins_data_t2[] = {
/*698c*/ 0x4604b510,
/*6990*/ 0xfc0ef632,
/*6994*/ 0xd00542a0,
/*6998*/ 0x7a984b03,
/*699c*/ 0xbf181b00,
/*69a0*/ 0xbd102001,
/*69a4*/ 0xbd102000,
/*69a8*/ 0xc00063c8,
/*69ac*/ 0x461f7a9e,
/*69b0*/ 0x46104625,
/*69b4*/ 0xffeaf7ff,
/*69b8*/ 0xd1072800,
/*69bc*/ 0x46392004,
/*69c0*/ 0xfc74f634,
/*69c4*/ 0x462c2003,
/*69c8*/ 0xbd68f634,
/*69cc*/ 0xbf00bdf8,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch14 = {
14,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch14_ibrt_ins_data_t2),
0x0003b498,
0xba88f1cb, // jump a003b498 -> a02069ac
0xc000698c,
(uint8_t *)
bes2300p_patch14_ibrt_ins_data_t2}; // protect idx when snoop disconnect
#if 0
const uint32_t bes2300p_patch15_ibrt_ins_data_t2[] =
{
/*69D0*/ 0xbf00669a,
/*69D4*/ 0x66da466a,//mov r2, sp; str r2, [r3, #108]
/*69D8*/ 0x8208f3ef,//mrs r2, MSP
/*69DC*/ 0xbf00671a,//str r2, [r3, #112]
/*69E0*/ 0x8209f3ef,//mrs r2, PSP
/*69E4*/ 0xbf00675a,//str r2, [r3, #116]
/*69E8*/ 0xbf00bf00,
/*69EC*/ 0xbf00bf00,
/*69F0*/ 0xbf00bf00,
/*69F4*/ 0xbf00bf00,
/*69F8*/ 0xbf00bf00,
/*69FC*/ 0xbf00bf00,
/*6A00*/ 0xbf00bf00,
/*6A04*/ 0xbf00bf00,
/*6A08*/ 0xbf00bf00,
/*6A0C*/ 0xbf00bf00,
/*6A10*/ 0xbcb0f600,//jump a0206a10 -> a0007374
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch15 =
{
15,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch15_ibrt_ins_data_t2),
0x00007360,
0xbb36f1ff, // jump a0007360 -> a02069d0
0xc00069d0,
(uint8_t *)bes2300p_patch15_ibrt_ins_data_t2
};//bt_assert_crash_dump
#else
const uint32_t bes2300p_patch15_ibrt_ins_data_t2[] = {
0xf885b2db, /*7338*/
0xf89530bd, 0x2a0220b4, 0xb98bd114, 0xf8534b0a, /*7348*/
0xf6430024, 0xf895fd15, 0x2b0430b5, 0x4620d103, /*7358*/
0xf6232116, 0x4620fc61, 0xf6242116, 0xbf00f961, /*7368*/
0xbc6bf62d, 0xbc53f62d, 0xc0000998, /*7374*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch15 = {
15,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch15_ibrt_ins_data_t2),
0x00034c14,
0xbb90f1d2,
0xc0007338,
(uint8_t *)bes2300p_patch15_ibrt_ins_data_t2}; // no disconnect evt
#endif
const uint32_t bes2300p_patch16_ibrt_ins_data_t2[] = {
0x71ab2300, 0x0000f8d9, 0x380cb110, 0xf96cf5fa, 0xbf002300, 0xbce2f608,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch16 = {
16,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch16_ibrt_ins_data_t2),
0x0000f2f0,
0xbb12f1f7,
0xc0006918,
(uint8_t *)
bes2300p_patch16_ibrt_ins_data_t2}; // lm_page_scan_end_ind free msg
#if 0
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch17 =
{
17,
BTDRV_PATCH_ACT,
0,
0x00007010, //a0007010
0xb9bef000, //jump a0007390
0,
NULL,
};//DEF_IRQHandler
#elif 1
const uint32_t bes2300p_patch17_ibrt_ins_data_t2[] = {
0x4605b538, /*72b4*/
0xfe76f631, 0x7a834604, 0x2f15ebb3, 0x7803d10a, /*72c4*/
0xd1072b02, 0xff5cf631, 0xf894b120, 0x2101004f, /*72d4*/
0xfc78f61d, 0xbf00bd38, 0x3312f886, 0xbf004620, /*72e4*/
0xffe4f7ff, 0xbcfaf614,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch17 = {
17,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch17_ibrt_ins_data_t2),
0x0001bce0,
0xbafef1eb,
0xc00072b4,
(uint8_t *)bes2300p_patch17_ibrt_ins_data_t2}; // send unsniff cmd
#else
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch17 = {
17, BTDRV_PATCH_ACT, 0, 0x0002e674, 0x53faf44f, 0, NULL,
}; // lc start lsto 5s
#endif
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch18 = {
18, BTDRV_PATCH_ACT, 0, 0x0002f264, 0xbf00e001, 0, NULL,
}; // close tx seq force set after start IBRT
const uint32_t bes2300p_patch19_ibrt_ins_data_t2[] = {
0xd01e0fdb, /*6a2c*/
0x6307f44f, 0xf304fb03, 0x48168f6a, 0x93011810, 0x49154418, 0xfe22f644,
0x58fb4b14, 0x4301f3c3, 0xf1028f2a, 0xf5024250, 0xf2021205, 0x8f6942fc,
0x0241eb02, 0x440a9901, 0x600a490d, 0xf44fe010, 0xfb036307, 0x9301f304,
0x18184806, 0x8f6a4906, 0xfe04f644, 0x58fb4b05, 0x4381f3c3, 0xb9a9f62e,
0xb9aff62e, 0xd02144fc, 0xc000593c, 0xd0220144, 0xc000005c, /*6a9c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch19 = {
19,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch19_ibrt_ins_data_t2),
0x00034d80,
0xbe54f1d1,
0xc0006a2c,
(uint8_t *)bes2300p_patch19_ibrt_ins_data_t2}; // ld_sco_frm_isr
const uint32_t bes2300p_patch20_ibrt_ins_data_t2[] = {
0xbf002004, /*6aa4*/
0xfb5cf634, /*6aa8*/
0xb8c4f618, /*6aac*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch20 = {
20,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch20_ibrt_ins_data_t2),
0x0001ec10,
0xbf48f1e7,
0xc0006aa4,
(uint8_t *)bes2300p_patch20_ibrt_ins_data_t2}; // ibrt sco status update
const uint32_t bes2300p_patch21_ibrt_ins_data_t2[] = {
0xf6414631, 0x4620fc1b, 0xf6064631, 0x4a03faaf,
0xf4436813, 0x60130380, 0xbdddf633, 0xd0220468,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch21 = {
21,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch21_ibrt_ins_data_t2),
0x0003a684,
0xba16f1cc, // jump a003a684 -> a0206ab4
0xc0006ab4,
(uint8_t *)
bes2300p_patch21_ibrt_ins_data_t2}; // register address at LM layer and
// open fa en register
#if 0
const uint32_t bes2300p_patch22_ibrt_ins_data_t2[] =
{
0x4681b083,/*6b30*/
0x4b022200,
0x2020f843,
0xbddcf623,
0xc0006b44,
0x00000000,
0x00000000,
0x00000000,/*6b4c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch22 =
{
22,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch22_ibrt_ins_data_t2),
0x0002a6f4,
0xba1cf1dc,
0xc0006b30,
(uint8_t *)bes2300p_patch22_ibrt_ins_data_t2
};//sync clear count
#else
const uint32_t bes2300p_patch22_ibrt_ins_data_t2[] = {
0x4681b083, 0x4b042200, 0x2020f843, 0x601a4b0d,
0x601a4b0d, 0xb8b0f623, 0xc000759c,
0x00000000, // link_no_sync_count
0x00000000, 0x00000000,
0x00000018, // link_agc_thd
0x00000000, // rssi_store_tws
0x00000006, // rssi_tws_step
0x00000000, // rssi_store_mobile
0x00000006, // rssi_mobile_step
0x0000009c, // rssi_min_value_tws
0x0000009c, // rssi_min_value_mobile
0xc00075ac, // rssi_store_tws
0xc00075b4, // rssi_store_mobile
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch22 = {
22,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch22_ibrt_ins_data_t2),
0x0002a6f4,
0xbf44f1dc,
0xc0007580,
(uint8_t *)bes2300p_patch22_ibrt_ins_data_t2}; // sync clear count
#endif
#if 0
const uint32_t bes2300p_patch23_ibrt_ins_data_t2[] =
{
0x6020f853,/*6b50*/
0xf8524a0d,
0x33013020,
0x3020f842,
0x68124a0b,
0xd90f4293,
0x4a082300,
0x3020f842,
0xb082b402,
0x92004a08,
0xf06f6a14,
0x46290059,
0x47a02201,
0xbc02b002,
0xbce4f623,
0xc0006b44,
0xc0006b94,
0x00000050,
0xc00041b4,/*6b98*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch23 =
{
23,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch23_ibrt_ins_data_t2),
0x0002a550,
0xbafef1dc,
0xc0006b50,
(uint8_t *)bes2300p_patch23_ibrt_ins_data_t2
};////swagc no sync
#elif 0
const uint32_t bes2300p_patch23_ibrt_ins_data_t2[] = {
0xf6324620, 0xb480fce9, 0xfb07276e, 0x4a1ff704, 0xf837bf00, 0xf4133002,
0xd12b4f00, 0xf8524a17, 0x33013024, 0x3024f842, 0x68124a15, 0xd8124293,
0x3084f8d5, 0xf0221af2, 0xf1b14178, 0xd9066f80, 0xf0231b9b, 0x425b4378,
0xdc042b64, 0xf022e012, 0x2a644278, 0x2300dd0e, 0xf8424a08, 0xb0823024,
0x92004a09, 0xc020f8d2,
// 0x0036f06f,
0x004cf06f, 0x22014621, 0xb00247e0, 0xbf00bc80, 0xbbeff62d, 0xc0006b44,
0xc0007204, 0x0000003c, 0xc00041b4,
0xd02111f8, // 720c
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch23 = {
23,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch23_ibrt_ins_data_t2),
0x000349d4,
0xbbd4f1d2,
0xc0007180,
(uint8_t *)bes2300p_patch23_ibrt_ins_data_t2}; ////swagc no sync
#else
const uint32_t bes2300p_patch23_ibrt_ins_data_t2[] = {
0xfb03236e, 0x4a3ef300, 0xf4135a9b, 0xd1764f00, 0xb082b570, 0xf8534b3b,
0x4a3b4020, 0x3020f852, 0xf8423301, 0x4a393020, 0x42936812, 0xf8d4d812,
0x1aca3084, 0x4578f022, 0x6f80f1b5, 0x1a5bd906, 0x4378f023, 0x2b64425b,
0xe04ddc04, 0x4278f022, 0xdd492a64, 0x681b4b2e, 0xd11d4298, 0xf9934b2d,
0xb93b3000, 0x30acf9b4, 0x20aef894, 0xf3f2fb93, 0x70134a28, 0x78134a27,
0x78094927, 0xb2db1a5b, 0x4a267013, 0xb25b7812, 0x428bb251, 0x4b21bfbc,
0x4b20701a, 0xe01c781e, 0xf9934b21, 0xb93b3000, 0x30acf9b4, 0x20aef894,
0xf3f2fb93, 0x70134a1c, 0x78134a1b, 0x7809491b, 0xb2db1a5b, 0x4a1a7013,
0xb25b7812, 0x428bb251, 0x4b15bfbc, 0x4b14701a, 0x4601781e, 0x4a0c2300,
0x3020f842, 0x92004a13, 0xb2706a15, 0x47a82201, 0x30aef894, 0xd9042b95,
0xf8a42300, 0xf88430ac, 0xb00230ae, 0x4770bd70, 0xd02111f8, 0xc0000998,
0xc000759c, 0xc00075a8, 0xc0006e2c, 0xc00075ac, 0xc00075b0, 0xc00075bc,
0xc00075b4, 0xc00075b8, 0xc00075c0, 0xc00041b4, 0xf6324620, 0x4620f9f7,
0xf7ff4631, 0xbf00ff61, 0xb931f62d};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch23 = {
23,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch23_ibrt_ins_data_t2),
0x000349d4,
0xbec6f1d2,
0xc0007634,
(uint8_t *)bes2300p_patch23_ibrt_ins_data_t2}; ////swagc no sync
#endif
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch24 = {
24, BTDRV_PATCH_ACT, 0, 0x0000fe0c, 0xf029bf00, 0, NULL,
}; // filter tws link lc_sco_ind ke message
const uint32_t bes2300p_patch25_ibrt_ins_data_t2[] = {
/*6f90*/ 0xbf009904,
/*6f94*/ 0x4b12b470,
/*6f98*/ 0x010e5c5a,
/*6f9c*/ 0x19734d11,
/*6fa0*/ 0x78244c11,
/*6fa4*/ 0xd20342a2,
/*6fa8*/ 0x32015498,
/*6fac*/ 0xe001b2d2,
/*6fb0*/ 0x22015570,
/*6fb4*/ 0x5442480a,
/*6fb8*/ 0x461ab14c,
/*6fbc*/ 0x23001919,
/*6fc0*/ 0x0b01f912,
/*6fc4*/ 0xbf004403,
/*6fc8*/ 0xd1f9428a,
/*6fcc*/ 0x2300e000,
/*6fd0*/ 0xf0f4fb93,
/*6fd4*/ 0xbc70b240,
/*6fd8*/ 0x22019904,
/*6fdc*/ 0xbb8cf628, // jump a002f6f8
/*6fe0*/ 0xc0006ff0, // addr of rssi_idx_for_agc
/*6fe4*/ 0xc0006ff4, // addr of rssi_set_for_agc
/*6fe8*/ 0xc0006fec, // addr of N
/*6fec*/ 0x00000005, // N : 1 ~ 16
/*6ff0*/ 0x00000000, // rssi_idx_for_agc[3]
/*6ff4*/ 0xbabababa, // rssi_set_for_agc[3*16]
/*6ff8*/ 0xbabababa,
/*6ffc*/ 0xbabababa,
/*7000*/ 0xbabababa,
/*7004*/ 0xbabababa,
/*7008*/ 0xbabababa,
/*700c*/ 0xbabababa,
/*7010*/ 0xbabababa,
/*7014*/ 0xbabababa,
/*7018*/ 0xbabababa,
/*701c*/ 0xbabababa,
/*7020*/ 0xbabababa,
/*7024*/ 0xbabababa,
/*7028*/ 0xbabababa,
/*702c*/ 0xbabababa,
}; // 0xc0006f90--->0xc0007074
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch25 = {
25,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch25_ibrt_ins_data_t2),
0x0002f6f4,
0xbc4cf1d7, // jump a002f6f4 -> a0206f90
0xc0006f90,
(uint8_t *)bes2300p_patch25_ibrt_ins_data_t2}; // ld_acl_rx() average rssi
#if 0
//ECC patch 1
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch26 =
{
26,
BTDRV_PATCH_ACT,
0,
0x00034790,
0xbf00bf00,
0,
NULL,
};//ld_acl_sniff_frm_isr ld_get_rx_isr_counter ignore
#else
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch26 = {
26, BTDRV_PATCH_ACT, 0, 0x00029d50, 0x3300f443, 0, NULL,
}; // bt_e_scoltcntl_retxnb_setf
#endif
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch27 = {
27, BTDRV_PATCH_ACT, 0, 0x000236e0, 0xf0172004, 0, NULL,
}; // LC_WAIT_EXCHANGE_SCO_STATUS_CFM
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch28 = {
28, BTDRV_PATCH_ACT, 0, 0x00039144, 0x47702001, 0,
NULL}; // ld_get_sniffer_enter_sniff_flag() forece return 1
#if 0
const uint32_t bes2300p_patch29_ibrt_ins_data_t2[] =
{
/*6ba0*/ 0xbf0080c6,
/*6ba4*/ 0x71022200,
/*6ba8*/ 0xbb2af619, //jump a0020200
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch29 =
{
29,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch29_ibrt_ins_data_t2),
0x000201f8,
0xbcd2f1e6, //jump a00201f8 -> a0206ba0
0xc0006ba0,
(uint8_t *)bes2300p_patch29_ibrt_ins_data_t2
};//KE_MSG_HANDLER(lc_op_loc_sniff_req, void)
#else
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch29 = {
29, BTDRV_PATCH_ACT, 0, 0x00020024, 0xe00dbf00, 0, NULL,
}; // detach directly
#endif
const uint32_t bes2300p_patch30_ibrt_ins_data_t2[] = {
/*6bac*/ 0x46286825,
/*6bb0*/ 0x303ef895,
/*6bb4*/ 0xd0012b02,
/*6bb8*/ 0xbda2f622, // jump a0029700
/*6bbc*/ 0xbf002300,
/*6bc0*/ 0x303ef885,
/*6bc4*/ 0xfea6f622, // call a0029914
/*6bc8*/ 0xbdc1f622, // jump a002974e
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch30 = {
30,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch30_ibrt_ins_data_t2),
0x000296fc,
0xba56f1dd, // jump a00296fc -> a0206bac
0xc0006bac,
(uint8_t *)bes2300p_patch30_ibrt_ins_data_t2}; // ld_pscan_frm_cbk
const uint32_t bes2300p_patch31_ibrt_ins_data_t2[] = {
0x7021f853, 0xb12fb136, 0x017ff000, 0xf8534b06, 0xb93b3021, 0x210c20ff,
0xfda8f61b, 0xbf002004, 0xbffcf62b, 0xbf76f62b, 0xc0005cd8,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch31 = {
31,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch31_ibrt_ins_data_t2),
0x0003328c,
0xb876f1d4, // jump a003328c -> a020737c
0xc000737c,
(uint8_t *)bes2300p_patch31_ibrt_ins_data_t2}; // protect null ptr when acl
// tws switch
const uint32_t bes2300p_patch32_ibrt_ins_data_t2[] = {
/*6be8*/ 0x46514620,
/*6bec*/ 0x4b09464a,
/*6bf0*/ 0x3022f853,
/*6bf4*/ 0xd10b2901,
/*6bf8*/ 0x0184f103,
/*6bfc*/ 0xbf002206,
/*6c00*/ 0xfd34f644,
/*6c04*/ 0xbf00b920,
/*6c08*/ 0x0802f05f,
/*6c0c*/ 0xba4af641, // jump a00480a4
/*6c10*/ 0xbaf6f641, // jump a0048200
/*6c14*/ 0xc0005cd8,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch32 = {
32,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch32_ibrt_ins_data_t2),
0x00048008,
0xbdeef1be, // jump a0048008 -> a0206be8
0xc0006be8,
(uint8_t *)bes2300p_patch32_ibrt_ins_data_t2}; // hci_evt_filter_con_check
const uint32_t bes2300p_patch33_ibrt_ins_data_t2[] = {
/*6c1c*/ 0x0024f855,
/*6c20*/ 0xbf003038,
/*6c24*/ 0xfd9ef643,
/*6c28*/ 0x0024f855,
/*6c2c*/ 0xbe9ef60c,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch33 = {
33,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch33_ibrt_ins_data_t2),
0x00013968,
0xb958f1f3, // jump a0013968 -> a0206c1c
0xc0006c1c,
(uint8_t *)bes2300p_patch33_ibrt_ins_data_t2}; // ea_interval_remove
const uint32_t bes2300p_patch34_ibrt_ins_data_t2[] = {
/*6c30*/ 0xf632d108,
/*6c34*/ 0x2100f9e3,
/*6c38*/ 0xf802f634,
/*6c3c*/ 0xfa8cf634,
/*6c40*/ 0xbb8bf5fb,
/*6c44*/ 0xbbc3f5fb,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch34 = {
34,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch34_ibrt_ins_data_t2),
0x00002354,
0xbc6cf204, // jump a0002354 -> a0206c30
0xc0006c30,
(uint8_t *)
bes2300p_patch34_ibrt_ins_data_t2}; // close fastack when stop ibrt
const uint32_t bes2300p_patch35_ibrt_ins_data_t2[] = {
/*6c48*/ 0x4b0a0a02,
/*6c4c*/ 0x3022f853,
/*6c50*/ 0xb500b173,
/*6c54*/ 0x4601b083,
/*6c58*/ 0xf88d230f,
/*6c5c*/ 0x23133004,
/*6c60*/ 0x3005f88d,
/*6c64*/ 0xf616a801,
/*6c68*/ 0xb003fbc1,
/*6c6c*/ 0xfb04f85d,
/*6c70*/ 0xbf004770,
/*6c74*/ 0xc0005cd8,
/*6c78*/ 0xbf000230,
/*6c7c*/ 0x0001f040,
/*6c80*/ 0xffe2f7ff,
/*6c84*/ 0xbc5df634};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch35 = {
35,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch35_ibrt_ins_data_t2),
0x0003b538,
0xbb9ef1cb, // jump a003b538 -> a0206c78
0xc0006c48,
(uint8_t *)
bes2300p_patch35_ibrt_ins_data_t2}; // snoop disconnect lc_release
#if 0
//ECC patch 2
const uint32_t bes2300p_patch36_ibrt_ins_data_t2[] =
{
/*6c88*/ 0x701c4b03,
/*6c8c*/ 0x78134a01,
/*6c90*/ 0xbcfcf62d,
/*6c94*/ 0xc0000971,
/*6c98*/ 0xc000032a,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch36 =
{
36,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch36_ibrt_ins_data_t2),
0x00034688,
0xbafef1d2, // jump a0034688 -> a0206c88
0xc0006c88,
(uint8_t *)bes2300p_patch36_ibrt_ins_data_t2
};//ld_acl_rx_isr set_ecc_recheck_link_id
#else
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch36 = {
36, BTDRV_PATCH_ACT, 0, 0x0002ddc0, 0x4a07bf00, 0, NULL,
}; // 1st ibrt ok, ignore sniffer role
#endif
const uint32_t bes2300p_patch37_ibrt_ins_data_t2[] = {
0x4605b538, /*6ca0*/
0xf643460c, 0x6a00fc79, 0xd2034285, 0x28061b40, /*6cb0*/
0x2402bf98, 0xb9fdf627,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch37 = {
37,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch37_ibrt_ins_data_t2),
0x0002e0b0,
0xbdf6f1d8,
0xc0006ca0,
(uint8_t *)bes2300p_patch37_ibrt_ins_data_t2}; // decrease retx
#if 0
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch38 =
{
38,
BTDRV_PATCH_ACT,
0,
0x00000878,
0x2300bf00,
0,
NULL
};//SLEEP EN
#else
const uint32_t bes2300p_patch38_ibrt_ins_data_t2[] = {
0x4604b510, /*6cc0*/
0xf6104608, 0x2c03fd25, 0x2803d001, 0x200cd104, /*6cd0*/
0xfa4ef61c, 0xbd102001, 0xbd102000, 0xfd18f610, /*6ce0*/
0xf1044605, 0x46280145, 0xffe8f7ff, 0xd1012800, /*6cf0*/
0xbeb7f633, 0xbf19f633, /*6cf8*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch38 = {
38,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch38_ibrt_ins_data_t2),
0x0003aa60,
0xb93ef1cc, // jump a003aa60 -> a0206cc0
0xc0006cc0,
(uint8_t *)bes2300p_patch38_ibrt_ins_data_t2}; // set env
#endif
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch39 = {
39, BTDRV_PATCH_ACT, 0, 0x0003b450, 0xbf00bd08, 0,
NULL}; // do not send ld_sniffer_connect_sco_forward
const uint32_t bes2300p_patch40_ibrt_ins_data_t2[] = {
0x2a140c92, 0x2214bf28, 0xbf004691, 0xbc44f623, /*6d40*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch40 = {
40,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch40_ibrt_ins_data_t2),
0x0002a5c4,
0xbbb4f1dc,
0xc0006d30,
(uint8_t *)bes2300p_patch40_ibrt_ins_data_t2}; // max_drift limit
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch41 = {
41, BTDRV_PATCH_ACT, 0, 0x0003acd8, 0xbf00e005, 0, NULL}; /// acl tx silence
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch42 = {
42, BTDRV_PATCH_ACT, 0, 0x00033668, 0xbf00e001, 0,
NULL}; /// do not clear acl env during sco stop
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch43 = {
43, BTDRV_PATCH_ACT, 0, 0x0002a62c, 0xe001021a, 0,
NULL}; // rx window adjust for start ibrt
#if defined(SYNC_BT_CTLR_PROFILE)
const uint32_t bes2300p_patch44_ibrt_ins_data_t2[] = {
/*6d24*/ 0xbf004628,
/*6d28*/ 0xfff8f633,
/*6d2c*/ 0xb8f7f611,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch44 = {
44,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch44_ibrt_ins_data_t2),
0x00017f10,
0xbf08f1ee, // jump a0017f10 -> a0206d24
0xc0006d24,
(uint8_t *)bes2300p_patch44_ibrt_ins_data_t2}; // send profile via BLE
#else
const uint32_t bes2300p_patch44_ibrt_ins_data_t2[] = {
0xd8092b01, /*70d0*/
0xfb03236e, 0x4a04f308, 0xf4135a9b, 0xd1016f00, /*70e0*/
0xb919f629, 0xb9aef629, 0xd0211200, /*70ec*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch44 = {
44,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch44_ibrt_ins_data_t2),
0x00030314,
0xbedcf1d6,
0xc00070d0,
(uint8_t *)bes2300p_patch44_ibrt_ins_data_t2}; // lmp tx for tx desc error
#endif
#if 0
const uint32_t bes2300p_patch45_ibrt_ins_data_t2[] =
{
0x20aef89b,/*6d50*/
0xd1052aa0,
0xf88b2200,
0xf8ab20ae,
0xe01320ac,/*6d60*/
0x68194b0b,
0xf3f1fbb2,
0x2313fb01,
0x4b07b963,/*6d70*/
0x00acf9bb,
0x6a1e9300,
0xfb90bf00,
0x9904f0f2,/*6d80*/
0x2201b240,
0x47b02300,
0xbcb6f628,
0xc00041b4,/*6d90*/
0xc0006d98,
0x0000000a,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch45 =
{
45,
BTDRV_PATCH_INACT,
sizeof(bes2300p_patch45_ibrt_ins_data_t2),
0x0002f6ec,
0xbb30f1d7,
0xc0006d50,
(uint8_t *)bes2300p_patch45_ibrt_ins_data_t2
};//RSSI AVERAGE 10
#else
const uint32_t bes2300p_patch45_ibrt_ins_data_t2[] = {
0x4a033304, /*6930*/
0xbf008153, 0x12c4f640, 0xb9bdf632, 0xc00061b8, /*6940*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch45 = {
45,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch45_ibrt_ins_data_t2),
0x00038cb0,
0xbe3ef1cd,
0xc0006930,
(uint8_t *)bes2300p_patch45_ibrt_ins_data_t2}; // pscan duration
#endif
const uint32_t bes2300p_patch46_ibrt_ins_data_t2[] = {
/*6d9c*/ 0x4b179a0b,
/*6da0*/ 0xd023429a,
/*6da4*/ 0x20b5f894,
/*6da8*/ 0xb9fab2d2,
/*6dac*/ 0xf9b4b22e,
/*6db0*/ 0x1b9b3098,
/*6db4*/ 0xf9b24a0f,
/*6db8*/ 0x42932000,
/*6dbc*/ 0x4251da05,
/*6dc0*/ 0xdd02428b,
/*6dc4*/ 0x7088f8d4,
/*6dc8*/ 0x4293e00f,
/*6dcc*/ 0xf8d4dd05,
/*6dd0*/ 0x3f017088,
/*6dd4*/ 0x4778f027,
/*6dd8*/ 0x4252e007,
/*6ddc*/ 0xda044293,
/*6de0*/ 0x7088f8d4,
/*6de4*/ 0xf0273701,
/*6de8*/ 0xbf004778,
/*6dec*/ 0x708cf8c4,
/*6df0*/ 0xbce4f623, // jump a002a7bc
/*6df4*/ 0xc0006df8,
/*6df8*/ 0x00000032, // 50
/*6dfc*/ 0xa003477b, // ld_acl_sniff_frm_isr lr
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch46 = {
46,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch46_ibrt_ins_data_t2),
0x0002a7b8,
0xbaf0f1dc, // jump a002a7b8 -> a0206d9c
0xc0006d9c,
(uint8_t *)bes2300p_patch46_ibrt_ins_data_t2}; // ld_acl_rx_sync clk_off cal
// active mode
const uint32_t bes2300p_patch47_ibrt_ins_data_t2[] = {
0xd10b2800, /*6e00*/
0x0f00f1ba, 0x4a07d10a, 0x2aff7812, 0x4615d006, /*6e10*/
0x30b2f894, 0xd10342ab, 0xb8aff625, 0xb974f625, /*6e20*/
0xb952f625, 0xc0006e2c, 0x000000ff, /*6e28*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch47 = {
47,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch47_ibrt_ins_data_t2),
0x0002bf78,
0xbf42f1da,
0xc0006e00,
(uint8_t *)bes2300p_patch47_ibrt_ins_data_t2}; /// adjust slot share for tws
/// without ibrt
const uint32_t bes2300p_patch48_ibrt_ins_data_t2[] = {
0x781b4b13, 0xd0212bff, 0x4604b510, 0xf946f632, 0x4b0fb1d8, 0x4b0f781a,
0x3022f853, 0x0f28f113, 0xf893d013, 0xeb0330c1, 0xb2db0342, 0x0383eb03,
0x4a09005b, 0xf3c35a9b, 0x2b5303c9, 0x7ea2d905, 0x441368e3, 0x4378f023,
0xbd1060e3, 0xbf004770, 0xc0006e2c, 0xc0000998, 0xd0211632, 0x0028f104,
0xffcef7ff, 0x60a36b63, 0xb9fcf627,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch48 = {
48,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch48_ibrt_ins_data_t2),
0x0002e290,
0xbdfcf1d8,
0xc0006e30,
(uint8_t *)bes2300p_patch48_ibrt_ins_data_t2}; // big packet send in sco v1
const uint32_t bes2300p_patch49_ibrt_ins_data_t2[] = {
/*6ec0*/ 0xf6232100,
/*6ec4*/ 0xf643feaf,
/*6ec8*/ 0x2300fb69,
/*6ecc*/ 0xbf006243,
/*6ed0*/ 0xbcf4f626,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch49 = {
49,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch49_ibrt_ins_data_t2),
0x0002d88c,
0xbb18f1d9, // jump a0018188 -> a0206978
0xc0006ec0,
(uint8_t *)
bes2300p_patch49_ibrt_ins_data_t2}; /// role switch fail to disconnect
#if 0
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch50 =
{
50,
BTDRV_PATCH_INACT,
0,
0x0003ea94,
0xbf00e04a,
0,
NULL
};//ble channel map disable
#elif 0
const uint32_t bes2300p_patch50_ibrt_ins_data_t2[] = {
0xf8948263, 0xbf0030b3, 0xbf00bf00, 0xbf00bf00, 0xbf002304, 0xb8b8f625,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch50 = {
50,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch50_ibrt_ins_data_t2),
0x0002c024,
0xbf3cf1da,
0xc0006ea0,
(uint8_t *)bes2300p_patch50_ibrt_ins_data_t2};
#else
const uint32_t bes2300p_patch50_ibrt_ins_data_t2[] = {
0x75a32312, /*6ed8*/
0x001bf898, 0x1088f8d1, 0x300cf8d8, 0xf023440b, /*6ee8*/
0xea834378, 0xf8986380, 0x1a5b1019, 0x101af898, /*6ef8*/
0xf3f1fbb3, 0xfbb3b2db, 0xfb02f1f2, 0x1ad23311, /*6f08*/
0xf894b2d6, 0xb91330b3, 0xf8842301, 0xf5fc30bb, /*6f18*/
0xf890fa05, 0xf5c33025, 0x3304631c, 0x23048263, /*6f28*/
0xb87cf625, /*6f2c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch50 = {
50,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch50_ibrt_ins_data_t2),
0x0002bfc4,
0xbf88f1da,
0xc0006ed8,
(uint8_t *)
bes2300p_patch50_ibrt_ins_data_t2}; ////ibrt connect slot adjust in sco
#endif
const uint32_t bes2300p_patch51_ibrt_ins_data_t2[] = {
0x490a60e3, /*6f30*/
0x428f6809, 0x4620d10c, 0x22002100, 0xf914f625, /*6f40*/
0x429d68a3, 0x60a5bf38, 0x134cf640, 0x3012f8a4, /*6f50*/
0xbf004620, 0xbc20f624, 0xc0006e2c, /*6f5c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch51 = {
51,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch51_ibrt_ins_data_t2),
0x0002b798,
0xbbcaf1db,
0xc0006f30,
(uint8_t *)bes2300p_patch51_ibrt_ins_data_t2}; // sniff trans mode timing
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch52 = {
52, BTDRV_PATCH_ACT,
0, 0x0001bf54,
0xbff2f7ff, // jump a001bf54 -> a001bf3c
0, NULL}; // LMP_MSG_HANDLER(switch_req) LC_CONNECTED
const uint32_t bes2300p_patch53_ibrt_ins_data_t2[] = {
/*6f74*/ 0xf632b140,
/*6f78*/ 0x42b0f841,
/*6f7c*/ 0xf632d104,
/*6f80*/ 0x2801f82b,
/*6f84*/ 0xbf00d002,
/*6f88*/ 0xbea8f619,
/*6f8c*/ 0xbf08f619,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch53 = {
53,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch53_ibrt_ins_data_t2),
0x00020cd8,
0xb94cf1e6, // jump a0020cd8 -> a0206f74
0xc0006f74,
(uint8_t *)bes2300p_patch53_ibrt_ins_data_t2}; // disconnect cmp
#if 0
const uint32_t bes2300p_patch54_ibrt_ins_data_t2[] =
{
0xb3384606,/*6f90*/
0x0a0388a0,
0xd1212b05,
0xf1034b14,
0xb2c10528,/*6fa0*/
0xe044f8df,
0x428a781a,
0x785ad114,
0x0f01f012,/*6fb0*/
0x88e7d006,
0x2f020a3f,
0xf85ed814,
0xb18f7027,/*6fc0*/
0x0f02f012,
0x8922d006,
0x2a020a12,
0xf85ed80a,/*6fe0*/
0xb13a2022,
0x42ab3302,
0xbf00d1e4,
0xb8e5f5fa,/*6ff0*/
0xb8dcf5fa,
0xb8ecf5fa,
0xc0005cd8,
0xc0006ff4,/*7000*/
0x0327032a,
0x010e0326,
0x0000010f,
0x00000000,/*7010*/
0x00000000,
0x00000000,
0x00000000,
0x00000000,/*7020*/
0x00000000,
0x00000000,/*7024*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch54 =
{
54,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch54_ibrt_ins_data_t2),
0x0000119c,
0xbef8f205,
0xc0006f90,
(uint8_t *)bes2300p_patch54_ibrt_ins_data_t2
};//msg filter
#else
const uint32_t bes2300p_patch54_ibrt_ins_data_t2[] = {
0x8885b5f8, // 73cc
0x2b050a2b, 0x4b49d121, 0x0428f103, 0x4f48b2e9, 0x428a781a, 0x785ad116,
0x0f01f012, 0x88c6d007, 0x2e020a36, 0xf857d86b, 0x2e006026, 0xf012d069,
0xd0070f02, 0x0a128902, 0xd8642a02, 0x2022f857, 0xd0622a00, 0x42a33302,
0xf240d1e2, 0x429d5335, 0x4605d15d, 0x08637b44, 0xd1142b04, 0xf5f988c0,
0x2832ffb5, 0xf240d155, 0x88e95006, 0xfb2ef5f9, 0x0a0288e8, 0xf8534b2e,
0xf8933022, 0xf5f9135e, 0x2401ff39, 0x2b18e050, 0x88c0d126, 0xff9ef5f9,
0xd1402836, 0x02fef004, 0x0a3688ee, 0xf8534b24, 0xf8844026, 0xb2f62044,
0x21184630, 0xff1cf61c, 0x4040f894, 0xd1302c01, 0xf6294630, 0x88e8fa29,
0xf800f60f, 0x0a0288e8, 0xf8534b19, 0xf8933022, 0xf5f9135e, 0xe027ff0f,
0xd1202b7e, 0x3b097b83, 0x2b01b2db, 0xf631d81d, 0x7a83fd77, 0xd81a2b02,
0xf8524a0f, 0xfab44023, 0x0964f484, 0x2401e014, 0x2401e012, 0x2401e010,
0x2401e00e, 0x2400e00c, 0x2400e00a, 0x2400e008, 0x2401e006, 0x2400e004,
0x2400e002, 0x2401e000, 0xbdf84620, 0xa0207520, 0xc0005cd8, 0xb1484606,
0xf7ff4620, 0x2801ff5f, 0xbf00d102, 0xbe56f5f9, 0xbe49f5f9, 0xbe40f5f9,
0x0327032a, 0x010e0326, 0x0000010f, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch54 = {
54,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch54_ibrt_ins_data_t2),
0x0000119c,
0xb9b2f206,
0xc00073cc,
(uint8_t *)bes2300p_patch54_ibrt_ins_data_t2}; // msg filter
#endif
const uint32_t bes2300p_patch55_ibrt_ins_data_t2[] = {
0x49079804, /*70a4*/
0x42886809, 0xf632d103, 0x2800f86b, 0x3301d004, /*70b4*/
0xf88bb2db, 0xbf0030bb, 0xbaf4f628, 0xc0006e2c, /*70c4*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ibrt_ins_patch55 = {
55,
BTDRV_PATCH_ACT,
sizeof(bes2300p_patch55_ibrt_ins_data_t2),
0x0002f6a4,
0xbcfef1d7,
0xc00070a4,
(uint8_t *)bes2300p_patch55_ibrt_ins_data_t2}; // tws link dont rx traffic++
/////2300p t2 ibrt patch (chip id =1)
static const uint32_t best2300p_t2_ibrt_ins_patch_config[] = {
56,
(uint32_t)&bes2300p_t2_ibrt_ins_patch0,
(uint32_t)&bes2300p_t2_ibrt_ins_patch1,
(uint32_t)&bes2300p_t2_ibrt_ins_patch2,
(uint32_t)&bes2300p_t2_ibrt_ins_patch3,
(uint32_t)&bes2300p_t2_ibrt_ins_patch4,
(uint32_t)&bes2300p_t2_ibrt_ins_patch5,
(uint32_t)&bes2300p_t2_ibrt_ins_patch6,
(uint32_t)&bes2300p_t2_ibrt_ins_patch7,
(uint32_t)&bes2300p_t2_ibrt_ins_patch8,
(uint32_t)&bes2300p_t2_ibrt_ins_patch9,
(uint32_t)&bes2300p_t2_ibrt_ins_patch10,
(uint32_t)&bes2300p_t2_ibrt_ins_patch11,
(uint32_t)&bes2300p_t2_ibrt_ins_patch12,
(uint32_t)&bes2300p_t2_ibrt_ins_patch13,
(uint32_t)&bes2300p_t2_ibrt_ins_patch14,
(uint32_t)&bes2300p_t2_ibrt_ins_patch15,
(uint32_t)&bes2300p_t2_ibrt_ins_patch16,
(uint32_t)&bes2300p_t2_ibrt_ins_patch17,
(uint32_t)&bes2300p_t2_ibrt_ins_patch18,
(uint32_t)&bes2300p_t2_ibrt_ins_patch19,
(uint32_t)&bes2300p_t2_ibrt_ins_patch20,
(uint32_t)&bes2300p_t2_ibrt_ins_patch21,
(uint32_t)&bes2300p_t2_ibrt_ins_patch22,
(uint32_t)&bes2300p_t2_ibrt_ins_patch23,
(uint32_t)&bes2300p_t2_ibrt_ins_patch24,
(uint32_t)&bes2300p_t2_ibrt_ins_patch25,
(uint32_t)&bes2300p_t2_ibrt_ins_patch26,
(uint32_t)&bes2300p_t2_ibrt_ins_patch27,
(uint32_t)&bes2300p_t2_ibrt_ins_patch28,
(uint32_t)&bes2300p_t2_ibrt_ins_patch29,
(uint32_t)&bes2300p_t2_ibrt_ins_patch30,
(uint32_t)&bes2300p_t2_ibrt_ins_patch31,
(uint32_t)&bes2300p_t2_ibrt_ins_patch32,
(uint32_t)&bes2300p_t2_ibrt_ins_patch33,
(uint32_t)&bes2300p_t2_ibrt_ins_patch34,
(uint32_t)&bes2300p_t2_ibrt_ins_patch35,
(uint32_t)&bes2300p_t2_ibrt_ins_patch36,
(uint32_t)&bes2300p_t2_ibrt_ins_patch37,
(uint32_t)&bes2300p_t2_ibrt_ins_patch38,
(uint32_t)&bes2300p_t2_ibrt_ins_patch39,
(uint32_t)&bes2300p_t2_ibrt_ins_patch40,
(uint32_t)&bes2300p_t2_ibrt_ins_patch41,
(uint32_t)&bes2300p_t2_ibrt_ins_patch42,
(uint32_t)&bes2300p_t2_ibrt_ins_patch43,
(uint32_t)&bes2300p_t2_ibrt_ins_patch44,
(uint32_t)&bes2300p_t2_ibrt_ins_patch45,
(uint32_t)&bes2300p_t2_ibrt_ins_patch46,
(uint32_t)&bes2300p_t2_ibrt_ins_patch47,
(uint32_t)&bes2300p_t2_ibrt_ins_patch48,
(uint32_t)&bes2300p_t2_ibrt_ins_patch49,
(uint32_t)&bes2300p_t2_ibrt_ins_patch50,
(uint32_t)&bes2300p_t2_ibrt_ins_patch51,
(uint32_t)&bes2300p_t2_ibrt_ins_patch52,
(uint32_t)&bes2300p_t2_ibrt_ins_patch53,
(uint32_t)&bes2300p_t2_ibrt_ins_patch54,
(uint32_t)&bes2300p_t2_ibrt_ins_patch55,
};
#endif
/***************************************************************************
*
* instruction patch Information
*
* BT ROM Chip Version:1302 T1
*
* [IBRT]
* patch 7: 0xC0006a50--->0xC0006a78
* patch 8: 0xC0006a90--->0xC0006a9C
* patch 9: in used check ble conflict with acl
* patch 10: 0xC0006AA0--->0xC0006AC8
* patch 11: 0xC0006AD0--->0xC0006AEC
* patch 12: 0xC0006AF0--->0xC0006B04
* patch 13: 0xC0006B08--->0xC0006B18
* patch 14: in use
* patch 15: 0xC0006B74--->0xC0006B80
* patch 16: in used :check afh mismatch 1
* patch 17: in used :check afh mismatch 2
* patch 18: 0xC0006B88--->0xC006C14 fix acl interval in sco
* patch 19: in used
* patch 20: in used
* patch 21: 0xC0006C78--->0xC0006C88
* patch 22: 0xC0006810--->0xC0006878
* patch 23: 0xC0006880--->0xC0006890
* patch 24: 0xC0006C90--->0xC000689C
* patch 25: in used:ld_acl_start t_poll
* patch 26: 0xC0006CA0--->0xC0006CC8: unused
* patch 27: in used: ld_sniffer_update_status: SNIFFER_EVT_SCO_CONNECTED
* patch 28: in used: 0xC0006CF8--->0xC0006D0C
* patch 29: in used: 0xC0006D14--->0xC0006D30
****************************************************************************/
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch0 = {
0, BTDRV_PATCH_ACT, 0, 0x00025ef4, 0xbf00bf00, 0,
NULL}; /// remove the memset of ldenv
const uint32_t bes2300p_t1_patch_0a_ins_data[] = {
/*6810*/ 0x681b4b0e,
/*6814*/ 0x4b0eb1ab,
/*6818*/ 0x31cbf893,
/*681c*/ 0x4a0d011b,
/*6820*/ 0xf3c35a9b,
/*6824*/ 0x4a0c2340,
/*6828*/ 0x2a025c12,
/*682c*/ 0x4a0ad103,
/*6830*/ 0x20005413,
/*6834*/ 0x42934770,
/*6838*/ 0x4a07d005,
/*683c*/ 0x20005413,
/*6840*/ 0x20004770,
/*6844*/ 0x20014770,
/*6848*/ 0xbf004770,
/*684c*/ 0xc000685c,
/*6850*/ 0xc0005d34,
/*6854*/ 0xd02115f2,
/*6858*/ 0xc0006860,
/*685c*/ 0x00000001, // sw_seqn_filter_en
/*6860*/ 0x00020202, // link_id_seq
/*6864*/ 0x9805bf00,
/*6868*/ 0xffd2f7ff, // call a0206810
/*686c*/ 0x2019b910,
/*6870*/ 0xbd62f628, // jump a002f338
/*6874*/ 0x22802107,
/*6878*/ 0xbe22f628, // jump a002f4c0
}; // ld_acl_rx ld_sw_seqn_filter
const uint32_t bes2300p_t1_patch_0b_ins_data[] = {
/*6880*/ 0x328af885,
/*6884*/ 0x22024b02,
/*6888*/ 0xbf00559a,
/*688c*/ 0xbe90f614, // jump a001b5b0
/*6890*/ 0xc0006860, // link_id_seq
}; // lc_rsw_end_ind link_id_seq[link_id]=2
const uint32_t bes2300p_t1_patch_1_ins_data[] = {
0x2c021b64, 0x2009d101, 0x3402e002, 0xbc4af63c, 0xbca6f63c,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch1 = {
1,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_1_ins_data),
0x000431a0,
0xbbaef1c3,
0xc0006900,
(uint8_t *)bes2300p_t1_patch_1_ins_data}; // for ble and sco:
// OVERLAP_RESERVE2 in
// lld_check_conflict_with_ble
const uint32_t bes2300p_t1_patch_2_ins_data[] = {
0x781b4b05, 0xd1032b09, 0x4b032200, 0x2704701a, 0x60eb1be3, 0xb8ecf627,
0xc000693c, ////prev_conflict_type_record
0x00000000,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch2 = {
2,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_2_ins_data),
0x0002db0c,
0xbf08f1d8,
0xc0006920,
(uint8_t *)bes2300p_t1_patch_2_ins_data}; // for ble and sco:
// prev_conflict_type_record in
// ld_sco_avoid_ble_connect
const uint32_t bes2300p_t1_patch_3_ins_data[] = {
0xd1084298, 0x3047f894, 0x92004a0e, 0x22024631, 0xfd42f61f, 0x4b0ce014,
0xb143781b, 0x3047f894, 0x92004a08, 0x22024631, 0xfd36f61f, 0xf894e008,
0x4a043047, 0x46319200, 0xbf002204, 0xfd2cf61f, 0xbaa2f62b, 0xa002fce5,
0xc000699c, /// ble_sco_need_move_flag
0x00000000,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_3_ins_data),
0x00031ec4,
0xbd44f1d4,
0xc0006950,
(uint8_t *)bes2300p_t1_patch_3_ins_data}; // for ble and sco:
// ld_fm_prog_push
// LD_FRAME_TYPE_ESCO when
// ble_sco_need_move_flag in
// ld_sco_evt_start_cbk
const uint32_t bes2300p_t1_patch_4_ins_data[] = {
0x781b4b18, 0x2200b113, 0x701a4b16, 0x781b4b18, 0xd0232b00,
0x4b162201, 0xbf00701a, 0xb1e84680, 0x781b4b11, 0xd1192b00,
0x0304f1a8, 0x2b01b2db, 0xf1b8d903, 0xd1130f09, 0x2201e00c,
0x701a4b09, 0x0f09f1b8, 0x2209d103, 0x701a4b08, 0x68eb2704,
0xb8a6f627, 0x4b032201, 0xe7f4701a, 0xb8c2f627, 0xb8aff627,
0xc000699c, /// ble_sco_need_move_flag
0xc000099f,
0xc000693c, /// prev_conflict_type_record
0xc0006a18, /// sco_find_sync_flag
0x00000000,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch4 = {
4,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_4_ins_data),
0x0002db30,
0xbf38f1d8,
0xc00069a4,
(uint8_t *)bes2300p_t1_patch_4_ins_data}; // for ble and sco:
// ble_sco_need_move_flag =
// 1,need_move=4 in
// ld_sco_avoid_ble_connect
const uint32_t bes2300p_t1_patch_5_ins_data[] = {
0xfbb24a02,
0xf5f9f3f3,
0xbf00bec6,
0x9af8da00,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch5 = {
5,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_5_ins_data),
0x00000650,
0xb936f206,
0xc00068c0,
(uint8_t *)bes2300p_t1_patch_5_ins_data}; // lpclk
const uint32_t bes2300p_t1_patch_6_ins_data[] = {
0xd00d2b00, 0xf8384b07, 0xf4133003, 0xd0024f00, 0x4b052201,
0xf899701a, 0x2b0130b3, 0xba5af629, 0xbaccf629, 0xd02111f8,
0xc0006a18, ////sco_find_sync_flag
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch6 = {
6,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_6_ins_data),
0x0002feec,
0xbd98f1d6,
0xc0006a20,
(uint8_t *)bes2300p_t1_patch_6_ins_data}; /// for ble and sco:
/// sco_find_sync_flag = 1 in
/// ld_sco_frm_isr
const uint32_t bes2300p_t1_patch_7_ins_data[] = {
0xd10f2f03, 0xfd16f642, 0x4008f8d8, 0x46216940, 0xf6242220, 0xb128fff5,
0x0320f104, 0x4378f023, 0x3008f8c8, 0xbf002000, 0xbc7df625,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch7 = {
7,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_7_ins_data),
0x0002c32c,
0xbb90f1da,
0xc0006A50,
(uint8_t *)bes2300p_t1_patch_7_ins_data}; // ble avoid role switch
const uint32_t bes2300p_t1_patch_8_ins_data[] = {
0xf855b2e6,
0xb1091b04,
0xbc71f610,
0xbc78f610,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch8 = {
8,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_8_ins_data),
0x00017378,
0xbb8af1ef,
0xc0006A90,
(uint8_t *)bes2300p_t1_patch_8_ins_data}; // lc_check_bt_device_conected
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch9 = {
9, BTDRV_PATCH_ACT, 0, 0x00043238, 0xbf342c09, 0,
NULL}; // check conflict 8 slot 1
const uint32_t bes2300p_t1_patch_10_ins_data[] = {
0xf8934b07, 0x98053078, 0xd1074298, 0xd0052b03, 0x681b4b04, 0x2201b913,
0x601a4b02, 0xbc3ff628, 0xc0006358, 0xc0006AC8, 0x00000000,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch10 = {
10,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_10_ins_data),
0x0002f338,
0xbbb2f1d7,
0xc0006AA0,
(uint8_t *)bes2300p_t1_patch_10_ins_data}; // ibrt snoop success
const uint32_t bes2300p_t1_patch_11_ins_data[] = {
0xb149d208, 0x681b4b05, 0x2200b133, 0x601a4b03,
0xbce4f632, 0xbcf2f632, 0xbcfff632, 0xc0006AC8,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch11 = {
11,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_11_ins_data),
0x000394a8,
0xbb12f1cd,
0xc0006AD0,
(uint8_t *)bes2300p_t1_patch_11_ins_data}; // ibrt snoop success 2
const uint32_t bes2300p_t1_patch_12_ins_data[] = {
0x46032102, 0xf9b4f633, 0xbf004618, 0x22012105, 0xfa28f61d, 0xba4ff633,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch12 = {
12,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_12_ins_data),
0x00039fa0,
0xbda6f1cc,
0xc0006AF0,
(uint8_t *)bes2300p_t1_patch_12_ins_data}; // hack tws switch tx seqn error
const uint32_t bes2300p_t1_patch_13_ins_data[] = {
0xfc6ef631, 0xfcbaf631, 0xbf004620, 0xfcc2f631, 0xbfb2f62a,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch13 = {
13,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_13_ins_data),
0x00031a7c,
0xb844f1d5,
0xc0006B08,
(uint8_t *)bes2300p_t1_patch_13_ins_data}; // lmp filter enable
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch14 = {
14, BTDRV_PATCH_ACT, 0, 0x000388a8, 0xbf00e001, 0, NULL}; // open afh update
const uint32_t bes2300p_t1_patch_15_ins_data[] = {
0xfbd0f631,
0x20004601,
0xfbb8f633,
0xba9ef618,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch15 = {
15,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_15_ins_data),
0x0001f0bc,
0xbd5af1e7,
0xc0006B74,
(uint8_t *)bes2300p_t1_patch_15_ins_data}; // ibrt slave stop sco
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch16 = {
16,
#if defined(IBRT)
BTDRV_PATCH_ACT,
#else
BTDRV_PATCH_INACT,
#endif
0,
0x00038a78,
0x7a22d206,
0,
NULL,
}; // check afh mismatch 1
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch17 = {
17,
#if defined(IBRT)
BTDRV_PATCH_ACT,
#else
BTDRV_PATCH_INACT,
#endif
0,
0x00038a88,
0xbf00e00e,
0,
NULL,
}; // check afh mismatch 2
const uint32_t bes2300p_t1_patch_18_ins_data[] = {
0x4606b570, 0x7e8d460c, 0xf5f5fb92, 0x2114b2e8, 0x68e175b1, 0xf023440b,
0x7ee14378, 0x6381ea83, 0x1a5b7e61, 0xfbb37ea1, 0xb2dbf3f1, 0xf1f0fbb3,
0x3311fb00, 0xb2c31ac0, 0xd8042a3c, 0x622ef640, 0x22048272, 0xf640e003,
0x8272124c, 0x7ea02206, 0xfb0068e1, 0x44101003, 0x4078f020, 0x210060b0,
0xfab4f63c, 0xd9072806, 0xb2ed7ea3, 0xfb0568b2, 0xf0252503, 0x60b54578,
0xbf00bd70, 0x46514620, 0x2042f8b8, 0x3088f8d3, 0xffbaf7ff, 0xbfcbf624,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch18 = {
18,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_18_ins_data),
0x0002bad8,
0xb894f1db, // jump a002bad8 -> A0206C04
0xc0006B88,
(uint8_t *)bes2300p_t1_patch_18_ins_data};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch19 = {
19, BTDRV_PATCH_ACT, 0, 0x00039d78, 0xd13b2902, 0, NULL}; // ibrt switch op
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch20 = {
20, BTDRV_PATCH_ACT, 0, 0x00030240, 0xe0022000, 0, NULL}; // acl end assert
const uint32_t bes2300p_t1_patch_21_ins_data[] = {
0x781b4b03, 0xd1012b01, 0xbc5cf633, 0xbc63f633, 0xc0006358,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch21 = {
21,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_21_ins_data),
0x0003a528,
0xbba6f1cc,
0xc0006C78,
(uint8_t *)bes2300p_t1_patch_21_ins_data}; // snoop disconnect
// __SW_SEQ_FILTER__ - add software seqn filter to protect recive identical
// repeating packages
#if defined(IBRT)
#define __SW_SEQ_FILTER__
#endif
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch22 = {
22,
#ifdef __SW_SEQ_FILTER__
BTDRV_PATCH_INACT,
#else
BTDRV_PATCH_INACT,
#endif
sizeof(bes2300p_t1_patch_0a_ins_data),
0x0002f334,
0xba96f1d7, // jump a002f334 -> a0206864
0xc0006810,
(uint8_t *)bes2300p_t1_patch_0a_ins_data};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch23 = {
23,
#ifdef __SW_SEQ_FILTER__
BTDRV_PATCH_INACT,
#else
BTDRV_PATCH_INACT,
#endif
sizeof(bes2300p_t1_patch_0b_ins_data),
0x0001b5ac,
0xb968f1eb, // jump a001b5ac -> a0206880
0xc0006880,
(uint8_t *)
bes2300p_t1_patch_0b_ins_data}; // lc_rsw_end_ind link_id_seq[link_id]=2
const uint32_t bes2300p_t1_patch_24_ins_data[] = {
0x0f01f1b8,
0x380ebf0c,
0xb280301c,
0xbb30f632,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch24 = {
24,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_24_ins_data),
0x000392d8,
0xbcdaf1cd,
0xc0006c90,
(uint8_t *)bes2300p_t1_patch_24_ins_data}; // start snoop using bitoff
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch25 = {
25,
#if defined(IBRT)
BTDRV_PATCH_ACT,
#else
BTDRV_PATCH_INACT,
#endif
0,
0x0002e09c,
0xf8a6230a,
0,
NULL,
}; // ld_acl_start t_poll
const uint32_t bes2300p_t1_patch_26_ins_data[] = {
0x5040f898, 0xd80d2d14, 0xfbecf642, 0x690068a6, 0xb2ea4631, 0xfeccf624,
0xf106b120, 0xf0230364, 0x60a34378, 0xfbdef642, 0xbfb2f624,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch26 = {
26,
BTDRV_PATCH_INACT,
sizeof(bes2300p_t1_patch_26_ins_data),
0x0002bc2c,
0xb838f1db,
0xc0006CA0,
(uint8_t *)bes2300p_t1_patch_26_ins_data}; // mobile link avoid tws link
// when send profile
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch27 = {
27, BTDRV_PATCH_ACT, 0, 0x0003890c, 0xbf00e008, 0, NULL,
}; // ld_sniffer_update_status: SNIFFER_EVT_SCO_CONNECTED
const uint32_t bes2300p_t1_patch_28_ins_data[] = {
0xfa58f63f, 0x4b034a02, 0xbf00601a, 0xbb66f63f, 0xffff0009, 0xd03300f0,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch28 = {
28,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_28_ins_data),
0x000463d0,
0xbc92f1c0,
0xc0006CF8,
(uint8_t *)bes2300p_t1_patch_28_ins_data}; // lld_evt_end_isr:SYS 2M
const uint32_t bes2300p_t1_patch_29_ins_data[] = {
0x681b4b0a, 0x0301f033, 0xbf00d106, 0x4b044a03, 0x4a04601a, 0x601a4b04,
0xbc96f63d, 0x04007107, 0xD0220000, 0xffff0008, 0xd03300f0, 0xd0220054,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch29 = {
29,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_29_ins_data),
0x00044658,
0xbb5cf1c2,
0xc0006d14,
(uint8_t *)bes2300p_t1_patch_29_ins_data}; // lld_evt_schedule:SYS 1M
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch30 = {
30, BTDRV_PATCH_ACT, 0, 0x00029e70, 0xbf8c7fb9, 0, NULL,
}; // ld_acl_rx_sync2
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch31 = {
31, BTDRV_PATCH_ACT, 0, 0x0002a068, 0xbf947fb9, 0, NULL,
}; // ld_acl_rx_no_sync
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch32 = {
32, BTDRV_PATCH_ACT, 0, 0x0002a1b0, 0x7fb9f5b3, 0, NULL,
}; // ld_acl_rx_sync
const uint32_t bes2300p_t1_patch_33_ins_data[] = {
0xfdf6f624, 0x4638b920, 0xf63c2100, 0xb108fa01, 0xbf2bf628, 0xbf3df628,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch33 = {
33,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_patch_33_ins_data),
0x0002fba8,
0xb8ccf1d7,
0xc0006d44,
(uint8_t *)bes2300p_t1_patch_33_ins_data}; // protect ble 8 slot
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch34 = {
34, BTDRV_PATCH_ACT, 0, 0x00043248, 0xbf8c2c08, 0, NULL,
}; // check conflict 8 slot 2
const uint32_t bes2300p_t1_patch_35_ins_data[] = {
/*6d54*/ 0xf8534b02,
/*6d58*/ 0xb11b3020,
/*6d5c*/ 0xbafdf610,
/*6d60*/ 0xc0005c70,
/*6d64*/ 0x47702000,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch35 = {
35,
BTDRV_PATCH_INACT,
sizeof(bes2300p_t1_patch_35_ins_data),
0x00017354,
0xbcfef1ef,
0xc0006d54,
(uint8_t *)bes2300p_t1_patch_35_ins_data}; // is_in_sniff_mode use NULL ptr
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch36 = {
36, BTDRV_PATCH_INACT, 0, 0x00039b58, 0xf2002802, 0, NULL,
}; // ld_sniffer_start_monitored_link(link_id >= MAX_NB_ACTIVE_ACL)
/////2300p t1 patch
static const uint32_t best2300p_t1_ins_patch_config[] = {
37,
(uint32_t)&bes2300p_t1_ins_patch0,
(uint32_t)&bes2300p_t1_ins_patch1,
(uint32_t)&bes2300p_t1_ins_patch2,
(uint32_t)&bes2300p_t1_ins_patch3,
(uint32_t)&bes2300p_t1_ins_patch4,
(uint32_t)&bes2300p_t1_ins_patch5,
(uint32_t)&bes2300p_t1_ins_patch6,
(uint32_t)&bes2300p_t1_ins_patch7,
(uint32_t)&bes2300p_t1_ins_patch8,
(uint32_t)&bes2300p_t1_ins_patch9,
(uint32_t)&bes2300p_t1_ins_patch10,
(uint32_t)&bes2300p_t1_ins_patch11,
(uint32_t)&bes2300p_t1_ins_patch12,
(uint32_t)&bes2300p_t1_ins_patch13,
(uint32_t)&bes2300p_t1_ins_patch14,
(uint32_t)&bes2300p_t1_ins_patch15,
(uint32_t)&bes2300p_t1_ins_patch16,
(uint32_t)&bes2300p_t1_ins_patch17,
(uint32_t)&bes2300p_t1_ins_patch18,
(uint32_t)&bes2300p_t1_ins_patch19,
(uint32_t)&bes2300p_t1_ins_patch20,
(uint32_t)&bes2300p_t1_ins_patch21,
(uint32_t)&bes2300p_t1_ins_patch22,
(uint32_t)&bes2300p_t1_ins_patch23,
(uint32_t)&bes2300p_t1_ins_patch24,
(uint32_t)&bes2300p_t1_ins_patch25,
(uint32_t)&bes2300p_t1_ins_patch26,
(uint32_t)&bes2300p_t1_ins_patch27,
(uint32_t)&bes2300p_t1_ins_patch28,
(uint32_t)&bes2300p_t1_ins_patch29,
(uint32_t)&bes2300p_t1_ins_patch30,
(uint32_t)&bes2300p_t1_ins_patch31,
(uint32_t)&bes2300p_t1_ins_patch32,
(uint32_t)&bes2300p_t1_ins_patch33,
(uint32_t)&bes2300p_t1_ins_patch34,
(uint32_t)&bes2300p_t1_ins_patch35,
(uint32_t)&bes2300p_t1_ins_patch36,
};
void btdrv_ins_patch_write(BTDRV_PATCH_STRUCT *ins_patch_p) {
uint32_t remap_addr;
/// uint8_t i=0;
remap_addr = ins_patch_p->patch_remap_address | 1;
btdrv_write_memory(
_32_Bit,
(BTDRV_PATCH_INS_REMAP_ADDR_START + ins_patch_p->patch_index * 4),
(uint8_t *)&ins_patch_p->patch_remap_value, 4);
if (ins_patch_p->patch_length != 0) // have ram patch data
{
btdrv_memory_copy((uint32_t *)ins_patch_p->patch_start_address,
(uint32_t *)ins_patch_p->patch_data,
ins_patch_p->patch_length);
}
btdrv_write_memory(
_32_Bit, (BTDRV_PATCH_INS_COMP_ADDR_START + ins_patch_p->patch_index * 4),
(uint8_t *)&remap_addr, 4);
}
void btdrv_ins_patch_init(void) {
const BTDRV_PATCH_STRUCT *ins_patch_p;
if (hal_get_chip_metal_id() == HAL_CHIP_METAL_ID_0) {
for (uint8_t i = 0; i < best2300p_t1_ins_patch_config[0]; i++) {
ins_patch_p = (BTDRV_PATCH_STRUCT *)best2300p_t1_ins_patch_config[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)best2300p_t1_ins_patch_config[i + 1]);
}
} else if (hal_get_chip_metal_id() == HAL_CHIP_METAL_ID_1) {
#ifndef IBRT
for (uint8_t i = 0; i < best2300p_t2_ins_patch_config[0]; i++) {
ins_patch_p = (BTDRV_PATCH_STRUCT *)best2300p_t2_ins_patch_config[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)best2300p_t2_ins_patch_config[i + 1]);
}
#else
for (uint8_t i = 0; i < best2300p_t2_ibrt_ins_patch_config[0]; i++) {
ins_patch_p =
(BTDRV_PATCH_STRUCT *)best2300p_t2_ibrt_ins_patch_config[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)best2300p_t2_ibrt_ins_patch_config[i + 1]);
}
#endif
} else if (hal_get_chip_metal_id() == HAL_CHIP_METAL_ID_2) {
#ifdef IBRT
for (uint8_t i = 0; i < best2300p_t3_ibrt_ins_patch_config[0]; i++) {
ins_patch_p =
(BTDRV_PATCH_STRUCT *)best2300p_t3_ibrt_ins_patch_config[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)best2300p_t3_ibrt_ins_patch_config[i + 1]);
}
#else
for (uint8_t i = 0; i < best2300p_t3_ins_patch_config[0]; i++) {
ins_patch_p = (BTDRV_PATCH_STRUCT *)best2300p_t3_ins_patch_config[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)best2300p_t3_ins_patch_config[i + 1]);
}
#endif
} else {
ASSERT(0, "%s:error chip id=%d", __func__, hal_get_chip_metal_id());
}
}
///////////////////data patch ..////////////////////////////////////
static const POSSIBLY_UNUSED uint32_t best2300p_t2_data_patch_config[] = {};
void btdrv_data_patch_write(const BTDRV_PATCH_STRUCT *d_patch_p) {
uint32_t remap_addr;
uint8_t i = 0;
remap_addr = d_patch_p->patch_remap_address | 1;
btdrv_write_memory(
_32_Bit, (BTDRV_PATCH_DATA_COMP_ADDR_START + d_patch_p->patch_index * 4),
(uint8_t *)&remap_addr, 4);
btdrv_write_memory(
_32_Bit, (BTDRV_PATCH_DATA_REMAP_ADDR_START + d_patch_p->patch_index * 4),
(uint8_t *)&d_patch_p->patch_remap_value, 4);
if (d_patch_p->patch_length != 0) // have ram patch data
{
for (; i < (d_patch_p->patch_length - 1) / 128; i++) {
btdrv_write_memory(_32_Bit, d_patch_p->patch_start_address + i * 128,
(d_patch_p->patch_data + i * 128), 128);
}
btdrv_write_memory(_32_Bit, d_patch_p->patch_start_address + i * 128,
d_patch_p->patch_data + i * 128,
d_patch_p->patch_length % 128);
}
}
void btdrv_ins_patch_disable(uint8_t index) {
uint32_t addr = 0;
btdrv_write_memory(_32_Bit, (BTDRV_PATCH_INS_COMP_ADDR_START + index * 4),
(uint8_t *)&addr, 4);
}
void btdrv_data_patch_init(void) {
#if 0
const BTDRV_PATCH_STRUCT *data_patch_p;
if(hal_get_chip_metal_id() >= HAL_CHIP_METAL_ID_1)
{
for(uint8_t i=0; i<best2300p_t2_data_patch_config[0]; i++)
{
data_patch_p = (BTDRV_PATCH_STRUCT *)best2300p_t2_data_patch_config[i+1];
if(data_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_data_patch_write((BTDRV_PATCH_STRUCT *)best2300p_t2_data_patch_config[i+1]);
}
}
#endif
}
//////////////////////////////patch enable////////////////////////
void btdrv_patch_en(uint8_t en) {
uint32_t value[2];
// set patch enable
value[0] = 0x2f02 | en;
// set patch remap address to 0xc0000100
value[1] = 0x20000100;
btdrv_write_memory(_32_Bit, BTDRV_PATCH_EN_REG, (uint8_t *)&value, 8);
}
/////////////2300p t3 test mode patch///////////////////////
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_0 = {
0, BTDRV_PATCH_ACT, 0, 0x0002ceb4, 0xe00b0f0f, 0,
NULL}; // ld_acl_rx() average rssi
const uint32_t bes2300p_t3_ins_patch_data_testmode_1[] = {
/*6a98*/ 0x99049803,
/*6a9c*/ 0x4b12b470,
/*6aa0*/ 0x010e5c5a,
/*6aa4*/ 0x19734d11,
/*6aa8*/ 0x78244c11,
/*6aac*/ 0xd20342a2,
/*6ab0*/ 0x32015498,
/*6ab4*/ 0xe001b2d2,
/*6ab8*/ 0x22015570,
/*6abc*/ 0x5442480a,
/*6ac0*/ 0x461ab14c,
/*6ac4*/ 0x23001919,
/*6ac8*/ 0x0b01f912,
/*6acc*/ 0xbf004403,
/*6ad0*/ 0xd1f9428a,
/*6ad4*/ 0x2300e000,
/*6ad8*/ 0xf0f4fb93,
/*6adc*/ 0xbc70b240,
/*6ae0*/ 0x22019904,
/*6ae4*/ 0xba00f626, // jump a0206ae4 -> a002cee8
/*6ae8*/ 0xc0006af8, // addr of rssi_idx_for_agc
/*6aec*/ 0xc0006afc, // addr of rssi_set_for_agc
/*6af0*/ 0xc0006af4, // addr of N
/*6af4*/ 0x00000005, // N : 1 ~ 16
/*6af8*/ 0x00000000, // rssi_idx_for_agc[3]
/*6afc*/ 0xbabababa, // rssi_set_for_agc[3*16]
/*6b00*/ 0xbabababa,
/*6b04*/ 0xbabababa,
/*6b08*/ 0xbabababa,
/*6b0c*/ 0xbabababa,
/*6b10*/ 0xbabababa,
/*6b14*/ 0xbabababa,
/*6b18*/ 0xbabababa,
/*6b1c*/ 0xbabababa,
/*6b20*/ 0xbabababa,
/*6b24*/ 0xbabababa,
/*6b28*/ 0xbabababa,
/*6b2c*/ 0xbabababa,
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_1 = {
1,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t3_ins_patch_data_testmode_1),
0x0002cee4,
0xbdd8f1d9, // jump a002cee4 -> a0206a98
0xc0006a98,
(uint8_t *)
bes2300p_t3_ins_patch_data_testmode_1}; // ld_acl_rx() average rssi
const uint32_t bes2300p_t3_ins_patch_data_testmode_2[] = {
0x2028f843, /*6b3c*/
0xf8434b08, 0x4b052028, 0x4b0e701a, 0x2201701a, 0xf8434b08,
0xbf002028, 0xba32f624, 0xc0006b60, 0x00000000, 0xc0006b68,
0x00000000, 0x00000000, 0x00000000, 0xc0006b78, 0x00000001,
0x00000001, 0x00000001, 0xc0006b88, 0x00000000, /*6b88*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_2 = {
2,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t3_ins_patch_data_testmode_2),
0x0002afbc,
0xbdbef1db,
0xc0006b3c,
(uint8_t *)bes2300p_t3_ins_patch_data_testmode_2}; // sync clear count
const uint32_t bes2300p_t3_ins_patch_data_testmode_3[] = {
0x47f0e92d, /*7050*/
0x4b97b082, 0x236e5c1e, 0xf300fb03, 0x5a9b4a95, 0x4f00f413, 0x8120f040,
0x46044689, 0x1800ea4f, 0xeb084f91, 0x4b910507, 0xa020f853, 0xf8524a90,
0x33013020, 0x3020f842, 0xf860f635, 0x42a04601, 0x8088f040, 0xf8534b8a,
0x4b8a2024, 0x429a681b, 0xf8dad817, 0xebc22084, 0xf0230309, 0xf1b34378,
0xd9046f80, 0x0302ebc9, 0x4378f023, 0x4a82425b, 0x0024f852, 0x68124a81,
0xf200fb02, 0xf2404293, 0x4b7f80eb, 0x3000f993, 0x4b7eb9c3, 0xc000f893,
0x0f00f1bc, 0x462ad00a, 0x0e0ceb05, 0xf9122300, 0x44030b01, 0xd1fa4572,
0xe0014662, 0x46132200, 0xfcfcfb93, 0xf8804872, 0xe001c000, 0x46132200,
0xf890486f, 0x4870e000, 0x9000f890, 0xf890486f, 0xfa4fc000, 0xebc9f08e,
0xfa4f0000, 0x4550fa8c, 0xebc9dd05, 0x48660e0e, 0xe000f880, 0x4864e002,
0xc000f880, 0x0e00f04f, 0xf840485d, 0xf8dfe024, 0xf85ee178, 0x30010024,
0x0024f84e, 0x7800485d, 0xd2054286, 0x783f4f5a, 0x360155af, 0xe004b2f6,
0x78364e57, 0x6007f808, 0x4f4d2601, 0x4282553e, 0x442ada06, 0xf9124405,
0x44234b01, 0xd1fa42aa, 0xfb934a53, 0x9200f0f0, 0xb2406a14, 0x23002201,
0xe08147a0, 0xf8534b46, 0x4b4e2024, 0x429a681b, 0xf8dad816, 0xebc22084,
0xf0230309, 0xf1b34378, 0xd9046f80, 0x0302ebc9, 0x4378f023, 0x4a3e425b,
0x1024f852, 0x68124a44, 0xf201fb02, 0xd9634293, 0xf9934b42, 0xb9c33000,
0xf8934b3a, 0xf1bee000, 0xd00a0f00, 0xeb05462a, 0x2300000e, 0x1b01f912,
0x4282440b, 0x4672d1fa, 0x2200e001, 0xfb934613, 0x4936fefe, 0xe000f881,
0x2200e001, 0x49334613, 0x49337808, 0xc000f891, 0xf8914932, 0xb241e000,
0x0101ebcc, 0xf98efa4f, 0xdd044549, 0x0000ebcc, 0x7008492a, 0x4929e002,
0xe000f881, 0x491c2000, 0x0024f841, 0xf850481c, 0x31011024, 0x1024f840,
0x7808491c, 0xd2054286, 0x78094920, 0x360155a9, 0xe004b2f6, 0x7809491d,
0x1007f808, 0x490c2601, 0x4282550e, 0x442ada06, 0xf9124405, 0x440b1b01,
0xd1fa42aa, 0xfb934a12, 0x9200f0f0, 0xb2406a15, 0x22014621, 0x47a82300,
0xe8bdb002, 0xbf0087f0,
0xc0006af8, // rssi_idx_for_agc[link_id] shenxin
0xd02111f8, // EM_BT_RD(EM_BT_RXBIT_ADDR
0xc0006afc, // rssi_set_for_agc shenxin
0xc00009d4, // ld_acl_env[link_id]
0xc0006b68, // link_no_sync_count[link_id]
0xc00072fc, // link_agc_thd_tws
0xc0006b78, // link_no_sync_count_time[link_id]
0xc0007300, // link_agc_thd_tws_time
0xc0006b60, // rssi_store_tws
0xc0006af4, // n shenxin
0xc0007304, // rssi_tws_step
0xc0007308, // rssi_min_value_tws
0xc0004268, // rwip_rf.rxgain_cntl
0xc000730c, // link_agc_thd_mobile
0xc0007310, // link_agc_thd_mobile_time
0xc0006b88, // rssi_store_mobile
0xc0007314, // rssi_mobile_step
0xc0007318, // rssi_min_value_mobile
0xffffffff, // link_agc_thd_tws
0x00000030, // link_agc_thd_tws_time
0x00000014, // rssi_tws_step
0x0000009c, // rssi_min_value_tws
0xffffffff, // link_agc_thd_mobile
0x00000030, // link_agc_thd_mobile_time
0x00000014, // rssi_mobile_step
0x000000a1, // rssi_min_value_mobile
0x99029804, 0xfe96f7ff, 0xfc48f632, 0xb898f626, /*7328*/
};
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t3_ins_patch_data_testmode_3),
0x0002d458,
0xbf60f1d9,
0xc0007050,
(uint8_t *)bes2300p_t3_ins_patch_data_testmode_3}; // swagc no sync
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_4 = {
4, BTDRV_PATCH_ACT, 0, 0x0000e47a, 0xe0027b20, 0,
NULL}; // lm_inq_res_ind_handler() rssi
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_5 = {
5, BTDRV_PATCH_INACT, 0, 0x0002ad78, 0xbf00e009, 0,
NULL}; // ld_acl_rx_no_sync() rssi
const uint32_t bes2300p_t3_ins_patch_data_testmode_6[] = {
0xf8802300, 0xf8803024, 0xbf003025, 0x30b3f894, 0xbc18f62d,
}; /* 6b90-6ba0 */
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_6 = {
6,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t3_ins_patch_data_testmode_6),
0x000343d0,
0xbbdef1d2,
0xc0006b90,
(uint8_t *)
bes2300p_t3_ins_patch_data_testmode_6}; // nosig test pattern problem
const BTDRV_PATCH_STRUCT bes2300p_t3_ins_patch_testmode_7 = {
7, BTDRV_PATCH_ACT, 0, 0x00000880, 0x26004c0e, 0, NULL,
}; // rwip_env.sleep_enable=false after hci reset
static const uint32_t ins_patch_2300p_t3_config_testmode[] = {
8,
(uint32_t)&bes2300p_t3_ins_patch_testmode_0,
(uint32_t)&bes2300p_t3_ins_patch_testmode_1,
(uint32_t)&bes2300p_t3_ins_patch_testmode_2,
(uint32_t)&bes2300p_t3_ins_patch_testmode_3,
(uint32_t)&bes2300p_t3_ins_patch_testmode_4,
(uint32_t)&bes2300p_t3_ins_patch_testmode_5,
(uint32_t)&bes2300p_t3_ins_patch_testmode_6,
(uint32_t)&bes2300p_t3_ins_patch_testmode_7,
};
/////////////2300p t2 test mode patch///////////////////////
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_0 = {
0, BTDRV_PATCH_ACT, 0, 0x00000874, 0x26004c0e, 0, NULL,
}; ////rwip_env.sleep_enable=false after hci reset
const uint32_t bes2300p_t2_ins_patch_data_testmode_1[] = {
0x4681b083, /*6b30*/
0x4b022200, 0x2020f843, 0xbddcf623, 0xc0006b44,
0x00000000, 0x00000000, 0x00000000, /*6b4c*/
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_1 = {
1,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t2_ins_patch_data_testmode_1),
0x0002a6f4,
0xba1cf1dc,
0xc0006b30,
(uint8_t *)bes2300p_t2_ins_patch_data_testmode_1}; // sync clear count
const uint32_t bes2300p_t2_ins_patch_data_testmode_2[] = {
0x6020f853, 0xf8524a0d, 0x33013020, 0x3020f842, 0x68124a0b,
0xd90f4293, 0x4a082300, 0x3020f842, 0xb082b402, 0x92004a08,
0xf06f6a14, 0x46290059, 0x47a02201, 0xbc02b002, 0xbce4f623,
0xc0006b44, 0xc0006b94, 0x00000010, 0xc00041b4,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_2 = {
2,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t2_ins_patch_data_testmode_2),
0x0002a550,
0xbafef1dc,
0xc0006b50,
(uint8_t *)bes2300p_t2_ins_patch_data_testmode_2};
const uint32_t bes2300p_t2_ins_patch_data_testmode_3[] = {
/*6f90*/ 0xbf009904,
/*6f94*/ 0x4b12b470,
/*6f98*/ 0x010e5c5a,
/*6f9c*/ 0x19734d11,
/*6fa0*/ 0x78244c11,
/*6fa4*/ 0xd20342a2,
/*6fa8*/ 0x32015498,
/*6fac*/ 0xe001b2d2,
/*6fb0*/ 0x22015570,
/*6fb4*/ 0x5442480a,
/*6fb8*/ 0x461ab14c,
/*6fbc*/ 0x23001919,
/*6fc0*/ 0x0b01f912,
/*6fc4*/ 0xbf004403,
/*6fc8*/ 0xd1f9428a,
/*6fcc*/ 0x2300e000,
/*6fd0*/ 0xf0f4fb93,
/*6fd4*/ 0xbc70b240,
/*6fd8*/ 0x22019904,
/*6fdc*/ 0xbb8cf628, // jump a002f6f8
/*6fe0*/ 0xc0006ff0, // addr of rssi_idx_for_agc
/*6fe4*/ 0xc0006ff4, // addr of rssi_set_for_agc
/*6fe8*/ 0xc0006fec, // addr of N
/*6fec*/ 0x00000005, // N : 1 ~ 16
/*6ff0*/ 0x00000000, // rssi_idx_for_agc[3]
/*6ff4*/ 0xbabababa, // rssi_set_for_agc[3*16]
/*6ff8*/ 0xbabababa,
/*6ffc*/ 0xbabababa,
/*7000*/ 0xbabababa,
/*7004*/ 0xbabababa,
/*7008*/ 0xbabababa,
/*700c*/ 0xbabababa,
/*7010*/ 0xbabababa,
/*7014*/ 0xbabababa,
/*7018*/ 0xbabababa,
/*701c*/ 0xbabababa,
/*7020*/ 0xbabababa,
/*7024*/ 0xbabababa,
/*7028*/ 0xbabababa,
/*702c*/ 0xbabababa,
}; // 0xc0006f90--->0xc0007074
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t2_ins_patch_data_testmode_3),
0x0002f6f4,
0xbc4cf1d7, // jump a002f6f4 -> a0206f90
0xc0006f90,
(uint8_t *)
bes2300p_t2_ins_patch_data_testmode_3}; // ld_acl_rx() average rssi
const uint32_t bes2300p_t2_ins_patch_data_testmode_4[] = {
0x4620461d,
0x463a4629,
0xf5f94633,
0xbdf8fc2b,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_4 = {
4,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t2_ins_patch_data_testmode_4),
0x000070ec,
0xbe08f1ff,
0xc0006d00,
(uint8_t *)bes2300p_t2_ins_patch_data_testmode_4}; // assert warn
const uint32_t bes2300p_t2_ins_patch_data_testmode_5[] = {
0x4630461f,
0x462a4639,
0xf5f94623,
0xbdf8fc21,
};
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_5 = {
5,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t2_ins_patch_data_testmode_5),
0x00007070,
0xbe50f1ff,
0xc0006d14,
(uint8_t *)bes2300p_t2_ins_patch_data_testmode_5}; // assert param
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_6 = {
6, BTDRV_PATCH_ACT, 0, 0x0003bbe0, 0xf7c52100, 0, NULL,
}; /// ble tx test mode switch freq channel problem
const uint32_t bes2300p_t2_ins_patch_data_testmode_7[] = {
0xf8802300, 0xf8803024, 0xbf003025, 0x30b3f894, 0xbe0ef62c,
}; /* 6d30-6d40 */
const BTDRV_PATCH_STRUCT bes2300p_t2_ins_patch_testmode_7 = {
7,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t2_ins_patch_data_testmode_7),
0x0003395c,
0xb9e8f1d3,
0xc0006d30,
(uint8_t *)
bes2300p_t2_ins_patch_data_testmode_7}; // nosig test pattern problem
static const uint32_t ins_patch_2300p_t2_config_testmode[] = {
8,
(uint32_t)&bes2300p_t2_ins_patch_testmode_0,
(uint32_t)&bes2300p_t2_ins_patch_testmode_1,
(uint32_t)&bes2300p_t2_ins_patch_testmode_2,
(uint32_t)&bes2300p_t2_ins_patch_testmode_3,
(uint32_t)&bes2300p_t2_ins_patch_testmode_4,
(uint32_t)&bes2300p_t2_ins_patch_testmode_5,
(uint32_t)&bes2300p_t2_ins_patch_testmode_6,
(uint32_t)&bes2300p_t2_ins_patch_testmode_7,
};
/////////////2300p t1 test mode patch///////////////////////
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch_testmode_0 = {
0, BTDRV_PATCH_ACT, 0, 0x0002f440, 0x789abf00, 0,
NULL}; /// test mode: remove rxllid's judging condition in ld_acl_rx
const uint32_t bes2300p_t1_ins_patch_data_testmode_1[] = {
0x20fcf8d5, 0xf8928811, 0xf0088007, 0xb909080f, 0x88194b11, 0x0484eb04,
0x3014f837, 0xf423b29b, 0x4a0f7300, 0xea438812, 0xb29b2342, 0x3014f827,
0x3014f837, 0xf023b29b, 0xea430378, 0xf82708c8, 0x4b068014, 0xf043781b,
0xea430304, 0xb28b01c1, 0x3014f82a, 0xbe8ef627,
0xc000099c, ////loopback_length
0xc000097d, ////loopback_llid
0xc0006964, ////rxseq_flag
0x00000000,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch_testmode_1 = {
1,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_ins_patch_data_testmode_1),
0x0002e60c,
0xb978f1d8,
0xc0006900,
(uint8_t *)
bes2300p_t1_ins_patch_data_testmode_1}; /// test mode: ld_acl_tx_prog
const uint32_t bes2300p_t1_ins_patch_data_testmode_2[] = {
0xfbdcf5fc, 0x3060f890, 0xd01f2b00, 0x30fcf8db, 0xd01b2b00, 0x0f03f1b9,
0xf1b9d018, 0xd0150f08, 0xf8934b0b, 0x011b31cb, 0x5a9b4a0a, 0x7f80f413,
0x4b09d10a, 0x4b0a781a, 0x4b08601a, 0x4b09881a, 0x2201601a, 0x601a4b08,
0xbc32f628, 0xbc2ef628, 0xc0005d34, 0xd02115f2,
0xc000097d, ////loopback_llid
0xc000099c, ////loopback_length
0xc0006a8c, ////rxllid_flag
0xc0006a90, ////rxlength_flag
0xc0006a94, ////unack_seqerr_flag
0x00000000, 0x00000000, 0x00000000,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch_testmode_2 = {
2,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_ins_patch_data_testmode_2),
0x0002f2c8,
0xbbaaf1d7,
0xc0006a20,
(uint8_t *)bes2300p_t1_ins_patch_data_testmode_2}; /// test mode: skip rx
/// seq err in ld_acl_rx
#if 0
const uint32_t bes2300p_t1_ins_patch_data_testmode_3[] =
{
0xf015d002,
0xd0010f24,
0xbc1af628,
0xbcfcf628,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch_testmode_3 =
{
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_ins_patch_data_testmode_3),
0x0002f2d4,
0xbbe0f1d7,
0xc0006a98,
(uint8_t*)bes2300p_t1_ins_patch_data_testmode_3
};///test mode: skip crc err in ld_acl_rx
#else
const uint32_t bes2300p_t1_ins_patch_data_testmode_3[] = {
0xf015d006, 0xd0050f24, 0x0f03f1b9, 0xbf00d002, 0xbc16f628, 0xbcf8f628,
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch_testmode_3 = {
3,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_ins_patch_data_testmode_3),
0x0002f2d4,
0xbbe0f1d7,
0xc0006a98,
(uint8_t *)bes2300p_t1_ins_patch_data_testmode_3}; /// test mode: skip crc
/// err in ld_acl_rx
#endif
const uint32_t bes2300p_t1_ins_patch_data_testmode_4[] = {
0x700d4914, 0xf891490c, 0x010911cb, 0x5a8a4a0b, 0x2240f3c2, 0x6002480a,
0x6800480a, 0x2100b150, 0x60014808, 0x68014808, 0x80014808, 0x68014808,
0x70014808, 0xbcbaf628, 0xc0005d34, 0xd02115f2,
0xc0006964, ////rxseq_flag
0xc0006a94, ////unack_seqerr_flag
0xc0006a90, ////rxlength_flag
0xc000099c, ////loopback_length
0xc0006a8c, ////rxllid_flag
0xc000097d, ////loopback_llid
};
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch_testmode_4 = {
4,
BTDRV_PATCH_ACT,
sizeof(bes2300p_t1_ins_patch_data_testmode_4),
0x0002f464,
0xbb2af1d7,
0xc0006abc,
(uint8_t *)bes2300p_t1_ins_patch_data_testmode_4}; /// test mode: ld_acl_rx
const BTDRV_PATCH_STRUCT bes2300p_t1_ins_patch_testmode_5 = {
5, BTDRV_PATCH_ACT, 0, 0x00000100, 0x20004b15, 0, NULL,
}; ////rwip_env.sleep_enable=false after hci reset
static const uint32_t ins_patch_2300p_t1_config_testmode[] = {
6,
(uint32_t)&bes2300p_t1_ins_patch_testmode_0,
(uint32_t)&bes2300p_t1_ins_patch_testmode_1,
(uint32_t)&bes2300p_t1_ins_patch_testmode_2,
(uint32_t)&bes2300p_t1_ins_patch_testmode_3,
(uint32_t)&bes2300p_t1_ins_patch_testmode_4,
(uint32_t)&bes2300p_t1_ins_patch_testmode_5,
};
void btdrv_ins_patch_test_init(void) {
const BTDRV_PATCH_STRUCT *ins_patch_p;
btdrv_patch_en(0);
for (uint8_t i = 0; i < 56; i++) {
btdrv_ins_patch_disable(i);
}
bt_drv_reg_op_for_test_mode_disable();
if (hal_get_chip_metal_id() == HAL_CHIP_METAL_ID_0) {
for (uint8_t i = 0; i < ins_patch_2300p_t1_config_testmode[0]; i++) {
ins_patch_p =
(BTDRV_PATCH_STRUCT *)ins_patch_2300p_t1_config_testmode[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)ins_patch_2300p_t1_config_testmode[i + 1]);
}
} else if (hal_get_chip_metal_id() == HAL_CHIP_METAL_ID_1) {
for (uint8_t i = 0; i < ins_patch_2300p_t2_config_testmode[0]; i++) {
ins_patch_p =
(BTDRV_PATCH_STRUCT *)ins_patch_2300p_t2_config_testmode[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)ins_patch_2300p_t2_config_testmode[i + 1]);
}
} else if (hal_get_chip_metal_id() == HAL_CHIP_METAL_ID_2) {
for (uint8_t i = 0; i < ins_patch_2300p_t3_config_testmode[0]; i++) {
ins_patch_p =
(BTDRV_PATCH_STRUCT *)ins_patch_2300p_t3_config_testmode[i + 1];
if (ins_patch_p->patch_state == BTDRV_PATCH_ACT)
btdrv_ins_patch_write(
(BTDRV_PATCH_STRUCT *)ins_patch_2300p_t3_config_testmode[i + 1]);
}
bt_drv_reg_op_disable_swagc_nosync_count();
} else {
ASSERT(0, "%s:error chip id=%d", __func__, hal_get_chip_metal_id());
}
btdrv_patch_en(1);
}