/******************************************************************************
|
*
|
* 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.
|
*
|
*****************************************************************************/
|
#ifndef _HALRF_PWR_TABLE_H_
|
#define _HALRF_PWR_TABLE_H_
|
|
/*@--------------------------Define Parameters-------------------------------*/
|
#define TX_PWR_BY_RATE_NUM_BAND 3
|
#define TX_PWR_BY_RATE_NUM_RF 4
|
|
#define PW_LMT_MAX_2G_BANDWITH_NUM 2
|
#define PW_LMT_MAX_CHANNEL_NUMBER_2G 14
|
#define PW_LMT_MAX_CHANNEL_NUMBER_5G 53
|
|
#define TX_PWR_BY_RATE_NUM_MAC 44
|
#define TX_PWR_LIMIT_NUM_MAC 80
|
#define TX_PWR_LIMIT_RU_NUM_MAC 30
|
|
#define RADIO_TO_FW_PAGE_SIZE 6
|
#define RADIO_TO_FW_DATA_SIZE 500
|
|
|
/*@-----------------------End Define Parameters-----------------------*/
|
/*power by rate*/
|
enum halrf_pw_by_rate_para_type {
|
PW_BYRATE_PARA_NSS1,
|
PW_BYRATE_PARA_NSS2,
|
PW_BYRATE_PARA_OFFS = 0xF
|
};
|
|
enum halrf_pw_by_rate_rate_type {
|
PW_BYRATE_RATE_11M_1M,
|
PW_BYRATE_RATE_18M_6M,
|
PW_BYRATE_RATE_54M_24M,
|
PW_BYRATE_RATE_MCS3_0,
|
PW_BYRATE_RATE_MCS7_4,
|
PW_BYRATE_RATE_MCS11_8,
|
PW_BYRATE_RATE_DCM4_0,
|
PW_BYRATE_RATE_AllRate2_1, /* CCK, OFDM, HT, VHT */
|
PW_BYRATE_RATE_AllRate2_2, /* HE_HEDCM */
|
PW_BYRATE_RATE_AllRate5_1, /* OFDM, HT, VHT, HE_HEDCM */
|
PW_BYRATE_RATE_NULL = 0xF
|
};
|
|
struct _halrf_file_regd_ext {
|
u16 domain;
|
char country[2];
|
char reg_name[10];
|
};
|
|
/*power limit*/
|
struct halrf_tx_pw_lmt {
|
u8 band;
|
u8 bw;
|
u8 ntx;
|
u8 rs;
|
u8 bf;
|
u8 reg;
|
u8 ch;
|
s8 val;
|
u8 tx_shap_idx;
|
};
|
|
struct halrf_tx_pw_lmt_ru {
|
u8 band;
|
u8 bw;
|
u8 ntx;
|
u8 rs;
|
u8 reg;
|
u8 ch;
|
s8 val;
|
u8 tx_shap_idx;
|
};
|
|
enum halrf_tx_pw_lmt_ru_bandwidth_type {
|
PW_LMT_RU_BW_RU26 = 0,
|
PW_LMT_RU_BW_RU52,
|
PW_LMT_RU_BW_RU106,
|
PW_LMT_RU_BW_NULL
|
};
|
|
enum halrf_pw_lmt_regulation_type {
|
PW_LMT_REGU_WW13 = 0,
|
PW_LMT_REGU_ETSI = 1,
|
PW_LMT_REGU_FCC = 2,
|
PW_LMT_REGU_MKK = 3,
|
PW_LMT_REGU_NA = 4,
|
PW_LMT_REGU_IC = 5,
|
PW_LMT_REGU_KCC = 6,
|
PW_LMT_REGU_ACMA = 7,
|
PW_LMT_REGU_NCC = 8,
|
PW_LMT_REGU_MEXICO = 9,
|
PW_LMT_REGU_CHILE = 10,
|
PW_LMT_REGU_UKRAINE = 11,
|
PW_LMT_REGU_CN = 12,
|
PW_LMT_REGU_QATAR = 13,
|
/* place predefined ones above */
|
PW_LMT_REGU_EXT_PWR,
|
PW_LMT_REGU_PREDEF_NUM,
|
PW_LMT_REGU_NULL, /* declare this to PW_LMT_MAX_REGULATION_NUM after limit array remove usage of PW_LMT_REGU_NULL */
|
PW_LMT_MAX_REGULATION_NUM = 32
|
};
|
|
enum halrf_tx_shape_modu_type {
|
TX_SHAPE_CCK,
|
TX_SHAPE_OFDM,
|
TX_SHAPE_MAX
|
};
|
|
enum halrf_pw_lmt_band_type {
|
PW_LMT_BAND_2_4G = 0,
|
PW_LMT_BAND_5G = 1,
|
PW_LMT_BAND_6G = 2,
|
PW_LMT_MAX_BAND = 3
|
};
|
|
enum halrf_pw_lmt_bandwidth_type {
|
PW_LMT_BW_20M = 0,
|
PW_LMT_BW_40M = 1,
|
PW_LMT_BW_80M = 2,
|
PW_LMT_BW_160M = 3,
|
PW_LMT_MAX_BANDWIDTH_NUM = 4
|
};
|
|
enum halrf_pw_lmt_ratesection_type {
|
PW_LMT_RS_CCK = 0,
|
PW_LMT_RS_OFDM = 1,
|
PW_LMT_RS_HT = 2,
|
PW_LMT_RS_VHT = 3,
|
PW_LMT_RS_HE = 4,
|
PW_LMT_MAX_RS_NUM = 5
|
};
|
|
enum halrf_pw_lmt_rfpath_type {
|
PW_LMT_PH_1T = 0,
|
PW_LMT_PH_2T = 1,
|
PW_LMT_PH_3T = 2,
|
PW_LMT_PH_4T = 3,
|
PW_LMT_MAX_PH_NUM = 4
|
};
|
|
enum halrf_pw_lmt_beamforming_type {
|
PW_LMT_NONBF = 0,
|
PW_LMT_BF = 1,
|
PW_LMT_MAX_BF_NUM = 2
|
};
|
|
enum halrf_data_rate {
|
HALRF_DATA_RATE_CCK1 = 0,
|
HALRF_DATA_RATE_CCK2 = 0x1,
|
HALRF_DATA_RATE_CCK5_5,
|
HALRF_DATA_RATE_CCK11,
|
HALRF_DATA_RATE_OFDM6,
|
HALRF_DATA_RATE_OFDM9,
|
HALRF_DATA_RATE_OFDM12,
|
HALRF_DATA_RATE_OFDM18,
|
HALRF_DATA_RATE_OFDM24,
|
HALRF_DATA_RATE_OFDM36,
|
HALRF_DATA_RATE_OFDM48 = 10,
|
HALRF_DATA_RATE_OFDM54,
|
HALRF_DATA_RATE_MCS0,
|
HALRF_DATA_RATE_MCS1,
|
HALRF_DATA_RATE_MCS2,
|
HALRF_DATA_RATE_MCS3,
|
HALRF_DATA_RATE_MCS4,
|
HALRF_DATA_RATE_MCS5,
|
HALRF_DATA_RATE_MCS6,
|
HALRF_DATA_RATE_MCS7,
|
HALRF_DATA_RATE_MCS8 = 20,
|
HALRF_DATA_RATE_MCS9,
|
HALRF_DATA_RATE_MCS10,
|
HALRF_DATA_RATE_MCS11,
|
HALRF_DATA_RATE_MCS12,
|
HALRF_DATA_RATE_MCS13,
|
HALRF_DATA_RATE_MCS14,
|
HALRF_DATA_RATE_MCS15,
|
HALRF_DATA_RATE_MCS16,
|
HALRF_DATA_RATE_MCS17,
|
HALRF_DATA_RATE_MCS18 = 30,
|
HALRF_DATA_RATE_MCS19,
|
HALRF_DATA_RATE_MCS20,
|
HALRF_DATA_RATE_MCS21,
|
HALRF_DATA_RATE_MCS22,
|
HALRF_DATA_RATE_MCS23,
|
HALRF_DATA_RATE_MCS24,
|
HALRF_DATA_RATE_MCS25,
|
HALRF_DATA_RATE_MCS26,
|
HALRF_DATA_RATE_MCS27,
|
HALRF_DATA_RATE_MCS28 = 40,
|
HALRF_DATA_RATE_MCS29,
|
HALRF_DATA_RATE_MCS30,
|
HALRF_DATA_RATE_MCS31,
|
HALRF_DATA_RATE_VHT_NSS1_MCS0,
|
HALRF_DATA_RATE_VHT_NSS1_MCS1,
|
HALRF_DATA_RATE_VHT_NSS1_MCS2,
|
HALRF_DATA_RATE_VHT_NSS1_MCS3,
|
HALRF_DATA_RATE_VHT_NSS1_MCS4,
|
HALRF_DATA_RATE_VHT_NSS1_MCS5,
|
HALRF_DATA_RATE_VHT_NSS1_MCS6 = 50,
|
HALRF_DATA_RATE_VHT_NSS1_MCS7,
|
HALRF_DATA_RATE_VHT_NSS1_MCS8,
|
HALRF_DATA_RATE_VHT_NSS1_MCS9,
|
HALRF_DATA_RATE_VHT_NSS2_MCS0,
|
HALRF_DATA_RATE_VHT_NSS2_MCS1,
|
HALRF_DATA_RATE_VHT_NSS2_MCS2,
|
HALRF_DATA_RATE_VHT_NSS2_MCS3,
|
HALRF_DATA_RATE_VHT_NSS2_MCS4,
|
HALRF_DATA_RATE_VHT_NSS2_MCS5,
|
HALRF_DATA_RATE_VHT_NSS2_MCS6 = 60,
|
HALRF_DATA_RATE_VHT_NSS2_MCS7,
|
HALRF_DATA_RATE_VHT_NSS2_MCS8,
|
HALRF_DATA_RATE_VHT_NSS2_MCS9,
|
HALRF_DATA_RATE_VHT_NSS3_MCS0,
|
HALRF_DATA_RATE_VHT_NSS3_MCS1,
|
HALRF_DATA_RATE_VHT_NSS3_MCS2,
|
HALRF_DATA_RATE_VHT_NSS3_MCS3,
|
HALRF_DATA_RATE_VHT_NSS3_MCS4,
|
HALRF_DATA_RATE_VHT_NSS3_MCS5,
|
HALRF_DATA_RATE_VHT_NSS3_MCS6 = 70,
|
HALRF_DATA_RATE_VHT_NSS3_MCS7,
|
HALRF_DATA_RATE_VHT_NSS3_MCS8,
|
HALRF_DATA_RATE_VHT_NSS3_MCS9,
|
HALRF_DATA_RATE_VHT_NSS4_MCS0,
|
HALRF_DATA_RATE_VHT_NSS4_MCS1,
|
HALRF_DATA_RATE_VHT_NSS4_MCS2,
|
HALRF_DATA_RATE_VHT_NSS4_MCS3,
|
HALRF_DATA_RATE_VHT_NSS4_MCS4,
|
HALRF_DATA_RATE_VHT_NSS4_MCS5,
|
HALRF_DATA_RATE_VHT_NSS4_MCS6 = 80,
|
HALRF_DATA_RATE_VHT_NSS4_MCS7,
|
HALRF_DATA_RATE_VHT_NSS4_MCS8,
|
HALRF_DATA_RATE_VHT_NSS4_MCS9,
|
HALRF_DATA_RATE_HE_NSS1_MCS0,
|
HALRF_DATA_RATE_HE_NSS1_MCS1,
|
HALRF_DATA_RATE_HE_NSS1_MCS2,
|
HALRF_DATA_RATE_HE_NSS1_MCS3,
|
HALRF_DATA_RATE_HE_NSS1_MCS4,
|
HALRF_DATA_RATE_HE_NSS1_MCS5,
|
HALRF_DATA_RATE_HE_NSS1_MCS6 = 90,
|
HALRF_DATA_RATE_HE_NSS1_MCS7,
|
HALRF_DATA_RATE_HE_NSS1_MCS8,
|
HALRF_DATA_RATE_HE_NSS1_MCS9,
|
HALRF_DATA_RATE_HE_NSS1_MCS10,
|
HALRF_DATA_RATE_HE_NSS1_MCS11,
|
HALRF_DATA_RATE_HE_NSS2_MCS0,
|
HALRF_DATA_RATE_HE_NSS2_MCS1,
|
HALRF_DATA_RATE_HE_NSS2_MCS2,
|
HALRF_DATA_RATE_HE_NSS2_MCS3,
|
HALRF_DATA_RATE_HE_NSS2_MCS4 = 100,
|
HALRF_DATA_RATE_HE_NSS2_MCS5,
|
HALRF_DATA_RATE_HE_NSS2_MCS6,
|
HALRF_DATA_RATE_HE_NSS2_MCS7,
|
HALRF_DATA_RATE_HE_NSS2_MCS8,
|
HALRF_DATA_RATE_HE_NSS2_MCS9,
|
HALRF_DATA_RATE_HE_NSS2_MCS10,
|
HALRF_DATA_RATE_HE_NSS2_MCS11,
|
HALRF_DATA_RATE_HE_NSS3_MCS0,
|
HALRF_DATA_RATE_HE_NSS3_MCS1,
|
HALRF_DATA_RATE_HE_NSS3_MCS2 = 110,
|
HALRF_DATA_RATE_HE_NSS3_MCS3,
|
HALRF_DATA_RATE_HE_NSS3_MCS4,
|
HALRF_DATA_RATE_HE_NSS3_MCS5,
|
HALRF_DATA_RATE_HE_NSS3_MCS6,
|
HALRF_DATA_RATE_HE_NSS3_MCS7,
|
HALRF_DATA_RATE_HE_NSS3_MCS8,
|
HALRF_DATA_RATE_HE_NSS3_MCS9,
|
HALRF_DATA_RATE_HE_NSS3_MCS10,
|
HALRF_DATA_RATE_HE_NSS3_MCS11,
|
HALRF_DATA_RATE_HE_NSS4_MCS0 = 120,
|
HALRF_DATA_RATE_HE_NSS4_MCS1,
|
HALRF_DATA_RATE_HE_NSS4_MCS2,
|
HALRF_DATA_RATE_HE_NSS4_MCS3,
|
HALRF_DATA_RATE_HE_NSS4_MCS4,
|
HALRF_DATA_RATE_HE_NSS4_MCS5,
|
HALRF_DATA_RATE_HE_NSS4_MCS6,
|
HALRF_DATA_RATE_HE_NSS4_MCS7,
|
HALRF_DATA_RATE_HE_NSS4_MCS8,
|
HALRF_DATA_RATE_HE_NSS4_MCS9,
|
HALRF_DATA_RATE_HE_NSS4_MCS10 = 130,
|
HALRF_DATA_RATE_HE_NSS4_MCS11,
|
HALRF_DATA_RATE_HEDCM_NSS1_MCS0,
|
HALRF_DATA_RATE_HEDCM_NSS1_MCS1,
|
HALRF_DATA_RATE_HEDCM_NSS1_MCS3,
|
HALRF_DATA_RATE_HEDCM_NSS1_MCS4,
|
HALRF_DATA_RATE_HEDCM_NSS2_MCS0,
|
HALRF_DATA_RATE_HEDCM_NSS2_MCS1,
|
HALRF_DATA_RATE_HEDCM_NSS2_MCS3,
|
HALRF_DATA_RATE_HEDCM_NSS2_MCS4,
|
HALRF_DATA_RATE_HEDCM_OFFSET = 140,
|
HALRF_DATA_RATE_VHT_OFFSET,
|
HALRF_DATA_RATE_HT_OFFSET,
|
HALRF_DATA_RATE_OFDM_OFFSET,
|
HALRF_DATA_RATE_CCK_OFFSET,
|
HALRF_DATA_RATE_MAX
|
};
|
|
struct halrf_pwr_info {
|
/*Power by Rate and Power Limit Switch*/
|
u8 pwr_table_switch_efuse;
|
u8 pwr_by_rate_switch;
|
u8 pwr_limit_switch;
|
|
bool regulation[PW_LMT_MAX_BAND][PW_LMT_MAX_REGULATION_NUM];
|
u8 tx_shap_idx[PW_LMT_MAX_BAND][TX_SHAPE_MAX][PW_LMT_MAX_REGULATION_NUM];
|
s8 tx_pwr_by_rate[TX_PWR_BY_RATE_NUM_BAND][HALRF_DATA_RATE_MAX];
|
|
s8 tx_pwr_limit_2g[PW_LMT_MAX_REGULATION_NUM][PW_LMT_MAX_2G_BANDWITH_NUM]
|
[PW_LMT_MAX_RS_NUM][PW_LMT_MAX_BF_NUM][PW_LMT_MAX_CHANNEL_NUMBER_2G][MAX_HALRF_PATH];
|
|
s8 tx_pwr_limit_5g[PW_LMT_MAX_REGULATION_NUM][PW_LMT_MAX_BANDWIDTH_NUM]
|
[PW_LMT_MAX_RS_NUM][PW_LMT_MAX_BF_NUM][PW_LMT_MAX_CHANNEL_NUMBER_5G][MAX_HALRF_PATH];
|
|
s8 tx_pwr_limit_ru_2g[PW_LMT_MAX_REGULATION_NUM][PW_LMT_RU_BW_NULL]
|
[PW_LMT_MAX_RS_NUM][PW_LMT_MAX_CHANNEL_NUMBER_2G][MAX_HALRF_PATH];
|
|
s8 tx_pwr_limit_ru_5g[PW_LMT_MAX_REGULATION_NUM][PW_LMT_RU_BW_NULL]
|
[PW_LMT_MAX_RS_NUM][PW_LMT_MAX_CHANNEL_NUMBER_5G][MAX_HALRF_PATH];
|
|
s8 tx_pwr_by_rate_mac[HW_PHY_MAX][TX_PWR_BY_RATE_NUM_MAC];
|
|
s8 tx_pwr_limit_mac[HW_PHY_MAX][TX_PWR_LIMIT_NUM_MAC];
|
|
s8 tx_pwr_limit_ru_mac[HW_PHY_MAX][TX_PWR_LIMIT_RU_NUM_MAC];
|
s16 tx_pwr_limit_ru26_mac[HW_PHY_MAX];
|
s16 tx_pwr_limit_ru52_mac[HW_PHY_MAX];
|
s16 tx_pwr_limit_ru106_mac[HW_PHY_MAX];
|
bool coex_pwr_ctl_enable;
|
bool dpk_pwr_ctl_enable;
|
s32 coex_pwr;
|
s32 dpk_pwr;
|
u8 mp_regulation;
|
u8 regulation_idx;
|
u8 regulation_str[10];
|
bool fix_power[MAX_HALRF_PATH];
|
s8 fix_power_dbm[MAX_HALRF_PATH];
|
bool set_tx_ptrn_shap_en;
|
u8 set_tx_ptrn_shap_idx[PW_LMT_MAX_BAND][TX_SHAPE_MAX];
|
};
|
|
extern const char * const _pw_lmt_regu_type_str[PW_LMT_MAX_REGULATION_NUM];
|
#define pw_lmt_regu_type_str(lmt) ((lmt) < PW_LMT_MAX_REGULATION_NUM ? _pw_lmt_regu_type_str[(lmt)] : NULL)
|
|
extern const enum halrf_pw_lmt_regulation_type _regulation_to_pw_lmt_regu_type[REGULATION_MAX];
|
#define regulation_to_pw_lmt_regu_type(reg) ((reg) < REGULATION_MAX ? _regulation_to_pw_lmt_regu_type[(reg)] : PW_LMT_REGU_WW13)
|
|
extern const enum halrf_pw_lmt_regulation_type _tpo_to_pw_lmt_regu_type[TPO_NA];
|
#define tpo_to_pw_lmt_regu_type(reg) ((reg) < TPO_NA ? _tpo_to_pw_lmt_regu_type[(reg)] : PW_LMT_REGU_WW13)
|
|
u8 halrf_get_regulation_info(struct rf_info *rf, u8 band);
|
|
void halrf_power_by_rate_store_to_array(struct rf_info *rf,
|
u32 band, u32 tx_num, u32 rate_id, u32 data);
|
void halrf_power_limit_store_to_array(struct rf_info *rf,
|
u8 regulation, u8 band, u8 bandwidth, u8 rate,
|
u8 tx_num, u8 beamforming, u8 chnl, s8 val);
|
void halrf_power_limit_set_worldwide(struct rf_info *rf);
|
void halrf_power_limit_ru_store_to_array(struct rf_info *rf,
|
u8 band, u8 bandwidth, u8 tx_num, u8 rate,
|
u8 regulation, u8 chnl, s8 val);
|
void halrf_power_limit_ru_set_worldwide(struct rf_info *rf);
|
|
u8 halrf_get_power_limit_extra(struct rf_info *rf);
|
|
#endif
|