diff options
author | Luis R. Rodriguez <lrodriguez@atheros.com> | 2008-08-29 19:26:43 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-09-05 16:17:42 -0400 |
commit | f59ac0481660e66cec67f1d6b024e78b9dc715fe (patch) | |
tree | e9c69b04ac5863b1429bca5a9df1d75026703cde /drivers/net | |
parent | c6e387a214f4b2c4bd48020409e366c133385d98 (diff) |
cfg80211: keep track of supported interface modes
It is obviously good for userspace to know up front which
interface modes a given piece of hardware might support (even
if adding such an interface might fail later because of
concurrency issues), so let's make cfg80211 aware of that.
For good measure, disallow adding interfaces in all other
modes so drivers don't forget to announce support for one mode
when they add it.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Stephen Blackheath <tramp.enshrine.stephen@blacksapphire.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/adm8211.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath5k/base.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/main.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/b43/main.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/b43legacy/main.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/mac80211_hwsim.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/p54/p54common.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/rtl8187_dev.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_mac.c | 5 |
12 files changed, 51 insertions, 0 deletions
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c index 3333d4596b8..c6a55cd12db 100644 --- a/drivers/net/wireless/adm8211.c +++ b/drivers/net/wireless/adm8211.c | |||
@@ -1884,6 +1884,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev, | |||
1884 | dev->extra_tx_headroom = sizeof(struct adm8211_tx_hdr); | 1884 | dev->extra_tx_headroom = sizeof(struct adm8211_tx_hdr); |
1885 | /* dev->flags = IEEE80211_HW_RX_INCLUDES_FCS in promisc mode */ | 1885 | /* dev->flags = IEEE80211_HW_RX_INCLUDES_FCS in promisc mode */ |
1886 | dev->flags = IEEE80211_HW_SIGNAL_UNSPEC; | 1886 | dev->flags = IEEE80211_HW_SIGNAL_UNSPEC; |
1887 | dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); | ||
1887 | 1888 | ||
1888 | dev->channel_change_time = 1000; | 1889 | dev->channel_change_time = 1000; |
1889 | dev->max_signal = 100; /* FIXME: find better value */ | 1890 | dev->max_signal = 100; /* FIXME: find better value */ |
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index 7989ab5c2bb..85260c39aa2 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c | |||
@@ -485,6 +485,12 @@ ath5k_pci_probe(struct pci_dev *pdev, | |||
485 | hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | | 485 | hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | |
486 | IEEE80211_HW_SIGNAL_DBM | | 486 | IEEE80211_HW_SIGNAL_DBM | |
487 | IEEE80211_HW_NOISE_DBM; | 487 | IEEE80211_HW_NOISE_DBM; |
488 | |||
489 | hw->wiphy->interface_modes = | ||
490 | BIT(NL80211_IFTYPE_STATION) | | ||
491 | BIT(NL80211_IFTYPE_ADHOC) | | ||
492 | BIT(NL80211_IFTYPE_MESH_POINT); | ||
493 | |||
488 | hw->extra_tx_headroom = 2; | 494 | hw->extra_tx_headroom = 2; |
489 | hw->channel_change_time = 5000; | 495 | hw->channel_change_time = 5000; |
490 | sc = hw->priv; | 496 | sc = hw->priv; |
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index dc45eef3289..39a4a70d013 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
@@ -1482,6 +1482,11 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1482 | IEEE80211_HW_SIGNAL_DBM | | 1482 | IEEE80211_HW_SIGNAL_DBM | |
1483 | IEEE80211_HW_NOISE_DBM; | 1483 | IEEE80211_HW_NOISE_DBM; |
1484 | 1484 | ||
1485 | hw->wiphy->interface_modes = | ||
1486 | BIT(NL80211_IFTYPE_AP) | | ||
1487 | BIT(NL80211_IFTYPE_STATION) | | ||
1488 | BIT(NL80211_IFTYPE_ADHOC); | ||
1489 | |||
1485 | SET_IEEE80211_DEV(hw, &pdev->dev); | 1490 | SET_IEEE80211_DEV(hw, &pdev->dev); |
1486 | pci_set_drvdata(pdev, hw); | 1491 | pci_set_drvdata(pdev, hw); |
1487 | 1492 | ||
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 63bafc2f3f0..2d915c1a82a 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -4569,6 +4569,13 @@ static int b43_wireless_init(struct ssb_device *dev) | |||
4569 | IEEE80211_HW_SIGNAL_DBM | | 4569 | IEEE80211_HW_SIGNAL_DBM | |
4570 | IEEE80211_HW_NOISE_DBM; | 4570 | IEEE80211_HW_NOISE_DBM; |
4571 | 4571 | ||
4572 | hw->wiphy->interface_modes = | ||
4573 | BIT(NL80211_IFTYPE_AP) | | ||
4574 | BIT(NL80211_IFTYPE_MESH_POINT) | | ||
4575 | BIT(NL80211_IFTYPE_STATION) | | ||
4576 | BIT(NL80211_IFTYPE_WDS) | | ||
4577 | BIT(NL80211_IFTYPE_ADHOC); | ||
4578 | |||
4572 | hw->queues = b43_modparam_qos ? 4 : 1; | 4579 | hw->queues = b43_modparam_qos ? 4 : 1; |
4573 | SET_IEEE80211_DEV(hw, dev->dev); | 4580 | SET_IEEE80211_DEV(hw, dev->dev); |
4574 | if (is_valid_ether_addr(sprom->et1mac)) | 4581 | if (is_valid_ether_addr(sprom->et1mac)) |
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index 1cb77db5c29..68f63f5093a 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
@@ -3704,6 +3704,11 @@ static int b43legacy_wireless_init(struct ssb_device *dev) | |||
3704 | hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | | 3704 | hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | |
3705 | IEEE80211_HW_SIGNAL_DBM | | 3705 | IEEE80211_HW_SIGNAL_DBM | |
3706 | IEEE80211_HW_NOISE_DBM; | 3706 | IEEE80211_HW_NOISE_DBM; |
3707 | hw->wiphy->interface_modes = | ||
3708 | BIT(NL80211_IFTYPE_AP) | | ||
3709 | BIT(NL80211_IFTYPE_STATION) | | ||
3710 | BIT(NL80211_IFTYPE_WDS) | | ||
3711 | BIT(NL80211_IFTYPE_ADHOC); | ||
3707 | hw->queues = 1; /* FIXME: hardware has more queues */ | 3712 | hw->queues = 1; /* FIXME: hardware has more queues */ |
3708 | SET_IEEE80211_DEV(hw, dev->dev); | 3713 | SET_IEEE80211_DEV(hw, dev->dev); |
3709 | if (is_valid_ether_addr(sprom->et1mac)) | 3714 | if (is_valid_ether_addr(sprom->et1mac)) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index fbf75a62958..0a511ef8e35 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -819,6 +819,10 @@ int iwl_setup_mac(struct iwl_priv *priv) | |||
819 | /* Tell mac80211 our characteristics */ | 819 | /* Tell mac80211 our characteristics */ |
820 | hw->flags = IEEE80211_HW_SIGNAL_DBM | | 820 | hw->flags = IEEE80211_HW_SIGNAL_DBM | |
821 | IEEE80211_HW_NOISE_DBM; | 821 | IEEE80211_HW_NOISE_DBM; |
822 | hw->wiphy->interface_modes = | ||
823 | BIT(NL80211_IFTYPE_AP) | | ||
824 | BIT(NL80211_IFTYPE_STATION) | | ||
825 | BIT(NL80211_IFTYPE_ADHOC); | ||
822 | /* Default value; 4 EDCA QOS priorities */ | 826 | /* Default value; 4 EDCA QOS priorities */ |
823 | hw->queues = 4; | 827 | hw->queues = 4; |
824 | /* queues to support 11n aggregation */ | 828 | /* queues to support 11n aggregation */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index a622fc33590..cee3045f160 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -7888,6 +7888,11 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e | |||
7888 | hw->flags = IEEE80211_HW_SIGNAL_DBM | | 7888 | hw->flags = IEEE80211_HW_SIGNAL_DBM | |
7889 | IEEE80211_HW_NOISE_DBM; | 7889 | IEEE80211_HW_NOISE_DBM; |
7890 | 7890 | ||
7891 | hw->wiphy->interface_modes = | ||
7892 | BIT(NL80211_IFTYPE_AP) | | ||
7893 | BIT(NL80211_IFTYPE_STATION) | | ||
7894 | BIT(NL80211_IFTYPE_ADHOC); | ||
7895 | |||
7891 | /* 4 EDCA QOS priorities */ | 7896 | /* 4 EDCA QOS priorities */ |
7892 | hw->queues = 4; | 7897 | hw->queues = 4; |
7893 | 7898 | ||
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 732429d4912..6ba50f087f7 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c | |||
@@ -447,6 +447,9 @@ static int __init init_mac80211_hwsim(void) | |||
447 | 447 | ||
448 | hw->channel_change_time = 1; | 448 | hw->channel_change_time = 1; |
449 | hw->queues = 4; | 449 | hw->queues = 4; |
450 | hw->wiphy->interface_modes = | ||
451 | BIT(NL80211_IFTYPE_STATION) | | ||
452 | BIT(NL80211_IFTYPE_AP); | ||
450 | hw->ampdu_queues = 1; | 453 | hw->ampdu_queues = 1; |
451 | 454 | ||
452 | memcpy(data->channels, hwsim_channels, sizeof(hwsim_channels)); | 455 | memcpy(data->channels, hwsim_channels, sizeof(hwsim_channels)); |
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c index 17e06bbc996..6da98e6e6a9 100644 --- a/drivers/net/wireless/p54/p54common.c +++ b/drivers/net/wireless/p54/p54common.c | |||
@@ -1072,6 +1072,9 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len) | |||
1072 | dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | /* not sure */ | 1072 | dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | /* not sure */ |
1073 | IEEE80211_HW_RX_INCLUDES_FCS | | 1073 | IEEE80211_HW_RX_INCLUDES_FCS | |
1074 | IEEE80211_HW_SIGNAL_UNSPEC; | 1074 | IEEE80211_HW_SIGNAL_UNSPEC; |
1075 | |||
1076 | dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); | ||
1077 | |||
1075 | dev->channel_change_time = 1000; /* TODO: find actual value */ | 1078 | dev->channel_change_time = 1000; /* TODO: find actual value */ |
1076 | dev->max_signal = 127; | 1079 | dev->max_signal = 127; |
1077 | 1080 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index 369b0b2d864..2f3bfc60688 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -1052,6 +1052,11 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev) | |||
1052 | */ | 1052 | */ |
1053 | rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf); | 1053 | rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf); |
1054 | 1054 | ||
1055 | rt2x00dev->hw->wiphy->interface_modes = | ||
1056 | BIT(NL80211_IFTYPE_AP) | | ||
1057 | BIT(NL80211_IFTYPE_STATION) | | ||
1058 | BIT(NL80211_IFTYPE_ADHOC); | ||
1059 | |||
1055 | /* | 1060 | /* |
1056 | * Let the driver probe the device to detect the capabilities. | 1061 | * Let the driver probe the device to detect the capabilities. |
1057 | */ | 1062 | */ |
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c index 060a2650535..8a42bfa6d4f 100644 --- a/drivers/net/wireless/rtl8187_dev.c +++ b/drivers/net/wireless/rtl8187_dev.c | |||
@@ -1184,6 +1184,8 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
1184 | dev->max_signal = 65; | 1184 | dev->max_signal = 65; |
1185 | } | 1185 | } |
1186 | 1186 | ||
1187 | dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); | ||
1188 | |||
1187 | if ((id->driver_info == DEVICE_RTL8187) && priv->is_rtl8187b) | 1189 | if ((id->driver_info == DEVICE_RTL8187) && priv->is_rtl8187b) |
1188 | printk(KERN_INFO "rtl8187: inconsistency between id with OEM" | 1190 | printk(KERN_INFO "rtl8187: inconsistency between id with OEM" |
1189 | " info!\n"); | 1191 | " info!\n"); |
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c index 4d7b98b0503..e019102b228 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.c +++ b/drivers/net/wireless/zd1211rw/zd_mac.c | |||
@@ -937,6 +937,11 @@ struct ieee80211_hw *zd_mac_alloc_hw(struct usb_interface *intf) | |||
937 | hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | | 937 | hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | |
938 | IEEE80211_HW_SIGNAL_DB; | 938 | IEEE80211_HW_SIGNAL_DB; |
939 | 939 | ||
940 | hw->wiphy->interface_modes = | ||
941 | BIT(NL80211_IFTYPE_MESH_POINT) | | ||
942 | BIT(NL80211_IFTYPE_STATION) | | ||
943 | BIT(NL80211_IFTYPE_ADHOC); | ||
944 | |||
940 | hw->max_signal = 100; | 945 | hw->max_signal = 100; |
941 | hw->queues = 1; | 946 | hw->queues = 1; |
942 | hw->extra_tx_headroom = sizeof(struct zd_ctrlset); | 947 | hw->extra_tx_headroom = sizeof(struct zd_ctrlset); |