mt7603: use mcu command to set timing registers, fix OFDM timeout values

Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
Felix Fietkau
2016-03-05 00:16:10 +01:00
parent c5b46a88c2
commit 268467b9a4
3 changed files with 29 additions and 13 deletions
+2
View File
@@ -226,6 +226,8 @@ void mt7603_mac_watchdog_reset(struct mt7603_dev *dev);
int mt7603_mcu_set_channel(struct mt7603_dev *dev);
int mt7603_mcu_reg_read(struct mt7603_dev *dev, u32 reg, u32 *val, bool rf);
int mt7603_mcu_set_eeprom(struct mt7603_dev *dev);
int mt7603_mcu_set_timing(struct mt7603_dev *dev, int slot, int sifs, int rifs,
int eifs);
void mt7603_mcu_exit(struct mt7603_dev *dev);
void mt7603_wtbl_init(struct mt7603_dev *dev, int idx, const u8 *addr);
+5 -13
View File
@@ -43,10 +43,10 @@ mt76_start_tx_ac(struct mt7603_dev *dev, u32 mask)
void mt7603_mac_set_timing(struct mt7603_dev *dev)
{
u32 cck = MT76_SET(MT_TIMEOUT_VAL_PLCP, 231) |
MT76_SET(MT_TIMEOUT_VAL_CCA, 48);
u32 ofdm = MT76_SET(MT_TIMEOUT_VAL_PLCP, 60) |
MT76_SET(MT_TIMEOUT_VAL_CCA, 24);
u32 cck = MT76_SET(MT_TIMEOUT_VAL_PLCP, 247) |
MT76_SET(MT_TIMEOUT_VAL_CCA, 64);
u32 ofdm = MT76_SET(MT_TIMEOUT_VAL_PLCP, 113) |
MT76_SET(MT_TIMEOUT_VAL_CCA, 64);
int offset = 3 * dev->coverage_class;
u32 reg_offset = MT76_SET(MT_TIMEOUT_VAL_PLCP, offset) |
MT76_SET(MT_TIMEOUT_VAL_CCA, offset);
@@ -57,17 +57,9 @@ void mt7603_mac_set_timing(struct mt7603_dev *dev)
else
sifs = 10;
mt7603_mac_stop(dev);
mt7603_mcu_set_timing(dev, dev->slottime + offset, sifs, 2, 360);
mt76_wr(dev, MT_TIMEOUT_CCK, cck + reg_offset);
mt76_wr(dev, MT_TIMEOUT_OFDM, ofdm + reg_offset);
mt76_wr(dev, MT_IFS,
MT76_SET(MT_IFS_EIFS, 360) |
MT76_SET(MT_IFS_RIFS, 2) |
MT76_SET(MT_IFS_SIFS, sifs) |
MT76_SET(MT_IFS_SLOT, dev->slottime));
mt7603_mac_start(dev);
}
static void
+22
View File
@@ -490,6 +490,28 @@ int mt7603_mcu_set_channel(struct mt7603_dev *dev)
return mt7603_mcu_set_tx_power(dev);
}
int mt7603_mcu_set_timing(struct mt7603_dev *dev, int slot, int sifs, int rifs,
int eifs)
{
struct {
u8 slot_time;
u8 sifs_time;
u8 rifs_time;
u8 __res0;
u16 eifs_time;
u16 __res1;
} req = {
.slot_time = slot,
.sifs_time = sifs,
.rifs_time = rifs,
.eifs_time = eifs,
};
struct sk_buff *skb;
skb = mt7603_mcu_msg_alloc(dev, &req, sizeof(req));
return mt7603_mcu_msg_send(dev, skb, MCU_EXT_CMD_SLOT_TIME_SET, MCU_Q_SET, NULL);
}
int mt7603_mcu_reg_read(struct mt7603_dev *dev, u32 reg, u32 *val, bool rf)
{
struct {