From patchwork Fri Feb 8 14:53:42 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arend van Spriel X-Patchwork-Id: 2116311 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id CAACC3FCA4 for ; Fri, 8 Feb 2013 14:56:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760221Ab3BHO4u (ORCPT ); Fri, 8 Feb 2013 09:56:50 -0500 Received: from mms1.broadcom.com ([216.31.210.17]:4643 "EHLO mms1.broadcom.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760208Ab3BHO4n (ORCPT ); Fri, 8 Feb 2013 09:56:43 -0500 Received: from [10.9.208.57] by mms1.broadcom.com with ESMTP (Broadcom SMTP Relay (Email Firewall v6.5)); Fri, 08 Feb 2013 06:54:25 -0800 X-Server-Uuid: 06151B78-6688-425E-9DE2-57CB27892261 Received: from IRVEXCHSMTP1.corp.ad.broadcom.com (10.9.207.51) by IRVEXCHCAS08.corp.ad.broadcom.com (10.9.208.57) with Microsoft SMTP Server (TLS) id 14.1.355.2; Fri, 8 Feb 2013 06:56:32 -0800 Received: from mail-sj1-12.sj.broadcom.com (10.10.10.20) by IRVEXCHSMTP1.corp.ad.broadcom.com (10.9.207.51) with Microsoft SMTP Server id 14.1.355.2; Fri, 8 Feb 2013 06:56:31 -0800 Received: from linux-e6410-1 (unknown [10.176.68.151]) by mail-sj1-12.sj.broadcom.com (Postfix) with ESMTP id 73649207D9; Fri, 8 Feb 2013 06:56:28 -0800 (PST) Received: from arend by linux-e6410-1 with local (Exim 4.80) ( envelope-from ) id 1U3pNL-0003JB-Db; Fri, 08 Feb 2013 15:56:27 +0100 From: "Arend van Spriel" To: "John W. Linville" cc: "Linux Wireless List" , "Hante Meuleman" , "Arend van Spriel" Subject: [PATCH 07/27] brcmfmac: update escan for multiple bss and simplify. Date: Fri, 8 Feb 2013 15:53:42 +0100 Message-ID: <1360335242-12608-8-git-send-email-arend@broadcom.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1360335242-12608-1-git-send-email-arend@broadcom.com> References: <1360335242-12608-1-git-send-email-arend@broadcom.com> MIME-Version: 1.0 X-WSS-ID: 7D0BCE2B1YS2178492-01-01 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Hante Meuleman Add support for scanning on non primary netdev (p2p) and simplify the p2p scanning preparation. Reviewed-by: Arend Van Spriel Reviewed-by: Pieter-Paul Giesberts Signed-off-by: Hante Meuleman Signed-off-by: Arend van Spriel --- drivers/net/wireless/brcm80211/brcmfmac/p2p.c | 92 +++----------------- drivers/net/wireless/brcm80211/brcmfmac/p2p.h | 3 +- .../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 8 +- 3 files changed, 19 insertions(+), 84 deletions(-) diff --git a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c index fff5722..aef0287 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c @@ -91,11 +91,6 @@ struct brcmf_p2p_scan_le { }; }; -static struct brcmf_cfg80211_vif *p2p_discover_vif(struct brcmf_p2p_info *p2p) -{ - return p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif; -} - /** * brcmf_p2p_set_firmware() - prepare firmware for peer-to-peer operation. * @@ -195,34 +190,6 @@ static s32 brcmf_p2p_set_discover_state(struct brcmf_if *ifp, u8 state, } /** - * brcmf_p2p_discover_disable_search() - reset discover state. - * - * @p2p: P2P specific data. - * - * Reset the discover state to @WL_P2P_DISC_ST_SCAN. Returns 0 on success. - */ -static s32 brcmf_p2p_discover_disable_search(struct brcmf_p2p_info *p2p) -{ - struct brcmf_cfg80211_vif *vif = p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif; - struct brcmf_p2p_disc_st_le discovery_mode; - int ret; - - /* - * vif presence indicates discovery is initialized. - */ - if (!vif) - return -ENODEV; - - ret = brcmf_fil_bsscfg_data_get(vif->ifp, "p2p_state", - &discovery_mode, - sizeof(discovery_mode)); - if (!ret && discovery_mode.state != WL_P2P_DISC_ST_SCAN) - ret = brcmf_p2p_set_discover_state(vif->ifp, - WL_P2P_DISC_ST_SCAN, 0, 0); - return ret; -} - -/** * brcmf_p2p_init_discovery() - enable discovery in the firmware. * * @p2p: P2P specific data. @@ -376,32 +343,6 @@ exit: } /** - * brcmf_p2p_configure_probereq() - Configure probe request data. - * - * @p2p: P2P specific data. - * @ie: buffer containing information elements. - * @ie_len: length of @ie buffer. - * - */ -static int brcmf_p2p_configure_probereq(struct brcmf_p2p_info *p2p, - const u8 *ie, u32 ie_len) -{ - struct brcmf_cfg80211_vif *vif; - s32 err = 0; - - brcmf_dbg(TRACE, "enter\n"); - vif = p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif; - - err = brcmf_vif_set_mgmt_ie(vif, BRCMF_VNDR_IE_PRBREQ_FLAG, - ie, ie_len); - - if (err < 0) - brcmf_err("set probreq ie occurs error %d\n", err); - - return err; -} - -/* * brcmf_p2p_escan() - initiate a P2P scan. * * @p2p: P2P specific data. @@ -621,12 +562,14 @@ exit: * * @wiphy: wiphy device. * @request: scan request from cfg80211. + * @vif: vif on which scan request is to be executed. * * Prepare the scan appropriately for type of scan requested. Overrides the * escan .run() callback for peer-to-peer scanning. */ int brcmf_p2p_scan_prep(struct wiphy *wiphy, - struct cfg80211_scan_request *request) + struct cfg80211_scan_request *request, + struct brcmf_cfg80211_vif *vif) { struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); struct brcmf_p2p_info *p2p = &cfg->p2p; @@ -644,31 +587,16 @@ int brcmf_p2p_scan_prep(struct wiphy *wiphy, brcmf_dbg(INFO, "P2P: GO_NEG_PHASE status cleared\n"); err = brcmf_p2p_enable_discovery(p2p); - if (err == 0) - err = brcmf_p2p_configure_probereq(p2p, request->ie, - request->ie_len); + if (err) + return err; - /* - * override .run_escan() callback. - */ - cfg->escan_info.run = brcmf_p2p_run_escan; - } else { - /* - * legacy scan trigger - * So, we have to disable p2p discovery if p2p discovery is on - */ - (void)brcmf_p2p_discover_disable_search(p2p); + vif = p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif; - /* - * clear p2p vendor ies for probe request set by - * previous p2p related scan(s). - */ - if (p2p_discover_vif(p2p)) - err = brcmf_vif_set_mgmt_ie(p2p_discover_vif(p2p), - BRCMF_VNDR_IE_PRBREQ_FLAG, - request->ie, - request->ie_len); + /* override .run_escan() callback. */ + cfg->escan_info.run = brcmf_p2p_run_escan; } + err = brcmf_vif_set_mgmt_ie(vif, BRCMF_VNDR_IE_PRBREQ_FLAG, + request->ie, request->ie_len); return err; } diff --git a/drivers/net/wireless/brcm80211/brcmfmac/p2p.h b/drivers/net/wireless/brcm80211/brcmfmac/p2p.h index df93272..1f97afd 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.h @@ -111,7 +111,8 @@ int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev); int brcmf_p2p_start_device(struct wiphy *wiphy, struct wireless_dev *wdev); void brcmf_p2p_stop_device(struct wiphy *wiphy, struct wireless_dev *wdev); int brcmf_p2p_scan_prep(struct wiphy *wiphy, - struct cfg80211_scan_request *request); + struct cfg80211_scan_request *request, + struct brcmf_cfg80211_vif *vif); int brcmf_p2p_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev, struct ieee80211_channel *channel, unsigned int duration, u64 *cookie); diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c index d792c3b..c57c1db 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c @@ -805,6 +805,12 @@ brcmf_cfg80211_escan(struct wiphy *wiphy, struct net_device *ndev, return -EAGAIN; } + /* If scan req comes for p2p0, send it over primary I/F */ + if (ifp->vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif) { + ifp = cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp; + ndev = ifp->ndev; + } + /* Arm scan timeout timer */ mod_timer(&cfg->escan_timeout, jiffies + WL_ESCAN_TIMER_INTERVAL_MS * HZ / 1000); @@ -824,7 +830,7 @@ brcmf_cfg80211_escan(struct wiphy *wiphy, struct net_device *ndev, set_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status); if (escan_req) { cfg->escan_info.run = brcmf_run_escan; - err = brcmf_p2p_scan_prep(wiphy, request); + err = brcmf_p2p_scan_prep(wiphy, request, ifp->vif); if (err) goto scan_out;