hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/******************************************************************************
 *
 * Copyright(c) 2019 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.
 *
 *****************************************************************************/
#define _HAL_CHAN_INFO_C_
#include "hal_headers.h"
 
#ifdef CONFIG_PHL_CHANNEL_INFO
 
enum rtw_hal_status
rtw_hal_cfg_chinfo(void *hal, struct rtw_phl_stainfo_t *sta, u8 enable)
{
   struct hal_info_t *hal_info = (struct hal_info_t *)hal;
   struct chinfo_bbcr_cfg bbcr = {0};
   u8 mode = 0, filter = 0, sg_size = 0;
   enum rtw_hal_status hal_status = RTW_HAL_STATUS_FAILURE;
   u8 macid = (u8)sta->macid;
   /*
    *TODO: Discuss how to config accroding to different mode.
    *    Currently, macid, mode, filter, sg_size use default value,
    *    which is hard code in rtw_hal_mac_chan_info_cfg.
    */
   hal_status = rtw_hal_mac_chan_info_cfg(hal_info, enable, macid, mode, filter, sg_size);
   if (hal_status == RTW_HAL_STATUS_SUCCESS) {
       if (enable) {
           /*
            *Below is Example code for BBCR set to Legacy channel 80MHz
            *TODO 1: need to calculate channel raw data size to see if
            *    it is acceptable.
            *TODO 2: there should be 10 sets of pre-defined configuration for BBCR.
            *    need to decide which CR to use.
            */
           bbcr.ch_i_phy0_en =1;
           bbcr.ch_i_phy1_en = 0;
           bbcr.ch_i_grp_num_he = 1;
           bbcr.ch_i_grp_num_non_he = 1;
           bbcr.ch_i_data_src = 0; /*LS, channel estimation*/
           bbcr.ch_i_cmprs = 0; /*8 bits*/
           bbcr.ch_i_ele_bitmap = 0x101;
           bbcr.ch_i_blk_start_idx = 1;
           bbcr.ch_i_blk_end_idx = 10;
           bbcr.ch_i_type = 0; /* legacy channel*/
           bbcr.ch_i_seg_len = 0; /*12*/
           rtw_hal_bb_chan_info_cfg(hal_info, &bbcr);
       }
   }
 
   return hal_status;
}
 
void
_hal_fill_csi_header_remain(void* hal, struct csi_header_t *csi_header
   , struct rtw_r_meta_data *mdata)
{
   struct hal_info_t *hal_info = (struct hal_info_t *)hal;
   struct rtw_hal_com_t *h = hal_info->hal_com;
 
   /* from mdata */
   csi_header->hw_assigned_timestamp = mdata->freerun_cnt;
   csi_header->rx_data_rate = mdata->rx_rate;
   csi_header->bandwidth = mdata->bw;
   csi_header->ch_matrix_report = mdata->get_ch_info;
   /* TODO: from drv define, get value from other side.*/
   csi_header->channel = 0;
   csi_header->num_sub_carrier = 0;
   csi_header->num_bit_per_tone = 0;
   /* Others: mac addres not from TA ? */
   /* hal_mem_cpy(h, &(csi_header->mac_addr[0]), &(mdata->ta[0]), MAC_ALEN); */
}
 
void
_hal_fill_csi_header_phy_info(void* hal, struct csi_header_t *csi_header
   , struct ch_rpt_hdr_info *ch_hdr_rpt, struct phy_info_rpt *phy_info)
{
   struct hal_info_t *hal_info = (struct hal_info_t *)hal;
   struct rtw_hal_com_t *h = hal_info->hal_com;
 
   /* Initialize csi header */
   hal_mem_set(h, csi_header, 0, sizeof(struct csi_header_t));
   /* from phy_info_rpt */
   hal_mem_cpy(h, &(csi_header->rssi[0]), &(phy_info->rssi[0]), 2);
   csi_header->rxsc = phy_info->rxsc;
   /* from ch_rpt_hdr_info */
   csi_header->nc = ch_hdr_rpt->n_rx;
   csi_header->nr = ch_hdr_rpt->n_sts;
   csi_header->avg_idle_noise_pwr = ch_hdr_rpt->avg_noise_pow;
   csi_header->csi_data_length = (ch_hdr_rpt->total_len_l <<16 | ch_hdr_rpt->total_len_m)
       - 16; /* header(8byte) + Phy_info_in_seg_0(8byte) */
   csi_header->csi_valid = ch_hdr_rpt->set_valid;
   hal_mem_cpy(h, &(csi_header->evm[0]), &(ch_hdr_rpt->evm[0]), 2);
}
 
#endif /* CONFIG_PHL_CHANNEL_INFO */