mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt7603: issue rate table updates via registers
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
+33
-10
@@ -449,37 +449,60 @@ void mt7603_wtbl_set_rates(struct mt7603_dev *dev, struct mt7603_sta *sta)
|
||||
bool stbc = false;
|
||||
int n_rates = sta->n_rates;
|
||||
u8 bw, bw_prev, bw_idx = 0;
|
||||
u16 val;
|
||||
u16 val[4];
|
||||
int i;
|
||||
|
||||
for (i = n_rates; i < 4; i++)
|
||||
rates[i] = rates[n_rates - 1];
|
||||
|
||||
val = mt7603_mac_tx_rate_val(dev, &rates[0], stbc, &bw);
|
||||
val[0] = mt7603_mac_tx_rate_val(dev, &rates[0], stbc, &bw);
|
||||
mt76_rmw_field(dev, addr + 9 * 4, MT_WTBL2_W9_BW_CAP, bw);
|
||||
mt76_rmw_field(dev, addr + 10 * 4, MT_WTBL2_W10_RATE1, val);
|
||||
mt76_rmw_field(dev, addr + 10 * 4, MT_WTBL2_W10_RATE1, val[0]);
|
||||
|
||||
bw_prev = bw;
|
||||
val = mt7603_mac_tx_rate_val(dev, &rates[1], stbc, &bw);
|
||||
mt76_rmw_field(dev, addr + 10 * 4, MT_WTBL2_W10_RATE2, val);
|
||||
val[1] = mt7603_mac_tx_rate_val(dev, &rates[1], stbc, &bw);
|
||||
mt76_rmw_field(dev, addr + 10 * 4, MT_WTBL2_W10_RATE2, val[1]);
|
||||
if (bw_prev < bw && !bw_idx)
|
||||
bw_idx = 1;
|
||||
|
||||
bw_prev = bw;
|
||||
val = mt7603_mac_tx_rate_val(dev, &rates[2], stbc, &bw);
|
||||
mt76_rmw_field(dev, addr + 10 * 4, MT_WTBL2_W10_RATE3_LO, val);
|
||||
mt76_rmw_field(dev, addr + 11 * 4, MT_WTBL2_W11_RATE3_HI, val >> 4);
|
||||
val[2] = mt7603_mac_tx_rate_val(dev, &rates[2], stbc, &bw);
|
||||
mt76_rmw_field(dev, addr + 10 * 4, MT_WTBL2_W10_RATE3_LO, val[2]);
|
||||
mt76_rmw_field(dev, addr + 11 * 4, MT_WTBL2_W11_RATE3_HI, val[2] >> 4);
|
||||
if (bw_prev < bw && !bw_idx)
|
||||
bw_idx = 2;
|
||||
|
||||
bw_prev = bw;
|
||||
val = mt7603_mac_tx_rate_val(dev, &rates[3], stbc, &bw);
|
||||
mt76_rmw_field(dev, addr + 11 * 4, MT_WTBL2_W11_RATE4, val);
|
||||
val[3] = mt7603_mac_tx_rate_val(dev, &rates[3], stbc, &bw);
|
||||
mt76_rmw_field(dev, addr + 11 * 4, MT_WTBL2_W11_RATE4, val[3]);
|
||||
if (bw_prev < bw && !bw_idx)
|
||||
bw_idx = 3;
|
||||
|
||||
mt76_rmw_field(dev, addr + 9 * 4, MT_WTBL2_W9_CHANGE_BW_RATE,
|
||||
bw_idx ? bw_idx - 1 : 7);
|
||||
|
||||
mt76_wr(dev, MT_WTBL_RIUCR0, mt76_rr(dev, addr + 9 * 4));
|
||||
|
||||
mt76_wr(dev, MT_WTBL_RIUCR1,
|
||||
MT76_SET(MT_WTBL_RIUCR1_RATE0, val[0]) |
|
||||
MT76_SET(MT_WTBL_RIUCR1_RATE1, val[1]) |
|
||||
MT76_SET(MT_WTBL_RIUCR1_RATE2_LO, val[2]));
|
||||
|
||||
mt76_wr(dev, MT_WTBL_RIUCR2,
|
||||
MT76_SET(MT_WTBL_RIUCR2_RATE2_HI, val[2] >> 8) |
|
||||
MT76_SET(MT_WTBL_RIUCR2_RATE3, val[3]) |
|
||||
MT76_SET(MT_WTBL_RIUCR2_RATE4, val[0]) |
|
||||
MT76_SET(MT_WTBL_RIUCR2_RATE5_LO, val[1]));
|
||||
|
||||
mt76_wr(dev, MT_WTBL_RIUCR3,
|
||||
MT76_SET(MT_WTBL_RIUCR3_RATE5_HI, val[1] >> 4) |
|
||||
MT76_SET(MT_WTBL_RIUCR3_RATE6, val[2]) |
|
||||
MT76_SET(MT_WTBL_RIUCR3_RATE7, val[3]));
|
||||
|
||||
mt76_wr(dev, MT_WTBL_UPDATE,
|
||||
MT76_SET(MT_WTBL_UPDATE_WLAN_IDX, wcid) |
|
||||
MT_WTBL_UPDATE_RATE_UPDATE |
|
||||
MT_WTBL_UPDATE_TX_COUNT_CLEAR);
|
||||
}
|
||||
|
||||
static enum mt7603_cipher_type
|
||||
|
||||
@@ -420,6 +420,27 @@ enum {
|
||||
|
||||
#define MT_WTBL1_BASE 0x28000
|
||||
|
||||
#define MT_WTBL_ON_BASE (MT_WTBL1_BASE + 0x2000)
|
||||
#define MT_WTBL_ON(_n) (MT_WTBL_ON_BASE + (_n))
|
||||
|
||||
#define MT_WTBL_RIUCR0 MT_WTBL_ON(0x200)
|
||||
|
||||
#define MT_WTBL_RIUCR1 MT_WTBL_ON(0x204)
|
||||
#define MT_WTBL_RIUCR1_RATE0 GENMASK(11, 0)
|
||||
#define MT_WTBL_RIUCR1_RATE1 GENMASK(23, 12)
|
||||
#define MT_WTBL_RIUCR1_RATE2_LO GENMASK(31, 24)
|
||||
|
||||
#define MT_WTBL_RIUCR2 MT_WTBL_ON(0x208)
|
||||
#define MT_WTBL_RIUCR2_RATE2_HI GENMASK(3, 0)
|
||||
#define MT_WTBL_RIUCR2_RATE3 GENMASK(15, 4)
|
||||
#define MT_WTBL_RIUCR2_RATE4 GENMASK(27, 16)
|
||||
#define MT_WTBL_RIUCR2_RATE5_LO GENMASK(31, 28)
|
||||
|
||||
#define MT_WTBL_RIUCR3 MT_WTBL_ON(0x20c)
|
||||
#define MT_WTBL_RIUCR3_RATE5_HI GENMASK(7, 0)
|
||||
#define MT_WTBL_RIUCR3_RATE6 GENMASK(19, 8)
|
||||
#define MT_WTBL_RIUCR3_RATE7 GENMASK(31, 20)
|
||||
|
||||
#define MT_PCIE_REMAP_BASE_1 0x40000
|
||||
#define MT_PCIE_REMAP_BASE_2 0x80000
|
||||
|
||||
|
||||
Reference in New Issue
Block a user