0001
0002
0003
0004
0005
0006
0007 #ifndef __HALBTC_OUT_SRC_H__
0008 #define __HALBTC_OUT_SRC_H__
0009
0010 #define NORMAL_EXEC false
0011 #define FORCE_EXEC true
0012
0013 #define BTC_RF_OFF 0x0
0014 #define BTC_RF_ON 0x1
0015
0016 #define BTC_RF_A 0x0
0017 #define BTC_RF_B 0x1
0018 #define BTC_RF_C 0x2
0019 #define BTC_RF_D 0x3
0020
0021 #define BTC_SMSP SINGLEMAC_SINGLEPHY
0022 #define BTC_DMDP DUALMAC_DUALPHY
0023 #define BTC_DMSP DUALMAC_SINGLEPHY
0024 #define BTC_MP_UNKNOWN 0xff
0025
0026 #define BT_COEX_ANT_TYPE_PG 0
0027 #define BT_COEX_ANT_TYPE_ANTDIV 1
0028 #define BT_COEX_ANT_TYPE_DETECTED 2
0029
0030 #define BTC_MIMO_PS_STATIC 0
0031 #define BTC_MIMO_PS_DYNAMIC 1
0032
0033 #define BTC_RATE_DISABLE 0
0034 #define BTC_RATE_ENABLE 1
0035
0036
0037 #define BTC_ANT_PATH_WIFI 0
0038 #define BTC_ANT_PATH_BT 1
0039 #define BTC_ANT_PATH_PTA 2
0040
0041 #define BTC_ANT_WIFI_AT_MAIN 0
0042 #define BTC_ANT_WIFI_AT_AUX 1
0043
0044 #define BTC_ANT_WIFI_AT_CPL_MAIN 0
0045 #define BTC_ANT_WIFI_AT_CPL_AUX 1
0046
0047 enum {
0048 BTC_PS_WIFI_NATIVE = 0,
0049 BTC_PS_LPS_ON = 1,
0050 BTC_PS_LPS_OFF = 2,
0051 BTC_PS_MAX
0052 };
0053
0054 enum {
0055 BTC_BT_REG_RF = 0,
0056 BTC_BT_REG_MODEM = 1,
0057 BTC_BT_REG_BLUEWIZE = 2,
0058 BTC_BT_REG_VENDOR = 3,
0059 BTC_BT_REG_LE = 4,
0060 BTC_BT_REG_MAX
0061 };
0062
0063 enum btc_chip_interface {
0064 BTC_INTF_UNKNOWN = 0,
0065 BTC_INTF_PCI = 1,
0066 BTC_INTF_USB = 2,
0067 BTC_INTF_SDIO = 3,
0068 BTC_INTF_MAX
0069 };
0070
0071
0072 #define WIFI_STA_CONNECTED BIT0
0073 #define WIFI_AP_CONNECTED BIT1
0074 #define WIFI_HS_CONNECTED BIT2
0075 #define WIFI_P2P_GO_CONNECTED BIT3
0076 #define WIFI_P2P_GC_CONNECTED BIT4
0077
0078 struct btc_board_info {
0079
0080 u8 pgAntNum;
0081 u8 btdmAntNum;
0082 u8 btdmAntPos;
0083 u8 singleAntPath;
0084
0085 };
0086
0087 enum {
0088 BTC_RSSI_STATE_HIGH = 0x0,
0089 BTC_RSSI_STATE_MEDIUM = 0x1,
0090 BTC_RSSI_STATE_LOW = 0x2,
0091 BTC_RSSI_STATE_STAY_HIGH = 0x3,
0092 BTC_RSSI_STATE_STAY_MEDIUM = 0x4,
0093 BTC_RSSI_STATE_STAY_LOW = 0x5,
0094 BTC_RSSI_MAX
0095 };
0096 #define BTC_RSSI_HIGH(_rssi_) ((_rssi_ == BTC_RSSI_STATE_HIGH || _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
0097 #define BTC_RSSI_MEDIUM(_rssi_) ((_rssi_ == BTC_RSSI_STATE_MEDIUM || _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
0098 #define BTC_RSSI_LOW(_rssi_) ((_rssi_ == BTC_RSSI_STATE_LOW || _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
0099
0100 enum {
0101 BTC_WIFI_BW_LEGACY = 0x0,
0102 BTC_WIFI_BW_HT20 = 0x1,
0103 BTC_WIFI_BW_HT40 = 0x2,
0104 BTC_WIFI_BW_MAX
0105 };
0106
0107 enum {
0108 BTC_WIFI_TRAFFIC_TX = 0x0,
0109 BTC_WIFI_TRAFFIC_RX = 0x1,
0110 BTC_WIFI_TRAFFIC_MAX
0111 };
0112
0113 enum {
0114 BTC_WIFI_PNP_WAKE_UP = 0x0,
0115 BTC_WIFI_PNP_SLEEP = 0x1,
0116 BTC_WIFI_PNP_MAX
0117 };
0118
0119
0120 enum {
0121
0122 BTC_GET_BL_HS_OPERATION,
0123 BTC_GET_BL_HS_CONNECTING,
0124 BTC_GET_BL_WIFI_CONNECTED,
0125 BTC_GET_BL_WIFI_BUSY,
0126 BTC_GET_BL_WIFI_SCAN,
0127 BTC_GET_BL_WIFI_LINK,
0128 BTC_GET_BL_WIFI_ROAM,
0129 BTC_GET_BL_WIFI_4_WAY_PROGRESS,
0130 BTC_GET_BL_WIFI_AP_MODE_ENABLE,
0131 BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
0132 BTC_GET_BL_WIFI_UNDER_B_MODE,
0133 BTC_GET_BL_EXT_SWITCH,
0134 BTC_GET_BL_WIFI_IS_IN_MP_MODE,
0135
0136
0137 BTC_GET_S4_WIFI_RSSI,
0138 BTC_GET_S4_HS_RSSI,
0139
0140
0141 BTC_GET_U4_WIFI_BW,
0142 BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
0143 BTC_GET_U4_WIFI_FW_VER,
0144 BTC_GET_U4_WIFI_LINK_STATUS,
0145 BTC_GET_U4_BT_PATCH_VER,
0146
0147
0148 BTC_GET_U1_WIFI_DOT11_CHNL,
0149 BTC_GET_U1_WIFI_CENTRAL_CHNL,
0150 BTC_GET_U1_WIFI_HS_CHNL,
0151 BTC_GET_U1_MAC_PHY_MODE,
0152 BTC_GET_U1_AP_NUM,
0153
0154
0155 BTC_GET_U1_LPS_MODE,
0156
0157 BTC_GET_MAX
0158 };
0159
0160
0161 enum {
0162
0163 BTC_SET_BL_BT_DISABLE,
0164 BTC_SET_BL_BT_TRAFFIC_BUSY,
0165 BTC_SET_BL_BT_LIMITED_DIG,
0166 BTC_SET_BL_FORCE_TO_ROAM,
0167 BTC_SET_BL_TO_REJ_AP_AGG_PKT,
0168 BTC_SET_BL_BT_CTRL_AGG_SIZE,
0169 BTC_SET_BL_INC_SCAN_DEV_NUM,
0170 BTC_SET_BL_BT_TX_RX_MASK,
0171
0172
0173 BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
0174 BTC_SET_U1_AGG_BUF_SIZE,
0175
0176
0177 BTC_SET_ACT_GET_BT_RSSI,
0178 BTC_SET_ACT_AGGREGATE_CTRL,
0179
0180
0181
0182
0183 BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
0184 BTC_SET_U1_LPS_VAL,
0185 BTC_SET_U1_RPWM_VAL,
0186
0187 BTC_SET_ACT_LEAVE_LPS,
0188 BTC_SET_ACT_ENTER_LPS,
0189 BTC_SET_ACT_NORMAL_LPS,
0190 BTC_SET_ACT_DISABLE_LOW_POWER,
0191 BTC_SET_ACT_UPDATE_RAMASK,
0192 BTC_SET_ACT_SEND_MIMO_PS,
0193
0194 BTC_SET_ACT_CTRL_BT_INFO,
0195 BTC_SET_ACT_CTRL_BT_COEX,
0196 BTC_SET_ACT_CTRL_8723B_ANT,
0197
0198 BTC_SET_MAX
0199 };
0200
0201 enum {
0202 BTC_DBG_DISP_COEX_STATISTICS = 0x0,
0203 BTC_DBG_DISP_BT_LINK_INFO = 0x1,
0204 BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x2,
0205 BTC_DBG_DISP_MAX
0206 };
0207
0208 enum {
0209 BTC_IPS_LEAVE = 0x0,
0210 BTC_IPS_ENTER = 0x1,
0211 BTC_IPS_MAX
0212 };
0213
0214 enum {
0215 BTC_LPS_DISABLE = 0x0,
0216 BTC_LPS_ENABLE = 0x1,
0217 BTC_LPS_MAX
0218 };
0219
0220 enum {
0221 BTC_SCAN_FINISH = 0x0,
0222 BTC_SCAN_START = 0x1,
0223 BTC_SCAN_MAX
0224 };
0225
0226 enum {
0227 BTC_ASSOCIATE_FINISH = 0x0,
0228 BTC_ASSOCIATE_START = 0x1,
0229 BTC_ASSOCIATE_MAX
0230 };
0231
0232 enum {
0233 BTC_MEDIA_DISCONNECT = 0x0,
0234 BTC_MEDIA_CONNECT = 0x1,
0235 BTC_MEDIA_MAX
0236 };
0237
0238 enum {
0239 BTC_PACKET_UNKNOWN = 0x0,
0240 BTC_PACKET_DHCP = 0x1,
0241 BTC_PACKET_ARP = 0x2,
0242 BTC_PACKET_EAPOL = 0x3,
0243 BTC_PACKET_MAX
0244 };
0245
0246
0247 enum {
0248 BTC_ANTENNA_AT_MAIN_PORT = 0x1,
0249 BTC_ANTENNA_AT_AUX_PORT = 0x2,
0250 };
0251
0252 typedef u8 (*BFP_BTC_R1)(void *pBtcContext, u32 RegAddr);
0253 typedef u16(*BFP_BTC_R2)(void *pBtcContext, u32 RegAddr);
0254 typedef u32 (*BFP_BTC_R4)(void *pBtcContext, u32 RegAddr);
0255 typedef void (*BFP_BTC_W1)(void *pBtcContext, u32 RegAddr, u8 Data);
0256 typedef void(*BFP_BTC_W1_BIT_MASK)(
0257 void *pBtcContext, u32 regAddr, u8 bitMask, u8 data1b
0258 );
0259 typedef void (*BFP_BTC_W2)(void *pBtcContext, u32 RegAddr, u16 Data);
0260 typedef void (*BFP_BTC_W4)(void *pBtcContext, u32 RegAddr, u32 Data);
0261 typedef void (*BFP_BTC_LOCAL_REG_W1)(void *pBtcContext, u32 RegAddr, u8 Data);
0262 typedef void (*BFP_BTC_SET_BB_REG)(
0263 void *pBtcContext, u32 RegAddr, u32 BitMask, u32 Data
0264 );
0265 typedef u32 (*BFP_BTC_GET_BB_REG)(void *pBtcContext, u32 RegAddr, u32 BitMask);
0266 typedef void (*BFP_BTC_SET_RF_REG)(
0267 void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask, u32 Data
0268 );
0269 typedef u32 (*BFP_BTC_GET_RF_REG)(
0270 void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask
0271 );
0272 typedef void (*BFP_BTC_FILL_H2C)(
0273 void *pBtcContext, u8 elementId, u32 cmdLen, u8 *pCmdBuffer
0274 );
0275
0276 typedef u8 (*BFP_BTC_GET)(void *pBtCoexist, u8 getType, void *pOutBuf);
0277
0278 typedef u8 (*BFP_BTC_SET)(void *pBtCoexist, u8 setType, void *pInBuf);
0279 typedef void (*BFP_BTC_SET_BT_REG)(
0280 void *pBtcContext, u8 regType, u32 offset, u32 value
0281 );
0282 typedef u32 (*BFP_BTC_GET_BT_REG)(void *pBtcContext, u8 regType, u32 offset);
0283 typedef void (*BFP_BTC_DISP_DBG_MSG)(void *pBtCoexist, u8 dispType);
0284
0285 struct btc_bt_info {
0286 bool bBtDisabled;
0287 u8 rssiAdjustForAgcTableOn;
0288 u8 rssiAdjustFor1AntCoexType;
0289 bool bPreBtCtrlAggBufSize;
0290 bool bBtCtrlAggBufSize;
0291 bool bRejectAggPkt;
0292 bool bIncreaseScanDevNum;
0293 bool bBtTxRxMask;
0294 u8 preAggBufSize;
0295 u8 aggBufSize;
0296 bool bBtBusy;
0297 bool bLimitedDig;
0298 u16 btHciVer;
0299 u16 btRealFwVer;
0300 u8 btFwVer;
0301 u32 getBtFwVerCnt;
0302
0303 bool bBtDisableLowPwr;
0304
0305 bool bBtCtrlLps;
0306 bool bBtLpsOn;
0307 bool bForceToRoam;
0308 u8 lpsVal;
0309 u8 rpwmVal;
0310 u32 raMask;
0311 };
0312
0313 struct btc_stack_info {
0314 bool bProfileNotified;
0315 u16 hciVersion;
0316 u8 numOfLink;
0317 bool bBtLinkExist;
0318 bool bScoExist;
0319 bool bAclExist;
0320 bool bA2dpExist;
0321 bool bHidExist;
0322 u8 numOfHid;
0323 bool bPanExist;
0324 bool bUnknownAclExist;
0325 s8 minBtRssi;
0326 };
0327
0328 struct btc_bt_link_info {
0329 bool bBtLinkExist;
0330 bool bScoExist;
0331 bool bScoOnly;
0332 bool bA2dpExist;
0333 bool bA2dpOnly;
0334 bool bHidExist;
0335 bool bHidOnly;
0336 bool bPanExist;
0337 bool bPanOnly;
0338 bool bSlaveRole;
0339 };
0340
0341 struct btc_statistics {
0342 u32 cntBind;
0343 u32 cntPowerOn;
0344 u32 cntInitHwConfig;
0345 u32 cntInitCoexDm;
0346 u32 cntIpsNotify;
0347 u32 cntLpsNotify;
0348 u32 cntScanNotify;
0349 u32 cntConnectNotify;
0350 u32 cntMediaStatusNotify;
0351 u32 cntSpecialPacketNotify;
0352 u32 cntBtInfoNotify;
0353 u32 cntRfStatusNotify;
0354 u32 cntPeriodical;
0355 u32 cntCoexDmSwitch;
0356 u32 cntStackOperationNotify;
0357 u32 cntDbgCtrl;
0358 };
0359
0360 struct btc_coexist {
0361 bool bBinded;
0362 void *Adapter;
0363 struct btc_board_info boardInfo;
0364 struct btc_bt_info btInfo;
0365 struct btc_stack_info stackInfo;
0366 struct btc_bt_link_info btLinkInfo;
0367 enum btc_chip_interface chipInterface;
0368
0369 bool bInitilized;
0370 bool bStopCoexDm;
0371 bool bManualControl;
0372 struct btc_statistics statistics;
0373 u8 pwrModeVal[10];
0374
0375
0376
0377 BFP_BTC_R1 fBtcRead1Byte;
0378 BFP_BTC_W1 fBtcWrite1Byte;
0379 BFP_BTC_W1_BIT_MASK fBtcWrite1ByteBitMask;
0380 BFP_BTC_R2 fBtcRead2Byte;
0381 BFP_BTC_W2 fBtcWrite2Byte;
0382 BFP_BTC_R4 fBtcRead4Byte;
0383 BFP_BTC_W4 fBtcWrite4Byte;
0384 BFP_BTC_LOCAL_REG_W1 fBtcWriteLocalReg1Byte;
0385
0386 BFP_BTC_SET_BB_REG fBtcSetBbReg;
0387 BFP_BTC_GET_BB_REG fBtcGetBbReg;
0388
0389
0390 BFP_BTC_SET_RF_REG fBtcSetRfReg;
0391 BFP_BTC_GET_RF_REG fBtcGetRfReg;
0392
0393
0394 BFP_BTC_FILL_H2C fBtcFillH2c;
0395
0396 BFP_BTC_GET fBtcGet;
0397 BFP_BTC_SET fBtcSet;
0398
0399 BFP_BTC_GET_BT_REG fBtcGetBtReg;
0400 BFP_BTC_SET_BT_REG fBtcSetBtReg;
0401 };
0402
0403 extern struct btc_coexist GLBtCoexist;
0404
0405 void EXhalbtcoutsrc_PowerOnSetting(struct btc_coexist *pBtCoexist);
0406 void EXhalbtcoutsrc_InitHwConfig(struct btc_coexist *pBtCoexist, u8 bWifiOnly);
0407 void EXhalbtcoutsrc_InitCoexDm(struct btc_coexist *pBtCoexist);
0408 void EXhalbtcoutsrc_IpsNotify(struct btc_coexist *pBtCoexist, u8 type);
0409 void EXhalbtcoutsrc_LpsNotify(struct btc_coexist *pBtCoexist, u8 type);
0410 void EXhalbtcoutsrc_ScanNotify(struct btc_coexist *pBtCoexist, u8 type);
0411 void EXhalbtcoutsrc_ConnectNotify(struct btc_coexist *pBtCoexist, u8 action);
0412 void EXhalbtcoutsrc_MediaStatusNotify(
0413 struct btc_coexist *pBtCoexist, enum rt_media_status mediaStatus
0414 );
0415 void EXhalbtcoutsrc_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 pktType);
0416 void EXhalbtcoutsrc_BtInfoNotify(
0417 struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
0418 );
0419 void EXhalbtcoutsrc_HaltNotify(struct btc_coexist *pBtCoexist);
0420 void EXhalbtcoutsrc_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState);
0421 void EXhalbtcoutsrc_Periodical(struct btc_coexist *pBtCoexist);
0422 void EXhalbtcoutsrc_SetChipType(u8 chipType);
0423 void EXhalbtcoutsrc_SetAntNum(u8 type, u8 antNum);
0424 void EXhalbtcoutsrc_SetSingleAntPath(u8 singleAntPath);
0425
0426 #endif