All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hauke Mehrtens <hauke@hauke-m.de>
To: linville@tuxdriver.com
Cc: arend@broadcom.com, linux-wireless@vger.kernel.org,
	brcm80211-dev-list@broadcom.com,
	Hauke Mehrtens <hauke@hauke-m.de>
Subject: [PATCH 15/15] brcmsmac: add support for adhoc mode
Date: Sun, 24 Mar 2013 01:46:03 +0100	[thread overview]
Message-ID: <1364085963-25940-16-git-send-email-hauke@hauke-m.de> (raw)
In-Reply-To: <1364085963-25940-1-git-send-email-hauke@hauke-m.de>

This adds adhoc mode support to brcmsmac.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c |   12 ++++++++----
 drivers/net/wireless/brcm80211/brcmsmac/main.c        |   11 +++++++++++
 drivers/net/wireless/brcm80211/brcmsmac/pub.h         |    1 +
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
index 445de66..0b3f8d9 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
@@ -357,11 +357,12 @@ brcms_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 {
 	struct brcms_info *wl = hw->priv;
 
-	/* Just STA and AP for now */
+	/* Just STA, AP and ADHOC for now */
 	if (vif->type != NL80211_IFTYPE_STATION &&
-	    vif->type != NL80211_IFTYPE_AP) {
+	    vif->type != NL80211_IFTYPE_AP &&
+	    vif->type != NL80211_IFTYPE_ADHOC) {
 		brcms_err(wl->wlc->hw->d11core,
-			  "%s: Attempt to add type %d, only STA and AP for now\n",
+			  "%s: Attempt to add type %d, only STA, AP and AdHoc for now\n",
 			  __func__, vif->type);
 		return -EOPNOTSUPP;
 	}
@@ -374,6 +375,8 @@ brcms_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 	else if (vif->type == NL80211_IFTYPE_AP)
 		brcms_c_start_ap(wl->wlc, vif->addr, vif->bss_conf.bssid,
 				 vif->bss_conf.ssid, vif->bss_conf.ssid_len);
+	else if (vif->type == NL80211_IFTYPE_ADHOC)
+		brcms_c_start_adhoc(wl->wlc, vif->addr);
 	spin_unlock_bh(&wl->lock);
 
 	return 0;
@@ -1056,7 +1059,8 @@ static int ieee_hw_init(struct ieee80211_hw *hw)
 	/* channel change time is dependent on chip and band  */
 	hw->channel_change_time = 7 * 1000;
 	hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
-				     BIT(NL80211_IFTYPE_AP);
+				     BIT(NL80211_IFTYPE_AP) |
+				     BIT(NL80211_IFTYPE_ADHOC);
 
 	/*
 	 * deactivate sending probe responses by ucude, because this will
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 7825202..59d4384 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -2186,6 +2186,14 @@ void brcms_c_start_ap(struct brcms_c_info *wlc, u8 *addr, const u8 *bssid,
 	brcms_b_mctrl(wlc->hw, MCTL_AP | MCTL_INFRA, MCTL_AP | MCTL_INFRA);
 }
 
+void brcms_c_start_adhoc(struct brcms_c_info *wlc, u8 *addr)
+{
+	memcpy(wlc->pub->cur_etheraddr, addr, sizeof(wlc->pub->cur_etheraddr));
+	wlc->bsscfg->type = BRCMS_TYPE_ADHOC;
+
+	brcms_b_mctrl(wlc->hw, MCTL_AP | MCTL_INFRA, 0);
+}
+
 /* Initialize GPIOs that are controlled by D11 core */
 static void brcms_c_gpio_init(struct brcms_c_info *wlc)
 {
@@ -3077,6 +3085,9 @@ static bool brcms_c_ps_allowed(struct brcms_c_info *wlc)
 	if (wlc->bsscfg->type == BRCMS_TYPE_AP)
 		return false;
 
+	if (wlc->bsscfg->type == BRCMS_TYPE_ADHOC)
+		return false;
+
 	return true;
 }
 
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pub.h b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
index e3bdccf..d36ea5e 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/pub.h
+++ b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
@@ -334,6 +334,7 @@ extern bool brcms_c_tx_flush_completed(struct brcms_c_info *wlc);
 extern void brcms_c_start_station(struct brcms_c_info *wlc, u8 *addr);
 extern void brcms_c_start_ap(struct brcms_c_info *wlc, u8 *addr,
 			     const u8 *bssid, u8 *ssid, size_t ssid_len);
+extern void brcms_c_start_adhoc(struct brcms_c_info *wlc, u8 *addr);
 extern void brcms_c_update_beacon(struct brcms_c_info *wlc);
 extern void brcms_c_set_new_beacon(struct brcms_c_info *wlc,
 				   struct sk_buff *beacon, u16 tim_offset,
-- 
1.7.10.4


      parent reply	other threads:[~2013-03-24  0:48 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-24  0:45 [PATCH 00/15] brcmsmac: add AP mode Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 01/15] brcmsmac: implement ieee80211_ops get_tsf and set_tsf Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 02/15] brcmsmac: add interface type to brcms_bss_cfg Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 03/15] brcmsmac: remove brcms_bss_cfg->BSS Hauke Mehrtens
2013-06-06 12:05   ` Arend van Spriel
2013-06-12 13:46     ` Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 04/15] brcmsmac: remove brcms_bss_cfg->associated Hauke Mehrtens
2013-05-18 19:53   ` REGRESSION: v3.10-rc1: " Arend van Spriel
2013-05-18 23:34     ` Jonas Gorski
2013-05-19  8:31       ` Arend van Spriel
2013-05-19  8:21     ` Arend van Spriel
2013-05-19 10:24       ` Hauke Mehrtens
2013-05-28 20:05         ` Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 05/15] brcmsmac: remove brcms_bss_cfg->enable Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 06/15] brcmsmac: remove brcms_bss_cfg->up Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 07/15] brcmsmac: remove brcms_bss_cfg->cur_etheraddr Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 08/15] brcmsmac: remove brcms_pub->bcmerr Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 09/15] brcmsmac: write beacon period to hardware Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 10/15] brcmsmac: add beacon template support Hauke Mehrtens
2013-03-24  0:45 ` [PATCH 11/15] brcmsmac: react on changing SSID Hauke Mehrtens
2013-03-24  0:46 ` [PATCH 12/15] brcmsmac: add support for probe response template Hauke Mehrtens
2013-03-24  0:46 ` [PATCH 13/15] brcmsmac: deactivate ucode sending probe responses Hauke Mehrtens
2013-03-24  0:46 ` [PATCH 14/15] brcmsmac: activate AP support Hauke Mehrtens
2013-03-24  0:46 ` Hauke Mehrtens [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1364085963-25940-16-git-send-email-hauke@hauke-m.de \
    --to=hauke@hauke-m.de \
    --cc=arend@broadcom.com \
    --cc=brcm80211-dev-list@broadcom.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.