[PATCH v2 08/10] mt76: mt7915: implement testmode rx support

Felix Fietkau nbd at nbd.name
Sun Oct 11 23:35:53 EDT 2020


On 2020-10-12 05:25, Shayne Chen wrote:
> Support testmode rx and display rx statistic by parsing RXV packet
> type, which is currently only enabled in testmode.
> 
> Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
> Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
> ---
> v2: change last_snr to u8
> 
>  .../net/wireless/mediatek/mt76/mt7915/dma.c   |  3 +
>  .../net/wireless/mediatek/mt76/mt7915/mac.c   | 37 +++++++
>  .../net/wireless/mediatek/mt76/mt7915/mac.h   |  5 +
>  .../net/wireless/mediatek/mt76/mt7915/mcu.h   |  1 +
>  .../wireless/mediatek/mt76/mt7915/mt7915.h    |  7 ++
>  .../wireless/mediatek/mt76/mt7915/testmode.c  | 97 +++++++++++++++++++
>  .../wireless/mediatek/mt76/mt7915/testmode.h  | 30 ++++++
>  7 files changed, 180 insertions(+)
> 
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
> @@ -169,12 +209,69 @@ mt7915_tm_set_state(struct mt76_dev *mdev, enum mt76_testmode_state state)
>  		mt7915_tm_set_tx_frames(dev, false);
>  	else if (state == MT76_TM_STATE_TX_FRAMES)
>  		mt7915_tm_set_tx_frames(dev, true);
> +	else if (prev_state == MT76_TM_STATE_RX_FRAMES)
> +		mt7915_tm_set_rx_frames(dev, false);
> +	else if (state == MT76_TM_STATE_RX_FRAMES)
> +		mt7915_tm_set_rx_frames(dev, true);
>  	else if (prev_state == MT76_TM_STATE_OFF || state == MT76_TM_STATE_OFF)
>  		mt7915_tm_init(dev);
>  
>  	return 0;
>  }
>  
> +static int
> +mt7915_tm_dump_stats(struct mt76_dev *mdev, struct sk_buff *msg)
> +{
> +	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
> +	void *rx, *rssi;
> +	int i;
> +
> +	rx = nla_nest_start(msg, MT76_TM_STATS_ATTR_LAST_RX);
> +	if (!rx)
> +		return -ENOMEM;
> +
> +	if (nla_put_s32(msg, MT76_TM_RX_ATTR_FREQ_OFFSET, dev->test.last_freq_offset))
> +		return -ENOMEM;
> +
> +	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_RCPI);
> +	if (!rssi)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < ARRAY_SIZE(dev->test.last_rcpi); i++)
> +		if (nla_put_u8(msg, i, dev->test.last_rcpi[i]))
> +			return -ENOMEM;
> +
> +	nla_nest_end(msg, rssi);
> +
> +	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_IB_RSSI);
> +	if (!rssi)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < ARRAY_SIZE(dev->test.last_ib_rssi); i++)
> +		if (nla_put_s8(msg, i, dev->test.last_ib_rssi[i]))
> +			return -ENOMEM;
> +
> +	nla_nest_end(msg, rssi);
> +
> +	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_WB_RSSI);
> +	if (!rssi)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < ARRAY_SIZE(dev->test.last_wb_rssi); i++)
> +		if (nla_put_s8(msg, i, dev->test.last_wb_rssi[i]))
> +			return -ENOMEM;
> +
> +	nla_nest_end(msg, rssi);
> +
> +	if (nla_put_s32(msg, MT76_TM_RX_ATTR_SNR, dev->test.last_snr))
> +		return -ENOMEM;
You updated the comment in the header file, but not this part which
actually generates the attribute.

- Felix



More information about the Linux-mediatek mailing list