mt76: mt7615: add radar pattern test knob to debugfs
Introduce mt7615_mcu_rdd_send_pattern routine to trigger a radar pattern detection. Moreover move debugfs related routines in a dedicated source file. Suggested-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
5ec87dc8c3
commit
70911d9638
@ -2,4 +2,5 @@
|
|||||||
|
|
||||||
obj-$(CONFIG_MT7615E) += mt7615e.o
|
obj-$(CONFIG_MT7615E) += mt7615e.o
|
||||||
|
|
||||||
mt7615e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o
|
mt7615e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
|
||||||
|
debugfs.o
|
||||||
|
38
drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
Normal file
38
drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* SPDX-License-Identifier: ISC */
|
||||||
|
|
||||||
|
#include "mt7615.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
mt7615_radar_pattern_set(void *data, u64 val)
|
||||||
|
{
|
||||||
|
struct mt7615_dev *dev = data;
|
||||||
|
|
||||||
|
return mt7615_mcu_rdd_send_pattern(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_DEBUGFS_ATTRIBUTE(fops_radar_pattern, NULL,
|
||||||
|
mt7615_radar_pattern_set, "%lld\n");
|
||||||
|
|
||||||
|
int mt7615_init_debugfs(struct mt7615_dev *dev)
|
||||||
|
{
|
||||||
|
struct dentry *dir;
|
||||||
|
|
||||||
|
dir = mt76_register_debugfs(&dev->mt76);
|
||||||
|
if (!dir)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
debugfs_create_u32("dfs_hw_pattern", 0400, dir, &dev->hw_pattern);
|
||||||
|
/* test pattern knobs */
|
||||||
|
debugfs_create_u8("pattern_len", 0600, dir,
|
||||||
|
&dev->radar_pattern.n_pulses);
|
||||||
|
debugfs_create_u32("pulse_period", 0600, dir,
|
||||||
|
&dev->radar_pattern.period);
|
||||||
|
debugfs_create_u16("pulse_width", 0600, dir,
|
||||||
|
&dev->radar_pattern.width);
|
||||||
|
debugfs_create_u16("pulse_power", 0600, dir,
|
||||||
|
&dev->radar_pattern.power);
|
||||||
|
debugfs_create_file("radar_trigger", 0200, dir, dev,
|
||||||
|
&fops_radar_pattern);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -155,19 +155,6 @@ static const struct ieee80211_iface_combination if_comb[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static int mt7615_init_debugfs(struct mt7615_dev *dev)
|
|
||||||
{
|
|
||||||
struct dentry *dir;
|
|
||||||
|
|
||||||
dir = mt76_register_debugfs(&dev->mt76);
|
|
||||||
if (!dir)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
debugfs_create_u32("dfs_hw_pattern", 0400, dir, &dev->hw_pattern);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mt7615_init_txpower(struct mt7615_dev *dev,
|
mt7615_init_txpower(struct mt7615_dev *dev,
|
||||||
struct ieee80211_supported_band *sband)
|
struct ieee80211_supported_band *sband)
|
||||||
|
@ -1294,6 +1294,37 @@ int mt7615_mcu_rdd_cmd(struct mt7615_dev *dev,
|
|||||||
&req, sizeof(req), true);
|
&req, sizeof(req), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mt7615_mcu_rdd_send_pattern(struct mt7615_dev *dev)
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
u8 pulse_num;
|
||||||
|
u8 rsv[3];
|
||||||
|
struct {
|
||||||
|
u32 start_time;
|
||||||
|
u16 width;
|
||||||
|
s16 power;
|
||||||
|
} pattern[32];
|
||||||
|
} req = {
|
||||||
|
.pulse_num = dev->radar_pattern.n_pulses,
|
||||||
|
};
|
||||||
|
u32 start_time = ktime_to_ms(ktime_get_boottime());
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (dev->radar_pattern.n_pulses > ARRAY_SIZE(req.pattern))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* TODO: add some noise here */
|
||||||
|
for (i = 0; i < dev->radar_pattern.n_pulses; i++) {
|
||||||
|
req.pattern[i].width = dev->radar_pattern.width;
|
||||||
|
req.pattern[i].power = dev->radar_pattern.power;
|
||||||
|
req.pattern[i].start_time = start_time +
|
||||||
|
i * dev->radar_pattern.period;
|
||||||
|
}
|
||||||
|
|
||||||
|
return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_SET_RDD_PATTERN,
|
||||||
|
&req, sizeof(req), false);
|
||||||
|
}
|
||||||
|
|
||||||
int mt7615_mcu_set_channel(struct mt7615_dev *dev)
|
int mt7615_mcu_set_channel(struct mt7615_dev *dev)
|
||||||
{
|
{
|
||||||
struct cfg80211_chan_def *chandef = &dev->mt76.chandef;
|
struct cfg80211_chan_def *chandef = &dev->mt76.chandef;
|
||||||
|
@ -104,6 +104,7 @@ enum {
|
|||||||
MCU_EXT_CMD_MAC_INIT_CTRL = 0x46,
|
MCU_EXT_CMD_MAC_INIT_CTRL = 0x46,
|
||||||
MCU_EXT_CMD_BCN_OFFLOAD = 0x49,
|
MCU_EXT_CMD_BCN_OFFLOAD = 0x49,
|
||||||
MCU_EXT_CMD_SET_RX_PATH = 0x4e,
|
MCU_EXT_CMD_SET_RX_PATH = 0x4e,
|
||||||
|
MCU_EXT_CMD_SET_RDD_PATTERN = 0x7d,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -68,6 +68,12 @@ struct mt7615_dev {
|
|||||||
u32 vif_mask;
|
u32 vif_mask;
|
||||||
u32 omac_mask;
|
u32 omac_mask;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
u8 n_pulses;
|
||||||
|
u32 period;
|
||||||
|
u16 width;
|
||||||
|
s16 power;
|
||||||
|
} radar_pattern;
|
||||||
u32 hw_pattern;
|
u32 hw_pattern;
|
||||||
int dfs_state;
|
int dfs_state;
|
||||||
|
|
||||||
@ -177,6 +183,7 @@ int mt7615_mcu_rdd_cmd(struct mt7615_dev *dev,
|
|||||||
u8 rx_sel, u8 val);
|
u8 rx_sel, u8 val);
|
||||||
int mt7615_dfs_start_radar_detector(struct mt7615_dev *dev);
|
int mt7615_dfs_start_radar_detector(struct mt7615_dev *dev);
|
||||||
int mt7615_dfs_stop_radar_detector(struct mt7615_dev *dev);
|
int mt7615_dfs_stop_radar_detector(struct mt7615_dev *dev);
|
||||||
|
int mt7615_mcu_rdd_send_pattern(struct mt7615_dev *dev);
|
||||||
|
|
||||||
static inline void mt7615_dfs_check_channel(struct mt7615_dev *dev)
|
static inline void mt7615_dfs_check_channel(struct mt7615_dev *dev)
|
||||||
{
|
{
|
||||||
@ -240,4 +247,6 @@ void mt7615_txp_skb_unmap(struct mt76_dev *dev,
|
|||||||
int mt76_dfs_start_rdd(struct mt7615_dev *dev, bool force);
|
int mt76_dfs_start_rdd(struct mt7615_dev *dev, bool force);
|
||||||
int mt7615_dfs_init_radar_detector(struct mt7615_dev *dev);
|
int mt7615_dfs_init_radar_detector(struct mt7615_dev *dev);
|
||||||
|
|
||||||
|
int mt7615_init_debugfs(struct mt7615_dev *dev);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user