phydm_interface.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
  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. * You should have received a copy of the GNU General Public License along with
  15. * this program; if not, write to the Free Software Foundation, Inc.,
  16. * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  17. *
  18. *
  19. ******************************************************************************/
  20. #ifndef __ODM_INTERFACE_H__
  21. #define __ODM_INTERFACE_H__
  22. #define INTERFACE_VERSION "1.1" /*2015.07.29 YuChen*/
  23. /*
  24. * =========== Constant/Structure/Enum/... Define
  25. * */
  26. /*
  27. * =========== Macro Define
  28. * */
  29. #define _reg_all(_name) ODM_##_name
  30. #define _reg_ic(_name, _ic) ODM_##_name##_ic
  31. #define _bit_all(_name) BIT_##_name
  32. #define _bit_ic(_name, _ic) BIT_##_name##_ic
  33. /* _cat: implemented by Token-Pasting Operator. */
  34. #if 0
  35. #define _cat(_name, _ic_type, _func) \
  36. (\
  37. _func##_all(_name) \
  38. )
  39. #endif
  40. /*===================================
  41. #define ODM_REG_DIG_11N 0xC50
  42. #define ODM_REG_DIG_11AC 0xDDD
  43. ODM_REG(DIG,_pdm_odm)
  44. =====================================*/
  45. #define _reg_11N(_name) ODM_REG_##_name##_11N
  46. #define _reg_11AC(_name) ODM_REG_##_name##_11AC
  47. #define _bit_11N(_name) ODM_BIT_##_name##_11N
  48. #define _bit_11AC(_name) ODM_BIT_##_name##_11AC
  49. #ifdef __ECOS
  50. #define _rtk_cat(_name, _ic_type, _func) \
  51. (\
  52. ((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
  53. _func##_11AC(_name) \
  54. )
  55. #else
  56. #define _cat(_name, _ic_type, _func) \
  57. (\
  58. ((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
  59. _func##_11AC(_name) \
  60. )
  61. #endif
  62. /*
  63. * only sample code
  64. *#define _cat(_name, _ic_type, _func) \
  65. * ( \
  66. * ((_ic_type) & ODM_RTL8188E) ? _func##_ic(_name, _8188E) : \
  67. * _func##_ic(_name, _8195) \
  68. * )
  69. */
  70. /* _name: name of register or bit.
  71. * Example: "ODM_REG(R_A_AGC_CORE1, p_dm_odm)"
  72. * gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on support_ic_type. */
  73. #ifdef __ECOS
  74. #define ODM_REG(_name, _pdm_odm) _rtk_cat(_name, _pdm_odm->support_ic_type, _reg)
  75. #define ODM_BIT(_name, _pdm_odm) _rtk_cat(_name, _pdm_odm->support_ic_type, _bit)
  76. #else
  77. #define ODM_REG(_name, _pdm_odm) _cat(_name, _pdm_odm->support_ic_type, _reg)
  78. #define ODM_BIT(_name, _pdm_odm) _cat(_name, _pdm_odm->support_ic_type, _bit)
  79. #endif
  80. enum phydm_h2c_cmd {
  81. PHYDM_H2C_TXBF = 0x41,
  82. ODM_H2C_RSSI_REPORT = 0x42,
  83. ODM_H2C_IQ_CALIBRATION = 0x45,
  84. ODM_H2C_RA_PARA_ADJUST = 0x47,
  85. PHYDM_H2C_DYNAMIC_TX_PATH = 0x48,
  86. PHYDM_H2C_FW_TRACE_EN = 0x49,
  87. ODM_H2C_WIFI_CALIBRATION = 0x6d,
  88. PHYDM_H2C_MU = 0x4a,
  89. PHYDM_H2C_FW_GENERAL_INIT = 0x4c,
  90. ODM_MAX_H2CCMD
  91. };
  92. enum phydm_c2h_evt {
  93. PHYDM_C2H_DBG = 0,
  94. PHYDM_C2H_LB = 1,
  95. PHYDM_C2H_XBF = 2,
  96. PHYDM_C2H_TX_REPORT = 3,
  97. PHYDM_C2H_INFO = 9,
  98. PHYDM_C2H_BT_MP = 11,
  99. PHYDM_C2H_RA_RPT = 12,
  100. PHYDM_C2H_RA_PARA_RPT = 14,
  101. PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,
  102. PHYDM_C2H_IQK_FINISH = 17, /*0x11*/
  103. PHYDM_C2H_DBG_CODE = 0xFE,
  104. PHYDM_C2H_EXTEND = 0xFF,
  105. };
  106. enum phydm_extend_c2h_evt {
  107. PHYDM_EXTEND_C2H_DBG_PRINT = 0
  108. };
  109. /*
  110. * =========== Extern Variable ??? It should be forbidden.
  111. * */
  112. /*
  113. * =========== EXtern Function Prototype
  114. * */
  115. u8
  116. odm_read_1byte(
  117. struct PHY_DM_STRUCT *p_dm_odm,
  118. u32 reg_addr
  119. );
  120. u16
  121. odm_read_2byte(
  122. struct PHY_DM_STRUCT *p_dm_odm,
  123. u32 reg_addr
  124. );
  125. u32
  126. odm_read_4byte(
  127. struct PHY_DM_STRUCT *p_dm_odm,
  128. u32 reg_addr
  129. );
  130. void
  131. odm_write_1byte(
  132. struct PHY_DM_STRUCT *p_dm_odm,
  133. u32 reg_addr,
  134. u8 data
  135. );
  136. void
  137. odm_write_2byte(
  138. struct PHY_DM_STRUCT *p_dm_odm,
  139. u32 reg_addr,
  140. u16 data
  141. );
  142. void
  143. odm_write_4byte(
  144. struct PHY_DM_STRUCT *p_dm_odm,
  145. u32 reg_addr,
  146. u32 data
  147. );
  148. void
  149. odm_set_mac_reg(
  150. struct PHY_DM_STRUCT *p_dm_odm,
  151. u32 reg_addr,
  152. u32 bit_mask,
  153. u32 data
  154. );
  155. u32
  156. odm_get_mac_reg(
  157. struct PHY_DM_STRUCT *p_dm_odm,
  158. u32 reg_addr,
  159. u32 bit_mask
  160. );
  161. void
  162. odm_set_bb_reg(
  163. struct PHY_DM_STRUCT *p_dm_odm,
  164. u32 reg_addr,
  165. u32 bit_mask,
  166. u32 data
  167. );
  168. u32
  169. odm_get_bb_reg(
  170. struct PHY_DM_STRUCT *p_dm_odm,
  171. u32 reg_addr,
  172. u32 bit_mask
  173. );
  174. void
  175. odm_set_rf_reg(
  176. struct PHY_DM_STRUCT *p_dm_odm,
  177. enum odm_rf_radio_path_e e_rf_path,
  178. u32 reg_addr,
  179. u32 bit_mask,
  180. u32 data
  181. );
  182. u32
  183. odm_get_rf_reg(
  184. struct PHY_DM_STRUCT *p_dm_odm,
  185. enum odm_rf_radio_path_e e_rf_path,
  186. u32 reg_addr,
  187. u32 bit_mask
  188. );
  189. /*
  190. * Memory Relative Function.
  191. * */
  192. void
  193. odm_allocate_memory(
  194. struct PHY_DM_STRUCT *p_dm_odm,
  195. void **p_ptr,
  196. u32 length
  197. );
  198. void
  199. odm_free_memory(
  200. struct PHY_DM_STRUCT *p_dm_odm,
  201. void *p_ptr,
  202. u32 length
  203. );
  204. void
  205. odm_move_memory(
  206. struct PHY_DM_STRUCT *p_dm_odm,
  207. void *p_dest,
  208. void *p_src,
  209. u32 length
  210. );
  211. s32 odm_compare_memory(
  212. struct PHY_DM_STRUCT *p_dm_odm,
  213. void *p_buf1,
  214. void *p_buf2,
  215. u32 length
  216. );
  217. void odm_memory_set
  218. (struct PHY_DM_STRUCT *p_dm_odm,
  219. void *pbuf,
  220. s8 value,
  221. u32 length);
  222. /*
  223. * ODM MISC-spin lock relative API.
  224. * */
  225. void
  226. odm_acquire_spin_lock(
  227. struct PHY_DM_STRUCT *p_dm_odm,
  228. enum rt_spinlock_type type
  229. );
  230. void
  231. odm_release_spin_lock(
  232. struct PHY_DM_STRUCT *p_dm_odm,
  233. enum rt_spinlock_type type
  234. );
  235. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  236. /*
  237. * ODM MISC-workitem relative API.
  238. * */
  239. void
  240. odm_initialize_work_item(
  241. struct PHY_DM_STRUCT *p_dm_odm,
  242. PRT_WORK_ITEM p_rt_work_item,
  243. RT_WORKITEM_CALL_BACK rt_work_item_callback,
  244. void *p_context,
  245. const char *sz_id
  246. );
  247. void
  248. odm_start_work_item(
  249. PRT_WORK_ITEM p_rt_work_item
  250. );
  251. void
  252. odm_stop_work_item(
  253. PRT_WORK_ITEM p_rt_work_item
  254. );
  255. void
  256. odm_free_work_item(
  257. PRT_WORK_ITEM p_rt_work_item
  258. );
  259. void
  260. odm_schedule_work_item(
  261. PRT_WORK_ITEM p_rt_work_item
  262. );
  263. boolean
  264. odm_is_work_item_scheduled(
  265. PRT_WORK_ITEM p_rt_work_item
  266. );
  267. #endif
  268. /*
  269. * ODM Timer relative API.
  270. * */
  271. void
  272. odm_stall_execution(
  273. u32 us_delay
  274. );
  275. void
  276. ODM_delay_ms(u32 ms);
  277. void
  278. ODM_delay_us(u32 us);
  279. void
  280. ODM_sleep_ms(u32 ms);
  281. void
  282. ODM_sleep_us(u32 us);
  283. void
  284. odm_set_timer(
  285. struct PHY_DM_STRUCT *p_dm_odm,
  286. struct timer_list *p_timer,
  287. u32 ms_delay
  288. );
  289. void
  290. odm_initialize_timer(
  291. struct PHY_DM_STRUCT *p_dm_odm,
  292. struct timer_list *p_timer,
  293. void *call_back_func,
  294. void *p_context,
  295. const char *sz_id
  296. );
  297. void
  298. odm_cancel_timer(
  299. struct PHY_DM_STRUCT *p_dm_odm,
  300. struct timer_list *p_timer
  301. );
  302. void
  303. odm_release_timer(
  304. struct PHY_DM_STRUCT *p_dm_odm,
  305. struct timer_list *p_timer
  306. );
  307. /*
  308. * ODM FW relative API.
  309. * */
  310. void
  311. odm_fill_h2c_cmd(
  312. struct PHY_DM_STRUCT *p_dm_odm,
  313. u8 element_id,
  314. u32 cmd_len,
  315. u8 *p_cmd_buffer
  316. );
  317. u8
  318. phydm_c2H_content_parsing(
  319. void *p_dm_void,
  320. u8 c2h_cmd_id,
  321. u8 c2h_cmd_len,
  322. u8 *tmp_buf
  323. );
  324. u64
  325. odm_get_current_time(
  326. struct PHY_DM_STRUCT *p_dm_odm
  327. );
  328. u64
  329. odm_get_progressing_time(
  330. struct PHY_DM_STRUCT *p_dm_odm,
  331. u64 start_time
  332. );
  333. #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
  334. void
  335. phydm_set_hw_reg_handler_interface (
  336. struct PHY_DM_STRUCT *p_dm_odm,
  337. u8 reg_Name,
  338. u8 *val
  339. );
  340. void
  341. phydm_get_hal_def_var_handler_interface (
  342. struct PHY_DM_STRUCT *p_dm_odm,
  343. enum _HAL_DEF_VARIABLE e_variable,
  344. void *p_value
  345. );
  346. #endif
  347. void
  348. odm_set_tx_power_index_by_rate_section (
  349. struct PHY_DM_STRUCT *p_dm_odm,
  350. u8 RFPath,
  351. u8 Channel,
  352. u8 RateSection
  353. );
  354. u8
  355. odm_get_tx_power_index (
  356. struct PHY_DM_STRUCT *p_dm_odm,
  357. u8 RFPath,
  358. u8 tx_rate,
  359. u8 band_width,
  360. u8 Channel
  361. );
  362. u8
  363. odm_efuse_one_byte_read(
  364. struct PHY_DM_STRUCT *p_dm_odm,
  365. u16 addr,
  366. u8 *data,
  367. boolean bPseudoTest
  368. );
  369. enum hal_status
  370. odm_iq_calibrate_by_fw(
  371. struct PHY_DM_STRUCT *p_dm_odm,
  372. u8 clear,
  373. u8 segment
  374. );
  375. #endif /* __ODM_INTERFACE_H__ */