Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /******************************************************************************
0003  *
0004  * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
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   /*  1ss */
0031 #define BTC_MIMO_PS_DYNAMIC 1   /*  2ss */
0032 
0033 #define BTC_RATE_DISABLE    0
0034 #define BTC_RATE_ENABLE     1
0035 
0036 /*  single Antenna definition */
0037 #define BTC_ANT_PATH_WIFI   0
0038 #define BTC_ANT_PATH_BT     1
0039 #define BTC_ANT_PATH_PTA    2
0040 /*  dual Antenna definition */
0041 #define BTC_ANT_WIFI_AT_MAIN    0
0042 #define BTC_ANT_WIFI_AT_AUX 1
0043 /*  coupler Antenna definition */
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,    /*  wifi original power save behavior */
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 /*  following is for wifi link status */
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     /*  The following is some board information */
0080     u8 pgAntNum;    /*  pg ant number */
0081     u8 btdmAntNum;  /*  ant number for btdm */
0082     u8 btdmAntPos;      /* Bryant Add to indicate Antenna Position for (pgAntNum = 2) && (btdmAntNum = 1)  (DPDT+1Ant case) */
0083     u8 singleAntPath;   /*  current used for 8723b only, 1 =>s0,  0 =>s1 */
0084     /* bool             bBtExist; */
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 /*  defined for BFP_BTC_GET */
0120 enum {
0121     /*  type bool */
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     /*  type s32 */
0137     BTC_GET_S4_WIFI_RSSI,
0138     BTC_GET_S4_HS_RSSI,
0139 
0140     /*  type u32 */
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     /*  type u8 */
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     /*  for 1Ant ====== */
0155     BTC_GET_U1_LPS_MODE,
0156 
0157     BTC_GET_MAX
0158 };
0159 
0160 /*  defined for BFP_BTC_SET */
0161 enum {
0162     /*  type bool */
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     /*  type u8 */
0173     BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
0174     BTC_SET_U1_AGG_BUF_SIZE,
0175 
0176     /*  type trigger some action */
0177     BTC_SET_ACT_GET_BT_RSSI,
0178     BTC_SET_ACT_AGGREGATE_CTRL,
0179     /*  for 1Ant ====== */
0180     /*  type bool */
0181 
0182     /*  type u8 */
0183     BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
0184     BTC_SET_U1_LPS_VAL,
0185     BTC_SET_U1_RPWM_VAL,
0186     /*  type trigger some action */
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     /*  BT Coex related */
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 /* Bryant Add */
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;  /*  for 1Ant solution */
0308     u8 lpsVal;
0309     u8 rpwmVal;
0310     u32 raMask;
0311 };
0312 
0313 struct btc_stack_info {
0314     bool bProfileNotified;
0315     u16 hciVersion; /*  stack hci version */
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;       /*  make sure only one adapter can bind the data context */
0362     void *Adapter;      /*  default adapter */
0363     struct btc_board_info boardInfo;
0364     struct btc_bt_info btInfo;      /*  some bt info referenced by non-bt module */
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     /*  function pointers */
0376     /*  io related */
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     /*  read/write bb related */
0386     BFP_BTC_SET_BB_REG fBtcSetBbReg;
0387     BFP_BTC_GET_BB_REG fBtcGetBbReg;
0388 
0389     /*  read/write rf related */
0390     BFP_BTC_SET_RF_REG fBtcSetRfReg;
0391     BFP_BTC_GET_RF_REG fBtcGetRfReg;
0392 
0393     /*  fill h2c related */
0394     BFP_BTC_FILL_H2C fBtcFillH2c;
0395     /*  normal get/set related */
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