* [PATCH] carl9170: advertise interface combinations
@ 2011-05-13 22:35 Christian Lamparter
2011-05-13 23:28 ` Johannes Berg
0 siblings, 1 reply; 5+ messages in thread
From: Christian Lamparter @ 2011-05-13 22:35 UTC (permalink / raw)
To: linux-wireless; +Cc: Johannes Berg, linville
In order to provide multiple interfaces for a single device,
the driver is now required to advertise all possible
interface configurations to the stack.
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
---
with the standard firmware, iw now displays:
[...]
valid interface combinations:
* #{ IBSS, managed, AP, P2P-client, P2P-GO } <= 2,
total <= 2, #channels <= 1
[...]
---
diff --git a/drivers/net/wireless/ath/carl9170/carl9170.h b/drivers/net/wireless/ath/carl9170/carl9170.h
index 71d6d07..dbce999 100644
--- a/drivers/net/wireless/ath/carl9170/carl9170.h
+++ b/drivers/net/wireless/ath/carl9170/carl9170.h
@@ -287,6 +287,10 @@ struct ar9170 {
unsigned int tx_seq_table;
} fw;
+ /* interface configuration combinations */
+ struct ieee80211_iface_limit if_comb_limits[1];
+ struct ieee80211_iface_combination if_combs[1];
+
/* reset / stuck frames/queue detection */
struct work_struct restart_work;
struct work_struct ping_work;
diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c
index 9517ede..8ec27b8 100644
--- a/drivers/net/wireless/ath/carl9170/fw.c
+++ b/drivers/net/wireless/ath/carl9170/fw.c
@@ -300,6 +300,17 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
}
}
+ ar->if_comb_limits[0].max = ar->fw.vif_num;
+ ar->if_comb_limits[0].types = ar->hw->wiphy->interface_modes;
+
+ ar->if_combs[0].num_different_channels = 1;
+ ar->if_combs[0].max_interfaces = ar->fw.vif_num;
+ ar->if_combs[0].limits = ar->if_comb_limits;
+ ar->if_combs[0].n_limits = ARRAY_SIZE(ar->if_comb_limits);
+
+ ar->hw->wiphy->iface_combinations = ar->if_combs;
+ ar->hw->wiphy->n_iface_combinations = ARRAY_SIZE(ar->if_combs);
+
txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC,
sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER);
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] carl9170: advertise interface combinations 2011-05-13 22:35 [PATCH] carl9170: advertise interface combinations Christian Lamparter @ 2011-05-13 23:28 ` Johannes Berg 2011-05-13 23:39 ` Christian Lamparter 0 siblings, 1 reply; 5+ messages in thread From: Johannes Berg @ 2011-05-13 23:28 UTC (permalink / raw) To: Christian Lamparter; +Cc: linux-wireless, linville On Sat, 2011-05-14 at 00:35 +0200, Christian Lamparter wrote: > In order to provide multiple interfaces for a single device, > the driver is now required to advertise all possible > interface configurations to the stack. Cool, thanks! Note that currently it's not yet required, but whatever :-) > with the standard firmware, iw now displays: > [...] > valid interface combinations: > * #{ IBSS, managed, AP, P2P-client, P2P-GO } <= 2, > total <= 2, #channels <= 1 Since mac80211 doesn't allow multiple IBSS interfaces, I think you should leave that out. And I should probably make mac80211 complain if it's advertised erroneously. johannes ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] carl9170: advertise interface combinations 2011-05-13 23:28 ` Johannes Berg @ 2011-05-13 23:39 ` Christian Lamparter 2011-05-13 23:48 ` Johannes Berg 0 siblings, 1 reply; 5+ messages in thread From: Christian Lamparter @ 2011-05-13 23:39 UTC (permalink / raw) To: Johannes Berg; +Cc: linux-wireless, linville On Saturday 14 May 2011 01:28:20 Johannes Berg wrote: > On Sat, 2011-05-14 at 00:35 +0200, Christian Lamparter wrote: > > In order to provide multiple interfaces for a single device, > > the driver is now required to advertise all possible > > interface configurations to the stack. > > Cool, thanks! Note that currently it's not yet required, but > whatever :-) "currently" :D "I want to make you aware that I plan to remove the WIPHY_FLAG_ENFORCE_COMBINATIONS flag again soon, so that all drivers that don't advertise valid combinations will not be able to have multiple virtual interfaces." > > with the standard firmware, iw now displays: > > [...] > > valid interface combinations: > > * #{ IBSS, managed, AP, P2P-client, P2P-GO } <= 2, > > total <= 2, #channels <= 1 > > Since mac80211 doesn't allow multiple IBSS interfaces, I think you > should leave that out. And I should probably make mac80211 complain if > it's advertised erroneously. what about "valid" configurations like: 1 IBSS + 1 AP [STA/P2P make less sense]? (only one IBSS) Regards, Chr ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] carl9170: advertise interface combinations 2011-05-13 23:39 ` Christian Lamparter @ 2011-05-13 23:48 ` Johannes Berg 2011-05-14 0:42 ` [PATCH v2] " Christian Lamparter 0 siblings, 1 reply; 5+ messages in thread From: Johannes Berg @ 2011-05-13 23:48 UTC (permalink / raw) To: Christian Lamparter; +Cc: linux-wireless, linville On Sat, 2011-05-14 at 01:39 +0200, Christian Lamparter wrote: > > Cool, thanks! Note that currently it's not yet required, but > > whatever :-) > "currently" :D > > "I want to make you aware that I plan to remove the > WIPHY_FLAG_ENFORCE_COMBINATIONS flag again soon, so that all > drivers that don't advertise valid combinations will not be able to have > multiple virtual interfaces." :P I think it's a bit of a mess to have drivers advertise no combinations yet still support them. But of course any userspace application that makes use of the advertising will just think it's not supported anyway, so it doesn't matter all that much. > > > with the standard firmware, iw now displays: > > > [...] > > > valid interface combinations: > > > * #{ IBSS, managed, AP, P2P-client, P2P-GO } <= 2, > > > total <= 2, #channels <= 1 > > > > Since mac80211 doesn't allow multiple IBSS interfaces, I think you > > should leave that out. And I should probably make mac80211 complain if > > it's advertised erroneously. > what about "valid" configurations like: > 1 IBSS + 1 AP [STA/P2P make less sense]? > (only one IBSS) In theory mac80211 supports that, yeah. Not sure it makes any sense ... You could advertise it that way by adding a "one IBSS only" ieee80211_iface_limit to the combination, so it'll look like this: * #{ IBSS } <= 1, #{ managed, AP, P2P-client, P2P-GO } <= 2, total <= 2 Truth though is that due to the channel restriction that will only be possible if you lock the IBSS to a channel. I guess the question is if it makes sense to list IBSS at all, or if you want to just remove it and not have to worry about TSF sync issues and all that. But I can't say I really care. johannes ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] carl9170: advertise interface combinations 2011-05-13 23:48 ` Johannes Berg @ 2011-05-14 0:42 ` Christian Lamparter 0 siblings, 0 replies; 5+ messages in thread From: Christian Lamparter @ 2011-05-14 0:42 UTC (permalink / raw) To: Johannes Berg; +Cc: linux-wireless, linville In order to provide multiple interfaces for a single device, the driver will be required to advertise all possible interface configurations to the stack. Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> --- v1 -> v2 fix commit log - currently there's no restriction, yet! drop IBSS from the combination lists iw now says this: Supported interface modes: * IBSS * managed * AP * AP/VLAN * monitor * P2P-client * P2P-GO software interface modes (can always be added): * AP/VLAN * monitor valid interface combinations: * #{ managed, AP, P2P-client, P2P-GO } <= 2, total <= 2, #channels <= 1 [mesh can be added at any time, question is: will it make sense... in fact, does it make sense to have multiple STAs/P2P-client either, think of DFS & TSF sync problems 11.1.1.1?] --- diff --git a/drivers/net/wireless/ath/carl9170/carl9170.h b/drivers/net/wireless/ath/carl9170/carl9170.h index 71d6d07..dbce999 100644 --- a/drivers/net/wireless/ath/carl9170/carl9170.h +++ b/drivers/net/wireless/ath/carl9170/carl9170.h @@ -287,6 +287,10 @@ struct ar9170 { unsigned int tx_seq_table; } fw; + /* interface configuration combinations */ + struct ieee80211_iface_limit if_comb_limits[1]; + struct ieee80211_iface_combination if_combs[1]; + /* reset / stuck frames/queue detection */ struct work_struct restart_work; struct work_struct ping_work; diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c index 9517ede..221957c 100644 --- a/drivers/net/wireless/ath/carl9170/fw.c +++ b/drivers/net/wireless/ath/carl9170/fw.c @@ -151,6 +151,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) const struct carl9170fw_chk_desc *chk_desc; const struct carl9170fw_last_desc *last_desc; const struct carl9170fw_txsq_desc *txsq_desc; + u16 if_comb_types; last_desc = carl9170_fw_find_desc(ar, LAST_MAGIC, sizeof(*last_desc), CARL9170FW_LAST_DESC_CUR_VER); @@ -268,6 +269,9 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) if (SUPP(CARL9170FW_WOL)) device_set_wakeup_enable(&ar->udev->dev, true); + if_comb_types = BIT(NL80211_IFTYPE_STATION) | + BIT(NL80211_IFTYPE_P2P_CLIENT); + ar->fw.vif_num = otus_desc->vif_num; ar->fw.cmd_bufs = otus_desc->cmd_bufs; ar->fw.address = le32_to_cpu(otus_desc->fw_address); @@ -294,12 +298,25 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); if (SUPP(CARL9170FW_WLANTX_CAB)) { - ar->hw->wiphy->interface_modes |= + if_comb_types |= BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_P2P_GO); } } + ar->if_comb_limits[0].max = ar->fw.vif_num; + ar->if_comb_limits[0].types = if_comb_types; + + ar->if_combs[0].num_different_channels = 1; + ar->if_combs[0].max_interfaces = ar->fw.vif_num; + ar->if_combs[0].limits = ar->if_comb_limits; + ar->if_combs[0].n_limits = ARRAY_SIZE(ar->if_comb_limits); + + ar->hw->wiphy->iface_combinations = ar->if_combs; + ar->hw->wiphy->n_iface_combinations = ARRAY_SIZE(ar->if_combs); + + ar->hw->wiphy->interface_modes |= if_comb_types; + txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC, sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER); diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c index a975f5d..c45ce42 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c @@ -1674,14 +1674,8 @@ void *carl9170_alloc(size_t priv_size) INIT_LIST_HEAD(&ar->vif_list); init_completion(&ar->tx_flush); - /* - * Note: - * IBSS/ADHOC and AP mode are only enabled, if the firmware - * supports these modes. The code which will add the - * additional interface_modes is in fw.c. - */ - hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | - BIT(NL80211_IFTYPE_P2P_CLIENT); + /* firmware decides which modes we support */ + hw->wiphy->interface_modes = 0; hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS | IEEE80211_HW_REPORTS_TX_ACK_STATUS | ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-05-14 0:42 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-05-13 22:35 [PATCH] carl9170: advertise interface combinations Christian Lamparter 2011-05-13 23:28 ` Johannes Berg 2011-05-13 23:39 ` Christian Lamparter 2011-05-13 23:48 ` Johannes Berg 2011-05-14 0:42 ` [PATCH v2] " Christian Lamparter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).