Path: blob/master/ALFA-W1F1/RTL8814AU/hal/phydm/phydm_interface.h
1307 views
/******************************************************************************1*2* Copyright(c) 2007 - 2017 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13* The full GNU General Public License is included in this distribution in the14* file called LICENSE.15*16* Contact Information:17* wlanfae <[email protected]>18* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,19* Hsinchu 300, Taiwan.20*21* Larry Finger <[email protected]>22*23*****************************************************************************/2425#ifndef __ODM_INTERFACE_H__26#define __ODM_INTERFACE_H__2728#define INTERFACE_VERSION "1.2"2930#define pdm_set_reg odm_set_bb_reg3132/*@=========== Constant/Structure/Enum/... Define*/3334enum phydm_h2c_cmd {35PHYDM_H2C_RA_MASK = 0x40,36PHYDM_H2C_TXBF = 0x41,37ODM_H2C_RSSI_REPORT = 0x42,38ODM_H2C_IQ_CALIBRATION = 0x45,39PHYDM_RA_MASK_ABOVE_3SS = 0x46,40ODM_H2C_RA_PARA_ADJUST = 0x47,41PHYDM_H2C_DYNAMIC_TX_PATH = 0x48,42PHYDM_H2C_FW_TRACE_EN = 0x49,43ODM_H2C_WIFI_CALIBRATION = 0x6d,44PHYDM_H2C_MU = 0x4a,45PHYDM_H2C_FW_GENERAL_INIT = 0x4c,46PHYDM_H2C_FW_CLM_MNTR = 0x4d,47PHYDM_H2C_MCC = 0x4f,48PHYDM_H2C_RESP_TX_PATH_CTRL = 0x50,49PHYDM_H2C_RESP_TX_ANT_CTRL = 0x51,50ODM_MAX_H2CCMD51};5253enum phydm_c2h_evt {54PHYDM_C2H_DBG = 0,55PHYDM_C2H_LB = 1,56PHYDM_C2H_XBF = 2,57PHYDM_C2H_TX_REPORT = 3,58PHYDM_C2H_INFO = 9,59PHYDM_C2H_BT_MP = 11,60PHYDM_C2H_RA_RPT = 12,61PHYDM_C2H_RA_PARA_RPT = 14,62PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,63PHYDM_C2H_IQK_FINISH = 17, /*@0x11*/64PHYDM_C2H_CLM_MONITOR = 0x2a,65PHYDM_C2H_DBG_CODE = 0xFE,66PHYDM_C2H_EXTEND = 0xFF,67};6869enum phydm_extend_c2h_evt {70PHYDM_EXTEND_C2H_DBG_PRINT = 07172};7374enum phydm_halmac_param {75PHYDM_HALMAC_CMD_MAC_W8 = 0,76PHYDM_HALMAC_CMD_MAC_W16 = 1,77PHYDM_HALMAC_CMD_MAC_W32 = 2,78PHYDM_HALMAC_CMD_BB_W8,79PHYDM_HALMAC_CMD_BB_W16,80PHYDM_HALMAC_CMD_BB_W32,81PHYDM_HALMAC_CMD_RF_W,82PHYDM_HALMAC_CMD_DELAY_US,83PHYDM_HALMAC_CMD_DELAY_MS,84PHYDM_HALMAC_CMD_END = 0XFF,85};8687/*@=========== Macro Define*/8889#define _reg_all(_name) ODM_##_name90#define _reg_ic(_name, _ic) ODM_##_name##_ic91#define _bit_all(_name) BIT_##_name92#define _bit_ic(_name, _ic) BIT_##_name##_ic9394/* @_cat: implemented by Token-Pasting Operator. */95#if 096#define _cat(_name, _ic_type, _func) \97( \98_func##_all(_name))99#endif100101#if 0102103#define ODM_REG_DIG_11N 0xC50104#define ODM_REG_DIG_11AC 0xDDD105106ODM_REG(DIG,_pdm_odm)107#endif108109#if defined(DM_ODM_CE_MAC80211)110#define ODM_BIT(name, dm) \111((dm->support_ic_type & ODM_IC_11N_SERIES) ? \112ODM_BIT_##name##_11N : ODM_BIT_##name##_11AC)113114#define ODM_REG(name, dm) \115((dm->support_ic_type & ODM_IC_11N_SERIES) ? \116ODM_REG_##name##_11N : ODM_REG_##name##_11AC)117#else118#define _reg_11N(_name) ODM_REG_##_name##_11N119#define _reg_11AC(_name) ODM_REG_##_name##_11AC120#define _bit_11N(_name) ODM_BIT_##_name##_11N121#define _bit_11AC(_name) ODM_BIT_##_name##_11AC122123#ifdef __ECOS124#define _rtk_cat(_name, _ic_type, _func) \125( \126((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \127_func##_11AC(_name))128#else129130#define _cat(_name, _ic_type, _func) \131( \132((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \133_func##_11AC(_name))134#endif135/*@136* only sample code137*#define _cat(_name, _ic_type, _func) \138* ( \139* ((_ic_type) & ODM_RTL8188E) ? _func##_ic(_name, _8188E) :\140* _func##_ic(_name, _8195) \141* )142*/143144/* @_name: name of register or bit.145* Example: "ODM_REG(R_A_AGC_CORE1, dm)"146* gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C",147* depends on support_ic_type.148*/149#ifdef __ECOS150#define ODM_REG(_name, _pdm_odm) \151_rtk_cat(_name, _pdm_odm->support_ic_type, _reg)152#define ODM_BIT(_name, _pdm_odm) \153_rtk_cat(_name, _pdm_odm->support_ic_type, _bit)154#else155#define ODM_REG(_name, _pdm_odm) \156_cat(_name, _pdm_odm->support_ic_type, _reg)157#define ODM_BIT(_name, _pdm_odm) \158_cat(_name, _pdm_odm->support_ic_type, _bit)159#endif160161#endif162/*@163* =========== Extern Variable ??? It should be forbidden.164*/165166/*@167* =========== EXtern Function Prototype168*/169170u8 odm_read_1byte(struct dm_struct *dm, u32 reg_addr);171172u16 odm_read_2byte(struct dm_struct *dm, u32 reg_addr);173174u32 odm_read_4byte(struct dm_struct *dm, u32 reg_addr);175176void odm_write_1byte(struct dm_struct *dm, u32 reg_addr, u8 data);177178void odm_write_2byte(struct dm_struct *dm, u32 reg_addr, u16 data);179180void odm_write_4byte(struct dm_struct *dm, u32 reg_addr, u32 data);181182void odm_set_mac_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask,183u32 data);184185u32 odm_get_mac_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask);186187void odm_set_bb_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask, u32 data);188189u32 odm_get_bb_reg(struct dm_struct *dm, u32 reg_addr, u32 bit_mask);190191void odm_set_rf_reg(struct dm_struct *dm, u8 e_rf_path, u32 reg_addr,192u32 bit_mask, u32 data);193194u32 odm_get_rf_reg(struct dm_struct *dm, u8 e_rf_path, u32 reg_addr,195u32 bit_mask);196197/*@198* Memory Relative Function.199*/200void odm_allocate_memory(struct dm_struct *dm, void **ptr, u32 length);201void odm_free_memory(struct dm_struct *dm, void *ptr, u32 length);202203void odm_move_memory(struct dm_struct *dm, void *dest, void *src, u32 length);204205s32 odm_compare_memory(struct dm_struct *dm, void *buf1, void *buf2,206u32 length);207208void odm_memory_set(struct dm_struct *dm, void *pbuf, s8 value, u32 length);209210/*@211* ODM MISC-spin lock relative API.212*/213void odm_acquire_spin_lock(struct dm_struct *dm, enum rt_spinlock_type type);214215void odm_release_spin_lock(struct dm_struct *dm, enum rt_spinlock_type type);216217#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)218/*@219* ODM MISC-workitem relative API.220*/221void odm_initialize_work_item(222struct dm_struct *dm,223PRT_WORK_ITEM p_rt_work_item,224RT_WORKITEM_CALL_BACK rt_work_item_callback,225void *context,226const char *sz_id);227228void odm_start_work_item(229PRT_WORK_ITEM p_rt_work_item);230231void odm_stop_work_item(232PRT_WORK_ITEM p_rt_work_item);233234void odm_free_work_item(235PRT_WORK_ITEM p_rt_work_item);236237void odm_schedule_work_item(238PRT_WORK_ITEM p_rt_work_item);239240boolean241odm_is_work_item_scheduled(242PRT_WORK_ITEM p_rt_work_item);243#endif244245/*@246* ODM Timer relative API.247*/248void ODM_delay_ms(u32 ms);249250void ODM_delay_us(u32 us);251252void ODM_sleep_ms(u32 ms);253254void ODM_sleep_us(u32 us);255256void odm_set_timer(struct dm_struct *dm, struct phydm_timer_list *timer,257u32 ms_delay);258259void odm_initialize_timer(struct dm_struct *dm, struct phydm_timer_list *timer,260void *call_back_func, void *context,261const char *sz_id);262263void odm_cancel_timer(struct dm_struct *dm, struct phydm_timer_list *timer);264265void odm_release_timer(struct dm_struct *dm, struct phydm_timer_list *timer);266267/*ODM FW relative API.*/268269enum hal_status270phydm_set_reg_by_fw(struct dm_struct *dm, enum phydm_halmac_param config_type,271u32 offset, u32 data, u32 mask, enum rf_path e_rf_path,272u32 delay_time);273274void odm_fill_h2c_cmd(struct dm_struct *dm, u8 element_id, u32 cmd_len,275u8 *cmd_buffer);276277u8 phydm_c2H_content_parsing(void *dm_void, u8 c2h_cmd_id, u8 c2h_cmd_len,278u8 *tmp_buf);279280u64 odm_get_current_time(struct dm_struct *dm);281u64 odm_get_progressing_time(struct dm_struct *dm, u64 start_time);282283#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE)) && \284(!defined(DM_ODM_CE_MAC80211) && !defined(DM_ODM_CE_MAC80211_V2))285286void phydm_set_hw_reg_handler_interface(struct dm_struct *dm, u8 reg_Name,287u8 *val);288289void phydm_get_hal_def_var_handler_interface(struct dm_struct *dm,290enum _HAL_DEF_VARIABLE e_variable,291void *value);292293#endif294295void odm_set_tx_power_index_by_rate_section(struct dm_struct *dm,296enum rf_path path, u8 channel,297u8 rate_section);298299u8 odm_get_tx_power_index(struct dm_struct *dm, enum rf_path path, u8 tx_rate,300u8 band_width, u8 channel);301302u8 odm_efuse_one_byte_read(struct dm_struct *dm, u16 addr, u8 *data,303boolean b_pseu_do_test);304305void odm_efuse_logical_map_read(struct dm_struct *dm, u8 type, u16 offset,306u32 *data);307308enum hal_status309odm_iq_calibrate_by_fw(struct dm_struct *dm, u8 clear, u8 segment);310311enum hal_status312odm_dpk_by_fw(struct dm_struct *dm);313314void phydm_cmn_sta_info_hook(struct dm_struct *dm, u8 index,315struct cmn_sta_info *pcmn_sta_info);316317void phydm_macid2sta_idx_table(struct dm_struct *dm, u8 entry_idx,318struct cmn_sta_info *pcmn_sta_info);319320void phydm_add_interrupt_mask_handler(struct dm_struct *dm, u8 interrupt_type);321322void phydm_enable_rx_related_interrupt_handler(struct dm_struct *dm);323324#if 0325boolean326phydm_get_txbf_en(327struct dm_struct *dm,328u16 mac_id,329u8 i330);331#endif332333void phydm_iqk_wait(struct dm_struct *dm, u32 timeout);334u8 phydm_get_hwrate_to_mrate(struct dm_struct *dm, u8 rate);335336void phydm_set_crystalcap(struct dm_struct *dm, u8 crystal_cap);337void phydm_run_in_thread_cmd(struct dm_struct *dm, void (*func)(void *),338void *context);339u8 phydm_get_tx_rate(struct dm_struct *dm);340u8 phydm_get_tx_power_dbm(struct dm_struct *dm, u8 rf_path,341u8 rate, u8 bandwidth, u8 channel);342u64 phydm_division64(u64 x, u64 y);343344#endif /* @__ODM_INTERFACE_H__ */345346347