/*************************************************************************** * * 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 "plat_types.h" #include "hal_i2c.h" #include "hal_uart.h" #include "hal_chipid.h" #include "bt_drv.h" #include "bt_drv_interface.h" #include "bt_drv_2300p_internal.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; ipatch_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; ipatch_state ==BTDRV_PATCH_ACT) btdrv_ins_patch_write((BTDRV_PATCH_STRUCT *)best2300p_t2_ins_patch_config[i+1]); } #else for(uint8_t i=0; ipatch_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; ipatch_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; ipatch_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; ipatch_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; ipatch_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; ipatch_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; ipatch_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); }