From patchwork Fri Aug 11 13:41:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amitkumar Karwar X-Patchwork-Id: 9895973 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 82AA660351 for ; Fri, 11 Aug 2017 13:47:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 73D6A28BFB for ; Fri, 11 Aug 2017 13:47:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 68CBA28C32; Fri, 11 Aug 2017 13:47:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2D6AC28C3B for ; Fri, 11 Aug 2017 13:47:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753316AbdHKNqX (ORCPT ); Fri, 11 Aug 2017 09:46:23 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:33857 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752985AbdHKNqU (ORCPT ); Fri, 11 Aug 2017 09:46:20 -0400 Received: by mail-pf0-f196.google.com with SMTP id t86so3539590pfe.1 for ; Fri, 11 Aug 2017 06:46:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=wvVzB+BcChwd8mWQjTx8NuM1E2EQ/4SWJEmXWAjhTJk=; b=JUq4IuRdGd1hfy5aTq4/ehX5qH/2UBOis6BwuYlYkHZvR7upj8sjicnDEhp8bDElXN 3g7fCbU/GuS1mUR683Q9ntHVQnetIBtHSFJO2oT1y4sk5NTDg2K7BIE67qNvnh6h1TVQ KjDQfOCeRrmwn3iW2YGmMB7t5mdo7udGn5zfP9JD29/P0pmW1NVybODV4KuEcZNYYAVG hXIhDBAZoBPNa+1+57pT/DO/Ywz2QVJL47Ek7XjIkJCwtBkl/9a50GuSSgeYy3Ae97DF JO6WqykZO8aiooe9/z8VFLr0QfTnZK2tpVsNCTqd4DvGRBQlphRNqEQtfwgJFupHbO6V Kmvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=wvVzB+BcChwd8mWQjTx8NuM1E2EQ/4SWJEmXWAjhTJk=; b=PP/6Npd7nG4t41uFw0DTx4kOdj5NuzWHxib7Y2D3DYCUSKHRQNPdrfQhJ/WPOEUDCe 8TLUy2ChEFtimN0+KACF15tLP2uml8IEQi1IoXRhtiUovHur0PhX2/at+Z1Fwd7SJMPz SR6FX8S1tq7uLvf+yp1D+huDfzzh9/FtP53jr1EuJ8EOYl2MQpuhKxP1g7diVfo3eCG4 wOvTtOASSzoGQlivJ4f0jir0rUBZKtNp1xb/pFy9pX1S99aPmVdqTbH3uuHPoggVf/J3 WBW4raHFL1M5NgyrSG3Pr21zrUXoYj/yIP9aTTdLtSdJR/WNUgaWZEJjANKFSxw2nZi7 RGxQ== X-Gm-Message-State: AHYfb5ht6lNd+PKv8vxHWYWYFjqOe76jH0odKFNzw/Fn2S8aOcqO2/lP FGk9fr28yLg+dg== X-Received: by 10.99.143.11 with SMTP id n11mr15823339pgd.145.1502459179146; Fri, 11 Aug 2017 06:46:19 -0700 (PDT) Received: from cpu185.redpinesignals.com ([203.196.161.90]) by smtp.gmail.com with ESMTPSA id o125sm2925492pfg.32.2017.08.11.06.46.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 11 Aug 2017 06:46:18 -0700 (PDT) From: Amitkumar Karwar To: Kalle Valo Cc: linux-wireless@vger.kernel.org, Amitkumar Karwar , Prameela Rani Garnepudi Subject: [PATCH 06/11] rsi: handle station disconnection in AP mode Date: Fri, 11 Aug 2017 19:11:24 +0530 Message-Id: <1502458889-9690-7-git-send-email-amitkarwar@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1502458889-9690-1-git-send-email-amitkarwar@gmail.com> References: <1502458889-9690-1-git-send-email-amitkarwar@gmail.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Prameela Rani Garnepudi When sta_remove of mac80211 is called, driver iterates through list of existing stations to get the station id. Then peer notify is prepared and send to firmare. Signed-off-by: Prameela Rani Garnepudi Signed-off-by: Amitkumar Karwar --- drivers/net/wireless/rsi/rsi_91x_mac80211.c | 57 +++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/drivers/net/wireless/rsi/rsi_91x_mac80211.c b/drivers/net/wireless/rsi/rsi_91x_mac80211.c index cf86162..6eb93ad 100644 --- a/drivers/net/wireless/rsi/rsi_91x_mac80211.c +++ b/drivers/net/wireless/rsi/rsi_91x_mac80211.c @@ -1255,21 +1255,56 @@ static int rsi_mac80211_sta_remove(struct ieee80211_hw *hw, { struct rsi_hw *adapter = hw->priv; struct rsi_common *common = adapter->priv; + struct ieee80211_bss_conf *bss = &vif->bss_conf; + struct rsi_sta *rsta; + + print_hex_dump(KERN_INFO, "Station Remove: ", DUMP_PREFIX_OFFSET, + 16, 1, sta->addr, ETH_ALEN, 0); mutex_lock(&common->mutex); - /* Resetting all the fields to default values */ - common->bitrate_mask[NL80211_BAND_2GHZ] = 0; - common->bitrate_mask[NL80211_BAND_5GHZ] = 0; - common->min_rate = 0xffff; - common->vif_info[0].is_ht = false; - common->vif_info[0].sgi = false; - common->vif_info[0].seq_start = 0; - common->secinfo.ptk_cipher = 0; - common->secinfo.gtk_cipher = 0; + if (vif->type == NL80211_IFTYPE_AP) { + u8 sta_idx, cnt; - rsi_send_rx_filter_frame(common, 0); - + /* Send peer notify to device */ + rsi_dbg(INFO_ZONE, "Indicate bss status to device\n"); + for (sta_idx = 0; sta_idx < common->max_stations; sta_idx++) { + rsta = &common->stations[sta_idx]; + + if (!rsta->sta) + continue; + if (!memcmp(rsta->sta->addr, sta->addr, ETH_ALEN)) { + rsi_inform_bss_status(common, AP_OPMODE, 0, + sta->addr, sta->wme, + sta->aid, sta, sta_idx); + rsta->sta = NULL; + rsta->sta_id = -1; + for (cnt = 0; cnt < IEEE80211_NUM_TIDS; cnt++) + rsta->start_tx_aggr[cnt] = false; + if (common->num_stations > 0) + common->num_stations--; + break; + } + } + if (sta_idx >= common->max_stations) + rsi_dbg(ERR_ZONE, "%s: No station found\n", __func__); + } + + if (vif->type == NL80211_IFTYPE_STATION) { + /* Resetting all the fields to default values */ + memcpy((u8 *)bss->bssid, (u8 *)sta->addr, ETH_ALEN); + bss->qos = sta->wme; + common->bitrate_mask[NL80211_BAND_2GHZ] = 0; + common->bitrate_mask[NL80211_BAND_5GHZ] = 0; + common->min_rate = 0xffff; + common->vif_info[0].is_ht = false; + common->vif_info[0].sgi = false; + common->vif_info[0].seq_start = 0; + common->secinfo.ptk_cipher = 0; + common->secinfo.gtk_cipher = 0; + if (!common->iface_down) + rsi_send_rx_filter_frame(common, 0); + } mutex_unlock(&common->mutex); return 0;