• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: Header file of  RF resource management interfaces.
15  */
16 
17 #ifndef FE_RF_DEV_ROM_H
18 #define FE_RF_DEV_ROM_H
19 #include "fe_extern_if_device.h"
20 #include "frw_msg_rom.h"
21 #include "dmac_ext_if_rom.h"
22 #ifdef __cplusplus
23 #if __cplusplus
24 extern "C" {
25 #endif
26 #endif
27 
28 typedef osal_u8 hal_rf_power_work_mode_uint8;
29 
30 typedef struct hh503_cali_param_tag cali_param_stru;
31 
32 /* hal rf device 结构体 */
33 typedef struct {
34     osal_u8 rf_id;             /* rf device 编号 */
35     osal_u8 pll_id;            /* 使用的PLL ID */
36     osal_s16 tx_power_dc;      /* 当前通道下TX PWR的DC值,20M/40M/80M实测相差较小,公用使用一个 */
37     hal_rf_chn_param chn_para; /* 工作信道参数 */
38     osal_u32 rf_reg_base;       /* rf寄存器基地址 */
39     osal_u32 rf_pll_reg_base;   /* rf PLL寄存器基地址 */
40     osal_u32 rf_ctl_reg_offset; /* rf ctl寄存器偏移地址 */
41     osal_u16 aus_base_txpwr_delt_value[WLAN_BAND_BUTT];
42     osal_void *owner;                          /* 指向当前占用rf dev的hal device */
43     cali_param_stru *cali_data;                /* 校准数据指针 */
44     oal_bool_enum_uint8 is_calibrated;         /* rf是否已经校准 */
45     hal_rf_power_work_mode_uint8 rf_work_mode; /* rf work状态的工作模式 */
46     osal_u8 rf_power_state;
47     osal_u8 cur_cali_upc;
48     osal_u8 base_power[WLAN_BAND_BUTT]; /* 基准最大发射功率 */
49     osal_u8 upc_idx2code[HAL_POW_UPC_LUT_NUM];
50     osal_s16 curr_temperature; /* 保存当前温度 */
51     osal_s16 upc_amend;
52     oal_bool_enum_uint8 upc_code_tobe_updated; /* 是否需要更新upc_code的lut表 */
53     osal_char dp_2g11b;
54     osal_char dp_2gofdm20;
55     osal_char dp_2gofdm40;
56     hal_pwr_fit_para_stru *pwr_fit_para_2g;
57     osal_u8 cur_rf_fsm_state;                               /* 当前rf状态机状态  */
58     hal_dyn_cali_adj_type_enum_uint8 cali_pdet_adjust_flag; /* 动态校准调整状态标志 */
59     osal_s16 delt_dbb_scale_dyn_val;
60 #ifdef _PRE_WLAN_ONLINE_DPD
61     osal_u32 *dpd_system;
62 #endif
63     uintptr_t *_rom; /* ROM化后资源扩展指针 */
64 } hal_rf_dev;
65 
66 /* rf 资源管理结构体 */
67 typedef struct {
68     hal_rf_dev *hal_rf_res[WLAN_RF_CHANNEL_NUMS]; /* 指向rf dev数组 */
69     osal_u32 free_bitmap;                         /* 标记空闲的rf dev */
70     osal_u8 master_rf_id;
71     osal_u8 rf_num;                        /* rf dev的总数 */
72     oal_bool_enum_uint8 comm_rf_ldo_state; /* rf公用的ldo是否打开 打开:true 关闭:false */
73     oal_bool_enum_uint8 is_mimo;
74     osal_u8 pll0_lock_state;
75     osal_u8 pll1_lock_state;
76     osal_u8 pll_use_cnt[WLAN_RF_PLL_NUMS]; /* RF对应的PLL的使用计数,对应枚举hal_rf_pll_user_enum_uint8 */
77     osal_u8 rsv;
78     uintptr_t *_rom; /* ROM化后资源扩展指针 */
79 } hal_rf_res_manager;
80 
81 hal_rf_res_manager* hal_rf_get_res(osal_void);
82 
83 typedef osal_void (*hal_rf_dev_ldo_ops_ptr)(osal_u8 rf_id);
84 
85 /* rf dev work状态的工作模式 */
86 typedef enum {
87     HAL_RF_WORK_MODE_RX_ONLY, /* 只开接收 */
88     HAL_RF_WORK_MODE_TXRX,    /* 收发全开 */
89 
90     HAL_RF_WORK_MODE_BUTT
91 } hal_rf_work_mode_enum;
92 
93 typedef struct {
94     hal_rf_dev_ldo_ops_ptr  poweron;
95     hal_rf_dev_ldo_ops_ptr  poweroff;
96     hal_rf_dev_ldo_ops_ptr  tx;
97     hal_rf_dev_ldo_ops_ptr  dis_tx;
98 } hal_rf_dev_ops;
99 
100 hal_rf_dev_ops* hal_rf_get_dev_ops(osal_void);
101 
102 /* PLL使用者标识枚举 */
103 typedef enum {
104     HAL_RF_PLL_USER_NONE    = 0,
105     HAL_RF_PLL_USER_C0      = 1,
106     HAL_RF_PLL_USER_C1      = 2,
107     HAL_RF_PLL_USER_MIMO    = 3,
108 
109     HAL_RF_PLL_USER_BUTT
110 } hal_rf_pll_user_enum;
111 typedef osal_u8 hal_rf_pll_user_enum_uint8;
112 
113 typedef enum {
114     HAL_RF_ALWAYS_POWER_ON,
115     HAL_RF_SWITCH_ALL_LDO,
116     HAL_RF_SWITCH_PA_PPA,
117 
118     HAL_RF_OPS_CFG_BUTT
119 } hal_rf_ops_cfg_enum;
120 typedef osal_u8 hal_rf_ops_cfg_uint8;
121 
122 /* 设置是否同时打开两个rf的电源 */
rf_res_set_is_mimo(osal_u8 rf_chain)123 static inline osal_void rf_res_set_is_mimo(osal_u8 rf_chain)
124 {
125     unref_param(rf_chain);
126     hal_rf_get_res()->is_mimo = OSAL_FALSE;
127 }
128 
129 
130 osal_u32 hal_rf_res_init(osal_void);
131 osal_void hal_rf_res_free(const hal_rf_dev *rf_dev);
132 
133 osal_void hal_rf_res_alloc_by_id(hal_to_dmac_device_stru *device, osal_u8 rf_id, osal_u8 pll_id);
134 
135 osal_void fe_rf_dev_enable_tx(osal_u8 rf_id);
136 
137 osal_u8 fe_rf_fsm_get_state(osal_u8 rf_id);
138 
139 osal_void hal_rf_fsm_set_state(hal_rf_dev *rf_dev, osal_u8 state);
140 osal_void hal_rf_fsm_set_state_byidx(osal_u8 rf_dev_idx, osal_u8 state);
141 osal_void hal_rf_fsm_work_entry(osal_u8 rf_id);
142 
143 osal_void fe_rf_set_rf_channel(const hal_rf_chn_param *chn_para);
144 osal_void hal_rf_dev_disable_tx(osal_u8 rf_id);
145 osal_void hal_rf_dev_poweron(osal_u8 rf_id);
146 osal_void hal_rf_dev_poweroff(osal_u8 rf_id);
147 
148 osal_void fe_rf_dev_sleep(osal_u8 rf_id);
149 
150 osal_void fe_rf_proc_rf_awake(osal_void);
151 osal_void fe_rf_enable_rf_tx(osal_void);
152 
153 osal_void fe_rf_proc_rf_sleep(osal_void);
154 
155 osal_void fe_rf_disable_rf_tx(osal_void);
156 
157 osal_u8 hal_get_rf_switch_cfg(osal_void);
158 osal_void hal_set_rf_switch_cfg(osal_u8 switch_cfg);
159 hal_rf_dev* fe_get_rf_dev(osal_u8 rf_id);
160 
161 osal_u32 fe_initialize_rf_dev(void);
162 osal_u32 fe_reset_rf_dev(const hal_to_dmac_device_stru *hal_device);
163 osal_s32 fe_rf_proc_rf_sleep_msg(dmac_vap_stru *dmac_vap, frw_msg *msg);
164 osal_s32 hal_dev_rf_sleep_poweroff(dmac_vap_stru *dmac_vap, frw_msg *msg);
165 osal_s32 hal_dev_set_rf_option(dmac_vap_stru *dmac_vap, frw_msg *msg);
166 #ifdef __cplusplus
167 #if __cplusplus
168 }
169 #endif
170 #endif
171 
172 #endif