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