phydm_interface.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 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. * The full GNU General Public License is included in this distribution in the
  15. * file called LICENSE.
  16. *
  17. * Contact Information:
  18. * wlanfae <wlanfae@realtek.com>
  19. * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
  20. * Hsinchu 300, Taiwan.
  21. *
  22. * Larry Finger <Larry.Finger@lwfinger.net>
  23. *
  24. *****************************************************************************/
  25. #ifndef __ODM_INTERFACE_H__
  26. #define __ODM_INTERFACE_H__
  27. #define INTERFACE_VERSION "1.2"
  28. #define pdm_set_reg odm_set_bb_reg
  29. /*@=========== Constant/Structure/Enum/... Define*/
  30. enum phydm_h2c_cmd {
  31. PHYDM_H2C_RA_MASK = 0x40,
  32. PHYDM_H2C_TXBF = 0x41,
  33. ODM_H2C_RSSI_REPORT = 0x42,
  34. ODM_H2C_IQ_CALIBRATION = 0x45,
  35. PHYDM_RA_MASK_ABOVE_3SS = 0x46,
  36. ODM_H2C_RA_PARA_ADJUST = 0x47,
  37. PHYDM_H2C_DYNAMIC_TX_PATH = 0x48,
  38. PHYDM_H2C_FW_TRACE_EN = 0x49,
  39. ODM_H2C_WIFI_CALIBRATION = 0x6d,
  40. PHYDM_H2C_MU = 0x4a,
  41. PHYDM_H2C_FW_GENERAL_INIT = 0x4c,
  42. PHYDM_H2C_FW_CLM_MNTR = 0x4d,
  43. PHYDM_H2C_MCC = 0x4f,
  44. ODM_MAX_H2CCMD
  45. };
  46. enum phydm_c2h_evt {
  47. PHYDM_C2H_DBG = 0,
  48. PHYDM_C2H_LB = 1,
  49. PHYDM_C2H_XBF = 2,
  50. PHYDM_C2H_TX_REPORT = 3,
  51. PHYDM_C2H_INFO = 9,
  52. PHYDM_C2H_BT_MP = 11,
  53. PHYDM_C2H_RA_RPT = 12,
  54. PHYDM_C2H_RA_PARA_RPT = 14,
  55. PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,
  56. PHYDM_C2H_IQK_FINISH = 17, /*@0x11*/
  57. PHYDM_C2H_CLM_MONITOR = 0x2a,
  58. PHYDM_C2H_DBG_CODE = 0xFE,
  59. PHYDM_C2H_EXTEND = 0xFF,
  60. };
  61. enum phydm_extend_c2h_evt {
  62. PHYDM_EXTEND_C2H_DBG_PRINT = 0
  63. };
  64. enum phydm_halmac_param {
  65. PHYDM_HALMAC_CMD_MAC_W8 = 0,
  66. PHYDM_HALMAC_CMD_MAC_W16 = 1,
  67. PHYDM_HALMAC_CMD_MAC_W32 = 2,
  68. PHYDM_HALMAC_CMD_BB_W8,
  69. PHYDM_HALMAC_CMD_BB_W16,
  70. PHYDM_HALMAC_CMD_BB_W32,
  71. PHYDM_HALMAC_CMD_RF_W,
  72. PHYDM_HALMAC_CMD_DELAY_US,
  73. PHYDM_HALMAC_CMD_DELAY_MS,
  74. PHYDM_HALMAC_CMD_END = 0XFF,
  75. };
  76. /*@=========== Macro Define*/
  77. #define _reg_all(_name) ODM_##_name
  78. #define _reg_ic(_name, _ic) ODM_##_name##_ic
  79. #define _bit_all(_name) BIT_##_name
  80. #define _bit_ic(_name, _ic) BIT_##_name##_ic
  81. /* @_cat: implemented by Token-Pasting Operator. */
  82. #if 0
  83. #define _cat(_name, _ic_type, _func) \
  84. ( \
  85. _func##_all(_name))
  86. #endif
  87. #if 0
  88. #define ODM_REG_DIG_11N 0xC50
  89. #define ODM_REG_DIG_11AC 0xDDD
  90. ODM_REG(DIG,_pdm_odm)
  91. #endif
  92. #if defined(DM_ODM_CE_MAC80211)
  93. #define ODM_BIT(name, dm) \
  94. ((dm->support_ic_type & ODM_IC_11N_SERIES) ? \
  95. ODM_BIT_##name##_11N : ODM_BIT_##name##_11AC)
  96. #define ODM_REG(name, dm) \
  97. ((dm->support_ic_type & ODM_IC_11N_SERIES) ? \
  98. ODM_REG_##name##_11N : ODM_REG_##name##_11AC)
  99. #else
  100. #define _reg_11N(_name) ODM_REG_##_name##_11N
  101. #define _reg_11AC(_name) ODM_REG_##_name##_11AC
  102. #define _bit_11N(_name) ODM_BIT_##_name##_11N
  103. #define _bit_11AC(_name) ODM_BIT_##_name##_11AC
  104. #ifdef __ECOS
  105. #define _rtk_cat(_name, _ic_type, _func) \
  106. ( \
  107. ((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
  108. _func##_11AC(_name))
  109. #else
  110. #define _cat(_name, _ic_type, _func) \
  111. ( \
  112. ((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
  113. _func##_11AC(_name))
  114. #endif
  115. /*@
  116. * only sample code
  117. *#define _cat(_name, _ic_type, _func) \
  118. * ( \
  119. * ((_ic_type) & ODM_RTL8188E) ? _func##_ic(_name, _8188E) :\
  120. * _func##_ic(_name, _8195) \
  121. * )
  122. */
  123. /* @_name: name of register or bit.
  124. * Example: "ODM_REG(R_A_AGC_CORE1, dm)"
  125. * gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C",
  126. * depends on support_ic_type.
  127. */
  128. #ifdef __ECOS
  129. #define ODM_REG(_name, _pdm_odm) \
  130. _rtk_cat(_name, _pdm_odm->support_ic_type, _reg)
  131. #define ODM_BIT(_name, _pdm_odm) \
  132. _rtk_cat(_name, _pdm_odm->support_ic_type, _bit)
  133. #else
  134. #define ODM_REG(_name, _pdm_odm) \
  135. _cat(_name, _pdm_odm->support_ic_type, _reg)
  136. #define ODM_BIT(_name, _pdm_odm) \
  137. _cat(_name, _pdm_odm->support_ic_type, _bit)
  138. #endif
  139. #endif
  140. /*@
  141. * =========== Extern Variable ??? It should be forbidden.
  142. */
  143. /*@
  144. * =========== EXtern Function Prototype
  145. */
  146. u8 odm_read_1byte(struct dm_struct *dm, u32 reg_addr);
  147. u16 odm_read_2byte(struct dm_struct *dm, u32 reg_addr);
  148. u32 odm_read_4byte(struct dm_struct *dm, u32 reg_addr);
  149. void odm_write_1byte(struct dm_struct *dm, u32 reg_addr, u8 data);
  150. void odm_write_2byte(struct dm_struct *dm, u32 reg_addr, u16 data);
  151. void odm_write_4byte(struct dm_struct *dm, u32 reg_addr, u32 data);
  152. void odm_set_mac_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask,
  153. u32 data);
  154. u32 odm_get_mac_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask);
  155. void odm_set_bb_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask, u32 data);
  156. u32 odm_get_bb_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask);
  157. void odm_set_rf_reg(struct dm_struct *dm, u8 e_rf_path, u32 reg_addr,
  158. u32 bit_mask, u32 data);
  159. u32 odm_get_rf_reg(struct dm_struct *dm, u8 e_rf_path, u32 reg_addr,
  160. u32 bit_mask);
  161. /*@
  162. * Memory Relative Function.
  163. */
  164. void odm_allocate_memory(struct dm_struct *dm, void **ptr, u32 length);
  165. void odm_free_memory(struct dm_struct *dm, void *ptr, u32 length);
  166. void odm_move_memory(struct dm_struct *dm, void *dest, void *src, u32 length);
  167. s32 odm_compare_memory(struct dm_struct *dm, void *buf1, void *buf2,
  168. u32 length);
  169. void odm_memory_set(struct dm_struct *dm, void *pbuf, s8 value, u32 length);
  170. /*@
  171. * ODM MISC-spin lock relative API.
  172. */
  173. void odm_acquire_spin_lock(struct dm_struct *dm, enum rt_spinlock_type type);
  174. void odm_release_spin_lock(struct dm_struct *dm, enum rt_spinlock_type type);
  175. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  176. /*@
  177. * ODM MISC-workitem relative API.
  178. */
  179. void odm_initialize_work_item(
  180. struct dm_struct *dm,
  181. PRT_WORK_ITEM p_rt_work_item,
  182. RT_WORKITEM_CALL_BACK rt_work_item_callback,
  183. void *context,
  184. const char *sz_id);
  185. void odm_start_work_item(
  186. PRT_WORK_ITEM p_rt_work_item);
  187. void odm_stop_work_item(
  188. PRT_WORK_ITEM p_rt_work_item);
  189. void odm_free_work_item(
  190. PRT_WORK_ITEM p_rt_work_item);
  191. void odm_schedule_work_item(
  192. PRT_WORK_ITEM p_rt_work_item);
  193. boolean
  194. odm_is_work_item_scheduled(
  195. PRT_WORK_ITEM p_rt_work_item);
  196. #endif
  197. /*@
  198. * ODM Timer relative API.
  199. */
  200. void ODM_delay_ms(u32 ms);
  201. void ODM_delay_us(u32 us);
  202. void ODM_sleep_ms(u32 ms);
  203. void ODM_sleep_us(u32 us);
  204. void odm_set_timer(struct dm_struct *dm, struct phydm_timer_list *timer,
  205. u32 ms_delay);
  206. void odm_initialize_timer(struct dm_struct *dm, struct phydm_timer_list *timer,
  207. void *call_back_func, void *context,
  208. const char *sz_id);
  209. void odm_cancel_timer(struct dm_struct *dm, struct phydm_timer_list *timer);
  210. void odm_release_timer(struct dm_struct *dm, struct phydm_timer_list *timer);
  211. /*ODM FW relative API.*/
  212. enum hal_status
  213. phydm_set_reg_by_fw(struct dm_struct *dm, enum phydm_halmac_param config_type,
  214. u32 offset, u32 data, u32 mask, enum rf_path e_rf_path,
  215. u32 delay_time);
  216. void odm_fill_h2c_cmd(struct dm_struct *dm, u8 element_id, u32 cmd_len,
  217. u8 *cmd_buffer);
  218. u8 phydm_c2H_content_parsing(void *dm_void, u8 c2h_cmd_id, u8 c2h_cmd_len,
  219. u8 *tmp_buf);
  220. u64 odm_get_current_time(struct dm_struct *dm);
  221. u64 odm_get_progressing_time(struct dm_struct *dm, u64 start_time);
  222. #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE)) && \
  223. (!defined(DM_ODM_CE_MAC80211) && !defined(DM_ODM_CE_MAC80211_V2))
  224. void phydm_set_hw_reg_handler_interface(struct dm_struct *dm, u8 reg_Name,
  225. u8 *val);
  226. void phydm_get_hal_def_var_handler_interface(struct dm_struct *dm,
  227. enum _HAL_DEF_VARIABLE e_variable,
  228. void *value);
  229. #endif
  230. void odm_set_tx_power_index_by_rate_section(struct dm_struct *dm,
  231. enum rf_path path, u8 channel,
  232. u8 rate_section);
  233. u8 odm_get_tx_power_index(struct dm_struct *dm, enum rf_path path, u8 tx_rate,
  234. u8 band_width, u8 channel);
  235. u8 odm_efuse_one_byte_read(struct dm_struct *dm, u16 addr, u8 *data,
  236. boolean b_pseu_do_test);
  237. void odm_efuse_logical_map_read(struct dm_struct *dm, u8 type, u16 offset,
  238. u32 *data);
  239. enum hal_status
  240. odm_iq_calibrate_by_fw(struct dm_struct *dm, u8 clear, u8 segment);
  241. void odm_cmn_info_ptr_array_hook(struct dm_struct *dm,
  242. enum odm_cmninfo cmn_info, u16 index,
  243. void *value);
  244. void phydm_cmn_sta_info_hook(struct dm_struct *dm, u8 index,
  245. struct cmn_sta_info *pcmn_sta_info);
  246. void phydm_macid2sta_idx_table(struct dm_struct *dm, u8 entry_idx,
  247. struct cmn_sta_info *pcmn_sta_info);
  248. void phydm_add_interrupt_mask_handler(struct dm_struct *dm, u8 interrupt_type);
  249. void phydm_enable_rx_related_interrupt_handler(struct dm_struct *dm);
  250. #if 0
  251. boolean
  252. phydm_get_txbf_en(
  253. struct dm_struct *dm,
  254. u16 mac_id,
  255. u8 i
  256. );
  257. #endif
  258. void phydm_iqk_wait(struct dm_struct *dm, u32 timeout);
  259. u8 phydm_get_hwrate_to_mrate(struct dm_struct *dm, u8 rate);
  260. void phydm_set_crystalcap(struct dm_struct *dm, u8 crystal_cap);
  261. void phydm_run_in_thread_cmd(struct dm_struct *dm, void (*func)(void *),
  262. void *context);
  263. #endif /* @__ODM_INTERFACE_H__ */