Commit a85b590c authored by Felix Fietkau's avatar Felix Fietkau Committed by Kalle Valo

mt76: move ieee80211_hw allocation to common core

Allows it to be shared between different drivers and locks to be
initialized earlier
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent a164a942
...@@ -268,6 +268,26 @@ mt76_check_sband(struct mt76_dev *dev, int band) ...@@ -268,6 +268,26 @@ mt76_check_sband(struct mt76_dev *dev, int band)
dev->hw->wiphy->bands[band] = NULL; dev->hw->wiphy->bands[band] = NULL;
} }
struct mt76_dev *
mt76_alloc_device(unsigned int size, const struct ieee80211_ops *ops)
{
struct ieee80211_hw *hw;
struct mt76_dev *dev;
hw = ieee80211_alloc_hw(size, ops);
if (!hw)
return NULL;
dev = hw->priv;
dev->hw = hw;
spin_lock_init(&dev->rx_lock);
spin_lock_init(&dev->lock);
spin_lock_init(&dev->cc_lock);
return dev;
}
EXPORT_SYMBOL_GPL(mt76_alloc_device);
int mt76_register_device(struct mt76_dev *dev, bool vht, int mt76_register_device(struct mt76_dev *dev, bool vht,
struct ieee80211_rate *rates, int n_rates) struct ieee80211_rate *rates, int n_rates)
{ {
...@@ -277,8 +297,6 @@ int mt76_register_device(struct mt76_dev *dev, bool vht, ...@@ -277,8 +297,6 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,
dev_set_drvdata(dev->dev, dev); dev_set_drvdata(dev->dev, dev);
spin_lock_init(&dev->lock);
spin_lock_init(&dev->cc_lock);
INIT_LIST_HEAD(&dev->txwi_cache); INIT_LIST_HEAD(&dev->txwi_cache);
SET_IEEE80211_DEV(hw, dev->dev); SET_IEEE80211_DEV(hw, dev->dev);
......
...@@ -377,6 +377,8 @@ mt76_channel_state(struct mt76_dev *dev, struct ieee80211_channel *c) ...@@ -377,6 +377,8 @@ mt76_channel_state(struct mt76_dev *dev, struct ieee80211_channel *c)
return &msband->chan[idx]; return &msband->chan[idx];
} }
struct mt76_dev *mt76_alloc_device(unsigned int size,
const struct ieee80211_ops *ops);
int mt76_register_device(struct mt76_dev *dev, bool vht, int mt76_register_device(struct mt76_dev *dev, bool vht,
struct ieee80211_rate *rates, int n_rates); struct ieee80211_rate *rates, int n_rates);
void mt76_unregister_device(struct mt76_dev *dev); void mt76_unregister_device(struct mt76_dev *dev);
......
...@@ -638,20 +638,18 @@ struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev) ...@@ -638,20 +638,18 @@ struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev)
.rx_poll_complete = mt76x2_rx_poll_complete, .rx_poll_complete = mt76x2_rx_poll_complete,
.sta_ps = mt76x2_sta_ps, .sta_ps = mt76x2_sta_ps,
}; };
struct ieee80211_hw *hw;
struct mt76x2_dev *dev; struct mt76x2_dev *dev;
struct mt76_dev *mdev;
hw = ieee80211_alloc_hw(sizeof(*dev), &mt76x2_ops); mdev = mt76_alloc_device(sizeof(*dev), &mt76x2_ops);
if (!hw) if (!mdev)
return NULL; return NULL;
dev = hw->priv; dev = container_of(mdev, struct mt76x2_dev, mt76);
dev->mt76.dev = pdev; mdev->dev = pdev;
dev->mt76.hw = hw; mdev->drv = &drv_ops;
dev->mt76.drv = &drv_ops;
mutex_init(&dev->mutex); mutex_init(&dev->mutex);
spin_lock_init(&dev->irq_lock); spin_lock_init(&dev->irq_lock);
spin_lock_init(&dev->mt76.rx_lock);
return dev; return dev;
} }
......
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