mt76: introduce struct mt76_phy
authorFelix Fietkau <nbd@nbd.name>
Mon, 30 Sep 2019 20:09:06 +0000 (22:09 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 14 Feb 2020 06:49:59 +0000 (07:49 +0100)
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: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mac80211.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
drivers/net/wireless/mediatek/mt76/mt76x02.h

index 73853b4..14e5e1a 100644 (file)
@@ -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);
index fb07776..2a01d2c 100644 (file)
@@ -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);
index ab54b06..63ec1fa 100644 (file)
@@ -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;
 
index 2148683..85d865e 100644 (file)
@@ -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;
 
index 0ca0bbf..7a44ab5 100644 (file)
@@ -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];