mirror of
https://github.com/aircrack-ng/rtl8812au.git
synced 2024-11-14 18:05:36 +00:00
522 lines
9.6 KiB
C
522 lines
9.6 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
|
|
#ifndef __ODM_INTERFACE_H__
|
|
#define __ODM_INTERFACE_H__
|
|
|
|
#define INTERFACE_VERSION "1.2" /*2017.05.03 YuChen add phy param offload HAL MAC API*/
|
|
|
|
/*=========== Constant/Structure/Enum/... Define*/
|
|
|
|
enum phydm_h2c_cmd {
|
|
PHYDM_H2C_RA_MASK = 0x40,
|
|
PHYDM_H2C_TXBF = 0x41,
|
|
ODM_H2C_RSSI_REPORT = 0x42,
|
|
ODM_H2C_IQ_CALIBRATION = 0x45,
|
|
PHYDM_RA_MASK_ABOVE_3SS = 0x46,
|
|
ODM_H2C_RA_PARA_ADJUST = 0x47,
|
|
PHYDM_H2C_DYNAMIC_TX_PATH = 0x48,
|
|
PHYDM_H2C_FW_TRACE_EN = 0x49,
|
|
ODM_H2C_WIFI_CALIBRATION = 0x6d,
|
|
PHYDM_H2C_MU = 0x4a,
|
|
PHYDM_H2C_FW_GENERAL_INIT = 0x4c,
|
|
PHYDM_H2C_FW_CLM_MNTR = 0x4d,
|
|
ODM_MAX_H2CCMD
|
|
};
|
|
|
|
enum phydm_c2h_evt {
|
|
PHYDM_C2H_DBG = 0,
|
|
PHYDM_C2H_LB = 1,
|
|
PHYDM_C2H_XBF = 2,
|
|
PHYDM_C2H_TX_REPORT = 3,
|
|
PHYDM_C2H_INFO = 9,
|
|
PHYDM_C2H_BT_MP = 11,
|
|
PHYDM_C2H_RA_RPT = 12,
|
|
PHYDM_C2H_RA_PARA_RPT = 14,
|
|
PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,
|
|
PHYDM_C2H_IQK_FINISH = 17, /*0x11*/
|
|
PHYDM_C2H_CLM_MONITOR = 0x2a,
|
|
PHYDM_C2H_DBG_CODE = 0xFE,
|
|
PHYDM_C2H_EXTEND = 0xFF,
|
|
};
|
|
|
|
enum phydm_extend_c2h_evt {
|
|
PHYDM_EXTEND_C2H_DBG_PRINT = 0
|
|
|
|
};
|
|
|
|
enum phydm_halmac_param {
|
|
PHYDM_HALMAC_CMD_MAC_W8 = 0,
|
|
PHYDM_HALMAC_CMD_MAC_W16 = 1,
|
|
PHYDM_HALMAC_CMD_MAC_W32 = 2,
|
|
PHYDM_HALMAC_CMD_BB_W8,
|
|
PHYDM_HALMAC_CMD_BB_W16,
|
|
PHYDM_HALMAC_CMD_BB_W32,
|
|
PHYDM_HALMAC_CMD_RF_W,
|
|
PHYDM_HALMAC_CMD_DELAY_US,
|
|
PHYDM_HALMAC_CMD_DELAY_MS,
|
|
PHYDM_HALMAC_CMD_END = 0XFF,
|
|
};
|
|
|
|
/*=========== Macro Define*/
|
|
|
|
#define _reg_all(_name) ODM_##_name
|
|
#define _reg_ic(_name, _ic) ODM_##_name##_ic
|
|
#define _bit_all(_name) BIT_##_name
|
|
#define _bit_ic(_name, _ic) BIT_##_name##_ic
|
|
|
|
/* _cat: implemented by Token-Pasting Operator. */
|
|
#if 0
|
|
#define _cat(_name, _ic_type, _func) \
|
|
(\
|
|
_func##_all(_name) \
|
|
)
|
|
#endif
|
|
|
|
/*===================================
|
|
|
|
#define ODM_REG_DIG_11N 0xC50
|
|
#define ODM_REG_DIG_11AC 0xDDD
|
|
|
|
ODM_REG(DIG,_pdm_odm)
|
|
=====================================*/
|
|
|
|
#define _reg_11N(_name) ODM_REG_##_name##_11N
|
|
#define _reg_11AC(_name) ODM_REG_##_name##_11AC
|
|
#define _bit_11N(_name) ODM_BIT_##_name##_11N
|
|
#define _bit_11AC(_name) ODM_BIT_##_name##_11AC
|
|
|
|
#ifdef __ECOS
|
|
#define _rtk_cat(_name, _ic_type, _func) \
|
|
(\
|
|
((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
|
|
_func##_11AC(_name) \
|
|
)
|
|
#else
|
|
|
|
#define _cat(_name, _ic_type, _func) \
|
|
(\
|
|
((_ic_type) & ODM_IC_11N_SERIES) ? _func##_11N(_name) : \
|
|
_func##_11AC(_name) \
|
|
)
|
|
#endif
|
|
/*
|
|
* only sample code
|
|
*#define _cat(_name, _ic_type, _func) \
|
|
* ( \
|
|
* ((_ic_type) & ODM_RTL8188E) ? _func##_ic(_name, _8188E) : \
|
|
* _func##_ic(_name, _8195) \
|
|
* )
|
|
*/
|
|
|
|
/* _name: name of register or bit.
|
|
* Example: "ODM_REG(R_A_AGC_CORE1, p_dm)"
|
|
* gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on support_ic_type. */
|
|
#ifdef __ECOS
|
|
#define ODM_REG(_name, _pdm_odm) _rtk_cat(_name, _pdm_odm->support_ic_type, _reg)
|
|
#define ODM_BIT(_name, _pdm_odm) _rtk_cat(_name, _pdm_odm->support_ic_type, _bit)
|
|
#else
|
|
#define ODM_REG(_name, _pdm_odm) _cat(_name, _pdm_odm->support_ic_type, _reg)
|
|
#define ODM_BIT(_name, _pdm_odm) _cat(_name, _pdm_odm->support_ic_type, _bit)
|
|
#endif
|
|
|
|
/*
|
|
* =========== Extern Variable ??? It should be forbidden.
|
|
* */
|
|
|
|
|
|
/*
|
|
* =========== EXtern Function Prototype
|
|
* */
|
|
|
|
|
|
u8
|
|
odm_read_1byte(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr
|
|
);
|
|
|
|
u16
|
|
odm_read_2byte(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr
|
|
);
|
|
|
|
u32
|
|
odm_read_4byte(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr
|
|
);
|
|
|
|
void
|
|
odm_write_1byte(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr,
|
|
u8 data
|
|
);
|
|
|
|
void
|
|
odm_write_2byte(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr,
|
|
u16 data
|
|
);
|
|
|
|
void
|
|
odm_write_4byte(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr,
|
|
u32 data
|
|
);
|
|
|
|
void
|
|
odm_set_mac_reg(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr,
|
|
u32 bit_mask,
|
|
u32 data
|
|
);
|
|
|
|
u32
|
|
odm_get_mac_reg(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr,
|
|
u32 bit_mask
|
|
);
|
|
|
|
void
|
|
odm_set_bb_reg(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr,
|
|
u32 bit_mask,
|
|
u32 data
|
|
);
|
|
|
|
u32
|
|
odm_get_bb_reg(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 reg_addr,
|
|
u32 bit_mask
|
|
);
|
|
|
|
void
|
|
odm_set_rf_reg(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 e_rf_path,
|
|
u32 reg_addr,
|
|
u32 bit_mask,
|
|
u32 data
|
|
);
|
|
|
|
u32
|
|
odm_get_rf_reg(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 e_rf_path,
|
|
u32 reg_addr,
|
|
u32 bit_mask
|
|
);
|
|
|
|
|
|
/*
|
|
* Memory Relative Function.
|
|
* */
|
|
void
|
|
odm_allocate_memory(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
void **p_ptr,
|
|
u32 length
|
|
);
|
|
void
|
|
odm_free_memory(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
void *p_ptr,
|
|
u32 length
|
|
);
|
|
|
|
void
|
|
odm_move_memory(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
void *p_dest,
|
|
void *p_src,
|
|
u32 length
|
|
);
|
|
|
|
s32 odm_compare_memory(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
void *p_buf1,
|
|
void *p_buf2,
|
|
u32 length
|
|
);
|
|
|
|
void odm_memory_set(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
void *pbuf,
|
|
s8 value,
|
|
u32 length
|
|
);
|
|
|
|
/*
|
|
* ODM MISC-spin lock relative API.
|
|
* */
|
|
void
|
|
odm_acquire_spin_lock(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
enum rt_spinlock_type type
|
|
);
|
|
|
|
void
|
|
odm_release_spin_lock(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
enum rt_spinlock_type type
|
|
);
|
|
|
|
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
|
/*
|
|
* ODM MISC-workitem relative API.
|
|
* */
|
|
void
|
|
odm_initialize_work_item(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
PRT_WORK_ITEM p_rt_work_item,
|
|
RT_WORKITEM_CALL_BACK rt_work_item_callback,
|
|
void *p_context,
|
|
const char *sz_id
|
|
);
|
|
|
|
void
|
|
odm_start_work_item(
|
|
PRT_WORK_ITEM p_rt_work_item
|
|
);
|
|
|
|
void
|
|
odm_stop_work_item(
|
|
PRT_WORK_ITEM p_rt_work_item
|
|
);
|
|
|
|
void
|
|
odm_free_work_item(
|
|
PRT_WORK_ITEM p_rt_work_item
|
|
);
|
|
|
|
void
|
|
odm_schedule_work_item(
|
|
PRT_WORK_ITEM p_rt_work_item
|
|
);
|
|
|
|
boolean
|
|
odm_is_work_item_scheduled(
|
|
PRT_WORK_ITEM p_rt_work_item
|
|
);
|
|
#endif
|
|
|
|
/*
|
|
* ODM Timer relative API.
|
|
* */
|
|
void
|
|
ODM_delay_ms(u32 ms);
|
|
|
|
void
|
|
ODM_delay_us(u32 us);
|
|
|
|
void
|
|
ODM_sleep_ms(u32 ms);
|
|
|
|
void
|
|
ODM_sleep_us(u32 us);
|
|
|
|
void
|
|
odm_set_timer(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
#if defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
struct legacy_timer_emu *p_timer,
|
|
#else
|
|
struct timer_list *p_timer,
|
|
#endif //defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
u32 ms_delay
|
|
);
|
|
|
|
void
|
|
odm_initialize_timer(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
#if defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
struct legacy_timer_emu *p_timer,
|
|
#else
|
|
struct timer_list *p_timer,
|
|
#endif //defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
void *call_back_func,
|
|
void *p_context,
|
|
const char *sz_id
|
|
);
|
|
|
|
void
|
|
odm_cancel_timer(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
#if defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
struct legacy_timer_emu *p_timer
|
|
#else
|
|
struct timer_list *p_timer
|
|
#endif //defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
);
|
|
|
|
void
|
|
odm_release_timer(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
#if defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
struct legacy_timer_emu *p_timer
|
|
#else
|
|
struct timer_list *p_timer
|
|
#endif //defined (LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
|
);
|
|
|
|
/*ODM FW relative API.*/
|
|
|
|
|
|
enum hal_status
|
|
phydm_set_reg_by_fw(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
enum phydm_halmac_param config_type,
|
|
u32 offset,
|
|
u32 data,
|
|
u32 mask,
|
|
enum rf_path e_rf_path,
|
|
u32 delay_time
|
|
);
|
|
|
|
void
|
|
odm_fill_h2c_cmd(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 element_id,
|
|
u32 cmd_len,
|
|
u8 *p_cmd_buffer
|
|
);
|
|
|
|
u8
|
|
phydm_c2H_content_parsing(
|
|
void *p_dm_void,
|
|
u8 c2h_cmd_id,
|
|
u8 c2h_cmd_len,
|
|
u8 *tmp_buf
|
|
);
|
|
|
|
u64
|
|
odm_get_current_time(
|
|
struct PHY_DM_STRUCT *p_dm
|
|
);
|
|
u64
|
|
odm_get_progressing_time(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u64 start_time
|
|
);
|
|
|
|
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) && !defined(DM_ODM_CE_MAC80211)
|
|
|
|
void
|
|
phydm_set_hw_reg_handler_interface (
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 reg_Name,
|
|
u8 *val
|
|
);
|
|
|
|
void
|
|
phydm_get_hal_def_var_handler_interface (
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
enum _HAL_DEF_VARIABLE e_variable,
|
|
void *p_value
|
|
);
|
|
|
|
#endif
|
|
|
|
void
|
|
odm_set_tx_power_index_by_rate_section (
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
enum rf_path path,
|
|
u8 Channel,
|
|
u8 RateSection
|
|
);
|
|
|
|
u8
|
|
odm_get_tx_power_index (
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
enum rf_path path,
|
|
u8 tx_rate,
|
|
u8 band_width,
|
|
u8 Channel
|
|
);
|
|
|
|
u8
|
|
odm_efuse_one_byte_read(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u16 addr,
|
|
u8 *data,
|
|
boolean b_pseu_do_test
|
|
);
|
|
|
|
void
|
|
odm_efuse_logical_map_read(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 type,
|
|
u16 offset,
|
|
u32 *data
|
|
);
|
|
|
|
enum hal_status
|
|
odm_iq_calibrate_by_fw(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 clear,
|
|
u8 segment
|
|
);
|
|
|
|
void
|
|
odm_cmn_info_ptr_array_hook(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
enum odm_cmninfo_e cmn_info,
|
|
u16 index,
|
|
void *p_value
|
|
);
|
|
|
|
void
|
|
phydm_cmn_sta_info_hook(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 index,
|
|
struct cmn_sta_info *pcmn_sta_info
|
|
);
|
|
|
|
void
|
|
phydm_add_interrupt_mask_handler(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u8 interrupt_type
|
|
);
|
|
|
|
void
|
|
phydm_enable_rx_related_interrupt_handler(
|
|
struct PHY_DM_STRUCT *p_dm
|
|
);
|
|
|
|
boolean
|
|
phydm_get_txbf_en(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u16 mac_id,
|
|
u8 i
|
|
);
|
|
|
|
void
|
|
phydm_iqk_wait(
|
|
struct PHY_DM_STRUCT *p_dm,
|
|
u32 timeout
|
|
);
|
|
#endif /* __ODM_INTERFACE_H__ */
|
|
|