1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. 5 * 6 ******************************************************************************/ 7 /* The following is for 8723B 1ANT BT Co-exist definition */ 8 #define BT_INFO_8723B_1ANT_B_FTP BIT7 9 #define BT_INFO_8723B_1ANT_B_A2DP BIT6 10 #define BT_INFO_8723B_1ANT_B_HID BIT5 11 #define BT_INFO_8723B_1ANT_B_SCO_BUSY BIT4 12 #define BT_INFO_8723B_1ANT_B_ACL_BUSY BIT3 13 #define BT_INFO_8723B_1ANT_B_INQ_PAGE BIT2 14 #define BT_INFO_8723B_1ANT_B_SCO_ESCO BIT1 15 #define BT_INFO_8723B_1ANT_B_CONNECTION BIT0 16 17 #define BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \ 18 (((_BT_INFO_EXT_&BIT0)) ? true : false) 19 20 #define BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT 2 21 22 #define BT_8723B_1ANT_WIFI_NOISY_THRESH 30 /* max: 255 */ 23 24 typedef enum _BT_INFO_SRC_8723B_1ANT { 25 BT_INFO_SRC_8723B_1ANT_WIFI_FW = 0x0, 26 BT_INFO_SRC_8723B_1ANT_BT_RSP = 0x1, 27 BT_INFO_SRC_8723B_1ANT_BT_ACTIVE_SEND = 0x2, 28 BT_INFO_SRC_8723B_1ANT_MAX 29 } BT_INFO_SRC_8723B_1ANT, *PBT_INFO_SRC_8723B_1ANT; 30 31 typedef enum _BT_8723B_1ANT_BT_STATUS { 32 BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0, 33 BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE = 0x1, 34 BT_8723B_1ANT_BT_STATUS_INQ_PAGE = 0x2, 35 BT_8723B_1ANT_BT_STATUS_ACL_BUSY = 0x3, 36 BT_8723B_1ANT_BT_STATUS_SCO_BUSY = 0x4, 37 BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY = 0x5, 38 BT_8723B_1ANT_BT_STATUS_MAX 39 } BT_8723B_1ANT_BT_STATUS, *PBT_8723B_1ANT_BT_STATUS; 40 41 typedef enum _BT_8723B_1ANT_WIFI_STATUS { 42 BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_IDLE = 0x0, 43 BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN = 0x1, 44 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN = 0x2, 45 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT = 0x3, 46 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE = 0x4, 47 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY = 0x5, 48 BT_8723B_1ANT_WIFI_STATUS_MAX 49 } BT_8723B_1ANT_WIFI_STATUS, *PBT_8723B_1ANT_WIFI_STATUS; 50 51 typedef enum _BT_8723B_1ANT_COEX_ALGO { 52 BT_8723B_1ANT_COEX_ALGO_UNDEFINED = 0x0, 53 BT_8723B_1ANT_COEX_ALGO_SCO = 0x1, 54 BT_8723B_1ANT_COEX_ALGO_HID = 0x2, 55 BT_8723B_1ANT_COEX_ALGO_A2DP = 0x3, 56 BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS = 0x4, 57 BT_8723B_1ANT_COEX_ALGO_PANEDR = 0x5, 58 BT_8723B_1ANT_COEX_ALGO_PANHS = 0x6, 59 BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP = 0x7, 60 BT_8723B_1ANT_COEX_ALGO_PANEDR_HID = 0x8, 61 BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9, 62 BT_8723B_1ANT_COEX_ALGO_HID_A2DP = 0xa, 63 BT_8723B_1ANT_COEX_ALGO_MAX = 0xb, 64 } BT_8723B_1ANT_COEX_ALGO, *PBT_8723B_1ANT_COEX_ALGO; 65 66 typedef struct _COEX_DM_8723B_1ANT { 67 /* fw mechanism */ 68 bool bCurIgnoreWlanAct; 69 bool bPreIgnoreWlanAct; 70 u8 prePsTdma; 71 u8 curPsTdma; 72 u8 psTdmaPara[5]; 73 u8 psTdmaDuAdjType; 74 bool bAutoTdmaAdjust; 75 bool bPrePsTdmaOn; 76 bool bCurPsTdmaOn; 77 bool bPreBtAutoReport; 78 bool bCurBtAutoReport; 79 u8 preLps; 80 u8 curLps; 81 u8 preRpwm; 82 u8 curRpwm; 83 84 /* sw mechanism */ 85 bool bPreLowPenaltyRa; 86 bool bCurLowPenaltyRa; 87 u32 preVal0x6c0; 88 u32 curVal0x6c0; 89 u32 preVal0x6c4; 90 u32 curVal0x6c4; 91 u32 preVal0x6c8; 92 u32 curVal0x6c8; 93 u8 preVal0x6cc; 94 u8 curVal0x6cc; 95 bool bLimitedDig; 96 97 u32 backupArfrCnt1; /* Auto Rate Fallback Retry cnt */ 98 u32 backupArfrCnt2; /* Auto Rate Fallback Retry cnt */ 99 u16 backupRetryLimit; 100 u8 backupAmpduMaxTime; 101 102 /* algorithm related */ 103 u8 preAlgorithm; 104 u8 curAlgorithm; 105 u8 btStatus; 106 u8 wifiChnlInfo[3]; 107 108 u32 preRaMask; 109 u32 curRaMask; 110 u8 preArfrType; 111 u8 curArfrType; 112 u8 preRetryLimitType; 113 u8 curRetryLimitType; 114 u8 preAmpduTimeType; 115 u8 curAmpduTimeType; 116 u32 nArpCnt; 117 118 u8 errorCondition; 119 } COEX_DM_8723B_1ANT, *PCOEX_DM_8723B_1ANT; 120 121 typedef struct _COEX_STA_8723B_1ANT { 122 bool bBtLinkExist; 123 bool bScoExist; 124 bool bA2dpExist; 125 bool bHidExist; 126 bool bPanExist; 127 128 bool bUnderLps; 129 bool bUnderIps; 130 u32 specialPktPeriodCnt; 131 u32 highPriorityTx; 132 u32 highPriorityRx; 133 u32 lowPriorityTx; 134 u32 lowPriorityRx; 135 s8 btRssi; 136 bool bBtTxRxMask; 137 u8 preBtRssiState; 138 u8 preWifiRssiState[4]; 139 bool bC2hBtInfoReqSent; 140 u8 btInfoC2h[BT_INFO_SRC_8723B_1ANT_MAX][10]; 141 u32 btInfoC2hCnt[BT_INFO_SRC_8723B_1ANT_MAX]; 142 bool bC2hBtInquiryPage; 143 bool bC2hBtPage; /* Add for win8.1 page out issue */ 144 bool bWiFiIsHighPriTask; /* Add for win8.1 page out issue */ 145 u8 btRetryCnt; 146 u8 btInfoExt; 147 u32 popEventCnt; 148 u8 nScanAPNum; 149 150 u32 nCRCOK_CCK; 151 u32 nCRCOK_11g; 152 u32 nCRCOK_11n; 153 u32 nCRCOK_11nAgg; 154 155 u32 nCRCErr_CCK; 156 u32 nCRCErr_11g; 157 u32 nCRCErr_11n; 158 u32 nCRCErr_11nAgg; 159 160 bool bCCKLock; 161 bool bPreCCKLock; 162 u8 nCoexTableType; 163 164 bool bForceLpsOn; 165 } COEX_STA_8723B_1ANT, *PCOEX_STA_8723B_1ANT; 166 167 /* */ 168 /* The following is interface which will notify coex module. */ 169 /* */ 170 void EXhalbtc8723b1ant_PowerOnSetting(PBTC_COEXIST pBtCoexist); 171 void EXhalbtc8723b1ant_InitHwConfig(PBTC_COEXIST pBtCoexist, bool bWifiOnly); 172 void EXhalbtc8723b1ant_InitCoexDm(PBTC_COEXIST pBtCoexist); 173 void EXhalbtc8723b1ant_IpsNotify(PBTC_COEXIST pBtCoexist, u8 type); 174 void EXhalbtc8723b1ant_LpsNotify(PBTC_COEXIST pBtCoexist, u8 type); 175 void EXhalbtc8723b1ant_ScanNotify(PBTC_COEXIST pBtCoexist, u8 type); 176 void EXhalbtc8723b1ant_ConnectNotify(PBTC_COEXIST pBtCoexist, u8 type); 177 void EXhalbtc8723b1ant_MediaStatusNotify(PBTC_COEXIST pBtCoexist, u8 type); 178 void EXhalbtc8723b1ant_SpecialPacketNotify(PBTC_COEXIST pBtCoexist, u8 type); 179 void EXhalbtc8723b1ant_BtInfoNotify( 180 PBTC_COEXIST pBtCoexist, u8 *tmpBuf, u8 length 181 ); 182 void EXhalbtc8723b1ant_HaltNotify(PBTC_COEXIST pBtCoexist); 183 void EXhalbtc8723b1ant_PnpNotify(PBTC_COEXIST pBtCoexist, u8 pnpState); 184 void EXhalbtc8723b1ant_Periodical(PBTC_COEXIST pBtCoexist); 185 void EXhalbtc8723b1ant_DisplayCoexInfo(PBTC_COEXIST pBtCoexist); 186