xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8822cs/hal/phydm/phydm_interface.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2007 - 2017  Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * The full GNU General Public License is included in this distribution in the
15*4882a593Smuzhiyun  * file called LICENSE.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * Contact Information:
18*4882a593Smuzhiyun  * wlanfae <wlanfae@realtek.com>
19*4882a593Smuzhiyun  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20*4882a593Smuzhiyun  * Hsinchu 300, Taiwan.
21*4882a593Smuzhiyun  *
22*4882a593Smuzhiyun  * Larry Finger <Larry.Finger@lwfinger.net>
23*4882a593Smuzhiyun  *
24*4882a593Smuzhiyun  *****************************************************************************/
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #ifndef __ODM_INTERFACE_H__
27*4882a593Smuzhiyun #define __ODM_INTERFACE_H__
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define INTERFACE_VERSION "1.3"
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define pdm_set_reg odm_set_bb_reg
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /*@=========== Constant/Structure/Enum/... Define*/
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun enum phydm_h2c_cmd {
36*4882a593Smuzhiyun 	PHYDM_H2C_RA_MASK		= 0x40,
37*4882a593Smuzhiyun 	PHYDM_H2C_TXBF			= 0x41,
38*4882a593Smuzhiyun 	ODM_H2C_RSSI_REPORT		= 0x42,
39*4882a593Smuzhiyun 	ODM_H2C_IQ_CALIBRATION		= 0x45,
40*4882a593Smuzhiyun 	PHYDM_RA_MASK_ABOVE_3SS		= 0x46,
41*4882a593Smuzhiyun 	ODM_H2C_RA_PARA_ADJUST		= 0x47,
42*4882a593Smuzhiyun 	PHYDM_H2C_DYNAMIC_TX_PATH	= 0x48,
43*4882a593Smuzhiyun 	PHYDM_H2C_FW_TRACE_EN		= 0x49,
44*4882a593Smuzhiyun 	ODM_H2C_WIFI_CALIBRATION	= 0x6d,
45*4882a593Smuzhiyun 	PHYDM_H2C_MU			= 0x4a,
46*4882a593Smuzhiyun 	PHYDM_H2C_FW_GENERAL_INIT	= 0x4c,
47*4882a593Smuzhiyun 	PHYDM_H2C_FW_CLM_MNTR		= 0x4d,
48*4882a593Smuzhiyun 	PHYDM_H2C_MCC			= 0x4f,
49*4882a593Smuzhiyun 	PHYDM_H2C_RESP_TX_PATH_CTRL	= 0x50,
50*4882a593Smuzhiyun 	PHYDM_H2C_RESP_TX_ANT_CTRL	= 0x51,
51*4882a593Smuzhiyun 	PHYDM_H2C_FW_DM_CTRL		= 0x55,
52*4882a593Smuzhiyun 	ODM_MAX_H2CCMD
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun enum phydm_c2h_evt {
56*4882a593Smuzhiyun 	PHYDM_C2H_DBG =		0,
57*4882a593Smuzhiyun 	PHYDM_C2H_LB =		1,
58*4882a593Smuzhiyun 	PHYDM_C2H_XBF =		2,
59*4882a593Smuzhiyun 	PHYDM_C2H_TX_REPORT =	3,
60*4882a593Smuzhiyun 	PHYDM_C2H_INFO =	9,
61*4882a593Smuzhiyun 	PHYDM_C2H_BT_MP =	11,
62*4882a593Smuzhiyun 	PHYDM_C2H_RA_RPT =	12,
63*4882a593Smuzhiyun 	PHYDM_C2H_RA_PARA_RPT = 14,
64*4882a593Smuzhiyun 	PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,
65*4882a593Smuzhiyun 	PHYDM_C2H_IQK_FINISH =	17, /*@0x11*/
66*4882a593Smuzhiyun 	PHYDM_C2H_CLM_MONITOR =	0x2a,
67*4882a593Smuzhiyun 	PHYDM_C2H_DBG_CODE =	0xFE,
68*4882a593Smuzhiyun 	PHYDM_C2H_EXTEND =	0xFF,
69*4882a593Smuzhiyun };
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun enum phydm_extend_c2h_evt {
72*4882a593Smuzhiyun 	PHYDM_EXTEND_C2H_DBG_PRINT = 0
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun };
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun enum phydm_halmac_param {
77*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_MAC_W8 = 0,
78*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_MAC_W16 = 1,
79*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_MAC_W32 = 2,
80*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_BB_W8,
81*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_BB_W16,
82*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_BB_W32,
83*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_RF_W,
84*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_DELAY_US,
85*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_DELAY_MS,
86*4882a593Smuzhiyun 	PHYDM_HALMAC_CMD_END = 0XFF,
87*4882a593Smuzhiyun };
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /*@=========== Macro Define*/
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #define _reg_all(_name)			ODM_##_name
92*4882a593Smuzhiyun #define _reg_ic(_name, _ic)		ODM_##_name##_ic
93*4882a593Smuzhiyun #define _bit_all(_name)			BIT_##_name
94*4882a593Smuzhiyun #define _bit_ic(_name, _ic)		BIT_##_name##_ic
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun #if defined(DM_ODM_CE_MAC80211)
97*4882a593Smuzhiyun #define ODM_BIT(name, dm)				\
98*4882a593Smuzhiyun 	((dm->support_ic_type & ODM_IC_11N_SERIES) ?	\
99*4882a593Smuzhiyun 	 ODM_BIT_##name##_11N : ODM_BIT_##name##_11AC)
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun #define ODM_REG(name, dm)				\
102*4882a593Smuzhiyun 	((dm->support_ic_type & ODM_IC_11N_SERIES) ?	\
103*4882a593Smuzhiyun 	 ODM_REG_##name##_11N : ODM_REG_##name##_11AC)
104*4882a593Smuzhiyun #else
105*4882a593Smuzhiyun #define _reg_11N(_name)			ODM_REG_##_name##_11N
106*4882a593Smuzhiyun #define _reg_11AC(_name)		ODM_REG_##_name##_11AC
107*4882a593Smuzhiyun #define _bit_11N(_name)			ODM_BIT_##_name##_11N
108*4882a593Smuzhiyun #define _bit_11AC(_name)		ODM_BIT_##_name##_11AC
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun #ifdef __ECOS
111*4882a593Smuzhiyun #define _rtk_cat(_name, _ic_type, _func)                                \
112*4882a593Smuzhiyun 	(                                                               \
113*4882a593Smuzhiyun 		((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
114*4882a593Smuzhiyun 						   _func##_11AC(_name))
115*4882a593Smuzhiyun #else
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun #define _cat(_name, _ic_type, _func)                                    \
118*4882a593Smuzhiyun 	(                                                               \
119*4882a593Smuzhiyun 		((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
120*4882a593Smuzhiyun 						   _func##_11AC(_name))
121*4882a593Smuzhiyun #endif
122*4882a593Smuzhiyun /*@
123*4882a593Smuzhiyun  * only sample code
124*4882a593Smuzhiyun  *#define _cat(_name, _ic_type, _func)					\
125*4882a593Smuzhiyun  *	(								\
126*4882a593Smuzhiyun  *		((_ic_type) & ODM_RTL8188E) ? _func##_ic(_name, _8188E) :\
127*4882a593Smuzhiyun  *		_func##_ic(_name, _8195)				\
128*4882a593Smuzhiyun  *	)
129*4882a593Smuzhiyun  */
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun /* @_name: name of register or bit.
132*4882a593Smuzhiyun  * Example: "ODM_REG(R_A_AGC_CORE1, dm)"
133*4882a593Smuzhiyun  * gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C",
134*4882a593Smuzhiyun  * depends on support_ic_type.
135*4882a593Smuzhiyun  */
136*4882a593Smuzhiyun #ifdef __ECOS
137*4882a593Smuzhiyun 	#define ODM_REG(_name, _pdm_odm)	\
138*4882a593Smuzhiyun 		_rtk_cat(_name, _pdm_odm->support_ic_type, _reg)
139*4882a593Smuzhiyun 	#define ODM_BIT(_name, _pdm_odm)	\
140*4882a593Smuzhiyun 		_rtk_cat(_name, _pdm_odm->support_ic_type, _bit)
141*4882a593Smuzhiyun #else
142*4882a593Smuzhiyun 	#define ODM_REG(_name, _pdm_odm)	\
143*4882a593Smuzhiyun 		_cat(_name, _pdm_odm->support_ic_type, _reg)
144*4882a593Smuzhiyun 	#define ODM_BIT(_name, _pdm_odm)	\
145*4882a593Smuzhiyun 		_cat(_name, _pdm_odm->support_ic_type, _bit)
146*4882a593Smuzhiyun #endif
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun #endif
149*4882a593Smuzhiyun /*@
150*4882a593Smuzhiyun  * =========== Extern Variable ??? It should be forbidden.
151*4882a593Smuzhiyun  */
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun /*@
154*4882a593Smuzhiyun  * =========== EXtern Function Prototype
155*4882a593Smuzhiyun  */
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun u8 odm_read_1byte(struct dm_struct *dm, u32 reg_addr);
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun u16 odm_read_2byte(struct dm_struct *dm, u32 reg_addr);
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun u32 odm_read_4byte(struct dm_struct *dm, u32 reg_addr);
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun void odm_write_1byte(struct dm_struct *dm, u32 reg_addr, u8 data);
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun void odm_write_2byte(struct dm_struct *dm, u32 reg_addr, u16 data);
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun void odm_write_4byte(struct dm_struct *dm, u32 reg_addr, u32 data);
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun void odm_set_mac_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask,
170*4882a593Smuzhiyun 		     u32 data);
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun u32 odm_get_mac_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask);
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun void odm_set_bb_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask, u32 data);
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun u32 odm_get_bb_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask);
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun void odm_set_rf_reg(struct dm_struct *dm, u8 e_rf_path, u32 reg_addr,
179*4882a593Smuzhiyun 		    u32 bit_mask, u32 data);
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun u32 odm_get_rf_reg(struct dm_struct *dm, u8 e_rf_path, u32 reg_addr,
182*4882a593Smuzhiyun 		   u32 bit_mask);
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun u16 odm_convert_to_le16(u16 value);
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun u32 odm_convert_to_le32(u32 value);
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /*@
189*4882a593Smuzhiyun  * Memory Relative Function.
190*4882a593Smuzhiyun  */
191*4882a593Smuzhiyun void odm_allocate_memory(struct dm_struct *dm, void **ptr, u32 length);
192*4882a593Smuzhiyun void odm_free_memory(struct dm_struct *dm, void *ptr, u32 length);
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun void odm_move_memory(struct dm_struct *dm, void *dest, void *src, u32 length);
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun s32 odm_compare_memory(struct dm_struct *dm, void *buf1, void *buf2,
197*4882a593Smuzhiyun 		       u32 length);
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun void odm_memory_set(struct dm_struct *dm, void *pbuf, s8 value, u32 length);
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /*@
202*4882a593Smuzhiyun  * ODM MISC-spin lock relative API.
203*4882a593Smuzhiyun  */
204*4882a593Smuzhiyun void odm_acquire_spin_lock(struct dm_struct *dm, enum rt_spinlock_type type);
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun void odm_release_spin_lock(struct dm_struct *dm, enum rt_spinlock_type type);
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
209*4882a593Smuzhiyun /*@
210*4882a593Smuzhiyun  * ODM MISC-workitem relative API.
211*4882a593Smuzhiyun  */
212*4882a593Smuzhiyun void odm_initialize_work_item(
213*4882a593Smuzhiyun 	struct dm_struct *dm,
214*4882a593Smuzhiyun 	PRT_WORK_ITEM p_rt_work_item,
215*4882a593Smuzhiyun 	RT_WORKITEM_CALL_BACK rt_work_item_callback,
216*4882a593Smuzhiyun 	void *context,
217*4882a593Smuzhiyun 	const char *sz_id);
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun void odm_start_work_item(
220*4882a593Smuzhiyun 	PRT_WORK_ITEM p_rt_work_item);
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun void odm_stop_work_item(
223*4882a593Smuzhiyun 	PRT_WORK_ITEM p_rt_work_item);
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun void odm_free_work_item(
226*4882a593Smuzhiyun 	PRT_WORK_ITEM p_rt_work_item);
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun void odm_schedule_work_item(
229*4882a593Smuzhiyun 	PRT_WORK_ITEM p_rt_work_item);
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun boolean
232*4882a593Smuzhiyun odm_is_work_item_scheduled(
233*4882a593Smuzhiyun 	PRT_WORK_ITEM p_rt_work_item);
234*4882a593Smuzhiyun #endif
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun /*@
237*4882a593Smuzhiyun  * ODM Timer relative API.
238*4882a593Smuzhiyun  */
239*4882a593Smuzhiyun void ODM_delay_ms(u32 ms);
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun void ODM_delay_us(u32 us);
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun void ODM_sleep_ms(u32 ms);
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun void ODM_sleep_us(u32 us);
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun void odm_set_timer(struct dm_struct *dm, struct phydm_timer_list *timer,
248*4882a593Smuzhiyun 		   u32 ms_delay);
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun void odm_initialize_timer(struct dm_struct *dm, struct phydm_timer_list *timer,
251*4882a593Smuzhiyun 			  void *call_back_func, void *context,
252*4882a593Smuzhiyun 			  const char *sz_id);
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun void odm_cancel_timer(struct dm_struct *dm, struct phydm_timer_list *timer);
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun void odm_release_timer(struct dm_struct *dm, struct phydm_timer_list *timer);
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun /*ODM FW relative API.*/
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun enum hal_status
261*4882a593Smuzhiyun phydm_set_reg_by_fw(struct dm_struct *dm, enum phydm_halmac_param config_type,
262*4882a593Smuzhiyun 		    u32 offset, u32 data, u32 mask, enum rf_path e_rf_path,
263*4882a593Smuzhiyun 		    u32 delay_time);
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun void odm_fill_h2c_cmd(struct dm_struct *dm, u8 element_id, u32 cmd_len,
266*4882a593Smuzhiyun 		      u8 *cmd_buffer);
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun u8 phydm_c2H_content_parsing(void *dm_void, u8 c2h_cmd_id, u8 c2h_cmd_len,
269*4882a593Smuzhiyun 			     u8 *tmp_buf);
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun u64 odm_get_current_time(struct dm_struct *dm);
272*4882a593Smuzhiyun u64 odm_get_progressing_time(struct dm_struct *dm, u64 start_time);
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE)) && \
275*4882a593Smuzhiyun 	(!defined(DM_ODM_CE_MAC80211) && !defined(DM_ODM_CE_MAC80211_V2))
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun void phydm_set_hw_reg_handler_interface(struct dm_struct *dm, u8 reg_Name,
278*4882a593Smuzhiyun 					u8 *val);
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun void phydm_get_hal_def_var_handler_interface(struct dm_struct *dm,
281*4882a593Smuzhiyun 					     enum _HAL_DEF_VARIABLE e_variable,
282*4882a593Smuzhiyun 					     void *value);
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun #endif
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun void odm_set_tx_power_index_by_rate_section(struct dm_struct *dm,
287*4882a593Smuzhiyun 					    enum rf_path path, u8 channel,
288*4882a593Smuzhiyun 					    u8 rate_section);
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun u8 odm_get_tx_power_index(struct dm_struct *dm, enum rf_path path, u8 tx_rate,
291*4882a593Smuzhiyun 			  u8 band_width, u8 channel);
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun u8 odm_efuse_one_byte_read(struct dm_struct *dm, u16 addr, u8 *data,
294*4882a593Smuzhiyun 			   boolean b_pseu_do_test);
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun void odm_efuse_logical_map_read(struct dm_struct *dm, u8 type, u16 offset,
297*4882a593Smuzhiyun 				u32 *data);
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun enum hal_status
300*4882a593Smuzhiyun odm_iq_calibrate_by_fw(struct dm_struct *dm, u8 clear, u8 segment);
301*4882a593Smuzhiyun 
302*4882a593Smuzhiyun enum hal_status
303*4882a593Smuzhiyun odm_dpk_by_fw(struct dm_struct *dm);
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun void phydm_cmn_sta_info_hook(struct dm_struct *dm, u8 index,
306*4882a593Smuzhiyun 			     struct cmn_sta_info *pcmn_sta_info);
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun void phydm_macid2sta_idx_table(struct dm_struct *dm, u8 entry_idx,
309*4882a593Smuzhiyun 			       struct cmn_sta_info *pcmn_sta_info);
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun void phydm_add_interrupt_mask_handler(struct dm_struct *dm, u8 interrupt_type);
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun void phydm_enable_rx_related_interrupt_handler(struct dm_struct *dm);
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun void phydm_iqk_wait(struct dm_struct *dm, u32 timeout);
316*4882a593Smuzhiyun u8 phydm_get_hwrate_to_mrate(struct dm_struct *dm, u8 rate);
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun void phydm_set_crystalcap(struct dm_struct *dm, u8 crystal_cap);
319*4882a593Smuzhiyun void phydm_run_in_thread_cmd(struct dm_struct *dm, void (*func)(void *),
320*4882a593Smuzhiyun 			     void *context);
321*4882a593Smuzhiyun u8 phydm_get_tx_rate(struct dm_struct *dm);
322*4882a593Smuzhiyun u8 phydm_get_tx_power_dbm(struct dm_struct *dm, u8 rf_path,
323*4882a593Smuzhiyun 					u8 rate, u8 bandwidth, u8 channel);
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun s16 phydm_get_tx_power_mdbm(struct dm_struct *dm, u8 rf_path,
326*4882a593Smuzhiyun 					u8 rate, u8 bandwidth, u8 channel);
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun u32 phydm_rfe_ctrl_gpio(struct dm_struct *dm, u8 gpio_num);
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun u64 phydm_division64(u64 x, u64 y);
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun #endif /* @__ODM_INTERFACE_H__ */
333