mirror of
https://github.com/torvalds/linux.git
synced 2024-12-12 14:12:51 +00:00
mt76: move mt76x02_init_device in mt76x02-lib module
Move mt76x02_init_device routine in mt76x02_util.c in order to be reused by mt76x0 driver and remove duplicated code. Move interface combo definition supported by the driver in mt76x02_init_device routine Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
dd61100db4
commit
5cbace02d8
@ -340,8 +340,6 @@ int mt76x0_eeprom_init(struct mt76x02_dev *dev)
|
||||
mt76x0_set_freq_offset(dev);
|
||||
mt76x0_set_temp_offset(dev);
|
||||
|
||||
dev->mt76.chainmask = 0x0101;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -338,46 +338,16 @@ EXPORT_SYMBOL_GPL(mt76x0_alloc_device);
|
||||
|
||||
int mt76x0_register_device(struct mt76x02_dev *dev)
|
||||
{
|
||||
struct mt76_dev *mdev = &dev->mt76;
|
||||
struct ieee80211_hw *hw = mdev->hw;
|
||||
struct wiphy *wiphy = hw->wiphy;
|
||||
int ret;
|
||||
|
||||
/* Reserve WCID 0 for mcast - thanks to this APs WCID will go to
|
||||
* entry no. 1 like it does in the vendor driver.
|
||||
*/
|
||||
mdev->wcid_mask[0] |= 1;
|
||||
|
||||
/* init fake wcid for monitor interfaces */
|
||||
mdev->global_wcid.idx = 0xff;
|
||||
mdev->global_wcid.hw_key_idx = -1;
|
||||
|
||||
/* init antenna configuration */
|
||||
mdev->antenna_mask = 1;
|
||||
|
||||
hw->queues = 4;
|
||||
hw->max_rates = 1;
|
||||
hw->max_report_rates = 7;
|
||||
hw->max_rate_tries = 1;
|
||||
hw->extra_tx_headroom = 2;
|
||||
if (mt76_is_usb(dev))
|
||||
hw->extra_tx_headroom += sizeof(struct mt76x02_txwi) +
|
||||
MT_DMA_HDR_LEN;
|
||||
|
||||
hw->sta_data_size = sizeof(struct mt76x02_sta);
|
||||
hw->vif_data_size = sizeof(struct mt76x02_vif);
|
||||
|
||||
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
|
||||
|
||||
INIT_DELAYED_WORK(&dev->mac_work, mt76x02_mac_work);
|
||||
|
||||
ret = mt76_register_device(mdev, true, mt76x02_rates,
|
||||
mt76x02_init_device(dev);
|
||||
ret = mt76_register_device(&dev->mt76, true, mt76x02_rates,
|
||||
ARRAY_SIZE(mt76x02_rates));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* overwrite unsupported features */
|
||||
if (mdev->cap.has_5ghz)
|
||||
if (dev->mt76.cap.has_5ghz)
|
||||
mt76x0_vht_cap_mask(&dev->mt76.sband_5g.sband);
|
||||
|
||||
mt76x02_init_debugfs(dev);
|
||||
|
@ -102,6 +102,7 @@ struct mt76x02_dev {
|
||||
|
||||
extern struct ieee80211_rate mt76x02_rates[12];
|
||||
|
||||
void mt76x02_init_device(struct mt76x02_dev *dev);
|
||||
void mt76x02_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed_flags,
|
||||
unsigned int *total_flags, u64 multicast);
|
||||
|
@ -47,6 +47,87 @@ struct ieee80211_rate mt76x02_rates[] = {
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(mt76x02_rates);
|
||||
|
||||
static const struct ieee80211_iface_limit mt76x02_if_limits[] = {
|
||||
{
|
||||
.max = 1,
|
||||
.types = BIT(NL80211_IFTYPE_ADHOC)
|
||||
}, {
|
||||
.max = 8,
|
||||
.types = BIT(NL80211_IFTYPE_STATION) |
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
BIT(NL80211_IFTYPE_MESH_POINT) |
|
||||
#endif
|
||||
BIT(NL80211_IFTYPE_AP)
|
||||
},
|
||||
};
|
||||
|
||||
static const struct ieee80211_iface_combination mt76x02_if_comb[] = {
|
||||
{
|
||||
.limits = mt76x02_if_limits,
|
||||
.n_limits = ARRAY_SIZE(mt76x02_if_limits),
|
||||
.max_interfaces = 8,
|
||||
.num_different_channels = 1,
|
||||
.beacon_int_infra_match = true,
|
||||
.radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
|
||||
BIT(NL80211_CHAN_WIDTH_20) |
|
||||
BIT(NL80211_CHAN_WIDTH_40) |
|
||||
BIT(NL80211_CHAN_WIDTH_80),
|
||||
}
|
||||
};
|
||||
|
||||
void mt76x02_init_device(struct mt76x02_dev *dev)
|
||||
{
|
||||
struct ieee80211_hw *hw = mt76_hw(dev);
|
||||
struct wiphy *wiphy = hw->wiphy;
|
||||
|
||||
INIT_DELAYED_WORK(&dev->mac_work, mt76x02_mac_work);
|
||||
|
||||
hw->queues = 4;
|
||||
hw->max_rates = 1;
|
||||
hw->max_report_rates = 7;
|
||||
hw->max_rate_tries = 1;
|
||||
hw->extra_tx_headroom = 2;
|
||||
|
||||
if (mt76_is_usb(dev)) {
|
||||
hw->extra_tx_headroom += sizeof(struct mt76x02_txwi) +
|
||||
MT_DMA_HDR_LEN;
|
||||
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
|
||||
} else {
|
||||
wiphy->iface_combinations = mt76x02_if_comb;
|
||||
wiphy->n_iface_combinations = ARRAY_SIZE(mt76x02_if_comb);
|
||||
wiphy->interface_modes =
|
||||
BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_AP) |
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
BIT(NL80211_IFTYPE_MESH_POINT) |
|
||||
#endif
|
||||
BIT(NL80211_IFTYPE_ADHOC);
|
||||
}
|
||||
|
||||
hw->sta_data_size = sizeof(struct mt76x02_sta);
|
||||
hw->vif_data_size = sizeof(struct mt76x02_vif);
|
||||
|
||||
ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
|
||||
ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
|
||||
|
||||
dev->mt76.global_wcid.idx = 255;
|
||||
dev->mt76.global_wcid.hw_key_idx = -1;
|
||||
dev->slottime = 9;
|
||||
|
||||
if (is_mt76x2(dev)) {
|
||||
dev->mt76.sband_2g.sband.ht_cap.cap |=
|
||||
IEEE80211_HT_CAP_LDPC_CODING;
|
||||
dev->mt76.sband_5g.sband.ht_cap.cap |=
|
||||
IEEE80211_HT_CAP_LDPC_CODING;
|
||||
dev->mt76.chainmask = 0x202;
|
||||
dev->mt76.antenna_mask = 3;
|
||||
} else {
|
||||
dev->mt76.chainmask = 0x101;
|
||||
dev->mt76.antenna_mask = 1;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_init_device);
|
||||
|
||||
void mt76x02_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed_flags,
|
||||
unsigned int *total_flags, u64 multicast)
|
||||
|
@ -158,40 +158,6 @@ void mt76_write_mac_initvals(struct mt76x02_dev *dev)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_write_mac_initvals);
|
||||
|
||||
void mt76x2_init_device(struct mt76x02_dev *dev)
|
||||
{
|
||||
struct ieee80211_hw *hw = mt76_hw(dev);
|
||||
|
||||
INIT_DELAYED_WORK(&dev->mac_work, mt76x02_mac_work);
|
||||
|
||||
hw->queues = 4;
|
||||
hw->max_rates = 1;
|
||||
hw->max_report_rates = 7;
|
||||
hw->max_rate_tries = 1;
|
||||
hw->extra_tx_headroom = 2;
|
||||
if (mt76_is_usb(dev))
|
||||
hw->extra_tx_headroom += sizeof(struct mt76x02_txwi) +
|
||||
MT_DMA_HDR_LEN;
|
||||
|
||||
hw->sta_data_size = sizeof(struct mt76x02_sta);
|
||||
hw->vif_data_size = sizeof(struct mt76x02_vif);
|
||||
|
||||
ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
|
||||
ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
|
||||
|
||||
dev->mt76.sband_2g.sband.ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
|
||||
dev->mt76.sband_5g.sband.ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
|
||||
|
||||
dev->mt76.chainmask = 0x202;
|
||||
dev->mt76.global_wcid.idx = 255;
|
||||
dev->mt76.global_wcid.hw_key_idx = -1;
|
||||
dev->slottime = 9;
|
||||
|
||||
/* init antenna configuration */
|
||||
dev->mt76.antenna_mask = 3;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x2_init_device);
|
||||
|
||||
void mt76x2_init_txpower(struct mt76x02_dev *dev,
|
||||
struct ieee80211_supported_band *sband)
|
||||
{
|
||||
|
@ -52,7 +52,6 @@ extern const struct ieee80211_ops mt76x2_ops;
|
||||
|
||||
struct mt76x02_dev *mt76x2_alloc_device(struct device *pdev);
|
||||
int mt76x2_register_device(struct mt76x02_dev *dev);
|
||||
void mt76x2_init_device(struct mt76x02_dev *dev);
|
||||
|
||||
void mt76x2_phy_power_on(struct mt76x02_dev *dev);
|
||||
int mt76x2_init_hardware(struct mt76x02_dev *dev);
|
||||
|
@ -384,34 +384,6 @@ static void mt76x2_regd_notifier(struct wiphy *wiphy,
|
||||
mt76x2_dfs_set_domain(dev, request->dfs_region);
|
||||
}
|
||||
|
||||
static const struct ieee80211_iface_limit if_limits[] = {
|
||||
{
|
||||
.max = 1,
|
||||
.types = BIT(NL80211_IFTYPE_ADHOC)
|
||||
}, {
|
||||
.max = 8,
|
||||
.types = BIT(NL80211_IFTYPE_STATION) |
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
BIT(NL80211_IFTYPE_MESH_POINT) |
|
||||
#endif
|
||||
BIT(NL80211_IFTYPE_AP)
|
||||
},
|
||||
};
|
||||
|
||||
static const struct ieee80211_iface_combination if_comb[] = {
|
||||
{
|
||||
.limits = if_limits,
|
||||
.n_limits = ARRAY_SIZE(if_limits),
|
||||
.max_interfaces = 8,
|
||||
.num_different_channels = 1,
|
||||
.beacon_int_infra_match = true,
|
||||
.radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
|
||||
BIT(NL80211_CHAN_WIDTH_20) |
|
||||
BIT(NL80211_CHAN_WIDTH_40) |
|
||||
BIT(NL80211_CHAN_WIDTH_80),
|
||||
}
|
||||
};
|
||||
|
||||
static void mt76x2_led_set_config(struct mt76_dev *mt76, u8 delay_on,
|
||||
u8 delay_off)
|
||||
{
|
||||
@ -468,7 +440,7 @@ int mt76x2_register_device(struct mt76x02_dev *dev)
|
||||
|
||||
INIT_DELAYED_WORK(&dev->cal_work, mt76x2_phy_calibrate);
|
||||
|
||||
mt76x2_init_device(dev);
|
||||
mt76x02_init_device(dev);
|
||||
|
||||
ret = mt76x2_init_hardware(dev);
|
||||
if (ret)
|
||||
@ -488,19 +460,8 @@ int mt76x2_register_device(struct mt76x02_dev *dev)
|
||||
wiphy->addresses = dev->macaddr_list;
|
||||
wiphy->n_addresses = ARRAY_SIZE(dev->macaddr_list);
|
||||
|
||||
wiphy->iface_combinations = if_comb;
|
||||
wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
|
||||
|
||||
wiphy->reg_notifier = mt76x2_regd_notifier;
|
||||
|
||||
wiphy->interface_modes =
|
||||
BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_AP) |
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
BIT(NL80211_IFTYPE_MESH_POINT) |
|
||||
#endif
|
||||
BIT(NL80211_IFTYPE_ADHOC);
|
||||
|
||||
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
|
||||
|
||||
mt76x2_dfs_init_detector(dev);
|
||||
|
@ -245,11 +245,10 @@ int mt76x2u_init_hardware(struct mt76x02_dev *dev)
|
||||
int mt76x2u_register_device(struct mt76x02_dev *dev)
|
||||
{
|
||||
struct ieee80211_hw *hw = mt76_hw(dev);
|
||||
struct wiphy *wiphy = hw->wiphy;
|
||||
int err;
|
||||
|
||||
INIT_DELAYED_WORK(&dev->cal_work, mt76x2u_phy_calibrate);
|
||||
mt76x2_init_device(dev);
|
||||
mt76x02_init_device(dev);
|
||||
|
||||
err = mt76x2u_init_eeprom(dev);
|
||||
if (err < 0)
|
||||
@ -267,8 +266,6 @@ int mt76x2u_register_device(struct mt76x02_dev *dev)
|
||||
if (err < 0)
|
||||
goto fail;
|
||||
|
||||
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
|
||||
|
||||
err = mt76_register_device(&dev->mt76, true, mt76x02_rates,
|
||||
ARRAY_SIZE(mt76x02_rates));
|
||||
if (err)
|
||||
|
Loading…
Reference in New Issue
Block a user