aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJavier Lopez <jlopex@cozybit.com>2012-07-27 14:27:25 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-08-06 15:01:56 -0400
commitda93c26d0b26139f33cebf9af55715452a10f374 (patch)
treea1520d2bd676544752f0a7fa9b84833c6f4940e1 /drivers
parentc071b9f666beee2b27b5a4667f099026ca539bd7 (diff)
carl9170: Add support for NL80211_IFTYPE_MESH_POINT interfaces
This patch contains following modifications: - Add mesh capabilities on fw.c to permit creation of mesh interfaces using this driver. - Modify carl9170_set_operating_mode, to use AP-style beaconing with mesh interfaces. - Allow beacon updates for NL80211_IFTYPE_MESH_POINT type in carl9170_handle_command_response. - Add NL80211_IFTYPE_MESH_POINT case on carl9170_op_add_interfaces to support mesh/ap/sta virtual interface combinations. Signed-off-by: Javier Lopez <jlopex@cozybit.com> Acked-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/carl9170/fw.c1
-rw-r--r--drivers/net/wireless/ath/carl9170/mac.c2
-rw-r--r--drivers/net/wireless/ath/carl9170/main.c4
-rw-r--r--drivers/net/wireless/ath/carl9170/rx.c1
4 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c
index c5ca6f1f5836..24ac2876a733 100644
--- a/drivers/net/wireless/ath/carl9170/fw.c
+++ b/drivers/net/wireless/ath/carl9170/fw.c
@@ -341,6 +341,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
341 if (SUPP(CARL9170FW_WLANTX_CAB)) { 341 if (SUPP(CARL9170FW_WLANTX_CAB)) {
342 if_comb_types |= 342 if_comb_types |=
343 BIT(NL80211_IFTYPE_AP) | 343 BIT(NL80211_IFTYPE_AP) |
344 BIT(NL80211_IFTYPE_MESH_POINT) |
344 BIT(NL80211_IFTYPE_P2P_GO); 345 BIT(NL80211_IFTYPE_P2P_GO);
345 } 346 }
346 } 347 }
diff --git a/drivers/net/wireless/ath/carl9170/mac.c b/drivers/net/wireless/ath/carl9170/mac.c
index 53415bfd8bef..f8676280dc36 100644
--- a/drivers/net/wireless/ath/carl9170/mac.c
+++ b/drivers/net/wireless/ath/carl9170/mac.c
@@ -318,10 +318,10 @@ int carl9170_set_operating_mode(struct ar9170 *ar)
318 bssid = common->curbssid; 318 bssid = common->curbssid;
319 319
320 switch (vif->type) { 320 switch (vif->type) {
321 case NL80211_IFTYPE_MESH_POINT:
322 case NL80211_IFTYPE_ADHOC: 321 case NL80211_IFTYPE_ADHOC:
323 cam_mode |= AR9170_MAC_CAM_IBSS; 322 cam_mode |= AR9170_MAC_CAM_IBSS;
324 break; 323 break;
324 case NL80211_IFTYPE_MESH_POINT:
325 case NL80211_IFTYPE_AP: 325 case NL80211_IFTYPE_AP:
326 cam_mode |= AR9170_MAC_CAM_AP; 326 cam_mode |= AR9170_MAC_CAM_AP;
327 327
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
index 858e58dfc4dc..18554ab76733 100644
--- a/drivers/net/wireless/ath/carl9170/main.c
+++ b/drivers/net/wireless/ath/carl9170/main.c
@@ -616,10 +616,12 @@ static int carl9170_op_add_interface(struct ieee80211_hw *hw,
616 616
617 goto unlock; 617 goto unlock;
618 618
619 case NL80211_IFTYPE_MESH_POINT:
619 case NL80211_IFTYPE_AP: 620 case NL80211_IFTYPE_AP:
620 if ((vif->type == NL80211_IFTYPE_STATION) || 621 if ((vif->type == NL80211_IFTYPE_STATION) ||
621 (vif->type == NL80211_IFTYPE_WDS) || 622 (vif->type == NL80211_IFTYPE_WDS) ||
622 (vif->type == NL80211_IFTYPE_AP)) 623 (vif->type == NL80211_IFTYPE_AP) ||
624 (vif->type == NL80211_IFTYPE_MESH_POINT))
623 break; 625 break;
624 626
625 err = -EBUSY; 627 err = -EBUSY;
diff --git a/drivers/net/wireless/ath/carl9170/rx.c b/drivers/net/wireless/ath/carl9170/rx.c
index 6f6a34155667..b813f43061f5 100644
--- a/drivers/net/wireless/ath/carl9170/rx.c
+++ b/drivers/net/wireless/ath/carl9170/rx.c
@@ -206,6 +206,7 @@ void carl9170_handle_command_response(struct ar9170 *ar, void *buf, u32 len)
206 206
207 case NL80211_IFTYPE_AP: 207 case NL80211_IFTYPE_AP:
208 case NL80211_IFTYPE_ADHOC: 208 case NL80211_IFTYPE_ADHOC:
209 case NL80211_IFTYPE_MESH_POINT:
209 carl9170_update_beacon(ar, true); 210 carl9170_update_beacon(ar, true);
210 break; 211 break;
211 212