improve debugfs info for mt7615/mt7603 drivers
Subsystems (2)
Lorenzo Bianconi
maintainercover improve debugfs info for mt7615/mt7603 drivers
Improve hw queue debugfs info for mt7615 driver
Add 802.11 aggr info for mt7615/mt7603 drivers
This series is based on 'mt76x02: tidy up mib counters'
https://patchwork.kernel.org/cover/11142613/
Lorenzo Bianconi (5):
mt76: move queue debugfs entry to driver specific code
mt76: mt7615: add queue entry in debugfs
mt76: move aggr_stats array in mt76_dev
mt76: mt7615: collect aggregation stats
mt76: mt7603: collect aggregation stats
drivers/net/wireless/mediatek/mt76/debugfs.c | 5 +- drivers/net/wireless/mediatek/mt76/mt76.h | 3 + .../wireless/mediatek/mt76/mt7603/debugfs.c | 38 +++++++ .../net/wireless/mediatek/mt76/mt7603/mac.c | 18 ++++ .../net/wireless/mediatek/mt76/mt7603/main.c | 1 + .../wireless/mediatek/mt76/mt7603/mt7603.h | 1 + .../net/wireless/mediatek/mt76/mt7603/regs.h | 5 + .../wireless/mediatek/mt76/mt7615/debugfs.c | 100 ++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/mac.c | 18 ++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 2 + .../wireless/mediatek/mt76/mt7615/mt7615.h | 1 + .../net/wireless/mediatek/mt76/mt7615/regs.h | 17 +++ drivers/net/wireless/mediatek/mt76/mt76x02.h | 2 - .../wireless/mediatek/mt76/mt76x02_debugfs.c | 5 +- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 6 +- 15 files changed, 213 insertions(+), 9 deletions(-)
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 1/5 mt76: move queue debugfs entry to driver specific code
Move queue debugfs entry to driver specific code since mt7615 devices rely on a different queue layout
--- drivers/net/wireless/mediatek/mt76/debugfs.c | 5 ++--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c | 2 ++ drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c | 2 ++ 4 files changed, 7 insertions(+), 3 deletions(-)
drivers/net/wireless/mediatek/mt76/debugfs.c +2 -3
@@ -25,8 +25,7 @@ mt76_reg_get(void *data, u64 *val)DEFINE_DEBUGFS_ATTRIBUTE (fops_regval, mt76_reg_get, mt76_reg_set,"0x%08llx\n" ); -static int -mt76_queues_read (struct seq_file *s,void *data) +int mt76_queues_read (struct seq_file *s,void *data) {struct mt76_dev *dev =dev_get_drvdata (s->private);int i;
@@ -45,6 +44,7 @@ mt76_queues_read(struct seq_file *s, void *data)return 0 ; } +EXPORT_SYMBOL_GPL (mt76_queues_read);void mt76_seq_puts_array (struct seq_file *file,const char *str,s8 *val,int len)
@@ -90,7 +90,6 @@ struct dentry *mt76_register_debugfs(struct mt76_dev *dev)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,"queues" , dir, mt76_queues_read);debugfs_create_devm_seqfile (dev->dev,"rate_txpower" , dir, mt76_read_rate_txpower);
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -624,6 +624,7 @@ void mt76_unregister_device(struct mt76_dev *dev);void mt76_free_device (struct mt76_dev *dev);struct dentry *mt76_register_debugfs (struct mt76_dev *dev); +int mt76_queues_read (struct seq_file *s,void *data);void mt76_seq_puts_array (struct seq_file *file,const char *str,s8 *val,int len);
drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c +2 -0
@@ -77,6 +77,8 @@ void mt7603_init_debugfs(struct mt7603_dev *dev)if (!dir)return ; +debugfs_create_devm_seqfile (dev->mt76.dev,"queues" , dir, + mt76_queues_read);debugfs_create_file ("edcca" ,0600 , dir, dev, &fops_edcca);debugfs_create_u32 ("reset_test" ,0600 , dir, &dev->reset_test); debugfs_create_devm_seqfile(dev->mt76.dev, "reset", dir,
drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c +2 -0
@@ -143,6 +143,8 @@ void mt76x02_init_debugfs(struct mt76x02_dev *dev)if (!dir)return ; +debugfs_create_devm_seqfile (dev->mt76.dev,"queues" , dir, + mt76_queues_read);debugfs_create_u8 ("temperature" ,0400 , dir, &dev->cal.temp);debugfs_create_bool ("tpc" ,0600 , dir, &dev->enable_tpc);
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 2/5 mt76: mt7615: add queue entry in debugfs
In reply to Lorenzo BianconiIntroduce mt7615_queues_read routine to dump hw queue related info. Add hw ac queues statistics in mt7615 debugfs
--- .../wireless/mediatek/mt76/mt7615/debugfs.c | 61 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/regs.h | 11 ++++ 2 files changed, 72 insertions(+)
drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c +61 -0
@@ -61,6 +61,63 @@ static int mt7615_read_temperature(struct seq_file *s, void *data)return 0 ; } +static int +mt7615_queues_acq (struct seq_file *s,void *data) +{ +struct mt7615_dev *dev =dev_get_drvdata (s->private); +int i; + +for (i =0 ; i <16 ; i++) { +int j, acs = i /4 , index = i %4 ; +u32 ctrl, val, qlen =0 ; + + val =mt76_rr (dev,MT_PLE_AC_QEMPTY (acs, index)); + ctrl =BIT (31 ) |BIT (15 ) | (acs <<8 ); + +for (j =0 ; j <32 ; j++) { +if (val &BIT (j)) +continue ; + +mt76_wr (dev,MT_PLE_FL_Q0_CTRL , + ctrl | (j + (index <<5 ))); + qlen +=mt76_get_field (dev,MT_PLE_FL_Q3_CTRL , +GENMASK (11 ,0 )); + } +seq_printf (s,"AC%d%d: queued=%d\n" , acs, index, qlen); + } + +return 0 ; +} + +static int +mt7615_queues_read (struct seq_file *s,void *data) +{ +struct mt7615_dev *dev =dev_get_drvdata (s->private); +static const struct { +char *queue; +int id; + } queue_map[] = { + {"PDMA0" ,MT_TXQ_BE }, + {"MCUQ" ,MT_TXQ_MCU }, + {"MCUFWQ" ,MT_TXQ_FWDL }, + }; +int i; + +for (i =0 ; i <ARRAY_SIZE (queue_map); i++) { +struct mt76_sw_queue *q = &dev->mt76.q_tx[queue_map[i].id]; + +if (!q->q) +continue ; + +seq_printf (s, +"%s: queued=%d head=%d tail=%d\n" , + queue_map[i].queue, q->q->queued, q->q->head, + q->q->tail); + } + +return 0 ; +} +int mt7615_init_debugfs (struct mt7615_dev *dev) {struct dentry *dir;
@@ -69,6 +126,10 @@ int mt7615_init_debugfs(struct mt7615_dev *dev)if (!dir)return -ENOMEM ; +debugfs_create_devm_seqfile (dev->mt76.dev,"queues" , dir, + mt7615_queues_read); +debugfs_create_devm_seqfile (dev->mt76.dev,"acq" , dir, + mt7615_queues_acq);debugfs_create_file ("scs" ,0600 , dir, dev, &fops_scs);debugfs_create_devm_seqfile (dev->mt76.dev,"radio" , dir, mt7615_radio_read);
drivers/net/wireless/mediatek/mt76/mt7615/regs.h +11 -0
@@ -65,6 +65,17 @@#define MT_WPDMA_ABT_CFG MT_HIF(0x530)#define MT_WPDMA_ABT_CFG1 MT_HIF(0x534) +#define MT_PLE_BASE 0x8000 +#define MT_PLE (ofs) (MT_PLE_BASE + (ofs)) + +#define MT_PLE_FL_Q0_CTRL MT_PLE(0x1b0) +#define MT_PLE_FL_Q1_CTRL MT_PLE(0x1b4) +#define MT_PLE_FL_Q2_CTRL MT_PLE(0x1b8) +#define MT_PLE_FL_Q3_CTRL MT_PLE(0x1bc) + +#define MT_PLE_AC_QEMPTY (ac, n) MT_PLE(0x300 + 0x10 * (ac) + \ + ((n) << 2)) +#define MT_WF_PHY_BASE 0x10000#define MT_WF_PHY (ofs) (MT_WF_PHY_BASE + (ofs))
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 3/5 mt76: move aggr_stats array in mt76_dev
In reply to Lorenzo BianconiMove aggr_stats array from mt76x02_dev to mt76_dev in order to be reused adding aggregation stats for mt7603/mt7615 drivers
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ drivers/net/wireless/mediatek/mt76/mt76x02.h | 2 -- drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c | 3 ++- drivers/net/wireless/mediatek/mt76/mt76x02_mac.c | 6 +++--- 4 files changed, 7 insertions(+), 6 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -462,6 +462,8 @@ struct mt76_dev {u32 rev;unsigned long state; +u32 aggr_stats[32 ]; +u8 antenna_mask;u16 chainmask;
drivers/net/wireless/mediatek/mt76/mt76x02.h +0 -2
@@ -92,8 +92,6 @@ struct mt76x02_dev {const struct mt76x02_beacon_ops *beacon_ops; -u32 aggr_stats[32 ]; -struct sk_buff *beacons[8 ];u8 beacon_data_mask;
drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c +2 -1
@@ -19,7 +19,8 @@ mt76x02_ampdu_stat_read(struct seq_file *file, void *data)seq_puts (file,"\n" );seq_puts (file,"Count: " );for (j =0 ; j <8 ; j++) -seq_printf (file,"%8d | " , dev->aggr_stats[i *8 + j]); +seq_printf (file,"%8d | " , + dev->mt76.aggr_stats[i *8 + j]);seq_puts (file,"\n" );seq_puts (file,"--------" );for (j =0 ; j <8 ; j++)
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c +3 -3
@@ -24,7 +24,7 @@ void mt76x02_mac_reset_counters(struct mt76x02_dev *dev)for (i =0 ; i <16 ; i++)mt76_rr (dev,MT_TX_STAT_FIFO ); -memset (dev->aggr_stats,0 ,sizeof (dev->aggr_stats)); +memset (dev->mt76.aggr_stats,0 ,sizeof (dev->mt76.aggr_stats)); }EXPORT_SYMBOL_GPL (mt76x02_mac_reset_counters);
@@ -1119,8 +1119,8 @@ void mt76x02_mac_work(struct work_struct *work)for (i =0 , idx =0 ; i <16 ; i++) {u32 val =mt76_rr (dev,MT_TX_AGG_CNT (i)); - dev->aggr_stats[idx++] += val &0xffff ; - dev->aggr_stats[idx++] += val >>16 ; + dev->mt76.aggr_stats[idx++] += val &0xffff ; + dev->mt76.aggr_stats[idx++] += val >>16 ; }if (!dev->mt76.beacon_mask)
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 4/5 mt76: mt7615: collect aggregation stats
In reply to Lorenzo BianconiIntroduce ampdu_stat entry in mt7615 debugfs in order to dump 802.11 aggr cumulative statistics
--- .../wireless/mediatek/mt76/mt7615/debugfs.c | 39 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/mac.c | 18 +++++++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 2 + .../wireless/mediatek/mt76/mt7615/mt7615.h | 1 + .../net/wireless/mediatek/mt76/mt7615/regs.h | 6 +++ 5 files changed, 66 insertions(+)
drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c +39 -0
@@ -36,6 +36,44 @@ mt7615_scs_get(void *data, u64 *val)DEFINE_DEBUGFS_ATTRIBUTE (fops_scs, mt7615_scs_get, mt7615_scs_set,"%lld\n" ); +static int +mt7615_ampdu_stat_read (struct seq_file *file,void *data) +{ +struct mt7615_dev *dev = file->private; +int bound[7 ], i, range; + + range =mt76_rr (dev,MT_AGG_ASRCR0 ); +for (i =0 ; i <4 ; i++) + bound[i] =MT_AGG_ASRCR_RANGE (range, i) +1 ; + range =mt76_rr (dev,MT_AGG_ASRCR1 ); +for (i =0 ; i <3 ; i++) + bound[i +4 ] =MT_AGG_ASRCR_RANGE (range, i) +1 ; + +seq_printf (file,"Length: %8d | " , bound[0 ]); +for (i =0 ; i <ARRAY_SIZE (bound) -1 ; i++) +seq_printf (file,"%3d -%3d | " , + bound[i], bound[i +1 ]); +seq_puts (file,"\nCount: " ); +for (i =0 ; i <ARRAY_SIZE (bound); i++) +seq_printf (file,"%8d | " , dev->mt76.aggr_stats[i]); +seq_puts (file,"\n" ); + +return 0 ; +} + +static int +mt7615_ampdu_stat_open (struct inode *inode,struct file *f) +{ +return single_open (f, mt7615_ampdu_stat_read, inode->i_private); +} + +static const struct file_operations fops_ampdu_stat = { + .open = mt7615_ampdu_stat_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; +static int mt7615_radio_read (struct seq_file *s,void *data) {
@@ -130,6 +168,7 @@ int mt7615_init_debugfs(struct mt7615_dev *dev) mt7615_queues_read);debugfs_create_devm_seqfile (dev->mt76.dev,"acq" , dir, mt7615_queues_acq); +debugfs_create_file ("ampdu_stat" ,0400 , dir, dev, &fops_ampdu_stat);debugfs_create_file ("scs" ,0600 , dir, dev, &fops_scs);debugfs_create_devm_seqfile (dev->mt76.dev,"radio" , dir, mt7615_radio_read);
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +18 -0
@@ -41,6 +41,16 @@ static struct mt76_wcid *mt7615_rx_get_wcid(struct mt7615_dev *dev,return &sta->vif->sta.wcid; } +void mt7615_mac_reset_counters (struct mt7615_dev *dev) +{ +int i; + +for (i =0 ; i <4 ; i++) +mt76_rr (dev,MT_TX_AGG_CNT (i)); + +memset (dev->mt76.aggr_stats,0 ,sizeof (dev->mt76.aggr_stats)); +} +int mt7615_mac_fill_rx (struct mt7615_dev *dev,struct sk_buff *skb) {struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
@@ -1261,6 +1271,7 @@ void mt7615_update_channel(struct mt76_dev *mdev)void mt7615_mac_work (struct work_struct *work) {struct mt7615_dev *dev; +int i, idx; dev = (struct mt7615_dev *)container_of(work, struct mt76_dev, mac_work.work);
@@ -1271,6 +1282,13 @@ void mt7615_mac_work(struct work_struct *work)mt7615_mac_scs_check (dev); dev->mac_work_count =0 ; } + +for (i =0 , idx =0 ; i <4 ; i++) { +u32 val =mt76_rr (dev,MT_TX_AGG_CNT (i)); + + dev->mt76.aggr_stats[idx++] += val &0xffff ; + dev->mt76.aggr_stats[idx++] += val >>16 ; + }mutex_unlock (&dev->mt76.mutex);mt76_tx_status_check (&dev->mt76,NULL , false);
drivers/net/wireless/mediatek/mt76/mt7615/main.c +2 -0
@@ -16,6 +16,8 @@ static int mt7615_start(struct ieee80211_hw *hw) {struct mt7615_dev *dev = hw->priv; +mt7615_mac_reset_counters (dev); + dev->mt76.survey_time =ktime_get_boottime ();set_bit (MT76_STATE_RUNNING , &dev->mt76.state); ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mt76.mac_work,
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +1 -0
@@ -229,6 +229,7 @@ static inline void mt7615_irq_disable(struct mt7615_dev *dev, u32 mask) }void mt7615_update_channel (struct mt76_dev *mdev); +void mt7615_mac_reset_counters (struct mt7615_dev *dev);void mt7615_mac_cca_stats_reset (struct mt7615_dev *dev);void mt7615_mac_set_scs (struct mt7615_dev *dev,bool enable); int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
drivers/net/wireless/mediatek/mt76/mt7615/regs.h +6 -0
@@ -136,6 +136,10 @@ MT_AGG_ARxCR_LIMIT_SHIFT(_n), \ MT_AGG_ARxCR_LIMIT_SHIFT(_n)) +#define MT_AGG_ASRCR0 MT_WF_AGG(0x060) +#define MT_AGG_ASRCR1 MT_WF_AGG(0x064) +#define MT_AGG_ASRCR_RANGE (val, n) (((val) >> ((n) << 3)) & GENMASK(5, 0)) +#define MT_AGG_ACR0 MT_WF_AGG(0x070)#define MT_AGG_ACR1 MT_WF_AGG(0x170)#define MT_AGG_ACR_NO_BA_RULE BIT(0)
@@ -269,6 +273,8 @@#define MT_MIB_SDR16 (n) MT_WF_MIB(0x48 + ((n) << 9))#define MT_MIB_BUSY_MASK GENMASK(23, 0) +#define MT_TX_AGG_CNT (n) MT_WF_MIB(0xa8 + ((n) << 2)) +#define MT_EFUSE_BASE 0x81070000#define MT_EFUSE_BASE_CTRL 0x000#define MT_EFUSE_BASE_CTRL_EMPTY BIT(30)
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 5/5 mt76: mt7603: collect aggregation stats
In reply to Lorenzo BianconiIntroduce ampdu_stat entry in mt7603 debugfs in order to dump 802.11 aggr cumulative statistics
--- .../wireless/mediatek/mt76/mt7603/debugfs.c | 36 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7603/mac.c | 18 ++++++++++ .../net/wireless/mediatek/mt76/mt7603/main.c | 1 + .../wireless/mediatek/mt76/mt7603/mt7603.h | 1 + .../net/wireless/mediatek/mt76/mt7603/regs.h | 5 +++ 5 files changed, 61 insertions(+)
drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c +36 -0
@@ -69,6 +69,41 @@ mt7603_edcca_get(void *data, u64 *val)DEFINE_DEBUGFS_ATTRIBUTE (fops_edcca, mt7603_edcca_get, mt7603_edcca_set,"%lld\n" ); +static int +mt7603_ampdu_stat_read (struct seq_file *file,void *data) +{ +struct mt7603_dev *dev = file->private; +int bound[3 ], i, range; + + range =mt76_rr (dev,MT_AGG_ASRCR ); +for (i =0 ; i <ARRAY_SIZE (bound); i++) + bound[i] =MT_AGG_ASRCR_RANGE (range, i) +1 ; + +seq_printf (file,"Length: %8d | " , bound[0 ]); +for (i =0 ; i <ARRAY_SIZE (bound) -1 ; i++) +seq_printf (file,"%3d -%3d | " , + bound[i], bound[i +1 ]); +seq_puts (file,"\nCount: " ); +for (i =0 ; i <ARRAY_SIZE (bound); i++) +seq_printf (file,"%8d | " , dev->mt76.aggr_stats[i]); +seq_puts (file,"\n" ); + +return 0 ; +} + +static int +mt7603_ampdu_stat_open (struct inode *inode,struct file *f) +{ +return single_open (f, mt7603_ampdu_stat_read, inode->i_private); +} + +static const struct file_operations fops_ampdu_stat = { + .open = mt7603_ampdu_stat_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; +void mt7603_init_debugfs (struct mt7603_dev *dev) {struct dentry *dir;
@@ -77,6 +112,7 @@ void mt7603_init_debugfs(struct mt7603_dev *dev)if (!dir)return ; +debugfs_create_file ("ampdu_stat" ,0400 , dir, dev, &fops_ampdu_stat);debugfs_create_devm_seqfile (dev->mt76.dev,"queues" , dir, mt76_queues_read);debugfs_create_file ("edcca" ,0600 , dir, dev, &fops_edcca);
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +18 -0
@@ -31,6 +31,16 @@ mt76_start_tx_ac(struct mt7603_dev *dev, u32 mask)mt76_set (dev,MT_WF_ARB_TX_START_0 ,mt7603_ac_queue_mask0 (mask)); } +void mt7603_mac_reset_counters (struct mt7603_dev *dev) +{ +int i; + +for (i =0 ; i <2 ; i++) +mt76_rr (dev,MT_TX_AGG_CNT (i)); + +memset (dev->mt76.aggr_stats,0 ,sizeof (dev->mt76.aggr_stats)); +} +void mt7603_mac_set_timing (struct mt7603_dev *dev) { u32 cck = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 231) |
@@ -1677,6 +1687,7 @@ void mt7603_mac_work(struct work_struct *work) struct mt7603_dev *dev = container_of(work, struct mt7603_dev, mt76.mac_work.work);bool reset = false; +int i, idx;mt76_tx_status_check (&dev->mt76,NULL , false);
@@ -1686,6 +1697,13 @@ void mt7603_mac_work(struct work_struct *work)mt7603_update_channel (&dev->mt76);mt7603_edcca_check (dev); +for (i =0 , idx =0 ; i <2 ; i++) { +u32 val =mt76_rr (dev,MT_TX_AGG_CNT (i)); + + dev->mt76.aggr_stats[idx++] += val &0xffff ; + dev->mt76.aggr_stats[idx++] += val >>16 ; + } +if (dev->mac_work_count ==10 )mt7603_false_cca_check (dev);
drivers/net/wireless/mediatek/mt76/mt7603/main.c +1 -0
@@ -13,6 +13,7 @@ mt7603_start(struct ieee80211_hw *hw) {struct mt7603_dev *dev = hw->priv; +mt7603_mac_reset_counters (dev);mt7603_mac_start (dev); dev->mt76.survey_time =ktime_get_boottime ();set_bit (MT76_STATE_RUNNING , &dev->mt76.state);
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +1 -0
@@ -191,6 +191,7 @@ static inline void mt7603_irq_disable(struct mt7603_dev *dev, u32 mask)mt76_set_irq_mask (&dev->mt76,MT_INT_MASK_CSR , mask,0 ); } +void mt7603_mac_reset_counters (struct mt7603_dev *dev);void mt7603_mac_dma_start (struct mt7603_dev *dev);void mt7603_mac_start (struct mt7603_dev *dev);void mt7603_mac_stop (struct mt7603_dev *dev);
drivers/net/wireless/mediatek/mt76/mt7603/regs.h +5 -0
@@ -212,6 +212,9 @@#define MT_AGG_PCR_RTS_THR GENMASK(19, 0)#define MT_AGG_PCR_RTS_PKT_THR GENMASK(31, 25) +#define MT_AGG_ASRCR MT_WF_AGG(0x060) +#define MT_AGG_ASRCR_RANGE (val, n) (((val) >> ((n) << 3)) & GENMASK(5, 0)) +#define MT_AGG_CONTROL MT_WF_AGG(0x070)#define MT_AGG_CONTROL_NO_BA_RULE BIT(0)#define MT_AGG_CONTROL_NO_BA_AR_RULE BIT(1)
@@ -555,6 +558,8 @@ enum {#define MT_MIB_STAT_PSCCA MT_MIB_STAT(16)#define MT_MIB_STAT_PSCCA_MASK GENMASK(23, 0) +#define MT_TX_AGG_CNT (n) MT_MIB(0xa8 + ((n) << 2)) +#define MT_MIB_STAT_ED MT_MIB_STAT(18)#define MT_MIB_STAT_ED_MASK GENMASK(23, 0)
Signature · 1 line
2.21.0