Commit fd843822 authored by Ryder Lee's avatar Ryder Lee Committed by Felix Fietkau
Browse files

mt76: mt7915: introduce mt7915_mcu_set_txbf()



Use mt7915_mcu_set_txbf() to reduce global functions. This can be
easily extended to support other TxBF commands in further patches.

Signed-off-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent c560b137
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -3,6 +3,7 @@


#include "mt7915.h"
#include "mt7915.h"
#include "eeprom.h"
#include "eeprom.h"
#include "mcu.h"


/** global debugfs **/
/** global debugfs **/


@@ -16,7 +17,7 @@ mt7915_implicit_txbf_set(void *data, u64 val)


	dev->ibf = !!val;
	dev->ibf = !!val;


	return mt7915_mcu_set_txbf_type(dev);
	return mt7915_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
}
}


static int
static int
+3 −4
Original line number Original line Diff line number Diff line
@@ -313,20 +313,19 @@ static int mt7915_txbf_init(struct mt7915_dev *dev)
{
{
	int ret;
	int ret;



	if (dev->dbdc_support) {
	if (dev->dbdc_support) {
		ret = mt7915_mcu_set_txbf_module(dev);
		ret = mt7915_mcu_set_txbf(dev, MT_BF_MODULE_UPDATE);
		if (ret)
		if (ret)
			return ret;
			return ret;
	}
	}


	/* trigger sounding packets */
	/* trigger sounding packets */
	ret = mt7915_mcu_set_txbf_sounding(dev);
	ret = mt7915_mcu_set_txbf(dev, MT_BF_SOUNDING_ON);
	if (ret)
	if (ret)
		return ret;
		return ret;


	/* enable eBF */
	/* enable eBF */
	return mt7915_mcu_set_txbf_type(dev);
	return mt7915_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
}
}


static int mt7915_register_ext_phy(struct mt7915_dev *dev)
static int mt7915_register_ext_phy(struct mt7915_dev *dev)
+38 −45
Original line number Original line Diff line number Diff line
@@ -3893,58 +3893,51 @@ int mt7915_mcu_set_ser(struct mt7915_dev *dev, u8 action, u8 set, u8 band)
				 &req, sizeof(req), false);
				 &req, sizeof(req), false);
}
}


int mt7915_mcu_set_txbf_module(struct mt7915_dev *dev)
int mt7915_mcu_set_txbf(struct mt7915_dev *dev, u8 action)
{
{
#define MT_BF_MODULE_UPDATE               25
	struct {
	struct {
		u8 action;
		u8 action;
		u8 bf_num;
		union {
		u8 bf_bitmap;
		u8 bf_sel[8];
		u8 rsv[8];
	} __packed req = {
		.action = MT_BF_MODULE_UPDATE,
		.bf_num = 2,
		.bf_bitmap = GENMASK(1, 0),
	};

	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TXBF_ACTION), &req,
				 sizeof(req), true);
}

int mt7915_mcu_set_txbf_type(struct mt7915_dev *dev)
{
#define MT_BF_TYPE_UPDATE		20
	struct {
		u8 action;
		bool ebf;
		bool ibf;
		u8 rsv;
	} __packed req = {
		.action = MT_BF_TYPE_UPDATE,
		.ebf = true,
		.ibf = dev->ibf,
	};

	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TXBF_ACTION), &req,
				 sizeof(req), true);
}

int mt7915_mcu_set_txbf_sounding(struct mt7915_dev *dev)
{
#define MT_BF_PROCESSING		4
			struct {
			struct {
		u8 action;
				u8 snd_mode;
				u8 snd_mode;
				u8 sta_num;
				u8 sta_num;
				u8 rsv;
				u8 rsv;
				u8 wlan_idx[4];
				u8 wlan_idx[4];
				__le32 snd_period;	/* ms */
				__le32 snd_period;	/* ms */
			} __packed snd;
			struct {
				bool ebf;
				bool ibf;
				u8 rsv;
			} __packed type;
			struct {
				u8 bf_num;
				u8 bf_bitmap;
				u8 bf_sel[8];
				u8 rsv[5];
			} __packed mod;
		};
	} __packed req = {
	} __packed req = {
		.action = true,
		.action = action,
		.snd_mode = MT_BF_PROCESSING,
	};
	};


#define MT_BF_PROCESSING	4
	switch (action) {
	case MT_BF_SOUNDING_ON:
		req.snd.snd_mode = MT_BF_PROCESSING;
		break;
	case MT_BF_TYPE_UPDATE:
		req.type.ebf = true;
		req.type.ibf = dev->ibf;
		break;
	case MT_BF_MODULE_UPDATE:
		req.mod.bf_num = 2;
		req.mod.bf_bitmap = GENMASK(1, 0);
		break;
	default:
		return -EINVAL;
	}

	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TXBF_ACTION), &req,
	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TXBF_ACTION), &req,
				 sizeof(req), true);
				 sizeof(req), true);
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -1120,6 +1120,12 @@ enum {
	MT_IBF = BIT(1)		/* implicit beamforming */
	MT_IBF = BIT(1)		/* implicit beamforming */
};
};


enum {
	MT_BF_SOUNDING_ON = 1,
	MT_BF_TYPE_UPDATE = 20,
	MT_BF_MODULE_UPDATE = 25
};

#define MT7915_WTBL_UPDATE_MAX_SIZE	(sizeof(struct wtbl_req_hdr) +	\
#define MT7915_WTBL_UPDATE_MAX_SIZE	(sizeof(struct wtbl_req_hdr) +	\
					 sizeof(struct wtbl_generic) +	\
					 sizeof(struct wtbl_generic) +	\
					 sizeof(struct wtbl_rx) +	\
					 sizeof(struct wtbl_rx) +	\
+1 −3
Original line number Original line Diff line number Diff line
@@ -356,9 +356,7 @@ int mt7915_mcu_set_pm(struct mt7915_dev *dev, int band, int enter);
int mt7915_mcu_set_sku_en(struct mt7915_phy *phy, bool enable);
int mt7915_mcu_set_sku_en(struct mt7915_phy *phy, bool enable);
int mt7915_mcu_set_txpower_sku(struct mt7915_phy *phy);
int mt7915_mcu_set_txpower_sku(struct mt7915_phy *phy);
int mt7915_mcu_get_txpower_sku(struct mt7915_phy *phy, s8 *txpower, int len);
int mt7915_mcu_get_txpower_sku(struct mt7915_phy *phy, s8 *txpower, int len);
int mt7915_mcu_set_txbf_type(struct mt7915_dev *dev);
int mt7915_mcu_set_txbf(struct mt7915_dev *dev, u8 action);
int mt7915_mcu_set_txbf_module(struct mt7915_dev *dev);
int mt7915_mcu_set_txbf_sounding(struct mt7915_dev *dev);
int mt7915_mcu_set_fcc5_lpn(struct mt7915_dev *dev, int val);
int mt7915_mcu_set_fcc5_lpn(struct mt7915_dev *dev, int val);
int mt7915_mcu_set_pulse_th(struct mt7915_dev *dev,
int mt7915_mcu_set_pulse_th(struct mt7915_dev *dev,
			    const struct mt7915_dfs_pulse *pulse);
			    const struct mt7915_dfs_pulse *pulse);