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,
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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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;
......
......@@ -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];
......
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