Commit ac24dd35 authored by Felix Fietkau's avatar Felix Fietkau
Browse files

mt76: introduce struct mt76_phy



This is preparation for supporting multiple wiphys per device to support the
concurrent dual-band feature of MT7615D

On the first wiphy, hw->priv will point to struct mt76_dev, which contains a
struct mt76_phy at the start. For the secondary wiphy, hw->priv will point
to a mt76_phy encapsulated in a driver specific struct

To simplify access to struct mt76_phy members from drivers, the driver specific
device struct is changed to add a union of struct mt76_dev and struct mt76_phy
as the first element

Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent e5443256
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -274,6 +274,7 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
		  const struct mt76_driver_ops *drv_ops)
{
	struct ieee80211_hw *hw;
	struct mt76_phy *phy;
	struct mt76_dev *dev;
	int i;

@@ -286,6 +287,10 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
	dev->dev = pdev;
	dev->drv = drv_ops;

	phy = &dev->phy;
	phy->dev = dev;
	phy->hw = hw;

	spin_lock_init(&dev->rx_lock);
	spin_lock_init(&dev->lock);
	spin_lock_init(&dev->cc_lock);
+8 −1
Original line number Diff line number Diff line
@@ -449,7 +449,14 @@ struct mt76_rx_status {
	s8 chain_signal[IEEE80211_MAX_CHAINS];
};

struct mt76_phy {
	struct ieee80211_hw *hw;
	struct mt76_dev *dev;
};

struct mt76_dev {
	struct mt76_phy phy; /* must be first */

	struct ieee80211_hw *hw;
	struct cfg80211_chan_def chandef;
	struct ieee80211_channel *main_chan;
@@ -581,7 +588,7 @@ enum mt76_phy_type {
#define __mt76_rmw_field(_dev, _reg, _field, _val)	\
	__mt76_rmw(_dev, _reg, _field, FIELD_PREP(_field, _val))

#define mt76_hw(dev) (dev)->mt76.hw
#define mt76_hw(dev) (dev)->mphy.hw

bool __mt76_poll(struct mt76_dev *dev, u32 offset, u32 mask, u32 val,
		 int timeout);
+4 −1
Original line number Diff line number Diff line
@@ -98,7 +98,10 @@ enum mt7603_reset_cause {
};

struct mt7603_dev {
	struct mt76_dev mt76; /* must be first */
	union { /* must be first */
		struct mt76_dev mt76;
		struct mt76_phy mphy;
	};

	const struct mt76_bus_ops *bus_ops;

+5 −1
Original line number Diff line number Diff line
@@ -80,7 +80,11 @@ struct mt7615_vif {
};

struct mt7615_dev {
	struct mt76_dev mt76; /* must be first */
	union { /* must be first */
		struct mt76_dev mt76;
		struct mt76_phy mphy;
	};

	u32 vif_mask;
	u32 omac_mask;

+4 −1
Original line number Diff line number Diff line
@@ -70,7 +70,10 @@ struct mt76x02_beacon_ops {
	(dev)->beacon_ops->pre_tbtt_enable(dev, enable)

struct mt76x02_dev {
	struct mt76_dev mt76; /* must be first */
	union { /* must be first */
		struct mt76_dev mt76;
		struct mt76_phy mphy;
	};

	struct mac_address macaddr_list[8];