mirror of https://github.com/torvalds/linux.git
wifi: mt76: move mt76_rate_power from core to mt76x02 driver code
Its layout and code is mt76x02 specific Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
94b9b9de05
commit
b376d96362
|
|
@ -100,23 +100,6 @@ void mt76_seq_puts_array(struct seq_file *file, const char *str,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_seq_puts_array);
|
||||
|
||||
static int mt76_read_rate_txpower(struct seq_file *s, void *data)
|
||||
{
|
||||
struct mt76_dev *dev = dev_get_drvdata(s->private);
|
||||
|
||||
mt76_seq_puts_array(s, "CCK", dev->rate_power.cck,
|
||||
ARRAY_SIZE(dev->rate_power.cck));
|
||||
mt76_seq_puts_array(s, "OFDM", dev->rate_power.ofdm,
|
||||
ARRAY_SIZE(dev->rate_power.ofdm));
|
||||
mt76_seq_puts_array(s, "STBC", dev->rate_power.stbc,
|
||||
ARRAY_SIZE(dev->rate_power.stbc));
|
||||
mt76_seq_puts_array(s, "HT", dev->rate_power.ht,
|
||||
ARRAY_SIZE(dev->rate_power.ht));
|
||||
mt76_seq_puts_array(s, "VHT", dev->rate_power.vht,
|
||||
ARRAY_SIZE(dev->rate_power.vht));
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct dentry *
|
||||
mt76_register_debugfs_fops(struct mt76_phy *phy,
|
||||
const struct file_operations *ops)
|
||||
|
|
@ -137,8 +120,6 @@ mt76_register_debugfs_fops(struct mt76_phy *phy,
|
|||
debugfs_create_blob("eeprom", 0400, dir, &dev->eeprom);
|
||||
if (dev->otp.data)
|
||||
debugfs_create_blob("otp", 0400, dir, &dev->otp);
|
||||
debugfs_create_devm_seqfile(dev->dev, "rate_txpower", dir,
|
||||
mt76_read_rate_txpower);
|
||||
debugfs_create_devm_seqfile(dev->dev, "rx-queues", dir,
|
||||
mt76_rx_queues_read);
|
||||
|
||||
|
|
|
|||
|
|
@ -470,19 +470,6 @@ struct mt76_sband {
|
|||
struct mt76_channel_state *chan;
|
||||
};
|
||||
|
||||
struct mt76_rate_power {
|
||||
union {
|
||||
struct {
|
||||
s8 cck[4];
|
||||
s8 ofdm[8];
|
||||
s8 stbc[10];
|
||||
s8 ht[16];
|
||||
s8 vht[10];
|
||||
};
|
||||
s8 all[48];
|
||||
};
|
||||
};
|
||||
|
||||
/* addr req mask */
|
||||
#define MT_VEND_TYPE_EEPROM BIT(31)
|
||||
#define MT_VEND_TYPE_CFG BIT(30)
|
||||
|
|
@ -802,8 +789,6 @@ struct mt76_dev {
|
|||
struct debugfs_blob_wrapper eeprom;
|
||||
struct debugfs_blob_wrapper otp;
|
||||
|
||||
struct mt76_rate_power rate_power;
|
||||
|
||||
char alpha2[3];
|
||||
enum nl80211_dfs_regions region;
|
||||
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ static s8 mt76x0_get_delta(struct mt76x02_dev *dev)
|
|||
|
||||
void mt76x0_get_tx_power_per_rate(struct mt76x02_dev *dev,
|
||||
struct ieee80211_channel *chan,
|
||||
struct mt76_rate_power *t)
|
||||
struct mt76x02_rate_power *t)
|
||||
{
|
||||
bool is_2ghz = chan->band == NL80211_BAND_2GHZ;
|
||||
u16 val, addr;
|
||||
|
|
@ -235,7 +235,7 @@ void mt76x0_get_power_info(struct mt76x02_dev *dev,
|
|||
data = mt76x02_eeprom_get(dev, MT_EE_5G_TARGET_POWER);
|
||||
else
|
||||
data = mt76x02_eeprom_get(dev, MT_EE_2G_TARGET_POWER);
|
||||
target_power = (data & 0xff) - dev->mt76.rate_power.ofdm[7];
|
||||
target_power = (data & 0xff) - dev->rate_power.ofdm[7];
|
||||
*tp = target_power + mt76x0_get_delta(dev);
|
||||
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ int mt76x0_eeprom_init(struct mt76x02_dev *dev);
|
|||
void mt76x0_read_rx_gain(struct mt76x02_dev *dev);
|
||||
void mt76x0_get_tx_power_per_rate(struct mt76x02_dev *dev,
|
||||
struct ieee80211_channel *chan,
|
||||
struct mt76_rate_power *t);
|
||||
struct mt76x02_rate_power *t);
|
||||
void mt76x0_get_power_info(struct mt76x02_dev *dev,
|
||||
struct ieee80211_channel *chan, s8 *tp);
|
||||
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ mt76x0_init_txpower(struct mt76x02_dev *dev,
|
|||
struct ieee80211_supported_band *sband)
|
||||
{
|
||||
struct ieee80211_channel *chan;
|
||||
struct mt76_rate_power t;
|
||||
struct mt76x02_rate_power t;
|
||||
s8 tp;
|
||||
int i;
|
||||
|
||||
|
|
|
|||
|
|
@ -598,7 +598,7 @@ mt76x0_phy_get_target_power(struct mt76x02_dev *dev, u8 tx_mode,
|
|||
if (tx_rate > 3)
|
||||
return -EINVAL;
|
||||
|
||||
*target_power = cur_power + dev->mt76.rate_power.cck[tx_rate];
|
||||
*target_power = cur_power + dev->rate_power.cck[tx_rate];
|
||||
*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 0, tx_rate);
|
||||
break;
|
||||
case 1: {
|
||||
|
|
@ -635,7 +635,7 @@ mt76x0_phy_get_target_power(struct mt76x02_dev *dev, u8 tx_mode,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
*target_power = cur_power + dev->mt76.rate_power.ofdm[index];
|
||||
*target_power = cur_power + dev->rate_power.ofdm[index];
|
||||
*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 0, index + 4);
|
||||
break;
|
||||
}
|
||||
|
|
@ -645,7 +645,7 @@ mt76x0_phy_get_target_power(struct mt76x02_dev *dev, u8 tx_mode,
|
|||
if (tx_rate > 9)
|
||||
return -EINVAL;
|
||||
|
||||
*target_power = cur_power + dev->mt76.rate_power.vht[tx_rate];
|
||||
*target_power = cur_power + dev->rate_power.vht[tx_rate];
|
||||
*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 1, tx_rate);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -654,7 +654,7 @@ mt76x0_phy_get_target_power(struct mt76x02_dev *dev, u8 tx_mode,
|
|||
if (tx_rate > 9)
|
||||
return -EINVAL;
|
||||
|
||||
*target_power = cur_power + dev->mt76.rate_power.ht[tx_rate];
|
||||
*target_power = cur_power + dev->rate_power.ht[tx_rate];
|
||||
*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 1, tx_rate);
|
||||
break;
|
||||
}
|
||||
|
|
@ -841,7 +841,7 @@ static void mt76x0_phy_tssi_calibrate(struct mt76x02_dev *dev)
|
|||
|
||||
void mt76x0_phy_set_txpower(struct mt76x02_dev *dev)
|
||||
{
|
||||
struct mt76_rate_power *t = &dev->mt76.rate_power;
|
||||
struct mt76x02_rate_power *t = &dev->rate_power;
|
||||
s8 info;
|
||||
|
||||
mt76x0_get_tx_power_per_rate(dev, dev->mphy.chandef.chan, t);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,19 @@ struct mt76x02_beacon_ops {
|
|||
#define mt76x02_pre_tbtt_enable(dev, enable) \
|
||||
(dev)->beacon_ops->pre_tbtt_enable(dev, enable)
|
||||
|
||||
struct mt76x02_rate_power {
|
||||
union {
|
||||
struct {
|
||||
s8 cck[4];
|
||||
s8 ofdm[8];
|
||||
s8 stbc[10];
|
||||
s8 ht[16];
|
||||
s8 vht[10];
|
||||
};
|
||||
s8 all[48];
|
||||
};
|
||||
};
|
||||
|
||||
struct mt76x02_dev {
|
||||
union { /* must be first */
|
||||
struct mt76_dev mt76;
|
||||
|
|
@ -107,6 +120,8 @@ struct mt76x02_dev {
|
|||
u8 beacon_hang_check;
|
||||
u8 mcu_timeout;
|
||||
|
||||
struct mt76x02_rate_power rate_power;
|
||||
|
||||
struct mt76x02_calibration cal;
|
||||
|
||||
int txpower_conf;
|
||||
|
|
|
|||
|
|
@ -114,6 +114,23 @@ mt76_edcca_get(void *data, u64 *val)
|
|||
DEFINE_DEBUGFS_ATTRIBUTE(fops_edcca, mt76_edcca_get, mt76_edcca_set,
|
||||
"%lld\n");
|
||||
|
||||
static int mt76x02_read_rate_txpower(struct seq_file *s, void *data)
|
||||
{
|
||||
struct mt76x02_dev *dev = dev_get_drvdata(s->private);
|
||||
|
||||
mt76_seq_puts_array(s, "CCK", dev->rate_power.cck,
|
||||
ARRAY_SIZE(dev->rate_power.cck));
|
||||
mt76_seq_puts_array(s, "OFDM", dev->rate_power.ofdm,
|
||||
ARRAY_SIZE(dev->rate_power.ofdm));
|
||||
mt76_seq_puts_array(s, "STBC", dev->rate_power.stbc,
|
||||
ARRAY_SIZE(dev->rate_power.stbc));
|
||||
mt76_seq_puts_array(s, "HT", dev->rate_power.ht,
|
||||
ARRAY_SIZE(dev->rate_power.ht));
|
||||
mt76_seq_puts_array(s, "VHT", dev->rate_power.vht,
|
||||
ARRAY_SIZE(dev->rate_power.vht));
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mt76x02_init_debugfs(struct mt76x02_dev *dev)
|
||||
{
|
||||
struct dentry *dir;
|
||||
|
|
@ -133,6 +150,8 @@ void mt76x02_init_debugfs(struct mt76x02_dev *dev)
|
|||
debugfs_create_devm_seqfile(dev->mt76.dev, "txpower", dir,
|
||||
read_txpower);
|
||||
|
||||
debugfs_create_devm_seqfile(dev->mt76.dev, "rate_txpower", dir,
|
||||
mt76x02_read_rate_txpower);
|
||||
debugfs_create_devm_seqfile(dev->mt76.dev, "agc", dir, read_agc);
|
||||
|
||||
debugfs_create_u32("tx_hang_reset", 0400, dir, &dev->tx_hang_reset);
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ mt76x02_tx_power_mask(u8 v1, u8 v2, u8 v3, u8 v4)
|
|||
return val;
|
||||
}
|
||||
|
||||
int mt76x02_get_max_rate_power(struct mt76_rate_power *r)
|
||||
int mt76x02_get_max_rate_power(struct mt76x02_rate_power *r)
|
||||
{
|
||||
s8 ret = 0;
|
||||
int i;
|
||||
|
|
@ -71,7 +71,7 @@ int mt76x02_get_max_rate_power(struct mt76_rate_power *r)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_get_max_rate_power);
|
||||
|
||||
void mt76x02_limit_rate_power(struct mt76_rate_power *r, int limit)
|
||||
void mt76x02_limit_rate_power(struct mt76x02_rate_power *r, int limit)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
@ -81,7 +81,7 @@ void mt76x02_limit_rate_power(struct mt76_rate_power *r, int limit)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_limit_rate_power);
|
||||
|
||||
void mt76x02_add_rate_power_offset(struct mt76_rate_power *r, int offset)
|
||||
void mt76x02_add_rate_power_offset(struct mt76x02_rate_power *r, int offset)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
@ -92,7 +92,7 @@ EXPORT_SYMBOL_GPL(mt76x02_add_rate_power_offset);
|
|||
|
||||
void mt76x02_phy_set_txpower(struct mt76x02_dev *dev, int txp_0, int txp_1)
|
||||
{
|
||||
struct mt76_rate_power *t = &dev->mt76.rate_power;
|
||||
struct mt76x02_rate_power *t = &dev->rate_power;
|
||||
|
||||
mt76_rmw_field(dev, MT_TX_ALC_CFG_0, MT_TX_ALC_CFG_0_CH_INIT_0, txp_0);
|
||||
mt76_rmw_field(dev, MT_TX_ALC_CFG_0, MT_TX_ALC_CFG_0_CH_INIT_1, txp_1);
|
||||
|
|
|
|||
|
|
@ -34,10 +34,10 @@ mt76x02_get_low_rssi_gain_thresh(struct mt76x02_dev *dev)
|
|||
}
|
||||
}
|
||||
|
||||
void mt76x02_add_rate_power_offset(struct mt76_rate_power *r, int offset);
|
||||
void mt76x02_add_rate_power_offset(struct mt76x02_rate_power *r, int offset);
|
||||
void mt76x02_phy_set_txpower(struct mt76x02_dev *dev, int txp_0, int txp_2);
|
||||
void mt76x02_limit_rate_power(struct mt76_rate_power *r, int limit);
|
||||
int mt76x02_get_max_rate_power(struct mt76_rate_power *r);
|
||||
void mt76x02_limit_rate_power(struct mt76x02_rate_power *r, int limit);
|
||||
int mt76x02_get_max_rate_power(struct mt76x02_rate_power *r);
|
||||
void mt76x02_phy_set_rxpath(struct mt76x02_dev *dev);
|
||||
void mt76x02_phy_set_txdac(struct mt76x02_dev *dev);
|
||||
void mt76x02_phy_set_bw(struct mt76x02_dev *dev, int width, u8 ctrl);
|
||||
|
|
|
|||
|
|
@ -62,23 +62,23 @@ s8 mt76x02_tx_get_max_txpwr_adj(struct mt76x02_dev *dev,
|
|||
u8 mcs = ieee80211_rate_get_vht_mcs(rate);
|
||||
|
||||
if (mcs == 8 || mcs == 9) {
|
||||
max_txpwr = dev->mt76.rate_power.vht[8];
|
||||
max_txpwr = dev->rate_power.vht[8];
|
||||
} else {
|
||||
u8 nss, idx;
|
||||
|
||||
nss = ieee80211_rate_get_vht_nss(rate);
|
||||
idx = ((nss - 1) << 3) + mcs;
|
||||
max_txpwr = dev->mt76.rate_power.ht[idx & 0xf];
|
||||
max_txpwr = dev->rate_power.ht[idx & 0xf];
|
||||
}
|
||||
} else if (rate->flags & IEEE80211_TX_RC_MCS) {
|
||||
max_txpwr = dev->mt76.rate_power.ht[rate->idx & 0xf];
|
||||
max_txpwr = dev->rate_power.ht[rate->idx & 0xf];
|
||||
} else {
|
||||
enum nl80211_band band = dev->mphy.chandef.chan->band;
|
||||
|
||||
if (band == NL80211_BAND_2GHZ) {
|
||||
const struct ieee80211_rate *r;
|
||||
struct wiphy *wiphy = dev->mt76.hw->wiphy;
|
||||
struct mt76_rate_power *rp = &dev->mt76.rate_power;
|
||||
struct mt76x02_rate_power *rp = &dev->rate_power;
|
||||
|
||||
r = &wiphy->bands[band]->bitrates[rate->idx];
|
||||
if (r->flags & IEEE80211_RATE_SHORT_PREAMBLE)
|
||||
|
|
@ -86,7 +86,7 @@ s8 mt76x02_tx_get_max_txpwr_adj(struct mt76x02_dev *dev,
|
|||
else
|
||||
max_txpwr = rp->ofdm[r->hw_value & 0x7];
|
||||
} else {
|
||||
max_txpwr = dev->mt76.rate_power.ofdm[rate->idx & 0x7];
|
||||
max_txpwr = dev->rate_power.ofdm[rate->idx & 0x7];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ void mt76x02_tx_set_txpwr_auto(struct mt76x02_dev *dev, s8 txpwr)
|
|||
s8 txpwr_adj;
|
||||
|
||||
txpwr_adj = mt76x02_tx_get_txpwr_adj(dev, txpwr,
|
||||
dev->mt76.rate_power.ofdm[4]);
|
||||
dev->rate_power.ofdm[4]);
|
||||
mt76_rmw_field(dev, MT_PROT_AUTO_TX_CFG,
|
||||
MT_PROT_AUTO_TX_CFG_PROT_PADJ, txpwr_adj);
|
||||
mt76_rmw_field(dev, MT_PROT_AUTO_TX_CFG,
|
||||
|
|
|
|||
|
|
@ -280,7 +280,7 @@ void mt76x2_read_rx_gain(struct mt76x02_dev *dev)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x2_read_rx_gain);
|
||||
|
||||
void mt76x2_get_rate_power(struct mt76x02_dev *dev, struct mt76_rate_power *t,
|
||||
void mt76x2_get_rate_power(struct mt76x02_dev *dev, struct mt76x02_rate_power *t,
|
||||
struct ieee80211_channel *chan)
|
||||
{
|
||||
bool is_5ghz;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ struct mt76x2_temp_comp {
|
|||
unsigned int low_slope; /* J / dB */
|
||||
};
|
||||
|
||||
void mt76x2_get_rate_power(struct mt76x02_dev *dev, struct mt76_rate_power *t,
|
||||
void mt76x2_get_rate_power(struct mt76x02_dev *dev, struct mt76x02_rate_power *t,
|
||||
struct ieee80211_channel *chan);
|
||||
void mt76x2_get_power_info(struct mt76x02_dev *dev,
|
||||
struct mt76x2_tx_power_info *t,
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ void mt76x2_init_txpower(struct mt76x02_dev *dev,
|
|||
{
|
||||
struct ieee80211_channel *chan;
|
||||
struct mt76x2_tx_power_info txp;
|
||||
struct mt76_rate_power t = {};
|
||||
struct mt76x02_rate_power t = {};
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sband->n_channels; i++) {
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ void mt76x2_phy_set_txpower_regs(struct mt76x02_dev *dev,
|
|||
EXPORT_SYMBOL_GPL(mt76x2_phy_set_txpower_regs);
|
||||
|
||||
static int
|
||||
mt76x2_get_min_rate_power(struct mt76_rate_power *r)
|
||||
mt76x2_get_min_rate_power(struct mt76x02_rate_power *r)
|
||||
{
|
||||
int i;
|
||||
s8 ret = 0;
|
||||
|
|
@ -140,7 +140,7 @@ void mt76x2_phy_set_txpower(struct mt76x02_dev *dev)
|
|||
struct ieee80211_channel *chan = dev->mphy.chandef.chan;
|
||||
struct mt76x2_tx_power_info txp;
|
||||
int txp_0, txp_1, delta = 0;
|
||||
struct mt76_rate_power t = {};
|
||||
struct mt76x02_rate_power t = {};
|
||||
int base_power, gain;
|
||||
|
||||
mt76x2_get_power_info(dev, &txp, chan);
|
||||
|
|
@ -175,7 +175,7 @@ void mt76x2_phy_set_txpower(struct mt76x02_dev *dev)
|
|||
dev->target_power = txp.target_power;
|
||||
dev->target_power_delta[0] = txp_0 - txp.chain[0].target_power;
|
||||
dev->target_power_delta[1] = txp_1 - txp.chain[0].target_power;
|
||||
dev->mt76.rate_power = t;
|
||||
dev->rate_power = t;
|
||||
|
||||
mt76x02_phy_set_txpower(dev, txp_0, txp_1);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue