phydm_hwconfig.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  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 __HALHWOUTSRC_H__
  21. #define __HALHWOUTSRC_H__
  22. /*--------------------------Define -------------------------------------------*/
  23. #define CCK_RSSI_INIT_COUNT 5
  24. #define RA_RSSI_STATE_INIT 0
  25. #define RA_RSSI_STATE_SEND 1
  26. #define RA_RSSI_STATE_HOLD 2
  27. #define CFO_HW_RPT_2_MHZ(val) ((val<<1) + (val>>1))
  28. /* ((X* 3125) / 10)>>7 = (X*10)>>2 = X*2.5 = X<<1 + X>>1 */
  29. #define AGC_DIFF_CONFIG_MP(ic, band) (odm_read_and_config_mp_##ic##_agc_tab_diff(p_dm_odm, array_mp_##ic##_agc_tab_diff_##band, \
  30. sizeof(array_mp_##ic##_agc_tab_diff_##band)/sizeof(u32)))
  31. #define AGC_DIFF_CONFIG_TC(ic, band) (odm_read_and_config_tc_##ic##_agc_tab_diff(p_dm_odm, array_tc_##ic##_agc_tab_diff_##band, \
  32. sizeof(array_tc_##ic##_agc_tab_diff_##band)/sizeof(u32)))
  33. #define AGC_DIFF_CONFIG(ic, band) do {\
  34. if (p_dm_odm->is_mp_chip)\
  35. AGC_DIFF_CONFIG_MP(ic, band);\
  36. else\
  37. AGC_DIFF_CONFIG_TC(ic, band);\
  38. } while (0)
  39. /* ************************************************************
  40. * structure and define
  41. * ************************************************************ */
  42. __PACK struct _phy_rx_agc_info {
  43. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  44. u8 gain: 7, trsw: 1;
  45. #else
  46. u8 trsw: 1, gain: 7;
  47. #endif
  48. };
  49. __PACK struct _phy_status_rpt_8192cd {
  50. struct _phy_rx_agc_info path_agc[2];
  51. u8 ch_corr[2];
  52. u8 cck_sig_qual_ofdm_pwdb_all;
  53. u8 cck_agc_rpt_ofdm_cfosho_a;
  54. u8 cck_rpt_b_ofdm_cfosho_b;
  55. u8 rsvd_1;/*ch_corr_msb;*/
  56. u8 noise_power_db_msb;
  57. s8 path_cfotail[2];
  58. u8 pcts_mask[2];
  59. s8 stream_rxevm[2];
  60. u8 path_rxsnr[2];
  61. u8 noise_power_db_lsb;
  62. u8 rsvd_2[3];
  63. u8 stream_csi[2];
  64. u8 stream_target_csi[2];
  65. s8 sig_evm;
  66. u8 rsvd_3;
  67. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  68. u8 antsel_rx_keep_2: 1; /*ex_intf_flg:1;*/
  69. u8 sgi_en: 1;
  70. u8 rxsc: 2;
  71. u8 idle_long: 1;
  72. u8 r_ant_train_en: 1;
  73. u8 ant_sel_b: 1;
  74. u8 ant_sel: 1;
  75. #else /*_BIG_ENDIAN_ */
  76. u8 ant_sel: 1;
  77. u8 ant_sel_b: 1;
  78. u8 r_ant_train_en: 1;
  79. u8 idle_long: 1;
  80. u8 rxsc: 2;
  81. u8 sgi_en: 1;
  82. u8 antsel_rx_keep_2: 1;/*ex_intf_flg:1;*/
  83. #endif
  84. };
  85. struct _phy_status_rpt_8812 {
  86. /* DWORD 0*/
  87. u8 gain_trsw[2]; /*path-A and path-B {TRSW, gain[6:0] }*/
  88. u8 chl_num_LSB; /*channel number[7:0]*/
  89. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  90. u8 chl_num_MSB: 2; /*channel number[9:8]*/
  91. u8 sub_chnl: 4; /*sub-channel location[3:0]*/
  92. u8 r_RFMOD: 2; /*RF mode[1:0]*/
  93. #else /*_BIG_ENDIAN_ */
  94. u8 r_RFMOD: 2;
  95. u8 sub_chnl: 4;
  96. u8 chl_num_MSB: 2;
  97. #endif
  98. /* DWORD 1*/
  99. u8 pwdb_all; /*CCK signal quality / OFDM pwdb all*/
  100. s8 cfosho[2]; /*DW1 byte 1 DW1 byte2 CCK AGC report and CCK_BB_Power / OFDM path-A and path-B short CFO*/
  101. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  102. /*this should be checked again because the definition of 8812 and 8814 is different*/
  103. /* u8 r_cck_rx_enable_pathc:2; cck rx enable pathc[1:0]*/
  104. /* u8 cck_rx_path:4; cck rx path[3:0]*/
  105. u8 resvd_0: 6;
  106. u8 bt_RF_ch_MSB: 2; /*8812A:2'b0 8814A: bt rf channel keep[7:6]*/
  107. #else /*_BIG_ENDIAN_*/
  108. u8 bt_RF_ch_MSB: 2;
  109. u8 resvd_0: 6;
  110. #endif
  111. /* DWORD 2*/
  112. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  113. u8 ant_div_sw_a: 1; /*8812A: ant_div_sw_a 8814A: 1'b0*/
  114. u8 ant_div_sw_b: 1; /*8812A: ant_div_sw_b 8814A: 1'b0*/
  115. u8 bt_RF_ch_LSB: 6; /*8812A: 6'b0 8814A: bt rf channel keep[5:0]*/
  116. #else /*_BIG_ENDIAN_ */
  117. u8 bt_RF_ch_LSB: 6;
  118. u8 ant_div_sw_b: 1;
  119. u8 ant_div_sw_a: 1;
  120. #endif
  121. s8 cfotail[2]; /*DW2 byte 1 DW2 byte 2 path-A and path-B CFO tail*/
  122. u8 PCTS_MSK_RPT_0; /*PCTS mask report[7:0]*/
  123. u8 PCTS_MSK_RPT_1; /*PCTS mask report[15:8]*/
  124. /* DWORD 3*/
  125. s8 rxevm[2]; /*DW3 byte 1 DW3 byte 2 stream 1 and stream 2 RX EVM*/
  126. s8 rxsnr[2]; /*DW3 byte 3 DW4 byte 0 path-A and path-B RX SNR*/
  127. /* DWORD 4*/
  128. u8 PCTS_MSK_RPT_2; /*PCTS mask report[23:16]*/
  129. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  130. u8 PCTS_MSK_RPT_3: 6; /*PCTS mask report[29:24]*/
  131. u8 pcts_rpt_valid: 1; /*pcts_rpt_valid*/
  132. u8 resvd_1: 1; /*1'b0*/
  133. #else /*_BIG_ENDIAN_*/
  134. u8 resvd_1: 1;
  135. u8 pcts_rpt_valid: 1;
  136. u8 PCTS_MSK_RPT_3: 6;
  137. #endif
  138. s8 rxevm_cd[2]; /*DW 4 byte 3 DW5 byte 0 8812A: 16'b0 8814A: stream 3 and stream 4 RX EVM*/
  139. /* DWORD 5*/
  140. u8 csi_current[2]; /*DW5 byte 1 DW5 byte 2 8812A: stream 1 and 2 CSI 8814A: path-C and path-D RX SNR*/
  141. u8 gain_trsw_cd[2]; /*DW5 byte 3 DW6 byte 0 path-C and path-D {TRSW, gain[6:0] }*/
  142. /* DWORD 6*/
  143. s8 sigevm; /*signal field EVM*/
  144. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  145. u8 antidx_antc: 3; /*8812A: 3'b0 8814A: antidx_antc[2:0]*/
  146. u8 antidx_antd: 3; /*8812A: 3'b0 8814A: antidx_antd[2:0]*/
  147. u8 dpdt_ctrl_keep: 1; /*8812A: 1'b0 8814A: dpdt_ctrl_keep*/
  148. u8 GNT_BT_keep: 1; /*8812A: 1'b0 8814A: GNT_BT_keep*/
  149. #else /*_BIG_ENDIAN_*/
  150. u8 GNT_BT_keep: 1;
  151. u8 dpdt_ctrl_keep: 1;
  152. u8 antidx_antd: 3;
  153. u8 antidx_antc: 3;
  154. #endif
  155. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  156. u8 antidx_anta: 3; /*antidx_anta[2:0]*/
  157. u8 antidx_antb: 3; /*antidx_antb[2:0]*/
  158. u8 hw_antsw_occur: 2; /*1'b0*/
  159. #else /*_BIG_ENDIAN_*/
  160. u8 hw_antsw_occur: 2;
  161. u8 antidx_antb: 3;
  162. u8 antidx_anta: 3;
  163. #endif
  164. };
  165. void
  166. phydm_reset_rssi_for_dm(
  167. struct PHY_DM_STRUCT *p_dm_odm,
  168. u8 station_id
  169. );
  170. void
  171. odm_init_rssi_for_dm(
  172. struct PHY_DM_STRUCT *p_dm_odm
  173. );
  174. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  175. void
  176. phydm_normal_driver_rx_sniffer(
  177. struct PHY_DM_STRUCT *p_dm_odm,
  178. u8 *p_desc,
  179. PRT_RFD_STATUS p_rt_rfd_status,
  180. u8 *p_drv_info,
  181. u8 phy_status
  182. );
  183. #endif
  184. void
  185. odm_phy_status_query(
  186. struct PHY_DM_STRUCT *p_dm_odm,
  187. struct _odm_phy_status_info_ *p_phy_info,
  188. u8 *p_phy_status,
  189. struct _odm_per_pkt_info_ *p_pktinfo
  190. );
  191. void
  192. odm_mac_status_query(
  193. struct PHY_DM_STRUCT *p_dm_odm,
  194. u8 *p_mac_status,
  195. u8 mac_id,
  196. boolean is_packet_match_bssid,
  197. boolean is_packet_to_self,
  198. boolean is_packet_beacon
  199. );
  200. enum hal_status
  201. odm_config_rf_with_tx_pwr_track_header_file(
  202. struct PHY_DM_STRUCT *p_dm_odm
  203. );
  204. enum hal_status
  205. odm_config_rf_with_header_file(
  206. struct PHY_DM_STRUCT *p_dm_odm,
  207. enum odm_rf_config_type config_type,
  208. enum odm_rf_radio_path_e e_rf_path
  209. );
  210. enum hal_status
  211. odm_config_bb_with_header_file(
  212. struct PHY_DM_STRUCT *p_dm_odm,
  213. enum odm_bb_config_type config_type
  214. );
  215. enum hal_status
  216. odm_config_mac_with_header_file(
  217. struct PHY_DM_STRUCT *p_dm_odm
  218. );
  219. enum hal_status
  220. odm_config_fw_with_header_file(
  221. struct PHY_DM_STRUCT *p_dm_odm,
  222. enum odm_fw_config_type config_type,
  223. u8 *p_firmware,
  224. u32 *p_size
  225. );
  226. u32
  227. odm_get_hw_img_version(
  228. struct PHY_DM_STRUCT *p_dm_odm
  229. );
  230. s32
  231. odm_signal_scale_mapping(
  232. struct PHY_DM_STRUCT *p_dm_odm,
  233. s32 curr_sig
  234. );
  235. #if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)
  236. /*For 8822B only!! need to move to FW finally */
  237. /*==============================================*/
  238. void
  239. phydm_rx_phy_status_new_type(
  240. struct PHY_DM_STRUCT *p_phydm,
  241. u8 *p_phy_status,
  242. struct _odm_per_pkt_info_ *p_pktinfo,
  243. struct _odm_phy_status_info_ *p_phy_info
  244. );
  245. boolean
  246. phydm_query_is_mu_api(
  247. struct PHY_DM_STRUCT *p_phydm,
  248. u8 ppdu_idx,
  249. u8 *p_data_rate,
  250. u8 *p_gid
  251. );
  252. struct _phy_status_rpt_jaguar2_type0 {
  253. /* DW0 */
  254. u8 page_num;
  255. u8 pwdb;
  256. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  257. u8 gain: 6;
  258. u8 rsvd_0: 1;
  259. u8 trsw: 1;
  260. #else
  261. u8 trsw: 1;
  262. u8 rsvd_0: 1;
  263. u8 gain: 6;
  264. #endif
  265. u8 rsvd_1;
  266. /* DW1 */
  267. u8 rsvd_2;
  268. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  269. u8 rxsc: 4;
  270. u8 agc_table: 4;
  271. #else
  272. u8 agc_table: 4;
  273. u8 rxsc: 4;
  274. #endif
  275. u8 channel;
  276. u8 band;
  277. /* DW2 */
  278. u16 length;
  279. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  280. u8 antidx_a: 3;
  281. u8 antidx_b: 3;
  282. u8 rsvd_3: 2;
  283. u8 antidx_c: 3;
  284. u8 antidx_d: 3;
  285. u8 rsvd_4:2;
  286. #else
  287. u8 rsvd_3: 2;
  288. u8 antidx_b: 3;
  289. u8 antidx_a: 3;
  290. u8 rsvd_4:2;
  291. u8 antidx_d: 3;
  292. u8 antidx_c: 3;
  293. #endif
  294. /* DW3 */
  295. u8 signal_quality;
  296. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  297. u8 vga:5;
  298. u8 lna_l:3;
  299. u8 bb_power:6;
  300. u8 rsvd_9:1;
  301. u8 lna_h:1;
  302. #else
  303. u8 lna_l:3;
  304. u8 vga:5;
  305. u8 lna_h:1;
  306. u8 rsvd_9:1;
  307. u8 bb_power:6;
  308. #endif
  309. u8 rsvd_5;
  310. /* DW4 */
  311. u32 rsvd_6;
  312. /* DW5 */
  313. u32 rsvd_7;
  314. /* DW6 */
  315. u32 rsvd_8;
  316. };
  317. struct _phy_status_rpt_jaguar2_type1 {
  318. /* DW0 and DW1 */
  319. u8 page_num;
  320. u8 pwdb[4];
  321. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  322. u8 l_rxsc: 4;
  323. u8 ht_rxsc: 4;
  324. #else
  325. u8 ht_rxsc: 4;
  326. u8 l_rxsc: 4;
  327. #endif
  328. u8 channel;
  329. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  330. u8 band: 2;
  331. u8 rsvd_0: 1;
  332. u8 hw_antsw_occu: 1;
  333. u8 gnt_bt: 1;
  334. u8 ldpc: 1;
  335. u8 stbc: 1;
  336. u8 beamformed: 1;
  337. #else
  338. u8 beamformed: 1;
  339. u8 stbc: 1;
  340. u8 ldpc: 1;
  341. u8 gnt_bt: 1;
  342. u8 hw_antsw_occu: 1;
  343. u8 rsvd_0: 1;
  344. u8 band: 2;
  345. #endif
  346. /* DW2 */
  347. u16 lsig_length;
  348. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  349. u8 antidx_a: 3;
  350. u8 antidx_b: 3;
  351. u8 rsvd_1: 2;
  352. u8 antidx_c: 3;
  353. u8 antidx_d: 3;
  354. u8 rsvd_2: 2;
  355. #else
  356. u8 rsvd_1: 2;
  357. u8 antidx_b: 3;
  358. u8 antidx_a: 3;
  359. u8 rsvd_2: 2;
  360. u8 antidx_d: 3;
  361. u8 antidx_c: 3;
  362. #endif
  363. /* DW3 */
  364. u8 paid;
  365. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  366. u8 paid_msb: 1;
  367. u8 gid: 6;
  368. u8 rsvd_3: 1;
  369. #else
  370. u8 rsvd_3: 1;
  371. u8 gid: 6;
  372. u8 paid_msb: 1;
  373. #endif
  374. u8 intf_pos;
  375. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  376. u8 intf_pos_msb: 1;
  377. u8 rsvd_4: 2;
  378. u8 nb_intf_flag: 1;
  379. u8 rf_mode: 2;
  380. u8 rsvd_5: 2;
  381. #else
  382. u8 rsvd_5: 2;
  383. u8 rf_mode: 2;
  384. u8 nb_intf_flag: 1;
  385. u8 rsvd_4: 2;
  386. u8 intf_pos_msb: 1;
  387. #endif
  388. /* DW4 */
  389. s8 rxevm[4]; /* s(8,1) */
  390. /* DW5 */
  391. s8 cfo_tail[4]; /* s(8,7) */
  392. /* DW6 */
  393. s8 rxsnr[4]; /* s(8,1) */
  394. };
  395. struct _phy_status_rpt_jaguar2_type2 {
  396. /* DW0 ane DW1 */
  397. u8 page_num;
  398. u8 pwdb[4];
  399. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  400. u8 l_rxsc: 4;
  401. u8 ht_rxsc: 4;
  402. #else
  403. u8 ht_rxsc: 4;
  404. u8 l_rxsc: 4;
  405. #endif
  406. u8 channel;
  407. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  408. u8 band: 2;
  409. u8 rsvd_0: 1;
  410. u8 hw_antsw_occu: 1;
  411. u8 gnt_bt: 1;
  412. u8 ldpc: 1;
  413. u8 stbc: 1;
  414. u8 beamformed: 1;
  415. #else
  416. u8 beamformed: 1;
  417. u8 stbc: 1;
  418. u8 ldpc: 1;
  419. u8 gnt_bt: 1;
  420. u8 hw_antsw_occu: 1;
  421. u8 rsvd_0: 1;
  422. u8 band: 2;
  423. #endif
  424. /* DW2 */
  425. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  426. u8 shift_l_map: 6;
  427. u8 rsvd_1: 2;
  428. #else
  429. u8 rsvd_1: 2;
  430. u8 shift_l_map: 6;
  431. #endif
  432. u8 cnt_pw2cca;
  433. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  434. u8 agc_table_a: 4;
  435. u8 agc_table_b: 4;
  436. u8 agc_table_c: 4;
  437. u8 agc_table_d: 4;
  438. #else
  439. u8 agc_table_b: 4;
  440. u8 agc_table_a: 4;
  441. u8 agc_table_d: 4;
  442. u8 agc_table_c: 4;
  443. #endif
  444. /* DW3 ~ DW6*/
  445. u8 cnt_cca2agc_rdy;
  446. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  447. u8 gain_a: 6;
  448. u8 rsvd_2: 1;
  449. u8 trsw_a: 1;
  450. u8 gain_b: 6;
  451. u8 rsvd_3: 1;
  452. u8 trsw_b: 1;
  453. u8 gain_c: 6;
  454. u8 rsvd_4: 1;
  455. u8 trsw_c: 1;
  456. u8 gain_d: 6;
  457. u8 rsvd_5: 1;
  458. u8 trsw_d: 1;
  459. u8 aagc_step_a: 2;
  460. u8 aagc_step_b: 2;
  461. u8 aagc_step_c: 2;
  462. u8 aagc_step_d: 2;
  463. #else
  464. u8 trsw_a: 1;
  465. u8 rsvd_2: 1;
  466. u8 gain_a: 6;
  467. u8 trsw_b: 1;
  468. u8 rsvd_3: 1;
  469. u8 gain_b: 6;
  470. u8 trsw_c: 1;
  471. u8 rsvd_4: 1;
  472. u8 gain_c: 6;
  473. u8 trsw_d: 1;
  474. u8 rsvd_5: 1;
  475. u8 gain_d: 6;
  476. u8 aagc_step_d: 2;
  477. u8 aagc_step_c: 2;
  478. u8 aagc_step_b: 2;
  479. u8 aagc_step_a: 2;
  480. #endif
  481. u8 ht_aagc_gain[4];
  482. u8 dagc_gain[4];
  483. #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
  484. u8 counter: 6;
  485. u8 rsvd_6: 2;
  486. u8 syn_count: 5;
  487. u8 rsvd_7:3;
  488. #else
  489. u8 rsvd_6: 2;
  490. u8 counter: 6;
  491. u8 rsvd_7:3;
  492. u8 syn_count: 5;
  493. #endif
  494. };
  495. /*==============================================*/
  496. #endif /*#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)*/
  497. u32
  498. query_phydm_trx_capability(
  499. struct PHY_DM_STRUCT *p_dm_odm
  500. );
  501. u32
  502. query_phydm_stbc_capability(
  503. struct PHY_DM_STRUCT *p_dm_odm
  504. );
  505. u32
  506. query_phydm_ldpc_capability(
  507. struct PHY_DM_STRUCT *p_dm_odm
  508. );
  509. u32
  510. query_phydm_txbf_parameters(
  511. struct PHY_DM_STRUCT *p_dm_odm
  512. );
  513. u32
  514. query_phydm_txbf_capability(
  515. struct PHY_DM_STRUCT *p_dm_odm
  516. );
  517. #endif /*#ifndef __HALHWOUTSRC_H__*/