• 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: HAL Layer Specifications.
15  */
16 
17 #ifndef __HAL_COMMON_OPS_DEVICE_ROM_H__
18 #define __HAL_COMMON_OPS_DEVICE_ROM_H__
19 
20 /*****************************************************************************
21     1 头文件包含
22 *****************************************************************************/
23 #include "hal_commom_ops_type_rom.h"
24 #include "wlan_spec_type_rom.h"
25 #include "hal_mac_reg.h"
26 #include "oal_types_device_rom.h"
27 #include "wlan_types.h"
28 #include "wlan_types_base_rom.h"
29 #include "soc_osal.h"
30 
31 #ifdef __cplusplus
32 #if __cplusplus
33 extern "C" {
34 #endif
35 #endif
36 
37 /*****************************************************************************
38     2 宏定义
39 *****************************************************************************/
40 typedef enum {
41     HAL_VAP_VAP0       = 0,              /* STA固定使用hal vap0 */
42     HAL_VAP_VAP1       = 1,              /* P2P固定使用hal vap1 */
43     HAL_VAP_VAP2       = 2,              /* AP固定使用hal vap2 */
44     HAL_MAX_VAP_NUM
45 } hal_vap_id_enum;
46 typedef osal_u8 hal_vap_id_enum_uint8;
47 #ifdef _PRE_WLAN_DFT_STAT
48 #define OAM_PHY_STAT_NODE_ENABLED_MAX_NUM 4
49 #endif
50 
51 #define HAL_POW_11B_RATE_NUM                4               /* 11b速率数目 */
52 #define HAL_POW_11G_RATE_NUM                8               /* 11g速率数目 */
53 #define HAL_POW_11A_RATE_NUM                8               /* 11a速率数目 */
54 
55 #ifdef _PRE_WLAN_FEATURE_11AC_20M_MCS9
56 #ifdef _PRE_WLAN_FEATURE_1024QAM
57 #define HAL_POW_11AC_20M_NUM                12              /* 11n_11ac_2g速率数目 */
58 #else
59 #define HAL_POW_11AC_20M_NUM                10              /* 11n_11ac_2g速率数目 */
60 #endif
61 #else
62 #define HAL_POW_11AC_20M_NUM                9               /* 11n_11ac_2g速率数目 */
63 #endif
64 
65 #ifdef _PRE_WLAN_FEATURE_1024QAM
66 #define HAL_POW_11AC_40M_NUM                13              /* 11n_11ac_2g速率数目 */
67 #define HAL_POW_11AC_80M_NUM                12              /* 11n_11ac_2g速率数目 */
68 #else
69 #define HAL_POW_11AC_40M_NUM                11              /* 11n_11ac_2g速率数目 */
70 #define HAL_POW_11AC_80M_NUM                10              /* 11n_11ac_2g速率数目 */
71 #endif
72 
73 #define HAL_POW_11AX_20M_NUM                12               /* 11ax 速率数目 */
74 #define HAL_POW_11AX_40M_NUM                12               /* 11ax 速率数目 */
75 #define HAL_POW_11AX_80M_NUM                12               /* 11ax 速率数目 */
76 
77 #define HAL_POW_11AX_ER_SU_106_NUM          1                /* 11ax ER_SU_106 tone速率数目 */
78 #define HAL_POW_11AX_ER_SU_242_NUM          3                /* 11ax ER_SU_242 tone速率数目 */
79 
80 /* rate-tpccode table中速率个数 */
81 #define HAL_POW_RATE_POW_CODE_TABLE_LEN     (HAL_POW_11B_RATE_NUM + HAL_POW_11G_RATE_NUM + HAL_POW_11AC_20M_NUM + \
82     HAL_POW_11AC_40M_NUM + HAL_POW_11AC_80M_NUM + HAL_POW_11AX_20M_NUM + HAL_POW_11AX_40M_NUM + \
83     HAL_POW_11AX_80M_NUM + HAL_POW_11AX_ER_SU_106_NUM + HAL_POW_11AX_ER_SU_242_NUM)
84 
85 /* rate-tpccode table中速率个数 */
86 #define HAL_POW_RATE_POW_CODE_TABLE_2G_LEN  (HAL_POW_11B_RATE_NUM + HAL_POW_11G_RATE_NUM + HAL_POW_11AC_20M_NUM + \
87     HAL_POW_11AC_40M_NUM + HAL_POW_11AC_80M_NUM + HAL_POW_11AX_20M_NUM + HAL_POW_11AX_40M_NUM + \
88     HAL_POW_11AX_80M_NUM  + HAL_POW_11AX_ER_SU_106_NUM + HAL_POW_11AX_ER_SU_242_NUM)
89 
90 /* 为了保证idx从0开始,个数中包含11B速率个数 */
91 /* rate-tpccode table中速率个数 */
92 #define HAL_POW_RATE_POW_CODE_TABLE_5G_LEN  (HAL_POW_11B_RATE_NUM + HAL_POW_11G_RATE_NUM + HAL_POW_11AC_20M_NUM + \
93     HAL_POW_11AC_40M_NUM + HAL_POW_11AC_80M_NUM + HAL_POW_11AX_20M_NUM + HAL_POW_11AX_40M_NUM + \
94     HAL_POW_11AX_80M_NUM + HAL_POW_11AX_ER_SU_106_NUM + HAL_POW_11AX_ER_SU_242_NUM)
95 
96 #define HAL_POW_CUSTOM_24G_11B_RATE_NUM            2    /* 定制化11b速率数目 */
97 #define HAL_POW_CUSTOM_11G_11A_RATE_NUM            5    /* 定制化11g/11a速率数目 */
98 #define HAL_POW_CUSTOM_HT20_VHT20_RATE_NUM         5    /* 定制化HT20_VHT20速率数目 */
99 #define HAL_POW_CUSTOM_24G_HT40_VHT40_RATE_NUM     6
100 #define HAL_POW_CUSTOM_5G_HT40_VHT40_RATE_NUM      6
101 #define HAL_POW_CUSTOM_5G_VHT80_RATE_NUM           5
102 /* 定制化全部速率 */
103 #define HAL_POW_CUSTOM_MCS9_10_11_RATE_NUM         2
104 #define HAL_POW_CUSTOM_MCS10_11_RATE_NUM           1
105 
106 #define HAL_POW_CUSTOM_24G_HE20_RATE_NUM           3
107 
108 #define HAL_POW_CUSTOM_HE_ER_SU_RATE_NUM           4
109 
110 #define HAL_POW_CUSTOM_HT20_VHT20_DPD_RATE_NUM     5    /* 定制化DPD速率数目 */
111 #define HAL_POW_CUSTOM_HT40_VHT40_DPD_RATE_NUM     5
112 
113 #define HH503_DYN_CALI_5G_SECTION                  2            /* 5G TX Power分 high & low power校准 */
114 
115 /* 定制化相关宏 */
116 /* NVRAM中存储的各协议速率最大发射功率参数的个数 From:24G_11b_1M To:5G_VHT80_MCS7 */
117 #define NUM_OF_NV_NORMAL_MAX_TXPOWER   (HAL_POW_CUSTOM_24G_11B_RATE_NUM + \
118                                         HAL_POW_CUSTOM_11G_11A_RATE_NUM + HAL_POW_CUSTOM_HT20_VHT20_RATE_NUM + \
119                                         HAL_POW_CUSTOM_24G_HT40_VHT40_RATE_NUM + HAL_POW_CUSTOM_11G_11A_RATE_NUM + \
120                                         HAL_POW_CUSTOM_HT20_VHT20_RATE_NUM + HAL_POW_CUSTOM_5G_HT40_VHT40_RATE_NUM + \
121                                         HAL_POW_CUSTOM_5G_VHT80_RATE_NUM)
122 
123 #define NUM_OF_NV_MAX_TXPOWER          (NUM_OF_NV_NORMAL_MAX_TXPOWER + HAL_POW_CUSTOM_MCS9_10_11_RATE_NUM  + \
124                                         HAL_POW_CUSTOM_MCS10_11_RATE_NUM + HAL_POW_CUSTOM_MCS9_10_11_RATE_NUM + \
125                                         HAL_POW_CUSTOM_MCS10_11_RATE_NUM + HAL_POW_CUSTOM_MCS10_11_RATE_NUM + \
126                                         HAL_POW_CUSTOM_24G_HE20_RATE_NUM * 5 + HAL_POW_CUSTOM_HE_ER_SU_RATE_NUM * 2)
127 
128 #define NUM_OF_NV_DPD_MAX_TXPOWER      (HAL_POW_CUSTOM_HT20_VHT20_DPD_RATE_NUM + HAL_POW_CUSTOM_HT40_VHT40_DPD_RATE_NUM)
129 #define NUM_OF_NV_24G_11G_6M_POWER_IDX     (2)
130 #define NUM_OF_NV_24G_20M_MCS0_POWER_IDX   (7)
131 #define NUM_OF_24G_11G_6M_RATE_IDX         (4)
132 #define NUM_OF_24G_20M_MCS0_RATE_IDX       (12)
133 
134 #define HAL_CUS_NUM_FCC_2G_PRO                   3   /* 定制化2g FCC 11B+OFDM_20M+OFDM_40M */
135 #define HAL_CUS_NUM_OF_SAR_PARAMS                8   /* 定制化降SAR参数 5G_BAND1~7 2.4G */
136 #define HAL_NUM_5G_20M_SIDE_BAND                 6   /* 定制化5g边带数 */
137 #define HAL_NUM_5G_40M_SIDE_BAND                 6
138 #define HAL_NUM_5G_80M_SIDE_BAND                 5
139 
140 #define HAL_POW_PRECISION_SHIFT         10          /* TPC算法中功率的精度 */
141 #define HAL_POW_PA_LUT_NUM              4          /* 筛选使用的PA档位数目 */
142 
143 #define HAL_POW_UPC_RF_LUT_NUM          256        /* UPC在RF中的最大档位数目 */
144 
145 #define HAL_POW_UPC_LUT_NUM             2     /* 筛选使用的UPC档位数目(03 pilot upc code 修订为1bit) */
146 
147 #define HAL_POW_PA_BASE_IDX                 2           /* 基准PA Index */
148 
149 #define HAL_POW_2G_LPF_BASE_IDX             2           /* 2G基准LPF Index */
150 #define HAL_POW_2G_DAC_BASE_IDX             0           /* 2G基准DAC Index */
151 #define HAL_POW_5G_LPF_BASE_IDX             3           /* 5G基准LPF Index */
152 #define HAL_POW_5G_DAC_BASE_IDX             2           /* 5G基准DAC Index */
153 
154 #define HAL_UPC_DATA_REG_NUM                1
155 #define HAL_POW_UPC_LOW_START_IDX           0        /* UPC低档位的起始索引 */
156 #define HAL_POW_CFR_BASE_IDX                0        /* 基准cfr_index Index */
157 #define HAL_POW_DPD_TPC_BASE_IDX            0        /* 基准dpd_tpc_lv Index */
158 #define HAL_DBB_SCALING_FOR_MAX_TXPWR_BASE  204      /* 2.4g6M 基准功率差值 delt_pwr = 20*ln(256)单位0.01 db */
159 #define HAL_POW_DELTA_DBB_SCAL_BASE_IDX     HAL_DBB_SCALING_FOR_MAX_TXPWR_BASE  /* 基准delta_dbb_scaling Index */
160 
161 #define HAL_POW_2G_1MBPS_RATE_POW_IDX       0               /* 2G 1Mbps对应的功率表索引 */
162 #define HAL_POW_5G_6MBPS_RATE_POW_IDX       4               /* 5G 6Mbps对应的功率表索引 */
163 /*****************************************************************************
164   3 枚举
165 *****************************************************************************/
166 
167 /* sw preempt机制下蓝牙业务状态,a2dp|transfer  page|inquiry 或者  both */
168 typedef enum {
169     HAL_BTCOEX_PS_STATUE_ACL       = 1,   /* only a2dp|数传 BIT0 */
170     HAL_BTCOEX_PS_STATUE_PAGE_INQ  = 2,   /* only  page|inquiry BIT1 */
171     HAL_BTCOEX_PS_STATUE_PAGE_ACL  = 3,   /* both a2dp|数传 and page|inquiry BIT0|BIT1 */
172     HAL_BTCOEX_PS_STATUE_LDAC      = 4,   /* only ldac BIT2 */
173     HAL_BTCOEX_PS_STATUE_LDAC_ACL  = 5,   /* ldac and a2dp|数传 BIT2|BIT0 */
174     HAL_BTCOEX_PS_STATUE_LDAC_PAGE = 6,   /* ldac and page|inquiry BIT2|BIT1 */
175     HAL_BTCOEX_PS_STATUE_TRIPLE    = 7,   /* ldac and page|inquiry and a2dp|数传 BIT2|BIT1|BIT0 */
176 
177     HAL_BTCOEX_PS_STATUE_BUTT
178 } hal_btcoex_ps_status_enum;
179 typedef osal_u8 hal_btcoex_ps_status_enum_uint8;
180 
181 typedef enum {
182     HAL_BTCOEX_HW_POWSAVE_NOFRAME   = 0,
183     HAL_BTCOEX_HW_POWSAVE_SELFCTS   = 1,
184     HAL_BTCOEX_HW_POWSAVE_NULLDATA  = 2,
185     HAL_BTCOEX_HW_POWSAVE_QOSNULL   = 3,
186 
187     HAL_BTCOEX_HW_POWSAVE_BUTT
188 } hal_coex_hw_preempt_mode_enum;
189 typedef osal_u8 hal_coex_hw_preempt_mode_enum_uint8;
190 
191 typedef enum {
192     HAL_BTCOEX_WIFI_STATE_ON                     = 0,
193     HAL_BTCOEX_WIFI_STATE_JOINING                = 1,
194     HAL_BTCOEX_WIFI_STATE_SCAN                   = 2,
195     HAL_BTCOEX_WIFI_STATE_CONN                   = 3, /* STA/AP connect */
196     HAL_BTCOEX_WIFI_STATE_P2P_SCAN               = 4,
197     HAL_BTCOEX_WIFI_STATE_P2P_CONN               = 5,
198     HAL_BTCOEX_WIFI_STATE_PS_STOP                = 6,
199     HAL_BTCOEX_WIFI_STATE_SLEEP                  = 7,
200 
201     HAL_BTCOEX_WIFI_STATE_WORK_MODE              = 8, /* bit0-3 STA/AP/GO/GC */
202     HAL_BTCOEX_WIFI_STATE_DIFF_CHANNEL           = 9,
203     HAL_BTCOEX_WIFI_STATE_PROTOCOL_2G11BGN       = 10,
204     HAL_BTCOEX_WIFI_STATE_PROTOCOL_2G11AX        = 11,
205     HAL_BTCOEX_WIFI_STATE_CHAN_BITMAP            = 12,
206 
207     /* 92 only */
208     HAL_BTCOEX_WIFI_STATE_BAND                   = 13, /* 0-2G,1=5G */
209     HAL_BTCOEX_WIFI_STATE_CHAN_NUM               = 14,
210     HAL_BTCOEX_WIFI_STATE_BAND_WIDTH             = 15,
211     HAL_BTCOEX_WIFI_STATE_AP_MODE                = 16,
212     HAL_BTCOEX_WIFI_STATE_AUTH_MODE              = 17,
213     HAL_BTCOEX_WIFI_STATE_C1_SISO                = 18,
214 
215     /* 73 only */
216     HAL_BTCOEX_WIFI_BUSY_STATUS                  = 19,
217 
218     HAL_BTCOEX_STATE_BUTT
219 } hal_btcoex_wifi_state_enum;
220 typedef osal_u8 hal_btcoex_wifi_state_id_enum_uint8;
221 
222 typedef enum {
223     HAL_BTCOEX_PS_OFF,
224     HAL_BTCOEX_PS_ON,
225     HAL_BTCOEX_PS_BUTT
226 } hal_btcoex_ps_enum;
227 typedef osal_u8 hal_btcoex_ps_enum_uint8;
228 
229 #ifdef _PRE_WLAN_DFT_STAT
230 /* phy统计节点设置,保存节点idx的结构 */
231 typedef struct {
232     osal_u8 node_idx[OAM_PHY_STAT_NODE_ENABLED_MAX_NUM];
233 } oam_stats_phy_node_idx_stru;
234 #endif
235 /* HAL_DEVICE_WORK_STATE子状态 */
236 typedef enum {
237     HAL_DEVICE_WORK_SUB_STATE_ACTIVE         = 0,              /* active子状态 */
238     HAL_DEVICE_WORK_SUB_STATE_AWAKE          = 1,              /* awake子状态 */
239     HAL_DEVICE_WORK_SUB_STATE_DOZE           = 2,              /* doze子状态 */
240     HAL_DEVICE_WORK_SUB_STATE_INIT           = 3,              /* init子状态 */
241     HAL_DEVICE_WORK_SUB_STATE_BUTT
242 } hal_device_work_sub_state_info;
243 typedef osal_u8 hal_work_sub_state_uint8;
244 #define HAL_WORK_SUB_STATE_NUM      (HAL_DEVICE_WORK_SUB_STATE_INIT - HAL_DEVICE_WORK_SUB_STATE_ACTIVE)
245 
246 typedef enum {
247     HAL_PHY_MAX_BW_SECT_MAX_BANDWIDTH = 0,
248     HAL_PHY_MAX_BW_SECT_MAX_NSS       = 1,
249     HAL_PHY_MAX_BW_SECT_SINGLE_CH_SEL = 2,
250 
251     HAL_PHY_MAX_BW_SECT_BUTT
252 } hal_phy_max_bw_sect_enum;
253 typedef osal_u8 hal_phy_max_bw_sect_enmu_uint8;
254 
255 /*****************************************************************************
256     3.1 队列相关枚举定义
257 *****************************************************************************/
258 
259 #define hal_ac_to_q_num(_ac) ( \
260                               ((_ac) == WLAN_WME_AC_VO) ? HAL_TX_QUEUE_VO : \
261                               ((_ac) == WLAN_WME_AC_VI) ? HAL_TX_QUEUE_VI : \
262                               ((_ac) == WLAN_WME_AC_BK) ? HAL_TX_QUEUE_BK : \
263                               ((_ac) == WLAN_WME_AC_BE) ? HAL_TX_QUEUE_BE : \
264                               ((_ac) == WLAN_WME_AC_MGMT) ? HAL_TX_QUEUE_HI : \
265                               ((_ac) == WLAN_WME_AC_PSM) ? HAL_TX_QUEUE_MC : \
266                               HAL_TX_QUEUE_BK)
267 
268 #define hal_q_num_to_ac(_q) ( \
269                              ((_q) == HAL_TX_QUEUE_VO) ? WLAN_WME_AC_VO : \
270                              ((_q) == HAL_TX_QUEUE_VI) ? WLAN_WME_AC_VI : \
271                              ((_q) == HAL_TX_QUEUE_BK) ? WLAN_WME_AC_BK : \
272                              ((_q) == HAL_TX_QUEUE_BE) ? WLAN_WME_AC_BE : \
273                              ((_q) == HAL_TX_QUEUE_HI) ? WLAN_WME_AC_MGMT : \
274                              ((_q) == HAL_TX_QUEUE_MC) ? WLAN_WME_AC_PSM : \
275                              WLAN_WME_AC_BE)
276 
277 /*****************************************************************************
278   3.3 描述符相关枚举定义
279 *****************************************************************************/
280 typedef enum {
281     HAL_TX_RATE_RANK_0 = 0,
282     HAL_TX_RATE_RANK_1,
283     HAL_TX_RATE_RANK_2,
284     HAL_TX_RATE_RANK_3,
285 
286     HAL_TX_RATE_RANK_BUTT
287 } hal_tx_rate_rank_enum;
288 typedef osal_u8 hal_tx_rate_rank_enum_uint8;
289 
290 typedef enum {
291     HAL_RX_NEW                    = 0x0,
292     HAL_RX_SUCCESS                = 0x1,
293     HAL_RX_DUP_DETECTED           = 0x2,
294     HAL_RX_FCS_ERROR              = 0x3,
295     HAL_RX_KEY_SEARCH_FAILURE     = 0x4,
296     HAL_RX_CCMP_MIC_FAILURE       = 0x5,
297     HAL_RX_ICV_FAILURE            = 0x6,
298     HAL_RX_TKIP_REPLAY_FAILURE    = 0x7,
299     HAL_RX_CCMP_REPLAY_FAILURE    = 0x8,
300     HAL_RX_TKIP_MIC_FAILURE       = 0x9,
301     HAL_RX_BIP_MIC_FAILURE        = 0xA,
302     HAL_RX_BIP_REPLAY_FAILURE     = 0xB,
303     HAL_RX_MUTI_KEY_SEARCH_FAILURE = 0xC,     /* 组播广播 */
304     HAL_RX_WAPI_MIC_FAILURE       = 0xD
305 } hal_rx_status_enum;
306 typedef osal_u8 hal_rx_status_enum_uint8;
307 
308 typedef enum {
309     HAL_TX_INVALID = 0,     /* 无效 */
310     HAL_TX_SUCC,            /* 成功 */
311     HAL_TX_FAIL,            /* 发送失败(超过重传限制:接收响应帧超时) */
312     HAL_TX_TIMEOUT,         /* lifetime超时(没法送出去) */
313     HAL_TX_RTS_FAIL,        /* RTS 发送失败(超出重传限制:接收cts超时) */
314     HAL_TX_NOT_COMPRASS_BA, /* 收到的BA是非压缩块确认 */
315     HAL_TX_TID_MISMATCH,    /* 收到的BA中TID与发送时填写在描述符中的TID不一致 */
316     HAL_TX_KEY_SEARCH_FAIL, /* Key search failed */
317     HAL_TX_AMPDU_MISMATCH,  /* 描述符异常 */
318     HAL_TX_PENDING,         /* 02:没有中断均为pending;03:发送过程中为pending */
319     HAL_TX_FAIL_RESV,       /* resv */
320     HAL_TX_FAIL_BW_TOO_BIG, /* 带宽超过PHY的最大工作带宽或流数超过最大天线数, 软件回收该帧 */
321     HAL_TX_FAIL_ABORT,                  /* 发送失败(因为abort) */
322     HAL_TX_FAIL_STATEMACHINE_PHY_ERROR, /* MAC发送该帧异常结束(状态机超时、phy提前结束等原因) */
323     HAL_TX_SOFT_PSM_BACK,               /* 软件节能回退 */
324     HAL_TX_AMPDU_BITMAP_MISMATCH       /* 硬件解析bitmap,当前mpdu未被确认 */
325 } hal_tx_dscr_status_enum;
326 typedef osal_u8 hal_tx_status_enum_uint8;
327 
328 /* 接收描述符队列状态 */
329 typedef enum {
330     HAL_DSCR_QUEUE_INVALID  = 0,
331     HAL_DSCR_QUEUE_VALID,
332     HAL_DSCR_QUEUE_SUSPENDED,
333     HAL_DSCR_QUEUE_BUSY,
334     HAL_DSCR_QUEUE_IDLE,
335     HAL_DSCR_QUEUE_STATUS_BUTT
336 } hal_dscr_queue_status_enum;
337 typedef osal_u8 hal_dscr_queue_status_enum_uint8;
338 
339 typedef enum {
340     HAL_POW_SET_TYPE_INIT           = 0,
341     HAL_POW_SET_TYPE_REFRESH        = 1,
342     HAL_POW_SET_TYPE_MAG_LVL_CHANGE = 2,
343     HAL_POW_SET_TYPE_CTL_LVL_CHANGE = 3,
344 
345     HAL_POW_GEN_TYPE_BUTT
346 } hal_pow_set_type_enum;
347 typedef osal_u8 hal_pow_set_type_enum_uint8;
348 
349 typedef osal_u8 hal_coex_sw_irq_type_enum_uint8;
350 
351 /*****************************************************************************
352     3.4 中断相关枚举定义
353 *****************************************************************************/
354 
355 /* 3.4.2  MAC错误中断类型 (枚举值与错误中断状态寄存器的位一一对应!) */
356 typedef enum {
357     /* 描述符参数配置异常,包括AMPDU长度配置不匹配,AMPDU中MPDU长度超长,sub msdu num错误 */
358     HAL_MAC_ERROR_PARA_CFG_ERR                  = 0,
359     HAL_MAC_ERROR_TX_VECTOR_ERR                 = 1,        /* 发送vector中参数错误 */
360     HAL_MAC_ERROR_BA_ENTRY_NOT_FOUND            = 2,        /* 未找到BA会话表项异常0 */
361     HAL_MAC_ERROR_PHY_TRLR_TIME_OUT             = 3,        /* PHY_RX_TRAILER超时 */
362     HAL_MAC_ERROR_PHY_RX_FIFO_OVERRUN           = 4,        /* PHY_RX_FIFO满写异常 */
363     HAL_MAC_ERROR_TX_DATAFLOW_BREAK             = 5,        /* 发送帧数据断流 */
364     HAL_MAC_ERROR_RX_FSM_ST_TIMEOUT             = 6,        /* RX_FSM状态机超时 */
365     HAL_MAC_ERROR_TX_FSM_ST_TIMEOUT             = 7,        /* TX_FSM状态机超时 */
366     HAL_MAC_ERROR_RX_HANDLER_ST_TIMEOUT         = 8,        /* RX_HANDLER状态机超时 */
367     HAL_MAC_ERROR_TX_HANDLER_ST_TIMEOUT         = 9,        /* TX_HANDLER状态机超时 */
368     HAL_MAC_ERROR_TX_INTR_FIFO_OVERRUN          = 10,       /* TX 中断FIFO满写 */
369     HAL_MAC_ERROR_RX_INTR_FIFO_OVERRUN          = 11,       /* RX中断 FIFO满写 */
370     HAL_MAC_ERROR_HIRX_INTR_FIFO_OVERRUN        = 12,       /* HIRX中断FIFO满写 */
371 
372     /* 接收到普通优先级帧但此时RX BUFFER指针为空 */
373     HAL_MAC_ERROR_UNEXPECTED_RX_Q_EMPTY         = 13,
374 
375     /* 接收到高优先级帧但此时HI RX BUFFER指针为空 */
376     HAL_MAC_ERROR_UNEXPECTED_HIRX_Q_EMPTY       = 14,
377     HAL_MAC_ERROR_BUS_RLEN_ERR                  = 15,       /* 总线读请求长度为0异常 */
378     HAL_MAC_ERROR_BUS_RADDR_ERR                 = 16,       /* 总线读请求地址无效异常 */
379     HAL_MAC_ERROR_BUS_WLEN_ERR                  = 17,       /* 总线写请求长度为0异常 */
380     HAL_MAC_ERROR_BUS_WADDR_ERR                 = 18,       /* 总线写请求地址无效异常 */
381     HAL_MAC_ERROR_TX_ACBK_Q_OVERRUN             = 19,       /* tx acbk队列fifo满写 */
382     HAL_MAC_ERROR_TX_ACBE_Q_OVERRUN             = 20,       /* tx acbe队列fifo满写 */
383     HAL_MAC_ERROR_TX_ACVI_Q_OVERRUN             = 21,       /* tx acvi队列fifo满写 */
384     HAL_MAC_ERROR_TX_ACVO_Q_OVERRUN             = 22,       /* tx acv0队列fifo满写 */
385     HAL_MAC_ERROR_TX_HIPRI_Q_OVERRUN            = 23,       /* tx hipri队列fifo满写 */
386     HAL_MAC_ERROR_MATRIX_CALC_TIMEOUT           = 24,       /* matrix计算超时 */
387     HAL_MAC_ERROR_CCA_TIME_OUT                  = 25,       /* cca超时 */
388     HAL_MAC_ERROR_TB_INTE_ERR                   = 26,       /* 响应TB  */
389     HAL_MAC_ERROR_BEACON_MISS                   = 27,       /* 连续发送beacon失败 */
390     HAL_MAC_ERROR_INTR_FIFO_UNEXPECTED_READ     = 28,       /* interrupt fifo空读异常 */
391     HAL_MAC_ERROR_UNEXPECTED_RX_DESC_ADDR       = 29,       /* rx desc地址错误异常 */
392 
393     /* mac没有处理完前一帧,phy又上报了一帧异常 */
394     HAL_MAC_ERROR_RX_OVERLAP_ERR                = 30,
395     HAL_MAC_ERROR_RESERVED_31                   = 31,       /* 保留位 */
396     HAL_MAC_ERROR_TX_ACBE_BACKOFF_TIMEOUT       = 32,       /* 发送BE队列退避超时 */
397     HAL_MAC_ERROR_TX_ACBK_BACKOFF_TIMEOUT       = 33,       /* 发送BK队列退避超时 */
398     HAL_MAC_ERROR_TX_ACVI_BACKOFF_TIMEOUT       = 34,       /* 发送VI队列退避超时 */
399     HAL_MAC_ERROR_TX_ACVO_BACKOFF_TIMEOUT       = 35,       /* 发送VO队列退避超时 */
400     HAL_MAC_ERROR_TX_HIPRI_BACKOFF_TIMEOUT      = 36,       /* 发送高优先级队列退避超时 */
401 
402     /* 接收普通队列的小包,但是小包队列指针为空 */
403     HAL_MAC_ERROR_RX_SMALL_Q_EMPTY              = 37,
404     HAL_MAC_ERROR_PARA_CFG_2ERR                 = 38,       /* 发送描述符中AMPDU中MPDU长度过长 */
405 
406     /* 发送描述符中11a,11b,11g发送时,mpdu配置长度超过4095 */
407     HAL_MAC_ERROR_PARA_CFG_3ERR                 = 39,
408     HAL_MAC_ERROR_EDCA_ST_TIMEOUT               = 40,       /* CH_ACC_EDCA_CTRL状态机超时 */
409 
410     /* 发送描述符中11a/b/g发送时,打开了ampdu使能 */
411     HAL_MAC_ERROR_PARA_CFG_4ERR                 = 41,
412 
413     /* TX广播帧队列fifo满写错误,最后一次写的地址丢弃 */
414     HAL_MAC_ERROR_TX_BC_Q_OVERRUN               = 42,
415 
416     /* 接收到本bss的帧,duration很大,nav保护起作用 */
417     HAL_MAC_ERROR_BSS_NAV_PORT                  = 43,
418 
419     /* 接收到其他obss的帧,duration很大,nav保护起作用 */
420     HAL_MAC_ERROR_OBSS_NAV_PORT                 = 44,
421     HAL_MAC_ERROR_BUS_RW_TIMEOUT                = 45,       /* 读写访问超时 */
422     HAL_MAC_ERROR_TX_DATA_FIFO_OVERRUN          = 46,       /* 发送通路fifo存在写溢出 */
423     HAL_MAC_ERROR_RX_DATA_FIFO_OVERRUN          = 47,       /* 接收送通路fifo存在写溢出 */
424     HAL_MAC_ERROR_TXBF_FIFO_OVERRUN             = 48,       /* TXBF通路FIFO满写异常告警 */
425     HAL_MAC_ERROR_TYPE_BUTT
426 } hal_mac_error_type_enum;
427 typedef osal_u8 hal_mac_error_type_enum_uint8;
428 
429 /*****************************************************************************
430     3.5 复位相关枚举定义
431 *****************************************************************************/
432 /****3.5.1  复位MAC子模块定义 **********************************************/
433 typedef enum {
434     HAL_RESET_MAC_ALL = 0,
435     HAL_RESET_MAC_LOGIC,
436     HAL_RESET_MAC_BUTT
437 } hal_reset_mac_submod_enum;
438 typedef osal_u8 hal_reset_mac_submod_enum_uint8;
439 
440 typedef enum {
441     HAL_PM_WORK,
442     HAL_PM_DEEPSLEEP,
443 
444     HAL_PM_MODE_BUTT
445 } hal_pm_mode_enum;
446 typedef osal_u8 hal_pm_mode_enum_uint8;
447 
448 typedef enum {
449     WLAN_PHY_RATE_1M                = 0,    /* 0000 */
450     WLAN_PHY_RATE_2M                = 1,    /* 0001 */
451     WLAN_PHY_RATE_5HALF_M           = 2,    /* 0010 */
452     WLAN_PHY_RATE_11M               = 3,    /* 0011 */
453 
454     WLAN_PHY_RATE_48M               = 8,    /* 1000 */
455     WLAN_PHY_RATE_24M               = 9,    /* 1001 */
456     WLAN_PHY_RATE_12M               = 10,   /* 1010 */
457     WLAN_PHY_RATE_6M                = 11,   /* 1011 */
458 
459     WLAN_PHY_RATE_54M               = 12,   /* 1100 */
460     WLAN_PHY_RATE_36M               = 13,   /* 1101 */
461     WLAN_PHY_RATE_18M               = 14,   /* 1110 */
462     WLAN_PHY_RATE_9M                = 15,   /* 1111 */
463 
464     WLAN_PHY_RATE_BUTT
465 } wlan_phy_rate_enum;
466 
467 typedef enum {
468     HAL_VAP_STATE_INIT               = 0,
469     HAL_VAP_STATE_CONNECT            = 1,       /* sta独有 */
470     HAL_VAP_STATE_UP                 = 2,       /* VAP UP */
471     HAL_VAP_STATE_PAUSE              = 3,       /* pause , for ap &sta */
472 
473     HAL_VAP_STATE_BUTT
474 } hal_vap_state_enum;
475 typedef osal_u8  hal_vap_state_enum_uint8;
476 
477 /*****************************************************************************
478     3.6 加密相关枚举定义
479 *****************************************************************************/
480 /****3.6.2  芯片加密算法类型对应芯片中的值 **********************************/
481 typedef enum {
482     HAL_WEP40                      = 0,
483     HAL_TKIP                       = 1,
484     HAL_CCMP                       = 2,
485     HAL_NO_ENCRYP                  = 3,
486     HAL_WEP104                     = 4,
487     HAL_BIP                        = 5,
488     HAL_GCMP                       = 6,
489     HAL_GCMP_256                   = 7,
490     HAL_CCMP_256                   = 8,
491     HAL_BIP_256                    = 9,
492     HAL_CIPER_PROTOCOL_TYPE_BUTT
493 } hal_cipher_protocol_type_enum;
494 typedef osal_u8 hal_cipher_protocol_type_enum_uint8;
495 
496 /****3.6.3  芯片填写加密寄存器CE_LUT_CONFIG AP/STA **************************/
497 typedef enum {
498     HAL_AUTH_KEY = 0,      /* 表明该设备为认证者 */
499     HAL_SUPP_KEY = 1,      /* 表明该设备为申请者 */
500 
501     HAL_KEY_ORIGIN_BUTT,
502 } hal_key_origin_enum;
503 typedef osal_u8 hal_key_origin_enum_uint8;
504 
505 typedef enum {
506     HAL_DYN_CALI_PDET_ADJUST_INIT = 0,
507     HAL_DYN_CALI_PDET_ADJUST_ASCEND,       /* while real_pdet < expect_pdet */
508     HAL_DYN_CALI_PDET_ADJUST_DECLINE,      /* while real_pdet > expect_pdet */
509     HAL_DYN_CALI_PDET_ADJUST_VARIED,
510     HAL_DYN_CALI_PDET_ADJUST_BUTT,
511 } hal_dyn_cali_adj_type_enum;
512 typedef osal_u8 hal_dyn_cali_adj_type_enum_uint8;
513 
514 /*****************************************************************************
515   STRUCT定义
516 *****************************************************************************/
517 typedef struct {
518     osal_u32 bss_color_bitmap_h;
519     osal_u32 bss_color_bitmap_l;
520     osal_u32 tsf_l;
521     osal_u32 tsf_h;
522 } mac_color_area_stru;
523 
524 typedef struct {
525     osal_u8 mac_rate; /* MAC对应速率 */
526     osal_u8 phy_rate; /* PHY对应速率 */
527     osal_u8 mbps;     /* 速率 */
528     osal_u8 auc_resv[1];
529 } mac_data_rate_stru;
530 
531 /* NVRAM 参数结构体 FCC认证 非FCC */
532 typedef struct {
533     osal_u8       max_txpower;     /* 最大发送功率 */
534 } hal_cfg_custom_nvram_params_stru;
535 
536 typedef struct hal_pwr_fit_para_stru {
537     osal_s16 pow_par2;   /* 二次项系数 */
538     osal_s16 pow_par1;   /* 一次 */
539     osal_s16 pow_par0;   /* 常数项 */
540 } hal_pwr_fit_para_stru;
541 
542 /* FCC边带功率定制项 */
543 typedef struct {
544     osal_u8 fcc_txpwr_limit_params_26ru_5g[HAL_NUM_5G_20M_SIDE_BAND];
545     osal_u8 fcc_txpwr_limit_params_52ru_5g[HAL_NUM_5G_20M_SIDE_BAND];
546     osal_u8 fcc_txpwr_limit_params_106ru_5g[HAL_NUM_5G_20M_SIDE_BAND];
547     osal_u8 fcc_txpwr_limit_params_20m_5g[HAL_NUM_5G_20M_SIDE_BAND];
548     osal_u8 fcc_txpwr_limit_params_40m_5g[HAL_NUM_5G_40M_SIDE_BAND];
549     osal_u8 fcc_txpwr_limit_params_80m_5g[HAL_NUM_5G_80M_SIDE_BAND];
550     osal_u8 fcc_txpwr_limit_params_2g[WLAN_2G_SUB_BAND_NUM + WLAN_2G_SUB_BAND_NUM][HAL_CUS_NUM_FCC_2G_PRO];
551 } hal_cfg_custom_fcc_txpwr_limit_stru;
552 
553 typedef struct {
554     osal_s8 delta_cca_ed_high_20th_2g;
555     osal_s8 delta_cca_ed_high_40th_2g;
556     osal_s8 delta_cca_ed_high_20th_5g;
557     osal_s8 delta_cca_ed_high_40th_5g;
558 } hal_cfg_custom_cca_stru;
559 
560 typedef struct {
561     oal_bool_enum_uint8     mac_in_one_pkt_mode  : 1;
562     oal_bool_enum_uint8     self_cts_success     : 1;
563     oal_bool_enum_uint8     null_data_success    : 1;
564     oal_bool_enum_uint8     null_data_timeout    : 1;
565     osal_u8                 resv                 : 4;
566 } hal_one_packet_status_stru;
567 
568 typedef struct {
569     osal_u8     pn_tid;          /* tid,0~7, 对rx pn lut有效 */
570     osal_u8     pn_peer_idx;     /* 对端peer索引,0~31 */
571     osal_u8     pn_key_type;     /* 单播管理帧  0x4:组播/广播管理帧 others:保留 */
572     osal_u8     all_tid;         /* 0:仅配置TID,1:所有TID 对rx pn lut有效 */
573     osal_u32    pn_msb;          /* pn值的高32位,写操作时做入参,读操作时做返回值 */
574     osal_u32    pn_lsb;          /* pn值的低32位,写操作时做入参,读操作时做返回值 */
575 } hal_pn_lut_cfg_stru;
576 
577 /*****************************************************************************
578   7.0 寄存器配置结构
579 *****************************************************************************/
580 struct witp_reg16_cfg {
581     osal_u16    addr;
582     osal_u16    val;
583 };
584 typedef struct witp_reg16_cfg witp_reg16_cfg_stru;
585 
586 /*****************************************************************************
587   7.3 对外部发送提供接口所用数据结构
588 *****************************************************************************/
589 /*****************************************************************************
590   结构名  : hal_channel_matrix_dsc_stru
591   结构说明: 矩阵信息结构体
592 *****************************************************************************/
593 typedef struct {
594     /* (第10 23行) */
595     osal_u8          codebook              : 2;
596     osal_u8          grouping              : 2;
597     osal_u8          row_num               : 4;
598 
599     osal_u8          column_num            : 4;
600 
601     /* 在Tx 描述符中不用填写该字段;发送完成中断后,将有无信道矩阵信息存储在此 */
602     osal_u8          response_flag         : 1;
603     osal_u8          reserve1              : 3;
604 
605     osal_u16         channel_matrix_length;      /* 信道矩阵的总字节(Byte)数 */
606     osal_u32         steering_matrix;            /* txbf需要使用的矩阵地址,填写发送描述符时候使用 */
607 } hal_channel_matrix_dsc_stru;
608 
609 
610 typedef struct {
611     osal_u32 delta_dbb_scaling0  : 10;
612     osal_u32 tpc_ch1_0           : 8;
613     osal_u32 dpd_tpc_lv_ch1_0    : 2;
614     osal_u32 tpc_ch0_0           : 8;
615     osal_u32 dpd_tpc_lv_ch0_0    : 2;
616     osal_u32 cfr_idx0            : 2;
617 
618     osal_u32 delta_dbb_scaling1  : 10;
619     osal_u32 tpc_ch1_1           : 8;
620     osal_u32 dpd_tpc_lv_ch1_1    : 2;
621     osal_u32 tpc_ch0_1           : 8;
622     osal_u32 dpd_tpc_lv_ch0_1    : 2;
623     osal_u32 cfr_idx1            : 2;
624 
625     osal_u32 delta_dbb_scaling2  : 10;
626     osal_u32 tpc_ch1_2           : 8;
627     osal_u32 dpd_tpc_lv_ch1_2    : 2;
628     osal_u32 tpc_ch0_2           : 8;
629     osal_u32 dpd_tpc_lv_ch0_2    : 2;
630     osal_u32 cfr_idx2            : 2;
631 
632     osal_u32 delta_dbb_scaling3  : 10;
633     osal_u32 tpc_ch1_3           : 8;
634     osal_u32 dpd_tpc_lv_ch1_3    : 2;
635     osal_u32 tpc_ch0_3           : 8;
636     osal_u32 dpd_tpc_lv_ch0_3    : 2;
637     osal_u32 cfr_idx3            : 2;
638 }hal_tx_txop_tpc_stru;
639 
640 typedef struct {
641     osal_u16 delta_dbb_scaling : 5;
642     osal_u16 tpc_ch0           : 7;
643     osal_u16 dpd_tpc_lv_ch0    : 2;
644     osal_u16 cfr_idx           : 2;
645 }hal_tx_dscr_tpc_stru;
646 
647 typedef struct {
648     wlan_tx_ack_policy_enum_uint8           ack_policy;     /* ACK 策略 */
649     osal_u8                               tid_no;        /* 通信标识符 */
650     osal_u8                               qos_enable;    /* 是否开启QoS */
651     osal_u8                               nonqos_seq_bypass; /* 非qos数据帧是否bypass */
652 } hal_wmm_txop_params_stru;
653 
654 /* 第12 17行 */
655 typedef struct {
656     osal_u16                              tsf_timestamp;
657     osal_u8                               mac_hdr_len;
658     osal_u8                               num_sub_msdu;
659 } hal_tx_mpdu_mac_hdr_params_stru;
660 
661 typedef struct {
662     osal_u8                               ra_lut_index;
663     osal_u8                               tx_vap_index;
664     osal_u8                               auc_resv[2];    /* 保留2字节对齐 */
665 } hal_tx_ppdu_addr_index_params_stru;
666 
667 typedef struct {
668     osal_u32                              msdu_addr0;
669     osal_u16                              msdu0_len;
670     osal_u16                              msdu1_len;
671     osal_u32                              msdu_addr1;
672     osal_u16                              msdu2_len;
673     osal_u32                              msdu_addr2;
674     osal_u16                              msdu3_len;
675     osal_u32                              msdu_addr3;
676 } hal_tx_msdu_address_params;
677 
678 typedef struct {
679     /* 由安全特性更新 */
680     wlan_security_txop_params_stru           security;         /* 第16行 MAC TX MODE 2 */
681 
682     /* groupid和partial_aid */
683     wlan_groupid_partial_aid_stru            groupid_partial_aid;  /* 第12和15行部分 */
684 } hal_tx_txop_feature_stru;
685 /*****************************************************************************
686   结构名  : hal_tx_txop_alg_stru
687   结构说明: DMAC模块TXOP发送控制结构
688 *****************************************************************************/
689 /* 描述符第15行结构体 */
690 typedef struct {
691     osal_u8 he_max_pe_fld : 2;  /* WLAN_PHY_MAX_PE_FLD_VALUE_BUTT */
692     osal_u8 uplink_flag : 1;    /* wlan_phy_uplink_flag_enum */
693     osal_u8 lsig_txop : 1;      /* L-SIG TXOP的保护 */
694     osal_u8 pdet_en : 2;
695     osal_u8 rsv1 : 2;
696     osal_u8 rsv2[3];
697 } hal_tx_phy_mode_one_stru;
698 
699 typedef union {
700     osal_u16 val;
701     struct {
702         osal_u16 he_mcs : 4;
703         osal_u16 nss_mode : 2;                            /* wlan_nss_enum_uint8 */
704         osal_u16 others : 10; /* 速率无关的后面10位 */
705     } he_nss_mcs;
706     struct {
707         osal_u16 vht_mcs : 4;
708         osal_u16 nss_mode : 2;
709         osal_u16 others : 10;
710     } vht_nss_mcs; /* 11ac的速率集定义 */
711     struct {
712         osal_u16 ht_mcs : 6;
713         osal_u16 others : 10;
714     } ht_rate; /* 11n的速率集定义 */
715     struct {
716         osal_u16 legacy_rate : 4;
717         osal_u16 reserved1 : 2;
718         osal_u16 others : 10;
719     } legacy_rate; /* 11a/b/g的速率集定义 */
720     struct {
721         osal_u16 rate : 6; /* 上面定义的速率结构体位域 */
722         osal_u16 freq_bw : 4;                             /* hal_channel_assemble_enum */
723         osal_u16 gi_type : 2;                             /* wlan_phy_he_gi_type_enum/wlan_phy_he_gi_type_enum */
724         osal_u16 ltf_type : 2;                            /* wlan_phy_he_ltf_type_enum */
725         osal_u16 preamble_mode : 1;                       /* wlan_phy_preamble_type */
726         osal_u16 he_dcm : 1;                              /* wlan_phy_dcm_status */
727     } phy_mode;
728 } nss_rate_union;
729 
730 /*  word20-23 */
731 typedef struct {
732     nss_rate_union nss_rate;
733     osal_u8 protocol_mode : 3;                            /* wlan_phy_protocol_enum */
734     osal_u8 fec_coding : 1;                               /* wlan_channel_code_enum */
735     osal_u8 tx_chain_sel : 2;                             /* wlan_phy_chain_sel_enum */
736     osal_u8 txbf_mode : 1;
737     osal_u8 stbc_mode : 1;
738     osal_u8 smoothing : 1;
739     osal_u8 preamble_boost_flag : 1;
740     osal_u8 rts_cts_protect_mode : 2;                     /* wlan_phy_rts_cts_protect_mode_enum */
741     osal_u8 tx_count : 3;        /* old 传输次数 */
742     osal_u8 reserved : 1; /* 短保护间隔 */
743 } hal_tx_ctrl_desc_rate_stru;
744 
745 /*****************************************************************************
746   结构名  : hal_rate_pow_code_gain_table_stru
747   结构说明: HAL模块POW Code表结构
748 *****************************************************************************/
749 typedef struct {
750     osal_u32 tpc_code_level[HAL_POW_LEVEL_NUM];
751 }hal_rate_pow_code_gain_table_stru;
752 
753 /*****************************************************************************
754   结构名  : hal_vap_pow_info_stru
755   结构说明: HAL模块VAP级别功率结构
756 *****************************************************************************/
757 typedef struct {
758     hal_rate_pow_code_gain_table_stru   *rate_pow_table;  /* 速率-TPC code&TPC gain对应表 */
759     osal_u16                           reg_pow;
760     oal_bool_enum_uint8                debug_flag;     /* rate_pow table调试开关 */
761     osal_u8                            resv;
762     osal_u32                           beacon_tpc_code;
763 } hal_vap_pow_info_stru;
764 
765 /*****************************************************************************
766   结构名  : hal_tx_ppdu_feature_stru
767   结构说明: DMAC模块PPDU发送控制结构
768 *****************************************************************************/
769 typedef struct {
770     /* TX VAP index 和 RA LUT Index */
771     hal_tx_ppdu_addr_index_params_stru  ppdu_addr_index;
772 
773     osal_u32                          ampdu_length;         /* 不包括null data的ampdu总长度 */
774     osal_u16                          min_mpdu_length;      /* 根据速率查表得到的ampdu最小mpdu的长度 */
775     osal_u16                          tsf;
776 
777     osal_u8                           ampdu_enable : 1, /* 是否使能AMPDU */
778                                     rifs_enable : 1, /* rifs模式下发送时,MPDU链最后是否挂一个BAR帧 */
779                                     retry_flag_hw_bypass : 1,
780                                     duration_hw_bypass : 1,
781                                     seq_ctl_hw_bypass : 1,
782                                     timestamp_hw_bypass : 1,
783                                     addba_ssn_hw_bypass : 1,
784                                     tx_pn_hw_bypass : 1;
785     osal_u8                           mpdu_num;             /* ampdu中mpdu的个数 */
786     osal_u8                           tx_ampdu_session_index;
787     osal_u8                           ax_bss_color;
788 } hal_tx_ppdu_feature_stru;
789 
790 typedef struct {
791     osal_u8 mpdu_enable;
792     osal_u8 mpdu_num;
793     osal_u8 sub_msdu_num;
794     osal_u8   mac_hdr_len;
795     osal_u8 msdu0_len;
796     osal_u8 msdu1_len;
797     osal_u8 msdu2_len;
798     osal_u8 msdu3_len;
799     osal_u32 *next_dscr_addr;
800     osal_u32 *msdu0_addr;
801     osal_u32 *msdu1_addr;
802     osal_u32 *msdu2_addr;
803     osal_u32 *msdu3_addr;
804     osal_u32 *mac_hdr_addr;
805 } hal_tx_addr_info;
806 
807 /*****************************************************************************
808   结构名  : hal_security_key_stru
809   结构说明: DMAC模块安全密钥配置结构体
810 *****************************************************************************/
811 typedef struct {
812     osal_u8                           key_id;
813     wlan_cipher_key_type_enum_uint8     key_type;
814     osal_u8                           lut_idx;
815     wlan_ciper_protocol_type_enum_uint8 cipher_type;
816     oal_bool_enum_uint8                 update_key;
817     wlan_key_origin_enum_uint8          key_origin;
818     osal_u8                           reserve[2];        /* 保留2字节对齐 */
819     osal_u8                           *cipher_key;
820     osal_u8                           *mic_key;
821 } hal_security_key_stru;
822 
823 /*****************************************************************************
824   结构名  : hal_tx_dscr_rate_stru
825   结构说明: DMAC模块tx描述符速率结构体
826 *****************************************************************************/
827 typedef struct {
828     osal_u8                           rate;        /* 保留2字节对齐 */
829     osal_u8                           nss : 2;
830     osal_u8                           count : 3;
831     osal_u8                           resv : 3;
832     osal_u8                           auc_resv[2];
833 } hal_tx_dscr_rate_stru;
834 
835 /*****************************************************************************
836   7.4 基准VAP和Device结构
837 *****************************************************************************/
838 typedef struct {
839     osal_u16      offset_siso_base;   /* siso下提前量基准值 */
840     osal_u16      offset_mimo_base;   /* mimo下提前量基准值 */
841     osal_u8       state;          /* 探索状态 */
842     osal_u8       tbtt_cnt;       /* tbtt数量 */
843     osal_u8       bcn_rx_cnt;     /* bcn接收数,会先乘以100用u16定义 */
844     osal_u8       index;          /* 探索步进数 */
845     osal_u8       best_index;     /* 最优探索步进数 */
846     osal_u8       accum_index;    /* 累积探索步进数 */
847     osal_u8       best_rx_ratio;  /* 最优接收率 */
848     osal_u8       weak_rx_cnt;    /* 探索完成后连续接收小于门限数 */
849 } hal_tbtt_offset_probe_stru;
850 
851 #define TBTT_OFFSET_PROBE_STEP_US       30
852 #define TBTT_OFFSET_PROBE_MAX           20      /* 最多增加30乘20共600us */
853 
854 #define TBTT_OFFSET_UP_PROBE_STEP       2       /* up probe */
855 #define TBTT_OFFSET_DOWN_PROBE_STEP     1
856 #define TBTT_OFFSET_PROBE_ACCETP_DIF    3
857 #define TBTT_OFFSET_PROBE_DONE_RATION   95
858 #define TBTT_OFFSET_PROBE_WEAK_RATION   70
859 #define TBTT_OFFSET_PROBE_RETRY_CNT     5
860 
861 #define TBTT_OFFSET_PROBE_CALC_PERIOD   100    /* beacon接收率计算周期 */
862 
863 /* state define */
864 #define TBTT_OFFSET_PROBE_STATE_INIT    0
865 #define TBTT_OFFSET_PROBE_STATE_START   1
866 #define TBTT_OFFSET_PROBE_STATE_UP_DONE 2
867 #define TBTT_OFFSET_PROBE_STATE_END     3
868 
869 typedef struct {
870     osal_u16                           inner_tbtt_offset_siso;
871     osal_u16                           inner_tbtt_offset_mimo;
872 
873 /* 唤醒后收beacon的通道,在hal device状态机awake子状态时生效 */
874     osal_u8                            bcn_rf_chain;
875 #ifdef _PRE_PM_TBTT_OFFSET_PROBE
876     hal_tbtt_offset_probe_stru       *offset_probe;
877 #endif
878     osal_u8                            _rom[4];            /* 4字节储存rom地址 */
879 } hal_pm_info_stru;
880 
881 typedef struct tag_hal_to_dmac_vap_stru {
882     osal_u8                    vap_id : 4;                 /* VAP ID */
883     osal_u8                    mac_vap_id : 4;             /* 保存mac vap id */
884     wlan_vap_mode_enum_uint8 vap_mode : 4;               /* VAP工作模式 */
885     wlan_p2p_mode_enum_uint8 p2p_mode : 4;               /* P2P */
886 
887     hal_vap_state_enum_uint8 hal_vap_state;              /* hal vap state状态 */
888     hal_pm_info_stru         pm_info;
889     /* ROM化后资源扩展指针 */
890     osal_void                  *_rom;
891 } hal_to_dmac_vap_stru;
892 
893 /*****************************************************************************
894   7.5 对外部接收提供接口所用数据结构
895 *****************************************************************************/
896 #pragma pack(push, 1)
897 typedef struct {
898     /* byte 0 */
899     osal_s8            rssi_dbm;
900 
901     /* byte 1 */
902     union {
903         struct {
904             osal_u8  he_mcs        : 4;
905             osal_u8  nss_mode      : 2;                    /* wlan_nss_enum_uint8 */
906             osal_u8  protocol_mode : 2;
907         } he_nss_mcs;
908         struct {
909             osal_u8   vht_mcs       : 4;
910             osal_u8   nss_mode      : 2;
911             osal_u8   protocol_mode : 2;
912         } vht_nss_mcs;                                   /* 11ac的速率集定义 */
913         struct {
914             osal_u8   ht_mcs        : 6;
915             osal_u8   protocol_mode : 2;
916         } ht_rate;                                       /* 11n的速率集定义 */
917         struct {
918             osal_u8   legacy_rate   : 4;
919             osal_u8   reserved1     : 2;
920             osal_u8   protocol_mode : 2;
921         } legacy_rate;                                   /* 11a/b/g的速率集定义 */
922     } nss_rate;
923 
924     /* byte 2-3 */
925     osal_s8           snr_ant0;                          /* ant0 SNR */
926     osal_s8           snr_ant1;                          /* ant1 SNR */
927 
928     /* byte 4-5 */
929     osal_s8           ant0_rssi;        /* ANT0上报当前帧RSSI */
930     osal_s8           ant1_rssi;        /* ANT1上报当前帧RSSI */
931 
932     /* byte 6-7 */
933     osal_s16             phase_incr;             /* 报文频偏信息 */
934 } hal_rx_statistic_stru;
935 #pragma pack(pop)
936 
937 /* dmac_pkt_captures使用,tx rx均会使用 */
938 typedef struct {
939     osal_u8        ant_rssi_sw; /* 通过ANT RSSI切换使能。bit0:管理帧切换使能 bit1:数据帧切换使能 */
940     oal_bool_enum_uint8 log_print;
941     osal_u8        auc_resv[2];          /* 保留2字节对齐 */
942 
943     osal_s16        ant0_rssi_smth;   /* 平滑处理后历史RSSI */
944     osal_s16        ant1_rssi_smth;
945 
946     osal_u16       rssi_high_cnt;
947     osal_u16       rssi_high_cnt_th;
948 
949     osal_u16       rssi_low_cnt;
950     osal_u16       rssi_low_cnt_th;
951 } hal_rx_ant_rssi_stru;
952 
953 typedef struct {
954     oal_bool_enum_uint8 ant_rssi_sw;     /* 通过ANT RSSI切换使能 */
955     oal_bool_enum_uint8 log_print;
956     osal_u8           rssi_th;         /* RSSI高门限 */
957     oal_bool_enum_uint8 reserv[1];
958 
959     osal_s16        ant0_rssi_smth;   /* 平滑处理后历史RSSI */
960     osal_s16        ant1_rssi_smth;
961 } hal_rx_ant_rssi_mgmt_stru;
962 
963 /* ant_detect结构体 */
964 typedef struct {
965     hal_rx_ant_rssi_stru rx_rssi;
966     osal_void *cb;
967 
968     osal_u8   tbtt_cnt;    /* 当前统计的tbtt中断数 */
969     osal_u8   tbtt_cnt_th; /* tbtt中断门限值 */
970     osal_u8   mimo_tbtt_cnt;      /* 当前统计的tbtt中断数 */
971     osal_u8   mimo_tbtt_open_th;  /* tbtt中断开启探测门限值 */
972 
973     osal_u8   mimo_tbtt_close_th; /* tbtt中断关闭探测门限值 */
974     osal_char ori_min_th;
975     osal_char cur_min_th;
976     osal_u8   diff_th;
977 
978     osal_u8 miso_hold : 1; /* 是否保持在MISO状态 */
979     osal_u8 mimo_hold : 1; /* 是否保持在MIMO状态 */
980     osal_u8 resv0     : 6;
981     osal_u8 resv1[3]; /* 3byte保留字段 */
982 } hal_rssi_stru;
983 
984 /* 裸系统下需要传输给HMAC模块的信息 */
985 /* hal_rx_ctl_stru结构的修改要考虑mpxx_rx_get_info_dscr函数中的优化 */
986 /* 最大为8字节 */
987 /* 1字节对齐 */
988 #pragma pack(push, 1)
989 struct mac_rx_ctl {
990     /* byte 0 */
991     osal_u8                   vap_id            : 5;
992     osal_u8                   amsdu_enable      : 1;   /* 是否为amsdu帧,每个skb标记 */
993     osal_u8                   is_first_buffer   : 1;   /* 当前skb是否为amsdu的首个skb */
994     osal_u8                   is_fragmented     : 1;
995 
996     /* byte 1 */
997     osal_u8                   msdu_in_buffer;          /* 每个skb包含的msdu数,amsdu用,每帧标记 */
998 
999     /* byte 2 */
1000     osal_u8                   ta_user_idx       : 5;
1001     osal_u8                   tid               : 2;
1002     osal_u8                   is_key_frame      : 1;
1003 
1004     /* byte 3 */
1005     osal_u8                   mac_header_len    : 6;   /* mac header帧头长度 */
1006     osal_u8                   is_beacon         : 1;
1007     osal_u8                   is_last_buffer    : 1;
1008     /* byte 4-5 */
1009     osal_u16                  frame_len;                /* 帧头与帧体的总长度,AMSDU非首帧不填 */
1010 
1011     /* byte 6 */
1012     osal_u8                   mac_vap_id        : 4;   /* 业务侧vap id号 */
1013     osal_u8                   buff_nums         : 4;   /* 每个MPDU占用的SKB数,AMSDU帧占多个 */
1014     /* byte 7 */
1015     osal_u8                   channel_number;          /* 接收帧的信道 */
1016 
1017     /* byte 8 ~ byte 13 */
1018     osal_u16                  ftm_frame         : 1;    /* 是否为FTM帧 */
1019     osal_u16                  stream_id         : 3;  /* 标记匹配的五元组流id */
1020     osal_u16                  rpt_aver_evm_ant0 : 12; /* evm */
1021     osal_u32                  latency_timestamp_us : 24; /* 时延耗时统计时间戳,单位1us精度 */
1022     osal_u32                  latency_index        : 8;  /* 时延耗时统计报文标识 */
1023 
1024     /* byte 14 ~ byte 15 */
1025     osal_u16                  da_user_idx;                 /* 目的地址用户索引 */
1026     /* byte 16 ~ byte 19 */
1027     osal_u32                  pul_mac_hdr_start_addr;     /* 对应的帧的帧头地址,虚拟地址 */
1028 };
1029 typedef struct mac_rx_ctl  hal_rx_ctl_stru;
1030 #pragma pack(pop)
1031 
1032 /* 对DMAC SCAN 模块提供的硬件MAC/PHY信道测量结果结构体 */
1033 typedef struct {
1034     /* MAC信道统计 */
1035     osal_u32  ch_stats_time_us;
1036     osal_u32  pri20_free_time_us;
1037     osal_u32  pri40_free_time_us;
1038     osal_u32  pri80_free_time_us;
1039     osal_u32  sec20_free_time_us;
1040     osal_u32  ch_rx_time_us;
1041     osal_u32  ch_tx_time_us;
1042 
1043     /* PHY信道测量 */
1044     osal_u8   phy_ch_estimate_time_ms;
1045     osal_s8   pri20_idle_power;
1046     osal_s8   pri40_idle_power;
1047     osal_s8   pri80_idle_power;
1048 } hal_ch_statics_irq_event_stru;
1049 
1050 typedef struct {
1051     osal_u16 statics_period;
1052     osal_u8  meas_period;
1053     osal_u8 rsv;
1054 } hal_chan_measure_stru;
1055 
1056 /*
1057  * 裸系统下针对接收,提供读取接口
1058  * frame_len长度
1059  * 802.11帧头长度(mac_hdr_len)
1060 */
1061 #pragma pack(push, 1)
1062 
1063 typedef struct {
1064     /* byte 0 */
1065     osal_u8   cipher_protocol_type  : 4;      /* 接收帧加密类型 */
1066     osal_u8   dscr_status           : 4;      /* 接收状态 */
1067 
1068     /* byte 1 */
1069     osal_u8   channel_code          : 1;
1070     osal_u8   stbc                  : 2;
1071     osal_u8   gi                    : 2;
1072     osal_u8   ampdu                 : 1;
1073     osal_u8   sounding_mode         : 2;
1074 
1075     /* byte 2 */
1076     osal_u8   ext_spatial_streams   : 2;
1077     osal_u8   smoothing             : 1;
1078     osal_u8   freq_bandwidth_mode   : 4;
1079     osal_u8   preabmle              : 1;
1080 
1081     /* byte 3 */
1082     osal_u8   rsp_flag              : 1;
1083     osal_u8   reserved2             : 1;
1084     osal_u8   he_flag               : 1;
1085     osal_u8   last_mpdu_flag        : 1;
1086     osal_u8   he_ltf_type           : 2;
1087     osal_u8   dcm                   : 1;
1088     osal_u8   reserved3             : 1;
1089 } hal_rx_status_stru;
1090 #pragma pack(pop)
1091 
1092 /*****************************************************************************
1093     7.6 对外部保留的VAP级接口列表,建议外部不做直接调用,而是调用对应的内联函数
1094 *****************************************************************************/
1095 typedef struct {
1096     hal_to_dmac_vap_stru    vap_base;
1097 } hal_vap_stru;
1098 
1099 typedef struct {
1100     osal_u8  lut_index;
1101     osal_u8  peer_lut_index;
1102     osal_u8  tid;
1103     osal_u8  mmss;
1104 
1105     osal_u16 win_size;
1106     osal_u8  rsv[2];             /* 保留2字节对齐 */
1107 
1108     osal_u16 ssn;
1109     osal_u16 seq_num;
1110 
1111     osal_u32 bitmap_lsb;
1112     osal_u32 bitmap_msb;
1113 } hal_ba_para_stru;
1114 
1115 typedef struct {
1116     osal_u8 aggr_tx_on;
1117     osal_u8 snd_type;
1118     osal_u8 resv[2];
1119 } mac_cfg_ampdu_tx_on_param_stru;
1120 
1121 /* 2g/5g rf定制化对应得到phy+rf chain能力定制化 */
1122 typedef struct {
1123     wlan_nss_enum_uint8                     nss_num_2g;              /* 2G Nss 空间流个数 */
1124     wlan_nss_enum_uint8                     nss_num_5g;              /* 5G Nss 空间流个数 */
1125 
1126     /* rf通道1/2/3(双通道),解决方案和芯片都不支持交叉 */
1127     osal_u8                               support_rf_chain_2g;
1128 
1129     /* rf通道1/2/3(双通道),解决方案和芯片都不支持交叉 */
1130     osal_u8                               support_rf_chain_5g;
1131 } hal_cfg_rf_custom_cap_info_stru;
1132 
1133 typedef struct tag_hal_to_dmac_chip_stru {
1134 } hal_to_dmac_chip_stru;
1135 
1136 typedef union {
1137     struct {
1138         osal_u32 rpt_err_para_cfg_err : 1;              /* [0]  */
1139         osal_u32 rpt_err_tx_vector_err : 1;             /* [1]  */
1140         osal_u32 rpt_err_ba_entry_not_found : 1;        /* [2]  */
1141         osal_u32 rpt_err_phy_trlr_time_out : 1;         /* [3]  */
1142         osal_u32 rpt_err_phy_rx_fifo_overrun : 1;       /* [4]  */
1143         osal_u32 rpt_err_tx_dataflow_break : 1;         /* [5]  */
1144         osal_u32 rpt_err_rx_fsm_st_timeout : 1;         /* [6]  */
1145         osal_u32 rpt_err_tx_fsm_st_timeout : 1;         /* [7]  */
1146         osal_u32 rpt_err_rx_handler_st_timeout : 1;     /* [8]  */
1147         osal_u32 rpt_err_tx_handler_st_timeout : 1;     /* [9]  */
1148         osal_u32 rpt_err_tx_intr_fifo_overrun : 1;      /* [10]  */
1149         osal_u32 rpt_err_rx_intr_fifo_overrun : 1;      /* [11]  */
1150         osal_u32 rpt_err_hirx_intr_fifo_overrun : 1;    /* [12]  */
1151         osal_u32 rpt_err_unexpected_rx_q_empty : 1;     /* [13]  */
1152         osal_u32 rpt_err_unexpected_hirx_q_empty : 1;   /* [14]  */
1153         osal_u32 rpt_err_bus_rlen_err : 1;              /* [15]  */
1154         osal_u32 rpt_err_bus_raddr_err : 1;             /* [16]  */
1155         osal_u32 rpt_err_bus_wlen_err : 1;              /* [17]  */
1156         osal_u32 rpt_err_bus_waddr_err : 1;             /* [18]  */
1157         osal_u32 rpt_err_tx_acbk_q_overrun : 1;         /* [19]  */
1158         osal_u32 rpt_err_tx_acbe_q_overrun : 1;         /* [20]  */
1159         osal_u32 rpt_err_tx_acvi_q_overrun : 1;         /* [21]  */
1160         osal_u32 rpt_err_tx_acvo_q_overrun : 1;         /* [22]  */
1161         osal_u32 rpt_err_tx_hipri_q_overrun : 1;        /* [23]  */
1162         osal_u32 rpt_err_matrix_calc_time_out : 1;      /* [24]  */
1163         osal_u32 rpt_err_cca_time_out : 1;              /* [25]  */
1164         osal_u32 rpt_tb_intr_err : 1;                   /* [26]  */
1165         osal_u32 rpt_err_beacon_miss : 1;               /* [27]  */
1166         osal_u32 rpt_err_intr_fifo_unexpected_read : 1; /* [28]  */
1167         osal_u32 rpt_err_unexpected_rx_desc_addr : 1;   /* [29]  */
1168         osal_u32 rpt_err_rx_overlap_err : 1;            /* [30]  */
1169         osal_u32 reserved_0 : 1;                        /* [31]  */
1170     } bits;
1171 
1172     osal_u32 u32;
1173 } err_intr_stat;
1174 
1175 typedef union {
1176     struct {
1177         osal_u32 rpt_err_tx_acbe_backoff_timeout : 1;  /* [0]  */
1178         osal_u32 rpt_err_tx_acbk_backoff_timeout : 1;  /* [1]  */
1179         osal_u32 rpt_err_tx_acvi_backoff_timeout : 1;  /* [2]  */
1180         osal_u32 rpt_err_tx_acvo_backoff_timeout : 1;  /* [3]  */
1181         osal_u32 rpt_err_tx_hipri_backoff_timeout : 1; /* [4]  */
1182         osal_u32 rpt_err_rx_small_q_empty : 1;         /* [5]  */
1183         osal_u32 rpt_err_para_cfg_2err : 1;            /* [6]  */
1184         osal_u32 rpt_err_para_cfg_3err : 1;            /* [7]  */
1185         osal_u32 rpt_err_edca_st_timeout : 1;          /* [8]  */
1186         osal_u32 rpt_err_para_cfg_4err : 1;            /* [9]  */
1187         osal_u32 rpt_err_tx_bc_q_overrun : 1;          /* [10]  */
1188         osal_u32 rpt_err_bss_nav_prot : 1;             /* [11]  */
1189         osal_u32 rpt_err_obss_nav_prot : 1;            /* [12]  */
1190         osal_u32 rpt_err_bus_rw_timeout : 1;           /* [13]  */
1191         osal_u32 rpt_tx_data_fifo_overrun : 1;         /* [14]  */
1192         osal_u32 rpt_rx_data_fifo_overrun : 1;         /* [15]  */
1193         osal_u32 rpt_txbf_fifo_overrun : 1;            /* [16]  */
1194         osal_u32 rpt_err_bus_rd_dly_overrun : 1   ; /* [17] */
1195         osal_u32 reserved_0 : 14;                      /* [31..18]  */
1196     } bits;
1197 
1198     osal_u32 u32;
1199 } err2_intr_status;
1200 
1201 typedef struct {
1202     err_intr_stat                      error1_val; /* 错误1中断状态 */
1203     err2_intr_status                      error2_val; /* 错误2中断状态 */
1204 } hal_error_state_stru;
1205 
1206 /* 会影响目标vdet值的参数集合 */
1207 typedef union {                                                 /*  */
1208     struct {
1209         wlan_channel_band_enum_uint8    freq         : 4;
1210         wlan_bw_cap_enum_uint8          band_width   : 4;
1211         osal_u8                         channel;
1212         osal_u8                         pdet_chain   : 4;
1213         wlan_mod_enum_uint8             mod          : 4;
1214         osal_u8                         tx_pow;
1215     } rf_core_para;
1216     osal_u32 para;
1217 } hal_dyn_cali_record_union;
1218 
1219 typedef struct {
1220     hal_dyn_cali_record_union           record_para;
1221     wlan_phy_protocol_enum_uint8        cur_protocol;
1222     osal_s16                            real_pdet;
1223     osal_u8                             upc_gain_idx;
1224     osal_u8                             rate_idx;
1225     oal_bool_enum_uint8                 flag;
1226     osal_u8                             rsv[2];          /* 保留2字节对齐 */
1227 } hal_pdet_info_stru;
1228 
1229 typedef struct {
1230     hal_dyn_cali_record_union          record_para;
1231     osal_s16                           real_pdet;
1232     osal_s16                           exp_pdet;
1233     osal_u8                            auc_resv[4];
1234 } hal_dyn_cali_usr_record_stru;
1235 
1236 /* 扫描状态,通过判断当前扫描的状态,判断多个扫描请求的处
1237     理策略以及上报扫描结果的策略 */
1238 typedef enum {
1239     HAL_SCAN_PASUE_TYPE_CHAN_CONFLICT,
1240     HAL_SCAN_PASUE_TYPE_SWITCH_BACK,
1241 
1242     HAL_SCAN_PASUE_TYPE_BUTT
1243 } hal_scan_pasue_enum;
1244 typedef osal_u8 hal_scan_pause_type_enum_uint8;
1245 
1246 typedef struct {
1247     osal_u8                    num_channels_2g;
1248     osal_u8                    num_channels_5g;
1249     osal_u8                    max_scan_count_per_channel;   /* 每个信道的扫描次数 */
1250     osal_u8                    resv;
1251     osal_u8                    scan_channel_interval;   /* 间隔n个信道,切回工作信道工作一段时间 */
1252     wlan_scan_mode_enum_uint8    scan_mode;
1253     wlan_channel_band_enum_uint8 scan_band;                   /* 扫描的频段,支持fast scan使用 */
1254     osal_u8                    auc_resv[1];
1255 
1256     /* 扫描在某一信道停留此时间后,扫描结束, ms,必须配置为MAC负载统计周期的整数倍 */
1257     osal_u16                   scan_time;
1258     osal_u16                   work_time_on_home_channel;   /* 背景扫描时,返回工作信道工作的时间 */
1259 } hal_scan_info_stru;
1260 
1261 /* 配置相关信息(包含定制化) */
1262 typedef struct {
1263     osal_u8 nss_num                       : 3; /* Nss 空间流个数 */
1264     osal_u8 wlan_bw_max                   : 4;
1265     osal_u8 ctrl_frm_tx_double_chain_flag : 1;
1266     osal_u8 phy_chain;   /* phy通道1/2/3 */
1267     osal_u8 single_tx_chain;
1268     /* 管理帧采用单通道发送时选择的通道(单通道时要配置和uc_phy_chain一致),
1269        或者用于配置phy接收通道寄存器 */
1270     osal_u8 rf_chain;             /* rf通道1/2/3(双通道),解决方案和芯片都不支持交叉 */
1271 
1272     osal_u8    tx_stbc_is_supp  : 1,     /* 是否支持最少2x1 STBC发送 */
1273              rx_stbc_is_supp  : 1,     /* 是否支持stbc接收,支持2个空间流 */
1274              su_bfmer_is_supp : 1,     /* 是否支持单用户beamformer */
1275              su_bfmee_is_supp : 1,     /* 是否支持单用户beamformee */
1276              mu_bfmer_is_supp : 1,     /* 是否支持多用户beamformer */
1277              mu_bfmee_is_supp : 1,     /* 是否支持多用户beamformee */
1278              is_supp_11ax     : 1,
1279              radar_detector_is_supp : 1;
1280     osal_u8    dpd_is_supp      : 1,
1281              sounding_11n     : 1,
1282              green_field      : 1,
1283              txopps_is_supp   : 1,      /* 是否使能TXOP PS */
1284              is_supp_1024qam  : 1,      /* 支持1024QAM速率 */
1285              nb_is_supp       : 1,
1286              is_supp_txbf_11n : 1,      /* 是否支持11n txbf */
1287              ldpc_is_supp     : 1;      /* 是否支持ldpc */
1288     osal_u8    su_bfee_num;
1289     osal_u8    phy2dscr_chain; /* 和uc_phy_chain对应,这里是配置发送描述符 */
1290 } hal_cfg_cap_info_stru;
1291 
1292 /* hal device alg结构体定义 */
1293 typedef enum {
1294     HAL_ALG_DEVICE_STRU_ID_SCHEDULE,
1295     HAL_ALG_DEVICE_STRU_ID_AUTORATE,
1296     HAL_ALG_DEVICE_STRU_ID_AGGR,
1297     HAL_ALG_DEVICE_STRU_ID_RTS,
1298     HAL_ALG_DEVICE_STRU_ID_SMARTANT,
1299     HAL_ALG_DEVICE_STRU_ID_DBAC,
1300     HAL_ALG_DEVICE_STRU_ID_TXBF,
1301     HAL_ALG_DEVICE_STRU_ID_ANTI_INTF,
1302     HAL_ALG_DEVICE_STRU_ID_MWO_DET,
1303     HAL_ALG_DEVICE_STRU_ID_TPC,        // TPC结构体
1304     HAL_ALG_DEVICE_STRU_ID_EDCA_OPT,
1305     HAL_ALG_DEVICE_STRU_ID_CCA_OPT,
1306     HAL_ALG_DEVICE_STRU_ID_INTF_DET,
1307     HAL_ALG_DEVICE_STRU_ID_TEMP_PROTECT,
1308     HAL_ALG_DEVICE_STRU_ID_BUTT
1309 } hal_alg_device_stru_id_enum;
1310 typedef osal_u8 hal_alg_device_stru_id_enum_uint8;
1311 
1312 /* 挂在各个hal device上的数据结构 */
1313 typedef struct {
1314     osal_void       *alg_info[HAL_ALG_DEVICE_STRU_ID_BUTT];
1315 } hal_alg_device_stru;
1316 
1317 /* 设备距离、干扰状态等信息 */
1318 typedef struct {
1319     hal_alg_user_distance_enum_uint8           alg_distance_stat;    /* 距离状态  */
1320     hal_alg_intf_det_mode_enum_uint8           adj_intf_state;       /* 邻频干扰状态 */
1321     oal_bool_enum_uint8                        co_intf_state;        /* 同频干扰状态 */
1322     osal_u8                                    reserv;
1323 } hal_alg_stat_info_stru;
1324 
1325 typedef struct {
1326     osal_u8 rate_max_tx_pow_ctrl_table[HAL_POW_RATE_POW_CODE_TABLE_LEN][WLAN_BAND_BUTT];
1327     osal_u8 rev[2];             /* 保留2字节对齐 */
1328 } hal_cfg_rate_max_tx_pow_stru;
1329 
1330 typedef struct {
1331     osal_s16 as_pow_level_table[HAL_POW_LEVEL_NUM - 1][WLAN_BAND_BUTT];
1332 } hal_cfg_tpc_lvl_vs_gain_stru;
1333 
1334 /* DMAC_VAP发射功率TX功率控制相关的参数结构体 */
1335 typedef struct {
1336     /* 1) MAX_Power@rate */
1337     hal_cfg_rate_max_tx_pow_stru     *max_tx_pow_per_rate_ctrl;
1338 
1339     osal_u8                            rsv_0;                     /* 对齐hal_cfg_rate_max_tx_pow_stru中的h8 */
1340     osal_u8                            tx_power;
1341     /* PAPR=5.5时的功率偏差值 */
1342     osal_u8                            pwr_compens_val_6m;
1343     osal_u8                            pwr_compens_val_mcs0;
1344     /* 3) LPF Index@rate */
1345     osal_u8                           *lpf_idx_per_rate_ctrl_2g;
1346     osal_u8                           *lpf_idx_per_rate_ctrl_5g;
1347     /* 4) TPC档位 vs Target Gain表 */
1348     hal_cfg_tpc_lvl_vs_gain_stru  *tpc_lvl_vs_gain_ctrl;
1349     hal_rate_pow_code_gain_table_stru      *rate_pow_table_2g;
1350     hal_rate_pow_code_gain_table_stru      *rate_pow_table_5g;
1351     osal_void                              *_rom;
1352 } hal_device_tx_pwr_ctrl_stru;
1353 typedef struct {
1354     osal_u16 rpt_obss_pd_tx_num;
1355     osal_u16 rpt_obss_pd_tx_success_num;
1356     osal_u16 rpt_psr_sr_tx_num;
1357     osal_u16 rpt_psr_sr_tx_success_num;
1358 } dmac_sr_sta_vfs_stru;
1359 
1360 typedef struct {
1361     osal_u16 rpt_non_srg_62_68_cnt;
1362     osal_u16 rpt_non_srg_68_74_cnt;
1363     osal_u16 rpt_non_srg_74_78_cnt;
1364     osal_u16 rpt_non_srg_78_82_cnt;
1365 } dmac_sr_sta_non_srg_stru;
1366 
1367 typedef struct {
1368     osal_u16 rpt_srg_62_68_cnt;
1369     osal_u16 rpt_srg_68_74_cnt;
1370     osal_u16 rpt_srg_74_78_cnt;
1371     osal_u16 rpt_srg_78_82_cnt;
1372 } dmac_sr_sta_srg_stru;
1373 
1374 typedef struct {
1375     osal_u32 duration;
1376     osal_u32 interval;
1377     osal_u64 start_tsf;
1378 } twt_reg_param_stru;
1379 
1380 #ifdef _PRE_WLAN_FEATURE_WUR_TX
1381 /* WUR周期配置参数 */
1382 typedef struct {
1383     osal_u32 duration;
1384     osal_u32 interval;
1385     osal_u64 start_tsf;
1386 } wur_reg_param_stru;
1387 
1388 /* WUR BEACON帧发送参数 */
1389 typedef struct {
1390     osal_u16 wur_bcn_period;
1391     osal_u16 rsvd;
1392     osal_u32 pkt_ptr;
1393     osal_u32 pkt_len;
1394     osal_u32 phy_tx_mode;
1395     osal_u32 tx_data_rate;
1396 } wur_bcn_reg_param_stru;
1397 
1398 /* WUR WAKE UP帧发送参数 */
1399 typedef struct {
1400     osal_u16 id : 12,
1401              counter : 4;
1402     osal_u16 group_buffer : 1,
1403              rsvd1 : 15;
1404 } wur_wakeup_reg_param_stru;
1405 #endif
1406 
1407 typedef struct {
1408     hal_coex_sw_preempt_mode_stru       sw_preempt_mode;
1409     hal_coex_sw_preempt_type_uint8      sw_preempt_type;
1410     hal_coex_sw_preempt_subtype_uint8   sw_preempt_subtype;
1411     hal_fcs_protect_coex_pri_enum_uint8 protect_coex_pri;      /* one pkt帧发送优先级 */
1412     osal_u16                          timeout_ms;        /* ps超时时间,page扫描190slot 音乐和数传30slot */
1413     osal_u8 last_acl_status : 1, /* 保存上一次acl状态 */
1414             ps_stop         : 1, /* 特定业务下,不需要开启ps,通知蓝牙不要发送ps中断 */
1415             ps_pause        : 1, /* 特定业务下,需要暂停ps,不影响ps中断处理,防止和wifi特定业务冲突 */
1416             coex_pri_forbit : 1, /* coex pri控制开关,ldac下需要关闭该功能 */
1417             resv0           : 4;
1418     osal_u8   resv;
1419     osal_u32                          ps_cur_time;           /* 用于ps中断上下半部执行时间统计 */
1420     osal_atomic                       ps_event_num;          /* ps中断event数目 */
1421     osal_u32                          ps_on_cnt;             /* DFX统计ps on切换次数 */
1422     osal_u32                          ps_off_cnt;            /* DFX统计ps off切换次数 */
1423     osal_u32                          ps_timeout_cnt;        /* DFX统计ps超时切换次数 */
1424 } hal_device_btcoex_sw_preempt_stru;
1425 
1426 /* 接收端描述符分配算法进行吞吐量统计的结构体 */
1427 typedef struct {
1428     /* 记录一个周期(100ms)内接收队列接收帧的数量 */
1429     osal_u16                      rx_event_pkts_sum;
1430 
1431     /* 记录一个周期(100ms)内接收队列产生isr info数量 */
1432     osal_u16                      rx_event_cnt;
1433 
1434     /* 记录一个周期(100ms)内接收队列挂载的资源个数的峰值 */
1435     osal_u16                      rx_max_dscr_used_cnt;
1436 
1437     /* 记录一个周期(100ms)内接收队列接收帧的数量的平滑值 */
1438     osal_u16                      rx_dscr_smooth_event_pkts;
1439 
1440     /* 记录一个周期(100ms)内接收队列挂载的资源个数的峰值的平滑值 */
1441     osal_u16                      rx_dscr_smooth_avr_dscr;
1442 
1443     /* 记录一个周期(100ms)内接收描述符上报Q_EMPTY数量 */
1444     osal_u16                      rx_dscr_q_empty;
1445 } alg_rx_dscr_ctl_alg_info_stru;
1446 
1447 /* 接收端描述符分配算法进行吞吐量统计的结构体 */
1448 typedef struct {
1449     alg_rx_dscr_ctl_alg_info_stru  *rx_dscr_ctl_alg_info;
1450 } alg_rx_dscr_ctl_device_info_stru;
1451 
1452 typedef struct {
1453     /* MAC统计 */
1454     osal_u32 rx_direct_time;
1455     osal_u32 rx_nondir_time;
1456     osal_u32 tx_time;
1457 } hal_ch_mac_statics_stru;
1458 typedef struct {
1459     /* 干扰相关统计 */
1460     osal_u16 duty_cyc_ratio_20; /* 20M干扰繁忙度 */
1461     osal_u16 duty_cyc_ratio_40; /* 40M干扰繁忙度 */
1462     osal_u16 duty_cyc_ratio_80; /* 80M干扰繁忙度 */
1463     osal_u16 sync_err_ratio;   /* 同步错误率 */
1464     osal_u32 rx_time;          /* rx总时间 */
1465     osal_u32 tx_time;          /* tx总时间 */
1466     osal_u32 free_time;        /* 空闲时间 */
1467     osal_u32 abort_time_us;    /* 被打断时间,包括共存和扫描 */
1468 } hal_ch_intf_statics_stru;
1469 
1470 /* coex siso业务管理结构体 */
1471 typedef struct {
1472     osal_u8   m2s_on_6slot         : 1,        /* 6slot申请siso */
1473             ldac_m2s_on          : 1,        /* ldac申请siso */
1474             m2s_resv             : 6;
1475 } hal_coex_m2s_mode_bitmap_stru;
1476 
1477 /* coex mimo业务管理结构体 */
1478 typedef struct {
1479     osal_u8   s2m_on_6slot         : 1,        /* sco申请回mimo */
1480             ldac_s2m_on          : 1,        /* ldac申请回mimo */
1481             a2dp_s2m_on          : 1,        /* a2dp申请回mimo */
1482             s2m_resv             : 5;
1483 } hal_coex_s2m_mode_bitmap_stru;
1484 
1485 typedef struct {
1486     osal_s16                           vdet_val;
1487     osal_u8                           ppa_working;  /* 0:PA;1:PPA */
1488     osal_u8                           rsv;
1489     hal_dyn_cali_record_union           record_para;
1490 } hal_dyn_cali_pa_ppa_asjust_stru;
1491 
1492 #ifdef _PRE_WLAN_FEATURE_FTM
1493 /* HAL模块和DMAC模块共用的FTM TIME RX结构体 */
1494 typedef struct {
1495     osal_u8       dialog_token;
1496     osal_u8       resv[3];
1497     osal_u64      t2;
1498     osal_u64      t3;
1499 } hal_wlan_ftm_t2t3_rx_event_stru;
1500 
1501 typedef enum {
1502     DMAC_TX_FTM_FRAME = 0,
1503     DMAC_TX_FTM_REQ_FRAME = 1,
1504     DMAC_TX_OTHER_FRAME,
1505 } dmac_tx_ftm_frame_enum;
1506 typedef osal_u8 dmac_tx_ftm_frame_enum_uint8;
1507 
1508 typedef struct {
1509     osal_u8 frame_type;
1510     osal_u8 dialog_token_ack;
1511     osal_u8 address[WLAN_MAC_ADDR_LEN];
1512     osal_u64 t1;
1513     osal_u64 t4;
1514 } dmac_tx_ftm_frame_stru;
1515 #endif
1516 
1517 typedef struct {
1518     osal_u8                     p2p_noa_status; /* 0: 表示noa 定时器停止,1: 表示noa 定时器正在工作 */
1519     osal_u8                     auc_resv[3];    /* 预留3字节对齐 */
1520 } hal_p2p_pm_event_stru;
1521 
1522 typedef struct {
1523     osal_u8        bw;     /* 值0代表20M, 值1代表40M, 值2代表80M, 值3代表160M */
1524     osal_u8        nss;    /* 值0代表单流, 值1代表双流 */
1525     osal_u8        vap_id;
1526 } hal_to_dmac_he_rom_update_stru;
1527 
1528 typedef struct {
1529     osal_u8 lut_index; /* BA会话LUT session index */
1530     osal_u8 tid; /* tid num */
1531     osal_u16 seq_no; /* 第一个未确认的MPDU的序列号 */
1532     osal_u8 win_size; /* Block_Ack会话的buffer size大小 */
1533     osal_u8 mmss; /* Min AMPDU Start Spacing */
1534     wlan_protocol_enum_uint8 user_protocol_mode;
1535     wlan_protocol_enum_uint8 sta_protocol_mode;
1536     osal_u8 ba_32bit_flag;
1537     osal_u8 resv[3]; /* 3BYTE保留字段 */
1538 } machw_tx_ba_params_stru;
1539 
1540 typedef struct {
1541     osal_u8 lut_index;
1542     osal_u8 tid;
1543     oal_bool_enum_uint8 qos_flag;
1544 } machw_tx_sequence_stru;
1545 
1546 /* 寄存器地址和值配置数据结构 */
1547 typedef struct {
1548     osal_u32 address;
1549     osal_u32 value;
1550 } hal_reg32_cfg_stru;
1551 
1552 typedef struct {
1553     osal_u32 address;
1554     osal_u16 value;
1555 } hal_reg16_cfg_stru;
1556 
1557 typedef union {
1558     osal_u64  trig_para_value;
1559     struct {
1560         osal_u32  aid  : 12;                /* STA的关联ID */
1561         osal_u32  mac_vap_id : 4;
1562         osal_u32  he_ltf_num : 4;
1563         osal_u32  doppler : 1;
1564         osal_u32  midamble_period : 1;
1565         osal_u32  resv : 10;
1566         osal_u16  psdu_tx_time;             /* AP允许TB PPDU发送时常,单位us */
1567         osal_u16  bw             : 2;       /* 上行带宽,0:20M,1:40M,2:80M,3:80+80或160M */
1568         osal_u16  ltf_gi_type    : 2;       /* AP指定gi */
1569         osal_u16  ru_type        : 4;       /* AP指定ru size */
1570         osal_u16  mcs            : 4;       /* AP指定mcs */
1571         osal_u16  nss            : 4;       /* AP指定nss */
1572     }basic_trig_para;
1573 } hal_tx_ul_ofdma_para_stru;
1574 
1575 typedef struct {
1576     osal_u64 trigger_type : 4,
1577            length : 12,
1578            more_tf : 1,
1579            cs_required : 1,
1580            bw : 2,
1581            gi_and_ltf_type : 2,
1582            mu_mimo_ltf_mode : 1,
1583            num_of_he_ltf_syms_and_midamble_period : 3,
1584            stbc : 1,
1585            ldpc_extra_symbol_segment : 1,
1586            ap_tx_power : 6,
1587            pre_fec_padding_factor : 2,
1588            pe_disambiguity : 1,
1589            spatial_reuse : 16,
1590            doppler : 1,
1591            he_sig_a2_resv : 9,
1592            resv : 1;
1593 } hal_trig_common_info_field_stru;
1594 
1595 typedef struct {
1596     osal_u64 aid12 : 12,
1597            ru_ch_offset : 1, /* 对20MHz,40MHz and 80MHz PPDUs,置0;对80+80 MHz and 160MHz PPDUs,置1 */
1598            ru_allocation : 7,
1599            fec_coding_type : 1,
1600            mcs : 4,
1601            dcm : 1,
1602            ss_allocation : 3,
1603            nss : 3,
1604            target_rssi : 7,
1605            resv : 25;
1606 } hal_trig_user_info_field_stru;
1607 
1608 typedef struct {
1609     osal_u8 mu_spacing_factor : 2;
1610     osal_u8 tid_aggr_limit : 3;
1611     osal_u8 res1 : 1;
1612     osal_u8 preferred_ac : 2;
1613     osal_u8 resv[3];
1614 } hal_trig_user_trig_depend_info_stru;
1615 
1616 typedef enum {
1617     HAL_RF_TRX_TYPE_0,    /* WF0 */
1618     HAL_RF_TRX_TYPE_1,    /* WF1 */
1619     HAL_RF_TRX_TYPE_2T2R, /* MIMO双发双收 */
1620     HAL_RF_TRX_TYPE_1T2R, /* MIMO单发双收 */
1621     HAL_RF_TRX_TYPE_2T1R, /* MIMO双发单收 */
1622     HAL_RF_TRX_TYPE_BUTT
1623 } hal_rf_trx_type_enum;  /* 不能调整顺序或增加类型,如果需要,要同步修改hh503_rf_set_stb_mode函数 */
1624 typedef osal_u8 hal_rf_trx_type_enum_uint8;
1625 
1626 typedef struct {
1627     osal_u32  lpf_gain         : 4;
1628     osal_u32  mod_pga_unit     : 6;
1629     osal_u32  mod_gm_unit      : 6;
1630     osal_u32  mod_slice_tpc    : 2;
1631     osal_u32  pa_unit          : 4;
1632     osal_u32  pa_slice_idx     : 4;
1633     osal_u32  resv0            : 6;
1634 } hal_pow_phy_tpc_value_stru;
1635 
1636 /* 校准维测命令参数结构体 */
1637 typedef struct {
1638     osal_u8 cali_mode;  /* 需查询的校准项idx */
1639     osal_u8 chnl;       /* 物理通道 */
1640     osal_u8 band;       /* 0:2G 1:5G */
1641     osal_u8 bw;         /* 带宽 */
1642     osal_u16 freq;      /* 信道 */
1643 } hal_cali_info_dump_stru;
1644 
1645 #ifdef __cplusplus
1646 #if __cplusplus
1647 }
1648 #endif
1649 #endif
1650 
1651 #endif
1652