From patchwork Fri Apr 10 13:32:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= X-Patchwork-Id: 1269082 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-silabs-onmicrosoft-com header.b=Y3Q+dqX/; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48zJqm10SMz9sTG for ; Fri, 10 Apr 2020 23:33:24 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726826AbgDJNdT (ORCPT ); Fri, 10 Apr 2020 09:33:19 -0400 Received: from mail-dm6nam12on2082.outbound.protection.outlook.com ([40.107.243.82]:31903 "EHLO NAM12-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726736AbgDJNdK (ORCPT ); Fri, 10 Apr 2020 09:33:10 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nwQDGfMX4PsUqgJbqstIquk6jnhTzUV9dqaaPW6sxPau8hzzt4+nyOxt5YcFacfR4OwhpO+3u4HXqbfvohfhv4ui9YXMTRQ1eu1Y4ux2fRYlpEUhrR9tJNHo2iYsD9dz24w5DFIGqsdcZwA2IC5sntIz1jb5udDnGSiLwboK4mcOLaukxFmHBZ8ZzaxGX821Bf0va/WZ3H6x5dAz1A8prB9UxbmntmP3uW3u9rBffHtt1vZRL3gkOnataIgTlX93oAxQcQIxXWQSOPEsp4d06mIK0nEx8zgCqDQqVZMqPNP61KUONqLRBjJKuMORJU5IZP0OHOUrkR6wE2Ovdx+JWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DTWwGJH09pN8XlCnBCa0KrZ764zg9F0XkewSiHFKMqk=; b=M9uQ382M+U+mpmCls03w6GbOszoqD98oC1wvtkEmNu7Wq+6iXE7TZdsuOyi9+zA0AjTSMViLkGbIu8qo1+0xsub0hGPgqQooET4cTnZe0+J4xriopqR8lp31p4Ba68Sq5pP/lwV/fQ6Iq+xhIWuMz2NR2IvTJi1yyCno3Gxvp+D4JlLG73kb391ppri3mMs2mATnv/t7/7nLHnU1n79CJvqSiwM1ljjShrL7MjLVO1MhhKVlZBvBLfofiz3xquYYol+sz3ehdj9ZEr9eP7uhtq+mtpPymmDFg+BJjcG14kHsRXLJlYxD2BMSZ1zHiXEt9rwDsQGJgWZyieCyox0h4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DTWwGJH09pN8XlCnBCa0KrZ764zg9F0XkewSiHFKMqk=; b=Y3Q+dqX/YyBK1sEaX/xp8ZXnn9YW9CqXUSACSivxhMtVfq5gNalJsOvNx529npiSeK64lIRf4QBoMSa0ZN1m/7M59R2VAFGLqM3w6kKbgZeD+vocoyS2ptEekVmcGnpUlxsOl8q3YEhBd9fb+u4iavjfxkjtgc28FG7Fo/TactA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; Received: from MN2PR11MB4063.namprd11.prod.outlook.com (2603:10b6:208:13f::22) by MN2PR11MB4398.namprd11.prod.outlook.com (2603:10b6:208:18b::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.20; Fri, 10 Apr 2020 13:33:07 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::3d0a:d9ac:3df4:8b1]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::3d0a:d9ac:3df4:8b1%6]) with mapi id 15.20.2878.021; Fri, 10 Apr 2020 13:33:06 +0000 From: Jerome Pouiller To: devel@driverdev.osuosl.org, linux-wireless@vger.kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= Subject: [PATCH 04/19] staging: wfx: implement start_ap/stop_ap Date: Fri, 10 Apr 2020 15:32:24 +0200 Message-Id: <20200410133239.438347-5-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200410133239.438347-1-Jerome.Pouiller@silabs.com> References: <20200410133239.438347-1-Jerome.Pouiller@silabs.com> X-ClientProxiedBy: DM5PR15CA0056.namprd15.prod.outlook.com (2603:10b6:3:ae::18) To MN2PR11MB4063.namprd11.prod.outlook.com (2603:10b6:208:13f::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (2a01:e35:2435:66a0:1265:30ff:fefd:6e7f) by DM5PR15CA0056.namprd15.prod.outlook.com (2603:10b6:3:ae::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Fri, 10 Apr 2020 13:33:04 +0000 X-Mailer: git-send-email 2.25.1 X-Originating-IP: [2a01:e35:2435:66a0:1265:30ff:fefd:6e7f] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 482c5beb-2b49-4029-1907-08d7dd53b3cf X-MS-TrafficTypeDiagnostic: MN2PR11MB4398: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:873; X-Forefront-PRVS: 0369E8196C X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR11MB4063.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10009020)(366004)(346002)(396003)(136003)(39850400004)(376002)(107886003)(81156014)(54906003)(8676002)(86362001)(1076003)(6666004)(8936002)(4326008)(52116002)(66574012)(7696005)(316002)(66556008)(66946007)(186003)(478600001)(2906002)(6486002)(2616005)(66476007)(16526019)(5660300002)(36756003); DIR:OUT; SFP:1101; Received-SPF: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: s3K9QEfDdYRK+o4WItPcxLdt2marRT15Hp3SzLTXJ/l5Mo7wLTZ39p1wxUXhxUhcHoPDkxSMpphVUXFe+qdXU2I6N2kHyzMw/vxUezPO5DIzlyinhbVruE1Eb6kGZXFBpBF5r0PEeJNCPVpwUWuEutOsztNdFWxCbBfXP50tS1AoLaJjuV2LRnbv434h3Hpk4iaxvAsbXVmBuYpBgpzgeyPbPlk/XURr+9VHycL0wgmGKFCA3WWb98yxwa4Boy0pRen7T9qWM4HuAtnFEyWcqhilS2hsrCIqkmKopzupOMCKmStwMFqHnp6zRhXV/OFW/iyCW3h5IGrrs2e7wsfbmG5sUTFGemNz+T66OcQmmFRuIcAwqRjcPHBqpb91tkp+/3/N1Mr4lsYuyRYkqmatX+9Q0Em5JLfk3kZ+h127GSqeYawkq5K2fcltQgE3TCR8 X-MS-Exchange-AntiSpam-MessageData: lO1oduP9R8FxYxxH1cT0Bp+sXvjcEUsSUlvZTHikajZ++0tq/XSardirj8Jxy6q3VtAL7AYleyxHPJn9bohFIYc+ntH983qLJ36R7JyGbDyy8dg/YPp3x1ZA90u+iTzus1Q/16/iMbrzmVsvKHTaIlBLy+n+1L67yQ+xTgf3YGPo2tkjW9vY0qg6xfzUORRLfG/iXxcPcT7YB5L7JSOCrQ== X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 482c5beb-2b49-4029-1907-08d7dd53b3cf X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2020 13:33:06.8000 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QjOiiiYJ4nMeq+6U2/Ku/oE3wvJtamBhE/uTy4hH/xiZ+GFec1WcIgPd7NWQxQcd22sx4nXTFdum9lLw1+ZyaQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4398 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jérôme Pouiller Currently, wfx_bss_info_changed() check interface status changes and guess when the pattern match with an AP start and AP stop (through wfx_update_beaconing()). It is far easier to rely on start_ap and stop_ap callbacks provided by mac80211. wfx_bss_info_changed() keeps only the responsibility of updating the frame templates. Signed-off-by: Jérôme Pouiller --- drivers/staging/wfx/main.c | 2 ++ drivers/staging/wfx/sta.c | 71 ++++++++++++++------------------------ drivers/staging/wfx/sta.h | 2 ++ 3 files changed, 30 insertions(+), 45 deletions(-) diff --git a/drivers/staging/wfx/main.c b/drivers/staging/wfx/main.c index 1e9f6da75024..b459fac928fd 100644 --- a/drivers/staging/wfx/main.c +++ b/drivers/staging/wfx/main.c @@ -136,6 +136,8 @@ static const struct ieee80211_ops wfx_ops = { .conf_tx = wfx_conf_tx, .hw_scan = wfx_hw_scan, .cancel_hw_scan = wfx_cancel_hw_scan, + .start_ap = wfx_start_ap, + .stop_ap = wfx_stop_ap, .sta_add = wfx_sta_add, .sta_remove = wfx_sta_remove, .set_tim = wfx_set_tim, diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c index 36e55e32da2b..92bf317b57bb 100644 --- a/drivers/staging/wfx/sta.c +++ b/drivers/staging/wfx/sta.c @@ -575,40 +575,6 @@ int wfx_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, return 0; } -static int wfx_start_ap(struct wfx_vif *wvif) -{ - int ret; - - wvif->beacon_int = wvif->vif->bss_conf.beacon_int; - ret = hif_start(wvif, &wvif->vif->bss_conf, wvif->channel); - if (ret) - return ret; - ret = wfx_upload_keys(wvif); - if (ret) - return ret; - if (wvif_count(wvif->wdev) <= 1) - hif_set_block_ack_policy(wvif, 0xFF, 0xFF); - wvif->state = WFX_STATE_AP; - wfx_update_filtering(wvif); - return 0; -} - -static int wfx_update_beaconing(struct wfx_vif *wvif) -{ - if (wvif->vif->type != NL80211_IFTYPE_AP) - return 0; - if (wvif->state == WFX_STATE_AP && - wvif->beacon_int == wvif->vif->bss_conf.beacon_int) - return 0; - wfx_tx_lock_flush(wvif->wdev); - hif_reset(wvif, false); - wfx_tx_policy_init(wvif); - wvif->state = WFX_STATE_PASSIVE; - wfx_start_ap(wvif); - wfx_tx_unlock(wvif->wdev); - return 0; -} - static int wfx_upload_ap_templates(struct wfx_vif *wvif) { struct sk_buff *skb; @@ -634,6 +600,30 @@ static int wfx_upload_ap_templates(struct wfx_vif *wvif) return 0; } +int wfx_start_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv; + + hif_start(wvif, &vif->bss_conf, wvif->channel); + wfx_upload_keys(wvif); + if (wvif_count(wvif->wdev) <= 1) + hif_set_block_ack_policy(wvif, 0xFF, 0xFF); + wvif->state = WFX_STATE_AP; + wfx_update_filtering(wvif); + wfx_upload_ap_templates(wvif); + wfx_fwd_probe_req(wvif, false); + return 0; +} + +void wfx_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv; + + hif_reset(wvif, false); + wfx_tx_policy_init(wvif); + wvif->state = WFX_STATE_PASSIVE; +} + static void wfx_join_finalize(struct wfx_vif *wvif, struct ieee80211_bss_conf *info) { @@ -709,16 +699,9 @@ void wfx_bss_info_changed(struct ieee80211_hw *hw, } } - if (changed & BSS_CHANGED_BEACON || - changed & BSS_CHANGED_AP_PROBE_RESP || - changed & BSS_CHANGED_BSSID || - changed & BSS_CHANGED_SSID || - changed & BSS_CHANGED_IBSS) { - wvif->beacon_int = info->beacon_int; - wfx_update_beaconing(wvif); + if (changed & BSS_CHANGED_AP_PROBE_RESP || + changed & BSS_CHANGED_BEACON) wfx_upload_ap_templates(wvif); - wfx_fwd_probe_req(wvif, false); - } if (changed & BSS_CHANGED_BEACON_ENABLED && wvif->state != WFX_STATE_IBSS) @@ -742,8 +725,6 @@ void wfx_bss_info_changed(struct ieee80211_hw *hw, if (changed & BSS_CHANGED_BEACON_INT) { if (info->ibss_joined) do_join = true; - else if (wvif->state == WFX_STATE_AP) - wfx_update_beaconing(wvif); } if (changed & BSS_CHANGED_BSSID) diff --git a/drivers/staging/wfx/sta.h b/drivers/staging/wfx/sta.h index a0c5153e5272..6a4b91a47f5b 100644 --- a/drivers/staging/wfx/sta.h +++ b/drivers/staging/wfx/sta.h @@ -54,6 +54,8 @@ void wfx_configure_filter(struct ieee80211_hw *hw, unsigned int changed_flags, int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif); void wfx_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif); +int wfx_start_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif); +void wfx_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif); int wfx_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue, const struct ieee80211_tx_queue_params *params); void wfx_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,