Commit ac24dd35 authored by Felix Fietkau's avatar Felix Fietkau

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
...@@ -274,6 +274,7 @@ mt76_alloc_device(struct device *pdev, unsigned int size, ...@@ -274,6 +274,7 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
const struct mt76_driver_ops *drv_ops) const struct mt76_driver_ops *drv_ops)
{ {
struct ieee80211_hw *hw; struct ieee80211_hw *hw;
struct mt76_phy *phy;
struct mt76_dev *dev; struct mt76_dev *dev;
int i; int i;
...@@ -286,6 +287,10 @@ mt76_alloc_device(struct device *pdev, unsigned int size, ...@@ -286,6 +287,10 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
dev->dev = pdev; dev->dev = pdev;
dev->drv = drv_ops; dev->drv = drv_ops;
phy = &dev->phy;
phy->dev = dev;
phy->hw = hw;
spin_lock_init(&dev->rx_lock); spin_lock_init(&dev->rx_lock);
spin_lock_init(&dev->lock); spin_lock_init(&dev->lock);
spin_lock_init(&dev->cc_lock); spin_lock_init(&dev->cc_lock);
......
...@@ -449,7 +449,14 @@ struct mt76_rx_status { ...@@ -449,7 +449,14 @@ struct mt76_rx_status {
s8 chain_signal[IEEE80211_MAX_CHAINS]; s8 chain_signal[IEEE80211_MAX_CHAINS];
}; };
struct mt76_phy {
struct ieee80211_hw *hw;
struct mt76_dev *dev;
};
struct mt76_dev { struct mt76_dev {
struct mt76_phy phy; /* must be first */
struct ieee80211_hw *hw; struct ieee80211_hw *hw;
struct cfg80211_chan_def chandef; struct cfg80211_chan_def chandef;
struct ieee80211_channel *main_chan; struct ieee80211_channel *main_chan;
...@@ -581,7 +588,7 @@ enum mt76_phy_type { ...@@ -581,7 +588,7 @@ enum mt76_phy_type {
#define __mt76_rmw_field(_dev, _reg, _field, _val) \ #define __mt76_rmw_field(_dev, _reg, _field, _val) \
__mt76_rmw(_dev, _reg, _field, FIELD_PREP(_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, bool __mt76_poll(struct mt76_dev *dev, u32 offset, u32 mask, u32 val,
int timeout); int timeout);
......
...@@ -98,7 +98,10 @@ enum mt7603_reset_cause { ...@@ -98,7 +98,10 @@ enum mt7603_reset_cause {
}; };
struct mt7603_dev { 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; const struct mt76_bus_ops *bus_ops;
......
...@@ -80,7 +80,11 @@ struct mt7615_vif { ...@@ -80,7 +80,11 @@ struct mt7615_vif {
}; };
struct mt7615_dev { 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 vif_mask;
u32 omac_mask; u32 omac_mask;
......
...@@ -70,7 +70,10 @@ struct mt76x02_beacon_ops { ...@@ -70,7 +70,10 @@ struct mt76x02_beacon_ops {
(dev)->beacon_ops->pre_tbtt_enable(dev, enable) (dev)->beacon_ops->pre_tbtt_enable(dev, enable)
struct mt76x02_dev { 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]; struct mac_address macaddr_list[8];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment