Files
kunlun/plc/halphy/rf_tone_map.c
2024-09-28 14:24:04 +08:00

685 lines
21 KiB
C

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#include "iot_config.h"
#include "hw_tonemap.h"
#include "rf_hw_tonemap.h"
#include "phy_rf_chn.h"
#include "iot_errno.h"
#include "plc_utils.h"
#include "iot_io.h"
#include "iot_utils_api.h"
#if HPLC_RF_DEV_SUPPORT
#define RF_MCS_RA_TBL_GET(_TBL, _IDX, _ITEM) (_TBL[_IDX]._ITEM)
#define RF_MCS_RA_TBL_SZ() IOT_ARRAY_CNT(g_rf_mcs_ra_tbl)
#define RF_MCS_RA_PHR(_IDX) \
RF_MCS_RA_TBL_GET(g_rf_mcs_ra_tbl, _IDX, phr_mcs)
#define RF_MCS_RA_PSDU(_IDX) \
RF_MCS_RA_TBL_GET(g_rf_mcs_ra_tbl, _IDX, psdu_mcs)
#define RF_MCS_RA_ENA(_OPT, _IDX) \
(!!(RF_MCS_RA_TBL_GET(g_rf_mcs_ra_tbl, _IDX, ena_opt_bm) \
& (1 << ((_OPT) - 1))))
typedef struct _rf_mcs_rate_tbl {
uint8_t phr_mcs;
uint8_t psdu_mcs;
/* option enable bitmap. bit0:option1, bit1:option2 ... */
uint8_t ena_opt_bm;
} rf_mcs_rate_tbl_t;
/* phr fl, unit us */
static uint32_t g_stf_ltf_fl = 0;
/* phr fl, unit us */
static uint32_t g_sig_fl = 0;
/* phr fl, unit us */
static uint32_t g_phr_fl[MCS_ID_MAX] = { 0 };
/* psdu fl, unit us */
static uint32_t g_psdu_fl[MCS_ID_MAX][BLOCK_SIZE_MAX] = { 0 };
/* psdu fl, unit ntb */
static uint32_t g_psdu_fl_ntb[MCS_ID_MAX][BLOCK_SIZE_MAX] = { 0 };
/* tx sack mcs */
static uint32_t g_tx_sack_mcs = 0;
/* stf + ltf + sig fl, unit ntb */
static uint32_t g_stf_ltf_sig_ntb[PHY_RF_OPTION_MAX] = { 0 };
static const rf_option_info_entry_t rf_option_tonemap[] = {
{PHY_RF_OPTION1_1M, 1, 96},
{PHY_RF_OPTION2_500K, 2, 48},
{PHY_RF_OPTION3_200K, 2, 18},
};
static const rf_tonemap_table_entry rf_phr_tonemap_table[] = {
/* robo_cnt, modulation, resv0, coding_rate_idx */
{ROBO_COPY_6, MODULATION_BPSK, 0, CODING_RATE_1_2}, // phrmcs 0
{ROBO_COPY_4, MODULATION_BPSK, 0, CODING_RATE_1_2}, // phrmcs 1
{ROBO_COPY_3, MODULATION_BPSK, 0, CODING_RATE_1_2}, // phrmcs 2
{ROBO_COPY_2, MODULATION_BPSK, 0, CODING_RATE_1_2}, // phrmcs 3
{ROBO_COPY_2, MODULATION_QPSK, 0, CODING_RATE_1_2}, // phrmcs 4
{ROBO_COPY_1, MODULATION_QPSK, 0, CODING_RATE_1_2}, // phrmcs 5
{ROBO_COPY_1, MODULATION_QPSK, 0, CODING_RATE_4_5}, // phrmcs 6
};
static const rf_tonemap_table_entry rf_psdu_tonemap_table[] = {
/* robo_cnt, modulation, resv0, coding_rate_idx */
{ROBO_COPY_4, MODULATION_BPSK, 0, CODING_RATE_1_2}, // psdumcs 0
{ROBO_COPY_2, MODULATION_BPSK, 0, CODING_RATE_1_2}, // psdumcs 1
{ROBO_COPY_2, MODULATION_QPSK, 0, CODING_RATE_1_2}, // psdumcs 2
{ROBO_COPY_1, MODULATION_QPSK, 0, CODING_RATE_1_2}, // psdumcs 3
{ROBO_COPY_1, MODULATION_QPSK, 0, CODING_RATE_4_5}, // psdumcs 4
{ROBO_COPY_1, MODULATION_16QAM, 0, CODING_RATE_1_2}, // psdumcs 5
{ROBO_COPY_1, MODULATION_16QAM, 0, CODING_RATE_4_5}, // psdumcs 6
};
static const robo_inter_table_entry rf_option1_2_robo_inter_table[] = {
{ROBO_COPY_1, INTER_1}, // id 0
{ROBO_COPY_2, INTER_4}, // id 1
{ROBO_COPY_3, INTER_6}, // id 2
{ROBO_COPY_4, INTER_4}, // id 3
{ROBO_COPY_6, INTER_6}, // id 4
};
static const robo_inter_table_entry rf_option3_robo_inter_table[] = {
{ROBO_COPY_1, INTER_1}, // id 0
{ROBO_COPY_2, INTER_2}, // id 1
{ROBO_COPY_3, INTER_6}, // id 2
{ROBO_COPY_4, INTER_4}, // id 3
{ROBO_COPY_6, INTER_6}, // id 4
};
/* NOTE: option3 phrmcs need start with 2 for rf certification test */
/* NOTE: option3 pldmcs need start with 1 for rf certification test */
static const rf_mcs_rate_tbl_t g_rf_mcs_ra_tbl[] = {
/* phr_mcs, psdu_mcs, option enable bitmap */
/*00*/ { 0, 0, 0x03 }, /* snr: -6.78, -5.02 */
/*01*/ { 0, 1, 0x03 }, /* snr: -6.78, -2.01 */
/*02*/ { 1, 0, 0x03 }, /* snr: -5.02, -5.02 */
/*03*/ { 2, 1, 0x07 }, /* snr: -3.77, -2.01 */
/*04*/ { 2, 2, 0x07 }, /* snr: -3.77, 0.99 */
/*05*/ { 3, 1, 0x07 }, /* snr: -2.01, -2.01 */
/*06*/ { 4, 2, 0x07 }, /* snr: 0.99, 0.99 */
/*07*/ { 5, 3, 0x07 }, /* snr: 4, 4 */
/*08*/ { 6, 4, 0x07 }, /* snr: 6.50, 6.50 */
/*09*/ { 6, 5, 0x07 }, /* snr: 6.50, 10 */
/*10*/ { 6, 6, 0x07 }, /* snr: 6.50, 12.50 */
};
static const rf_mcs_table_t g_rf_bcn_fix_mcs_tlb[][BLOCK_SIZE_MAX] = {
/* option 1 */
{
/* phr_mcs , psdu_mcs ******************* phr_mcs , psdu_mcs fl/ms */
{ 0 , 1 }, // bcn 16byte snr: -6.78 -2.01 4.46
{ 0 , 1 }, // bcn 40byte snr: -6.78 -2.01 5.69
{ 0 , 1 }, // bcn 72byte snr: -6.78 -2.01 7.23
{ 0 , 1 }, // bcn 136byte snr: -6.78 -2.01 10.61
{ 0 , 1 }, // bcn 264byte snr: -6.78 -2.01 17.06
{ 0 , 1 }, // bcn 520byte snr: -6.78 -2.01 30.27
},
/* option 2 */
{
/* phr_mcs , psdu_mcs ******************* phr_mcs , psdu_mcs fl/ms */
{ 0 , 1 }, // bcn 16byte snr: -6.78 -2.01 7.84
{ 0 , 1 }, // bcn 40byte snr: -6.78 -2.01 10.30
{ 0 , 1 }, // bcn 72byte snr: -6.78 -2.01 13.52
{ 0 , 1 }, // bcn 136byte snr: -6.78 -2.01 20.13
{ 0 , 1 }, // bcn 264byte snr: -6.78 -2.01 33.19
{ 0 , 2 }, // bcn 520byte snr: -6.78 0.99 32.88
},
/* option 3 */
{
/* NOTE: option3 phrmcs need start with 2 for rf certification test */
/* NOTE: option3 pldmcs need start with 1 for rf certification test */
/* phr_mcs , psdu_mcs ******************* phr_mcs , psdu_mcs fl/ms */
{ 2 , 2 }, // bcn 16byte snr: -3.77 0.99 10.15
{ 2 , 2 }, // bcn 40byte snr: -3.77 0.99 13.38
{ 2 , 2 }, // bcn 72byte snr: -3.77 0.99 17.68
{ 2 , 2 }, // bcn 136byte snr: -3.77 0.99 26.43
{ 3 , 2 }, // bcn 264byte snr: -2.01 0.99 41.76
{ 3 , 3 }, // bcn 520byte snr: -2.01 4 41.33
},
};
static const rf_mcs_table_t g_rf_sof_fix_mcs_tlb[][BLOCK_SIZE_MAX] = {
/* option 1 */
{
/* phr_mcs , psdu_mcs ******************* phr_mcs , psdu_mcs fl/ms */
{ 0 , 1 }, // sof 16byte snr: -6.78 -2.01 4.46
{ 0 , 1 }, // sof 40byte snr: -6.78 -2.01 5.69
{ 0 , 1 }, // sof 72byte snr: -6.78 -2.01 7.23
{ 0 , 1 }, // sof 136byte snr: -6.78 -2.01 10.61
{ 0 , 1 }, // sof 264byte snr: -6.78 -2.01 17.06
{ 0 , 1 }, // sof 520byte snr: -6.78 -2.01 30.27
},
/* option 2 */
{
/* phr_mcs , psdu_mcs ******************* phr_mcs , psdu_mcs fl/ms */
{ 0 , 1 }, // sof 16byte snr: -6.78 -2.01 7.84
{ 0 , 1 }, // sof 40byte snr: -6.78 -2.01 10.30
{ 0 , 1 }, // sof 72byte snr: -6.78 -2.01 13.52
{ 0 , 1 }, // sof 136byte snr: -6.78 -2.01 20.13
{ 0 , 1 }, // sof 264byte snr: -6.78 -2.01 33.19
{ 0 , 2 }, // sof 520byte snr: -6.78 0.99 32.88
},
/* option 3 */
{
/* NOTE: option3 phrmcs need start with 2 for rf certification test */
/* NOTE: option3 pldmcs need start with 1 for rf certification test */
/* phr_mcs , psdu_mcs ******************* phr_mcs , psdu_mcs fl/ms */
{ 2 , 2 }, // sof 16byte snr: -3.77 0.99 10.15
{ 2 , 2 }, // sof 40byte snr: -3.77 0.99 13.38
{ 2 , 2 }, // sof 72byte snr: -3.77 0.99 17.68
{ 2 , 2 }, // sof 136byte snr: -3.77 0.99 26.43
{ 2 , 2 }, // sof 264byte snr: -3.77 0.99 43.94
{ 2 , 3 }, // sof 520byte snr: -3.77 4 43.48
},
};
/* get fix mcs */
#define PHY_RF_GET_BCN_FIX_MCS(option, idx) (&g_rf_bcn_fix_mcs_tlb[option][idx])
#define PHY_RF_GET_SOF_FIX_MCS(option, idx) (&g_rf_sof_fix_mcs_tlb[option][idx])
/* get phr param by phr mcs */
#define PHY_RF_GET_PHR_MCS_PARAM(phr_mcs) (&rf_phr_tonemap_table[phr_mcs])
/* get psdu param by psdu mcs */
#define PHY_RF_GET_PSDU_MCS_PARAM(psdu_mcs) (&rf_psdu_tonemap_table[psdu_mcs])
static uint32_t phy_rf_get_robo_inter(uint32_t option, uint32_t robo_cnt,
uint32_t *robo_inter)
{
uint32_t i, ret = ERR_OK;
if (option == PHY_RF_OPTION1_1M || option == PHY_RF_OPTION2_500K) {
for (i = 0; i < sizeof(rf_option1_2_robo_inter_table); i++) {
if(rf_option1_2_robo_inter_table[i].robo_cpy == robo_cnt) {
*robo_inter = rf_option1_2_robo_inter_table[i].inter_num;
break;
}
}
if (sizeof(rf_option1_2_robo_inter_table) == i) {
IOT_ASSERT(0);
ret = ERR_FAIL;
} else {
ret = ERR_OK;
}
} else if (option == PHY_RF_OPTION3_200K) {
for (i = 0; i < sizeof(rf_option3_robo_inter_table); i++) {
if(rf_option3_robo_inter_table[i].robo_cpy == robo_cnt) {
*robo_inter = rf_option3_robo_inter_table[i].inter_num;
break;
}
}
if (sizeof(rf_option3_robo_inter_table) == i) {
IOT_ASSERT(0);
ret = ERR_FAIL;
} else {
ret = ERR_OK;
}
} else {
IOT_ASSERT(0);
}
return ret;
}
static uint32_t phy_rf_get_vld_tone_num(uint32_t option)
{
uint32_t i;
IOT_ASSERT(option < PHY_RF_OPTION_MAX);
for (i = 0; i < sizeof(rf_option_tonemap); i++) {
if (rf_option_tonemap[i].option == option) {
return rf_option_tonemap[i].vld_tone_num;
}
}
if (sizeof(rf_option_tonemap) == i) {
IOT_ASSERT(0);
}
return ERR_FAIL;
}
static uint32_t phy_rf_get_sig_num(uint32_t option)
{
uint32_t i;
IOT_ASSERT(option < PHY_RF_OPTION_MAX);
for (i = 0; i < sizeof(rf_option_tonemap); i++) {
if (rf_option_tonemap[i].option == option) {
return rf_option_tonemap[i].sig_symbol_num;
}
}
if (sizeof(rf_option_tonemap) == i) {
IOT_ASSERT(0);
}
return ERR_FAIL;
}
static uint32_t phy_rf_get_phr_sym(uint32_t option, uint32_t phr_mcs)
{
uint32_t pbsz = RF_PHR_LEN;
uint32_t robo_inter = 0;
float coding_rate = 0;
uint32_t vld_tone_num = 0;
uint32_t sym_ppb;
const rf_tonemap_table_entry *phr_param = PHY_RF_GET_PHR_MCS_PARAM(phr_mcs);
phy_rf_get_robo_inter(option, phr_param->robo_cnt, &robo_inter);
if(phr_param->coding_rate_idx == CODING_RATE_1_2){
coding_rate = 0.5;
} else if(phr_param->coding_rate_idx == CODING_RATE_4_5){
coding_rate = (float)(4.0/5.0);
} else {
IOT_ASSERT(0);
}
/* get vaild tone */
vld_tone_num = phy_rf_get_vld_tone_num(option);
sym_ppb = (uint32_t)OFDM_SYMBOL_PER_PB(pbsz,
phr_param->robo_cnt,
coding_rate,
phr_param->modulation,
vld_tone_num,
robo_inter);
return sym_ppb;
}
static uint32_t phy_rf_get_psdu_sym(uint32_t option, uint32_t psdu_mcs,
uint32_t pb_idx)
{
uint32_t pbsz;
uint32_t robo_inter = 0;
float coding_rate = 0;
uint32_t vld_tone_num = 0;
uint32_t sym_ppb;
const rf_tonemap_table_entry *psdu_param = PHY_RF_GET_PSDU_MCS_PARAM(psdu_mcs);
phy_rf_get_robo_inter(option, psdu_param->robo_cnt, &robo_inter);
if(psdu_param->coding_rate_idx == CODING_RATE_1_2){
coding_rate = 0.5;
} else if(psdu_param->coding_rate_idx == CODING_RATE_4_5){
coding_rate = (float)(4.0/5.0);
} else {
IOT_ASSERT(0);
}
pbsz = phy_rf_get_pbsz((uint8_t)pb_idx);
/* get vaild tone */
vld_tone_num = phy_rf_get_vld_tone_num(option);
sym_ppb = (uint32_t)OFDM_SYMBOL_PER_PB(pbsz,
psdu_param->robo_cnt,
coding_rate,
psdu_param->modulation,
vld_tone_num,
robo_inter);
return sym_ppb;
}
static uint32_t phy_rf_get_stf_ltf_frame_len(uint32_t option)
{
IOT_ASSERT(option < PHY_RF_OPTION_MAX);
if (option == PHY_RF_OPTION1_1M || option == PHY_RF_OPTION2_500K) {
return STF_LTF_OPTION1_2_LEN;
} else if (option == PHY_RF_OPTION3_200K) {
return STF_LTF_OPTION3_LEN;
}
return ERR_FAIL;
}
static uint32_t phy_rf_get_sig_frame_len(uint32_t option)
{
uint32_t sig_num;
uint32_t sig_fl = 0;
IOT_ASSERT(option < PHY_RF_OPTION_MAX);
sig_num = phy_rf_get_sig_num(option);
sig_fl = sig_num * PER_SIG_LEN;
return sig_fl;
}
static uint32_t phy_rf_get_phr_frame_len(uint32_t option, uint32_t phr_mcs)
{
uint32_t sym_num = 0;
uint32_t phr_len = 0;
sym_num = phy_rf_get_phr_sym(option, phr_mcs);
phr_len = sym_num * PER_SIG_LEN;
/* unit us */
return phr_len;
}
static uint32_t phy_rf_get_psdu_frame_len(uint32_t option, uint32_t psdu_mcs,
uint32_t pb_idx)
{
uint32_t sym_num = 0;
uint32_t psdu_len = 0;
sym_num = phy_rf_get_psdu_sym(option, psdu_mcs, pb_idx);
psdu_len = sym_num * PSDU_SYMBOL_LEN;
/* unit ntb */
return psdu_len;
}
static uint32_t phy_rf_get_tx_sack_phr_mcs(uint32_t option)
{
uint32_t phr_mcs = MCS_ID_0;
IOT_ASSERT(option < PHY_RF_OPTION_MAX);
/* NOTE: option3 phrmcs need start with 2 for rf certification test */
if (PHY_RF_OPTION3_200K == option) {
phr_mcs = MCS_ID_2;
}
return phr_mcs;
}
static void phy_rf_stf_ltf_sig_fl_init()
{
uint32_t option = 0;
for (option = PHY_RF_OPTION1_1M; option < PHY_RF_OPTION_MAX; option++) {
g_stf_ltf_sig_ntb[option] = phy_rf_get_stf_ltf_frame_len(option) +
phy_rf_get_sig_frame_len(option);
}
}
uint32_t fl_debug()
{
uint32_t stf_ltf_fl = 0;
uint32_t sig_fl = 0;
uint32_t fl = 0;
uint32_t option = 0, phr_mcs, phr_sym, psdu_mcs, psdu_sym, pb_idx;
uint32_t phr_fl, psdu_fl;
for (option = PHY_RF_OPTION1_1M; option < PHY_RF_OPTION_MAX; option++) {
stf_ltf_fl = phy_rf_get_stf_ltf_frame_len(option);
sig_fl = phy_rf_get_sig_frame_len(option);
for (pb_idx = BLOCK_SIZE_0; pb_idx < BLOCK_SIZE_MAX; pb_idx++) {
for (phr_mcs = MCS_ID_0; phr_mcs < MCS_ID_MAX; phr_mcs++) {
phr_sym = phy_rf_get_phr_sym(option, phr_mcs);
for (psdu_mcs = MCS_ID_0; psdu_mcs < MCS_ID_MAX; psdu_mcs++) {
psdu_sym = phy_rf_get_psdu_sym(option, psdu_mcs, pb_idx);
phr_fl = phy_rf_get_phr_frame_len(option, phr_mcs);
psdu_fl = phy_rf_get_psdu_frame_len(option,
psdu_mcs, pb_idx);
fl = (stf_ltf_fl + sig_fl + phr_fl + psdu_fl) / 25;
iot_printf("option:%d, phr_mcs:%d, psdu_mcs:%d, pb_idx:%d, "
"phr_sym:%d, psdu_sym:%d, phr_fl:%d, psdu_fl:%d, fl:%d\n",
option, phr_mcs, psdu_mcs, pb_idx, phr_sym, psdu_sym,
phr_fl, psdu_fl, fl);
}
}
}
}
return 0;
}
uint32_t phy_rf_fl_init(uint32_t option)
{
float tmp = 0;
/* stf ltf init */
tmp = (float)phy_rf_get_stf_ltf_frame_len(option) / 25;
g_stf_ltf_fl = iot_float_ceil(tmp);
/* sig init */
tmp = (float)phy_rf_get_sig_frame_len(option) / 25;
g_sig_fl = iot_float_ceil(tmp);
/* phy header init */
for (uint32_t phr_mcs = 0; phr_mcs < MCS_ID_MAX; phr_mcs++) {
tmp = (float)phy_rf_get_phr_frame_len(option, phr_mcs) / 25;
g_phr_fl[phr_mcs] = iot_float_ceil(tmp);
}
/* psdu init */
for (uint32_t psdu_mcs = 0; psdu_mcs < MCS_ID_MAX; psdu_mcs++) {
for (uint32_t pbidx = BLOCK_SIZE_0; pbidx < BLOCK_SIZE_MAX; pbidx++) {
g_psdu_fl_ntb[psdu_mcs][pbidx] = phy_rf_get_psdu_frame_len(option,
psdu_mcs, pbidx);
tmp = (float)g_psdu_fl_ntb[psdu_mcs][pbidx] / 25;
g_psdu_fl[psdu_mcs][pbidx] = iot_float_ceil(tmp);
}
}
/* init stf ltf sig fl, uint ntb */
phy_rf_stf_ltf_sig_fl_init();
/* init tx sack mcs */
g_tx_sack_mcs = phy_rf_get_tx_sack_phr_mcs(option);
/* fl debug */
//fl_debug();
return ERR_OK;
}
uint32_t phy_rf_get_g_stf_ltf_fl()
{
return g_stf_ltf_fl;
}
uint32_t phy_rf_get_g_sig_fl()
{
return g_sig_fl;
}
uint32_t phy_rf_get_g_phr_fl(uint32_t phr_mcs)
{
IOT_ASSERT(phr_mcs < MCS_ID_MAX);
return g_phr_fl[phr_mcs];
}
uint32_t phy_rf_get_g_psdu_fl(uint32_t psdu_mcs, uint32_t pb_idx)
{
IOT_ASSERT(psdu_mcs < MCS_ID_MAX && pb_idx < BLOCK_SIZE_MAX);
return g_psdu_fl[psdu_mcs][pb_idx];
}
uint32_t phy_rf_get_g_psdu_fl_ntb(uint32_t psdu_mcs, uint32_t pb_idx)
{
IOT_ASSERT(psdu_mcs < MCS_ID_MAX && pb_idx < BLOCK_SIZE_MAX);
return g_psdu_fl_ntb[psdu_mcs][pb_idx];
}
uint32_t phy_rf_get_g_stf_ltf_sig_fl(uint32_t option)
{
return g_stf_ltf_sig_ntb[option];
}
const rf_mcs_table_t *phy_rf_get_bcn_fix_mcs(uint32_t option,
uint32_t pb_sz_idx)
{
IOT_ASSERT(option < PHY_RF_OPTION_MAX && pb_sz_idx < BLOCK_SIZE_MAX);
return PHY_RF_GET_BCN_FIX_MCS((option - 1), pb_sz_idx);
}
const rf_mcs_table_t *phy_rf_get_sof_fix_mcs(uint32_t option,
uint32_t pb_sz_idx)
{
IOT_ASSERT(option < PHY_RF_OPTION_MAX && pb_sz_idx < BLOCK_SIZE_MAX);
return PHY_RF_GET_SOF_FIX_MCS((option - 1), pb_sz_idx);
}
void phy_rf_get_ra_idx_range(uint8_t option, uint8_t *start, uint8_t *end)
{
if (RF_OPTION_3 == option) {
*start = 3;
} else {
*start = 0;
}
*end = RF_MCS_RA_TBL_SZ();
}
uint32_t phy_rf_get_ra_idx_mcs(uint8_t option, uint8_t idx, uint8_t *phr_mcs,
uint8_t *psdu_mcs)
{
if (RF_MCS_RA_ENA(option, idx)) {
*phr_mcs = RF_MCS_RA_PHR(idx);
*psdu_mcs = RF_MCS_RA_PSDU(idx);
return ERR_OK;
} else {
return ERR_NOSUPP;
}
}
uint32_t phy_rf_get_g_tx_sack_mcs()
{
return g_tx_sack_mcs;
}
#else /* !HPLC_RF_DEV_SUPPORT */
uint32_t phy_rf_fl_init(uint32_t option)
{
(void)option;
return ERR_OK;
}
uint32_t phy_rf_get_g_stf_ltf_fl()
{
return 0;
}
uint32_t phy_rf_get_g_sig_fl()
{
return 0;
}
uint32_t phy_rf_get_g_phr_fl(uint32_t phr_mcs)
{
(void)phr_mcs;
return 0;
}
uint32_t phy_rf_get_g_psdu_fl(uint32_t psdu_mcs, uint32_t pb_idx)
{
(void)psdu_mcs;
(void)pb_idx;
return 0;
}
uint32_t phy_rf_get_g_psdu_fl_ntb(uint32_t psdu_mcs, uint32_t pb_idx)
{
(void)psdu_mcs;
(void)pb_idx;
return 0;
}
uint32_t phy_rf_get_g_stf_ltf_sig_fl(uint32_t option)
{
(void)option;
return 0;
}
const rf_mcs_table_t *phy_rf_get_bcn_fix_mcs(uint32_t option,
uint32_t pb_sz_idx)
{
(void)option;
(void)pb_sz_idx;
return NULL;
}
const rf_mcs_table_t *phy_rf_get_sof_fix_mcs(uint32_t option,
uint32_t pb_sz_idx)
{
(void)option;
(void)pb_sz_idx;
return NULL;
}
void phy_rf_get_ra_idx_range(uint8_t option, uint8_t *start, uint8_t *end)
{
(void)option;
(void)start;
(void)end;
}
uint32_t phy_rf_get_ra_idx_mcs(uint8_t option, uint8_t idx, uint8_t *phr_mcs,
uint8_t *psdu_mcs)
{
(void)option;
(void)idx;
(void)phr_mcs;
(void)psdu_mcs;
return ERR_NOSUPP;
}
uint32_t phy_rf_get_g_tx_sack_mcs()
{
return MCS_ID_MAX;
}
#endif /* HPLC_RF_DEV_SUPPORT */
uint8_t phy_rf_get_blkz(uint32_t pbsz)
{
uint8_t blkz = BLOCK_SIZE_MAX;
switch (pbsz) {
case PB_SIZE_16:
blkz = BLOCK_SIZE_0;
break;
case PB_SIZE_40:
blkz = BLOCK_SIZE_1;
break;
case PB_SIZE_72:
blkz = BLOCK_SIZE_2;
break;
case PB_SIZE_136:
blkz = BLOCK_SIZE_3;
break;
case PB_SIZE_264:
blkz = BLOCK_SIZE_4;
break;
case PB_SIZE_520:
blkz = BLOCK_SIZE_5;
break;
default:
IOT_ASSERT(0);
break;
}
return blkz;
}
uint32_t phy_rf_get_pbsz(uint8_t blkz)
{
switch (blkz) {
case BLOCK_SIZE_0:
return PB_SIZE_16;
case BLOCK_SIZE_1:
return PB_SIZE_40;
case BLOCK_SIZE_2:
return PB_SIZE_72;
case BLOCK_SIZE_3:
return PB_SIZE_136;
case BLOCK_SIZE_4:
return PB_SIZE_264;
case BLOCK_SIZE_5:
return PB_SIZE_520;
default:
IOT_ASSERT(0);
break;
}
return PB_SIZE_INV;
}