hal_btcoex_wifionly.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2016 - 2017 Realtek Corporation.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of version 2 of the GNU General Public License as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. *****************************************************************************/
  15. #include <hal_btcoex_wifionly.h>
  16. #if (CONFIG_BTCOEX_SUPPORT_WIFI_ONLY_CFG == 1)
  17. #include "btc/mp_precomp.h"
  18. struct wifi_only_cfg GLBtCoexistWifiOnly;
  19. void halwifionly_write1byte(PVOID pwifionlyContext, u32 RegAddr, u8 Data)
  20. {
  21. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  22. PADAPTER Adapter = pwifionlycfg->Adapter;
  23. rtw_write8(Adapter, RegAddr, Data);
  24. }
  25. void halwifionly_write2byte(PVOID pwifionlyContext, u32 RegAddr, u16 Data)
  26. {
  27. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  28. PADAPTER Adapter = pwifionlycfg->Adapter;
  29. rtw_write16(Adapter, RegAddr, Data);
  30. }
  31. void halwifionly_write4byte(PVOID pwifionlyContext, u32 RegAddr, u32 Data)
  32. {
  33. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  34. PADAPTER Adapter = pwifionlycfg->Adapter;
  35. rtw_write32(Adapter, RegAddr, Data);
  36. }
  37. u8 halwifionly_read1byte(PVOID pwifionlyContext, u32 RegAddr)
  38. {
  39. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  40. PADAPTER Adapter = pwifionlycfg->Adapter;
  41. return rtw_read8(Adapter, RegAddr);
  42. }
  43. u16 halwifionly_read2byte(PVOID pwifionlyContext, u32 RegAddr)
  44. {
  45. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  46. PADAPTER Adapter = pwifionlycfg->Adapter;
  47. return rtw_read16(Adapter, RegAddr);
  48. }
  49. u32 halwifionly_read4byte(PVOID pwifionlyContext, u32 RegAddr)
  50. {
  51. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  52. PADAPTER Adapter = pwifionlycfg->Adapter;
  53. return rtw_read32(Adapter, RegAddr);
  54. }
  55. void halwifionly_bitmaskwrite1byte(PVOID pwifionlyContext, u32 regAddr, u8 bitMask, u8 data)
  56. {
  57. u8 originalValue, bitShift = 0;
  58. u8 i;
  59. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  60. PADAPTER Adapter = pwifionlycfg->Adapter;
  61. if (bitMask != 0xff) {
  62. originalValue = rtw_read8(Adapter, regAddr);
  63. for (i = 0; i <= 7; i++) {
  64. if ((bitMask >> i) & 0x1)
  65. break;
  66. }
  67. bitShift = i;
  68. data = ((originalValue) & (~bitMask)) | (((data << bitShift)) & bitMask);
  69. }
  70. rtw_write8(Adapter, regAddr, data);
  71. }
  72. void halwifionly_phy_set_rf_reg(PVOID pwifionlyContext, enum rf_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
  73. {
  74. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  75. PADAPTER Adapter = pwifionlycfg->Adapter;
  76. phy_set_rf_reg(Adapter, eRFPath, RegAddr, BitMask, Data);
  77. }
  78. void halwifionly_phy_set_bb_reg(PVOID pwifionlyContext, u32 RegAddr, u32 BitMask, u32 Data)
  79. {
  80. struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
  81. PADAPTER Adapter = pwifionlycfg->Adapter;
  82. phy_set_bb_reg(Adapter, RegAddr, BitMask, Data);
  83. }
  84. void hal_btcoex_wifionly_switchband_notify(PADAPTER padapter)
  85. {
  86. HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
  87. u8 is_5g = _FALSE;
  88. if (pHalData->current_band_type == BAND_ON_5G)
  89. is_5g = _TRUE;
  90. if (IS_HARDWARE_TYPE_8822B(padapter)) {
  91. #ifdef CONFIG_RTL8822B
  92. ex_hal8822b_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
  93. #endif
  94. }
  95. #ifdef CONFIG_RTL8821C
  96. else if (IS_HARDWARE_TYPE_8821C(padapter))
  97. ex_hal8821c_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
  98. #endif
  99. }
  100. void hal_btcoex_wifionly_scan_notify(PADAPTER padapter)
  101. {
  102. HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
  103. u8 is_5g = _FALSE;
  104. if (pHalData->current_band_type == BAND_ON_5G)
  105. is_5g = _TRUE;
  106. if (IS_HARDWARE_TYPE_8822B(padapter)) {
  107. #ifdef CONFIG_RTL8822B
  108. ex_hal8822b_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
  109. #endif
  110. }
  111. #ifdef CONFIG_RTL8821C
  112. else if (IS_HARDWARE_TYPE_8821C(padapter))
  113. ex_hal8821c_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
  114. #endif
  115. }
  116. void hal_btcoex_wifionly_connect_notify(PADAPTER padapter)
  117. {
  118. HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
  119. u8 is_5g = _FALSE;
  120. if (pHalData->current_band_type == BAND_ON_5G)
  121. is_5g = _TRUE;
  122. if (IS_HARDWARE_TYPE_8822B(padapter)) {
  123. #ifdef CONFIG_RTL8822B
  124. ex_hal8822b_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);
  125. #endif
  126. }
  127. #ifdef CONFIG_RTL8821C
  128. else if (IS_HARDWARE_TYPE_8821C(padapter))
  129. ex_hal8821c_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);
  130. #endif
  131. }
  132. void hal_btcoex_wifionly_hw_config(PADAPTER padapter)
  133. {
  134. struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;
  135. if (IS_HARDWARE_TYPE_8723B(padapter)) {
  136. #ifdef CONFIG_RTL8723B
  137. ex_hal8723b_wifi_only_hw_config(pwifionlycfg);
  138. #endif
  139. }
  140. #ifdef CONFIG_RTL8822B
  141. else if (IS_HARDWARE_TYPE_8822B(padapter))
  142. ex_hal8822b_wifi_only_hw_config(pwifionlycfg);
  143. #endif
  144. #ifdef CONFIG_RTL8821C
  145. else if (IS_HARDWARE_TYPE_8821C(padapter))
  146. ex_hal8821c_wifi_only_hw_config(pwifionlycfg);
  147. #endif
  148. }
  149. void hal_btcoex_wifionly_initlizevariables(PADAPTER padapter)
  150. {
  151. struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;
  152. struct wifi_only_haldata *pwifionly_haldata = &pwifionlycfg->haldata_info;
  153. HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
  154. _rtw_memset(&GLBtCoexistWifiOnly, 0, sizeof(GLBtCoexistWifiOnly));
  155. pwifionlycfg->Adapter = padapter;
  156. #ifdef CONFIG_PCI_HCI
  157. pwifionlycfg->chip_interface = WIFIONLY_INTF_PCI;
  158. #elif defined(CONFIG_USB_HCI)
  159. pwifionlycfg->chip_interface = WIFIONLY_INTF_USB;
  160. #elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
  161. pwifionlycfg->chip_interface = WIFIONLY_INTF_SDIO;
  162. #else
  163. pwifionlycfg->chip_interface = WIFIONLY_INTF_UNKNOWN;
  164. #endif
  165. pwifionly_haldata->customer_id = CUSTOMER_NORMAL;
  166. }
  167. void hal_btcoex_wifionly_AntInfoSetting(PADAPTER padapter)
  168. {
  169. struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;
  170. struct wifi_only_haldata *pwifionly_haldata = &pwifionlycfg->haldata_info;
  171. HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
  172. pwifionly_haldata->efuse_pg_antnum = pHalData->EEPROMBluetoothAntNum;
  173. pwifionly_haldata->efuse_pg_antpath = pHalData->ant_path;
  174. pwifionly_haldata->rfe_type = pHalData->rfe_type;
  175. pwifionly_haldata->ant_div_cfg = pHalData->AntDivCfg;
  176. }
  177. #endif